Mmmm, para estos casos lo mejor es mirar el source del emulador, y lo acabo de mirar y para elegir la skill que va a salir lanza un número aleatorio de máximo 350 (evitando huecos vacíos del array y otros temas específicos de programación que no vienen a cuento, porque no hay 350 skills clavadas, hay algunas menos -la última id es de 330-), y luego aplica un chance. Si el chance falla, entonces vuelve a intentar hasta que el chance de alguna de las skills acierte.
#define MAX_SKILL_ABRA_DB 350
do {
i = rand() % MAX_SKILL_ABRA_DB;
abra_skillid = skill_abra_db[i].skillid;
} while (abra_skillid == 0 ||
skill_abra_db[i].req_lv > skilllv || //Required lv for it to appear
rand()%10000 >= skill_abra_db[i].per
);
El valor real de la skill de lvl up en la base de datos de las skill de hocus-pocus es de 500:
// Structure of Database:
// SkillID,DummyName,RequiredHocusPocusLevel,
Rate-> 300,Level Up,10,
500 (este 500 es contra un random de 10000)
Todo esto significa que el algoritmo funciona así:Se aplica un 1/350 (0,28% aprox.) y ahí puede salir la skill de LVL UP como cualquier otra a ese chance, pero antes de darla como resultado final se somete a su chance particular... que es de 5%, y si falla éste se aplicará nuevamente un 0,28% buscando otra skill (la mayoría tienen 50% como segundo chance de este proceso). Esto quiere decir que primero va un 0,28% para cualquier skill y luego un 5% para la de LVL UP si es que sale. Por la regla de la multiplicación en probabilidad (esto de aquí) la probabilidad final de que nos salga LVL UP es la siguiente... xDD0,28% (aprox) * 5% =
0,014% aproxNo es tan baja como tú decías, aunque admito que tal vez no sería tan cheto xD, sería algo así como que te saliera una card de un mob malillo de estos que matas a montones en un server de rates x1. De todas formas aquí está la pieza de código que indica lo que se debe ganar de experiencia:
case SA_LEVELUP:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if (sd && pc_nextbaseexp(sd)) pc_gainexp(sd, NULL, pc_nextbaseexp(sd) * 10 / 100, 0, false);
break;
Básicamente es esto:
pc_nextbaseexp(sd) * 10 / 100Y sí, es 10%, así viene en el emulador oficial de eAthena =S
A todo esto, a mí me da igual como esté, aunque con esa baja probabilidad me inclino más a pensar que no estaría mal que diera un lvl entero =0
Saludos.