[Guia] Reparar bug @ban [SRC]
101Level - Foro

[Guia] Reparar bug @ban [SRC]

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ichisito

  • *
  • 3.246
  • 328
  • Actividad:
    0%
  • Sexo: Masculino
  • Técnico en Microinformática y Hardware
[Guia] Reparar bug @ban [SRC]
« en: 20 de Diciembre de 2010, 21:24 »
[Guia] Reparar bug @ban en GMs de mayor rango [SRC]
Realizada por: Ichisito


::Indice::
1- Explicación del bug
2- Aplicación del FIX
3- FAQ



1.- Explicación del Bug

Bien, últimamente en las versiones de eAthena, en las Trunk sobretodo, corre un bug bastante feo en el que te pueden banear los GMs de menor rango aún siendo tu lvl 99, dado que es bastante latoso y ya ni en tus GMs puedes confiar, aunque sean de menor level.
Bien, pues en el siguiente apartado veremos cómo solventar eso.


2.- Aplicación del FIX

Bien, en primer lugar debemos buscar el comando @ban, @charban y demás...

Citar
/*==========================================
 * charban command (usage: charban <time> <player_name>)
 * This command do a limited ban on a player
 * Time is done as follows:
 *   Adjustment value (-1, 1, +1, etc...)
 *   Modified element:
 *     a or y: year
 *     m:  month
 *     j or d: day
 *     h:  hour
 *     mn: minute
 *     s:  second
 * <example> @ban +1m-2mn1s-6y test_player
 *           this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
 *------------------------------------------*/
ACMD_FUNC(char_ban)
{
   char * modif_p;
   int year, month, day, hour, minute, second, value;
   nullpo_retr(-1, sd);

   memset(atcmd_output, '\0', sizeof(atcmd_output));
   memset(atcmd_player_name, '\0', sizeof(atcmd_player_name));

   if (!message || !*message || sscanf(message, "%s %23[^\n]", atcmd_output, atcmd_player_name) < 2) {
      clif_displaymessage(fd, "Please, enter ban time and a player name (usage: @charban/@ban/@banish/@charbanish <time> <name>).");
      return -1;
   }

   atcmd_output[sizeof(atcmd_output)-1] = '\0';

   modif_p = atcmd_output;
   year = month = day = hour = minute = second = 0;
   while (modif_p[0] != '\0') {
      value = atoi(modif_p);
      if (value == 0)
         modif_p++;
      else {
         if (modif_p[0] == '-' || modif_p[0] == '+')
            modif_p++;
         while (modif_p[0] >= '0' && modif_p[0] <= '9')
            modif_p++;
         if (modif_p[0] == 's') {
            second = value;
            modif_p++;
         } else if (modif_p[0] == 'n') {
            minute = value;
            modif_p++;
         } else if (modif_p[0] == 'm' && modif_p[1] == 'n') {
            minute = value;
            modif_p = modif_p + 2;
         } else if (modif_p[0] == 'h') {
            hour = value;
            modif_p++;
         } else if (modif_p[0] == 'd' || modif_p[0] == 'j') {
            day = value;
            modif_p++;
         } else if (modif_p[0] == 'm') {
            month = value;
            modif_p++;
         } else if (modif_p[0] == 'y' || modif_p[0] == 'a') {
            year = value;
            modif_p++;
         } else if (modif_p[0] != '\0') {
            modif_p++;
         }
      }
   }
   if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) {
      clif_displaymessage(fd, msg_txt(85)); // Invalid time for ban command.
      return -1;
   }

   chrif_char_ask_name(sd->status.account_id, atcmd_player_name, 2, year, month, day, hour, minute, second); // type: 2 - ban
   clif_displaymessage(fd, msg_txt(88)); // Character name sent to char-server to ask it.

   return 0;
}

Una vez aquí buscamos ésta sentencia...

Citar
   if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) {
      clif_displaymessage(fd, msg_txt(85)); // Invalid time for ban command.
      return -1;
   }


Y debajo de ésta pegamos ésto:

Citar
   if ( pc_isGM(sd) < pc_isGM(pl_sd) )
   {
      clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player.
      return -1;
   }


Quedando así mas o menos:

Citar
   if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) {
      clif_displaymessage(fd, msg_txt(85)); // Invalid time for ban command.
      return -1;
   }

if ( pc_isGM(sd) < pc_isGM(pl_sd) )
   {
      clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player.
      return -1;
   }


Sólo nos queda recompilar el emulador y lo tendremos todo listo.

::FAQ::

Los GMs de level bajo siguen baneandome, ¿porque?
- ¿Recordaste de apagar el server y recompilar?

Me manda errores de source, ¿porque?
- Seguramente debes haber escrito algo mal o el copy y paste se dejó alguna coma, revisa eso con detención.
« última modificación: 27 de Diciembre de 2010, 12:40 por Ichisito »



 

[Guia] Reparar el bug del @warp [SRC]

Iniciado por Ichisito

Respuestas: 0
Vistas: 2981
Último mensaje 20 de Diciembre de 2010, 21:11
por Ichisito
[Guía] Agregar Bifrost (Episode 14.1)

Iniciado por Denken

Respuestas: 0
Vistas: 6404
Último mensaje 16 de Junio de 2010, 00:28
por Denken
[Guia] Como cambiar color en comando @main

Iniciado por yaasu

Respuestas: 0
Vistas: 3527
Último mensaje 03 de Mayo de 2008, 17:37
por yaasu