|
Re: Декомпилятор скриптов Готики
Проблемы с конвертированием типов переменных в "новых" (выше 1.91) версиях компилятора. Использовался GothicSourcerV2_20.exe
В своем моде для Г1 я захотел оптимизировать несколько часто используемых функций. И вот что из этого получается.
Например:
func void B_ClearItems(var int ClrItm) { Npc_RemoveInvItems(self,ClrItm,Npc_HasItems(self, ClrItm)); };
B_ClearItems(ItRu_Light);
Компилятор выдает: невозможность конвертирование типа instance в int. Действительно, по идее должно быть (var C_Item), НО переменная, описывающая предмет для функций Npc_RemoveInvItems и Npc_HasItems (по урокам скриптологии) все же должна быть INT.
(int Npc_HasItems (c_npc n0, int itemInstance); - возвращает количетво предметов itemInstance у НПС n0.) (void Npc_RemoveInvItems (c_npc owner, int itemInstance, int amount); - указанное кол-во amount предметов itemInstance удаляется из инвентаря НПС owner и из игры.)
Компилятором версии 1.91 никаких варнингов не появляется и в игре все работает нормально.
Пример 2: Сделал функцию, аналогичную Г2а, придающую неписю заданный вид.
func void B_SetNpcVisual(var C_Npc slf,var string bodymesh, var int bodytex, var int bodyskin, var string headmesh, var int facetex, var int teethtex, var int armorInstance) { Mdl_SetVisual(slf,"HUMANS.MDS"); if(slf.guild == GIL_BAB) { bodyTex = bodyTex + 5; }; Mdl_SetVisualBody(self, bodymesh, bodytex, bodyskin, headmesh, facetex, teethtex, armorInstance); };
B_SetNpcVisual(self,"hum_body_Naked0",0,1,"Hum_Hea d_FatBald",15,1,grd_armor_h);
и снова на (var int armorInstance) выдается ошиба невозможности конвертирования типов, хотя по урокам скриптологии тип переменной для функции Mdl_SetVisualBody правильный, но как обычно предмет брони относится к класу C_Item. void Mdl_SetVisualBody (c_npc self, string body, int bodytex, int color, string head, int htex, int ttex, int armor); - установить параметры изображения НПС self, где : body – имя mesh файла изображения тела, bodytex – номер текстуры тела, color – номер палитры цвета кожи, head – имя MMS файла изображения головы, htex – номер текстуры головы, ttex – номер текстуры зубов, armor – номер одетой брони (- 1 – брони нет).***
Но в Г2а на подобную функцию компилятор не ругается. Это что, дикая дискримминация :) прошитое исключение из правил? Так можно ли сделать принудительное отключение проверки типов переменных, если разработчик модификации точно уверен в том, что функция в игре будет нормально работать, тем более он это не раз протестировал на старой версии компилятора.
|