Peršokti į turinį

Kuriame GUI lenteles


Keshas

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3914 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

Sveiki,o pvz idejau i PAWNO serverio failus sita ,o tai kaip ji naudoti serveryje?

if(dialogid==1) // jeigu dialog'o id - 1

{

if(response) //jeigu nuspaudė "pasirinkti"

{

if(listitem==0) //jeigu paspaudė pirmą pasirinkimą (pinigai)

{

GivePlayerMoney(playerid,1000); //duodame žaidėjui pinigų

}

if(listitem==1) //jeigu paspaudė antrą pasirinkimą (xp taškai)

{

SetPlayerScore(playerid,1000); //duodame žaidėjui XP

}

if(listitem==2) //jeigu nuspaudė trečią pasirinkimą (ginklai)

{

GivePlayerWeapon(playerid, 20, 50); //duodame žaidėjui ginklų

}

}

}

Prasau padekit as tik naujuokas ant situ dalyku !

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 5 savaičių...

Šiame forume naujokas bet mėgstu padėt tai norėčiau truputi paaiškinti apie input ir password stiliaus GUI lentas.

Visu pirma DIALOG_STYLE_INPUT tai GUI lenta skirta informacijai įvesti. Atsiradus 0.3 versijai o tuo pačiu ir GUI lentelėm, serveriai su registracija pradėjo naudoti tai jas komandų. Ta lentelė į kurią įrašinėjote slaptažodį ir yra DIALOG_STYLE_INPUT. Paskui, jei neklystu 0.3b versijoi atsirado DIALOG_STYLE_PASSWORD lentelės. Tai yra lygiai tokios pačios lenteles tik kad įvestas tekstas, kodas yra rodomas ne simboliais o žvaigždutėm. Beto aš pastebėjau kad daugelis pamokų su registracijos sistemom yra visdar ant DIALOG_STYLE_INPUT. Taigi jei kopijosite tas pamokas nepamirškite pakeisti :D.

Jei jums visdar neaišku kaip tai rašosi pačiame kode tai darosi taip:

1. Susirandam kur naudosime savo lentelę. Pavyzdžiui aš naudosiu savo lentele komandai. Taigi susirandam išpradžiu tinkamą callback'ą (OnPlayerCommandText) ir rašome savo kodą. Štai kaip faktiškai tai turi atrodyti.

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/parodytilenta", cmdtext, true, 13) == 0)
{
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Lenteles pavadynimas", "Zemiau turite parasyti savo teksta.", "Patvirtinti", "Atmesti");
return 1;
}
return 0;
}

Noriu atkreipti dėmesį į dialogid. Aš pasirinkau 0 tai ir toliau savo kode naudosiu šį id kad iškviesti dialog'ą būtent iš šios komandos. Kitaip sakant dialogid reikalingas kad nesupainioti/atžymėti kur kuris dialogas.

2. Taigi dabar einame prie veiksmo (Kas būs kai paspaus tą arba kitą migtuką). Susirandame OnDialogResponse callback'ą. Jame rašome kažką panašaus į tai:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 0)
{
 if(!response) // jei paspaude Atmesti arba paspaude ESC.
 {
	 SendClientMessage(playerid, 0xffffffff, "Jus atsisakete rasyti teksta");
}
else
{
 if(inputtext(playerid) != TEKSTAS) // Jei irasytas tekstas neatitinka nurodito teksto, arba laukelis buvo paliktas tuscias (TEKSTAS padariau #define ir kaskuri teksta)
 {
SendClientMessage(playerid, 0xffffffff, "Klaida!");
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT "Klaida!", "Tekstas kuri ivedete nesutapo su reikelingu! Pabandykite dar karta.", "Patvirtinti", "Atmesti");
}
if(inputtext(playerid) == TEKSTAS) // Jei sutampa.
{
 new vardas(MAX_PLAYER_NAME+1), tekstas(24+MAX_PLAYER_NAME+1);
 GetPlayerName(playerid, vardas, sizeof[vardas]);
 format(tekstas, sizeof[tekstas], "%s atspejo zodi!", vardas);
SendClientMessageToAll(0xffffffff, tekstas);
SendClientMessage(playerid, 0xffffffff, "Atspejote zodi! Stai jums piniginis prizas (1000LT)!");
GivePlayerMoney(playerid, 1000);
}
}
return 1;
}

Vėl noriu atkreipti dėmesį į dialog id. Vietoj kur nebuvo įrašytas tekstas parašiau tą patį id. Tai reiškia, kad ką nepaspaudus žaidėjui tame GUI langelyje, jai dirbs šis pats kodas.

Na manau tiek. Dėl DIALOG_STYLE_PASSWORD naudojimas panašus. Tesiog vietoj "INPUT" įrašome "PASSWORD" (be kabučių). Tai tiek. Iškilus klausymui kreipkitės :).

(neaiškinau kiekvieną eilutę, nes tai nėra pamoka būtent šio kodo.)

Redaguota , nario LiventrOP
Nuoroda į komentarą
Dalintis per kitą puslapį

Pamoka aiški, tik su optimizavimu galėtum patvarkyti. Jei darom pamokas, tai gal mokinam naujokus kodus optimizuoti? Nes dabar kodavimai žmonių visiškai be jokio logiškumo.

if(dialogid == 0) //Jeigu dailog'o id yra "0"
{
if(response) //Jeigu žaidėjas paspaudė pirmą pasirinkimą (mūsų atveju "Taip")
{
SendClientMessage(playerid,-1,"Džiaugiamės, jog jums tai patinka!") //siunčiame žinutę
}
if(!response) //Jeigu žaidėjas nuspaudė antrą pasirinkimą (mūsų atveju "Ne")
{
SendClientMessage(playerid,-1,"Gaila, mes bandysime tai pakeisti.") //siunčiame žinutę
}
return 1;

Kam tikrinti viską iš eilės ir nieko nereturnint. Papildomi tikrinimai, kurie bereikalingai apkrauna serverį. Jei pasirinksiu "response", kodas vistiek tikrins ar nepaspaudžiau "!response". Jei pasirinksiu 1 variantą, kodas vistiek tikrins ar nepasirinkau kitų variantų. Suoptimizuok, va:

if(dialogid == 0) //Jeigu dailog'o id yra "0"
{
if(response) //Jeigu žaidėjas paspaudė pirmą pasirinkimą (mūsų atveju "Taip")
{
SendClientMessage(playerid,-1,"Džiaugiamės, jog jums tai patinka!") //siunčiame žinutę
}
else //Jeigu žaidėjas nuspaudė antrą pasirinkimą (mūsų atveju "Ne")
{
SendClientMessage(playerid,-1,"Gaila, mes bandysime tai pakeisti.") //siunčiame žinutę
}
return 1;
}
[color=#666600]}[/color]

Variantas su listitem'ais

if(dialogid == 0) //Jeigu dailog'o id yra "0"
{
if(response) //Jeigu žaidėjas paspaudė pirmą pasirinkimą (mūsų atveju "Taip")
{
if(listitem == 0)
{
SendClientMessage(playerid,-1,"Džiaugiamės, jog jums tai patinka!") //siunčiame žinutę
}
else if(listitem == 0)
{
SendClientMessage(playerid,-1,"Džiaugiamės, jog jums tai patinka!") //siunčiame žinutę
}
}
else //Jeigu žaidėjas nuspaudė antrą pasirinkimą (mūsų atveju "Ne")
{
SendClientMessage(playerid,-1,"Gaila, mes bandysime tai pakeisti.") //siunčiame žinutę
}
return 1;

O pats geriausias variantas išvis būtų naudoti switch.

switch(dialogid)
{
case 1: // Dialog'o id == 1 (Tas pats, kad if(dialogid == 1), tik čia tvarkingiau ir geriau.
{
if(!response) // Jei atšaukė, nustojam tikrint
 return 1;
switch(listitem) // Einam per meniu punktus. Vėlgi, tai geriau už if tikrinimus
{
 case 0: // Darom ką norim
 case 1: // Mūsų veiksmai
 case 2: // Dar vienas kodas
 case 3: // Kodas
}
}
}

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 1 mėnesio...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3914 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ą...