[TuT] Kako napraviti sustav organizacija od nule?

Započeo Joey_
28. Jul 2012. Zaključano
14,596
pregleda
80
postova
Johnâ„¢
5
Godfather
28. Jul 2012.
Kako napraviti sustav organizacija od nule?
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
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;
}

KRAJ
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.
Deleted User
Obrisan korisnik
28. Jul 2012.
Dobar tut,lijepo objasnjeno.
Johnâ„¢
5
Godfather
28. Jul 2012.
Hvala. 🙂
Samper
5
Kingpin
28. Jul 2012.
Joey_ wrote on July 28, 2012, 8:55 pm:
Hvala. 🙂


Tut je odličan, ali izbacuje 4 errora:
IC war.pwn(185) : error 017: undefined symbol "gPlayerData"
IC war.pwn(185) : warning 215: expression has no effect
IC war.pwn(185) : error 001: expected token: ";", but found "]"
IC war.pwn(185) : error 029: invalid expression, assumed zero
IC war.pwn(185) : fatal error 107: too many error messages on one line

	if (gPlayerData > 0)
CadrRa
5
Kingpin
28. Jul 2012.
SpaMaster wrote on July 28, 2012, 8:55 pm:
Hvala. 🙂


Tut je odličan, ali izbacuje 4 errora:
IC war.pwn(185) : error 017: undefined symbol "gPlayerData"
IC war.pwn(185) : warning 215: expression has no effect
IC war.pwn(185) : error 001: expected token: ";", but found "]"
IC war.pwn(185) : error 029: invalid expression, assumed zero
IC war.pwn(185) : fatal error 107: too many error messages on one line

	if (gPlayerData > 0)


Mislim da ti fali
new
gPlayerData;
Samper
5
Kingpin
28. Jul 2012.
Quote from July 28, 2012, 8:55 pm:
Hvala. 🙂


Tut je odličan, ali izbacuje 4 errora:
IC war.pwn(185) : error 017: undefined symbol "gPlayerData"
IC war.pwn(185) : warning 215: expression has no effect
IC war.pwn(185) : error 001: expected token: ";", but found "]"
IC war.pwn(185) : error 029: invalid expression, assumed zero
IC war.pwn(185) : fatal error 107: too many error messages on one line

	if (gPlayerData > 0)


Mislim da ti fali
new
gPlayerData;


15 nekakvih errora, GM od 0 🙂
CadrRa
5
Kingpin
28. Jul 2012.
SpaMaster wrote on July 28, 2012, 9:17 pm:
15 nekakvih errora, GM od 0 🙂

Onda nek ti joey pomogne,ne znam u cemu je problem
Johnâ„¢
5
Godfather
28. Jul 2012.
@SpaMaster, trebaš dodat na vrh svog moda ovaj kod (kao što je i navedeno u tutorialu):

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
}

new
gPlayerData;


UPDATE: Dodana komanda (/r)adio i još jedan novi kod za onemogućivanje vožnje vozila onima koji nisu članovi te organizacije.
Samper
5
Kingpin
28. Jul 2012.
Joey_ wrote on July 28, 2012, 9:26 pm:
@SpaMaster, trebaš dodat na vrh svog moda ovaj kod (kao što je i navedeno u tutorialu):

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
}

new
gPlayerData;


UPDATE: Dodana komanda (/r)adio i još jedan novi kod za onemogućivanje vožnje vozila onima koji nisu članovi te organizacije.


Neće, isto je.
Johnâ„¢
5
Godfather
28. Jul 2012.
SpaMaster wrote on July 28, 2012, 9:27 pm:
Neće, isto je.


Ja sam sam compileao taj kod, kod sebe i sve radi kako treba. PoÅ¡alji mi na PP/PM kod koji si napravio i rijeÅ¡it ćemo. 😉
danijel123
5
Kingpin
28. Jul 2012.
Dobar tut  😉
Johnâ„¢
5
Godfather
28. Jul 2012.
Hvala. 🙂
Dr.Nino
5
Underboss
28. Jul 2012.
bravo paradox 🙂
napravi i koju fs 😄
moze i jos koji tut 😁
Daniel_Fazlijevic
5
Crime Lord
28. Jul 2012.
Dobar tut , hvala ! 🙂
Johnâ„¢
5
Godfather
28. Jul 2012.
Hvala svima. 🙂

@El Niñoâ„¢, predloži neÅ¡to i ja iskriptam. 😁 Ili napiÅ¡em tutorial. 😄

UPDATE: Dodana funkcija GetPlayerRank() i updateana komanda (/r)adio.

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha