[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Это не поможет проблеме. Вы ведь никакое значение массиву не устанавливаете во время инициализации.
Как тут можно вообще ждать помощи, если формулировка проблемы не ясна совсем. Что значит "после подсчетов по этому методу, стала некорректно работать команда". Что значит "некорректно"? Чего вы ожидали и что получили в итоге укажите.PHP код:
main()
{
static const
fmt_str[] = "%s - это была строка...";
goto noinit;
new
str[sizeof fmt_str + (-2 + 9)];
noinit:
format(str, sizeof str, fmt_str, "кака-бяка");
print(str);
}
![]()
Daniel_Cortez (14.10.2016) VVWVV (14.10.2016)
Последний раз редактировалось Edward Morra; 14.10.2016 в 17:49.
Это баг.
Для решения проблемы необходимо переименовать метку.
Однако существует другой способ:
Однако такой синтаксис работать не будет, ибо у вас названия идентичны, а это значит, что вам необходимо переименовать какой-то из массивов.
Последний раз редактировалось VVWVV; 14.10.2016 в 18:03.
Самым лучшим решением будет забить на пропуск инициализации и писать код нормально. Ибо ты совершенно ничего не понимаешь в оптимизации (куча вызовов GetPlayerVehicleID, оптимизируешь инициализацию массива), а такие "оптимизации" только вредят. Ну или просто используй разные названия переменных.
P.S. Нахватаются от всяких, а потом не понимают где проблемы... Любые микрооптимизации можно производить только при знании того, как оно работает и для чего это делается и только после общей оптимизации кода и алгоритмов (а это оптимизировать куда сложнее).
Последний раз редактировалось ziggi; 14.10.2016 в 18:52.
Daniel_Cortez (14.10.2016) Edward Morra (14.10.2016) VVWVV (14.10.2016)
[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Не знаю, лично я этим не пользуюсь и никому не советую. Повторюсь: выигрыш будет минимальным, по сравнению с грамотной оптимизацией алгоритмов.
Как минимум, все вызовы GetPlayerVehicleID, GetPlayerState, IsPlayerInAnyVehicle можно заменить одним GetPlayerVehicleID. Также вызов PVar::GetInt можно сделать единожды.
Код не оформлял (только лапшу убрал), ибо лень:
И такой ужас лишь в одной команде, страшно представить что во всём остальном скрипте творится. Уверен, что IsVehicleBike, IsVehicleA реализованы массой проверок, в ProxDetector вычисляется расстояние для всех игроков.PHP код:
CMD:engine(playerid,params[])
{
if(!IsPlayerLogged{playerid}) return SendMe(playerid,COLOR_GREY,!" * [A] - Сначала нужно авторизоваться!");
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid == 0) {
return 1;
}
if(IsVehicleBike(vehicleid)) return false;
if(Engine[vehicleid]) {
printf("незаводим");
static const frm_engine[]=" * %s заглушил двигатель.";
new string[sizeof(frm_engine)+(-2+MAX_PLAYER_NAME)];
format(string,sizeof(string),frm_engine,PlayerName(playerid));
ProxDetector(playerid,5,string,COLOR_PURPLE);
SetEngineOnOff(vehicleid,false);
EngineTime[playerid] = 0;
return 1;
}
if(Fuel[vehicleid] <= 0.0) {
return SendMe(playerid,COLOR_GREY,!" * Бензобак пуст. Вызовите механиков!");
}
if(EngineTime[playerid]) {
return SendMe(playerid,COLOR_GREY,!" * Нельзя так часто заводить двигатель!");
}
new Float:vHealth;
GetVehicleHealth(vehicleid,vHealth);
new driving = PVar::GetInt(playerid,"Driving");
if(OrgCarInfo[vehicleid][orgcFrac] == 15 && (driving == 4 || driving == 6))
{
if(!SeatBelt{playerid} && !IsVehicleA(vehicleid))
{
SendMe(playerid,COLOR_GREY,!" * Перед началом движения вы обязаны пристегнуть ремень безопасности. Вы провалили экзамен!");
PVar::SetInt(playerid,"Driving",0);
acc_RemovePlayerFromVehicle(playerid);
DisablePlayerRaceCheckpoint(playerid);
SetEngineOnOff(vehicleid,false);
AccountInfo[playerid][LoadCharacters{playerid}][acTestAS] = 0;
licCP{playerid} = 0;
licerror{playerid} = 0;
lictesttime{playerid} = 0;
return false;
}
}
printf("заводим");
EngineTime[playerid] = 6;
FreezePlayer(playerid);
GameTextForPlayer(playerid, "~w~€AЊYCKAEM ѓ‹…‚A¦E‡’...", 5000, 4);
static const frm_str[]=" * %s пытается запустить двигатель.";
new string[sizeof(frm_str)+(-2+MAX_PLAYER_NAME)];
format(string,sizeof(string),frm_str,PlayerName(playerid));
return ProxDetector(playerid,5,string,COLOR_PURPLE);
}
P.S. Уродствами, вида SendMe и PVar::SetInt ты только путаешь людей, которые будут разбираться в твоём коде.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)