Показать сообщение отдельно
Старый 05.06.2005, 22:40   #537
Vam

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

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

2TycoooN и другим:

Переопределенный тип.
В скриптах только тип INSTANCE может быть переопределен только к типу INT. Почему так сделали разработчики я не понял, хотя, если немного доработать компилятор, то можно вообще было обойтись без переопределений.
Вернемся к примеру: Здесь имена Scavenger, Molerat и т.д. являются именами инстанций, а функция объявлена как возвращающая int, а по идее должна возвращать C_NPC, т.е. инстанцию порожденную от базового класса C_NPC. Так оно и есть в некоторых встроенных функциях экзешника, но данная возможность в скриптах отсутствует, функция не может возвратить INSTANCE, поэтому разработчики переопределили все такие значения к типу INT. Декомпилятор же не знает в каком случае инстанция есть инстанция, а в каком переопределена в int. Декомпиляция пройдет успешно, но вместо имени инстанции в переопределенных местах будет присутствовать число. При компиляции (только моим компилятором) в этом месте возникнет ошибка (все другие компиляторы об ошибке не сообщат!!!): несоответствие типов (INSTANCE -> INT). Если её не исправить, это приведет к неверной работе программы (игры).
Чтобы всё было ОК (при декомпиляции и компиляции) декомпилятор должен знать все такие функции (переопределенным может быть не только возвращаемое значение, но и аргументы), для этого существует файл RedefinedFunc.d, в котором записаны декларации функций с переопределенными типами, тип instance, переопределенный к int записывается как int#. В нашем примере в файл необходимо добавить строку int# B_RandomMonster(void), после этого выполнить декомпиляцию и компиляцию, ошибка изчезнет и вместо числа в нужном месте появится имя инстанции.
Пока всё, что непонятно, спрашивайте.

2Killer-XXX:
text[2] = NAME_ADDON_BONUS_2H;
count[2] = Waffenbonus_10;
Декомпилятор здесь всё сделал правильно, ошибка в исходниках разработчиков, посмотри скрипты из МДК и поймешь.
Ответить с цитированием