¡Vota por nosotros!

Vota diariamente por XatiyaRO para mejorar nuestra reputación y ayudarnos a crecer.

RagnaTOP - Top Ragnarok Online en Español Ragnarok private server
private server TOP RO Hispano

Autor Tema: [Aporte] Solución factible para evitar Homun AFK (source edit, una sola línea)  (Leído 7528 veces)

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

Desconectado Desko27

  • Desconocido
  • First Job
  • **
  • Mensajes: 175
  • Never what you think.
    • Desko27's Blog
  • Pj Principal: Desko27
EDIT: Ya ha sido implementado en XatiyaRO, gracias.

[ Esto es realmente sencillo de implementar ]
El "relleno" del post es mera información añadida con la intención de aclarar en la medida de lo posible el funcionamiento del sistema.


Cita de: Función
Cuando un jugador esté durante X tiempo inactivo, ni él ni su homúnculus recibirán items ni experiencia.

Tema desencadenador: http://www.xatiyaro.net/foro/index.php/topic,147632.120.html
Fuente en la que publiqué en primer lugar la información: http://www.eathena.ws/board/index.php?showtopic=246605&st=15

Dados los numerosos problemas de denuncias frecuentes a los que se enfrenta el Staff de cualquier servidor de Ragnarok Online con reglas restrictivas referente al leveleo y/o farmeo con homúnculus afk, propongo en nombre de los solicitantes del post mencionado la implementación en XatiyaRO de los cambios en el código que os facilito a continuación:

map\mob.c
Código: [Seleccionar]
    ...

if(flag && (!battle_config.idle_no_share || !pc_isidle(tmpsd[i]))) { // Use idle_no_share to deny EXP if it expires [Desko27]
    if(base_exp && md->dmglog[i].flag == 1) //tmpsd[i] is null if it has no homunc.
        merc_hom_gainexp(tmpsd[i]->hd, base_exp);

    ...

Se trata simplemente de añadir esta pieza de línea a la condición expuesta: && (!battle_config.idle_no_share || !pc_isidle(tmpsd[ i ])) 1, la cual condiciona la ganancia de exp, tanto al homúnculus como a su propietario, al pasar X tiempo de inactividad por parte del usuario (también impediría la ganancia de Zeny al matar mob si esto estuviese habilitado en XatiyaRO).

El temporizador utilizado para medir la inactividad del usuario es el mismo que el empleado para impedir el reparto de experiencia a "leechers" en una party. Se utiliza este mismo temporizador para evitar el marrón innecesario que supone la creación de otro temporizador, cuando la función que cumplirá será con un objetivo similar al original.

El temporizador mencionado considera "inactividad" el no desplazamiento del usuario durante el periodo configurado, la no utilización de items o skills, y tal vez algo más que en estos momentos paso por alto.

Entonces, de lo único de lo que hay que asegurarse después es de tener activas las variables idle_no_share e idle_no_autoloot (este último con el fin de que los item también caigan al suelo) en la configuración del servidor, para que los temporizadores sean válidos:

conf\battle\party.conf (gracias a la modificación anterior, este temporizador evitará la ganancia de exp tanto de player como de homun)
Código: [Seleccionar]
// Is exp/item sharing disabled for idle members in the party?
// Set to no, or the amount of seconds (NOT milliseconds) that need to pass before considering
// a character idle.
// Characters in a chat/vending are always considered idle.
// A character's idle status is reset upon item use/skill use/attack (auto attack counts too)/movement.
idle_no_share: 300

conf\battle\player.conf (este temporizador evitará el loot de items, quedando dropeados en el suelo)
Código: [Seleccionar]
// Idle characters can receive autoloot?
// Set to the time in seconds where an idle character will stop receiving
// items from Autoloot (0: disabled).
idle_no_autoloot: 300

DETALLE EVIDENTE
En la configuración expuesta, los temporizadores los he dejado a 300 segundos, que son 5 minutos, aunque por lo que veo en el reglamento del servidor no se permite el estado afk de un homúnculus durante más de un minuto, así que tal vez habría que ponerlo a 60, pero en caso de ser aceptada la medida, esto pasaría lógicamente a consideración del Staff.

ATENCIÓN
Respecto de la posible implementación de esta medida... esa no es mi batalla ni tengo intención de que lo sea, únicamente aporto la información necesaria para beneficio de aquellos que la soportan. Quien quiera debatir diríjase al tema existente para ello en sugerencias o, al menos, pediría que no me citase en mi contra porque no responderé, la verdad es que no me interesa. Responderé únicamente a aquello que esté directamente relacionado con el aporte en sí, refiriéndose al código/sistema y/o a su funcionamiento.

Cita de: Leyenda
1 Los dos espacios en el índice del vector "[ i ]" son debidos a que si no los introduzco el foro lo detecta como la etiqueta de "cursiva", aunque en realidad el código también funcionaría con tales espacios, pero evidentemente son innecesarios. En la pieza de código anterior está totalmente correcto gracias a la etiqueta "code" generante del bloque de código. Por cierto, ya sé que es posible alterar la variable "flag" directamente con el mismo fin, pero en su momento añadí directamente el código a la condición y, sinceramente, creo que esto carece de total trascendencia.

Gracias al Staff de XatiyaRO por sus esfuerzos constantes y desinteresados en el buen mantenimiento de este gran servidor.
« Última modificación: 23 de Marzo de 2011, 01:36:14 am por Desko27 »