Показать сообщение отдельно
Старый 21.03.2005, 14:28   #438
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Декомпилятор скриптов Готики

2TycoooN и другим:

Привожу две фактические ошибки по возвращаемым значениям (вернее отсутствию оных) оригинальных скриптов Готики 2 + аддон:
func int ZS_ShortZapped_Loop ()
{ *
* *if *(Npc_GetStateTime(self) > SPL_TIME_SHORTZAPPED)
* *{
* * * *B_StopShortZapped();
* * * *return LOOP_END;
* *};
* *return LOOP_CONTINUE;
};

FUNC INT DIA_Addon_ThiefOW_TooFar_Condition()
{
* *if (self.aivar[AIV_PARTYMEMBER] == TRUE)
* *{ *
* * * *if (C_DiegoTooFar(0))
* * * *{
* * * * * *if (Diego_TooFarComment == FALSE)
* * * * * *{
* * * * * * * *return TRUE;
* * * * * *};
* * * *}
* * * *else
* * * *{
* * * * * *Diego_TooFarComment = FALSE;
* * * *};
* *};
* *return FALSE;
};

Красным цветом добавлены правильные строки.
Остальные все ошибки с возвращаемыми значениями в этих скриптах скорее потенциальные (могут уйти во Внимания). Если я все сообщения по возвращаемым типам засуну во Внимания, то эти ошибки и им подобные будет практически не найти (необходимо будет перелопатить все Внимания). Я подумаю еще о более сложной проверке, чтобы добавить дополнительные градации по возвращаемым типам, всё-таки не хочется фактические ошибки совать во Внимания.

2Donate2005:
Реализовать это несложно, вся фишка заключается в логической обработке подобных ошибок, т.е. надо просмотреть все часто встречающиеся ошибки и варанты их исправления, а точнее вариант!
Это заблуждение. Вот часть общего алгоритма исправления (или выдачи варианта исправления) ошибки по возвращаемому значению:
1. Найдена ошибка - функция объявлена как возвращающая INT, внутри функции return(ы) отсутствуют. Это условие задачи.
2. Нужно фактически определить должна ли функция возвращать значение, если не должна то тип INT указан ложно, необходимо заменить на void. Алгоритм определения должна ли функция возвращать значение можешь написать сам, а потом поговорим о его реализации (если захочется).
3. Определили, что должно быть возвращаемое значение и надо записать его в конец функции, а какое? Алгоритм тоже можешь написать.
Это еще довольно частный вариант задачи, необходимо составить алгоритмы на все варианты, но я уверен, что их реализация (хотя и возможна), но, как по затратам времени так и по предложенному варианту исправления будет неэффективна - ошибку все равно исправлять человеку. Даже человек знающий скрипты не всегда может предложить правильное решение, над некоторыми ошибками приходиться долго думать.



Добавление от 03/21/05, в 13:48:13
 Декомпилятор V2.01 выложен на DiccuricAG

     - Все сообщения ошибок по неявным (скрытым) возвращаемым значениям функций
     переведены в категорию Внимания.
     - Кол-во ошибок до останова компилятора увеличено до 50 штук.

Теперь в категории ошибок по возвращаемым функциями значениям остались только фактические ошибки и неверные объявления функций с возвращаемым значением (тип функции должен быть void), это сделано для того,чтобы проверка скриптов на ошибки была полной. В оригинальных скриптах Готики 2 + аддон теперь насчитывается всего 33 ошибки разных типов, устранить которые не составит большого труда. Больше переделывать систему обработки ошибок в компиляторе не буду, если, конечно, не найдете новые ошибки, которые пока не обрабатываются.  ;)
Ответить с цитированием