eFFect
Дебютант
Да простит меня Администрация GalaxY за то что "украл" у них идею
pasno:
И так, это моё первое Готовое решение, да и вообще первая работа на этом форуме. Как и все новички, попрошу строго не судить, ибо уровень моего скриптинга в pawn колеблется от 1 до 2 (по 5 бальной шкале xd).
Описание:
Один из игроков создаёт "зону", (указав при этом её параметры), остальные входят в неё командой /jzona. Поочерёдно игроки будут ТП'шиться на две противоположные базы (у 1 базы цвет синий, у второй красный). Потом начинается тупой ДМ xD Последний оставшийся в зоне, победитель! Победитель спавнится и получает награду указанную при создании зоны.
P.S. Изначально делались CS зоны, поэтому и деление на две команды Красные vs Синие.
И так, начнём. Ко всем forward'ам добовляем:
Далее, ко всем new'ам:
Потом в OnGameModeInit добавляем таймер:
Теперь в OnPlayerDeath:
Далее идём в OnPlayerCommandText и вставляем туда команды управления зонами:
Tеперь в самый конец мода вставляем паблик TimerZona и FreezeZona:
Если нету, так же в конце вставляем функцию PlayerName:
Вот как бы и всё 
В этом варианте всего 1 интерьер и зону может создать любой игрок, если вы хотите чтобы создавать/удалять зоны могла только Администрация сервера, просто добавьте в команду /czona и /qzona проверку на Администратора.
Пробуем!
Если найдете баги/ошибки, пишите их в эту тему, исправим
От себя
Просьба не "тыкать" меня носом в мой код, я только начинающий скриптер в pawn и незнаю всех нюансов оптимизации.
И так, это моё первое Готовое решение, да и вообще первая работа на этом форуме. Как и все новички, попрошу строго не судить, ибо уровень моего скриптинга в pawn колеблется от 1 до 2 (по 5 бальной шкале xd).
Описание:
Один из игроков создаёт "зону", (указав при этом её параметры), остальные входят в неё командой /jzona. Поочерёдно игроки будут ТП'шиться на две противоположные базы (у 1 базы цвет синий, у второй красный). Потом начинается тупой ДМ xD Последний оставшийся в зоне, победитель! Победитель спавнится и получает награду указанную при создании зоны.
P.S. Изначально делались CS зоны, поэтому и деление на две команды Красные vs Синие.
И так, начнём. Ко всем forward'ам добовляем:
PHP:
forward FreezeZona(playerid, countid);
forward TimerZona();
PHP:
new zona, maxplayers, players, winner, zgun;
new InZona[MAX_PLAYERS];
PHP:
SetTimer("TimerZona", 1000, 1);
PHP:
if(InZona[playerid] == 601)
{
players--;
InZona[playerid] = 600;
if(players == 1)
{
new string[256];
format(string, 256, "* Зона завершена! Победитель: %s[%d]", PlayerName(killerid), killerid);
SendClientMessageToAll(0xFFFFFF, string);
GivePlayerMoney(killerid, winner);
InZona[killerid] = 600;
SpawnPlayer(killerid);
zona = 0;
players = 0;
maxplayers = 0;
winner = 0;
zgun = 0;
}
}
PHP:
new string[256];
if(strcmp(cmd, "/czona", true) == 0) // Создать зону
{
tmp = strtok(cmdtext, idx);
new tmpzona = strval(tmp);
tmp = strtok(cmdtext, idx);
new tmpgun = strval(tmp);
tmp = strtok(cmdtext, idx);
new tmpplayers = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, 0xAAFFAA, "* Используйте: /czona [ид зоны] [оружие] [макс. игроков] [вознагрождение]");
return 1;
}
new tmpwinner = strval(tmp);
new tmpzonaname[128], tmpgunname[64];
zona = tmpzona;
maxplayers = tmpplayers;
winner = tmpwinner;
zgun = tmpgun;
switch(zona)
{
case 1: tmpzonaname = "RC Battlefield";
}
switch(tmpgun)
{
/* По желанию,
можете добавить
сюда ID'ы других
оружий, чтобы они
отображались в
сообщении */
case 24: tmpgunname = "Eagle";
case 30: tmpgunname = "Ak47";
case 31: tmpgunname = "M4";
}
format(string, 256, "* Игрок %s создал зону %s на %s Макс. игроков: %d Победителю: $%d", PlayerName(playerid), tmpzonaname, tmpgunname, tmpplayers, tmpwinner);
SendClientMessageToAll(0xFF0000, string);
return 1;
}
if(strcmp(cmd, "/qzona", true) == 0) // Закрыть зону
{
if(zona == 0) return SendClientMessage(playerid, 0xAAAAAA, "* Зона не создана");
new tmpzonaname[128];
switch(zona)
{
case 1: tmpzonaname = "RC Battlefield";
}
format(string, 256, "* Игрок %s закрыл зону %s", PlayerName(playerid), tmpzonaname);
SendClientMessageToAll(0xFF0000, string);
ResetPlayerWeapons(playerid);
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(InZona[i] > 0)
{
SpawnPlayer(i);
InZona[i] = 600;
}
}
}
zona = 0;
players = 0;
maxplayers = 0;
winner = 0;
zgun = 0;
return 1;
}
if(strcmp(cmd, "/jzona", true) == 0) // Войти в зону
{
if(zona < 1) return SendClientMessage(playerid, 0xAAAAAA, "* Зона ещё не создана");
if(players == maxplayers) return SendClientMessage(playerid, 0xAAAAAA, "* Зона заполнена");
if(InZona[playerid] == 601) return SendClientMessage(playerid, 0xAAAAAA, "* Вы уже в зоне");
if(InZona[playerid] > 0)
{
format(string, 256, "* Вы уже участвовали в зоне. Подождите %d секунд", InZona[playerid]);
SendClientMessage(playerid, 0xAAAAAA, string);
return 1;
}
players++;
InZona[playerid] = 601;
if(zona == 1)
{
if(players % 2 == 0)
{
SetPlayerInterior(playerid, 10);
SetPlayerPos(playerid, -975.975708, 1060.983032, 1345.671875);
SetPlayerColor(playerid, 0xFF0000AA);
}
else
{
SetPlayerInterior(playerid, 10);
SetPlayerPos(playerid, -1131.4973, 1057.7863, 1346.4158);
SetPlayerColor(playerid, 0xFF0000AA);
}
}
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, zgun, 228);
new count = 4;
for(new i = 0; i < 5; i++)
{
SetTimerEx("FreezeZona", i*1200, 0, "dd", playerid, count);
count--;
}
SendClientMessage(playerid, 0x00FF00, "* Вы вошли в зону");
return 1;
}
PHP:
public TimerZona()
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(InZona[i] > 0 && InZona[i] != 601) InZona[i]--;
}
}
return 1;
}
public FreezeZona(playerid, countid)
{
new str[64];
if(countid == 4)
{
TogglePlayerControllable(playerid, 0);
format(str, 64, "Please Wait... ~n~ ~b~%s", PlayerName(playerid));
GameTextForPlayer(playerid, str, 1000, 6);
}
else if(countid)
{
format(str, 64, "%d", countid);
GameTextForPlayer(playerid, str, 1000, 6);
}
else
{
TogglePlayerControllable(playerid, 1);
GameTextForPlayer(playerid, "~r~Go!", 1500, 6);
}
return 1;
}
PHP:
stock PlayerName(playerid)
{
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
return pname;
}
В этом варианте всего 1 интерьер и зону может создать любой игрок, если вы хотите чтобы создавать/удалять зоны могла только Администрация сервера, просто добавьте в команду /czona и /qzona проверку на Администратора.
Пробуем!
Если найдете баги/ошибки, пишите их в эту тему, исправим
От себя
Просьба не "тыкать" меня носом в мой код, я только начинающий скриптер в pawn и незнаю всех нюансов оптимизации.
