PDA

Просмотр полной версии : [Вопрос] Это правильная конструкция?



phpadmin
28.06.2017, 14:15
ко всем new


new hacksystem[MAX_PLAYERS char];


forward vzlom(playerid);
public vzlom(playerid)
{
foreach(new i: Player)
{
if(hacksystem{i} == 1)
{
scma(-1,"{57A8E5}[Новости]: Внимание, на данный момент хакер(ы) атаковали главный сервер HG!");
scma(-1,"{57A8E5}[Новости]: Если хакеры получат доступ к разным видам функционала сервера -");
scma(-1,"{57A8E5}[Новости]: Это нанесет ущерб штату | Следите за дальнейшими новостями! - Новости «24/7»");
hacksystem{i} = 2;
SetTimer("vzlom", 5000, 0);
}
else if(hacksystem{i} == 2)
{
switch(random(41))
{
case 0..9:
scm(playerid,-1,"{30C4AB}[Hackerman]: HGcom смогла отбить ддос атаку, подключите пакеты заного!"),
hacksystem{playerid} = 0;
case 10..21:
scm(playerid,-1,"{D0A629}[Hackermen]: Ваш ноутбук не выдержал нагрузку и сгорел!"),
s_player[playerid][pMac] = 0,
hacksystem{playerid} = 0;
case 22..32:
scm(playerid,-1,"{D0A629}[Самозащита]: бомба в радиусе дата-центра активировалась!"),
CreateExplosion(-960.64081,1925.87598,9.42932,7,6.0),
CreateExplosion(-959.6226,1931.3419,9.0000,7,6.0),
CreateExplosion(-959.3530,1936.3002,9.0000,7,6.0),
CreateExplosion(-959.4214,1944.1563,9.0000,7,6.0),
hacksystem{playerid} = 0;
case 33..40:
scm(playerid,-1,"{5AB150}[Hackerman]: {2AC819}Success! {5AB150}Open Delete Server | ---> /hack"),
hacksystem{i} = 3,
SetTimer("vzlom", 60000, 0);
}
}
else if(hacksystem{i} == 3)
{
scma(-1,"{57A8E5}[Новости]: Внимание, хакеры нанесли огромный ущерб бюджету штата HG!");
scma(-1,"{57A8E5}[Новости]: Но нам похуй, ведь штат на грани разрыва между добром и злом!");
scma(-1,"{57A8E5}[Новости]: Делайте что хотите, всем похуй!");
hacksystem{i} = 0;
}
}
}

На лесенку не подавайте внимание, у меня все нормально.
Дело в том что хочу создать систему которая активирует таймер для всех игроков. Ну как сказать щас!

Например любой игрок активирует таймер и что бы дальнейшие функции таймера работало для всех игроков. А не для того кто активировал. А именно для всех.
там где {i} - был {playerid} но я её убрал потому что работало система лишь для id 0, у игрока с id 1 активировалась лишь вот это

Самый начальный таймер который пускает ход событий остальных.


if(IsPlayerInRangeOfPoint(playerid,0.5,-960.1935,1925.9014,9.0000) && s_player[playerid][pMac] >= 2 && hacksystem{playerid} == 0)
{
scm(playerid,-1,"[HackerMan]: Идет подключение к пакетам...");
scm(playerid,-1,"[HackerMan]: Идет подключение к главному серверу дата центра!");
scm(playerid,-1,"[HackerMan]: Передача пакетов начата, не прекращайте работу компьютера!");
hacksystem{playerid} = 1;
SetTimer("vzlom", 10000, 0);
}
else if(hacksystem{playerid} >= 1)
{
scm(playerid,-1,"Процесс занят, попробуйте позже!");
}
У других игроков кроме id 0 срабатывает лишь это часть, дальше ничего не происходит. А у 0 id всё работает, но с {i} ещё не проверял на других. Как это организовать объясните на примерах, или как вообще нужно.

DeimoS
28.06.2017, 16:54
Зачем в функции "vzlom" аргумент playerid, если ты через таймер всем запускаешь таймер?

И что это за ужасные записи?


case 22..32:
scm(playerid,-1,"{D0A629}[Самозащита]: бомба в радиусе дата-центра активировалась!"),
CreateExplosion(-960.64081,1925.87598,9.42932,7,6.0),
CreateExplosion(-959.6226,1931.3419,9.0000,7,6.0),
CreateExplosion(-959.3530,1936.3002,9.0000,7,6.0),
CreateExplosion(-959.4214,1944.1563,9.0000,7,6.0),
hacksystem{playerid} = 0;
case 33..40:

phpadmin
28.06.2017, 17:11
эти записи в каком смысле ужасные, ужасные в плане оптимизации или в плане красоты?

Таймер запускать должен любой игрок из сервера если захочет, и все действия таймера потом должен работать для остальных игроков. К пример по таймеру допустим открывается общак игроком и открывается доступ к какой-то команде и ею смогли бы пользоваться все игроки. Пока действие таймера не вернет к началу hacksystem{i} = 0;

2 вопрос: Тогда какой аргумент надо ставить? vzlom() ?? (никакой?)


Можно спросить ещё: изначально там где {i} был {playerid} в чем их функция можешь разъяснить? в for заменяется playerid на i тоесть он просчитывает всех игроков на сервере и ставит для них срабатываемую функцию в таймерах? или я что-то не так сделал? или обратно поставить {playerid}?

phpadmin
28.06.2017, 18:07
Я проанализировал логикой, если сверху я написал все правильно на счет {i} типа для всех игроков применяется действие таймера. То в vzlom(playerid) нужен для того что бы во время 4 исходов к примеру если исход рандома будет равен тому что
case 10..21:
scm(playerid,-1,"{D0A629}[Hackermen]: Ваш ноутбук не выдержал нагрузку и сгорел!"),
s_player[playerid][pMac] = 0,
hacksystem{i} = 0; то у инициатора таймера должен исчезнуть комп (обнулиться) а если поставить i где s_player[playerid][pMac] = 0 то комп же исчезнет у всех игроков которые на сервере, нет?

Первым действие таймера запускает любой игрок дальше тамер vzlom начинает работу. Мне нужно знать все ли построено так как нужно? Сейчас сам проверить не могу просто