Peršokti į turinį
Negalima prašyti ar platinti betkokių žaidimą (multiplayer) palengvinančių programų ir scriptų! Kitaip bus taikoma 1.21. taisyklė

Apie dialog'us


Lukas_Cool

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

Pabandysiu papasakoti apie dialogus (GUI lenteles).

 

Rušys:

#define DIALOG_STYLE_MSGBOX	0    // Paprastas langas, su informacija.
#define DIALOG_STYLE_INPUT	1    // GUI 'langas' su teksto įvedimo laukeliu.
#define DIALOG_STYLE_LIST	2    // GUI 'langas' su pasirinkimų sąrašu.
#define DIALOG_STYLE_PASSWORD   3    // GUI 'langas' su slaptažodžio ivedimu.

Funkcijos, bei callback'ai

 

SA-MP modifikacijoje GUI scriptinimas yra labai paprastas. Tereikia mokėti vieną funkciją ir vieną callback'ą. Dabar apie funkciją... Norint žaidėjui parodyti GUI langą - naudosime ShowPlayerDialog funkciją. Joje kaip matome yra nemažai parametrų:

ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])

Parametrai:

 

playerid Parametras nurodo žaidėjo id, kuriam bus parodomas GUI langas.
dialogid - Tai langų skiriamasis požymis pagal kurį atskirsime langus vieną nuo kito.
style GUI lango stilius.
caption[] - Tai tekstas kuris bus rodomas GUI lango viršuje.
info[] - Tai tekstas, kuris bus matomas pačiame GUI lange.
button1[] - Kairiojo GUI lange esančio mygtuko tekstas.
button2[] - Dešiniojo GUI lange esančio mygtuko tekstas.
 
Kaip jau minėjau, GUI scriptinime yra ir vienas callback'as - OnDialogResponse. Dabar apie parametrus:
OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Parametrai:
 
playerid - Žaidėjo id, kuriam atidarytas GUI langas.
dialogid - GUI lango id nurodytas ShowPlayerDialog funkcijoje.
response - Parameteras rodantis, kurį lango mygtuką žaidėjas paspaudė. 1 pirmasis mygtukas, 0 antrasis.
listitem - Pasirinkimas, kuris buvo pasirinktas iš GUI lango su sąrašu.
inputtext[] - Tekstas, kurį žaidėjas įvedė į GUI langą su teksto įvedimo laukeliu.

 

Apie pačiu dialog'us:

 

Paprastas

 

Dabar pabandykime sukurti paprastą GUI langą su bet kokiu tekstu. Visų pirmą sugalvokime kur norėsime parodyti GUI lang'ą. Aš nusprendžiau jį parodyti žaidėjui vos tik jam prisijungus. Todėl ShowPlayerDialog funkciją naudosiu OnPlayerConncet callback'e. Taigi pradėkime...

 

Pirmiausia įrašau savo GUI lango norimą ID. Vėliau pasirenku lango tipą - DIALOG_STYLE_MSGBOX. Toliau užrašome norimą tekstą, kuris bus rodomas lango viršuje. Maniškis bus toks - "Serverio taisyklės". Poto užrašome visas taisykles - "Nesukčiauk ir būsi nenubaustas!" ir galiausiai duodame mygtukams pavadinimus - "Sutinku" bei "Nesutinku". Jūsų kodas turėtų būti panašus į manąjį:

public OnPlayerConnect(playerid)
{
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Serverio taisyklės","Nesukčiauk ir būsi nenubaustas!","Sutinku","Nesutinku");
    return 1;
}

Dabar belieka parašyti kodą, kuris suveiks žaidėjui panaudojus GUI langą, OnDialogResponse callback'e. Visų pirmą patikrinime ar "dialogid" lygus mūsų nustatytam (t.y. ar lygus 0), toliau tikriname, kurį mygtuką žaidėjas paspaudė naudodami "response". Aš padarysiu, jei žaidėjas paspaudė mygtuką "Nesutinku", jis bus išspiriamas iš serverio. Taigi scriptas atrodys štai taip:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 0) //Jei dialogid bus lygus 0
    {
        if(!response) //Jei paspaudė mygtuką "Nesutinku"
        {
            Kick(playerid);
        }
        return 1;
    }
    return 0;
}

GUI langas su teksto įvedimo laukeliu

 

Dabar pabandykime sukurti GUI langą su teksto įvedimo laukeliu. Vėl gi naudosime tą pačią funkciją ShowPlayerDialog. Šį kartą tiesiog perrašykime tą eilutę iš buvusio pavyzdžio ir pakeiskime GUI lango tipą į DIALOG_STYLE_INPUT.

Jūsų kodas turėtų atrodyti taip:

public OnPlayerConnect(playerid)
{
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT,"Serverio taisyklės","Nesukčiauk ir būsi nenubaustas!","Sutinku","Nesutinku");
    return 1;
}

Telieka sutvarkyti OnDialogResponse callback'ą. Aš jame parašysiu scriptą, kuris atspauzdins žaidėjo įvestą tekstą chatbox'e. Taigi scriptas toks:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 0) //Jei dialogid bus lygus 0
    {
        if(response) //Jei paspaudė mygtuką "Sutinku"
        {
            new string[128]; //Sukuriame string'ą
            format(string, 128, "Tu įvedei: %s", inputtext); //Formatuojame string'ą
            SendClientMessage(playerid, GREEN, string); //Nusiunčiame string'ą žinutės pavidalu
        }
        return 1;
    }
    return 0;
}

Pasirinkimų sąrašas GUI lentelėje

 

Kuriant šį langą, viską ką reikia žinoti yra "\n" simbolis, kuris reiškia naują eilutę. Vėl perrašome ShowPlayerDialog funkciją ir šį kartą GUI lango tipą pakeičiame į DIALOG_STYLE_LIST. Toliau vietoj pagrindinio GUI lango tekstą galime surašyti pasirinkimus. Juos rašant reikia atskirti "\n" simboliu, tarkim "1 pasirinkimas\n2Pasirinkimas\n3Pasirinkimas". Aš pabandysiu padaryti tokius pasirinkimus "Žaisti\nIšeiti".

Kodas turėtų būti toks:

public OnPlayerConnect(playerid)
{
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_LIST,"Serverio taisyklės","Žaisti\nIšeiti","Rinktis","Atgal");
    return 1;
}

Dabar sutvarkome OnDialogResponse callback'ą.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 0) //Jei dialogid bus lygus 0
    {
        if(response) //Jei paspaudė mygtuką "Sutinku"
        {
            if(listitem == 0) //Jei pirmas pasirinkimas
            {
                SendClientMessage(playerid, GREEN, "Gero žaidimo!" );
            }
            else if(listitem == 1) //Jei antras pasirinkimas
            {
                Kick(playerid);
            }
        }
        return 1;
    }
    return 0;
}

Viskas išraukta iš wiki.sa-mp.com, todėl nesmerkite labai.

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

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

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

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

Skelbimai


×
×
  • Sukurti naują...