[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Сначала не вник в предложенный вариант и решил, что тут идёт именно очищение нулевой строки (не заметил, что второй массив так же ссылается на enum).
Действительно, отчищаться будет.
Если кто-то не понимает почему, то тут всё просто. Отчищается он из-за того, что мы объявляем второй массив с тем же числом ячеек, при этом не заполнив его никакими значениями (следовательно, он заполнится нулями), а после приравниваем первый массив ко второму, из-за чего первый "перенимает" все значения второго (использование оператора "=" прокатит только в том случае, когда массивы либо одинаковые по размеру, либо второй массив меньше). Так как второй массив заполнен нулями, первый так же "обнулится".
Вот простой пример с локальным массивом
Я бы иPHP код:
new string[] = "Pro-Pawn";
static const NULL_string[sizeof(string)];
print(string);
string = NULL_string;
print(string);
print(string[3]);
предложил оформить как константу, дабы "случайно" не изменить в нём какие-либо данныеPHP код:
new NULL_PlayerInfo[pInfo] = {"noname", 50.0, 100};
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Geebrox (22.10.2016)
Заметил, что способ с NULL_ может вызывать проблемы, связанные с перезаписью лишних ячеек памяти.
Имелась такая структура массивов:
Использовал я так:PHP код:
enum PlayerInterfaceParams {
PIP_TextDraw,
PIP_Visible,
}
enum PlayerInterface {
PI_Armour,
PI_Health,
PI_Info,
PI_LevelLineBackground,
PI_LevelLine,
PI_LevelLevel,
PI_LevelPlus,
PI_LevelXP,
PI_LevelXPPlus,
PI_MoneyBorder,
PI_MoneyBackground,
PI_MoneyMoney,
PI_MoneyPlus,
PI_WeaponSkill,
}
new
gPlayerInterface[MAX_PLAYERS][PlayerInterface][PlayerInterfaceParams],
NULL_gPlayerInterface[PlayerInterface][PlayerInterfaceParams];
И с таким кодом происходили разного рода проблемы, значения менялись и у другого игрока, например.PHP код:
public OnPlayerConnect(playerid)
{
gPlayerInterface[playerid] = NULL_gPlayerInterface;
TogglePlayerInterfaceVisibility(playerid, true, true);
return 1;
}
А с этим кодом всё работает нормально:
Так что вариант с NULL_ небезопасный, лучше его не использовать.PHP код:
public OnPlayerConnect(playerid)
{
for (new i = 0; i < sizeof(gPlayerInterface[]); i++) {
for (new j = 0; j < sizeof(gPlayerInterface[][]); j++) {
gPlayerInterface[playerid][PlayerInterface:i][PlayerInterfaceParams:j] = 0;
}
}
TogglePlayerInterfaceVisibility(playerid, true, true);
return 1;
}
Daniel_Cortez (23.11.2018) Smalin (24.11.2018)
Похоже на баг компилятора. Я взял код из поста выше, закомментировал все поля в PlayerInterface кроме одного PI_Armour (чтобы было проще смотреть на отладочный вывод) и добавил код для инициализации ячеек массива gPlayerInterface и отладочного вывода значений из него.
Вывод:
Как и было сказано, обнуляются ячейки не только для playerid, но и для следующих двух игроков. Что интересно, в gPlayerInterface[2][0][1] вместо 0 было записано значение 0x00000FAC - скорее всего, оно попало туда по ошибке из таблицы смещений от массива gPlayerInterface.
@ziggi, я сообщу об этом баге в репо компилятора, или ты сам?
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Ок, https://github.com/pawn-lang/compiler/issues/388
Забыл сказать, проблема весьма специфическая и проявляется только когда в обоих массивах (т.е. и в массиве-источнике, и в приёмнике) есть 2 и более enum-измерения. Иными словами, если убрать у массивов последнее измерение
new gPlayerInterface[MAX_PLAYERS][PlayerInterface]; new const NULL_gPlayerInterface[PlayerInterface];
копирование будет происходить правильно, без перезаписи лишних ячеек.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)