Пельмень
Компетентный
Доброго дня уважаемые пользователи pawno-info. Решил выложить свой первый мануал на переключателях (state). Возможно есть недочёты.
Ко всем new:
Ко всем forward:
В конец скрипта:
В OnGameModeInit:
В OnPlayerConnect:
В OnPlayerDeath:
Если будет ошибка undefined symbol string добавьте new string[100];
Если у вас коммандный процессор: OnPlayerCommandText то добавляем следующие паблики:
Если же ZCMD то:
Добавляем следующие паблики в конец скрипта:
За основу была взята система пейнтбола из RLS.
Переделал: Пельмень
Тестировал на ZCMD. Всё работает отлично!
Ко всем 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 };
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;
}
PHP:
paintball = CreatePickup(353, 23, 523.9487,-1812.9863,6.5781);
PHP:
PlayerPaintballing[playerid] = 0;
GetPlayerName(playerid, PlayerName[playerid], 32);
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;
}
Если у вас коммандный процессор: 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,"::: Матч по пейнтболу уже запущен! :::");
}
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;
}
Переделал: Пельмень
Тестировал на ZCMD. Всё работает отлично!
Последнее редактирование:
