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 🙂