Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система киллстрика

#Samurai

Умник
Добрый вечер, юзвери Pawno-Info.
Сделал систему киллстрика(убийств подряд), пользуйтесь на здоровье.

Что же, начнём.
[HR][/HR]
В начало мода или куда вам удобнее:
PHP:
const KILLSTREAK_COOLDOWN = 3000;

new player_killstreak[MAX_PLAYERS char],
killstreak_timer[MAX_PLAYERS];
KILLSTREAK_COOLDOWN - константа, которая определяет время, которое должно пройти после убийства, чтобы киллстрик был исчерпан, в нашем случае это 3000 мс, то есть 3 секунды.
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]);
}
Если у убитого игрока был киллстрик - обнуляем его и убиваем таймер, который потом проверяет, совершает ли игрок киллстрик.
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});
Добавляем убийце 1 убийство в киллстрик и запускаем таймер для проверки продолжения киллстрика через KILLSTREAK_COOLDOWN мс.
Ну и это куда удобно, желательно в конце мода
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);
}
PHP:
if(kills == player_killstreak{playerid})
	player_killstreak{playerid} = 0;
Если кол-во убийств, которое было при старте таймера, равно текущему кол-ву убийств подряд, т.е. в течение KILLSTREAK_COOLDOWN мс не было совершено ни одного убийства - обнуляем киллстрик
PHP:
new str[40];
format(str, 40, "Вы совершили %i убийств подряд", kills);
SendClientMessage(playerid, -1, str);
Ну и собственно выводим, сколько убийств сейчас совершил игрок
[HR][/HR]
 
Последнее редактирование:
Сверху Снизу