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

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

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

2Dagot_Ur:
Кстати, как ты считаешь - ранее декомпилированные скрипты "со скобками" совместимы с компиляцией на 1.9?
Если компилятор не выдает ошибок - то все совместимо (в смысле грамматики), но есть еще и логика, которую компилятор проверить не может, а вот здесь не все так просто.
Попробую объяснить на примере, первоначально предполагалось сделать так:
if((!выражение) && (!варажение) && (!выражение) && выражение), а до версии 1.9 получалось вот так -
if(!выражение && !варажение && !выражение && (((выражение)))), то есть скобки с отрицания выражения уходили на последнее выражение, если оно было.
В принципе, здесь логической ошибки нет, смысл выражения остается прежним.
Но в некоторых местах встречаются сложные выражения, например, в файле ZS_Attack.h
вместо правильного выражения -

if(Npc_GetDistToNpc(self,other) < self.aivar[AIV_Dist]) ¦¦ ((!C_BodyStateContains(other,BS_RUN)) && (!C_BodyStateContains(other,BS_JUMP)))

получалось выражение -

if((Npc_GetDistToNpc(self,other) < self.aivar[AIV_Dist]) ¦¦ !(C_BodyStateContains(other,BS_RUN) && !C_BodyStateContains(other,BS_JUMP)))

в котором присутствует логическая ошибка (вместо отрицания только второго выражения имеем суммарное отрицание второго и третьего выражения). Увы, последствия таких ошибок иногда непредсказуемы.
Ответить с цитированием