Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Jail sistema [MYSQL]


ViVix

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3855 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Jail sistemos pamoka.

Naudosim ZCMD,SSCANF ir MySQL duom. bazę.

Pradėkim.

Pirmiausia modas turi būti mysql. Jeigu jo neturite, jums ši sistema neveiks. Yra pilna pamokų mysql surišimui.

pagal šią pamoką, galite pirmą punktą padaryti :

http://vivizblog.wor...arome-saveload/

Na jei jau turime mysql duom. bazę, pradėkime.

Pirmiausia turime susikurti define, su kuriuo iš milisekundžių paversime į sekundes.

Viršuje modo rašome

#define SECONDS(%0) (%0 * 1000)

Taip pat mums reikės poros kintamųjų :

new JAIL[MAX_PLAYERS], jtimeris[MAX_PLAYERS];

Į pirmą kintamąjį saugosime laiką sekundėmis, o į antrą - timerį.

Dabar mums reikia funkcijos su kuria galėsime nukelti žaidėją į kalėjimą nurodytam laikui.

Gamemodo gale rašome :

stock JailPlayer(playerid,sekund)
{
JAIL[playerid] = sekund; // štai čia bus nukeltos į kintamąjį nurodytos sekundės
new msgs[120]; // čia žinutės kintamasis
format(msgs,sizeof(msgs),"Jūs buvote nukeltas į kalėjimą %i sekundems",sekund); // formatuojam žinutę
SendClientMessage(playerid,-1,msgs); // išsiunčiam žinutę
SetPlayerPos(playerid,Float:x,Float:y,Float:z); // dabar čia vietoj Float:x,Float:y,Float:z įrašome kalėjimo koordinates
SetPlayerInterior(playerid,interiorid); // čia jeigu tai būtų interior, tada nustatysim skaičių, jeigu tai bus laukas ir pnš, arba tavo mappintas kalėjimo vidus, tada bus 0
jtimeris[playerid] = SetTimerEx("Ikalino",1000, true, "e", playerid); // paleidžiam timer.
}

Dabar mums reikės tikrinimo, ar žaidėjas kalėjime, ar jam jau baigėsi laikas ir pnš.

Gm gale rašome :

forward Ikalino(playerid);
public Ikalino(playerid)
{
if(JAIL[playerid] > 1 && !IsPlayerInRangeOfPoint(playerid, Float:range ,Float:x,Float:y,Float:z)) // vietoj Float:range , įrašome spindulio ilgį iš kurio negalės išeiti, o vietoj Float:range ,Float:x,Float:y,Float:z koordinates, tai būtų kalėjimo centras
{
SetPlayerPos(playerid,Float:x,Float:y,Float:z); // na o čia jeigu žaidėjas būtų pabėgęs, tai nukelsim jį į nurodytas koordinates. Tai galima paimti koordinates iš ankstesnio punkto.
}
 if(JAIL[playerid] < 1) // tikrinsim ar jau baigėsi laikas, jeigu jis pasibaigė
 {
	 SetPlayerPos(playerid,x,y,z) // nukelsim žaidėją į tam tikrą vietą pvž prie kokios policijos bazės ar šeip kur nors. Vietoj x,y,z įrašote vietos koordinates.
	 KillTimer(jtimeris[playerid]); // na ir panaikinsim timerį
 }
 else // toliau jeigu dar nesibaigė laikas
 {
new stringas[50];
	 JAIL[playerid] --; // atimsim vieną sekundę
	 format(stringas, 128, "LIKO: %i sek.",JAIL[playerid]); // formatuojam žinutę
		 GameTextForPlayer(playerid, stringas, SECONDS(1), 4); // rodom gametextą
 }
 return 1;
}

Paprasta. Dabar darysime komandą:

Tai ir prie ZCMD komandų rašome :

CMD:jail(playerid,params[])
{
new sekunds,target;
if(sscanf(params,"ui",target,sekunds)) return SendClientMessage(playerid,-1,"Komanda naudojama /jail [Vardas_Pavardė] [Laikas sekundėmis]"); // čia tikrinsim ar parašė pilną komandą
if(!ADMIN[playerid]) return SendClientMessage(playerid,-1,"Jūs ne administratorius!"); // padarom tikrinimą, vietoj !ADMIN[playerid] įrašykite savo administratoriaus kintamajį. Būtinai su šauktuku.
JailPlayer(PID[playerid],sekunds); // ir naudojam funkciją, kurią kurėme anksčiau
return true;
}

Dabar mums reikės saugojimo ir krovimo.

einam į savo phpmyadmin duom bazę ir susikuriam naują field. Jail, INT, 11.

Tuomet einame prie savo saugojimo skripto ir rašome :

new query[200];
format(query,200,"UPDATE players SET Jail='%i' WHERE Vardas='%s'",JAIL[playerid],pName(playerid)); // vietoj players įrašote savo duombazės pavadinimą, tai yra kur saugojama žaidėjo info, o ne visos bazės. Vietoj vardas taip pat įrašote kaip ir žaidėjo saugojimo bazėje.

mysql_query(query); // su šita funkciją įrašysime Jail laiką į nurodytą žaidėjo info.

Dabar užkrovimas.

new result[50];
mysql_fetch_field_row(result,"Jail"); // paimame informaciją iš eilutės "Jail"
JAIL[playerid] = strval(result); // paimtą informaciją įrašome į kintamajį
if(JAIL[playerid] > 1) JailPlayer(playerid,JAIL[playerid]); // jeigu tai yra daugiau nei 1 tuomet keliam žaidėją į kalėjimą.

kas neturi funkcijos pName(playerid)

Gamemodo gale rašo :

stock pName(playerid)
{
new vardas[MAX_PLAYER_NAME];
GetPlayerName(playerid,vardas,24);
return vardas;
}

Štai ir pamoką baigta, tikiuosi viskas aišku ir suprantama :)

Kam negaila uždėkit +rep :D

Redaguota , nario - Aurimas
  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

Na daugiausiai sveikatos man kainavo tokie pasakymai kaip "mysql modą"

Nemėgstu tos funkcijos "'JailPlayer" per daug primena GRP(bet čia ne klaida).

naują field. Jail, INT, 50.
"Field"? Aš Lietuvis. INT net nereikia, užtenka SMALLINT UNSIGNED(nebent žadama įkalinti žaidėja ilgiau nei 18valandų). Ir kodėl 50 ? Bent žinai ką šis skaičius reiškia? Nors esmės nelabai daro... Bet aš už tvarkingas duomenų bazes!
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3855 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...