[AGFC: Valley of Gothic] М:Декомпилятор скриптов Готики

Страница 11 из 31 « Первая 4567891011 1213141516171821 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 21.02.2005, 09:26   #401
Vam

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

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

2Dagot_Ur:
А ты больше нигде ничего подобного не замечал?
Чтобы заметить, надо сравнить кучу файлов (исходных и созданных компилятором) на правильность логических выражений, нет я этого не делал. Если тебя конкретно интересует последняя ошибка со скобками - то можно ускорить проверку так: ищем * *   !( во всех файлах декомпилированных скриптов (их не так и много, около 22), и сверяем логические выражения с оригиналом.
Ответить с цитированием
Старый 21.02.2005, 22:38   #402
Dagot_Ur
Строители Миртаны
Строители Миртаны
 
Регистрация: 25.05.2004
Сообщений: 3
Dagot_Ur вне форума

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

2Vam: А как тогда быть вот с этим:

func int DIA_Xardas_AWAY_Condition()
{
     if(!Npc_KnowsInfo(other,DIA_Xardas_TODO) && !Npc_KnowsInfo(other,DIA_Xardas_FirstEXIT) && (((Kapitel < 3))))
     {
           return TRUE;
     };
};

     if(!Npc_IsDead(Buster) && (((hero.guild == GIL_SLD) || (hero.guild == GIL_DJG))))
     {
           AI_Output(self,other,"DIA_Lee_DoAboutBennet_04_07 ");      //
     };

И точно ли, что ошибки со скобками имеют место быть только в проверках отрицанием?
Ответить с цитированием
Старый 22.02.2005, 09:41   #403
Vam

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

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

2Dagot_Ur:
Оба, приведенных тобой выражения, правильные, логика в них не нарушена, нарушение логики может быть
только в случае мной предварительно описанном.

И точно ли, что ошибки со скобками имеют место быть только в проверках отрицанием?
Да, ошибки со скобками могут быть только в таких местах.
Ответить с цитированием
Старый 07.03.2005, 17:03   #404
Vam

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

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

Декомпилятор V1.91 выложен на DiccuricAG

* * *- добавлена декомпиляция Демоверсии Готики 1, для этого необходимо
* * *использовать параметр -zgame:x с х = -1

Ответить с цитированием
Старый 07.03.2005, 17:10   #405
B_Wolf

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

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

2Vam:
Декомпилятор V1.91 выложен на DiccuricAG

    - добавлена декомпиляция Демоверсии Готики 1, для этого необходимо
    использовать параметр -zgame:x с х = -1
Очень полезная особенность для общеобразовательных целей...
Респект за оперативность :)
Ответить с цитированием
Старый 07.03.2005, 17:43   #406
Vam

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

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

2Donate2005 и другим
Сначала предлагаю соблюдать порядок:
1. Вопросы конкретно по Урокам скриптологии -> в соотв. тему.
2. Общие и разные вопросы по скриптам -> в тему Скриптинг в Готике.
3. По декомпилятору -> сюда.

Появились жалобы на декомпилятор, что возникают ошибки при декомпиляции (при компиляции их быть не может!!!), да, это возможно, но для их устранения мне необходима помощь всех, кто использует декомпилятор не только для изучения скриптов, но для переводов их и создания новых модов, т.е. помощь тех, кто заинтересован, что его продукт будет без глюков (я один не могу проработать все варианты).
Ошибки возможны в случае переопределенных типов, это самый вероятный их источник.
По этому поводу я много говорил в этой теме, всем заинтересованным советую перечитать ее заново.
Сейчас в декомпиляторе имеется возможноть облегчить эту задачу: если в ключе -zlog: поставить уровень сообщений на 9, то в лог файле зеленым цветом и со словами Потенциальный INT будут выданы все места возможных ошибок. Другое дело как их проверить и исправить - возможны варианты: проверять лучше (кто не особо хорошо разбирается в скриптах) сравнивая декомпилированные скрипты с исходными скриптами Готики 1 или 2, ну, и естественно , сообщать мне.

2Donate2005:

Миранду скачал и посмотрел, ошибка в файле C_PCIsInMyRoom
Фрагмент оригинала -
 * * *if ((self == owner) || (Wld_GetGuildAttitude( self.guild, portalowner ) == ATT_FRIENDLY) )
 * * *{  * * * * * *
 * * * * * *return 1;
 * * *}  * * *

а в твоем моде -
* * *if((self == 2165) || (Wld_GetGuildAttitude(self.guild,portalowner) == ATT_FRIENDLY))
* * *{
* * * * * *return 1;
* * *}

необходимо 2165 заменить на owner

Как устранить это в декомпиляторе буду думать!

ЗЫ: Если что либо непонятно по переопределенным типам и потенциальным ошибкам, лучше спросить не стесняясь, благо есть кому ответить!  ;)
Ответить с цитированием
Старый 07.03.2005, 19:04   #407
Donate2005

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

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

2Vam:
Большое спасибо! Ну как ты так быстро нашел такую ошибку?

Да, и ещё, можешь пояснить эту строку:
if ((self == owner) &#124;&#124; (Wld_GetGuildAttitude( self.guild, portalowner ) == ATT_FRIENDLY) )
Крнечно же я понимаю, что означает это условный опереатор, но все же хочется услышать мнение профессионала! ;)

Добавление от 03/07/05, в 18:24:56
2Vam:
А больше ошибок не было? Если были, то сообщи мне их я патч хочу сделать! ;)
Ответить с цитированием
Старый 07.03.2005, 20:05   #408
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Vam:
 - добавлена декомпиляция Демоверсии Готики 1, для этого необходимо использовать параметр -zgame:x с х = -1
Огромное Спасибо!

2Donate2005:
Если были, то сообщи мне их я патч хочу сделать!
Лучше выпусти как релиз и вложи шрифты (от Снежковской Г1 на первый случай) и будет ОК!
Ответить с цитированием
Старый 07.03.2005, 21:11   #409
Donate2005

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

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

2Pa:
Лучше выпусти как релиз и вложи шрифты (от Снежковской Г1 на первый случай) и будет ОК!
А чем плохи уже вложенные шрифты, по-моему достаточно красивые! ;)

Добавление от 03/07/05, в 20:23:44
2Pa:
Лучше выпусти как релиз и вложи шрифты (от Снежковской Г1 на первый случай) и будет ОК!
А чем плохи уже вложенные шрифты, по-моему достаточно красивые! ;)

Добавление от 03/07/05, в 20:25:04
2Pa:
Лучше выпусти как релиз и вложи шрифты (от Снежковской Г1 на первый случай) и будет ОК!
А чем плохи уже вложенные шрифты, по-моему достаточно красивые! ;)
Ответить с цитированием
Старый 07.03.2005, 21:45   #410
Vam

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

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

2Donate2005:
Ну, сказать, что я так быстро нашел ошибку, это неправильно, я нашел первое встретившееся несоответствие декомпилированных скриптов оригинальным. Сначала необходимо исправить, скомпилировать, затем проверить, действительно ли это та (наша) ошибка. При более детальном рассмотрении я, например, не нашел откуда вызывается данная функция (экзешником она тоже не вызывается), а это мне пока не ясно. А несоответствие нашел очень просто; при декомпиляции установил -zlog:9,s и первый "Потенциальный INT" проверил на соответствие оригинальным скриптам Готики 1, вот и все.
Комментировать приведенную строку не имеет смысла, комментировать нужно всю функцию:


// Данная функция проверяет, находится ли НПС self в своем помещении - возвращает TRUE, иначе возвращает FALSE.
func int C_PCIsInMyRoom()
{
* * *var C_Npc owner;
* * *var int portalowner;
* * *PrintDebugNpc(PD_ZS_FRAME,"C_PCIsInMyRoom");
* * * *// получить ссылку на НПС, которому принадлежит помещение
* * *owner = Wld_GetPlayerPortalOwner();
* * * *// получить номер гильдии, которой принадлежит помещение
* * *portalowner = Wld_GetPlayerPortalGuild();
* * * *// если помещение мое (т.е. принадлежит НПС self) или отношения между гильдиями НПС (self) и того НПС, которому принадлежит помещение дружественные
* * *if((self == owner) ¦¦ (Wld_GetGuildAttitude(self.guild,portalowner) == ATT_FRIENDLY))
* * *{
* * * * * *return 1;
* * *}
* * *else
* * *{
* * * * * *return 0;
* * *};
};

Ответить с цитированием
Старый 07.03.2005, 22:37   #411
Donate2005

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

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

2Vam:
Помоему это все-таки не та ошибка, так как непись все-равно молчит! :)
Спасибо за помощь! ;)

Добавление от 03/07/05, в 21:56:59
2Vam:
Только что проверил дикомпелятором (с 9 диаг. сообщениями) и заметил, что предуприждения зачастую ссылаются на несуществующие строки - это нормально? Может все-таки ты проверишь? :D
Ответить с цитированием
Старый 08.03.2005, 10:39   #412
Vam

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

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

2Donate2005:
Только что проверил дикомпелятором (с 9 диаг. сообщениями) и заметил, что предуприждения зачастую ссылаются на несуществующие строки - это нормально? Может все-таки ты проверишь?
Все строки существующие, просто ты их не в том файле ищешь, имя файла находится не перед строкой предупреждения, а после него. Об этом уже в теме говорилось, то же относится и к ошибкам при декомпиляции.
Ответить с цитированием
Старый 12.03.2005, 04:42   #413
Donate2005

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

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

2Vam:
Ну понятное дело! Но у меня точно нет этих строк!
Ну как, ты тестил Миранду на ошибки?
Ответить с цитированием
Старый 12.03.2005, 12:13   #414
Vam

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

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

2Donate2005:
Ну понятное дело! Но у меня точно нет этих строк!
Строки все должны быть, проверено много раз, может ты компилируешь одни скрипты, а строки ищешь в других, проверь!

Ну как, ты тестил Миранду на ошибки?
Нет, это я не делал, сейчас работаю над компилятором, чтобы он выявлял на стадии компиляции все синтаксические ошибки и проверял соответствие всех типов данных (это поможет всем!).
Ответить с цитированием
Старый 12.03.2005, 14:04   #415
Donate2005

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

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

2Vam:
(это поможет всем!)
Это точно, потому как и для меня проверка соотвецтвия на данный момент жизненно важна!
Удачи!
Ответить с цитированием
Старый 18.03.2005, 13:12   #416
Vam

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

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

[glow=red,2,300]Декомпилятор V2.0[/glow] выложен на DiccuricAG

- введена проверка компилятором всевозможных синтаксических и лексических ошибок в скриптах.
Существует 3 уровня сообщений компилятора:
1. Критическая ошибка (дальнейшая работа без исправления невозможна), приводит к останову компилятора (только этот тип ошибки обрабатывался ранее).
2. Простая ошибка, при обнаружении компилятор выдает сообщение и продолжает работу далее, но линковщик не запустится до устранения всех ошибок. Если число ошибок более 25 компилятор прекратит работу.
3. Внимание - на работу компилятора не влияет, выдается только первые 50 вниманий, остальные блокируются. В некоторых случаях внимание на работе скриптов не отразится, а в некоторых может привести к потенциальной ошибке, поэтому (для особо терпеливых) рекомендуется все внимания устранить.

- переделан алгоритм обработки переопределенных типов при декомпиляции и введена проверка их при компиляции, появились два файла:
RedefinedFunc.d - перечень переопределенных аргументов и возвращаемых значений внешних функций,
RedefinedLocalVariable.d - перечень переопределенных локальных переменных функций.
Эти файлы могут дополняться.

Тестируйте и задавайте вопросы! Приятного времяпровождения! *;) *:D *:)
Ответить с цитированием
Старый 18.03.2005, 17:30   #417
DimaD

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

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

Надо новую оболочку писать :) Эх, где бы время взять
Ответить с цитированием
Старый 18.03.2005, 21:10   #418
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2All:
Декомпилятор 2.0 выложил у себя на сайте.
Качать тут.
Ответить с цитированием
Старый 18.03.2005, 22:10   #419
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Vam:
2. Простая ошибка, при обнаружении компилятор выдает сообщение и продолжает работу далее, но линковщик не запустится до устранения всех ошибок. Если число ошибок более 25 компилятор прекратит работу.
3. Внимание - на работу компилятора не влияет, выдается только первые 50 вниманий, остальные блокируются. В некоторых случаях внимание на работе скриптов не отразится, а в некоторых может привести к потенциальной ошибке, поэтому (для особо терпеливых) рекомендуется все внимания устранить.
Хм, это все, конечно, здорово, но мне декомпилятор не позволяет скомпилировать даже оригинальных скриптов Г2 ::)
Пишет вот что: (это конец)

Код:
00:02 Warn: 0 *U: * PAR: CONTENT\STORY\B_ASSIGNAMBIENTINFOS\B_ASSIGNAMBIENTINFOS_PAL_4.D: Possible error, function should return value ( line 41 ) .... <zParser.cpp,#784>00:02 Warn: 0 *U: * PAR: CONTENT\STORY\B_ASSIGNAMBIENTINFOS\B_ASSIGNAMBIENTINFOS_PAL_4.D: Possible error, function should return value ( line 69 ) .... <zParser.cpp,#784>00:02 Warn: 0 *U: * PAR: CONTENT\STORY\B_ASSIGNAMBIENTINFOS\B_ASSIGNAMBIENTINFOS_PAL_4.D: Possible error, function should return value ( line 96 ) .... <zParser.cpp,#784>00:02 Warn: 0 *U: * PAR: CONTENT\STORY\B_ASSIGNAMBIENTINFOS\B_ASSIGNAMBIENTINFOS_PAL_9.D: Possible error, function should return value ( line 41 ) .... <zParser.cpp,#784>00:02 Fault:0 *U: * PAR: Too many warnings > 50, (warnings is closed). .... <zParser.cpp,#599>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\C_CANNPCCOLLIDEWITHSPELL.D: Unexpected return ( line 447 ) .... <zError.cpp,#477>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\SPELL_PROCESSMANA.D: Possible error, function should return value ( line 118 ) .... <zError.cpp,#477>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_GREENTENTACLE.D: Possible error, function should return value ( line 74 ) .... <zError.cpp,#477>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_INFLATE.D: Possible error, function should return value ( line 49 ) .... <zError.cpp,#477>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICBURN.D: Possible error, function should return value ( line 78 ) .... <zError.cpp,#477>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICBURNSHORT.D: Possible error, function should return value ( line 79 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICFLEE.D: Possible error, function should return value ( line 26 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICFLEE.D: Possible error, function should return value ( line 95 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICFREEZE.D: Possible error, function should return value ( line 50 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICSHRINK.D: Possible error, function should return value ( line 17 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_MAGICSLEEP.D: Possible error, function should return value ( line 16 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_PYRO.D: Possible error, function should return value ( line 49 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_SHORTZAPPED.D: Possible error, function should return value ( line 53 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_SHORTZAPPED.D: Possible error, function should return value ( line 62 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_SUCKENERGY.D: Possible error, function should return value ( line 57 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_SWARM.D: Possible error, function should return value ( line 52 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_WHIRLWIND.D: Possible error, function should return value ( line 54 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\ZS_MAGIC\ZS_ZAPPED.D: Possible error, function should return value ( line 54 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\STORY\B_CONTENT\B_DRAGONKILLCOUNTER.D: Possible error, function should return value ( line 93 ) .... <zError.cpp,#477>00:03 Fault:0 *U: * PAR: CONTENT\AI\HUMAN\TA_HUMAN\ZS_FLEETOWP.D: Possible error, function should return value ( line 53 ) .... <zError.cpp,#477>00:03 Fatal:-1 U: * PAR: Too many errors > 25, compilation is stopped. .... <zParser.cpp,#599>00:03 ---------------
Отправить личное сообщение для Ответить с цитированием
Старый 19.03.2005, 00:09   #420
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2Vam:
У меня такая же гадость, хотя на версии 1.9 все было нормально. Объясни пожалуйста, что это за нововведения такие, что не компилируют?
Ответить с цитированием
Старый 19.03.2005, 13:44   #421
Vam

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

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

Всем:

Да, теперь чтобы скомпировать скрипты нужно приложить немало усилий по устранению ошибок и возможных ошибок.
Компилятор теперь проверяет соответствие всех типов данных, возможности использования выражений в нужных местах, правильность объявлений функций и возвращаемых значений.
Даже в оригинальных скриптах (мягко говоря) наблюдается бардак, в одних местах написано строго, как и должно быть, в других допущено множество несоответствий, которые в определенных случаях могут привести к ошибке.
Давайте рассматривать в первую очередь конкретные ошибки:
1. Possible error, function should return value - данное сообщение возникает в нескольких случаях когда объявленная функция должна возвращать значение, а этого не происходит. Причины может быть две: первая, если функция действительно должна возвращать значение, то при выходе из функции должна быть запись - return ххх; где - ххх возвращаемое значение. Во многих файлах скриптов это не соблюдается. Вторая причина - функция не должна ничего возвращать, а в объявлении функции указан возвращаемый тип, в этом случае вместо возвращаемого типа в объявлении функции необходимо указать тип void. Таких ошибок в скриптах меньше, но они имеются.
Если исправить все возможные ошибки, то компиляция проходит успешно, дальнейшие процессы декомпиляции и компиляции проходят вообще без ошибок и результаты всех компиляций дают одинаковые правильные результаты.
Если у кого-либо возникают трудности в исправлении каких либо конкретных ошибок приводите строчку сообщения об ошибке и строки из файла скриптов с ошибкой. Сообщение, рассмотренное выше указывает всегда на последнюю строку проверенной функции.

ЗЫ: Обо всех нововведениях сразу сказать трудно, задавайте вопросы по устранению ошибок и так разберем все новые возможности компилятора, а заодно научимся правильно соблюдать синтаксис скриптов при их написании. Любые вольности могут привести в некоторых случаях к ошибкам. Все компиляторы высокоуровневых языков осуществляют полную проверку систаксиса.  ;)
Ответить с цитированием
Старый 19.03.2005, 13:51   #422
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

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

2Vam:
В принципе мы все догадывались, что не все гладко в исходниках - но думали что сами не доперли...
Спасибо - просто камень с души свалился!
Ответить с цитированием
Старый 19.03.2005, 14:04   #423
Vam

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

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

2Pa:
В принципе мы все догадывались, что не все гладко в исходниках
Да, это так, чтобы Вас не "насиловать" исправлением 100% всех несоответствий и появился уровень Внимание в сообщениях, большинство вниманий, применительно к конкретному месту возникновения к ошибке не приведет, но, если некоторые такие места будут правиться или дописываться то ошибка возможна даже в том случае, если дописанный текст ошибок не содержит. Все внимания в оригинальных скриптах даже у меня не хватило терпения исправить. Первоначально я планировал их засунуть в ошибки, но тогда, чтобы скомпилировать датник потребуется несколько дней. Исходники оригинальной Готики2 можно исправить за 1-2 часа (без учета вниманий).
Ответить с цитированием
Старый 19.03.2005, 18:12   #424
Donate2005

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

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

2Vam:
Я заметил, что все новые ошибки типа "Возможна ошибка. Функция должна возвращать значение". Вот пример:

func int C_CanNewsBeSpread()
{
* * *PrintDebugNpc(PD_ZS_Check,"C_CanNewsBeSpread");
};

Функция "жалуется" на невозвращение значения, так ведь? Т.к. функция не пустая (void), то по идеи она должна возвращать значение примерно такое:

func int C_CanNewsBeSpread()
{
* * *PrintDebugNpc(PD_ZS_Check,"C_CanNewsBeSpread");
* * *return 0; (или какую-то константу или Булевское значение - True либо False)
};

Я прав? Если нет, то поясни, как с этим бороться! ;)

И ещё одно:

Реализованна ли возможность в декомпиляторе сравнивать изменённый скрипт с исходниками (конечно не включая коментарии)?
;D

Добавление от 03/19/05, в 17:23:18
Тьфу, блин, так занялся тестом декомпелятора, что не прочитал пост №420! Sorry! Но всё же остаётся вопрос, как узнать, какое значение должна возвращать функция! :D

Тысячу раз благадарствую, жду не дождусь момента, когда смогу ставить плюсики - ну тогда держись!!! :D
Ответить с цитированием
Старый 19.03.2005, 20:19   #425
Vam

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

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

2Donate2005:
func int C_CanNewsBeSpread()
{
* * PrintDebugNpc(PD_ZS_Check,"C_CanNewsBeSpread");
};
В данном случае функция вообще-то "пустая", в ней нет ничего полезного, только строка для отладки, поэтому правильно будет сначала поискать, вызывается ли она где-то в скриптах и в каких выражениях (просто вызов C_CanNewsBeSpread() или вызов с присвоением ааа = C_CanNewsBeSpread()), если вызовов с присвоением не находится, то ошибка в декларации функции, должно быть func void C_CanNewsBeSpread() {....}. В данном случае верно второе. Такое толкование справедливо практически для всех ошибок этого типа. Конкретно по этой функции посмотри оригиральные скрипты Готики 1, функция была большая и возвращала значения, но потом большую часть функции заремовили, оставив только одну строчку, а вообще эта функция нигде из скриптов не вызывается, поэтому ее в принципе можно удалить, но здесь надо быть осторожным, некоторые такие функции вызываются только экзешником и удалять их нельзя.
PS: Проверил, эта функция вызывается только екзешником, поэтому ее удалять нельзя и она должна что-то возвращать, вероятно,все-таки правильно return 0;

Реализованна ли возможность в декомпиляторе сравнивать изменённый скрипт с исходниками
Нет, декомпилятор не сравнивает получаемый текст с исходниками, он его воспроизводит только из датника, ну и обрабатывает согласно нескольким внутренним правилам.
Ответить с цитированием
Старый 19.03.2005, 23:11   #426
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2Vam:
Можешь, еще раз для таких тугодумов как я, обьяснить про возвратную и невозвратную ф-и? Как правильно их определять, как лучше это делать?
Ответить с цитированием
Старый 19.03.2005, 23:35   #427
Vam

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

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

2Killer-XXX:
Можешь, еще раз для таких тугодумов как я, обьяснить про возвратную и невозвратную ф-и? Как правильно их определять, как лучше это делать?
Пока рассмотрим самые простые и часто встречаемые случаи:
1. Внутри функции есть return'ы, а при выходе из нее отсутствует -> нужно записать соответствующий return со значением.
2. Есть обработчики состояний людей и монстров, которые состоят из трех функций, вход в состояние - функция должна иметь тип void и ничего не возвращать, цикл состояния - функция должна иметь тип int и возвращать LOOP_END или LOOP_CONTINUE, выход из состояния - функция должна иметь тип void и ничего не возвращать.
3. Остальное надо смотреть по конкретному тексту, так все и не вспомнишь.
Ответить с цитированием
Старый 20.03.2005, 02:30   #428
Donate2005

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

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

2Vam:
У меня к тебе вопрос:
Поясни, как нужно правильно прозванивать (вызывать) функции экзешником!

Добавление от 03/20/05, в 01:48:21
нужно записать соответствующий return со значением.
Вот это и есть самое интересное - как же определить эти вызываемые значения (исключая случаи где мы возвращаем 0)?!! Я так понял ты вызываешь функции, а потом опредиляешь возвращаемое значение, так ведь?

Добавление от 03/20/05, в 01:50:23
Остальное надо смотреть по конкретному тексту, так все и не вспомнишь
К тому же по тексту не всегда можно понять, что вызывать!
Ответить с цитированием
Старый 20.03.2005, 11:44   #429
Vam

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

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

2Donate2005:
Поясни, как нужно правильно прозванивать (вызывать) функции экзешником!
Такой проверки вообще не существует, можно полагаться только на разум разработчиков скриптов и логически домыслить, что должна возвращать функция. Наиболее часто встречаемый случай: внутри блока с условием if записан return TRUE или FALSE, после окончания блока функция заканчивается без указания возвращаемого значения, следовательно, после блока if необходимо записать return со значением противоположным по смыслу значению внутри блока.

Рассмотрим очень простой пример (он попадает не в ошибку, а во внимание):
func int dia_uhrt_helloreject_condition()
{
* *if(!ENTEREDINNERCIRCLE && hero.aivar[AIV_INVINCIBLE])
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

1. Функция должна однозначно возвращать int.
2. Внутри блока if есть возвращаемое значение, после блока его нет.
3. Если условие истинно, то возвращается TRUE, значит по логике: если условие ложно, то должно возвращаться FALSE, вот его и нужно записать после блока, что и сделано красным цветом.

Возникает законный вопрос: как работает игра, проводит ли такая запись к ошибке - сразу скажу, что в большинстве случаев ошибки не возникает и все работает правильно, но в некоторых сложных случаях ошибка возможна, причем она может быть не постоянной, а плавающей в зависимости от некоторых условий.
Все дело в том, что после условия if в стек (вся внутренняя связь датника с экзешником осуществляется через стек) заносится результат выражения под if, следовательно, если условие истина в стеке будет 1 (TRUE), если ложно - 0 (FALSE). Далее, возвращаемое функцией значение есть последнее значение записанное в стеке -> данная функция могла бы выглядеть вот так
func int dia_uhrt_helloreject_condition()
{
* *if(!ENTEREDINNERCIRCLE && hero.aivar[AIV_INVINCIBLE])
};
но здесь появляется ошибка синтаксиса, после условия if обязятельно наличие блока {...}; который отсутствует. Далее, по первоначальному варианту, если идти через if в стеке будет 1,1 (первая 1 - результат if, вторая 1 - результат return TRUE), если же идем минуя if в стеке будет только 0 (результат if), записав на выходе функции return FALSE, мы поместим в стек 0 и выровняем стек при разных условиях (это, в принципе, не обязательно). Просто я хочу сказать, что дописав строку (логически понимая для чего, а не бездумно, лишь бы ошибки не было), во-первых - дополнительной ошибки мы не внесем, во-вторых - приведем в соответствие с синтаксисом и устраним замечание по функции. Компилятор не может проверять одни функции на правильность и не проверять другие, все правила для него строги и одинаковы для всех функций.
Человек же может поступить не так, записав в одном месте при декларации функции int и ничего не возвратив, а в другом void. Это мы довольно часто наблюдаем в функциях обработки диалогов: func int ххх_condition() - должна возвращать значение, а функция func void ххх_info() - должна иметь тип void и ничего не возвращать.
Ответить с цитированием
Старый 20.03.2005, 17:50   #430
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Vam:
Хм, это все просто замечательно, но мне как-то лень, честно говоря, перекурочивать все исходники, исправляя сотни ошибок, причем у меня есть несколько разных исходнков, что же мне, в каждых все править заново? ::)
А нельзя ли сделать, скажем, возможность отключить проверку на то, возвращает ли функция значение? (При этом всё остальное оставить как есть) Всё равно эти ошибки до сих пор никому не мешали... ::)
Отправить личное сообщение для Ответить с цитированием
Старый 20.03.2005, 18:27   #431
Vam

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

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

2TycoooN:
А нельзя ли сделать, скажем, возможность отключить проверку на то, возвращает ли функция значение?
Я могу все ошибки с проверкой возвращаемого значения засунуть во Внимания, а править или нет - смотрите сами. Так устроит? Но, хочу предупредить, в оригинальных скриптах Готик 1 и 2 есть несколько действительных ошибок с возвращаемым значением.

------------------------------------------------------------------------------------
Предлагаю Вашему вниманию краткое руководство по ошибкам, которые обрабатываются компилятором.

Руководство по ошибкам Компилятора V2.0

Типы ошибок, обрабатываемых компилятором, и способы их устранения.
Преобразование скриптов в *.dat файл состоит из двух процессов: компиляции и линковки. Применительно к ошибкам на стадии компиляции можно выявить строку с ошибкой в конкретном файле (в сообщении об ошибке присутствует номер строки), на стадии линковки привязки к строкам где возникла ошибка *уже нет (в сообщении об ошибке отсутствует номер строки).

Критические ошибки вызывают останов процесса компиляции, без их устранения дальнейшая компиляция невозможна.

1. * * *Source-File <file_name> not found. – файл *.src с указанным именем не найден.
2. * * *Found no matching File : <file_name> – отсутствует компилируемый файл (группа файлов), указанный(ая) в файле *.src.
3. * * *Syntax error : <expression> - указанное выражение не соответствует требуемому синтаксису скриптов.
4. * * *Unexpected End of File. – неожиданный конец файла (обрабатываемое выражение синтаксически не завершено).
5. * * *Expected <expression> - внутри выражения в соответствии с правилами синтаксиса отсутствует указанное подвыражение.
6. * * *Assignment : Left operand is not a lvalue – возникает при попытке присвоить значение величине, которой оно не может быть присвоено (например: *500 = ххх).
7. * * *Unknown identifier : <name> - неизвестное имя переменной. Возникает когда переменная используется в выражении до ее объявления. Примечание: ошибка довольно сложна для локализации, существует несколько правил деклараций переменных: декларация функции или VAR переменной должна предшествовать первому вызову функции или VAR переменной; класс должен быть декларирован до его использования в любом виде; lvalue в выражениях присвоения должно быть декларировано до присвоения – эти виды ошибок обрабатываются компилятором на стадии компиляции. Имя инстанции (INSTANCE) или константы (CONST) можно использовать в выражениях до их деклараций, но в скриптах эти имена должны быть обязательно декларированы, иначе возникнет ошибка этого типа на стадии линковки.
8. * * *Expected an Integer-Value : <expression> - возникает при нахождении внутри целочисленного значения недопустимого символа (например: 256х)
9. * * *Redefined identifier : <name> - повторная декларация переменной (данное имя задекларировано в скриптах более одного раза).
10. * * *Syntax Error. First letter is a digit in prototype *(instance) name. <name> - имя класса, прототипа или инстанции не может начинаться с цифры.
11. * * *Not a valid class or prototype name : <name> - возникает при декларации прототипа или инстанции, когда базовый класс или прототип не декларирован.
12. * * *Undefined function : <name> - встретился вызов функция с именем name раньше её декларации.
13. * * *Func does not return a <type_value> - выполнен вызов функции в выражении присвоения, но функция имеет тип void или тип, возвращаемый функцией, не соответствует типу lvalue.
14. * * *Unexpected 'return' – выражение return встретилось не в функции.
15. * * *Wrong type : *<name> - выдается только линковщиком при несоответствии присваиваемых или сравниваемых типов. Примечание: В версии компилятора 2.0 эта ошибка выявляется уже на стадии компиляции и более подробно будет рассмотрена ниже.


Обычные ошибки не приводят к останову процесса компиляции, но если их больше 25 штук, процесс компиляции будет прерван. Введены начиная с версии 2.0.

1. * * *<name> undeclared name (function) – аналогично критическому сообщению №7, но возникает на стадии компиляции.
2. * * *Wrong type in '!' expression – неверный тип отрицаемого выражения (может быть только INT).
3. * * *Cannot assignment in 'if' expression – внутри if выражения встретилась операция присвоения (недопустимо).
4. * * *Comparison is possible only in 'if' expression – операция сравнения встречена не в if выражении (недопустимо).
5. * * *Function <name> in 'if' expression should return type INT – функция внутри if выражения может иметь возвращаемый тип только INT.
6. * * *Unexpected return – неожиданный return. Особенностью скриптов является то, что любое выражение внутри функции, если оно записано одиноко (не в операциях сравнения или присваивания) заносится в стек и может быть возвращено при выходке их функции (для этого необязательно указывать слово return), но это является потенциально скрытой ошибкой, подлежащей устранению.
7. * * *Index = <index> out of bounds array <name>. – индекс массива с именем name выходит за объявленную границу.
8. * * *Function <name>: Argument <number>: " Cannot convert from type <type1> to <type2> - значение переменной типа type1, используемое в качестве аргумента number функции с именем name типа нельзя преобразовать к типу аргумента type2. Необходимо использовать одинаковые типы.
9. * * *Cannot convert from type <type1> to <type2> - значение переменной типа type1 нельзя преобразовать к типу переменной type2. Необходимо использовать одинаковые типы. Примечание: Есть исключение из правила, оно относится к переопределенным типам. Для понимания этих *типов необходимо написать отдельную статью. Это же относится и к сообщению с ошибкой №8 (см. выше).
10. * * *Possible error, function should return value – функция объявлена с возвращаемым типом, но при выходе из неё ничего не возвращается. Сложный случай.


Внимания не влияют на процесс компиляции и линковки, выводятся только первые 50 вниманий, остальные блокируются. Введены начиная с версии 2.0. Пока существует только одно внимание.

1. * * *Possible error, function should return value – функция объявлена с возвращаемым типом, но при выходе из неё ничего не возвращается. Простой случай.

Ответить с цитированием
Старый 20.03.2005, 18:44   #432
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Vam:
Я могу все ошибки с проверкой возвращаемого значения засунуть во Внимания, а править или нет - смотрите сами. Так устроит?
Да :D :D :D

Но, хочу предупредить, в оригинальных скриптах Готик 1 и 2 есть несколько действительных ошибок с возвращаемым значением.
А ты не мог бы их перечислить? Тогда мы только их подправим и всё :)
Отправить личное сообщение для Ответить с цитированием
Старый 20.03.2005, 18:55   #433
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

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

2Vam:
Я могу все ошибки с проверкой возвращаемого значения засунуть во Внимания, а править или нет - смотрите сами. Так устроит?
Может легче просто добавить параметр компилятору новый? Например:
0 - выдавать все ошибки
1 - компилировать их как Внимания.
Мне кажется, так было бы удобней.
Ответить с цитированием
Старый 20.03.2005, 19:45   #434
Donate2005

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

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

2Vam:
Можно ли внедрить в декомпелятор возможность отладки написанного скрипта? Ну как, например, в любых языках програмирования, после написания текста начать процесс отладки!
И ещё, возможно ли разбить все функции по группам (одинаковые по типам) и чтобы, в случае несоотвецтвий типов и возвращаемых значений, ZSpy выдавал пример решения ошибки?
2Killer-XXX:
Вот эта идея правильная, не стоит каждую неделю выпускать новые версии программы.
Ответить с цитированием
Старый 20.03.2005, 21:16   #435
Vam

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

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

2Donate2005:
Можно ли внедрить в декомпелятор возможность отладки написанного скрипта? Ну как, например, в любых языках програмирования, после написания текста начать процесс отладки!
К сожалению, нет. Скрипт, а точнее его компилированный аналог - датник, работает только с экзешником в совопупности с графикой, звуком и другими его внутренними функциями. Отладка же на компе высокоуровневых языков программирования возможна тоже только в той среде для которой скомпилирована программа (Юникс под Виндами тоже не работает и наоборот).

И ещё, возможно ли разбить все функции по группам (одинаковые по типам) и чтобы, в случае несоотвецтвий типов и возвращаемых значений, ZSpy выдавал пример решения ошибки?
Нельзя, чаще всего устранение ошибки данного типа есть логическая задача (но даже, если бы было простое нарушение синтаксиса, то устранять ошибки пока не умеет ни один компилятор, кто знает, это опечатка разработчика или недоделано то, что мыслилось сделать).

2TycoooN:
А ты не мог бы их перечислить? Тогда мы только их подправим и всё
На стадии отладки версии 2.0 я уже исправил все ошибки в скриптах (не задумываясь фактические они или потенциальные), чтобы перечислить фактические ошибки необходимо пройти весь процесс заново, что потребует определенного времени.
Ответить с цитированием
Старый 20.03.2005, 22:26   #436
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2Killer-XXX:
0 - выдавать все ошибки
1 - компилировать их как Внимания.
Мне кажется, так было бы удобней.
Вообще-то речь тут идёт только об отмене ошибок о возвращаемом значении, т.к. их жуть как много и они всё засоряют. Прочие ошибки пускай остаются ошибками :)
Отправить личное сообщение для Ответить с цитированием
Старый 21.03.2005, 00:34   #437
Donate2005

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

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

2Vam:
Нельзя, чаще всего устранение ошибки данного типа есть логическая задача (но даже, если бы было простое нарушение синтаксиса, то устранять ошибки пока не умеет ни один компилятор, кто знает, это опечатка разработчика или недоделано то, что мыслилось сделать).
Нет, я не то имел ввиду! Я спросил, можно ли сделать так, чтобы при обнаружении ошибки декомпилятором выдавалось примерное решение данной ошибки? Например, раз дек. видит, что не возвращено значение функции или пропущен её тип, то в ZSpy указывается строка, в которой находится ошибка (это уже реализовано) и пишется возможное исправление (как например, при пропущенной точке с запятой, в ZSpy выдаётся диаг. сообщение типа - expected ';' - пропущена ';') Реализовать это несложно, вся фишка заключается в логической обработке подобных ошибок, т.е. надо просмотреть все часто встречающиеся ошибки и варанты их исправления, а точнее вариант!
Ответить с цитированием
Старый 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 ошибки разных типов, устранить которые не составит большого труда. Больше переделывать систему обработки ошибок в компиляторе не буду, если, конечно, не найдете новые ошибки, которые пока не обрабатываются.  ;)
Ответить с цитированием
Старый 21.03.2005, 16:59   #439
gothicmax

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

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

Привет!
2Vam:
Не мог бы ты обяьяснить мне тупому, как декомпелировать файл *.ДАТ
Что это за "командная строка" ???
Где она???
Ну вобщем можешь написать ПОДРОБНЫЙ ТУТОР как работать с декомпилятором???
Ответить с цитированием
Старый 21.03.2005, 17:05   #440
Vam

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

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

2gothicmax:
Не мог бы ты обяьяснить мне тупому, как декомпелировать файл *.ДАТ
Что это за "командная строка" ???
Где она???
Ну вобщем можешь написать ПОДРОБНЫЙ ТУТОР как работать с декомпилятором???
Все ответы на твои вопросы есть в теме (даже по несколько раз), есть графическая оболочка для запуска декомпилятора, где взять посмотри в теме "All Gothic FAQ" раздел программы (пост №4).
Ответить с цитированием
Страница 11 из 31 « Первая 4567891011 1213141516171821 Последняя »


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 18:33. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022

Яндекс.Метрика