Sveiki, siandien padarysiu issamia pamoka, kaip sukurti dviraciu sistema, lengva bet pakankamai gera sistema 🙂
Gerai pradekim.
Pirmiausia susikuriame folderi scriptfiles/saves/dviraciai
Tada einam i savo gamemoda, susikursime enumus.
enum dviratis
{
Float:posx,
Float:posy,
Float:posz,
dviracioid,
}
new dviratisDB[MAX_PLAYERS][dviratis];
enum dvirat
{
owner_name[MAX_PLAYER_NAME],
locked
}
new dviratDB[MAX_VEHICLES][dvirat];
sie kintamieji bus skirti saugoti i juos informacija.
Pvz gautas dviracio koordinates x’o saugosime i kintamaji dviratisDB[vehicleid][posx] == x koordinates;
Gerai judam toliau.
pradesim daryti dviracio pirkima, ji galesite tobulinti, darau paprasta.
po
OnPlayerCommandText
dedame koda:
if(!strcmp(cmdtext, "/dpirkti", true,8)) // komandos pavadinimas
{
if(dviratisDB[playerid][dviracioid] >=1) // tikrins ar zaidejas jau turi dvirati
{
SendClientMessage(playerid,GREEN,"Jus jau turite dvirati!");
return 1;
}
ShowPlayerDialog(playerid,665,DIALOG_STYLE_MSGBOX,"DVIRACIO PIRKIMAS","Ar norite pirkti dvirati?\nJis jums kainuos 2000LT","Taip","Ne"); // rodysim zaidejui dialoga
return 1;
}
toliau po
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
dedam koda:
if(dialogid == 665)
{
if(response)
{
new file[128];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(file,sizeof(file),"saves/dviraciai/%s.ini",name);
dini_Create(file);
dini_FloatSet(file,"posx",irasyk masinos atsiradimo X koordinate); // irasysim duomenis i dini failiuka
dini_FloatSet(file,"posy",irasyk masinos atsiradimo Y koordinate);
dini_FloatSet(file,"posz",irasyk masinos atsiradimo Z koordinate);
dviratisDB[playerid][dviracioid] = CreateVehicle(510,IRASYK CIA x,y,z,0,2,3,-1); // sukursim dvirati
GivePlayerMoney(playerid,-2000); // nuimsim pinigus
}
return 1;
}
Na jau ipusejome, dabar reikia padaryti SAVE/LOAD
pradesim:
gm gale dedame :
forward SaugomDvirati(playerid,bool:simple);
public SaugomDvirati(playerid,bool:simple)
{
if(!simple) GameTextForPlayer(playerid,"~r~] Tavo tavo dviratis saugojamas]",5000,5);
new file[128],Float:x,Float:y,Float:z,name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name)); // gaunam zaidejo varda
format(file,sizeof(file),"saves/dviraciai/%s.ini",name);
GetVehiclePos(dviratisDB[playerid][dviracioid],x,y,z); // gaunam dviracio pozicija
dini_IntSet(file,"locked", dviratDB[dviratisDB[playerid][dviracioid]][locked]);
dini_FloatSet(file,"posx",x); // gautos koordinates bus irasytos i ini failiuka
dini_FloatSet(file,"posy",y);
dini_FloatSet(file,"posz",z);
}
dabar po:
public OnPlayerDisconnect(playerid, reason)
{
dedam:
new file[128];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(file,sizeof(file),"saves/dviraciai/%s.ini",name);
if(fexist(file))
{
SaugomDvirati(playerid,false); // isaugosim dvirati
DestroyVehicle(dviratisDB[playerid][dviracioid]); // ir sunaikinsim, nes kam jo reikia jeigu tu atsijunges?
}
Saugojimas padarytas, dabar reikia padaryti loadinima.
po
OnPlayerConnect
dedame:
new file[128];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(file,sizeof(file),"saves/dviraciai/%s.ini",name);
if(fexist(file))
{
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
dviratisDB[playerid][dviracioid] = CreateVehicle(410,dini_Float(file,"posx"),dini_Float(file,"posy"),dini_Float(file,"posz"),0,-1,-1,-1);
strmid(dviratDB[dviratisDB[playerid][dviracioid]][owner_name],name,0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
dviratDB[dviratisDB[playerid][dviracioid]][locked]=true;
}
stai ir loadinimas.
Dabar padarysime kad neitu isesti i uzrakinta dvirati:
Po:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
dedame:
if(dviratDB[vehicleid][locked])
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
if(strcmp(name,dviratDB[vehicleid][owner_name],true))
{
new msg[128];
format(msg,sizeof(msg),"Dviratis yra uzrakinta. Ji priklauso %s",dviratDB[vehicleid][owner_name]);
SendClientMessage(playerid,GREEN,msg);
Stop(playerid);
return 1;
}
Na gerai, dabar keletas komandu siai sistemai.
Po
OnPlayerCommandText
dedame:
if(!strcmp(cmdtext, "/tpb", true,4))
{
new file[128];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(file,sizeof(file),"saves/dviraciai/%s.ini",name); //
if(!fexist(file))
{
SendClientMessage(playerid,GREEN,"[SERVERIS]: Jus neturite dviracio!");
return 1;
}
new Float:coo[3];
GetVehiclePos(dviratisDB[playerid][dviracioid],coo[0],coo[1],coo[2]); // gaunam dviracio koordinates
SetPlayerPos(playerid,coo[0],coo[1],coo[2]); // teleportuojam prie dviracio
SendClientMessage(playerid,GREEN,"[SERVERIS]: Jus buvote nuteleportuotas prie dviracio!");
return 1;
}
if(!strcmp(cmdtext, "/uzrakinti", true,10))
{
if(dviratisDB[playerid][dviracioid]==0)
{
SendClientMessage(playerid,GREEN,"[SERVERIS]: Jus neturite dviracio!");
return 1;
}
dviratDB[dviratisDB[playerid][dviracioid]][locked]=true;
SendClientMessage(playerid,"jusu dviratis uzrakintas!");
return 1;
}
if(!strcmp(cmdtext, "/atrakinti", true,10))
{
if(dviratisDB[playerid][dviracioid]==0)
{
SendClientMessage(playerid,GREEN,"[SERVERIS]: Jus neturite dviracio!");
return 1;
}
dviratDB[dviratisDB[playerid][dviracioid]][locked]=false;
SendClientMessage(playerid,"Jusu dviratis atrakintas!");
return 1;
}
Pamoka baigta. Ji kurta mano, prasau neripinti, tada bus ir daugiau pamoku.
Gero naudojimo 🙂