PDA

Просмотр полной версии : [Вопрос] Переменная используются в разных системах не обнуляется.



Igoreshka
28.03.2019, 23:27
нашел у себя в коде херню как

PerevodID[playerid]
Переменная отвечает за введенный ID игрока в разных диалоговых окнах.
В общем как думаете это безопасно? По сути везде нужно сначала вводить значение, затем записывается. Но если найти где можно просто закрыть затем что-то написать и случиться другое а не то что задумывалось.
Вот сижу и думаю, подмен диалоговых окон существует? Прям подмен а не скрытие и открытие
она обнуляется только при дисконнекте или коннекте
кто это писал, рассчитывал на экономию памяти, но не подозревал о опасности.
через пакеты придумали уже подмен диалоговых окон?

DeimoS
29.03.2019, 05:29
Да, подмена реализована. Скрытие, собственно, и появилось ради подмены диалогов (в обычном скрытии нет никакого смысла). Сам сервер никак не следит за тем, на какой диалог ответил игрок. А именно игрок формирует информацию для OnDialogResponse (и ID диалога отсылается игроком, и информация для остальных параметров). Так что сложности в подмене диалога нет. Как и в сложности отслеживания этого: достаточно запоминать какой последний диалог показывался игроку, а после в OnDialogResponse отслеживать то, совпадает ли записанный ID диалога с тем, который прислал игрок.

Касаемо твоего массива - просто добавь обнуление во всех случаях, когда диалог закрывается. Хотя я бы лучше сделал всё на pVar, задав для каждой конкретной системы своё имя pVar, чтоб потом можно было легко проследить то, в каком месте значение для этого pVar записывается и где потом используется. Это и читаемее будет, и экономнее по памяти. Главное, опять же, не забывай удалять pVar вовремя, чтоб минимизировать временные затраты на вызов других pVar.

Igoreshka
29.03.2019, 14:35
Спасибо, так и сделаю через PVar.