Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2017-12-25, 12:48


RakNet00







Wiek: 25
Na forum: 3126 dni
Posty: 66



Respekt: 50

Witam. Powie mi kto? jak zrobi? co? takiego, ?e np. wpisuj? /kasa i klikam daj kase i po kliknieciu w to pokazuje si? okno w ktorym mam wpisa? nick gracza lub id i nastepnie pokazuje si? okno w kt?rym mam wpisa? jak?? kwot?, kt?r? chc? da? temu graczowi?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-12-25, 13:18


Destinn







Wiek: 26
Na forum: 3094 dni
Posty: 104
Nick w MP: Destin

Piwa: 25

Respekt: 90

Mo?esz zrobi? to na pare sposob?w.

Pierwszym i wg. mnie najlepszym sposobem, kt?rego u?yjemy jest; komenda /kasa [id], a nast?pnie wy?wietlenie dialogu, w kt?rym nale?y wpisa? kwot? do przekazania. Mo?na te? troch? na odwr?t - /kasa [ilo?c kasy], a nast?pnie wpisanie id gracza, kt?remu chcemy przekaza? got?wk?.

Jak to zrobi?? U?yj? do tego najlepszego systemu komend - zCMD oraz sscanf'a.

Najpierw zdefiniowanie dialogu, kt?rego b?dziemy u?ywa? oraz utworzenie komendy.
Kod:

#define DIALOG_CASH 1

CMD:kasa( playerid, params[] )
{
new playerid2;
if( sscanf( comm2, "u", playerid2 ) )
{
SendClientMessage( playerid, 0xFFFFFFFF, "> U?ycie: /kasa [id gracza]" );
return 1;
}
else
{
if( ! IsPlayerConnected( playerid2 ) )
{
SendClientMessage( playerid, 0xFFFFFFFF, "> Wybrany gracz nie znajduje si? aktualnie na serwerze." );
return 1;
}
}

ShowPlayerDialog( playerid, D_CASH, DIALOG_STYLE_INPUT, " Przekazanie got?wki", "Poni?ej wprowad? ile chcesz przekaza? got?wki temu graczowi.", "Daj kase", "Zamknij" );

SetPVarInt( playerid, "cashplayer", playerid2 );
return 1;
}


Nast?pnie utworzenie dialogu w public'u OnDialogResponse, kt?ry wy?ej zdefiniowali?my.

Kod:

public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[] )
{
if( dialogid == DIALOG_CASH )
{
if( response ) // kiedy klikniemy przycisk lewy ( daj kase )
{
new playerid2 = GetPVarInt( playerid, "cashplayer" ), cash = inputtext;

if( GetPlayerMoney( playerid2 ) < cash )
{
SendClientMessage( playerid, 0xFFFFFFFF, "> Nie posiadasz takiej ilo?ci pieni?dzy." );
return 1;
}
else if( ! IsPlayerConnected( playerid2 ) )
{
SendClientMessage( playerid, 0xFFFFFFFF, "> Wybrany gracz nie znajduje si? na serwerze." );
return 1;
}
else
{
GivePlayerMoney( playerid, -cash );
GivePlayerMoney( playerid2, cash );
}
}
else // kiedy klikniemy przycisk prawy ( zamknij )
{
return 1;
}
}

return 1;
}


Dzia?anie kodu; wpisanie /kasa [id gracza, kt?remu chcemy przekaza? got?wk?] -> wy?wietla nam si? dialog, w kt?rym wpisujemy kwot? jak? chcemy przekaza? -> wci?ni?cie przycisku "Daj kase" -> je?eli posiadamy podan? ilo?? got?wki i dana osoba jest on-line, zabiera nam j? i przekazuje drugiej osobie.

Ostatnio zmieniony przez Destinn 2017-12-25, 14:20, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-12-25, 13:23


RakNet00







Wiek: 25
Na forum: 3126 dni
Posty: 66



Respekt: 50

Tylko, ?e ja chc? zrobi? to w GUI. ze wpisuje /kasa i tam masz przelej kase itd. I zrobi? tak aby jak da przelej kase by?o okno na id oraz kwote jak? chce przela?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-12-25, 14:01


Destinn







Wiek: 26
Na forum: 3094 dni
Posty: 104
Nick w MP: Destin

Piwa: 25

Respekt: 90

Okej, rozumiem.

Spr?buj tak - zdefiniuj dialogi, stw?rz komend?.

Kod:

#define DIALOG_CASH 1
#define DIALOG_CASHGIVE 2


Kod:

CMD:kasa( playerid, params[] )
{
ShowPlayerDialog( playerid, D_CASH, DIALOG_STYLE_LIST, " Zarz?dzanie got?wk?", "Przeka? got?wk?\n\Druga opcja\n\Trzecia opcja\n", "Dalej", "Zamknij" );
return 1;
}


A nast?pnie te dwa dialogi, kt?re zdefiniowali?my wy?ej stworzymy.

Kod:

public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[] )
{
if( dialogid == DIALOG_CASH )
{
if( response ) // kiedy klikniemy przycisk lewy ( dalej )
{
case 0:
{
ShowPlayerDialog( playerid, DIALOG_CASHGIVE, DIALOG_STYLE_INPUT, " Przekazanie got?wki", "Poni?ej wprowad? ID gracza, kt?remu chcesz przekaza? got?wk? oraz jej ilo??.\n[ID gracza] [ilo?? $]" );
}
case 1:
{
// tutaj kod drugiej opcji
}
case 2:
{
// tutaj kod trzeciej opcji
}
}
else // kiedy klikniemy przycisk prawy ( zamknij )
{
return 1;
}
}
else if( dialogid == DIALOG_CASHGIVE )
{
if( response )
{
new playerid2, cash;

sscanf( inputtext, "dd", playerid2, cash );

if( GetPlayerMoney( playerid2 ) < cash )
{
SendClientMessage( playerid, 0xFFFFFFFF, "> Nie posiadasz takiej ilo?ci pieni?dzy." );
return 1;
}
else if( ! IsPlayerConnected( playerid2 ) )
{
SendClientMessage( playerid, 0xFFFFFFFF, "> Wybrany gracz nie znajduje si? na serwerze." );
return 1;
}
else
{
GivePlayerMoney( playerid, -cash );
GivePlayerMoney( playerid2, cash );
}
}
else
{
return 1;
}
}

return 1;
}


@edit; da?em poprawion? wersje, tamta mia?a bugi.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-12-25, 14:52


RakNet00







Wiek: 25
Na forum: 3126 dni
Posty: 66



Respekt: 50

Kurde mam taki kod i nwm co dalej mam robi?. Do tego mam 2 warningi numbers of argument...
Kod:

if(dialogid == Bank)
{
if(response == 0)
{
SendClientMessage(playerid,Zielony,"# Anulowales menu banku!");
}
if(response == 1)
{

if(listitem == 0)
{
//wplacanie kasy

}
if(listitem == 1)
{
//wyplacanie kasy

}
if(listitem == 2)
{
//sprawdzanie salda
new string[300];
format(string, sizeof(string),""ZIELONYHEX"Stan twojego konta bankowego: "BIALYHEX"%d",PlayerInfo[playerid][Bank12]);
ShowPlayerDialog(playerid, 11111, DIALOG_STYLE_MSGBOX,"Stan Konta",string,"Ok","Wyjdz");

}
if(listitem == 3)
{
ShowPlayerDialog(playerid, Przelew, DIALOG_STYLE_INPUT, " Przekazanie got?wki", "Poni?ej wprowad? ID gracza, kt?remu chcesz przekaza? got?wk? oraz jej ilo??.\n[ID gracza] [ilo?? $]" );

}

}
}


Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-12-25, 15:07


Destinn







Wiek: 26
Na forum: 3094 dni
Posty: 104
Nick w MP: Destin

Piwa: 25

Respekt: 90

Po pierwsze, polecam zmieni? id dialogu z "Bank" na np. "DIALOG_BANK" lub "D_BANK", a zamiast "Zielony" daj "COLOR_ZIELONY" lub "C_ZIELONY" - lepiej to wygl?da i ?atwiej si? odnajduje w kodzie, uwierz mi.

Drug? rzecz? jest to, ?e if(response) nie wygl?da u Ciebie dobrze, zamiast if(response == 0) czy if(response == 1), u?yj po prostu if(response) i else. Wygl?da to lepiej i jest po prostu poprawne.

Kolejn? rzecz? rzucaj?c? si? w oczy jest brak klamry zamykaj?cej po pierwszym if(response == 1).

Powiem tak; nie wiem czemu wog?le ten kod ma dzia?a? skoro jest ?le u?o?ony, ?le napisany i niedoko?czony.

Zamiast if(lisitem == ... ) u?yj switch(listitem), a nast?pnie case'?w.
Przyk?ad:

switch(listitem)
{
case 0:
{
// pierwsza opcja
}
case 1:
{
// druga opcja
}
}

Ostatnio zmieniony przez Destinn 2017-12-25, 15:10, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-12-25, 15:09


Zamek







Wiek: 26
Na forum: 3788 dni
Posty: 168
Nick w MP: Zamek

Piwa: 276

Respekt: 295,8
Respekt: 295,8Respekt: 295,8Respekt: 295,8

Podpis
Postaw piwo autorowi tego posta
 

 
Tagi: kwota :: oknie
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN » Kwota w oknie Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku