Spróbuję wyjaśnić dlaczego. Na naszym forum programista wyjaśnił, że prawie wszędzie we wszystkich modach wystąpił błąd.
(Попробую объяснить, почему так. У нас на форуме программист объяснил, что почти везде во всех модах ошибка.)
Patrzymy na warunek dialogu w Xardas
(Смотрим на условие диалога у Ксардаса)
func int dia_xardas_pacckaz_condition()
{
if((Kapitel >= 3) && Npc_IsDead(KDF_679_FALER) && (FALERKILL == TRUE) && (Npc_HasItems(other,svitokfalera) >= 1))
{
return TRUE;
};
};
Wydaje się, że nie ma w tym nic złego, ale silnik ZenGin mówi co następuje
(Вроде бы ничего плохого тут нет, но движок ZenGin говорит следующее)
20:44 Warn: 0 C: SCRIPT: Npc_IsDead(): illegal param: "KDF_679_FALER" is NULL. .... <oGameExternal.cpp,#252>
20:44 Warn: 0 C: SCRIPT: last parser func-name: DIA_XARDAS_PACCKAZ_CONDITION .... <oGameExternal.cpp,#262>
Wszystko dlatego, że funkcja
(Все потому, что функция)
func int Npc_IsDead(var C_NPC npc);
// VAM: zwraca 1, jeśli NPC NPC nie żyje, w przeciwnym razie 0.
Działa tylko ze wskaźnikiem do klasy C_NPC, a instante jest używane wszędzie, co jest błędne i można zauważyć, że argument będzie zawsze NULL.
Dlatego poprawne będzie zadeklarowanie klasy C_NPC przed warunkiem
(// VAM: возвращает 1, если НПС npc мертв, иначе – 0.
Работает только с указателем на класс C_NPC, а везде используется instante, что неверно, и видно, что аргументом будет всегда NULL.
Поэтому правильно будет объявить класс C_NPC перед условием)
func int dia_xardas_pacckaz_condition()
{
var C_NPC Faler;
Faler = Hlp_GetNpc(KDF_679_FALER);
if((Kapitel >= 3) && Npc_IsDead(Faler) && (FALERKILL == TRUE) && (Npc_HasItems(other,svitokfalera) >= 1))
{
return TRUE;
};
};
Wtedy wszystko będzie działać poprawnie. I jeszcze lepiej, jak do mnie napisał
Możesz utworzyć zmienną globalną dla takich celów serwisowych. Na przykład var C_Npc npc;. Następnie w stanie dialogu nie możesz zadeklarować nowej zmiennej, ale użyj globalnej.
(Тогда будет все корректно работать. А ещё лучше, как он мне сам написал
Можно создать глобальную переменную для таких вот служебных целей. Например var C_Npc npc;. Тогда в условии диалога можно не объявлять новую переменную, а использовать глобальную.)
Ogólnie polecam, kto nie wie, jak korzystać z zSpy uczyć się. Pokazuje wiele przydatnych rzeczy i najłatwiej jest uchwycić błędy.
(А вообще, я рекомендую, кто не умеет пользоваться zSpy обучится. Она показывает очень много чего полезного, и ошибки проще всего через нее отлавливать.)
(Попробую объяснить, почему так. У нас на форуме программист объяснил, что почти везде во всех модах ошибка.)
Patrzymy na warunek dialogu w Xardas
(Смотрим на условие диалога у Ксардаса)
func int dia_xardas_pacckaz_condition()
{
if((Kapitel >= 3) && Npc_IsDead(KDF_679_FALER) && (FALERKILL == TRUE) && (Npc_HasItems(other,svitokfalera) >= 1))
{
return TRUE;
};
};
Wydaje się, że nie ma w tym nic złego, ale silnik ZenGin mówi co następuje
(Вроде бы ничего плохого тут нет, но движок ZenGin говорит следующее)
20:44 Warn: 0 C: SCRIPT: Npc_IsDead(): illegal param: "KDF_679_FALER" is NULL. .... <oGameExternal.cpp,#252>
20:44 Warn: 0 C: SCRIPT: last parser func-name: DIA_XARDAS_PACCKAZ_CONDITION .... <oGameExternal.cpp,#262>
Wszystko dlatego, że funkcja
(Все потому, что функция)
func int Npc_IsDead(var C_NPC npc);
// VAM: zwraca 1, jeśli NPC NPC nie żyje, w przeciwnym razie 0.
Działa tylko ze wskaźnikiem do klasy C_NPC, a instante jest używane wszędzie, co jest błędne i można zauważyć, że argument będzie zawsze NULL.
Dlatego poprawne będzie zadeklarowanie klasy C_NPC przed warunkiem
(// VAM: возвращает 1, если НПС npc мертв, иначе – 0.
Работает только с указателем на класс C_NPC, а везде используется instante, что неверно, и видно, что аргументом будет всегда NULL.
Поэтому правильно будет объявить класс C_NPC перед условием)
func int dia_xardas_pacckaz_condition()
{
var C_NPC Faler;
Faler = Hlp_GetNpc(KDF_679_FALER);
if((Kapitel >= 3) && Npc_IsDead(Faler) && (FALERKILL == TRUE) && (Npc_HasItems(other,svitokfalera) >= 1))
{
return TRUE;
};
};
Wtedy wszystko będzie działać poprawnie. I jeszcze lepiej, jak do mnie napisał
Możesz utworzyć zmienną globalną dla takich celów serwisowych. Na przykład var C_Npc npc;. Następnie w stanie dialogu nie możesz zadeklarować nowej zmiennej, ale użyj globalnej.
(Тогда будет все корректно работать. А ещё лучше, как он мне сам написал
Можно создать глобальную переменную для таких вот служебных целей. Например var C_Npc npc;. Тогда в условии диалога можно не объявлять новую переменную, а использовать глобальную.)
Ogólnie polecam, kto nie wie, jak korzystać z zSpy uczyć się. Pokazuje wiele przydatnych rzeczy i najłatwiej jest uchwycić błędy.
(А вообще, я рекомендую, кто не умеет пользоваться zSpy обучится. Она показывает очень много чего полезного, и ошибки проще всего через нее отлавливать.)