Pretraga

Pritisnite Enter za pretragu ili Escape za zatvaranje

Zaključano

[TuT]Jednostavan sistem kuca

Započeo Mr.GordoN
pre 10 godina
4,732
pregleda
10
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Mr.Gordon
Made Man
pre 10 godina
UVOD MOJ PRVI TUTORIAL
Pozz Danas cu vam pokazati kako da napravite jednostavan sistem kuce
koristicemo samo 1 interior naravno posle vi mozete da optimizirate kako hocete 🙂
STA NAM JE POTREBNO
SII Download
sscanf KLIK
Streamer KLIK
ZCMD KLIK
I ZIVCI

OSNOVA

Hajde da pocnemo 😄
Prvo pocinjemo tako sto pravimo enum (Ako ne znate sta je enum proverite na GOOGLE)
Ovo enum ce biti skladistenje svih informacija kuce...
#define MAX_HOUSES 100//Ovde definisemo koliko mozemo maximum napraviti kuca ja cu staviti 100
enum HouseInfo//Imenovanje enuma
{
Owner,//Ovo ce biti za skladistenje: Ime,Vlasnika kuce velicini 24bita
Owned,//Ovo je za sacuvavanje kuce ako je u vlasnistvu
Price,//Koliko ce iznostiti cena kuce
Float:XPos,// X kordinata na checkpointu
Float:YPos,//CUSTOM samo po sebi
Float:ZPos,//CUSTOM samo po sebi
VirtualWorld,//checkpointi u virutalnom svetu
Text3D:HouseLabel//Ovo je label gde ce pisati Vlasnik: Cena: itd
}
new HInfo;//Ovo je za informacije o kuci


Super.
Hajmo sada da kreiramo normalan var da znamo koji je ID kuce
new HouseCount;//Ovo je da vidimo koliko smo kuca napravili do sada
new HouseEnter;//Ovo ce biti checkpoint za ulaz u kucu
new HouseExit;//Ovo ce biti za checkpoint za izlaz iz kuce
new PlayerInHouseID;//Da proverimo koju kucu (ID) igrac poseduje
POCETAK SKRIPTANJA

Ok.Sada cemo napraviti komandu /napravikucu (Mislim da je svima jasno cemu ce ova komanda sluziti)
CMD:napravikucu(playerid,params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Nisi admin!");//Proveravamo dali je igrac admin Rcon logiran
new HousePrice,id = HouseCount;//Ovo je za cenu kuce
if(sscanf(params,"i",HousePrice)) return SendClientMessage(playerid,-1,"KORISTI: /napravikucu ");//Provera dali je sve tacno sto se tice igraca(Novac,sintaksa...)
new Float:x,Float:y,Float:z;//Kreiranje podloge za cuvanje polozaja igraca
GetPlayerPos(playerid,x,y,z);//Dobijanje igraceve pozicije i skadistenje istih
HInfo = HousePrice;//Postavljanje cene kuce
HInfo = 0;//Stavljanje kuce u vlasnistvo = 0
HInfo = x;//Skladistenje Xpozicije  (Igraca)
HInfo = y;//Skladistenje Ypozicije  (Igraca)
HInfo = z;//Skladistenje Zpozicije  (Igraca)
HInfo = GetPlayerVirtualWorld(playerid);
format(HInfo,24,"Nonusablenameforthishouse");//.
SendClientMessage(playerid,-1,"Kuca napravljena");
HouseEnter = CreateDynamicCP(x,y,z,1.5,GetPlayerVirtualWorld(pl ayerid));//Pravljenje checkpointa i skladistenje u kucu
HouseExit = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,Ge tPlayerVirtualWorld(playerid));//Pravljenje checkpointa za izlaz iz kuce i skadistenje.
new file,labelstring;//Pravljenje fajla i etiketu stringa
format(file,sizeof(file),"FHouse/Houses/%i.ini",id);//Formatiranje odabrane kuce
INI_Open(file);//Otvaranje fajla preko SII.
INI_WriteInt("Price",HousePrice);//Pisanje informacija cena,lvl ostalo
INI_WriteInt("Owned",0);//Podesavanje vlasnista owner - 0
INI_WriteInt("VirtualWorld",GetPlayerVirtualWorld( playerid));//Pisanje u vitual svetu
INI_WriteFloat("XPos",x);//Odnos pozicije igraca na odnos checkpointa
INI_WriteFloat("YPos",y);//Automatski
INI_WriteFloat("ZPos",z);//Automatski
INI_WriteString("Owner","Nonusablenameforthishouse ");//
INI_Save();//Sacuvanje podatka SII.
INI_Close();//Zatvaranje SII.
format(labelstring,sizeof(labelstring),"Vlasnik: Nema \nPrice: %i",HousePrice);
HInfo = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25. 0,GetPlayerVirtualWorld(playerid));
HouseCount++;
return 1;
}

Pravimo komandu da se kuca moze kupiti
Ako ste uspesno zavrsili prosli korak mozemo preci na komandu /kupikucu ili (/buy) Kako bih mogli kupiti kucu
CMD:kupikucu(playerid,params[])
{
for(new i = 0; i < MAX_HOUSES;i++)//preg svih kuca
{
if(!IsPlayerInRangeOfPoint(playerid,8.0,HInfo,HInfo,HInfo)) continue;//Provera dali je igrac na mestu checkpointa
if(GetPlayerMoney(playerid) < HInfo) return SendClientMessage(playerid,-1,"Nemas dosta para kako bi kupio kuci");//Provera dali igras ima dovoljno para da kupi kucu
if(HInfo == 1) return SendClientMessage(playerid,-1,"Ova kuca poseduje vlasnika");//Provera dali kuca ima vlasnika.
HInfo = 1;//Postavljanje da kuca ima vlasnika 1.
new file,pName,string;//Stavaranje potrebe zavar
GetPlayerName(playerid,pName,sizeof(pName));//Vracanje imena igraca
format(HInfo,24,"%s",pName);//Postavljanje da kuca ima vlasnika
format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Update fajla kuce
INI_Open(file);//Otvaranje fajla gde su kuce
INI_WriteInt("Owned",1);//
INI_WriteString("Owner",pName);//Postavljanje kuce na vlasnikovom imenu
INI_Save();//sacuvanje u fajl .ini
INI_Close();//zatvaranje fajla .ini
format(string,sizeof(string),"VLASNIK: DA \nPrice: %i \nOwned: %s",HInfo,pName);//Update kuce
Update3DTextLabelText(HInfo,0xFF0000FF,string);//Postavljanje labela u drugi oblik,boju razlikovanje kupljene kuce od kuce koja se prodaje:P
GivePlayerMoney(playerid,-HInfo);
return 1;
}
SendClientMessage(playerid,-1,"Ti nisi u blizini kuce!");
return 1;
}
Pravimo da kuca moze da se proda

Hyuh da znam dosta vam je ali jos malo i kraj
Ako ste uspeno uradili prosli korak sacemo napraviti komandu /prodajkucu ili /sell
CMD:prodajkucu(playerid,params[])
{
for(new i = 0; i < MAX_HOUSES;i++)//Pregl svih kuca
{
if(!IsPlayerInRangeOfPoint(playerid,8.0,HInfo,HInfo,HInfo)) continue;//Provera dali je igrac kod checkpointa
if(HInfo == 0) return SendClientMessage(playerid,-1,"Ova kuca nema vlasnika");//Provera dali kuca ima vlasnika
new pName;
GetPlayerName(playerid,pName,sizeof(pName));//Ponovno igracevo ime
if(HInfo == 1 && strcmp(pName,HInfo) != 0) return SendClientMessage(playerid,-1,"Ti nisi vlasnik ove kuce!");//Provera dali je igrac vlasnik kuce
HInfo = 0;//Postavljanje vlasnisva na 1 (Ima vlasnika)
new file,string;//Stvaranje neophodnih varova
format(HInfo,24,"Nonusablenameforthishouse");//Postavljanje za valsnika
format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Update fajla kuce
INI_Open(file);//Otvaranje fajla
INI_WriteInt("Owned",0);//Postavljanje vlasnitva na 0 "Owned" na 0 (OK znaci 1 je kada ima vlasnika 0 kada nema)jasno :D
INI_WriteString("Owner","Nonusablenameforthishouse ");//Postavljanje vlasnista".
INI_Save();//Save fajla .ini
INI_Close();//zatvaranje fajla .ini
format(string,sizeof(string),"VLASNIK: Ne \nPrice: %i \nOwner: None",HInfo,pName);//Update i vracanje labela na staro
Update3DTextLabelText(HInfo,0xFF0000FF,string);//Uptade boje labela u ovom primeru u crvenu (0xFF0000FF)
return 1;
}
SendClientMessage(playerid,-1,"Ti nisi u blizini kuce!");
return 1;
}

Provera ako igrac udje u checkpoint
Oke ovde jos pravimo i da proverava ko ulazi u kucu 🙂
public OnPlayerEnterDynamicCP(playerid,checkpointid)
{
for(new i = 0; i < MAX_HOUSES;i++)//Pregl svih kuca
if(checkpointid == HouseEnter)//Provera dali je checkpoint id poklapa sa IDom interioroa kuce
{
new pName;//Pravljenje na ime igraca
GetPlayerName(playerid,pName,24);//Smestanje imena igraca
if(HInfo == 1 && strcmp(HInfo,pName) == 0)//Poredjenje izmedju imena igraca i vlasnika kuce (PROVERA POKLAPANJA)
{
SetPVarInt(playerid,"PlayersInteriorHouse",GetPlay erInterior(playerid));//Cuvanje kako bi posle mogli da vratite
SetPVarInt(playerid,"PlayerVirtualWorldHouse",GetP layerVirtualWorld(playerid));//Cuvanje kako bi posle mogli da vratite
SetPlayerInterior(playerid,12);//Postavljanje interiora
SetPlayerPos(playerid,446.7281,507.0475,1001.4195) ;//Postavljanje igraceve pozicije X,Z,Y
SetPlayerVirtualWorld(playerid,HInfo);//Sprecava da se igraci u kucama mimoidju :D
PlayerInHouseID = i;
}
if(HInfo == 1 && strcmp(HInfo,pName) != 0)//Procera dali je kuca u dobrom vlasnistu (POKLAPANJE)
{
SendClientMessage(playerid,-1,"Ti ne posedujes ovu kucu");
}
if(HInfo == 0)//Lagana provera dali kuca ima vlasnika
{
SendClientMessage(playerid,-1,"/kupikucu kako bi ste kupili kucu");
}
}
if(checkpointid == HouseExit)//Provera da checpoint nije za izlaz
{
SetPlayerPos(playerid,HInfo+3,HInfo,HInfo);//Postavljanje pozicije igraca na Checkpoint +3
SetPlayerInterior(playerid,GetPVarInt(playerid,"Pl ayersInteriorHouse"));//Postavljanje smestenog interiora
SetPlayerVirtualWorld(playerid,GetPVarInt(playerid ,"PlayerVirtualWorldHouse"));//Postavljanje na igracev VirutalWorld gde se sve to cuva
}
}
return 1;
}


Sada radimo ucitavanje kuca

Pravimo ucitavanje kuca u slucaju greske ili restarta servera da se sve vrati na staro
stock LoadHouses()//Pravljenje funkcije
{
new file,houseowner;//Stvaranje fajlova za skladistenje
for(new i = 0; i < MAX_HOUSES;i++)//Pregled svake kuce
{
format(file,sizeof(file),"FAdmin/Houses/%i.ini",i);//Otvaranje fajla kuce sa odrednjenim ID .
if(!INI_Exist(file)) continue;//Provera dali fajl postoji
INI_Open(file);//otvaranje fajla house.ini
HInfo = INI_ReadInt("Price");//Citanje cene
HInfo = INI_ReadInt("Owned");//Citanje dali kuca ima vlasnika
HInfo = INI_ReadInt("XPos");//Citanje pozicije X
HInfo = INI_ReadInt("YPos");//Citanje pozicije y
HInfo = INI_ReadInt("ZPos");//Citanje pozicije Z
HInfo = INI_ReadInt("VirtualWorld");//Citanje virtuelnog sveta
INI_ReadString(houseowner,"Owner");//CITANJE KO JE VLASNIK KUCE.
format(HInfo,24,"%s",houseowner);//Update ako je sve u redu
HouseEnter = CreateDynamicCP(HInfo,HInfo,HInfo,1.5,HInfo);//Pravljenje checkpointa za ulaz
HouseExit = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,HI nfo);//pravljenje checkpointa za izlaz
new labelstring;//Prav labela
switch(HInfo)//Metoda preskoci ako kuca ima vlasnika
{
case 0:{format(labelstring,sizeof(labelstring),"VLASNIK: Ne \nPrice: %i",HInfo);}//Ako nije
case 1:{format(labelstring,sizeof(labelstring),"VLASNIK: Da \nPrice: %i \nOwner: %s",HInfo,HInfo);}//Ako jeste...
}
HInfo = Create3DTextLabel(labelstring,0xFF0000FF,HInfo,HInfo,HInfo,25.0,HInfo);//Pravljenje labela kada je zavrseno formatiranje
HouseCount++;//+ Racunanje
INI_Close();//zatvaranje SII fajla.
}
return 1;
}


KRAJ!!!

ps:Ako ima neka greska slobodno me kontaktirajte za svaku pravopisnu gresku sorry 😛 Pravim tutorijal u 7h ujutru XD
Rax_King
Godfather
pre 10 godina
lijepo, ali bolje koristi TAB jer je ovako nepregledno 🙂
Mr.Gordon
Made Man
pre 9 godina
☢ αlρнα_SkillArena ☢ wrote on January 14, 2016, 3:18 pm:
lijepo, ali bolje koristi TAB jer je ovako nepregledno 🙂

Bice bolje sledeci put 😉
Joksa99
Crime Lord
pre 9 godina
Lepo objasnjeno, sve pohvale 🙂
Mr.Gordon
Made Man
pre 9 godina
VuKaN wrote on February 17, 2016, 6:16 pm:
Lepo objasnjeno, sve pohvale 🙂

Hvala 😉
Skripta/Mapa
Rookie
pre 9 godina
Hvala, super 😄 😄
Mr.Gordon
Made Man
pre 9 godina
Korisnik 😄 wrote on February 17, 2016, 7:41 pm:
Hvala, super 😄 😄

Drago mi je da ti se svidja 🙂
Limix!bre
Underboss
pre 9 godina
Dobro ti je ovo
Mr.Gordon
Made Man
pre 9 godina
Limdzaâ„¢ wrote on February 17, 2016, 11:05 pm:
Dobro ti je ovo

Hvala ti 🙂 U skorije vreme cu videti da napravim tut kao napraviti system Garaza,Imanja,Firmi 🙂
Muma Rascall
Forum Don
pre 9 godina
Fino si objasnio.. 😄

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava