Код: Выделить всё
forward CheckPaintballState();
forward StartPaintballRoundOne();
forward StartPaintballRoundTwo();
forward StartPaintballRoundThree();
forward PaintballIsOver();
Ко всем new
Код: Выделить всё
new PaintballRegistratedPlayers = 0; //Переменная хранящяя количество уже зарегистрированных игроков на paintball.
new PlayerRegistredOnPaintball[MAX_PLAYERS]; //Переменная хранящяя информацию о том зарегистрирован ли конкретный игрок на paintball.
new PaintballTeamRed = 0; //Переменная хранит количество игроков команды "Red 1".
new PaintballTeamBlue = 0; //Переменная хранит количество игроков команды "Blue 2".
new PlayerPaintballTeam[MAX_PLAYERS]; //Переменная хранящяя то, к какой команде присвоен конкретный игрок. None - 0, Red -1, Blue - 2.
new PaintballTeamRedScore = 0; //Переменная с количество очков команды "Red".
new PaintballTeamBlueScore = 0; //Переменная с количество очков команды "Blue".
new PaintballTeamRedRoundScore = 0;
new PaintballTeamBlueRoundScore = 0;
new PaintballBestScore = 0; //Переменная хранит количество убийств лучшего игрока.
new PaintballWinnerWithBestScore = 999; //Переменная получит Id игрока с наибольшим количеством убийств.
new PlayerPaintballScore[MAX_PLAYERS]; //Переменная хранящяя количество убийст сделаных конкретным игроком на paintball'e.
new PaintballAlreadyStarted = 0; //Переменная отвечающая за то начат ли paintball.
new Float:PaintballTeamRedSpawns[6][3] = { //Массив хранящий координаты всех точек spawn'а команды "Red" на paintball'е.
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ}
};
new Float:PaintballTeamBlueSpawns[6][3] = { //Массив хранящий координаты всех точек spawn'а команды "Blue" на paintball'е.
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ},
{PosX,PosY,PosZ}
};
new PaintballGuns[] = {gunid,gunid2,gunid3, gunidN}; //Массив хранящий виды оружия выдаваемые игроку на paintball'е.
new PaintballRegistrationPickup; //Переменная для пикапа регистрации на paintball.
new bool:RedOrBlue; //Переменная выберающая в какой команде будет игрок.
В public OnGameModeInit()
Код: Выделить всё
PaintballRegistrationPickup = CreatePickup(353, 23, 1712.9823,-1593.1775,13.3621); //Пикап регистрации на paintball.
В public OnPlayerDisconnect(playerid, reason)
Код: Выделить всё
PlayerRegistredOnPaintball[playerid] = 0;
PlayerPaintballScore[playerid] = 0;
PlayerPaintballTeam[playerid] = 0;
В public OnPlayerSpawn(playerid)
Код: Выделить всё
if(PlayerRegistredOnPaintball[playerid] != 0){
PlayerRegistredOnPaintball[playerid] = 1;
if(PlayerPaintballTeam[playerid] == 1) { //Игрок в команде Red.
ResetPlayerWeapons(playerid); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(playerid, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamRedSpawns));
SetPlayerPos(playerid, PaintballTeamRedSpawns[randspawn][0], PaintballTeamRedSpawns[randspawn][1], PaintballTeamRedSpawns[randspawn][2]);
}
else if(PlayerPaintballTeam[playerid] == 2) { //Игрок в команде Blue.
ResetPlayerWeapons(playerid); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(playerid, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamBlueSpawns));
SetPlayerPos(playerid, PaintballTeamBlueSpawns[randspawn][0], PaintballTeamBlueSpawns[randspawn][1], PaintballTeamBlueSpawns[randspawn][2]);
}
return 1;
}
В public OnPlayerDeath(playerid, killerid, reason)
Код: Выделить всё
if(PlayerRegistredOnPaintball[playerid] != 0) { //Если игрок зарегистрирован на paintball.
PlayerPaintballScore[killerid] ++; //Увеличим значение убийств, убившему игроку.
if(PlayerPaintballTeam[killerid] == 1){
PaintballTeamRedScore += 1;
}
else if(PlayerPaintballTeam[killerid] == 2){
PaintballTeamBlueScore += 1;
}
if(PlayerPaintballScore[killerid] > PaintballBestScore) //Проверяем не больше ли убийств у игрока сделавшего фраг, чем у самого лучшего игрока.
{
new string[256];
new killer[MAX_PLAYER_NAME]; //Локальная переменная с ником игрока.
PaintballWinnerWithBestScore = killerid; //Новым лучшим игроком делаем игрока имеющего наибольшее число убийств.
PaintballBestScore = PlayerPaintballScore[killerid]; //Изменим количество очков.
GetPlayerName(killerid, killer, sizeof(killer)); //получаем имя игрока.
for(new i = 0; i < MAX_PLAYERS; i++) //цыкл который ищет этого игрока
{
if(IsPlayerConnected(i)) //Проверяем подключен ли этот игрок
{
if(PlayerRegistredOnPaintball[i] != 0) //Если игрок все еще участвует в пейнтболе выводим сообщение о победителе.
{
if(PlayerPaintballTeam[i] == 1){ //Если игрок команды красных, выводим сообщение красным.
format(string, sizeof(string), "Игрок %s выигрывает со счетом: %d .",killer,PaintballBestScore);
SendClientMessage(i, 0xAA3333AA, string);
}
else if(PlayerPaintballTeam[i] == 2){ //Если игрок команды синих, выводим сообщение синим.
format(string, sizeof(string), "Игрок %s выигрывает со счетом: %d .",killer,PaintballBestScore);
SendClientMessage(i, 0x0000BBAA, string);
}
}
}
}
return 1;
}
}
В public OnPlayerCommandText(playerid, cmdtext[])
Код: Выделить всё
new cmd[256];
new string[256];
if (strcmp(cmd, "/teampaintball", true) == 0)
{
if(Player[playerid][PlayerAdmin] == 1) {
if(PaintballAlreadyStarted == 1) return SendClientMessage(playerid, 0xAA3333AA,"Paintball уже начат!"); //Если paintball уже начат, возвращаем админу сообщение об этом.
format(string, sizeof(string), "Внимание! Вы можете пройти регистрацию на paintball в течении 5 минут.");
SendClientMessageToAll(0xFFE4C4AA,string); //Выводим сообщение о начале пейнтбола в чат.
PaintballAlreadyStarted = 1; //Меняем значение переменной так как paintball начат.
//Обнуляем значения всех переменных:
PaintballRegistratedPlayers = 0;
PaintballTeamRed = 0;
PaintballTeamBlue = 0;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
PaintballBestScore = 0;
PaintballWinnerWithBestScore = 999;
SetTimer("StartPaintball", 300000, 0); //Запускаем таймер до начала paintball'а.
}
return 1;
}
В public OnPlayerPickUpPickup(playerid, pickupid)
Код: Выделить всё
if(pickupid == PaintballRegistrationPickup)
{
if(PaintballAlreadyStarted == 0) return SendClientMessage(playerid,0xAA3333AA,"Регистрация закрыта!"); //Если пейнтбол не начат, регитрироватся нельзя.
if(PlayerRegistredOnPaintball[playerid] == 1) return SendClientMessage(playerid,0xAA3333AA,"Вы уже зарегистрированы!");
//Если пейнтбол начат и игрок еще не зарегистрирован:
SendClientMessage(playerid, 0x33AA33AA, "Вы зарегистрировались на paintball.");
PaintballRegistratedPlayers += 1; //Увеличиваем переменную с зарегистрированными игроками.
PlayerRegistredOnPaintball[playerid] = 1; //Присваеваем игроку статус участника.
if(RedOrBlue == false){
RedOrBlue = true;
PlayerPaintballTeam[playerid] = 1; //Игрок команды "Red".
PaintballTeamRed += 1; //Увеличиваем переменную с игроками команды "Red".
}
else {
RedOrBlue = false;
PlayerPaintballTeam[playerid] = 2; //Игрок команды "Blue".
PaintballTeamBlue += 1; //Увеличиваем переменную с игроками команды "Blue".
}
}
В конец мода
Код: Выделить всё
public CheckPaintballState(){
new string[256];
if(PaintballRegistratedPlayers <2) { //Если зарегистрировалось меньше двух игроков.
for(new i = 0; i < MAX_PLAYERS; i++) { //Цикл перебирающий игроков online.
if(PlayerRegistredOnPaintball[i] != 0) { //Если у игрока присвоин параметр зарегистрированного участника.
format(string, sizeof(string), "Paintball был отменен из-за не достаточного количества участников!");
SendClientMessageToAll(0xAA3333AA,string);//Выводим сообщение об отмене paintball'а в чат.
PaintballAlreadyStarted = 0; //Меняем значение переменной, paintball не начат.
PlayerRegistredOnPaintball[i] = 0; //Все возможные зарегистрированные игроки больше не участники paintball'а.
PlayerPaintballTeam[i] = 0;
PaintballRegistratedPlayers = 0;
PaintballTeamRed = 0;
PaintballTeamBlue = 0;
return 1;
}
}
}
SetTimer("StartPaintballRoundOne", 100, 0);
return 1;
}
//==========================================
public StartPaintballRoundOne() {
new string[256];
format(string, sizeof(string), "Внимание! Paintball стартовал. Длительность - 9 минут.");
SendClientMessageToAll(0xFFE4C4AA,string); //Выводим сообщение о старте paintball'а в чат.
for(new i = 0; i < MAX_PLAYERS; i++) { //Перебераем всех игроков online.
if(IsPlayerConnected(i)) {
if(PlayerRegistredOnPaintball[i] != 0) { //Находим игроков зарегистрированных на paintball.
PlayerRegistredOnPaintball[i] = 1;
if(PlayerPaintballTeam[i] == 1) { //Игрок в команде Red.
ResetPlayerWeapons(i); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(i, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamRedSpawns));
SetPlayerPos(i, PaintballTeamRedSpawns[randspawn][0], PaintballTeamRedSpawns[randspawn][1], PaintballTeamRedSpawns[randspawn][2]);
GameTextForPlayer(i, "~r~Round one!", 6000, 3 );
SendClientMessage(i,0xFFFFFFAA,"Длительность раунда - 3минуты.");
}
else if(PlayerPaintballTeam[i] == 2) { //Игрок в команде Blue.
ResetPlayerWeapons(i); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(i, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamBlueSpawns));
SetPlayerPos(i, PaintballTeamBlueSpawns[randspawn][0], PaintballTeamBlueSpawns[randspawn][1], PaintballTeamBlueSpawns[randspawn][2]);
GameTextForPlayer(i, "~b~Round one!", 6000, 3 );
SendClientMessage(i,0xFFFFFFAA,"Длительность раунда - 3минуты.");
}
}
}
}
SetTimer("StartPaintballRoundTwo", 180000, 0);
return 1;
}
//==========================================
public StartPaintballRoundTwo() {
// new string[256];
if(PaintballTeamRedScore > PaintballTeamBlueScore && PaintballTeamRedScore != PaintballTeamBlueScore) {
PaintballTeamRedRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
else if(PaintballTeamRedScore == PaintballTeamBlueScore) {
PaintballTeamRedRoundScore += 1;
PaintballTeamBlueRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
else if(PaintballTeamRedScore < PaintballTeamBlueScore && PaintballTeamRedScore != PaintballTeamBlueScore) {
PaintballTeamBlueRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
for(new i = 0; i < MAX_PLAYERS; i++) { //Перебераем всех игроков online.
if(IsPlayerConnected(i)) {
if(PlayerRegistredOnPaintball[i] != 0) { //Находим игроков зарегистрированных на paintball.
PlayerRegistredOnPaintball[i] = 1;
if(PlayerPaintballTeam[i] == 1) { //Игрок в команде Red.
ResetPlayerWeapons(i); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(i, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamRedSpawns));
SetPlayerPos(i, PaintballTeamRedSpawns[randspawn][0], PaintballTeamRedSpawns[randspawn][1], PaintballTeamRedSpawns[randspawn][2]);
GameTextForPlayer(i, "~r~Round two!", 6000, 3 );
SendClientMessage(i,0xFFFFFFAA,"Длительность раунда - 3минуты.");
}
else if(PlayerPaintballTeam[i] == 2) { //Игрок в команде Blue.
ResetPlayerWeapons(i); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(i, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamBlueSpawns));
SetPlayerPos(i, PaintballTeamBlueSpawns[randspawn][0], PaintballTeamBlueSpawns[randspawn][1], PaintballTeamBlueSpawns[randspawn][2]);
GameTextForPlayer(i, "~b~Round two!", 6000, 3 );
SendClientMessage(i,0xFFFFFFAA,"Длительность раунда - 3минуты.");
}
}
}
}
SetTimer("StartPaintballRoundThree", 180000, 0);
return 1;
}
//==========================================
public StartPaintballRoundThree() {
if(PaintballTeamRedScore > PaintballTeamBlueScore && PaintballTeamRedScore != PaintballTeamBlueScore) {
PaintballTeamRedRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
else if(PaintballTeamRedScore == PaintballTeamBlueScore) {
PaintballTeamRedRoundScore += 1;
PaintballTeamBlueRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
else if(PaintballTeamRedScore < PaintballTeamBlueScore && PaintballTeamRedScore != PaintballTeamBlueScore) {
PaintballTeamBlueRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
for(new i = 0; i < MAX_PLAYERS; i++) { //Перебераем всех игроков online.
if(IsPlayerConnected(i)) {
if(PlayerRegistredOnPaintball[i] != 0) { //Находим игроков зарегистрированных на paintball.
PlayerRegistredOnPaintball[i] = 1;
if(PlayerPaintballTeam[i] == 1) { //Игрок в команде Red.
ResetPlayerWeapons(i); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(i, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamRedSpawns));
SetPlayerPos(i, PaintballTeamRedSpawns[randspawn][0], PaintballTeamRedSpawns[randspawn][1], PaintballTeamRedSpawns[randspawn][2]);
GameTextForPlayer(i, "~r~Round three!", 6000, 3 );
SendClientMessage(i,0xFFFFFFAA,"Длительность раунда - 3минуты.");
}
else if(PlayerPaintballTeam[i] == 2) { //Игрок в команде Blue.
ResetPlayerWeapons(i); //Удаляем оружие игрокам зарегистрированным на paintball.
new randgun = random(sizeof(PaintballGuns));
GivePlayerWeapon(i, PaintballGuns[randgun], 999);
new randspawn = random(sizeof(PaintballTeamBlueSpawns));
SetPlayerPos(i, PaintballTeamBlueSpawns[randspawn][0], PaintballTeamBlueSpawns[randspawn][1], PaintballTeamBlueSpawns[randspawn][2]);
GameTextForPlayer(i, "~b~Round three!", 6000, 3 );
SendClientMessage(i,0xFFFFFFAA,"Длительность раунда - 3минуты.");
}
}
}
}
SetTimer("PaintballIsOver", 180000, 0);
return 1;
}
//==========================================
public PaintballIsOver() {
new string[256];
new name[MAX_PLAYER_NAME];
if(PaintballTeamRedScore > PaintballTeamBlueScore && PaintballTeamRedScore != PaintballTeamBlueScore) {
PaintballTeamRedRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
else if(PaintballTeamRedScore == PaintballTeamBlueScore) {
PaintballTeamRedRoundScore += 1;
PaintballTeamBlueRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
else if(PaintballTeamRedScore < PaintballTeamBlueScore && PaintballTeamRedScore != PaintballTeamBlueScore) {
PaintballTeamBlueRoundScore += 1;
PaintballTeamRedScore = 0;
PaintballTeamBlueScore = 0;
}
format(string, sizeof(string), "Paintball завершён!");
SendClientMessageToAll(0xFFE4C4AA,string);//Выводим сообщение о завершении paintball'а.
if(PaintballTeamRedRoundScore > PaintballTeamBlueRoundScore && PaintballTeamRedRoundScore != PaintballTeamBlueRoundScore){
format(string, sizeof(string), "Победила команда - Red, количество побед в раундах - Red: %d .",PaintballTeamRedRoundScore);
SendClientMessageToAll(0xAA3333AA,string);
}
if(PaintballTeamRedRoundScore == PaintballTeamBlueRoundScore){
format(string, sizeof(string), "Ничия между командой - Red и командой - Blue, количество побед в раундах - Red: %d Blue: %d .",PaintballTeamRedRoundScore,PaintballTeamBlueRoundScore);
SendClientMessageToAll(0xFF6347AA,string);
}
if(PaintballTeamRedRoundScore < PaintballTeamBlueRoundScore && PaintballTeamRedRoundScore != PaintballTeamBlueRoundScore){
format(string, sizeof(string), "Победила команда - Blue, количество побед в раундах - Blue: %d .",PaintballTeamBlueRoundScore);
SendClientMessageToAll(0x0000BBAA,string);
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerRegistredOnPaintball[i] != 0)
{
if(IsPlayerConnected(PaintballWinnerWithBestScore))
{
GetPlayerName(PaintballWinnerWithBestScore, name, sizeof(name));
format(string, sizeof(string), "Лучший игрок %s со счетом %d .",name,PaintballWinnerWithBestScore);
SendClientMessage(i, 0x79F200AA, string);
}
ResetPlayerWeapons(i);
PlayerRegistredOnPaintball[i] = 0;
PlayerPaintballTeam[i] = 0;
SetPlayerPos(i, 521.1257,-1814.5043,6.5781);
}
}
}
PaintballAlreadyStarted = 0;
return 1;
}
//==========================================
public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart) {
if(damagedid != INVALID_PLAYER_ID)
{
if(PlayerRegistredOnPaintball[playerid] !=0 && PlayerRegistredOnPaintball[damagedid] !=0){
if(PlayerPaintballTeam[playerid] == PlayerPaintballTeam[damagedid]){
SetPlayerHealth(damagedid, amount);
SendClientMessage(playerid, 0xAA3333AA,"Вы стреляете в своего!");
}
}
}
return 1;
}