їComo es la mejor forma de definir la ID de un Dialog?
#1

Como dice el titulo, їcual es la mejor forma de definir la ID de un Dialog? їCon un enum, un define, o ke?

Me salto la duda porque quiero limpiar codigo sin sentido de una GameMode :V



PD: (Pregunta Extra)

їCual es la diferencia entre: #define SOYUNDIALOGO 1 y #define SOYUNDIALOGO (1)?

PD2: (Pregunta Extra 2)

їEsta bien definir MAX_PLAYERS dentro de un GameMode? (Pregunto esto ya que lo he visto definido en el include a_samp....
Reply
#2

La forma de definir un dialog depende del uso, desde uno por uno a un array, de todas formas el rendimiento no cambia nada.

MAX_PLAYERS conviene definirlo al mбximo de slots de tu servidor, te explico porquй.

Si tienes un servidor con 80 jugadores y MAX_PLAYERS en 500, en cuanto hagas un bucle para hacer una verificaciуn la harб 500 veces pero tienes solo 80 jugadores... Si lo pones en 100 que es el mбximo de slots la hace 100 veces, igualmente la diferencia de rendimiento es totalmente imperceptible a menos que sea un gran bucle, asн que no te preocupes por eso! Saludos.
Reply
#3

Quote:
Originally Posted by Goncho28
Посмотреть сообщение
La forma de definir un dialog depende del uso, desde uno por uno a un array, de todas formas el rendimiento no cambia nada.

MAX_PLAYERS conviene definirlo al mбximo de slots de tu servidor, te explico porquй.

Si tienes un servidor con 80 jugadores y MAX_PLAYERS en 500, en cuanto hagas un bucle para hacer una verificaciуn la harб 500 veces pero tienes solo 80 jugadores... Si lo pones en 100 que es el mбximo de slots la hace 100 veces, igualmente la diferencia de rendimiento es totalmente imperceptible a menos que sea un gran bucle, asн que no te preocupes por eso! Saludos.
Coincido contigo, aunque la forma mбs optimizada de hacer un bucle para todos los jugadores hoy en dнa es usar GetPlayerPoolSize()
Reply
#4

Quote:
Originally Posted by JeffreyG
Посмотреть сообщение
Coincido contigo, aunque la forma mбs optimizada de hacer un bucle para todos los jugadores hoy en dнa es usar GetPlayerPoolSize()
їUna alternativa a usar GetPlayerPoolSize o bajar el numero de MAX_PLAYERS, puede ser "foreach"(******)?
Reply
#5

1. Eso depende de tus gustos. Creo que es lo mismo (yo lo hago usando #define).

2. Los parйntesis declaran que se harб la operaciуn matemбtica que estбn entre las mismas. O sea, no es lo mismo "5 * 5 + 5" que "5 * (5 + 5)". El primero retorna 30 y el segundo 50.
Pero en este caso no hay diferencia.

3. Sн, estб bien o de ъltima le cambias desde el include y listo. Йsto se hace para ahorrar memoria y optimizar los bucles por-jugador. Aunque en cualquier caso es mejor utilizar foreach/y_iterate.
Reply
#6

Quote:
Originally Posted by ByMatt20030
Посмотреть сообщение
їCual es la diferencia entre: #define SOYUNDIALOGO 1 y #define SOYUNDIALOGO (1)?
No hay ninguna diferencia, bбsicamente es una costumbre, quizбs es mбs habitual entre los programadores de C/C++.
PHP код:
/* Observa que el resultado del siguiente printf no varia por usar parйntesis. */
printf("VALOR #1: %d | VALORD #2: %d"10, (10)); // Resultado -> VALOR #1: 10 | VALOR #2: 10
/* La siguiente condiciуn es vбlida de ambas formas. */
if(p_AdminLevel[playerid] == 0)
{
    
SendClientMessage(playerid, -1"No eres un administrador.");
}
if(
p_AdminLevel[playerid] == (0)) // Incluso puedes aсadir mбs parйntesis ... ((0))
{
    
SendClientMessage(playerid, -1"No eres un administrador.");

Conviene usar parйntesis en pequeсas funciones definidas mediante macros para seguir el orden de las operaciones, por ejemplo:
PHP код:
#define randomEx(%0,%1)    (random(%1 - %0) + %0)
printf("Nъmero aleatorio entre 1 - 10: %d"randomEx(110));
/*
Ejecutando randomEx una vez no hay posibilidad de error dado que primero se ejecuta random(%1 - %0)
y despuйs se suma %0. Quitemos los parйntesis para ver quй ocurre, vamos a modificar el printf tambiйn: */
#define randomEx(%0,%1)    random(%1 - %0) + %0
printf("Nъmero aleatorio: %d"randomEx(1randomEx(6980));
/* Bбsicamente el randomEx que se encuentra dentro del primer randomEx darб un valor entre 69 y 80, luego
el primer randomEx darб otro nъmero aleatorio entre 1 y el nъmero obtenido. No funcionarб, veamos: */
randomEx(1randomEx(6980)) /* equivale a */ randomrandom(80 69) + 69 1) + 1
/* Si usamos parentesis en el marco cambia el resultado: */
randomEx(0randomEx(6980)) /* equivale a */  (random( (random(80 69) + 69) - 1) + 1)
/* Obviamente usar los parйntesis en este caso es lo correcto, para que las operaciones sigan su orden. */ 
Para aprender mбs sobre constantes te recomiendo el tutorial de mi firma sobre la enumeraciуn.

Quote:
Originally Posted by ByMatt20030
Посмотреть сообщение
їEsta bien definir MAX_PLAYERS dentro de un GameMode? (Pregunto esto ya que lo he visto definido en el include a_samp....
Lo ideal serнa darle el valor de los slots que usas, bбsicamente para ahorrar memoria al compilar el script, dado que las arrays disminuyen su nъmero de celdas si usas menos de 500 slots. Esto es:
PHP код:
#include <a_samp>
// ---
#undef  MAX_PLAYERS
#define MAX_PLAYERS  (100)
// ---
/* Otros #include aquн. */ 
Para hacer un bucle lo ideal serнa usar los siguientes mйtodos donde no intervienen MAX_PLAYERS o MAX_VEHICLES:
PHP код:
/* Para jugadores. */
for(new 0GetPlayerPoolSize(); <= tx++)
{
    if(
IsPlayerConnected(x))
    {
        
/* Tu script aquн. */
    
}
}
/* Para vehнculos. */
native IsValidVehicle(vehicleid); /* Aсade esto despuйs de los #include */
for(new 1GetVehiclePoolSize(); <= tv++)
{
    if(
IsValidVehicle(v))
    {
        
/* Tu script aquн. */
    
}

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)