miércoles, 6 de mayo de 2009

Ser o no ser que dilema (eAthena element weapon is not elemental)

Bueno, no entraremos en controversias, para comenzar, después de la implementación de los Battle Grounds en el emulador, se decidió cambiar el tipo de ataque que los mobs tendrían, entiéndanse sus atribuciones en las armas dando origen a que las armas ya no fueran neutrales en los mobs si no que estas no tuvieran un elemento… ¿curioso no?, es por eso que los ataques se atribuían a un elemento ¿null?, y no te podías proteger ni por reducción, ni por cartas elementales.

Mi primera teoría: Los mobs habían cambiado el ataque de acuerdo al tipo elemento que era, teóricamente estaba equivocado eso no podía ser, puesto que después de hacer una primera prueba con 110% (una manteu) a todos los elementos aun me seguían pegando.

Entonces ¿qué rayos pasa?, siguiendo con el manteu a 110% y me seguían pegando, hasta que Eureka se me ocurre llamar a un Seyren haciendo que me persiguiera.

image

¿Por qué el Spiral Pirce del Seyren me curaba?, entonces me formule, algo ha de estar cambiado. Obvio no xD… después de 150 muertes aproximadamente.

Empecé a revisar línea a línea cada parte del código del emulador (debido a que el SVN esta caído y se me hace más fácil poder comparar ahí), y Eureka de nuevo, encontré algo que me llamo la atención.

//forced neutral for monsters

 

¿Y que sucede con lo otro?, empecé a trabajar en el archivo battle.c  buscando este pedazo de código.

 

if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2)
    {    //Check for Lucky Dodge
        wd.type=0x0b;
        wd.dmg_lv=ATK_LUCKY;
        if (wd.div_ < 0) wd.div_*=-1;
        return wd;
    }

    t_class = status_get_class(target);
    s_ele = s_ele_ = skill_get_ele(skill_num, skill_lv);
    if (!skill_num || s_ele == -1) { //Take weapon's element
        s_ele = sstatus->rhw.ele;
        s_ele_ = sstatus->lhw.ele;
        if (flag.arrow && sd && sd->arrow_ele)
            s_ele = sd->arrow_ele;
        if (battle_config.attack_attr_none&src->type)
            nk|=NK_NO_ELEFIX; //Weapon's element is "not elemental"
                } else if (s_ele == -2) { //Use enchantment's element
        s_ele = s_ele_ = status_get_attack_sc_element(src,sc);
    }

Como podemos ver ahí encontramos la atribución a este post //Element is not elemental, o sea que a partir de esas implementación el ataque de las armas en mob no tiene ningún elemento. ¿Pareciera?

Bueno si tu servidor es elemental, con equipo de 4 slots y tus usuarios ya se acostumbraron a “subir de nivel” de esta forma sin que los mobs los maten, editamos la siguiente línea:

  nk|=NK_NO_ELEFIX; //Weapon's element is "not elemental"

De la siguiente manera:

nk &= ~NK_NO_ELEFIX;

 

De tal forma que la nueva versión del código es:

if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2)
    {    //Check for Lucky Dodge
        wd.type=0x0b;
        wd.dmg_lv=ATK_LUCKY;
        if (wd.div_ < 0) wd.div_*=-1;
        return wd;
    }

    t_class = status_get_class(target);
    s_ele = s_ele_ = skill_get_ele(skill_num, skill_lv);
    if (!skill_num || s_ele == -1) { //Take weapon's element
        s_ele = sstatus->rhw.ele;
        s_ele_ = sstatus->lhw.ele;
        if (flag.arrow && sd && sd->arrow_ele)
            s_ele = sd->arrow_ele;
        if (battle_config.attack_attr_none&src->type)
                 // Remmi Atribution Change
            nk &= ~NK_NO_ELEFIX; // Forced neutral for monster by Remmi Change
    } else if (s_ele == -2) { //Use enchantment's element
        s_ele = s_ele_ = status_get_attack_sc_element(src,sc);
    }

Y ahora todo regresa a la normalidad, con mobs que nos curan si tenemos protección o inhumanidad a un elemento.

image

Recuerda que este es un cambio de eAthena y de Gravity, por favor considera las atribuciones a las modificaciones, una motivación o felicitación no esta de más y no te hagas del derecho del código, y si algún servidor elemental de los que actualmente conozco les dice que fue invención de ellos lo de los mobs con ataque Null no es cierto >.<.

Posdata: Gracias Geraldine por ayudarme a testear el código cambiado ^^

image

8 comentarios:

  1. exelente guachon (XD)
    pero para los usuarias que tendriamos que aser para que continue elemental nuestro server?
    o van a sacar un parche nuevo con respecto a ese pequeño error que atodos nos involucra?
    (recuerden que la mayoria no entiende de programacion)

    PD:y grax ami ya me funciona

    ResponderEliminar
  2. No, es solo recompilar el emulador y listo todo solucionado, sin editar mobs ni nada, solo fue una modificación que se hizo en eathena.

    ResponderEliminar
  3. Excelent aporte viejo, siempre solucionando problemas

    Fake

    ResponderEliminar
  4. oies wena pero lo malo es k no se de programacion =( almenos dime como se llama el emulador, como entrar y hacer ese movimiento x3

    ResponderEliminar
  5. El emulador se llama eAthena (http://eathena.ws) para hacer todo ese movimiento se hace desde el SRC, en la sección de guias en el soporte español esta como compilar desde Windows con visual C++, ya que el emulador esta escrito en C :p, si eres nuevo mejor lee, aprende como se usa el emulador porque a mi conocerlo a fondo mas haya de implementar cosas, me ha tomado casi 1 año y medio

    ResponderEliminar
  6. eris muy Inteligente Diwolf, minimo deberian de ponerte de programador en el server elemental mas conocido(tu ya sabes a q me refiero XD)
    y como siempre e dixo diwolf para precidente xD

    ATTE Lord Shivi

    ResponderEliminar
  7. No me esperaba menos .....

    Veamos si el copy paste ... no se les va en collera XD

    ResponderEliminar
  8. men te pasaste con eso....cuando tendremol EternalRO otravez >_>.

    pero mientras me gusto ke yo pude entender parte de lo escrito gracias a mis clases de programacion XD

    PD: TU RULEAZ....

    Obi D. Knight

    ResponderEliminar