Smile
Специалист
Такого манула еще не видел, так-что выкладываю =)
Автор: Я =)
GO:
Ко всем forward's
Ко всем new's
Создаем паблики:
В public OnPlayerCommandText
В public OnPlayerStateChange
Если нету паблика OnVehicleDamageStatusUpdate то добавляем.
в public OnPlayerDisconnect
в public OnGameModeInit
в public OnPlayerPickUpPickup
Вродебы все, если выходят ошибки, пишите тут, помогу!
Автор: Я =)
GO:
Ко всем forward's
PHP:
forward DerbiGonkaWinner(playerid);
forward DerbiGonkaEnded();
forward DerbiStartGonka();
forward DerbiStartGonkatwo();
forward DerbiStartGonka1
forward DerbiStartGonka2
forward DerbiStartGonka3
PHP:
new derbichet[MAX_PLAYERS];
new winner[MAX_PLAYERS];
new derbirace[3];
new EndingderbiRound = 1;
new DerbiPlayers = 0;
new Playerderbi[MAX_PLAYERS];
// спавн машин на дерби
new Float:DerbiSpawns[20][4] = {
{-1355.2977,934.0847,1036.1278,7.2270}, // дерби 1
{-1337.1343,938.5261,1036.1738,20.2087}, // дерби 2
{-1317.5848,946.4304,1036.2747,31.0840}, // дерби 3
{-1302.5338,955.1391,1036.3922,41.4171}, // дерби 4
{-1293.2971,964.3026,1036.5234,48.0448}, // дерби 5
{-1283.1465,976.3253,1036.7102,58.6772}, // дерби 6
{-1278.4069,991.7879,1036.9587,86.2603}, // дерби 7
{-1281.2871,1008.8069,1037.2496,91.4685}, // дерби 8
{-1289.2437,1024.4241,1037.5256,101.2547}, // дерби 9
{-1307.4032,1039.3407,1037.8066,127.2879}, // дерби 10
{-1336.4865,1052.3142,1038.0741,148.9551}, // дерби 11
{-1357.8706,1057.1317,1038.1882,159.1849}, // дерби 12
{-1377.9399,1058.0959,1038.2426,172.7466}, // дерби 13
{-1398.3962,1057.6173,1038.2660,171.3333}, // дерби 14
{-1428.6929,1058.1292,1038.3252,178.7059}, // дерби 15
{-1457.7089,1053.6016,1038.3070,192.3742}, // дерби 16
{-1486.4302,1041.4038,1038.1542,208.0230}, // дерби 17
{-1508.5839,1020.3392,1037.8357,234.8889}, // дерби 18
{-1516.5342,989.7833,1037.3513,270.3085}, // дерби 19
{-1506.7659,965.2000,1036.9224,293.0279} // дерби 20
};
//рандомное авто
new derbi[] = {494,502,503,504};
Создаем паблики:
PHP:
public DerbiStartGonkatwo()
{
new string[100];
format(string, sizeof(string), "::: Внимание! Начало Дерби - Гонок через 2 минуты. Трасса: Стадион Сан Фиерро. Регистрация на месте :::");
OOCOff(0x00B95CAA,string);
EndingderbiRound = 0;
SetTimer("DerbiStartGonka1", 120000, 0);
return 1;
}
public DerbiStartGonka1()
{
new string[100];
EndingderbiRound = 1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(Playerderbi[i] != 0)
{
new rands = random(sizeof(derbi));
format(string, sizeof(string), "1");
GameTextForPlayer(i, string, 1000, 3);
new rand;
rand = random(sizeof(DerbiSpawns));
new carid = CreateVehicle(derbi[rands], DerbiSpawns[rand][0],DerbiSpawns[rand][1],DerbiSpawns[rand][2],DerbiSpawns[rand][3], 3, 3, 60000);
PutPlayerInVehicle(i, carid, 0);
CreatedCars[CreatedCar] = carid;
TogglePlayerControllable(i, 0);
SetPlayerInterior(i,15);
LinkVehicleToInterior(carid, 15);
}
}
}
SetTimer("DerbiStartGonka2", 1000, 0);
return 1;
}
public DerbiStartGonka2()
{
new string[100];
EndingderbiRound = 1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(Playerderbi[i] != 0)
{
format(string, sizeof(string), "2");
GameTextForPlayer(i, string, 1000, 3);
}
}
}
SetTimer("DerbiStartGonka3", 1000, 0);
return 1;
}
public DerbiStartGonka3()
{
new string[100];
EndingderbiRound = 1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(Playerderbi[i] != 0)
{
format(string, sizeof(string), "3");
GameTextForPlayer(i, string, 1000, 3);
}
}
}
SetTimer("DerbiStartGonka", 1000, 0);
return 1;
}
public DerbiStartGonka()
{
new string[100];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(DerbiPlayers < 2)
{
format(string, sizeof(string), "::: Дерби - Гонка отменена из-за не достаточного колличества участников! :::");
OOCOff(0x00B95CAA,string);
EndingderbiRound = 1;
Playerderbi[i] = 0;
TogglePlayerControllable(i, 1);
DerbiPlayers = 0;
DisablePlayerRaceCheckpoint(i);
if(Playerderbi[i] != 0)
{
SetPlayerInterior(i, 1);
SetPlayerPos(i,-2159.0461,640.3610,1052.3817);
SetPlayerFacingAngle(i, 76.4112);
DestroyVehicle(GetPlayerVehicleID(i));
}
return 1;
}
if(IsPlayerConnected(i))
{
if(Playerderbi[i] != 0)
{
GameTextForPlayer(i, "~r~GO! GO! GO!", 5000, 3);
PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
TogglePlayerControllable(i, 1);
Playerderbi[i] = 1;
SetVehicleParamsEx(GetPlayerVehicleID(i) ,VEHICLE_PARAMS_ON,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective);
}
}
}
format(string, sizeof(string),"::: Внимание! Дерби - Гонка началась. Трасса: Стадион Сан Фиерро :::");
OOCOff(0x00B95CAA,string);
SetTimer("DerbiGonkaEnded", 300000, 0);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(Playerderbi[i] != 0)
{
winner[i] = SetTimerEx("DerbiGonkaWinner", 10000, 1,"d",i);
}
}
EndingderbiRound = 1;
return 1;
}
public DerbiGonkaEnded()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
new string[100];
DisablePlayerCheckpoint(i);
format(string, sizeof(string),"::: Дерби - Гонка завершенa! Победители получили свои призы :::");
OOCOff(0x00B95CAA,string);
if(Playerderbi[i] != 0)
{
DestroyVehicle(GetPlayerVehicleID(i));
}
Playerderbi[i] = 0;
EndingderbiRound = 1;
DerbiPlayers = 0;
return 1;
}
}
return 1;
}
public DerbiGonkaWinner(playerid)
{
if(Playerderbi[playerid] != 0)
{
if(DerbiPlayers <= 1)
{
SendClientMessage(playerid, 0x6495EDFF, "Поздравляем вы победитель! Вы выйграли 20 000 вирт!");
PlayerInfo[playerid][pCash] +=20000;
Playerderbi[playerid] = 0;
EndingderbiRound = 1;
Playerderbi[playerid] = 0;
DerbiPlayers = 0;
//
derbichet[playerid] = 0;
TogglePlayerControllable(playerid, 1);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid,-2113.5208,-442.3560,38.2776);
SetPlayerFacingAngle(playerid, 76.4112);
Playerderbi[playerid] = 0;
KillTimer(winner[playerid]);
//
}
}
}
В public OnPlayerCommandText
PHP:
else if (strcmp(cmd, "/drace", true) == 0)
{
if(IsPlayerAdmin(playerid)|| PlayerInfo[playerid][pAdmin] >= 5)
{
if(EndingderbiRound == 0) return SendClientMessage(playerid,COLOR_WHITE,"::: Дерби Гонка уже начата!");
format(string, sizeof(string), "::: Внимание! Начало Дерби - Гонок через 5 минут. Трасса: Стадион Сан Фиерро. Регистрация на месте :::");
OOCOff(0x00B95CAA,string);
EndingderbiRound = 0;
SetTimer("DerbiStartGonkatwo", 180000, 0);
}
return 1;
}
PHP:
if(Playerderbi[playerid] != 0)
{
SendClientMessage(playerid, COLOR_NEWS, "Вы были дисквалифицированы!");
DisablePlayerRaceCheckpoint(playerid);
derbichet[playerid] = 0;
DerbiPlayers -= 1;
TogglePlayerControllable(playerid, 1);
SetPlayerInterior(playerid, 1);
SetPlayerPos(playerid,-2159.0461,640.3610,1052.3817);
SetPlayerFacingAngle(playerid, 76.4112);
Playerderbi[playerid] = 0;
return 1;
}
Если нету паблика OnVehicleDamageStatusUpdate то добавляем.
PHP:
public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
new Float: carhp;
GetVehicleHealth(vehicleid, carhp);
else if(carhp > 50 && carhp <= 250) // дымит
{
if(Playerderbi[playerid] != 0)
{
SendClientMessage(playerid, COLOR_NEWS, "Вы проиграли!");
DisablePlayerRaceCheckpoint(playerid);
derbichet[playerid] = 0;
DerbiPlayers -= 1;
TogglePlayerControllable(playerid, 1);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid,-2113.5208,-442.3560,38.2776);
SetPlayerFacingAngle(playerid, 76.4112);
Playerderbi[playerid] = 0;
return 1;
}
//
}
}
PHP:
if(Playerderbi[playerid] != 0)
{
DerbiPlayers -= 1;
}
PHP:
derbirace[0] = CreatePickup(1314, 23, -2159.0461,640.3610,1052.3817); // пикап регистрации дерби
derbirace[1] = CreatePickup(1318, 23, -2109.9355,-443.3014,38.7344); // вход в дерби
derbirace[2] = CreatePickup(1318, 23, -2170.3154,635.4061,1052.3750); // выход
в public OnPlayerPickUpPickup
PHP:
else if(pickupid == derbirace[0])
{
if(EndingderbiRound >= 1) return SendClientMessage(playerid,COLOR_WHITE,"Регистрация закрыта!");
if(PlayerInfo[playerid][pLevel] < 2 ) return SendClientMessage(playerid,COLOR_GRAD1,"Участвовать можно с 2-х лет проживания в штате!");
if(PlayerInfo[playerid][pWarns] >=1 ) return SendClientMessage(playerid,COLOR_GRAD1,"Нельзя учавствовать с Warnom!");
if(DerbiPlayers >= 20) return SendClientMessage(playerid,COLOR_GRAD1,"Слишком много участников!");
if( Playerderbi[playerid] == 1) return SendClientMessage(playerid,COLOR_WHITE,"Вы уже зарегестрированы на гонку!");
SendClientMessage(playerid, 0x6495EDFF, "::: Вы зарегестрировались на гонку :::");
DerbiPlayers += 1;
Playerderbi[playerid] = 1;
}
else if(pickupid == derbirace[1])
{
SetPlayerInterior(playerid,1);
SetPlayerPos(playerid,-2170.4685,638.5978,1052.3750);
SetPlayerFacingAngle(playerid,355.9632);
}
else if(pickupid == derbirace[2])
{
DerbiPlayers -= 1;
TogglePlayerControllable(playerid, 1);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid,-2113.5208,-442.3560,38.2776);
SetPlayerFacingAngle(playerid, 76.4112);
Playerderbi[playerid] = 0;
}
Вродебы все, если выходят ошибки, пишите тут, помогу!
Последнее редактирование:
