#Samurai
Умник
Добрый вечер, юзвери Pawno-Info.
Сделал систему киллстрика(убийств подряд), пользуйтесь на здоровье.
Что же, начнём.
[HR][/HR]
В начало мода или куда вам удобнее:
KILLSTREAK_COOLDOWN - константа, которая определяет время, которое должно пройти после убийства, чтобы киллстрик был исчерпан, в нашем случае это 3000 мс, то есть 3 секунды.
player_killstreak - переменная, которая будет отвечать за количество убитых человек подряд.
(char поставил потому что он экономнее, так как может принимать значения от 0 до 255, а вероятность того, что игрок совершит более 255 убийств подряд практически нулевая)
killstreak_timer - таймер, который будет запускаться для проверки киллстрика через KILLSTREAK_COOLDOWN секунд.
В public OnPlayerConnect(playerid)
Сделал систему киллстрика(убийств подряд), пользуйтесь на здоровье.
Что же, начнём.
[HR][/HR]
В начало мода или куда вам удобнее:
PHP:
const KILLSTREAK_COOLDOWN = 3000;
new player_killstreak[MAX_PLAYERS char],
killstreak_timer[MAX_PLAYERS];
player_killstreak - переменная, которая будет отвечать за количество убитых человек подряд.
(char поставил потому что он экономнее, так как может принимать значения от 0 до 255, а вероятность того, что игрок совершит более 255 убийств подряд практически нулевая)
killstreak_timer - таймер, который будет запускаться для проверки киллстрика через KILLSTREAK_COOLDOWN секунд.
В public OnPlayerConnect(playerid)
PHP:
player_killstreak{playerid} = 0;
В public OnPlayerDisonnect(playerid)Обнуляем киллстрик при подключении
PHP:
if(player_killstreak{playerid}) KillTimer(killstreak_timer[playerid]);
Потом это в public OnPlayerDeath(playerid, killerid, reason)Убиваем таймер проверки киллстрика.
PHP:
if(killerid == INVALID_PLAYER_ID) return 1;
if(player_killstreak{playerid})
{
player_killstreak{playerid} = 0;
KillTimer(killstreak_timer[playerid]);
}
if(player_killstreak{killerid}) KillTimer(killstreak_timer[killerid]);
player_killstreak{killerid}++;
killstreak_timer[killerid] = SetTimerEx("KillStreakTimer", KILLSTREAK_COOLDOWN, false, "ii", killerid, player_killstreak{killerid});
Если игрок умер не от другого игрока - прекращаем выполнение кодаPHP:if(killerid == INVALID_PLAYER_ID) return 1;
Если у убитого игрока был киллстрик - обнуляем его и убиваем таймер, который потом проверяет, совершает ли игрок киллстрик.PHP:if(player_killstreak{playerid}) { player_killstreak{playerid} = 0; KillTimer(killstreak_timer[playerid]); }
Ну и это куда удобно, желательно в конце модаДобавляем убийце 1 убийство в киллстрик и запускаем таймер для проверки продолжения киллстрика через KILLSTREAK_COOLDOWN мс.PHP:if(player_killstreak{killerid}) KillTimer(killstreak_timer[killerid]); player_killstreak{killerid}++; killstreak_timer[killerid] = SetTimerEx("KillStreakTimer", KILLSTREAK_COOLDOWN, false, "ii", killerid, player_killstreak{killerid});
PHP:
forward KillStreakTimer(playerid, kills);
public KillStreakTimer(playerid, kills)
{
if(kills == player_killstreak{playerid})
player_killstreak{playerid}= 0;
new str[40];
format(str, 40, "Вы совершили %i убийств подряд", kills);
SendClientMessage(playerid, -1, str);
}
Если кол-во убийств, которое было при старте таймера, равно текущему кол-ву убийств подряд, т.е. в течение KILLSTREAK_COOLDOWN мс не было совершено ни одного убийства - обнуляем киллстрикPHP:if(kills == player_killstreak{playerid}) player_killstreak{playerid} = 0;
[HR][/HR]Ну и собственно выводим, сколько убийств сейчас совершил игрокPHP:new str[40]; format(str, 40, "Вы совершили %i убийств подряд", kills); SendClientMessage(playerid, -1, str);
Последнее редактирование:
