//
// Hecho por Clavador
// idea original por
// gamer_Z (Gracias)
// encontralo aca:
// https://sampforum.blast.hk/showthread.php?tid=260298
new DialogToCall[24]; // Debe estar afuera
// REMOVE ESTE CALLBACK DE TODOS TUS FILTERSCRIPTS Y GAMEMODES Y DEJALO SOLAMENTE ACA
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
format(DialogToCall,24,"DialogResponse_%d",dialogid); // NO USAR DIALOGIDS NEGATIVOS
if(isnull(inputtext))format(inputtext,2,"\1");
if(funcidx(DialogToCall) != -1)
return CallLocalFunction(DialogToCall,"iiis",playerid,response,listitem,inputtext);
return 0;
}
// DEFINIMOS LA FUNCION
#define Dialog(%1) forward DialogResponse_%1(playerid, response, listitem, inputtext[]); \
public DialogResponse_%1(playerid, response, listitem, inputtext[])
/*
// ESTA ES LA FUNCION QUE DEBERIAS USAR. COPIALA DE ACA Y PEGALA DONDE MAS TE GUSTE
SOLO HAY QUE REEMPLAZAR dialogid POR EL ID DEL DIALOGO QUE PUSISTE EN ShowPlayerDialog y listo!
si usaramos: ShowPlayerDialog(playerid,201,DIALOG_STYLE_LIST,"Banco de San Andreas","Depositar\nRetirar","Aceptar","Salir");
Deberiamos reemplazar el dialogid en la funcion por 201 por ejemplo.
---------------------------------------------------------------------------------------------------------------------------------------------------
Dialog(dialogid) // (playerid,response,lisitem,inputtext[]) are passed as always
{
if(response)
{
new pinnumber[5];
format(pinnumber,sizeof(pinnumber),"%i",djInt(UserName(playerid),"player/pinnumber"));
if (!strcmp(inputtext, pinnumber, true))
{
TextDrawShowForPlayer(playerid, BANK_BOX);
TextDrawShowForPlayer(playerid, BANK_USUARIO);
TextDrawShowForPlayer(playerid, BANK_BALANCE);
UpdateBankStats(playerid);
ShowPlayerDialog(playerid,201,DIALOG_STYLE_LIST,"Banco de San Andreas","Depositar\nRetirar","Aceptar","Salir");
}
else ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Banco de San Andreas ATM","PIN incorrecto.\nPor favor, ingrese su PIN","Aceptar","Cancelar");
}
else
{
ShowPlayerDialog(playerid,32000,DIALOG_STYLE_MSGBOX,"Banco de San Andreas","Gracias por utilizar nuestros servicios!","Cerrar","");
}
return 1;
}
*/
en realidad con esto si se procesa mas rapido
en vez de leer todos los if solo llama al necesario y es mas rapido que si revisa uno por uno asta encontrarlo |
el include es innecesario, para eso usa IDs el callback de OnDialogResponse lol para llamar directamente el dialog y no como OnPlayerCommand que tiene que revisar todo el callback, poreso se hizo zcmd y poreso no es necesario este include.
|
Eso es porque las personas no saben cuando aplicar switch, un switch para la ID del diбlogo en OnDialogReponse es la manera mбs rбpida de hacerlo.
EDIT: Post #2000. |
Un switch en DialogResponse NO es la manera mas rapido de hacerlo.
Un swtich reemplaza a muchos "if if if if". El switch se usa para que el codigo quede mejor presentado, nada mas. Si vos tenes switch(dialogid ==1, 2, 3 .... 100) cada vez que vos respondas un dialogo, el server tiene que iterar por todos los case hasta dar con el que busca. Con este include directamente se crea una funcion y vos llamas a la funcion sin buscar por ningun lado. Es mas rapido y directo. Saludos. |
P.D: el resultado se ve cuando hay muchos diбlogos. Cuando hay pocos, switch funcionarб mejor.
|
Originally Posted by Resultado
[18:40:16] switch: 719ms
[18:40:17] switch: 982ms [18:40:18] switch: 715ms [18:40:19] switch: 874ms [18:40:20] switch: 917ms [18:40:21] switch: 1287ms [18:40:22] switch: 1287ms [18:40:23] switch: 812ms [18:40:24] switch: 777ms [18:40:25] switch: 1242ms [18:40:25] ++ switch: 961ms [18:40:26] CallLocalFunction: 1070ms [18:40:27] CallLocalFunction: 1103ms [18:40:28] CallLocalFunction: 1072ms [18:40:29] CallLocalFunction: 1103ms [18:40:31] CallLocalFunction: 1108ms [18:40:32] CallLocalFunction: 1092ms [18:40:33] CallLocalFunction: 1091ms [18:40:34] CallLocalFunction: 1111ms [18:40:35] CallLocalFunction: 1113ms [18:40:36] CallLocalFunction: 1106ms [18:40:36] ++ CallLocalFunction: 1096ms |