Zapocnimo
Pravljenje enuma
Prije svega da nebude zbrke sa vasim enumima napravicemo vlastiti enum za evente
Pri vrhu skripte dodajte sljecece:
enum eInfo
{
};
new EventInfo;Da pojasnim .Enum je funkcija u koju mozete pisati svoje funkcije npr za registracija lozinka itd npr pLozinka, pAdmin, itd...
Izmedju zagradica u enumu dodacemo sljedece : pSFrace , to bi trebalo vako izgledati
enum eInfo
{
pSFrace
};
new EventInfo;Da nebi imali problema sa warninzima na pocetak skripte ako nemate dodajte #pragma tabsize 0
New-s i Define
Sada ce mo definisati neke stvari pri vrhu skripte dodajte ovo
new sfpocetak = 0;
new sfc1,sfc2,sfc3,sfc4,sfc5,sfc6;
new RCP;
new PrvoMjesto = 999;
new DrugoMjesto = 999;
new TreceMjesto = 999;da pojasnim , new sfpocetak = 0; oznacava start sf racea, new sfc1,sfc2,sfc3,sfc4,sfc5,sfc6; To su definicije vozila koja ce mo koristiti, u ovom slucaju ja sam 6 vozila definiso,new RCP; to je new oznaka za Check pointe racea(crveni kruzici kroz koje se prolazi
opet iznad ovih new-ova dodajte definicije ovih boja ako ih nemate ako imate nemojte dodavati
#define COLOR_LIGHTRED 0xFF6347AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_LIGHTGREEN 0x9ACD32AA
#define COLOR_YELLOW 0xDABB3EAATimeri
Na redu su timeri. Pri vrhu dodajte slejdece
forward SfTimer();
forward SfTimer2();
forward SfTimer3(playerid);To su kao definicije za publice koje ce mo dodati
Sada izmedju ostalih publica dodajte ovo
public SfTimer()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(EventInfo == 1)
{
if(IsPlayerConnected(i))
{
GameTextForPlayer(i, "~b~2",1000,4);
SetTimer("SfTimer2",1000,0);
}
}
}
}
public SfTimer2()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(EventInfo == 1)
{
if(IsPlayerConnected(i))
{
GameTextForPlayer(i, "~b~1",1000,4);
SetTimer("SfTimer3",1000,0);
}
}
}
}
public SfTimer3(playerid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(EventInfo == 1)
{
if(IsPlayerConnected(i))
{
TogglePlayerControllable(i, 1);
GameTextForPlayer(i, "~r~START !!!",1000,4);
SetPlayerRaceCheckpoint(playerid,0,X,Y,Z(prvog cpa),X,Y,Z(Drugog cpa),6);
RCP = 1;
}
}
}
}Da pojasnim, ovii timeri ce se pokretati komandom i svi koji su na eventu pojavit ce im se brojanje od 3 do start .
Zasto i 1 i 2 cp u jednom redu?
Dakle pravicemo Cpove koji pokazuju put jedan do drugog,prvi cp je onaj cp pocetni a kada ubacite kordinate drugog cpa ona kao strelica u prvom cpu pokazivat ce put na drugi cp da nebi bilo zabune
Cp-ovi
Dosli su na red CP-ovi.Dakle otidjite tamo gdje vam je istaliran gta i nadjite samp debug. pokrenuti ga i odlaziti na mjesta gdje ocete cpove i kucati /save
Onda otvoriti : MY documents ---> GTA San Andreas User Files ---> SAMP ---> savedpositions
Onda ce te unutra dobiti nesto ovakvo:AddPlayerClass(0,-2126.5186,-106.8968,35.3203,8.3661,0,0,0,0,0,0); //
To sto sam crnim oznacio to su kordinate vaseg cpa
Sada pod public OnPlayerEnterCheckpoint(playerid) dodajte sljedece:
if (!IsPlayerInAnyVehicle(playerid))
{
return 1;
}
if(RCP == 0) { DisablePlayerCheckpoint(playerid); }
else if(RCP == 1) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2073.3728,-67.0730,34.7398,-2025.0029,-67.3533,34.7379 ,6); RCP = 2; }
else if(RCP == 2) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2025.0029,-67.3533,34.7379,-2008.4272,20.5034,32.3119 ,6); RCP = 3; }
else if(RCP == 3) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2008.4272,20.5034,32.3119,-2007.0002,306.9487,34.4671 ,6); RCP = 4; }
else if(RCP == 4) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2007.0002,306.9487,34.4671,-2243.0217,317.2373,34.7387 ,6); RCP = 5; }
else if(RCP == 5) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2243.0217,317.2373,34.7387,-2257.8828,65.5433,34.7377 ,6); RCP = 6; }
else if(RCP == 6) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2257.8828,65.5433,34.7377,-2372.9924,-0.9352,34.7303,6); RCP = 7; }
else if(RCP == 7) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2372.9924,-0.9352,34.7303,-2328.8132,-193.8194,34.7381 ,6); RCP = 8; }
else if(RCP == 8) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2328.8132,-193.8194,34.7381,-2223.4875,-192.8943,34.7714 ,6); RCP = 9; }
else if(RCP == 9) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2223.4875,-192.8943,34.7714,-2163.9258,-88.4102,34.7379 ,6); RCP = 10; }
else if(RCP == 10) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,0,-2163.9258,-88.4102,34.7379,-2076.6343,-72.2841,34.7379 ,6); RCP = 11; }
else if(RCP == 11) { DisablePlayerRaceCheckpoint(playerid); SetPlayerRaceCheckpoint(playerid,1,-2076.6343,-72.2841,34.7379,-2076.6343,-72.2841,34.7379 ,8); RCP = 12; }
else if(RCP == 12)//Kraj SF
{
RCP = 0;
DisablePlayerRaceCheckpoint(playerid);
new string;
new name;
GetPlayerName(playerid, name, sizeof(name));
if(PrvoMjesto == 999)
{
PrvoMjesto = playerid;
SendClientMessage(playerid,COLOR_WHITE,"Zavrsili ste prvi i osvojili 10.000$");
GivePlayerMoney(playerid,10000);
foreach (Player, i)
{format(string, sizeof(string), "* Prvo mjesto: %s.",name);SendClientMessage(i, COLOR_WHITE, string);}
}
else if(DrugoMjesto == 999)
{
DrugoMjesto = playerid;
SendClientMessage(playerid,COLOR_WHITE,"Zavrsili ste drugi i osvojili 5000$");
GivePlayerMoney(playerid,5000);
foreach (Player, i)
{format(string, sizeof(string), "* Drugo mjesto: %s.",name);SendClientMessage(i, COLOR_WHITE, string);}
}
else if(TreceMjesto == 999)
{
TreceMjesto = playerid;
SendClientMessage(playerid,COLOR_WHITE,"Zavrsili ste treci i osvojili 2500$");
GivePlayerMoney(playerid,2500);
foreach (Player, i)
{format(string, sizeof(string), "* Trece mjesto: %s.",name);SendClientMessage(i, COLOR_WHITE, string); SendClientMessage(i, COLOR_WHITE, "** SF Race je zavrsen **"); RCP = 0; DisablePlayerRaceCheckpoint(i);}
}
}Ja sam ubacio neke svoje kordinate Cpova a vi ubacite svoje dakle
SetPlayerRaceCheckpoint(playerid,1,X,Y,Z(cp1),X,Y,Z(cp2) ,😎;
U ovom slucaju ja sam koristio 11 cpova , na kraju svakog cpa mozete vidjeti : RCP = nekibroj; }
to je znak da igracu daje drugi cp a DisablePlayerRaceCheckpoint(playerid); unistava postojeci CP
Kada dodjete do kraja cpova onda postavite samo
else if(RCP == zadnjibroj)//Kraj SF
i ispod toga ide ovako
{
RCP = 0;
DisablePlayerRaceCheckpoint(playerid);
new string;
new name;
GetPlayerName(playerid, name, sizeof(name));
if(PrvoMjesto == 999)
{
PrvoMjesto = playerid;
SendClientMessage(playerid,COLOR_WHITE,"Zavrsili ste prvi i osvojili 10.000$");
GivePlayerMoney(playerid,10000);
foreach (Player, i)
{format(string, sizeof(string), "* Prvo mjesto: %s.",name);SendClientMessage(i, COLOR_WHITE, string);}
}
else if(DrugoMjesto == 999)
{
DrugoMjesto = playerid;
SendClientMessage(playerid,COLOR_WHITE,"Zavrsili ste drugi i osvojili 5000$");
GivePlayerMoney(playerid,5000);
foreach (Player, i)
{format(string, sizeof(string), "* Drugo mjesto: %s.",name);SendClientMessage(i, COLOR_WHITE, string);}
}
else if(TreceMjesto == 999)
{
TreceMjesto = playerid;
SendClientMessage(playerid,COLOR_WHITE,"Zavrsili ste treci i osvojili 2500$");
GivePlayerMoney(playerid,2500);
foreach (Player, i)
{format(string, sizeof(string), "* Trece mjesto: %s.",name);SendClientMessage(i, COLOR_WHITE, string); SendClientMessage(i, COLOR_WHITE, "** SF Race je zavrsen **"); RCP = 0; DisablePlayerRaceCheckpoint(i);}
}
}
Znaci imaju poruke i nagrade , GivePlayerMoney to je funkcija za davanje novca igracu,SendClientMessage za slanje poruke igracu itd...
Komande
Na red su dosle komande,napravicemo sljedece komande . /eventi ---> za admina da pokrene event da se moze tp na njega , /sfrace ---> za admina da starta event i tom komandom pokrece one timere sto smo na pocetku pravili, /join ---> ako je admin otvorio port igrac ce se moci tpati do eventa, /sfracevozila ---> za stvaranje vozila za taj race ,/sfraceunisti ---> za unistavanje eventa i vozila
Na dno skripte ako koristite ZCMD dodajte :
CMD:eventi(playerid, params[])
{
if(!IsPlayerAdmin(playerid))//provjera dali je igrac rcon admin
{
SendClientMessage(playerid,0xAA3333AA,"Nisi rcon ulogovan Admin!"); return 1;//ako nije ne prikazuje mu dialog vec mu izbacuje poruku da nije rcon
}
if(IsPlayerAdmin(playerid))
{
ShowPlayerDialog(playerid,3000,DIALOG_STYLE_LIST ,"Eventi","SF race","Odaberi","Odustani");// pokazuje adminu dialog
}
return 1;
}Zatim komanda za vozila, Napomena😮tidjite u debug i koristite /v za stvaranje vozila udjite u vozilo odvezite ga gdje treba da stoji i kucajte /save, onda idite MY documents ---> GTA San Andreas User Files ---> SAMP ---> savedpositions i tamo ce te naci nesto ovakvo
AddStaticVehicle(522,-2076.6343,-72.2841,34.7379,271.2175,3,😎; //
To sto sam oznacio debelim slovima to je id vozila kordinate vozila i rotacija vozila:
AddStaticVehicle(ID vozila,X,Y,Z,R,3,😎;
Zatim na dno skripte dodajte
CMD:sfvozila(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,0xAA3333AA,"Nisi rcon ulogovan Admin!"); return 1;
}
sfc1 = CreateVehicle(411,-2099.7856,-67.7308,34.8990,272.0963,0,3,3600); //0
sfc2 = CreateVehicle(411,-2099.7454,-72.6821,34.8990,271.2906,0,3,3600); //1
sfc3 = CreateVehicle(411,-2109.7085,-68.0383,34.8990,270.4995,0,3,3600); //2
sfc4 = CreateVehicle(411,-2109.8630,-72.5671,34.8990,267.8230,0,3,3600); //3
sfc5 = CreateVehicle(411,-2119.4590,-67.8781,34.8990,270.0498,0,3,3600); //4
sfc6 = CreateVehicle(411,-2119.3311,-72.4200,34.9029,271.1670,0,3,3600); //5
return 1;
}ovo createvehicle oznacava da stvara vozilo, a vi stavljajte rotaciju id i kordinate svoje ovo je samo primjer
Zatim komanda za unistavanje eventa
CMD:unistisf(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,0xAA3333AA,"Nisi rcon ulogovan Admin!"); return 1;
}
DestroyVehicle(sfc1);
DestroyVehicle(sfc2);
DestroyVehicle(sfc3);
DestroyVehicle(sfc4);
DestroyVehicle(sfc5);
DestroyVehicle(sfc6);
new sfpocetak = 0;
EventInfo == 0
return 1;
}Ova komanda unistava vozila port itd.. da neduzim
Zatim komanda za join
CMD:join(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
//if(PlayerInfo != 0) ubaci svoju funkciju za zatvor
//return SendClientMessage(playerid,COLOR_GREY,"{f9e8b7}Ovu komandu ne mozete koristiti dok ste u zatvoru!");
//}
//{
ShowPlayerDialog(playerid,3001,DIALOG_STYLE_LIST ,"Eventi","SF race","Odaberi","Odustani");
}
return 1;
}Nezaboravite staviti svoju provjeru dali je igrac u zatvoru
Zatim komanda sfstart sa kojom pokrecemo one timere i pokrecemo trku
CMD:sfstart(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,0xAA3333AA,"Nisi rcon ulogovan Admin!"); return 1;
}
new sendername;
GetPlayerName(playerid, sendername, sizeof(sendername));
SendClientMessage(playerid, COLOR_YELLOW, "{0084e3}Aktivirao si SF Race !");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(EventInfo == 1)
{
if(IsPlayerConnected(i))
{
SendClientMessage(i,COLOR_LIGHTBLUE, "{0084e3}SF Race pocinje za 3 sekunde !");
GameTextForPlayer(i, "~b~3",1000,4);
SetTimer("SfTimer",1000,0);
TogglePlayerControllable(i, 0);
}
}
}
return 1;
}Eh sada pod ondialogresponse dodajte ovo :
if(dialogid == 3000)
{
if(response)
{
switch(listitem)
{
case 0://SFRACE
{
sfpocetak = 1;//stavlja funkciju da je poceo sf i da se moze portati do tamo
SendClientMessageToAll(COLOR_WHITE,"{F3FF02}Trka SF je pocela, kucajte {FF0000}/join {F3FF02}da se prijavite");
}
}
}
}
if(dialogid == 3001)
{
if(response)
{
switch(listitem)
{
case 0://sfrace
{
if(sfpocetak != 1)//provjera dali je poceo taj event
{
SendClientMessage(playerid,COLOR_WHITE,"Taj event nije jos poceo, ili je broj ucesnika ogranicen!");
ShowPlayerDialog(playerid,3001,DIALOG_STYLE_LIST ,"Eventi","SFrace","Odaberi","Odustani");
return 1;
}
else
{
SetPlayerPos(playerid, X,Y,Z);//kordinate gdje da se igrac spawna
EventInfo = 1;//stavlja igracu provjeru da je na eventu
}
}
}
}
}Da bi uspjesno radile komande /join i /evemto morate imati ovo
Nezaboravite izmjeniti kordinate
To bi bilo to ako sam sta izostavio ili pogresno uradio recite .
Da se ne pravite manglupi ovaj tut sam rucno piso i nisam izvvukao iz nikakvog moda ili uzeo za samp foruma
Uzivajte
