daim 5 Posted December 18, 2015 Hi there, As per photo attached, anyone can explain about this? I already look into mob db but seem no such double exp i set. Why is this happening? regards. Bump Quote Share this post Link to post Share on other sites
0 AnnieRuru 957 Posted December 19, 2015 (edited) read the mob_dead function in mob.c file ) { //Experience calculation. int bonus = 100; //Bonus on top of your share (common to all attackers). int pnum = 0; if (md->sc.data[SC_RICHMANKIM]) bonus += md->sc.data[SC_RICHMANKIM]->val2; if(sd) { temp = status->get_class(&md->bl); if(sd->sc.data[SC_MIRACLE]) i = 2; //All mobs are Star Targets else ARR_FIND(0, MAX_PC_FEELHATE, i, temp == sd->hate_mob[i] && (battle_config.allow_skill_without_day || pc->sg_info[i].day_func())); if(i<MAX_PC_FEELHATE && (temp=pc->checkskill(sd,pc->sg_info[i].bless_id)) > 0) bonus += (i==2?20:10)*temp; } if(battle_config.mobs_level_up && md->level > md->db->lv) // [Valaris] bonus += (md->level-md->db->lv)*battle_config.mobs_level_up_exp_rate; for(i = 0; i < DAMAGELOG_SIZE && md->dmglog[i].id; i++) { int flag=1,zeny=0; unsigned int base_exp, job_exp; double per; //Your share of the mob's exp if (!tmpsd[i]) continue; if (!battle_config.exp_calc_type && md->tdmg) //jAthena's exp formula based on total damage. per = (double)md->dmglog[i].dmg/(double)md->tdmg; else { //eAthena's exp formula based on max hp. per = (double)md->dmglog[i].dmg/(double)mstatus->max_hp; if (per > 2) per = 2; // prevents unlimited exp gain } if (count>1 && battle_config.exp_bonus_attacker) { //Exp bonus per additional attacker. if (count > battle_config.exp_bonus_max_attacker) count = battle_config.exp_bonus_max_attacker; per += per*((count-1)*battle_config.exp_bonus_attacker)/100.; } // change experience for different sized monsters [Valaris] if (battle_config.mob_size_influence) { switch( md->special_state.size ) { case SZ_MEDIUM: per /= 2.; break; case SZ_BIG: per *= 2.; break; } } if( md->dmglog[i].flag == MDLF_PET ) per *= battle_config.pet_attack_exp_rate/100.; if(battle_config.zeny_from_mobs && md->level) { // zeny calculation moblv + random moblv [Valaris] zeny=(int) ((md->level+rnd()%md->level)*per*bonus/100.); if(md->db->mexp > 0) zeny*=rnd()%0; } if (map->list[m].flag.nobaseexp || !md->db->base_exp) base_exp = 0; else base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * map->list[m].bexp/100., 1, UINT_MAX); if (map->list[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost. job_exp = 0; else job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map->list[m].jexp/100., 1, UINT_MAX); if ( (temp = tmpsd[i]->status.party_id) > 0 ) { int j; for( j = 0; j < pnum && pt[j].id != temp; j++ ); //Locate party. if( j == pnum ){ //Possibly add party. pt[pnum].p = party->search(temp); if(pt[pnum].p && pt[pnum].p->party.exp) { pt[pnum].id = temp; pt[pnum].base_exp = base_exp; pt[pnum].job_exp = job_exp; pt[pnum].zeny = zeny; // zeny share [Valaris] pnum++; flag=0; } } else { //Add to total if (pt[j].base_exp > UINT_MAX - base_exp) pt[j].base_exp = UINT_MAX; else pt[j].base_exp += base_exp; if (pt[j].job_exp > UINT_MAX - job_exp) pt[j].job_exp = UINT_MAX; else pt[j].job_exp += job_exp; pt[j].zeny+=zeny; // zeny share [Valaris] flag=0; } } if(base_exp && md->dmglog[i].flag == MDLF_HOMUN) //tmpsd[i] is null if it has no homunc. homun->gainexp(tmpsd[i]->hd, base_exp); if(flag) { if(base_exp || job_exp) { if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master ) {#ifdef RENEWAL_EXP int rate = pc->level_penalty_mod(md->level - (tmpsd[i])->status.base_level, md->status.race, md->status.mode, 1); base_exp = (unsigned int)cap_value(base_exp * rate / 100, 1, UINT_MAX); job_exp = (unsigned int)cap_value(job_exp * rate / 100, 1, UINT_MAX);#endif pc->gainexp(tmpsd[i], &md->bl, base_exp, job_exp, false); } } if(zeny) // zeny from mobs [Valaris] pc->getzeny(tmpsd[i], zeny, LOG_TYPE_PICKDROP_MONSTER, NULL); } } for( i = 0; i < pnum; i++ ) //Party share. party->exp_share(pt[i].p, &md->bl, pt[i].base_exp,pt[i].job_exp,pt[i].zeny); } //End EXP giving.possible no.1you have Mr.Kim a Rich man buff possible no.2 you are a Star Gladiator, and killed a mob that is under Blessing of Star, Blessing of Moon, Blessing of Sun possible no.3 your server has "mobs_level_up" enabled, and the monster leveled up, thus increased its exp gain possible no.4 if you kill steal other player's mob, your exp gain rate is less than normal possible no.5 your server has "mob_size_influence" enabled, and killing a big size monster gain double exp possible no.6 that map has bexp or jexp mapflag enabled, thus exp gain increased by mapflags possible no.7 you joined a party and has party share exp option ON, sure you exp gain is share with party members possible no.8 you have a pet, and has "pet_attack_exp_to_master" enabled , the mob killed by pets are share with you nope, no more possible no.9 with default hercules source code unless you have modified something Edited December 19, 2015 by AnnieRuru Quote Share this post Link to post Share on other sites
0 daim 5 Posted December 19, 2015 read the mob_dead function in mob.c file ) { //Experience calculation. int bonus = 100; //Bonus on top of your share (common to all attackers). int pnum = 0; if (md->sc.data[SC_RICHMANKIM]) bonus += md->sc.data[SC_RICHMANKIM]->val2; if(sd) { temp = status->get_class(&md->bl); if(sd->sc.data[SC_MIRACLE]) i = 2; //All mobs are Star Targets else ARR_FIND(0, MAX_PC_FEELHATE, i, temp == sd->hate_mob[i] && (battle_config.allow_skill_without_day || pc->sg_info[i].day_func())); if(i<MAX_PC_FEELHATE && (temp=pc->checkskill(sd,pc->sg_info[i].bless_id)) > 0) bonus += (i==2?20:10)*temp; } if(battle_config.mobs_level_up && md->level > md->db->lv) // [Valaris] bonus += (md->level-md->db->lv)*battle_config.mobs_level_up_exp_rate; for(i = 0; i < DAMAGELOG_SIZE && md->dmglog[i].id; i++) { int flag=1,zeny=0; unsigned int base_exp, job_exp; double per; //Your share of the mob's exp if (!tmpsd[i]) continue; if (!battle_config.exp_calc_type && md->tdmg) //jAthena's exp formula based on total damage. per = (double)md->dmglog[i].dmg/(double)md->tdmg; else { //eAthena's exp formula based on max hp. per = (double)md->dmglog[i].dmg/(double)mstatus->max_hp; if (per > 2) per = 2; // prevents unlimited exp gain } if (count>1 && battle_config.exp_bonus_attacker) { //Exp bonus per additional attacker. if (count > battle_config.exp_bonus_max_attacker) count = battle_config.exp_bonus_max_attacker; per += per*((count-1)*battle_config.exp_bonus_attacker)/100.; } // change experience for different sized monsters [Valaris] if (battle_config.mob_size_influence) { switch( md->special_state.size ) { case SZ_MEDIUM: per /= 2.; break; case SZ_BIG: per *= 2.; break; } } if( md->dmglog[i].flag == MDLF_PET ) per *= battle_config.pet_attack_exp_rate/100.; if(battle_config.zeny_from_mobs && md->level) { // zeny calculation moblv + random moblv [Valaris] zeny=(int) ((md->level+rnd()%md->level)*per*bonus/100.); if(md->db->mexp > 0) zeny*=rnd()%0; } if (map->list[m].flag.nobaseexp || !md->db->base_exp) base_exp = 0; else base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * map->list[m].bexp/100., 1, UINT_MAX); if (map->list[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost. job_exp = 0; else job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map->list[m].jexp/100., 1, UINT_MAX); if ( (temp = tmpsd[i]->status.party_id) > 0 ) { int j; for( j = 0; j < pnum && pt[j].id != temp; j++ ); //Locate party. if( j == pnum ){ //Possibly add party. pt[pnum].p = party->search(temp); if(pt[pnum].p && pt[pnum].p->party.exp) { pt[pnum].id = temp; pt[pnum].base_exp = base_exp; pt[pnum].job_exp = job_exp; pt[pnum].zeny = zeny; // zeny share [Valaris] pnum++; flag=0; } } else { //Add to total if (pt[j].base_exp > UINT_MAX - base_exp) pt[j].base_exp = UINT_MAX; else pt[j].base_exp += base_exp; if (pt[j].job_exp > UINT_MAX - job_exp) pt[j].job_exp = UINT_MAX; else pt[j].job_exp += job_exp; pt[j].zeny+=zeny; // zeny share [Valaris] flag=0; } } if(base_exp && md->dmglog[i].flag == MDLF_HOMUN) //tmpsd[i] is null if it has no homunc. homun->gainexp(tmpsd[i]->hd, base_exp); if(flag) { if(base_exp || job_exp) { if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master ) {#ifdef RENEWAL_EXP int rate = pc->level_penalty_mod(md->level - (tmpsd[i])->status.base_level, md->status.race, md->status.mode, 1); base_exp = (unsigned int)cap_value(base_exp * rate / 100, 1, UINT_MAX); job_exp = (unsigned int)cap_value(job_exp * rate / 100, 1, UINT_MAX);#endif pc->gainexp(tmpsd[i], &md->bl, base_exp, job_exp, false); } } if(zeny) // zeny from mobs [Valaris] pc->getzeny(tmpsd[i], zeny, LOG_TYPE_PICKDROP_MONSTER, NULL); } } for( i = 0; i < pnum; i++ ) //Party share. party->exp_share(pt[i].p, &md->bl, pt[i].base_exp,pt[i].job_exp,pt[i].zeny); } //End EXP giving.possible no.1you have Mr.Kim a Rich man buff possible no.2 you are a Star Gladiator, and killed a mob that is under Blessing of Star, Blessing of Moon, Blessing of Sun possible no.3 your server has "mobs_level_up" enabled, and the monster leveled up, thus increased its exp gain possible no.4 if you kill steal other player's mob, your exp gain rate is less than normal possible no.5 your server has "mob_size_influence" enabled, and killing a big size monster gain double exp possible no.6 that map has bexp or jexp mapflag enabled, thus exp gain increased by mapflags possible no.7 you joined a party and has party share exp option ON, sure you exp gain is share with party members possible no.8 you have a pet, and has "pet_attack_exp_rate" enabled , the mob killed by pets are share with you nope, no more possible no.9 with default hercules source code unless you have modified something Thanks Annie! My server has this features: possible no.3 thank you again! Quote Share this post Link to post Share on other sites
Hi there,
As per photo attached, anyone can explain about this? I already look into mob db but seem no such double exp i set. Why is this happening?
regards.
Bump
Share this post
Link to post
Share on other sites