UVOD
Evo, da ozivivmo ovaj podforum, svjezim tutorijalima 😄 ... Ovo ce biti objasnjeno, tako da svi mogu razmujeti, pa cak i oni koji nikada nisu vidjeli pawno. Jer cemu sluzi tutorial, nego da naucis nove stvari?TUTORIAL
1 Korak:Prvo moramo staviti sve potrebne include-ve... Mala Skola Skriptanja
#include #include
#include
Kod vezan za tutorial
#include // Mi cemo koristiti ovaj procesor komandi, jer je po meni najbolji, i po preporukama, najbrzi
#include // spremanje podataka 2 Korak:Sada cemo definirati nekoliko stvari
Mala Skola Skriptanja
Å to znaci ''#define SCM SendClientMessage'' Kako ne bi se mucili i stalno pisali SendClientMessage, jednostavno cemo je definirati SCM, kako bismo ustedjeli vrijeme
Å to znaci ''#define FPATH "/Firme/%i.ini"'' Ovdje cemo koristiti spremanje bizinisa i sve unutar njega
Kod vezan za tutorial
#define SCM SendClientMessage
#define FPATH "/Firme/%i.ini" //Spremanje
#define COLOR_GREY 0xAFAFAFAA // Siva boja3 Korak:Sada cemo napraviti provjeru, ali vise o tome kasnije
Kod vezan za tutorial
new uFirmi;4 Korak:Sada cemo napraviti enum, vise objasnjenja u kodu
Kod vezan za tutorial
enum fInformacije {
fOwned, // Imali vlasnika
fCijena, // Kolika je cjena
fVlasnik,// Ako ima vlasnika, ime njegovo
fTip, // Tip firme, npr butik
fZakljucana, // Jeli zakljucana
fNovac,// Novac firme
Float:fUlazX,//Koordinata X ulaza u firmu
Float:fUlazY,//Koordinata Y ulaza u firmu
Float:fUlazZ,//Koordinata Z ulaza u firmu
Float:fUlazA,//Koordinata A ulaza u firmu
Float:fIzasaoX,// Koordinata X izlaza iz firme
Float:fIzasaoY,// Koordinata Y izlaza iz firme
Float:fIzasaoZ,// Koordinata Z izlaza iz firme
Float:fIzasaoA,// Koordinata A izlaza iz firme
fInt,// Interior
fVW,// Virtual World
fUinterioru,
fUvw,
fIkona,
fIzvanIkone,
fIme
}
new FirmaInformacije;5 Korak:U vas ''enum PlayerInfo'' stavite ovaj kod (vise o tomu kasnije)
Kod vezan za tutorial
FirmaID6 Korak:Sada idemo u ''OnGameModeInit''
Kod vezan za tutorial
new str;
for(new idx = 1; idx < sizeof(FirmaInformacije); idx++)// Kreira loop, koji ce ici kroz sve firme
{
format(str, sizeof(str), FPATH, idx);// Ovo ide u spremanje, koje smo napravili ranije
INI_ParseFile(str, "sacuvajbiz_%s", .fExtra = true, .extra = idx );
FirmaInformacije = CreateDynamicPickup(1272, 1, FirmaInformacije, FirmaInformacije, FirmaInformacije, FirmaInformacije); // Ovo ce automatski napravi pickup (ULAZ)
FirmaInformacije = CreateDynamicPickup(1272, 1, FirmaInformacije, FirmaInformacije, FirmaInformacije, FirmaInformacije); // Kreira pickup unutar interijera
}7 Korak:Sada cemo u ''OnGameModeExit'', staviti jos nekoliko podataka...
Kod vezan za tutorial
for(new id = 1; id < sizeof(FirmaInformacije); id++)// Loop...
{
if(FirmaInformacije == 0) break;//Krsi cijenu ako je cjena 0 (kao da ne postoji)
CuvajFirmu(id);// Funkcija Cuvaj Firmu ili ako ocete da je SaveFirma...
}8 Korak:Sada cemo napraviti public za cuvanje firme, ili ti CuvajFirmu...
Kod vezan za tutorial
forward CuvajFirmu(id);
public CuvajFirmu(id)
{
new file4;
format(file4, sizeof(file4), FPATH, id);
new INI:File = INI_Open(file4);
INI_SetTag(File,"data");
INI_WriteInt(File,"fOwned", FirmaInformacije);
INI_WriteInt(File,"fCijena", FirmaInformacije);
INI_WriteString(File,"fVlasnik", FirmaInformacije);
INI_WriteInt(File,"fTip", FirmaInformacije);
INI_WriteInt(File,"fZakljucana", FirmaInformacije);
INI_WriteInt(File,"fNovac", FirmaInformacije);
INI_WriteFloat(File,"fUlazX", FirmaInformacije);
INI_WriteFloat(File,"fUlazY", FirmaInformacije);
INI_WriteFloat(File,"fUlazZ", FirmaInformacije);
INI_WriteFloat(File,"fUlazA", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoX", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoY", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoZ", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoA", FirmaInformacije);
INI_WriteInt(File,"fInt", FirmaInformacije);
INI_WriteInt(File,"fVW", FirmaInformacije);
INI_WriteInt(File,"fUinterioru", FirmaInformacije);
INI_WriteInt(File,"fUvw", FirmaInformacije);
INI_WriteString(File,"fIme", FirmaInformacije);
INI_Close(File);
return 1;
}9 Korak:Moramo sada "vratiti" sve podatke o biznisu igraÄu ako ponovo udje u igru (ako ne razumijete, procitajte o spremanju y_ini-a).
Kod vezan za tutorial
forward sacuvajbiz_data(idx, name[], value[]);
public sacuvajbiz_data(idx, name[], value[])
{
INI_Int("fOwned", FirmaInformacije);
INI_Int("fCijena", FirmaInformacije);
INI_String("fVlasnik", FirmaInformacije, 24);
INI_Int("fTip", FirmaInformacije);
INI_Int("fZakljucan", FirmaInformacije);
INI_Int("fNovac", FirmaInformacije);
INI_Float("fUlazX", FirmaInformacije);
INI_Float("fUlazY", FirmaInformacije);
INI_Float("fUlazZ", FirmaInformacije);
INI_Float("fUlazA", FirmaInformacije);
INI_Float("fIzasaoX", FirmaInformacije);
INI_Float("fIzasaoY", FirmaInformacije);
INI_Float("fIzasaoZ", FirmaInformacije);
INI_Float("fIzasaoA", FirmaInformacije);
INI_Int("fInt", FirmaInformacije);
INI_Int("fVW", FirmaInformacije);
INI_Int("fUinterioru", FirmaInformacije);
INI_Int("fUvw", FirmaInformacije);
INI_String("fIme", FirmaInformacije, 128);
return 1;
}10 Korak:Sada možemo raditi komande koje idu uz firmu.
Kod vezan za tutorial
YCMD:napravifirmu(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SCM(playerid, COLOR_GREY, "Nisi ovlasten da koristis ovu komandu");//Provjerava da li je igraÄ RCON admin... Ovo promjenite u vas Admin system, tj. u vasu provjeru jeli admin, ako zelite se koristiti svojim adminom iz GameMode-a
new cijena, level, id, int, fVW, string, Float:Xi, Float:Yi, Float:Zi, inti;// Sve definicije koje trebamo
if(sscanf(params, "dddfff", cijena, level, inti, Xi, Yi, Zi)) return SendClientMessage(playerid, COLOR_GREY, "Server: /napravi firmu [tip firme] ");
if(level < 0 || level > 4) return SendClientMessage(playerid, COLOR_GREY, "Server: Ne ispod 0 ne vise od 10");//
if(cijena < 10000) return SendClientMessage(playerid, COLOR_GREY, "Server: cijena ne smije biti ispod 10.000 $");// Provjerava koliko unosi cjenu, slobodno promjenite u koju ocete
for(new h = 1;h < sizeof(FirmaInformacije);h++)
{
if(FirmaInformacije == 0)
{
id = h;
break;
}
}
new Float:X,Float:Y,Float:Z,Float:A;//Jos definicija
GetPlayerPos(playerid, X, Y, Z);//Dobiva igraÄevu poziciju, i sprema je u float
GetPlayerFacingAngle(playerid, A);
int = GetPlayerInterior(playerid);//Dobiva igraÄev interijer
world = GetPlayerVirtualWorld(playerid);//Virutal World
FirmaInformacije = inti;
FirmaInformacije = Xi;
FirmaInformacije = Yi;
FirmaInformacije = Zi;
FirmaInformacije = 0;
FirmaInformacije = cijena;
FirmaInformacije = level;
FirmaInformacije = X;
FirmaInformacije = Y;
FirmaInformacije = Z;
FirmaInformacije = A;
FirmaInformacije = 1;
FirmaInformacije =int;
FirmaInformacije =world;
FirmaInformacije =id;
format(string, sizeof(string), "Nema");
strmid(FirmaInformacije, string, 0, strlen(string), 255);
if(FirmaInformacije) DestroyDynamicPickup(FirmaInformacije);
if(FirmaInformacije) DestroyDynamicPickup(FirmaInformacije);
FirmaInformacije = CreateDynamicPickup(1272, 1, FirmaInformacije, FirmaInformacije, FirmaInformacije, FirmaInformacije);//Stvara pickup na vasoj lokaciji
FirmaInformacije = CreateDynamicPickup(1272, 1, FirmaInformacije, FirmaInformacije, FirmaInformacije, FirmaInformacije);//Stvara pickup na vasoj lokaciji
new file4;
format(file4, sizeof(file4), FPATH, id);
new INI:File = INI_Open(file4);
INI_SetTag(File,"data");
INI_WriteInt(File,"fOwned", FirmaInformacije);
INI_WriteInt(File,"fCijena", FirmaInformacije);
INI_WriteString(File,"fVlasnik", FirmaInformacije);
INI_WriteInt(File,"fTip", FirmaInformacije);
INI_WriteInt(File,"fZakljucano", FirmaInformacije);
INI_WriteInt(File,"fNovac", FirmaInformacije);
INI_WriteFloat(File,"fUlazX", FirmaInformacije);
INI_WriteFloat(File,"fUlazY", FirmaInformacije);
INI_WriteFloat(File,"fUlazZ", FirmaInformacije);
INI_WriteFloat(File,"fUlazA", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoX", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoY", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoZ", FirmaInformacije);
INI_WriteFloat(File,"fIzasaoA", FirmaInformacije);
INI_WriteInt(File,"fInt", FirmaInformacije);
INI_WriteInt(File,"fVW", FirmaInformacije);
INI_WriteInt(File,"fUinterioru", FirmaInformacije);
INI_WriteInt(File,"fUvw", FirmaInformacije);
INI_WriteString(File,"fIme", FirmaInformacije);
INI_Close(File);
return 1;
}11 Korak:Izbrisati firmu cemo napraviti... S komandom /Izbrisifirmu
Kod vezan za tutorial
YCMD:izbrisifirmu(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return 1; // Provjerava da li je igraÄ RCON admin, slobodno promjenite u admin system, kakav je u vasem GameMode-u
new id;
if(sscanf(params, "d", id)) return SendClientMessage(playerid, COLOR_GREY, "YCMD: /izbrisifirmu ");
if(FirmaInformacije == 1) return SCM(playerid, COLOR_GREY, "Ova firma ima vlasnika");//Provjerava da li firma ima vlasnika, ako ima, nece je izbrisati
// Restartira sve opcije u enumu
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
FirmaInformacije = 0;
if(FrimaInformacije) DestroyDynamicPickup(FrimaInformacije);//Unistava pickup
new string;
format(string, sizeof(string), FPATH, id);
fremove(string);
return 1;
}12 Korak:Sada cemo napraviti, kada igraÄ stane na pickup, da mu dadne neke informacije vezane za firmu
Kod vezan za tutorial
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
new string;
for(new b = 1;b < sizeof(FirmaInformacije);b++)
{
if(pickupid == FirmaInformacije)//provjerava jeli na ikoni
{
if(FirmaInformacije == 0)//Ako firmu nitko ne posjeduje, oznacava o
{
format(string, sizeof(string), "~g~Ime:~w~%s~n~~w~Ova firma je na ~g~prodaji!~n~~r~Cjena:~g~%i~n~Tip Firme:~w~%s~n~~g~ID firme:~w~%i", FirmaInformacije, FirmaInformacije, TipFirme(b), b);//Daje mu informacije
GameTextForPlayer(playerid, string, 3000, 3);
}
if(FirmaInformacije == 1)//Ako firmu netko posjeduje, oznacava 1
{
format(string, sizeof(string), "~g~Ime:~w~%s~n~~g~Vlasnik:~w~%s~n~~g~Tip Firme:~w~%s ~n~~g~ID firme:~w~%i", FirmaInformacije, FirmaInformacije, TipFirme(b), b);//Formats a string with all the info.
GameTextForPlayer(playerid, string, 3000, 3);
}
}
}
return 1;
}13 Korak:Napraviti cemo stock, gdje cemo smjestiti tipove firme
Kod vezan za tutorial
stock TipFirme(b)// Stock.
{
new string;
switch(FirmaInformacije)
{
case 4: string = "24/7";
case 3: string = "Nocni klub";
case 2: string = "Kafic";
case 1: string = "Butik";
}
return string;
}14 Korak:Jos jedna vazna fukncija, koja ce provjeravati da li je igraÄ u blizini firme.
Kod vezan za tutorial
IsPlayerBlizuUlazaFirme(playerid)
{
for(new b = 1; b < sizeof(FirmaInformacije); b++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, FirmaInformacije, FirmaInformacije, FirmaInformacije)) return b;
}
return -1;
}15 Korak:Idemo napraviti komandu za zakljucavanje firme. /zakljucajfirmu
Kod vezan za tutorial
YCMD:zakljucajfirmu(playerid, params[])
{
new id = IsPlayerBlizuUlazaFirme(playerid);//Upotrebljavamo funkciju koju smo napravili korak prije
if(id != PlayerInfo) return SCM(playerid, COLOR_GREY, "Ovo nije tvoja firma");
if(FirmaInformacije == 1)// Ako je firma zakljucana vraca mu sljedecu poruku
{
FirmaInformacije = 0;
GameTextForPlayer(playerid, "Firma ~g~otkljucana!", 3000, 3);
}
else
{
FirmaInformacije = 1;
GameTextForPlayer(playerid, "Firma ~r~zakljucana!", 3000, 3);
}
return 1;
}16 Korak:Komandu /enter cemo napraviti, koji sluzi za ulaz, ali i izlaz iz firme
Kod vezan za tutorial
YCMD:enter(playerid, params[])
{
for(new b = 1; b < sizeof(FirmaInformacije); b++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, FirmaInformacije, FirmaInformacije, FirmaInformacije))
{
if(FirmaInformacije == 1) return SendClientMessage(playerid, COLOR_GREY, "Ova firma je zakljucana");//Provjerava da li je zakljucana
SetPlayerPos(playerid, FirmaInformacije, FirmaInformacije, FirmaInformacije);
SetPlayerFacingAngle(playerid, FirmaInformacije);
SetPlayerInterior(playerid, FirmaInformacije);
SetPlayerVirtualWorld(playerid, FirmaInformacije);
Ufirmi = b;
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 2.0, FirmaInformacije, FirmaInformacije, FirmaInformacije) && GetPlayerVirtualWorld(playerid) == FirmaInformacije)
{
SetPlayerPos(playerid, FirmaInformacije, FirmaInformacije, FirmaInformacije);
SetPlayerFacingAngle(playerid, FirmaInformacije);
SetPlayerInterior(playerid, FirmaInformacije);
SetPlayerVirtualWorld(playerid, FirmaInformacije);
uFirmi = 0;
return 1;
}
}
return 1;17 Korak:S komandom /kupifirmu se kupuje firmu, logicno 😄
Kod vezan za tutorial
YCMD:kupifirumu(playerid, params[])
{
new id = IsPlayerBlizuUlazaFirme(playerid);
if(id == -1 || id == 0) return SendClientMessage(playerid, COLOR_GREY, "Niste blizu firme");
if(FirmaInformacije != 0 || FirmaInformacije == 0) return SendClientMessage(playerid, COLOR_GREY, "Ova firma nije na prodaju");
if(PlayerInfo != 0) return SendClientMessage(playerid, COLOR_LIGHTRED, "Vec posjedujes firmu");
if(PlayerInfo < FirmaInformacije) return SendClientMessage(playerid, COLOR_LIGHTRED, "Zalim, nemate dovoljno novaca za ovu firmu");
PlayerInfo = id;
PlayerInfo -= FirmaInformacije;
GivePlayerMoney(playerid, -FirmaInformacije);
FirmaInformacije = 0;
FirmaInformacije = 1;
FirmaInformacije = RemoveUnderScore(playerid);
SendClientMessage(playerid, COLOR_YELLOW, "Cestitamo, kupili ste FIRMU!");
return 1;
}18 Korak:Ovdje je komanda za prodati firmu
Kod vezan za tutorial
YCMD:prodajfirmu(playerid, params[])
{
new id = PlayerInfo;
if(PlayerInfo == 0) return SCM(playerid, COLOR_GREY, "Ne posjedujes firmu!");
FirmaInformacije = 0;// nije vise owned
FirmaInformacije = 0;//Nema vlasnika
FirmaInformacije = 1;//zakljucava se
PlayerInfo = FirmaInformacije;
PlayerInfo = 0;
SCM(playerid, COLOR_YELLOW, "Firma prodana!");
return 1;
}19 Korak:Da promjenimo ime firmi
Kod vezan za tutorial
YCMD:imefirme(playerid, params[])
{
new name;
if(sscanf(params, "s", name)) return SCM(playerid, COLOR_GREY, "/imefirme ");
if(PlayerInfo == 0) return SCM(playerid, COLOR_GREY, "Ne posjedujes firmu");
FirmaInformacije[PlayerInfo] = name;
SCM(playerid, COLOR_YELLOW, "Ime promjenjeno!");
return 1;
}20 Korak:Ovo i nije potrebno, takodjer zadnji korak, ovo je primjer kako mogu glasiti komande za firumu
Kod vezan za tutorial
YCMD:odjeca(playerid, params[])
{
new skin;
if(sscanf(params, "i", skin)) return SCM(playerid, COLOR_GREY, "YCMD:/skin ");
if(PlayerInfo < 100) return SCM(playerid, COLOR_GREY, "Morate imate barem 100 $");
if(FirmaInformacije[Ufirmi] != 1) return SCM(playerid, COLOR_GREY, "Moras biti u butiku");
if(1 > skin || 299 < skin || skin == 288 || skin == 287 || skin == 286 || skin == 285 || skin == 284 || skin == 283 || skin == 282 || skin == 281 || skin == 280 || skin == 279 || skin == 278 || skin == 277 || skin == 276 || skin == 275 || skin == 274) return SCM(playerid, COLOR_GREY, "Skin ID ne valja");// ovo su skinovi policajaca i slicno, pa se nemogu uzimati ti skinovi
SetPlayerSkin(playerid, skin);
PlayerInfo = skin;
GivePlayerMoney(playerid, -100);
FirmaInformacije[Ufirmi] += 100;
return 1;
}KRAJ
Hvala na Äitanju. GreÅ¡ke u tutorijalu su moguće!!!
Coldplay
Tutorijal preuzet s Offical Samp Forum-a! Link
