Re: Декомпилятор скриптов Готики
2Dagot_Ur:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: А как тогда быть вот с этим:<br><br>func int DIA_Xardas_AWAY_Condition()<br>{<br> if(!Npc_KnowsInfo(other,DIA_Xardas_TODO) && !Npc_KnowsInfo(other,DIA_Xardas_FirstEXIT) && (((Kapitel < 3))))<br> {<br> return TRUE;<br> };<br>};<br><br> if(!Npc_IsDead(Buster) && (((hero.guild == GIL_SLD) || (hero.guild == GIL_DJG))))<br> {<br> AI_Output(self,other,"DIA_Lee_DoAboutBe nnet_04_07"); //<br> };<br><br>И точно ли, что ошибки со скобками имеют место быть только в проверках отрицанием?
|
Re: Декомпилятор скриптов Готики
2Dagot_Ur:<br>Оба, приведенных тобой выражения, правильные, логика в них не нарушена, нарушение логики может быть <br>только в случае мной предварительно описанном. <br><br>
Цитата:
|
Re: Декомпилятор скриптов Готики
Декомпилятор V1.91 выложен на DiccuricAG<br><br> * * *- добавлена декомпиляция Демоверсии Готики 1, для этого необходимо<br> * * *использовать параметр -zgame:x с х = -1 <br><br>
|
Re: Декомпилятор скриптов Готики
2Vam: <br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Donate2005 и другим <br>Сначала предлагаю соблюдать порядок:<br>1. Вопросы конкретно по Урокам скриптологии -> в соотв. тему.<br>2. Общие и разные вопросы по скриптам -> в тему Скриптинг в Готике.<br>3. По декомпилятору -> сюда.<br><br>Появились жалобы на декомпилятор, что возникают ошибки при декомпиляции (при компиляции их быть не может!!!), да, это возможно, но для их устранения мне необходима помощь всех, кто использует декомпилятор не только для изучения скриптов, но для переводов их и создания новых модов, т.е. помощь тех, кто заинтересован, что его продукт будет без глюков (я один не могу проработать все варианты).<br>Ошибки возможны в случае переопределенных типов, это самый вероятный их источник.<br>По этому поводу я много говорил в этой теме, всем заинтересованным советую перечитать ее заново.<br>Сейчас в декомпиляторе имеется возможноть облегчить эту задачу: если в ключе -zlog: поставить уровень сообщений на 9, то в лог файле зеленым цветом и со словами Потенциальный INT будут выданы все места возможных ошибок. Другое дело как их проверить и исправить - возможны варианты: проверять лучше (кто не особо хорошо разбирается в скриптах) сравнивая декомпилированные скрипты с исходными скриптами Готики 1 или 2, ну, и естественно , сообщать мне.<br><br>2Donate2005:<br><br>Миранду скачал и посмотрел, ошибка в файле C_PCIsInMyRoom<br>Фрагмент оригинала - <br> * * *if ((self == owner) || (Wld_GetGuildAttitude( self.guild, portalowner ) == ATT_FRIENDLY) )<br> * * *{ * * * * * *<br> * * * * * *return 1;<br> * * *} * * *<br><br>а в твоем моде -<br> * * *if((self == 2165) || (Wld_GetGuildAttitude(self.guild,portalowner) == ATT_FRIENDLY))<br> * * *{<br> * * * * * *return 1;<br> * * *}<br><br>необходимо 2165 заменить на owner<br><br>Как устранить это в декомпиляторе буду думать!<br><br>ЗЫ: Если что либо непонятно по переопределенным типам и потенциальным ошибкам, лучше спросить не стесняясь, благо есть кому ответить! ;)
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Большое спасибо! Ну как ты так быстро нашел такую ошибку?<br><br>Да, и ещё, можешь пояснить эту строку: <br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:<br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Pa: <br>
Цитата:
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Donate2005: <br>Ну, сказать, что я так быстро нашел ошибку, это неправильно, я нашел первое встретившееся несоответствие декомпилированных скриптов оригинальным. Сначала необходимо исправить, скомпилировать, затем проверить, действительно ли это та (наша) ошибка. При более детальном рассмотрении я, например, не нашел откуда вызывается данная функция (экзешником она тоже не вызывается), а это мне пока не ясно. А несоответствие нашел очень просто; при декомпиляции установил -zlog:9,s и первый "Потенциальный INT" проверил на соответствие оригинальным скриптам Готики 1, вот и все.<br>Комментировать приведенную строку не имеет смысла, комментировать нужно всю функцию:<br><br><br>// Данная функция проверяет, находится ли НПС self в своем помещении - возвращает TRUE, иначе возвращает FALSE.<br>func int C_PCIsInMyRoom()<br>{<br> * * *var C_Npc owner;<br> * * *var int portalowner;<br> * * *PrintDebugNpc(PD_ZS_FRAME,"C_PCIsInMyRoom&qu ot;);<br> * * * *// получить ссылку на НПС, которому принадлежит помещение<br> * * *owner = Wld_GetPlayerPortalOwner();<br> * * * *// получить номер гильдии, которой принадлежит помещение<br> * * *portalowner = Wld_GetPlayerPortalGuild();<br> * * * *// если помещение мое (т.е. принадлежит НПС self) или отношения между гильдиями НПС (self) и того НПС, которому принадлежит помещение дружественные<br> * * *if((self == owner) ¦¦ (Wld_GetGuildAttitude(self.guild,portalowner) == ATT_FRIENDLY))<br> * * *{<br> * * * * * *return 1;<br> * * *}<br> * * *else<br> * * *{<br> * * * * * *return 0;<br> * * *};<br>};<br><br>
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Помоему это все-таки не та ошибка, так как непись все-равно молчит! :)<br>Спасибо за помощь! ;)<br><br>Добавление от 03/07/05, в 21:56:59 <hr class="hr_agfc">2Vam: <br>Только что проверил дикомпелятором (с 9 диаг. сообщениями) и заметил, что предуприждения зачастую ссылаются на несуществующие строки - это нормально? Может все-таки ты проверишь? :D
|
Re: Декомпилятор скриптов Готики
2Donate2005:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Ну понятное дело! Но у меня точно нет этих строк!<br>Ну как, ты тестил Миранду на ошибки?
|
Re: Декомпилятор скриптов Готики
2Donate2005:<br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:<br> (это поможет всем!)<br>Это точно, потому как и для меня проверка соотвецтвия на данный момент жизненно важна!<br>Удачи!
|
Re: Декомпилятор скриптов Готики
[glow=red,2,300]Декомпилятор V2.0[/glow] выложен на DiccuricAG<br><br>- введена проверка компилятором всевозможных синтаксических и лексических ошибок в скриптах.<br>Существует 3 уровня сообщений компилятора:<br>1. Критическая ошибка (дальнейшая работа без исправления невозможна), приводит к останову компилятора (только этот тип ошибки обрабатывался ранее).<br>2. Простая ошибка, при обнаружении компилятор выдает сообщение и продолжает работу далее, но линковщик не запустится до устранения всех ошибок. Если число ошибок более 25 компилятор прекратит работу.<br>3. Внимание - на работу компилятора не влияет, выдается только первые 50 вниманий, остальные блокируются. В некоторых случаях внимание на работе скриптов не отразится, а в некоторых может привести к потенциальной ошибке, поэтому (для особо терпеливых) рекомендуется все внимания устранить.<br><br>- переделан алгоритм обработки переопределенных типов при декомпиляции и введена проверка их при компиляции, появились два файла:<br>RedefinedFunc.d - перечень переопределенных аргументов и возвращаемых значений внешних функций,<br>RedefinedLocalVariable.d - перечень переопределенных локальных переменных функций.<br>Эти файлы могут дополняться.<br><br>Тестируйте и задавайте вопросы! Приятного времяпровождения! *;) *:D *:)<br>
|
Re: Декомпилятор скриптов Готики
Надо новую оболочку писать :) Эх, где бы время взять
|
Re: Декомпилятор скриптов Готики
2All:<br>Декомпилятор 2.0 выложил у себя на сайте.<br>Качать тут.
|
Re: Декомпилятор скриптов Готики
2Vam: <br>
Цитата:
Код:
<br>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><br>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><br>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><br>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><br>00:02 Fault:0 *U: * PAR: Too many warnings > 50, (warnings is closed). .... <zParser.cpp,#599><br>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\C_CANNPCCOLLIDEWITHSPELL.D: Unexpected return ( line 447 ) .... <zError.cpp,#477><br>00:02 Fault:0 *U: * PAR: CONTENT\AI\MAGIC\SPELL_PROCESSMANA.D: Possible error, function should return value ( line 118 ) .... <zError.cpp,#477><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>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><br>00:03 Fault:0 *U: * PAR: CONTENT\STORY\B_CONTENT\B_DRAGONKILLCOUNTER.D: Possible error, function should return value ( line 93 ) .... <zError.cpp,#477><br>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><br>00:03 Fatal:-1 U: * PAR: Too many errors > 25, compilation is stopped. .... <zParser.cpp,#599><br>00:03 ---------------<br><br> |
Re: Декомпилятор скриптов Готики
2Vam:<br>У меня такая же гадость, хотя на версии 1.9 все было нормально. Объясни пожалуйста, что это за нововведения такие, что не компилируют?
|
Re: Декомпилятор скриптов Готики
Всем:<br><br>Да, теперь чтобы скомпировать скрипты нужно приложить немало усилий по устранению ошибок и возможных ошибок.<br>Компилятор теперь проверяет соответствие всех типов данных, возможности использования выражений в нужных местах, правильность объявлений функций и возвращаемых значений.<br>Даже в оригинальных скриптах (мягко говоря) наблюдается бардак, в одних местах написано строго, как и должно быть, в других допущено множество несоответствий, которые в определенных случаях могут привести к ошибке.<br>Давайте рассматривать в первую очередь конкретные ошибки:<br>1. Possible error, function should return value - данное сообщение возникает в нескольких случаях когда объявленная функция должна возвращать значение, а этого не происходит. Причины может быть две: первая, если функция действительно должна возвращать значение, то при выходе из функции должна быть запись - return ххх; где - ххх возвращаемое значение. Во многих файлах скриптов это не соблюдается. Вторая причина - функция не должна ничего возвращать, а в объявлении функции указан возвращаемый тип, в этом случае вместо возвращаемого типа в объявлении функции необходимо указать тип void. Таких ошибок в скриптах меньше, но они имеются.<br>Если исправить все возможные ошибки, то компиляция проходит успешно, дальнейшие процессы декомпиляции и компиляции проходят вообще без ошибок и результаты всех компиляций дают одинаковые правильные результаты.<br>Если у кого-либо возникают трудности в исправлении каких либо конкретных ошибок приводите строчку сообщения об ошибке и строки из файла скриптов с ошибкой. Сообщение, рассмотренное выше указывает всегда на последнюю строку проверенной функции.<br><br>ЗЫ: Обо всех нововведениях сразу сказать трудно, задавайте вопросы по устранению ошибок и так разберем все новые возможности компилятора, а заодно научимся правильно соблюдать синтаксис скриптов при их написании. Любые вольности могут привести в некоторых случаях к ошибкам. Все компиляторы высокоуровневых языков осуществляют полную проверку систаксиса. ;)
|
Re: Декомпилятор скриптов Готики
2Vam:<br>В принципе мы все догадывались, что не все гладко в исходниках - но думали что сами не доперли...<br>Спасибо - просто камень с души свалился!<br>
|
Re: Декомпилятор скриптов Готики
2Pa:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Я заметил, что все новые ошибки типа "Возможна ошибка. Функция должна возвращать значение". Вот пример: <br><br>func int C_CanNewsBeSpread()<br>{<br> * * *PrintDebugNpc(PD_ZS_Check,"C_CanNewsBeSpread ");<br>};<br><br>Функция "жалуется" на невозвращение значения, так ведь? Т.к. функция не пустая (void), то по идеи она должна возвращать значение примерно такое:<br><br>func int C_CanNewsBeSpread()<br>{<br> * * *PrintDebugNpc(PD_ZS_Check,"C_CanNewsBeSpread ");<br> * * *return 0; (или какую-то константу или Булевское значение - True либо False)<br>};<br><br>Я прав? Если нет, то поясни, как с этим бороться! ;)<br><br>И ещё одно:<br> <br>Реализованна ли возможность в декомпиляторе сравнивать изменённый скрипт с исходниками (конечно не включая коментарии)?<br> ;D<br><br>Добавление от 03/19/05, в 17:23:18 <hr class="hr_agfc">Тьфу, блин, так занялся тестом декомпелятора, что не прочитал пост №420! Sorry! Но всё же остаётся вопрос, как узнать, какое значение должна возвращать функция! :D<br><br>Тысячу раз благадарствую, жду не дождусь момента, когда смогу ставить плюсики - ну тогда держись!!! :D
|
Re: Декомпилятор скриптов Готики
2Donate2005:<br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:<br>Можешь, еще раз для таких тугодумов как я, обьяснить про возвратную и невозвратную ф-и? Как правильно их определять, как лучше это делать?
|
Re: Декомпилятор скриптов Готики
2Killer-XXX:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>У меня к тебе вопрос:<br>Поясни, как нужно правильно прозванивать (вызывать) функции экзешником!<br><br>Добавление от 03/20/05, в 01:48:21 <hr class="hr_agfc">
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Donate2005:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Хм, это все просто замечательно, но мне как-то лень, честно говоря, перекурочивать все исходники, исправляя сотни ошибок, причем у меня есть несколько разных исходнков, что же мне, в каждых все править заново? ::)<br>А нельзя ли сделать, скажем, возможность отключить проверку на то, возвращает ли функция значение? (При этом всё остальное оставить как есть) Всё равно эти ошибки до сих пор никому не мешали... ::)
|
Re: Декомпилятор скриптов Готики
2TycoooN:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Можно ли внедрить в декомпелятор возможность отладки написанного скрипта? Ну как, например, в любых языках програмирования, после написания текста начать процесс отладки!<br>И ещё, возможно ли разбить все функции по группам (одинаковые по типам) и чтобы, в случае несоотвецтвий типов и возвращаемых значений, ZSpy выдавал пример решения ошибки?<br>2Killer-XXX: <br>Вот эта идея правильная, не стоит каждую неделю выпускать новые версии программы.<br>
|
Re: Декомпилятор скриптов Готики
2Donate2005:<br>
Цитата:
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Killer-XXX: <br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2TycoooN и другим:<br><br>Привожу две фактические ошибки по возвращаемым значениям (вернее отсутствию оных) оригинальных скриптов Готики 2 + аддон:<br>func int ZS_ShortZapped_Loop ()<br>{ * <br> * *if *(Npc_GetStateTime(self) > SPL_TIME_SHORTZAPPED) <br> * *{<br> * * * *B_StopShortZapped();<br> * * * *return LOOP_END;<br> * *};<br> * *return LOOP_CONTINUE;<br>};<br><br>FUNC INT DIA_Addon_ThiefOW_TooFar_Condition()<br>{<br> * *if (self.aivar[AIV_PARTYMEMBER] == TRUE)<br> * *{ * <br> * * * *if (C_DiegoTooFar(0))<br> * * * *{<br> * * * * * *if (Diego_TooFarComment == FALSE)<br> * * * * * *{<br> * * * * * * * *return TRUE;<br> * * * * * *};<br> * * * *}<br> * * * *else<br> * * * *{<br> * * * * * *Diego_TooFarComment = FALSE;<br> * * * *};<br> * *};<br> * *return FALSE;<br>};<br><br>Красным цветом добавлены правильные строки.<br>Остальные все ошибки с возвращаемыми значениями в этих скриптах скорее потенциальные (могут уйти во Внимания). Если я все сообщения по возвращаемым типам засуну во Внимания, то эти ошибки и им подобные будет практически не найти (необходимо будет перелопатить все Внимания). Я подумаю еще о более сложной проверке, чтобы добавить дополнительные градации по возвращаемым типам, всё-таки не хочется фактические ошибки совать во Внимания.<br><br>2Donate2005:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
Привет!<br>2Vam: <br>Не мог бы ты обяьяснить мне тупому, как декомпелировать файл *.ДАТ<br>Что это за "командная строка" ???<br>Где она???<br>Ну вобщем можешь написать ПОДРОБНЫЙ ТУТОР как работать с декомпилятором???
|
Re: Декомпилятор скриптов Готики
2gothicmax:<br>
Цитата:
|
Текущее время: 00:13. Часовой пояс GMT +4. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
AGFC: Valley of Gothic © 2004-2022