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)))
в котором присутствует логическая ошибка (вместо отрицания только второго выражения имеем суммарное отрицание второго и третьего выражения). Увы, последствия таких ошибок иногда непредсказуемы.