Показать сообщение отдельно
Старый 25.03.2007, 14:35   #981
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

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

2Vam:

В Тесте использовались:
Компилятор/декомпилятор скриптов - GothicSourser 3.12.
Dat-файл и Ou-файл GLOBAL_mod v.1.11.
Платформа Г2-НВ.

Используемые процессы:
- Создание нового dat-файла из SRC, с последующей компиляцией;
- декомпиляция dat-файла, с последующей компиляцией;



Найдена неточность в проге, после декомпиляции Dat-файла GLOBAL_mod v.1.11, и последующей его компиляции (без внесения изменений)...

Компиллятор выдает ошибку НАРУШЕНИЯ СИНТАКСИСА, в следующих файлах:

DIA_BDT_1072_Addon_Logan.d
Cпойлер(щелкните, чтобы прочесть):

Блок с ошибкой:
Код:
 func void DIA_Addon_Logan_EXIT_Info(){ * * *AI_Output(other,self,"DIA_Addon_Logan_EXIT_15_00"); * * *//Я еще приду... * * *if(!((MIS_HlpLogan == LOG_Running) || !)(MIS_HlpLogan == LOG_SUCCESS) && (Logan_Inside == FALSE))  * * *{ * * * * * *AI_Output(self,other,"DIA_Addon_Logan_EXIT_10_01"); * * *//Да, беги, беги. А я буду тут стоять и всех тварей удерживать, которые подходят слишком близко. * * *}; * * *AI_StopProcessInfos(self);};
Исправленный блок:
Код:
func void DIA_Addon_Logan_EXIT_Info(){ * * *AI_Output(other,self,"DIA_Addon_Logan_EXIT_15_00"); * * *//Я еще приду... * * *if(!((MIS_HlpLogan == LOG_Running) || !(MIS_HlpLogan == LOG_SUCCESS)) && (Logan_Inside == FALSE)) * * *{ * * * * * *AI_Output(self,other,"DIA_Addon_Logan_EXIT_10_01"); * * *//Да, беги, беги. А я буду тут стоять и всех тварей удерживать, которые подходят слишком близко. * * *}; * * *AI_StopProcessInfos(self);};

DIA_NONE_100_Xardas.d
Cпойлер(щелкните, чтобы прочесть):

Блок с ошибкой:
Код:
func int DIA_Xardas_WARUMNICHTJETZT_Condition(){ * * *if(Npc_KnowsInfo(other,DIA_Xardas_RITUALREQUEST) && (Xardas_GoesToRitualInnosEye == FALSE) && ((hero.guild == GIL_MIL) || (hero.guild == GIL_SLD) || ((hero.guild == GIL_BAD) && !))(SC_ISDARKMAGE || SC_ISDARKWARRIOR))  * * *{ * * * * * *return TRUE; * * *}; * * *return FALSE;};
Исправленный блок:
Код:
func int DIA_Xardas_WARUMNICHTJETZT_Condition(){ * * *if(Npc_KnowsInfo(other,DIA_Xardas_RITUALREQUEST) && (Xardas_GoesToRitualInnosEye == FALSE) && ((hero.guild == GIL_MIL) || (hero.guild == GIL_SLD) || ((hero.guild == GIL_BAD) && !(SC_ISDARKMAGE || SC_ISDARKWARRIOR))))  * * *{ * * * * * *return TRUE; * * *}; * * *return FALSE;};


ВЫВОД:
GothicSourser 3.12 - не может правильно выстроить некоторые блоки условий. В основном это блоки с использованием истинного НЕ (!), в следствие чего ошибки, приведенные выше.
Благо они не смертельные, мона ручками выправить..:)))

- Данная ошибка проявляется при декомпиляции дат-файла, и его последующей компиляции;
- Если создать "Новый проект" компиляции из SRC-файла то при компиляции подобной ошибки не возникает, компиляция проходит успешно...

==================
PS
. Пока эт все что нарыл, буим дальше тестить.. *;))))


Добавление от 03/25/07, в 14:55:43
Со вчерашней ночи и по настояшее время плясал с бубнами, под ритмы GS 3.12, вот что из этого вышло:

Тестируемый:
Global_mod ver.3.11, (скомпиллирован GS 3.11)

Gothic.dat -> 10,1 МБ (10 627 315 байт)
Ou.bin * * -> 8,02 МБ (8 415 612 байт)


При декомпилляции и последующей компиляции есть не соответствия размеров в файлах Gothic.dat и Ou.bin.

Таблица соотношений:
Cпойлер(щелкните, чтобы прочесть):

После процесса - декомпилляции Gothic.dat-файла, с последующей компилляцией, (без внесения изменений в код):
Код:
 Cкомпиллировано GS 3.12.:Gothic.dat -> 10,1 МБ (10 627 314 байт)Ou.bin * * -> 8,03 МБ (8 421 376 байт)
После процесса - создания нового Gothic.dat и Ou.bin файлов из SRC, с последующей компилляцией, (без внесения изменений в код):
Код:
Cкомпиллировано GS 3.12.:Gothic.dat -> 10,1 МБ (10 627 314 байт)Ou.bin * * -> 8,02 МБ (8 415 610 байт)


Далее попробывал декомпиллировать уже ранее декомпиллированный и скомпиллированный Gothic.dat и Ou.bin -файлы.(декомпиллирован/компиллирован GS 3.12)
Cпойлер(щелкните, чтобы прочесть):

После очередной декомпилляции и компилляции цифры опять из менились:
Код:
 Cкомпиллировано GS 3.12.: Gothic.dat -> 10,1 МБ (10 627 313 байт)Ou.bin * * -> 8,02 МБ (8 415 593 байт)
После повторной декомпилляции/компилляции, нажал для проверки опять компилляцию..., компиллятор выдал ошибку: Story\B_AssignAmbientInfos\B_AssignDragonTalk_Main .d(167): Ошибка: Ожидается ';'

Блок с ошибкой:
Код:
 func void DIA_DragonTalk_Main_4_Info(){... * * *B_LogEntry(TOPIC_BuchHallenVonIrdorath,"Господин драконов находится в скалах священных залов Ирдората. Хм... Это кажется мне знакомым. Где-то я уже читал про это?"); * * *B_InitGuildAttitudes()OldWorld_Zen; * * *DragonTalk_Exit_Free = TRUE;};
Исправленный блок:
Код:
func void DIA_DragonTalk_Main_4_Info(){... * * *B_LogEntry(TOPIC_BuchHallenVonIrdorath,"Господин драконов находится в скалах священных залов Ирдората. Хм... Это кажется мне знакомым. Где-то я уже читал про это?"); * * *B_NPC_IsAliveCheck(OldWorld_Zen); * * *DragonTalk_Exit_Free = TRUE;};


При исправлении указанной ошибки выше, и нажатии на компилляцию, данныя ошибка вылезла уже в другом месте, компиллятор выдал ошибку: *Story\Dialoge\DIA_b5_9000_mage.d(77): Ошибка: Ожидается ';'

Cпойлер(щелкните, чтобы прочесть):

Блок с ошибкой:
Код:
 ... * * *MIS_ScoutMine = LOG_SUCCESS; * * *MIS_ReadyForChapter3 = TRUE; * * *B_InitGuildAttitudes()OldWorld_Zen; * * *B_Kapitelwechsel(3,NEWWORLD_ZEN); * * *PLAYER_TALENT_ALCHEMY[CHARGE_Innoseye] = TRUE; * * *PrintScreen(PRINT_LearnAlchemyInnosEye,-1,-1,FONT_Screen,2);...
Исправленный блок:
Код:
 ... * * *MIS_ScoutMine = LOG_SUCCESS; * * *MIS_ReadyForChapter3 = TRUE; * * *B_NPC_IsAliveCheck(OldWorld_Zen); * * *B_Kapitelwechsel(3,NEWWORLD_ZEN); * * *PLAYER_TALENT_ALCHEMY[CHARGE_Innoseye] = TRUE; * * *PrintScreen(PRINT_LearnAlchemyInnosEye,-1,-1,FONT_Screen,2);...
ВЫВОД:
Данная ошибка проявляется везде где должна стоять функция:

* * * * * *B_NPC_IsAliveCheck(OldWorld_Zen);

Эта функция заменяется прогой на неправильную:
* * * * * *B_InitGuildAttitudes()OldWorld_Zen;

ПРИЧЕМ, миры/локации, в данной функции объявленные в константах значения не имеют, ошибка одинакова для всех!!!


После исправления всех ошибок, размеры Gothic.dat и Ou.bin - файлов, таковы:
Код:
 Gothic.dat -> 10,1 МБ (10 627 313 байт) Ou.bin * * -> 8,02 МБ (8 415 593 байт)
Опять декомпилировал, уже этот Gothic.dat и Ou.bin - файлы..
Скомпилированно GS 3.12, здесь вроде все без изменений.:

Код:
 Gothic.dat -> 10,1 МБ (10 627 313 байт) Ou.bin * * -> 8,02 МБ (8 415 593 байт)
При нажатии на компилляцию полезли опять теже самые ошибки..

* * * * * B_InitGuildAttitudes()OldWorld_Zen;

и т.д. дальше проверять не стал.



Также отпишу об одной ошибке, которая имела место быть, но не знаю правили ли ее или нет.
Данная ошибка проявлялась в прошлых релизах GothicSourser'a версий 3...

Было замечено во время компилляции проекта, дублирование строк программой, в большинсте случаев программа, пропускает такую ошибку, и компиляция идет без ошибок.
Но в тесте мода потом оказываются повторения некоторый строк диалога, или строк взаимодействия Гг с Вобами.. и т.д..
Причем исправив такие ошибки, после очередной, заливки на хост правленных Gothic.dat и Ou.bin - файлов, данная ошибка вылазит уже в других диалогах и местах игры...

Пример такой ошибки, которую отловил GS 3.11., при компиляции исходников GLOBAL_mod DEDROIT'om, сегодня..:
Cпойлер(щелкните, чтобы прочесть):

Строка кода в исходнике:
Код:
 ... * * *B_GiveInvItems(self,other,MagicPergament,1); ...
А во время компиляции GS 3.11 выдаёт ошибку, которая проявляется так.
Строки кода с ошибкой:
Код:
 ... * * *B_GiveInvItems(self,other,MagicPergament,1); * * *};B_GiveInvItems(self,other,MagicPergament,1); ...


=============================
PS
. Ну теперь мона отдохнуть, упарился однако...

Отправить личное сообщение для Ответить с цитированием