Skocz do zawartości
Fil

Proste menu broni pod komendą (GUI)

Rekomendowane odpowiedzi

Witam serdecznie! Jako że jest to mój pierwszy temat i w ogóle post na forum to witam wszystkich użytkowników!

 

W dzisiejszym poradniku zajmiemy się prostym menu w GUI typu DIALOG_LIST.

Na górze dodajemy sobie bibliotekę podstawową:

 

#include <a_samp>

 

Ja będę również korzystać z biblioteki:

 

#include <kolory>

(link na dole)

Jest to dla mnie wydajniejsze i wygodniejsze.

 

Następnie musimy sobie dodać kod, który umożliwi nam wywołanie menu spod komendy, dajmy na to "/kupbron".

 

public OnPlayerCommandText(playerid, cmdtext[])
{
	if(!strcmp(cmdtext, "/kupbron", true))
	{
	    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "Menu kupowania broni", "M4A1(5000zl)\nAK47(5000zl)    \nMP5(1500zl)", "Kup", "Anuluj");
		return 1;
	}
	
	return 0;
}

 

No to tłumaczymy po kolei. Na początku korzystamy z podstawowego callbacka OnPlayerCommandText. W klamrach jest "if", który odpowiada za wykonanie się akcji w kolejnych nawiasach klamrowych po wpisaniu komendy "/kupbron". A dokładnie mówiąc "if" odpowiada za ukazanie graczowi menu wyboru broni. Następnie zwracamy sobie wartość "1", aby serwer nie darł nam się, że komenda "/kupbron" nie istnieje. Po zakończeniu nawiasu klamrowego zwracamy sobie wartość "if'a", dajmy na to o wartości "0".

 

Następnie skorzystamy sobie z callbacka, który pozwoli nam na dokładne sprawdzenie wyboru gracza.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   //kod
   return wartosc;
}

 

No dobrze. Teraz "wewnątrz" tej linijki kodu (tj. w nawiasach klamrowych) musimy napisać sobie skrypcik, który będzie odczytywał dokładne dane. Czyli numer menu, co stanie się po naciśnięciu podanych buttonów, kiedy wybrana jest któraś z propozycji. A więc pomiędzy nawiasy klamrowe w callback'u "OnDialogResponse" wklejamy sobie kodzik:

 

if(dialogid == 0)
	{
	    if(response == 1)
	    {
	    switch(listitem)
	    {
	        case 0:
	        {
	            SendClientMessage(playerid, COLOR_GREEN, "Zakupiles M4A1");
	            GivePlayerWeapon(playerid, 31, 150);
	            GivePlayerMoney(playerid, -5000);
	        }

			case 1:
			{
			    SendClientMessage(playerid, COLOR_GREEN, "Zakupiles AK47");
				GivePlayerWeapon(playerid, 30, 150);
				GivePlayerMoney(playerid, -5000);
			}
			
			case 2:
			{
			    SendClientMessage(playerid, COLOR_GREEN, "Zakupiles MP5");
			    GivePlayerWeapon(playerid, 29, 150);
			    GivePlayerMoney(playerid, -1500);
			}
		}
		}
		else
		{
		    SendClientMessage(playerid, COLOR_RED, "Nie zakupiles zadnej broni");
		}
	}
 	return 1;

 

Teraz zadamy sobie pytanie: co to w ogóle znaczy?

Otóż lećmy po kolei:

 

if(dialogid == 0)
{
   //kod
   return wartosc;
}

 

"Jeśli wybrany został dialog o id 0 to"

 

if(response == 1)
{
   //kod
   return wartosc;
}

 

I tutaj sobie tworzymy kolejnego "if'a", który patrzy na to tak:

"Jeśli wybrany został prawy przycisk to"

 

switch(listitem)
{
   //kod
}

 

Korzystamy sobei ze "switch'a", a następnie z "case'ów", żeby sprawdzić, którą broń wybrał gracz:

 

                        case 0:
	                {
	                   SendClientMessage(playerid, COLOR_GREEN, "Zakupiles M4A1");
	                       GivePlayerWeapon(playerid, 31, 150);
	                       GivePlayerMoney(playerid, -5000);
	                }

			case 1:
			{
			    SendClientMessage(playerid, COLOR_GREEN, "Zakupiles AK47");
				GivePlayerWeapon(playerid, 30, 150);
				GivePlayerMoney(playerid, -5000);
			}
			
			case 2:
			{
			    SendClientMessage(playerid, COLOR_GREEN, "Zakupiles MP5");
			        GivePlayerWeapon(playerid, 29, 150);
			        GivePlayerMoney(playerid, -1500);
			}

 

case 0 - odpowiada za M4

case 1 - odpowiada za AK'acza

case 2 - odopowiada za MP5

 

No i tam oczywiście w klamrach są funkcje, których mam nadzieję nie muszę tłumaczyć.

Dobrze, następnie widzimy:

 

else
		{
		    SendClientMessage(playerid, COLOR_RED, "Nie zakupiles zadnej broni");
		}

 

Co odpowiada: " W przeciwnym wypadku wyślij graczowi wiadomość koloru czerwonego o treści 'Nie zakupiles zadnej broni' "

 

No i na samym końcu:

 

return 1;

 

Zwracamy sobie wartość "1".

 

Jest to prosty poradniczek dla początkujących PAWN'owców. Proszę nie krytykować jego prostoty i ewentualnych drobnostek, jakie są wg Was błędami, ponieważ sam niewiele tygodni temu zacząłem naukę PAWN! ;)

 

Download:

 

Biblioteka <kolory> (nie jest ona mojego autorstwa) - http://chomikuj.pl/kuba998pl

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak dla mnie coś podobnego do poradnika jak zrobić dialog GUI, a taki już jest na forum. W tamtym poradniku jest opisane co i jak z okienkami GUI, ty piszesz to samo tyle że ty opisujesz jak zrobić okienko w którym się kupuje bronie.Nie dodałeś też funkcji sprawdzania kasy. Jak gracz będzie miał mniej kasy niż tyle co trzeba by kupić to i tak mu da. Np. ktoś ma 0 kasy a M4 kosztuje 5000 to jeśli to wybierze to i tak mu da, a kasę ustawi na -5000.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie lepiej zrobić tak, żeby sprawdzało, czy ma np. 5000

                if(GetPlayerMoney(playerid) < 5000) //sprawdza czy ma 5000$
                    return SendClientMessage(playerid, COLOR_GREEN, "Nie masz tyle kasy"); //jeśli nie ma wysyła mu wiadomość.
                GivePlayerMoney(playerid, -5000);//jesli ma to mu zabiera 5000$
                GivePlayerWeapon(playerid, id broni, ammo);//i daje bron i ammo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×