Closed dosinabox closed 3 years ago
Перегрузка стека операторов. Проще всего спровоцировать рекурсивным вызовов функции. Также если вызываются очень емкие функции друг за другом.
// небезопасный код. Количество итераций может
// быть больше, чем может вместить в себя стек
func void Loop() {
if(...)
...
Loop();
};
// ---------------------------------------------------------------------------------
// Нежелательно, если вызовы больших функций идут
// последовательно, потому что каждая процедура
// дописывает на стек новые данные, которые
// полностью выгружаются при завершении их работы
func void func1() {
...
};
func void func2() {
func1();
};
func void func3() {
func2();
};
func void func4() {
func3();
};
// ---------------------------------------------------------------------------------
// Правильнее так, потому что перед вызовом следующим
// вызовом будет выгружаться стек от старого хлама
func void Caller() {
func1();
func2();
func3();
func4();
...
};
Исправлено переносом некоторых B_KillNpc() из enter_addonworld_firsttime_trigger_func() в startup_addon_part_adanostemple_01():
B_KillNpc(BDT_10400_Addon_DeadBandit);
B_KillNpc(BDT_10401_Addon_DeadBandit);
B_KillNpc(Stoneguardian_MineDead1);
B_KillNpc(Stoneguardian_MineDead2);
B_KillNpc(Stoneguardian_MineDead3);
B_KillNpc(Stoneguardian_MineDead4);
и рабов мёртвых тоже надо
Пока нет, потому что тогда перегрузка может просто перейти в другое место. Стоит иметь в виду на будущее.
как дальновиден оказался ElderGamer убивающий НПС через расписание ;-) https://github.com/Kor-Angar/G2_NotR_Kor_Angar/issues/3
enter_addonworld_firsttime_trigger_func() -> B_KillNpc(PIR_1370_Addon_Angus) -> B_ClearRuneInv()