diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/map.h | 2 | ||||
-rw-r--r-- | src/map/mob.c | 3 | ||||
-rw-r--r-- | src/map/pc.c | 8 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/map/map.h b/src/map/map.h index d5614354d..cd2ea9411 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -349,7 +349,7 @@ enum _sp { SP_SP_GAIN_RACE, SP_SUBRACE2, SP_UNBREAKABLE_SHOES, // 2031-2033 SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD, // 2034-2037 SP_INTRAVISION, SP_ADD_MONSTER_DROP_ITEMGROUP, SP_SP_LOSS_RATE, // 2038-2040 - SP_ADD_SKILL_BLOW, SP_SP_VANISH_RATE, SP_MAGIC_SP_GAIN_VALUE, SP_MAGIC_HP_GAIN_VALUE //2041-2044 + SP_ADD_SKILL_BLOW, SP_SP_VANISH_RATE, SP_MAGIC_SP_GAIN_VALUE, SP_MAGIC_HP_GAIN_VALUE, SP_ADD_CLASS_DROP_ITEM //2041-2045 }; enum _look { diff --git a/src/map/mob.c b/src/map/mob.c index 5fb440b4f..f41501638 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2260,7 +2260,8 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) for (i = 0; i < ARRAYLENGTH(sd->add_drop) && (sd->add_drop[i].id || sd->add_drop[i].group); i++) { if (sd->add_drop[i].race & (1<<status->race) || - sd->add_drop[i].race & 1<<(status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS)) + sd->add_drop[i].race & 1<<(status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS) || + sd->add_drop[i].race == md->class_) { //check if the bonus item drop rate should be multiplied with mob level/10 [Lupus] if(sd->add_drop[i].rate < 0) { diff --git a/src/map/pc.c b/src/map/pc.c index 65b89f8b4..e0c5cf394 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1607,8 +1607,8 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id } for(i = 0; i < max && (drop[i].id || drop[i].group); i++) { if( - (id && drop[i].id == id) || - (group && drop[i].group == group) + ((id && drop[i].id == id) || + (group && drop[i].group == group)) && race < (1<<RC_MAX) ) { drop[i].race |= race; if(drop[i].rate > 0 && rate > 0) @@ -2853,6 +2853,10 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) if(sd->state.lr_flag != 2) pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, 1<<type3, val); break; + case SP_ADD_CLASS_DROP_ITEM: + if(sd->state.lr_flag != 2) + pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, type3, val); + break; case SP_AUTOSPELL: if(sd->state.lr_flag != 2) { |