Доступ к архиву

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

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

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

Paint Ball by Пельмень [state,optimized]

Статус
В этой теме нельзя размещать новые ответы.

Пельмень

Компетентный
Доброго дня уважаемые пользователи pawno-info. Решил выложить свой первый мануал на переключателях (state). Возможно есть недочёты. :)

Ко всем new:

PHP:
new PaintballWinner = 999;
new PaintballPlayers = 0;
new PaintballWinnerKills = 0;
new PlayerPaintballing[MAX_PLAYERS];
new PlayerPaintballKills[MAX_PLAYERS];
new paintball;
new PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];

new Float:PaintballSpawns[6][3] =
{
	{2563.6877,2807.0288,10.8203},
	{2554.0505,2837.7419,10.8203},
	{2585.6748,2848.5283,10.8203},
	{2598.7083,2843.5200,10.8203},
	{2546.7622,2830.9004,14.2559},
	{2575.9900,2839.3103,19.9922}
};

new paintgun[] = { 24, 31, 30 };
Ко всем forward:

PHP:
forward EndPaintBall();
forward StartedPaintBall();
В конец скрипта:

PHP:
public StartedPaintBall() <PaintballStarted:No>
{
	state PaintballStarted:Waiting;

	PaintballWinner = 999;
	PaintballWinnerKills = 0;
	for new i = GetMaxPlayers(); i != -1; i-- do
	{
		if(PlayerPaintballing[i] != 0)
		{
			if(PaintballPlayers < 2)
			{
				SendClientMessageToAll(0x79F200AA,"::: Матч по пейнтболу отменен из - за не достаточного количества участников :::");
				state PaintballStarted:No;
				PlayerPaintballing[i] = 0;
				return PaintballPlayers = 0;
			}
			else
			{
			    PlayerPaintballing[i] = 1;

				PaintballPlayers = 0;
				SetPlayerArmour(i, 100);
				ResetPlayerWeapons(i);
				SetPlayerColor(i, 0xAA3333AA);

				new rands = random( sizeof paintgun );
				GivePlayerWeapon(i, paintgun[rands], 999);

				new rand = random(sizeof(PaintballSpawns));
				SetPlayerPos(i, PaintballSpawns[rand][0], PaintballSpawns[rand][1], PaintballSpawns[rand][2]);
			}
		}
	}

	SendClientMessageToAll(0x79F200AA,"::: Внимание! Матч по пейнтболу стартовал. Длительность - 3 минуты  :::");
    return SetTimer("EndPaintBall", 180000, false);
}

public StartedPaintBall() <>
{
	return false;
}

public EndPaintBall() <PaintballStarted:Yes>
{
    state PaintballStarted:No;

    new		string[128];

    SendClientMessageToAll(0x79F200AA,"::: Матч по пейнтболу завершён ::: ");

    for new i = GetMaxPlayers(); i != -1; i-- do
    {
        if(PlayerPaintballing[i] != 0)
        {
            if(IsPlayerConnected(PaintballWinner))
            {
                format(string, sizeof(string), "::: %s выйграл матч по пейнтболу с %d убийствами  :::",PlayerName[PaintballWinner],PaintballWinnerKills);
                SendClientMessage(i, 0xF5DEB3AA, string);
                GivePlayerMoney(PaintballWinner,5000);
            }
            ResetPlayerWeapons(i);
            PlayerPaintballing[i] = 0;
            SetPlayerPos(i, 521.1257,-1814.5043,6.5781);
//            SetPlayerToTeamColor(i);
            GivePlayerMoney(i,2000);
        }
    }
    return PaintballWinnerKills = 0;
}

public EndPaintBall() <>
{
	return false;
}
В OnGameModeInit:

PHP:
paintball = CreatePickup(353, 23, 523.9487,-1812.9863,6.5781);
В OnPlayerConnect:

PHP:
PlayerPaintballing[playerid] = 0;
GetPlayerName(playerid, PlayerName[playerid], 32);
В OnPlayerDeath:

PHP:
    if(PlayerPaintballing[playerid] != 0)
	{
	    PlayerPaintballKills[killerid] ++;
	    if(PlayerPaintballKills[killerid] > PaintballWinnerKills)
	    {
	        PaintballWinner = killerid;
	        PaintballWinnerKills = PlayerPaintballKills[killerid];
			if(PlayerPaintballing[killerid] != 0)
			{
				format(string, sizeof(string), "::: %s выигрывает с  %d убийствами.",PlayerName[killerid],PaintballWinnerKills);
				SendClientMessageToAll(0xF5DEB3AA, string);
			}
	    }
	    return true;
	}
Если будет ошибка undefined symbol string добавьте new string[100];

Если у вас коммандный процессор: OnPlayerCommandText то добавляем следующие паблики:

PHP:
public OnPlayerCommandText(playerid, cmdtext[]) <PaintballStarted:No>
{
    if (strcmp("/paintball", cmdtext, true, 10) == 0)
	{
		SendClientMessageToAll(0x79F200AA,"::: Внимание! Начало Paint Balla через 5 минут. Регистрация на пляже Los Santos :::");
	    SetTimer("StartedPaintBall", 300000, false);
	}
	return true;
}

public OnPlayerCommandText(playerid, cmdtext[]) <PaintballStarted:Yes>
{
	return SendClientMessage(playerid,-1,"::: Матч по пейнтболу уже начат! :::");
}

public OnPlayerCommandText(playerid, cmdtext[]) <PaintballStarted:Waiting>
{
	return SendClientMessage(playerid,-1,"::: Матч по пейнтболу уже запущен! :::");
}
Если же ZCMD то:

PHP:
CMD:paintball(playerid) <PaintballStarted:No>
{
	SetTimer("StartedPaintBall", 300000, false);
	return SendClientMessageToAll(0x79F200AA,"::: Внимание! Начало Paint Balla через 5 минут. Регистрация на пляже Los Santos :::");
}

CMD:paintball(playerid) <PaintballStarted:Waiting>
{
	return SendClientMessage(playerid,-1,"::: Матч по пейнтболу уже запущен! :::");
}

CMD:paintball(playerid) <PaintballStarted:Yes>
{
	return SendClientMessage(playerid,-1,"::: Матч по пейнтболу уже начат! :::");
}
Добавляем следующие паблики в конец скрипта:

PHP:
public OnPlayerPickUpPickup(playerid, pickupid) <PaintballStarted:Waiting>
{
	if(pickupid == paintball)
	{
		if(PlayerPaintballing[playerid] == 1)
			return SendClientMessage(playerid,-1,"::: Вы уже зарегестрированы на матч! :::");

		SendClientMessage(playerid, 0x6495EDFF, "::: Вы зарегестрировались на матч :::");
		PaintballPlayers ++;
		PlayerPaintballing[playerid] = 1;
	}
	return true;
}

public OnPlayerPickUpPickup(playerid, pickupid) <PaintballStarted:No>
{
	if(pickupid == paintball)
		return SendClientMessage(playerid,0xB4B5B7FF,"Регистрация закрыта!");

	return 0;
}

public OnPlayerPickUpPickup(playerid, pickupid) <PaintballStarted:Yes>
{
	if(pickupid == paintball)
		return SendClientMessage(playerid,0xB4B5B7FF,"Регистрация закрыта!");
		
	return true;
}
За основу была взята система пейнтбола из RLS.

Переделал: Пельмень

Тестировал на ZCMD. Всё работает отлично!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу