by Joey_
O ÄŒEMU SE RADI?
U ovom tutorialu ću vam pokazati kako napraviti sustav organizacija od nule. To znaÄi da ćete pri kraju tutorial znati kako to sami napraviti.
U tutorialu ćete nauÄiti kako napraviti da ako je igraÄ Älan neke organizacije da kad se spoji na server da ga spawna u njegovoj bazi. NauÄiti ćete i kako napraviti neke lider komande tipa /invite, /izbaci, /rankup. I joÅ¡ neke stvari koje ćete sami otkriti Äitajući tutorial.
Te u ovom tutorialu se podrazumijeva da imate neki register/login sustav u vaÅ¡em modu i da znate kako dodati nove varijable za spremanje/uÄitavanje u vaÅ¡ register/login sustav.
POTREBNE STVARI
Za ovaj tutorial će vam bit potreban ZCMD include (Download).
Bit će potreban i sscanf plugin (Win Download | Linux Download).
I još će vam biti potreban foreach include (Download)
IGRAÄŒEVE VARIJABLE
Morate dodati joÅ¡ 3 varijable u svoj enum tako da bi skripta mogla pamtiti u kojoj je organizaciji igraÄ.I morate dodat ovaj macro (#define) koji oznaÄava maksimalan broj organizacija i joÅ¡ 2 boje koje koristim u tutorialu.
Ovako to kod mene izgleda (vi vjerojatno imate drugaÄije nego Å¡to ja imam):
NAPOMENA: Kako si vi definirate varijable ovdje tako ćete morate imat kroz cijelu skriptu jer ja koristim neke druge nazive varijabli nego vi.
#define MAX_ORGS 2 // Ovo je maksimalni broj organizacija na serveru, kad dodate novu organizaciju, povecajte ga za 1
#define C_WHITE 0xFFFFFFAA
#define CRED "{FF0000}"
enum E_PLAYER_DATA
{
E_PLAYER_LEADER, // Varijabla koja pamti cega je igrac lider
E_PLAYER_MEMBER, // Varijabla koja pamti u kojoj je igrac organizaciji
E_PLAYER_RANK, // Varijabla koja pamti koji je igrac rank u organizaciji
E_PLAYER_SKIN, // Varijabla koja pamti koji skin je igrac imao prije ulaska u organizaciju
E_PLAYER_ORG_SKIN, // Varijabla koja pamti koji skin igrac ima dok je u organizaciji
E_PLAYER_MATS, // Varijabla koja pamti koliko igrac ima materijala kod sebe
E_PLAYER_DROGS // Varijabla koja pamti koliko igrac ima droge kod sebe
}
new
gPlayerData;
KOMANDA /makeleader
Ispod se nalazi komanda /makeleader, sve je objaÅ¡njeno unutar nje.U ovoj komandi ako nemate iste nazive varijabli kao ja, morate ih zamijeniti svojim nazivima. InaÄe neće raditi kako treba.
Unutar tog koda, tj. ispod komande se nalazi jedna funkcija koju morate dodati na kraj svoje skripte. Ta funkcija preko ID-a kojeg proslijedite u funkciju, vraća ime organizacije koja ima taj ID.
CMD:makeleader(playerid, params[])
{
if (IsPlayerAdmin(playerid)) // Provjerava da li je igrac RCON admin, vi to mozete promijeniti u svoju provjeru
{
new
iPlayerID,
iOrgID,
szPlayerName,
szMessage;
if (sscanf(params, "ud", iPlayerID, iOrgID)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "KORISTI: /makeleader [igracev ID/dio imena] [ID organizacije]");
else if (iPlayerID == INVALID_PLAYER_ID) // Ako je ID igraca koji je igrac upisao nije online, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "ERROR: Pogresan ID igraca.");
else if (iOrgID < 1 || iOrgID > MAX_ORGS) // Ako je ID organizacije koju je igrac upisao manja od 1 ili veca maksimalnog broja organizacija, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "ERROR: ID organizacije ne smije biti manji od 1 ili veci od "#MAX_ORGS);
gPlayerData = iOrgID; // Postavlja igracevu varijablu za lidera na ID organizacije, jer moramo negdje zapamtit koje organizacije je igrac lider
gPlayerData = 6; // Postavlja igracevu varijablu za rank na 6, to vi mozete promijeniti ako ne zelite da vam je najveci rank 6
switch(iOrgID)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
gPlayerData = GetPlayerSkin(iPlayerID); // Sprema igracev skin tako da ako ikad bude izbacen iz organizacije, dobija svoj stari skin natrag
gPlayerData = 283; // Broj 283 je ID skina lidera organizacije, to mozete promijeniti u koji kod skin ID vi zelite
SetPlayerSkin(iPlayerID, gPlayerData); // Postavlja igracu skin za lidera organizacije
}
// Ovaj kod ispod kao da ne postoji, ali vam prikazuje kako dodati jos jednu organizaciju u /makeleader komandu, sto je potrebno svaki put kada zelite dodati novu organizaciju
/*case 2: // Druga organizacije, nazovimo je FBI
{
gPlayerData = GetPlayerSkin(iPlayerID); // Sprema igracev skin tako da ako ikad bude izbacen iz organizacije, dobija svoj stari skin natrag
gPlayerData = 283; // Broj 283 je ID skina lidera organizacije, to mozete promijeniti u koji kod skin ID vi zelite
SetPlayerSkin(iPlayerID, gPlayerData); // Postavlja igracu skin za lidera organizacije
}*/
}
GetPlayerName(playerid, szPlayerName, MAX_PLAYER_NAME);
format(szMessage, sizeof(szMessage), "INFO: Admin %s vas je postavio za lidera organizacije %s", szPlayerName, GetOrgNameByID(iOrgID));
SendClientMessage(iPlayerID, C_WHITE, szMessage);
GetPlayerName(iPlayerID, szPlayerName, MAX_PLAYER_NAME);
format(szMessage, sizeof(szMessage), "INFO: Postavio si igraca %s za lidera organizacije %s", szPlayerName, GetOrgNameByID(iOrgID));
SendClientMessage(playerid, C_WHITE, szMessage);
}
else
SendClientMessage(playerid, C_WHITE, "ERROR: Moras biti RCON admin da koristis ovu komandu.");
return 1;
}
stock GetOrgNameByID(iOrgID)
{
new
szOrgName;
switch(iOrgID)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
szOrgName = "Los Santos Police Department";
default: // Ako ne postoji ID takve organizacije
szOrgName = "Nepoznata organizacija";
}
return szOrgName;
}
KOMANDA /invite
Ispod se nalazi komanda /invite, sve je objašnjeno unutar nje.
U ovoj komandi ako nemate iste nazive varijabli kao ja, morate ih zamijeniti svojim nazivima. InaÄe neće raditi kako treba.
Unutar tog koda, tj. ispod komande se nalazi OnDialogResponse callback kojeg morate dodat (ako ga nemate uopće u skripti) ili ako ga imate u skripti onda morate dodat kod unutar njega tako da bi skripta radilo kako treba.
CMD:invite(playerid, params[])
{
if (gPlayerData > 0) // Provjerava da li je igrac lider icega
{
new
iPlayerID,
szPlayerName,
szInviteMsg;
if (sscanf(params, "u", iPlayerID)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "KORISTI: /invite [igracev ID/dio imena]");
else if (iPlayerID == INVALID_PLAYER_ID) // Ako je ID igraca koji je igrac upisao nije online, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "ERROR: Pogresan ID igraca.");
GetPlayerName(playerid, szPlayerName, MAX_PLAYER_NAME);
switch(gPlayerData)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
gPlayerData = gPlayerData; // Ovdje postavljamo igracu kojeg zelimo pozvati u organizaciju varijablu na ID organizacije (tako da kasnije znamo u kojoj je organizaciji)
gPlayerData = 1; // Postavlja igracu kojeg zelimo pozvati u organizaciju rank na 1
// Ovdje formatiramo poruku koju cemo poslati igracu koji je pozvan u organizaciju
// Preko te poruke ce pozvani igrac prihvatiti ili ne prihvatiti ulazak u organizaciju
format(szInviteMsg, sizeof(szInviteMsg), "Lider %s vas je pozvao u organizaciju Los Santos Police Department.\n\nPritisnite tipku 'Prihvacam' ako zelite prihvatiti poziv za ulazak u tu organizaciju\nili pritisnite tipku 'Odbijam' ako ne zelite prihvatiti.", szPlayerName);
}
// Ovaj kod ispod kao da ne postoji, ali vam prikazuje kako dodati jos jednu organizaciju u /invite komandu, sto je potrebno svaki put kada zelite dodati novu organizaciju
/*case 2: // Druga organizacije, nazovimo je FBI
{
gPlayerData = gPlayerData; // Ovdje postavljamo igracu kojeg zelimo pozvati u organizaciju varijablu na ID organizacije (tako da kasnije znamo u kojoj je organizaciji)
gPlayerData = 1; // Postavlja igracu kojeg zelimo pozvati u organizaciju rank na 1
// Ovdje formatiramo poruku koju cemo poslati igracu koji je pozvan u organizaciju
// Preko te poruke ce pozvani igrac prihvatiti ili ne prihvatiti ulazak u organizaciju
// Kad dodajete novu organizaciju, morate promijeniti neke nazive u tekstu kako ne bi svaki tekst bio isti (govorim o imenu organizacije)
format(szInviteMsg, sizeof(szInviteMsg), "Lider %s vas je pozvao u organizaciju FBI.\n\nPritisnite tipku 'Prihvacam' ako zelite prihvatiti poziv za ulazak u tu organizaciju\nili pritisnite tipku 'Odbijam' ako ne zelite prihvatiti.", szPlayerName);
}*/
}
ShowPlayerDialog(iPlayerID, DIALOG_ORG_INVITE, DIALOG_STYLE_MSGBOX, "POZVANI STE U ORGANIZACIJU", szInviteMsg, "Prihvacam", "Odbijam");
}
else
SendClientMessage(playerid, C_WHITE, "ERROR: Moras biti lider da koristis ovu komandu.");
return 1;
}
#define DIALOG_ORG_INVITE 1 // Ovo morate dodati kod ostalih macroa (#define) ili na vrh skripte poslije #include
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_ORG_INVITE: // Ovdje ce se izvrsiti daljnji kod nakon sto je igrac pritisnuo 'Prihvacam' ili 'Ne prihvacam'
{
if (response) // Ako je igrac pritisnuo 'Prihvacam'
{
switch(gPlayerData)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
SetPlayerSkin(playerid, 280); // Broj 280 je ID skina za rank 1 u organizaciji LSPD, vi to mozete promijeniti na bilo koji ID skina koji vama odgovara
SendClientMessage(playerid, C_WHITE, "INFO: Prihvatili ste poziv za ulazak u "CRED"Los Santos Police Department");
}
}
}
else // Ako je igrac pritisnuo 'Ne prihvacam'
{
// Resetiramo igraceve varijable na 0 jer nije prihvatio ulazak u organizaciju
gPlayerData = 0;
gPlayerData = 0;
SendClientMessage(playerid, C_WHITE, "INFO: Odbili ste poziv za ulazak u organizaciju");
}
}
}
return 1;
}
KOMANDA /rankup
Ispod se nalazi komanda /rankup, sve je objašnjeno unutar nje.
U ovoj komandi ako nemate iste nazive varijabli kao ja, morate ih zamijeniti svojim nazivima. InaÄe neće raditi kako treba.
CMD:rankup(playerid, params[])
{
if (gPlayerData > 0) // Provjerava da li je igrac lider icega
{
new
iPlayerID,
iRankNum,
szPlayerName,
szMessage;
if (sscanf(params, "ud", iPlayerID, iRankNum)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "KORISTI: /rankup [igracev ID/dio imena] ");
else if (iPlayerID == INVALID_PLAYER_ID) // Ako je ID igraca koji je igrac upisao nije online, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "ERROR: Pogresan ID igraca.");
else if (iRankNum < 1 || iRankNum > 6) // Ako je broj ranka manji od 1 ili veci od 6, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "ERROR: ID organizacije ne smije biti manji od 1 ili veci od 6.");
else if (gPlayerData != gPlayerData) // Provjerava da li su igrac i ID igraca koji je upisao u istoj organizaciji
return SendClientMessage(playerid, C_WHITE, "ERROR: Taj igrac nije u vasoj organizaciji.");
gPlayerData = iRankNum; // Postavlja igracevu varijablu na broj ranka, tako da bi kasnije mogli znati koji je igrac rank
SetPlayerOrgSkin(iPlayerID, ((gPlayerData > 0) ? (gPlayerData) : (gPlayerData)), iRankNum);
GetPlayerName(playerid, szPlayerName, MAX_PLAYER_NAME);
format(szMessage, sizeof(szMessage), "INFO: Lider %s ti je postavio rank na "CRED"%d", szPlayerName, iRankNum);
SendClientMessage(iPlayerID, C_WHITE, szMessage);
GetPlayerName(iPlayerID, szPlayerName, MAX_PLAYER_NAME);
format(szMessage, sizeof(szMessage), "INFO: Postavio si clanu %s rank na "CRED"%d", szPlayerName, iRankNum);
SendClientMessage(playerid, C_WHITE, szMessage);
}
else
SendClientMessage(playerid, C_WHITE, "ERROR: Moras biti lider da koristis ovu komandu.");
return 1;
}
stock SetPlayerOrgSkin(iPlayerID, iOrgID, iRank)
{
switch(iOrgID)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
switch(iRank) // Rankovi za prvu organizaciju
{
case 1: // 1. Rank
gPlayerData = 284; // 284 je ID skina za 1. rank u LSPD organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 2: // 2. Rank
gPlayerData = 280; // 280 je ID skina za 2. rank u LSPD organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 3: // 3. Rank
gPlayerData = 281; // 281 je ID skina za 3. rank u LSPD organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 4: // 4. Rank
gPlayerData = 282; // 282 je ID skina za 4. rank u LSPD organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 5: // 5. Rank
gPlayerData = 282; // 282 je ID skina za 5. rank u LSPD organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 6: // 6. Rank
gPlayerData = 288; // 288 je ID skina za 6. rank u LSPD organizaciji i taj broj mjenjate u svoj ID skina koji zelite
default:
gPlayerData = 284; // Ovaj ID skina neka vam bude uvijek jednak 1. ranku, on je tu samo ako je doslo do neke greske kod broja ranka
}
}
// Ovaj kod ispod kao da ne postoji, ali vam prikazuje kako dodati jos jednu organizaciju, sto je potrebno svaki put kada zelite dodati novu organizaciju
/*case 2: // Druga organizacija, nazovimo je FBI
{
switch(iRank) // Rankovi za drugu organizaciju
{
case 1: // 1. Rank
gPlayerData = 166; // 166 je ID skina za 1. rank u FBI organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 2: // 2. Rank
gPlayerData = 166; // 166 je ID skina za 2. rank u FBI organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 3: // 3. Rank
gPlayerData = 165; // 165 je ID skina za 3. rank u FBI organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 4: // 4. Rank
gPlayerData = 165; // 165 je ID skina za 4. rank u FBI organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 5: // 5. Rank
gPlayerData = 286; // 286 je ID skina za 5. rank u FBI organizaciji i taj broj mjenjate u svoj ID skina koji zelite
case 6: // 6. Rank
gPlayerData = 286; // 286 je ID skina za 6. rank u FBI organizaciji i taj broj mjenjate u svoj ID skina koji zelite
default:
gPlayerData = 166; // Ovaj ID skina neka vam bude uvijek jednak 1. ranku, on je tu samo ako je doslo do neke greske kod broja ranka
}
}*/
}
SetPlayerSkin(iPlayerID, gPlayerData);
return 1;
}
KOMANDA /izbaci
Ispod se nalazi komanda /izbaci, sve je objašnjeno unutar nje.
U ovoj komandi ako nemate iste nazive varijabli kao ja, morate ih zamijeniti svojim nazivima. InaÄe neće raditi kako treba.
CMD:izbaci(playerid, params[])
{
if (gPlayerData > 0) // Provjerava da li je igrac lider icega
{
new
iPlayerID,
szPlayerName,
szMessage;
if (sscanf(params, "u", iPlayerID)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "KORISTI: /izbaci [igracev ID/dio imena]");
else if (iPlayerID == INVALID_PLAYER_ID) // Ako je ID igraca koji je igrac upisao nije online, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "ERROR: Pogresan ID igraca.");
else if (gPlayerData != gPlayerData) // Provjerava da li su igrac i ID igraca koji je upisao u istoj organizaciji
return SendClientMessage(playerid, C_WHITE, "ERROR: Taj igrac nije u vasoj organizaciji.");
gPlayerData = 0; // Resetira igracevu varijablu jer vise nije u organizaciji
gPlayerData = 0; // Resetira igracevu varijablu jer vise nije u organizaciji
gPlayerData = 0; // Resetira igracevu varijablu jer vise nije u organizaciji
SetPlayerSkin(iPlayerID, gPlayerData); // Vraca igracev skin koji je imao prije ulaska u organizaciju
GetPlayerName(playerid, szPlayerName, MAX_PLAYER_NAME);
format(szMessage, sizeof(szMessage), "INFO: Lider %s te je izbacio iz organizacije.", szPlayerName);
SendClientMessage(iPlayerID, C_WHITE, szMessage);
GetPlayerName(iPlayerID, szPlayerName, MAX_PLAYER_NAME);
format(szMessage, sizeof(szMessage), "INFO: Izbacio si clana %s iz organizacije.", szPlayerName);
SendClientMessage(playerid, C_WHITE, szMessage);
}
else
SendClientMessage(playerid, C_WHITE, "ERROR: Moras biti lider da koristis ovu komandu.");
return 1;
}
KOMANDA (/r)adio
Ispod se nalazi komanda (/r)adio, sve je objašnjeno unutar nje.
U ovoj komandi ako nemate iste nazive varijabli kao ja, morate ih zamijeniti svojim nazivima. InaÄe neće raditi kako treba.
Ispod koda komande se nalazi funkcija GetPlayerRank() koja je potrebna da kod radi kako treba.
CMD:r(playerid, params[])
{
if (gPlayerData > 0 || gPlayerData > 0)
{
new
szChatMsg,
szPlayerName,
szMessage;
if (sscanf(params, "s", szChatMsg)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu tu poruku
return SendClientMessage(playerid, C_WHITE, "KORISTI: (/r)adio ");
GetPlayerName(playerid, szPlayerName, MAX_PLAYER_NAME);
foreach(new iPlayerID : Player)
{
// Prolazi kroz sve online igrace i provjerava da li su u istoj organizaciji kao i posiljatelj poruke
if (gPlayerData == gPlayerData || gPlayerData == gPlayerData)
{
format(szMessage, sizeof(szMessage), "%s %s kaze: %s", GetPlayerRank(playerid), szPlayerName, szChatMsg);
SendClientMessage(iPlayerID, C_WHITE, szMessage);
}
}
}
else
SendClientMessage(playerid, C_WHITE, "ERROR: Moras biti clan neke organizacije da koristis ovu komandu.");
return 1;
}
CMD:radio(playerid, params[])
return cmd_r(playerid, params);
stock GetPlayerRank(iPlayerID)
{
new
szRankName, // Broj 16 morate promijeniti ako imate rank ime vece od 15 znakova
iPlayerOrg = (gPlayerData > 0) ? (gPlayerData) : (gPlayerData);
switch(iPlayerOrg)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
switch(gPlayerData) // Rankovi za prvu organizaciju
{
case 1: // 1. Rank
szRankName = "Vježbenik";
case 2: // 2. Rank
szRankName = "Kadet";
case 3: // 3. Rank
szRankName = "Policajac";
case 4: // 4. Rank
szRankName = "Viši Policajac";
case 5: // 5. Rank
szRankName = "Narednik";
case 6: // 6. Rank
szRankName = "PoruÄnik";
default:
szRankName = "Nepoznato";
}
}
// Ovaj kod ispod kao da ne postoji, ali vam prikazuje kako dodati jos jednu organizaciju, sto je potrebno svaki put kada zelite dodati novu organizaciju
/*case 1: // Druga organizacija, nazovimo je FBI
{
switch(gPlayerData) // Rankovi za drugu organizaciju
{
case 1: // 1. Rank
szRankName = "Vojnik";
case 2: // 2. Rank
szRankName = "Vojnik";
case 3: // 3. Rank
szRankName = "Zapovjednik";
case 4: // 4. Rank
szRankName = "Zapovjednik";
case 5: // 5. Rank
szRankName = "Zapovjednik";
case 6: // 6. Rank
szRankName = "General";
default:
szRankName = "Nepoznato";
}
}*/
}
return szRankName;
}
KOD ZA SPAWNANJE IGRACA U NJEGOVOJ BAZI
Ovaj kod spawn igraca u njegovoj bazi i postavlja mu skin koja mora imat dok je u organizaciji.
Ako vec imate svoj OnPlayerSpawn callback onda samo dodajte u njega ovaj kod ispod, a ako nemate OnPlayerSpawn callback onda dodajte cijeli callback u svoj mod.
U ovom kodu ako nemate iste nazive varijabli kao ja, morate ih zamijeniti svojim nazivima. InaÄe neće raditi kako treba.
public OnPlayerSpawn(playerid)
{
if (gPlayerData > 0)
{
switch(gPlayerData)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); // Postavlja igracevu poziciju na te koordinate, vi te koordinate mozete zamijeniti svojima
SetPlayerFacingAngle(playerid, 270.1425); // Postavlja kamo da igrac gleda, vi to mozete zamijeniti sa svojim kutem
SetPlayerSkin(playerid, gPlayerData); // Postavlja igracev skin na onaj koji mora imat dok je u organizaciji
}
// Ovaj kod ispod kao da ne postoji, ali vam prikazuje kako dodati jos jednu organizaciju za spawn, sto je potrebno svaki put kada zelite dodati novu organizaciju
/*case 2: // Druga organizacije, nazovimo je FBI
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); // Postavlja igracevu poziciju na te koordinate, vi te koordinate mozete zamijeniti svojima
SetPlayerFacingAngle(playerid, 270.1425); // Postavlja kamo da igrac gleda, vi to mozete zamijeniti sa svojim kutem
SetPlayerSkin(playerid, gPlayerData); // Postavlja igracev skin na onaj koji mora imat dok je u organizaciji
}*/
}
}
else if (gPlayerData > 0)
{
switch(gPlayerData)
{
case 1: // Prva organizacija, nazovimo je Los Santos Police Department
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); // Postavlja igracevu poziciju na te koordinate, vi te koordinate mozete zamijeniti svojima
SetPlayerFacingAngle(playerid, 270.1425); // Postavlja kamo da igrac gleda, vi to mozete zamijeniti sa svojim kutem
SetPlayerSkin(playerid, gPlayerData); // Postavlja igracev skin na onaj koji mora imat dok je u organizaciji
}
// Ovaj kod ispod kao da ne postoji, ali vam prikazuje kako dodati jos jednu organizaciju za spawn, sto je potrebno svaki put kada zelite dodati novu organizaciju
/*case 2: // Druga organizacije, nazovimo je FBI
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); // Postavlja igracevu poziciju na te koordinate, vi te koordinate mozete zamijeniti svojima
SetPlayerFacingAngle(playerid, 270.1425); // Postavlja kamo da igrac gleda, vi to mozete zamijeniti sa svojim kutem
SetPlayerSkin(playerid, gPlayerData); // Postavlja igracev skin na onaj koji mora imat dok je u organizaciji
}*/
}
}
return 1;
}
KOD ZA ONEMOGUCIVANJE VOZNJE VOZILA ORGANIZACIJE ONIMA KOJI NISU CLANOVI TE ORGANIZACIJE
Svaki kod stavi gdje mu je mjesto kako je prikazano u kodu ispod.
Kada dodajete novu organizaciju i zelite da vam drugi igraci osim clanova te organizacije ne mogu voziti vozila te organizacije, morate napraviti novu funkciju za provjeru da li je to vozilo dio te organizacije. I morate dodat jos jednu provjeru u OnPlayerStateChange callback te morate napraviti novu varijablu za tu organizaciju i dodijelit ID-eve vozila te organizacije toj varijabli (ako ovaj tekst niste skužili, pitajte te me u temi i probat ću vam bolje objasnit).
new
gPoliceCar; // 2 je broj koliko ima policijskih vozila, ako zelite dodavat jos vozila LSPD organizaciji (ili nekoj novoj organizaciji), taj broj mora biti jednak broju vozila te org.
public OnGameModeInit()
{
gPoliceCar = AddStaticVehicleEx(522, 1958.3783, 1343.1572, 15.3746, 270.1425, 1, 1, 60000); // Stvara vozilo LSPD-a i pamti njegov ID u varijabli gPoliceCar
gPoliceCar = AddStaticVehicleEx(522, 1958.3783, 1343.1572, 15.3746, 270.1425, 1, 1, 60000); // Stvara vozilo LSPD-a i pamti njegov ID u varijabli gPoliceCar
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == PLAYER_STATE_DRIVER) // Ako je usao u vozilo kao vozac
{
new
iVehicleID = GetPlayerVehicleID(playerid);
// Provjerava da li je igrac usao u vozilo org. LSPD i provjerava da li je clan te org., ako nije izbacit ce ga iz vozila
if (IsAPoliceCar(iVehicleID) && gPlayerData != 1 && gPlayerData != 1)
{
SendClientMessage(playerid, C_WHITE, "ERROR: Nisi clan Los Santos Police Departmenta.");
RemovePlayerFromVehicle(playerid);
}
}
return 1;
}
stock IsAPoliceCar(iVehicleID)
{
for(new iIdx = 0; iIdx < sizeof(gPoliceCar); iIdx++)
{
if (gPoliceCar == iVehicleID)
return 1;
}
return 0;
}
SEFOVI
Svaki kod stavi gdje mu je mjesto kako je prikazano u kodu ispod.
// Ovo ispod dodajte na pocetak skripte
// Ovo je dio koda u kojem definiramo gdje ce bit spremljeni podaci o organizaciji, tj. o kolicini materijala u sefu organizacije
enum E_ORG_DATA
{
E_ORG_MATS,
E_ORG_DROGS
};
new
gOrgData;
CMD:sef(playerid, params[])
{
new
userOption,
userItems,
userAmount,
orgID;
if (gPlayerData > 0) // Ako je igrac lider organizacije
{
// Uzimamo ID organizacije, ali smanjujemo taj broj jer u PAWN-u array (niz) pocinje sa 0, a ne sa 1, a mi spremamo ID organizacije od 1
// Primjer: nekiNiz = 0; - Pocetni element tog niza je sad 0
// nekiNiz = 0; - Drugi element tog niza je sada 0, a ne prvi element niza
orgID = gPlayerData - 1;
if (sscanf(params, "s{sd}", userOption)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu poruku i opcije koje moze koristiti
{
SendClientMessage(playerid, C_WHITE, "OPCIJE: uzmi ostavi");
SendClientMessage(playerid, C_WHITE, "KORISTI: /sef [mats/droga] ");
return 1;
}
if (!strcmp(userOption, "uzmi", true)) // Ako je igrac odabrao opciju 'uzmi'
{
if (sscanf(params, "{s}s{d}", userItems))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef uzmi [mats/droga] ");
if (!strcmp(userItems, "mats", true)) // Ako je igrac odabrao opciju 'mats'
{
if (sscanf(params, "{ss}d", userAmount))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef uzmi mats ");
else if (gOrgData < userAmount)
return SendClientMessage(playerid, C_WHITE, "ERROR: Nema toliko materijala u sefu");
gOrgData -= userAmount; // Oduzmemo tu kolicinu materijala iz sefa
gPlayerData += userAmount; // I dodamo tu kolicinu materijala igracu
SendClientMessage(playerid, C_WHITE, "Uspjesno si uzeo materijale");
}
else if (!strcmp(userItems, "droga", true)) // Ako je igrac odabrao opciju 'droga'
{
if (sscanf(params, "{ss}d", userAmount))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef uzmi droga ");
else if (gOrgData < userAmount)
return SendClientMessage(playerid, C_WHITE, "ERROR: Nema toliko droge u sefu");
gOrgData -= userAmount; // Oduzmemo tu kolicinu droge iz sefa
gPlayerData += userAmount; // I dodamo tu kolicinu droge igracu
SendClientMessage(playerid, C_WHITE, "Uspjesno si uzeo drogu");
}
}
else if (!strcmp(userOption, "ostavi", true)) // Ako je igrac odabrao opciju 'ostavi'
{
if (sscanf(params, "{s}s{d}", userItems))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef ostavi [mats/droga] ");
if (!strcmp(userItems, "mats", true)) // Ako je igrac odabrao opciju 'mats'
{
if (sscanf(params, "{ss}d", userAmount))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef ostavi mats ");
else if (gPlayerData < userAmount)
return SendClientMessage(playerid, C_WHITE, "ERROR: Nemas toliko materijala kod sebe");
gOrgData += userAmount; // Dodamo tu kolicinu materijala u sefa
gPlayerData -= userAmount; // I oduzmemo tu kolicinu materijala igracu
SendClientMessage(playerid, C_WHITE, "Uspjesno si ostavio materijale");
}
else if (!strcmp(userItems, "droga", true)) // Ako je igrac odabrao opciju 'droga'
{
if (sscanf(params, "{ss}d", userAmount))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef ostavi droga ");
else if (gPlayerData < userAmount)
return SendClientMessage(playerid, C_WHITE, "ERROR: Nemas toliko droge kod sebe");
gOrgData += userAmount; // Dodamo tu kolicinu droge u sefa
gPlayerData -= userAmount; // I oduzmemo tu kolicinu droge igracu
SendClientMessage(playerid, C_WHITE, "Uspjesno si ostavio drogu");
}
}
}
else if (gPlayerData > 0) // Ako je igrac clan organizacije
{
// Uzimamo ID organizacije, ali smanjujemo taj broj jer u PAWN-u array (niz) pocinje sa 0, a ne sa 1, a mi spremamo ID organizacije od 1
// Primjer: nekiNiz = 0; - Pocetni element tog niza je sad 0
// nekiNiz = 0; - Drugi element tog niza je sada 0, a ne prvi element niza
orgID = gPlayerData - 1;
if (sscanf(params, "s{sd}", userOption)) // Ako igrac nije upisao sve potrebne parametre, ispisuje mu poruku i opcije koje moze koristiti
{
SendClientMessage(playerid, C_WHITE, "OPCIJE: ostavi");
SendClientMessage(playerid, C_WHITE, "KORISTI: /sef [mats/droga] ");
return 1;
}
if (!strcmp(userOption, "ostavi", true)) // Ako je igrac odabrao opciju 'ostavi'
{
if (sscanf(params, "{s}s{d}", userItems))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef ostavi [mats/droga] ");
if (!strcmp(userItems, "mats", true)) // Ako je igrac odabrao opciju 'mats'
{
if (sscanf(params, "{ss}d", userAmount))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef ostavi mats ");
else if (gPlayerData < userAmount)
return SendClientMessage(playerid, C_WHITE, "ERROR: Nemas toliko materijala kod sebe");
gOrgData += userAmount; // Dodamo tu kolicinu materijala u sefa
gPlayerData -= userAmount; // I oduzmemo tu kolicinu materijala igracu
SendClientMessage(playerid, C_WHITE, "Uspjesno si ostavio materijale");
}
else if (!strcmp(userItems, "droga", true)) // Ako je igrac odabrao opciju 'droga'
{
if (sscanf(params, "{ss}d", userAmount))
return SendClientMessage(playerid, C_WHITE, "KORISTI: /sef ostavi droga ");
else if (gPlayerData < userAmount)
return SendClientMessage(playerid, C_WHITE, "ERROR: Nemas toliko droge kod sebe");
gOrgData += userAmount; // Dodamo tu kolicinu droge u sefa
gPlayerData -= userAmount; // I oduzmemo tu kolicinu droge igracu
SendClientMessage(playerid, C_WHITE, "Uspjesno si ostavio drogu");
}
}
}
else return SendClientMessage(playerid, C_WHITE, "ERROR: Nisi niti lider organizacije niti clan");
return 1;
}
Ovo je kraj tutorial, ako nešto ne kužite, postajte u temi i odgovorit ću vam u najkraćem mogućem roku. Ili ako zelite nesto da bolje objasnim, mozete postati u temi ili poslati meni PP/PM.
Ako želite još nešto da dodem u tutorial, pošalji mi prijedlog preko PP/PM.
