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

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

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

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

Мануал Анти ДМ зоны (Arizona RP)

AndreY.eXe

Специалист
Привет!

Кто играл или играет на Arizona RP, то знают, что на ней присутствует необычная система Анти ДМ зон. Если Вы вдруг попытаетесь стрельнуть в ЗЗ, то у Вас появится диалог с отсчетом секунд, после чего Вы сможете продолжить играть. Вот Вам такая фича!
Приступим:

В начало мода:
PHP:
new GetPlayerPointDMZZ[MAX_PLAYERS];  // Счетчик секунд
new PlayerDMZZ[MAX_PLAYERS]; // Для таймера
В OnPlayerConnect:
PHP:
	GetPlayerPointDMZZ[playerid] = 5;
	KillTimer(PlayerDMZZ[playerid]);
В любое место:
PHP:
stock GreenZones(playerid) // Сами зеленые зоны, я от себя добавил зону на вокзале ЛС.
{
	if(PlayerToPoint(50.0, playerid, 1791.2559,-1907.3040,13.3976))return true; // SPAWN LS
	return false;
}
stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z) // Функция (Выше)
{
    if(IsPlayerConnected(playerid))
	{
		new Float:oldposx;
		new Float:oldposy;
		new Float:oldposz;
		new Float:tempposx;
		new Float:tempposy;
		new Float:tempposz;
		GetPlayerPos(playerid, oldposx, oldposy, oldposz);
		tempposx = (oldposx -x);
		tempposy = (oldposy -y);
		tempposz = (oldposz -z);
		if(((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) return true;
	}
	return false;
}
В OnPlayerKeyStateChange:
PHP:
	if(!IsPlayerInAnyVehicle(playerid))
	{
		if((newkeys & KEY_FIRE || (oldkeys & 128 && newkeys & 16)))
		{
		    if(GetPlayerWeapon(playerid) != 43 && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_DRINK_SPRUNK && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_DRINK_WINE && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_SMOKE_CIGGY && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_DRINK_BEER) // Проверка на фотик и спец. анимки (Типо курит, пьет и тд)
			{
			    if(GetPVarInt(playerid, "antiflooddm") > gettime())return true;
			    if(GreenZones(playerid))
			    {
			        ShowPlayerDialog(playerid, 0, 0, "Зеленая зона", "\n\nВ этом месте запрещено {48EF95}драться/стрелять.{ffffff}\n\nВы продолжите играть через {FF6347}5{ffffff} секунд!\n\n", "Закрыть", "");
					PlayerDMZZ[playerid] = SetTimerEx("AntiDMZZ", 1000, true, "i", playerid);
			        SetPVarInt(playerid, "antiflooddm", gettime()+6); // Специально сделал, чтобы ЗЗ не срабатывало дважды
			        ApplyAnimation(playerid, "FAT", "IDLE_tired", 4.1, 0, 0, 0, 1, 0);
			    }
			}
		}
	}
В любое место:
PHP:
forward AntiDMZZ(playerid);
public AntiDMZZ(playerid)
{
	new string[128];
    GetPlayerPointDMZZ[playerid]--;
    format(string, sizeof(string), "\n\nВ этом месте запрещено {48EF95}драться/стрелять.{ffffff}\n\nВы продолжите играть через {FF6347}%d{ffffff} секунд!\n\n", GetPlayerPointDMZZ[playerid]);
    ShowPlayerDialog(playerid, 0, 0, "Зеленая зона", string, "Закрыть", "");
    ApplyAnimation(playerid, "FAT", "IDLE_tired", 4.1, 0, 0, 0, 1, 0);
    if(GetPlayerPointDMZZ[playerid] <= 0)
    {
    	ShowPlayerDialog(playerid, 0, 0, "Зеленая зона", "\n\nВ этом месте запрещено {48EF95}драться/стрелять.{ffffff}\n\nНажмите {FF6347}ENTER{ffffff}, чтобы продолжить играть.\n\n", "Закрыть", "");
    	KillTimer(PlayerDMZZ[playerid]);
    	GetPlayerPointDMZZ[playerid] = 6;
    	ApplyAnimation(playerid, "PED", "facanger", 4.1, 0, 1, 1, 1, 1);
    }
	return true;
}
Вот и все! Можете посмотреть все по скринам:



Если Вам понравилась данная работа, или Вы взяли её себе на сервер, то поблагодарите автора нажав кнопку "Спасибо" :)
​
 
Последнее редактирование:
Сверху Снизу