Показать сообщение отдельно
Старый 25.02.2006, 10:55   #694
B_Wolf

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

По умолчанию 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а на подобную функцию компилятор не ругается. Это что, дикая дискримминация :) прошитое исключение из правил?
Так можно ли сделать принудительное отключение проверки типов переменных, если разработчик модификации точно уверен в том, что функция в игре будет нормально работать, тем более он это не раз протестировал на старой версии компилятора.
Ответить с цитированием