Суть и принцип работы:
Администратор прописывает команду, указывая в ней взнос, затем игрокам высвечивается сообщение о старте забега. Игроки пишут /rzone, с них берется взнос и они телепортируются. Кто первый возьмет последний чекпоинт - тот и победитель. Победителю достаются все деньги со взносов. Т.е. если участников было 10, а взнос 500, то победитель получит 4500 прибыли.
Это очень важно:
1. Используется стадион от Martin`a, эти объекты обязательно стоит вставить, ибо бегать по пустому пляжу вряд ли кому-то понравится. Ссылочка: http://pawno.su/showthread.php?t=108...E0%E4%E8%EE%ED
2. Команды написаны на DC_CMD.
3. pAdmin - переменная админки, замените на свою. pCash - переменная денег, замените на свою.
4. Если у вас в моде не даются каждую секунду деньги из pInfo[playerid][pCash] то строки с выдачей денег замените на GivePlayerMoney. Или же просто строки с выдачей/отбиранием денег сделайте по аналогии в вашем моде.
5. Если у Вас нет foreach, то строки с foreach(Player,i) замените на for(new i = 0; i < MAX_PLAYERS; i++)
Код:
К дефайнам:
Ко всем переменным:PHP код:
#define COLOR_ADM 0xFF6347AA
В OnPlayerConnect:PHP код:
new CPash[MAX_PLAYERS], ZabegOpen,ZabegVznos,Members,NaZabege[MAX_PLAYERS];
new Float:mass[11][3] = {
{242.6150,-1798.7765,4.5835},
{274.0659,-1796.0232,4.5818},
{290.0310,-1806.2958,4.5845},
{283.4669,-1822.1028,4.5843},
{263.8086,-1824.0033,4.5846},
{241.9038,-1821.6470,4.5852},
{240.1996,-1801.2089,4.5851},
{267.7746,-1795.9835,4.5847},
{289.9263,-1807.8026,4.5842},
{279.7703,-1823.4070,4.5851},
{242.3655,-1824.6104,4.5816}
};
Команды:PHP код:
CPash[playerid] = 0,NaZabege[playerid] = 0;
В конец мода:PHP код:
CMD:rstart(playerid,params[])
{
if(pInfo[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Недостаточно прав.");
if(ZabegOpen == 1) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Забег уже начался.");
if(sscanf(params,"d",params[0])) return SendClientMessage(playerid,-1,"{00CCCC}[Использование]{FFFFFF} /rstart [Взнос]");
if(params[0] < 1 || params[0] > 1000) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Взнос не может быть меньше 1 и больше 1000.");
new string[144];
if(pInfo[playerid][pAdmin] == 5) format(string,sizeof(string),"Главный Администратор %s объявил Забег | Для участия введи /rzone | Взнос $%d | Старт через 20 секунд",pInfo[playerid][pName],params[0]);
if(pInfo[playerid][pAdmin] == 4) format(string,sizeof(string),"Главный Модератор %s объявил Забег | Для участия введи /rzone | Взнос $%d | Старт через 20 секунд",pInfo[playerid][pName],params[0]);
if(pInfo[playerid][pAdmin] == 3) format(string,sizeof(string),"Модератор %s объявил Забег | Для участия введи /rzone | Взнос $%d | Старт через 20 секунд",pInfo[playerid][pName],params[0]);
SendClientMessageToAll(COLOR_ADM,string);
ZabegVznos = params[0];
ZabegOpen = 1;
SetTimer("ZabegStart",10000,false);
return true;
}
CMD:rzone(playerid,params[])
{
if(ZabegOpen == 0) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Никто не начинал забег.");
if(Members == 12) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Свободных мест нет.");
new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid, x,y,z);
GetPlayerFacingAngle(playerid, a);
SetPVarFloat(playerid, "ObrX", x);
SetPVarFloat(playerid, "ObrY", y);
SetPVarFloat(playerid, "ObrZ", z);
SetPVarFloat(playerid, "ObrA", a);
SetPVarInt(playerid, "ObrInt", GetPlayerInterior(playerid));
SetPVarInt(playerid, "ObrVirt", GetPlayerVirtualWorld(playerid));
SetPlayerVirtualWorld(playerid,901);
SetPlayerInterior(playerid,0);
SetPlayerFacingAngle(playerid,90.0);
switch(Members)
{
case 0: SetPlayerPos(playerid,261.7,-1826.0776,4.5819);
case 1: SetPlayerPos(playerid,261.7,-1824.0649,4.5822);
case 2: SetPlayerPos(playerid,261.7,-1822.3625,4.5821);
case 3: SetPlayerPos(playerid,266.7,-1826.0776,4.5819);
case 4: SetPlayerPos(playerid,266.7,-1824.0649,4.5822);
case 5: SetPlayerPos(playerid,266.7,-1822.3625,4.5821);
case 6: SetPlayerPos(playerid,271.7,-1826.0776,4.5819);
case 7: SetPlayerPos(playerid,271.7,-1824.0649,4.5822);
case 8: SetPlayerPos(playerid,271.7,-1822.3625,4.5821);
case 9: SetPlayerPos(playerid,276.7,-1826.0776,4.5819);
case 10: SetPlayerPos(playerid,276.7,-1824.0649,4.5822);
case 11: SetPlayerPos(playerid,276.7,-1822.3625,4.5821);
}
TogglePlayerControllable(playerid,0);
SetPlayerHealth(playerid,100);
ResetPlayerWeapons(playerid);
NaZabege[playerid] = 1;
pInfo[playerid][pCash] -= ZabegVznos;
Members++;
SetCameraBehindPlayer(playerid);
return true;
}
В OnPlayerEnterCheckpoint:PHP код:
forward ZabegStart();
public ZabegStart()
{
if(Members < 3)
{
SendClientMessageToAll(COLOR_ADM,"Забег был отменен из-за нехватки участников.");
Members = 0;
ZabegOpen = 0;
foreach(Player,i)
{
if(NaZabege[i] == 1)
{
NaZabege[i] = 0;
pInfo[i][pCash] += ZabegVznos;
TogglePlayerControllable(i,1);
SetPlayerPos(i, GetPVarFloat(i, "ObrX"), GetPVarFloat(i, "ObrY"), GetPVarFloat(i, "ObrZ"));
SetPlayerFacingAngle(i, GetPVarFloat(i, "ObrA"));
SetPlayerVirtualWorld(i, GetPVarInt(i, "ObrVirt"));
SetPlayerInterior(i, GetPVarInt(i, "ObrInt"));
DeletePVar(i, "ObrX");
DeletePVar(i, "ObrY");
DeletePVar(i, "ObrZ");
DeletePVar(i, "ObrA");
DeletePVar(i, "ObrInt");
DeletePVar(i, "ObrVirt");
}
}
ZabegVznos = 0;
return true;
}
foreach(Player,i)
{
if(NaZabege[i] == 1)
{
TogglePlayerControllable(i,1);
CPash[i] = 60;
DisablePlayerCheckpoint(i);
SetPlayerCheckpoint(i,240.0337,-1819.6104,4.5838, 3.0);
}
}
SendClientMessageToAll(COLOR_ADM,"Забег начался. Участникам желаем удачи.");
return true;
}
PHP код:
switch(CPash[playerid])
{
case 60..70:
{
PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
DisablePlayerCheckpoint(playerid);
new pos = CPash[playerid] - 60 ;
SetPlayerCheckpoint(playerid, mass[pos][0], mass[pos][1], mass[pos][2], 3.0);
CPash[playerid]++;
}
case 71:
{
pInfo[playerid][pCash] += ZabegVznos*Members;
new string[100];
format(string,sizeof(string),"%s[%d] стал победителем Забега. Поздравляем!",pInfo[playerid][pName],playerid);
SendClientMessageToAll(COLOR_ADM,string);
foreach(Player,i)
{
if(NaZabege[i] == 1)
{
NaZabege[i] = 0;
TogglePlayerControllable(i,1);
SetPlayerPos(i, GetPVarFloat(i, "ObrX"), GetPVarFloat(i, "ObrY"), GetPVarFloat(i, "ObrZ"));
SetPlayerFacingAngle(i, GetPVarFloat(i, "ObrA"));
SetPlayerVirtualWorld(i, GetPVarInt(i, "ObrVirt"));
SetPlayerInterior(i, GetPVarInt(i, "ObrInt"));
DeletePVar(i, "ObrX");
DeletePVar(i, "ObrY");
DeletePVar(i, "ObrZ");
DeletePVar(i, "ObrA");
DeletePVar(i, "ObrInt");
DeletePVar(i, "ObrVirt");
CPash[i] = 0;
DisablePlayerCheckpoint(i);
}
}
Members = 0; ZabegOpen = 0; ZabegVznos = 0;
return true;
}
}