GUI Naudojimas

Iš GTA-Online Wikipedia.
Peršokti į: navigaciją, paiešką
Autorius: Blantas
2013-04-23

Turinys

Kas yra GUI?

GUI - tai vienas iš mano manymu geriausių 0.3 versijos privalomų. GUI sistema žaidėjui leidžia turėti daugiau galimybių žaidime, atsiranda galimybė kontroliuoti savo veiksmus pele naršant per GUI langus.

Funkcijos bei "callback'ai"

SA-MP modifikacijoje GUI programavimas yra gana 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(žaidėjo id, gui lango id, lango tipas, "Titulinis tekstas", "Pagrindinis tekstas", "1 mygtukas", "2 mygtukas" );

Ką gi.. Dabar apie pačius parametrus. „Žaidėjo ID“ - šis parametras nurodo žaidėjo ID, kuriam bus parodomas GUI langas. „GUI lango ID“ - tai langų skiriamasis požymis pagal kurį atskirsime langus vieną nuo kito. "Titulinis tekstas" - tai tekstas kuris bus rodomas GUI lango viršuje. "Pagrindinis tekstas" - tai tekstas, kuris bus matomas pačiame GUI lange. „1 mygtukas“ bei „2 mygtukas“ nustato atitinkamų mygtukų užrašus.

Kaip jau minėjau, GUI programavime yra ir vienas callback'as - OnDialogResponse. Dabar apie parametrus:

OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])

Pirmasis parametras „playerid“ - skirtas žaidėjo ID, kuriam atidarytas GUI langas. „Dialogid“ - tai GUI lango ID. „Response“ - su šiuo paramteru tikrinama, kurį lango mygtuką žaidėjas paspaudė. „Listitem“ - tikrinimą, kuris pasirinkimas buvo pasirinktas iš GUI lango su sąrašu. „Inputtext“ - tekstas, kurį žaidėjas įvedė į GUI langą su teksto įvedimo laukeliu.

GUI langai bei jų rūšys

Žaidime norint parodyti žaidėjui GUI langą reikia išsirinkti jo tipą, vieną iš 4 variantų:

Paprastas GUI langas

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 OnPlayerConnect 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 - „DIALOG_STYLE_MSGBOX“. Po to užrašome visas taisykles - „Serverio taisyklės\n\nNesukč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,"DIALOG_STYLE_MSGBOX","Serverio taisyklės\n\nNesukč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 skriptas 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;
}

Taigi jūsų pirmasis GUI langas atrodo štai taip:

DIALOG STYLE MSGBOX.png

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,"DIALOG_STYLE_INPUT","Įveskite savo vardą ir pavardę žemiau:","Mygtukas","Mygtukas 2");
	return 1;
}

Telieka sutvarkyti OnDialogResponse callback'ą. Aš jame parašysiu savo vardą ir pavardę, kuris atspausdins žaidėjo įvestą tekstą pokalbių lange. Taigi kodas toks:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == 0) //Jei dialogid bus lygus 0
	{
		if(response) //Jei paspaudė mygtuką "Mygtukas"
		{
			new string[128]; //Sukuriame string'ą
			format(string, 128, "Jūsų vardas ir pavardė: %s", inputtext); //Formatuojame string'ą
			SendClientMessage(playerid, 0xFFFFFFFF, string); //Nusiunčiame string'ą žinutės pavidalu
		}
		return 1;
	}
	return 0;
}

Jūsų GUI atrodys šitaip:

DIALOG STYLE INPUT.png

Pasirinkimų sąrašas GUI lange

Ką gi, metas išmokti sukurti GUI langą su pasirinkimų sąrašu.

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\n2 pasirinkimas\n3 pasirinkimas“. Aš pabandysiu padaryti tokius pasirinkimus „Aš vyras\nAš moteris“.

Kodas turėtų būti toks:

public OnPlayerConnect(playerid)
{
	ShowPlayerDialog(playerid,0,DIALOG_STYLE_LIST,"DIALOG_STYLE_LIST","Aš vyras\nAš moteris","Mygtukas","Mygtukas 2");
	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ą "Mygtukas"
		{
			if(listitem == 0) //Jei pirmas pasirinkimas
			{
				SendClientMessage(playerid, GREEN, "Jūs vyras. Gero žaidimo!" );
			}
			else if(listitem == 1) //Jei antras pasirinkimas
			{
				SendClientMessage(playerid, GREEN, "Jūs moteris. Gero žaidimo!" );
			}
		}
		return 1;
	}
	return 0;
}

Jei viską padarėte gerai, turėtumėte išvysti tokį GUI langą:

DIALOG STYLE LIST.png

GUI langas saugiai informacijai

Nuo 0.3d versijos įmanoma naudoti dar vieną dialogų tipą - DIALOG_STYLE_PASSWORD. Šio stiliaus naudojimas identiškas DIALOG_STYLE_INPUT stiliui. Vienintelis skirtumas, yra įvedamo teksto rodymas. Naudojant DIALOG_STYLE_PASSWORD dialogą, kiekvienas įvedamo teksto simbolis bus pakeičiamas užšifruotu simboliu. Taip atsiras galimybė išvengti privačių duomenų viešinimo kitiems asmenims. Naujoji GUI langų rūšis turbūt labiausiai bus naudojama tam tikros privačios informacijos identifikavimui. Pavyzdžiui, registracijoms ir pan.

Vienas iš pavyzdžių, rodantis naujojo dialogo išvaizdą:

DIALOG STYLE PASSWORD.png

Dialogų išvaizda

SA-MP GUI sistema naudoja tam tikrus resursus iš kliento kompiuterio. Dialogų išvaizdą SA-MP nustato pagal kompiuteryje esančius išvaizdos resursus. Kalbant konkrečiau iš šių failų:

...\Rockstar Games\GTA San Andreas\sampgui.png
...\Rockstar Games\GTA San Andreas\mouse.png

Kiekvienas SA-MP naudojantysis gali pasikeisti dialogų išvaizdą į norimą, tačiau ji bus matoma tik jiems patiems. Internete galima rasti įvairių GUI išvaizdos stilių. Norėdami pasikeisti sąvajį, atsisiųskite sau patinkantį bei atsinaujinkite resursą.

Resursus galite rasti čia: SA-MP GUI dizainai.

Papildomi dalykai

  • Jei norėsite uždaryti žaidėjui GUI langą, tiesiog naudokite ShowPlayerDialog ir nustatykite dialogid į -1.
  • GUI lango antraštėje bei turinyje, galime naudoti spalvų kodus (nuo 0.3c versijos).
  • Antraštės maksimalus simbolių kiekis 64. Turinio ~ 4000 simboliai.
  • Į teksto įvedimo laukelį galime įvesti neilgesnį tekstą nei 128 simboliai.
  • Nustatant antrojo mygtuko reikšmę į "" - mygtukas nebus atvaizduojamas ir teoriškai OnDialogResponse callback'e nereikės tikrinti, mygtuko (response parametro).
  • Antraštės bei pagrindinio teksto spalvą galime keisti nuo 0.3c versijos.
  • Pradinė antraštės teksto spalva - c0bcc0.
  • Pradinė pagrindinio teksto spalva - a8c4e0.
  • Dialogo mygtukų teksto spalva - c8c8c8.
  • Dialogas DIALOG_STYLE_PASSWORD palaikomas tik nuo 0.3d versijos.

Daugiau informacijos apie GUI langus:

Asmeniniai įrankiai
San Andreas Multiplayer