[TuT]Jednostavan sistem kuca

Započeo Mr.GordoN, Januar 14, 2016, 07:04:32 PRE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

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 :D
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[24],//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[MAX_HOUSES][HouseInfo];//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[MAX_HOUSES];//Ovo ce biti checkpoint za ulaz u kucu
new HouseExit[MAX_HOUSES];//Ovo ce biti za checkpoint za izlaz iz kuce
new PlayerInHouseID[MAX_PLAYERS];//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 <cena>");//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[id][Price] = HousePrice;//Postavljanje cene kuce
HInfo[id][Owned] = 0;//Stavljanje kuce u vlasnistvo = 0
HInfo[id][XPos] = x;//Skladistenje Xpozicije  (Igraca)
HInfo[id][YPos] = y;//Skladistenje Ypozicije  (Igraca)
HInfo[id][ZPos] = z;//Skladistenje Zpozicije  (Igraca)
HInfo[id][VirtualWorld] = GetPlayerVirtualWorld(playerid);
format(HInfo[id][Owner],24,"Nonusablenameforthishouse");//.
SendClientMessage(playerid,-1,"Kuca napravljena");
HouseEnter[id] = CreateDynamicCP(x,y,z,1.5,GetPlayerVirtualWorld(pl ayerid));//Pravljenje checkpointa i skladistenje u kucu
HouseExit[id] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,Ge tPlayerVirtualWorld(playerid));//Pravljenje checkpointa za izlaz iz kuce i skadistenje.
new file[40],labelstring[100];//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[id][HouseLabel] = 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[i][XPos],HInfo[i][YPos],HInfo[i][ZPos])) continue;//Provera dali je igrac na mestu checkpointa
if(GetPlayerMoney(playerid) < HInfo[i][Price]) return SendClientMessage(playerid,-1,"Nemas dosta para kako bi kupio kuci");//Provera dali igras ima dovoljno para da kupi kucu
if(HInfo[i][Owned] == 1) return SendClientMessage(playerid,-1,"Ova kuca poseduje vlasnika");//Provera dali kuca ima vlasnika.
HInfo[i][Owned] = 1;//Postavljanje da kuca ima vlasnika 1.
new file[60],pName[24],string[100];//Stavaranje potrebe zavar
GetPlayerName(playerid,pName,sizeof(pName));//Vracanje imena igraca
format(HInfo[i][Owner],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[i][Price],pName);//Update kuce
Update3DTextLabelText(HInfo[i][HouseLabel],0xFF0000FF,string);//Postavljanje labela u drugi oblik,boju razlikovanje kupljene kuce od kuce koja se prodaje:P
GivePlayerMoney(playerid,-HInfo[i][Price]);
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[i][XPos],HInfo[i][YPos],HInfo[i][ZPos])) continue;//Provera dali je igrac kod checkpointa
if(HInfo[i][Owned] == 0) return SendClientMessage(playerid,-1,"Ova kuca nema vlasnika");//Provera dali kuca ima vlasnika
new pName[24];
GetPlayerName(playerid,pName,sizeof(pName));//Ponovno igracevo ime
if(HInfo[i][Owned] == 1 && strcmp(pName,HInfo[i][Owner]) != 0) return SendClientMessage(playerid,-1,"Ti nisi vlasnik ove kuce!");//Provera dali je igrac vlasnik kuce
HInfo[i][Owned] = 0;//Postavljanje vlasnisva na 1 (Ima vlasnika)
new file[60],string[100];//Stvaranje neophodnih varova
format(HInfo[i][Owner],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[i][Price],pName);//Update i vracanje labela na staro
Update3DTextLabelText(HInfo[i][HouseLabel],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[i])//Provera dali je checkpoint id poklapa sa IDom interioroa kuce
{
new pName[24];//Pravljenje na ime igraca
GetPlayerName(playerid,pName,24);//Smestanje imena igraca
if(HInfo[i][Owned] == 1 && strcmp(HInfo[i][Owner],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[i][VirtualWorld]);//Sprecava da se igraci u kucama mimoidju :D
PlayerInHouseID[playerid] = i;
}
if(HInfo[i][Owned] == 1 && strcmp(HInfo[i][Owner],pName) != 0)//Procera dali je kuca u dobrom vlasnistu (POKLAPANJE)
{
SendClientMessage(playerid,-1,"Ti ne posedujes ovu kucu");
}
if(HInfo[i][Owned] == 0)//Lagana provera dali kuca ima vlasnika
{
SendClientMessage(playerid,-1,"/kupikucu kako bi ste kupili kucu");
}
}
if(checkpointid == HouseExit[i])//Provera da checpoint nije za izlaz
{
SetPlayerPos(playerid,HInfo[i][XPos]+3,HInfo[i][YPos],HInfo[i][ZPos]);//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[60],houseowner[24];//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[i][Price] = INI_ReadInt("Price");//Citanje cene
HInfo[i][Owned] = INI_ReadInt("Owned");//Citanje dali kuca ima vlasnika
HInfo[i][XPos] = INI_ReadInt("XPos");//Citanje pozicije X
HInfo[i][YPos] = INI_ReadInt("YPos");//Citanje pozicije y
HInfo[i][ZPos] = INI_ReadInt("ZPos");//Citanje pozicije Z
HInfo[i][VirtualWorld] = INI_ReadInt("VirtualWorld");//Citanje virtuelnog sveta
INI_ReadString(houseowner,"Owner");//CITANJE KO JE VLASNIK KUCE.
format(HInfo[i][Owner],24,"%s",houseowner);//Update ako je sve u redu
HouseEnter[i] = CreateDynamicCP(HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos],1.5,HInfo[i][VirtualWorld]);//Pravljenje checkpointa za ulaz
HouseExit[i] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,HI nfo[i][VirtualWorld]);//pravljenje checkpointa za izlaz
new labelstring[100];//Prav labela
switch(HInfo[i][Owned])//Metoda preskoci ako kuca ima vlasnika
{
case 0:{format(labelstring,sizeof(labelstring),"VLASNIK: Ne \nPrice: %i",HInfo[i][Price]);}//Ako nije
case 1:{format(labelstring,sizeof(labelstring),"VLASNIK: Da \nPrice: %i \nOwner: %s",HInfo[i][Price],HInfo[i][Owner]);}//Ako jeste...
}
HInfo[i][HouseLabel] = Create3DTextLabel(labelstring,0xFF0000FF,HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos],25.0,HInfo[i][VirtualWorld]);//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 :P Pravim tutorijal u 7h ujutru XD
Poslednja Izmena: Januar 14, 2016, 07:06:05 PRE PODNE od Mr.Gordon



Lepo objasnjeno, sve pohvale :)
Srecu cine male stvari i veliko pivo!
x3M-Gaming USKORO!




Dobro ti je ovo

================================================
Radovi:
[FILTERSCRIPT] Jetpack
[FILTERSCRIPT] Glasanje
[MAP] NG Hospital
[MAP] NG Ostrvo

================================================
NouZI Gaming Loading: 30% BaySide
================================================
POTREBAN MAPPER ZA MAPANJE ENTERIJERA
================================================

Citat: Limdzaâ,,¢ poslato Februar 18, 2016, 00:05:28 PRE PODNE
Dobro ti je ovo
Hvala ti :) U skorije vreme cu videti da napravim tut kao napraviti system Garaza,Imanja,Firmi :)