diff options
Diffstat (limited to 'src/map/battle.c')
-rw-r--r-- | src/map/battle.c | 95 |
1 files changed, 85 insertions, 10 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 29b861c18..ee05a4ef0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3376,7 +3376,25 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if(skill_id == CR_GRANDCROSS || skill_id == NPC_GRANDDARKNESS) return wd; //Enough, rest is not needed. - +#ifndef HMAP_ZONE_DAMAGE_CAP_TYPE + if( src && skill_id ) { + for(i = 0; i < map[src->m].zone->capped_skills_count; i++) { + if( skill_id == map[src->m].zone->capped_skills[i]->nameid && (map[src->m].zone->capped_skills[i]->type & src->type) ) { + if( src->type == BL_MOB && map[src->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)src)->status.mode&MD_BOSS) && !(map[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + continue; + if( ((TBL_MOB*)src)->special_state.clone && !(map[src->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + continue; + } + if( wd.damage > map[src->m].zone->capped_skills[i]->cap ) + wd.damage = map[src->m].zone->capped_skills[i]->cap; + if( wd.damage2 > map[src->m].zone->capped_skills[i]->cap ) + wd.damage2 = map[src->m].zone->capped_skills[i]->cap; + break; + } + } + } +#endif if (sd) { if (skill_id != CR_SHIELDBOOMERANG) //Only Shield boomerang doesn't takes the Star Crumbs bonus. ATK_ADD2(wd.div_*sd->right_weapon.star, wd.div_*sd->left_weapon.star); @@ -4068,6 +4086,25 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list MATK_ADD(50); } } +#ifndef HMAP_ZONE_DAMAGE_CAP_TYPE + if( src && skill_id ) { + for(i = 0; i < map[src->m].zone->capped_skills_count; i++) { + if( skill_id == map[src->m].zone->capped_skills[i]->nameid && (map[src->m].zone->capped_skills[i]->type & src->type) ) { + if( src->type == BL_MOB && map[src->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)src)->status.mode&MD_BOSS) && !(map[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + continue; + if( ((TBL_MOB*)src)->special_state.clone && !(map[src->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + continue; + } + if( ad.damage > map[src->m].zone->capped_skills[i]->cap ) + ad.damage = map[src->m].zone->capped_skills[i]->cap; + if( ad.damage2 > map[src->m].zone->capped_skills[i]->cap ) + ad.damage2 = map[src->m].zone->capped_skills[i]->cap; + break; + } + } + } +#endif #ifdef RENEWAL ad.damage = battle->calc_cardfix(BF_MAGIC, src, target, nk, s_ele, 0, ad.damage, 0, ad.flag); #endif @@ -4451,8 +4488,26 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * md.dmg_lv=ATK_FLEE; } } - - md.damage = battle->calc_cardfix(BF_MISC, src, target, nk, s_ele, 0, md.damage, 0, md.flag); +#ifndef HMAP_ZONE_DAMAGE_CAP_TYPE + if( src && skill_id ) { + for(i = 0; i < map[src->m].zone->capped_skills_count; i++) { + if( skill_id == map[src->m].zone->capped_skills[i]->nameid && (map[src->m].zone->capped_skills[i]->type & src->type) ) { + if( src->type == BL_MOB && map[src->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)src)->status.mode&MD_BOSS) && !(map[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + continue; + if( ((TBL_MOB*)src)->special_state.clone && !(map[src->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + continue; + } + if( md.damage > map[src->m].zone->capped_skills[i]->cap ) + md.damage = map[src->m].zone->capped_skills[i]->cap; + if( md.damage2 > map[src->m].zone->capped_skills[i]->cap ) + md.damage2 = map[src->m].zone->capped_skills[i]->cap; + break; + } + } + } +#endif + md.damage = battle->calc_cardfix(BF_MISC, src, target, nk, s_ele, 0, md.damage, 0, md.flag); if (sd && (i = pc_skillatk_bonus(sd, skill_id))) md.damage += md.damage*i/100; @@ -4527,6 +4582,28 @@ struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct bl memset(&d,0,sizeof(d)); break; } + +#ifdef HMAP_ZONE_DAMAGE_CAP_TYPE + if( bl && skill_id ) { + int i; + for(i = 0; i < map[bl->m].zone->capped_skills_count; i++) { + if( skill_id == map[bl->m].zone->capped_skills[i]->nameid && (map[bl->m].zone->capped_skills[i]->type & bl->type) ) { + if( bl->type == BL_MOB && map[bl->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)bl)->status.mode&MD_BOSS) && !(map[bl->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + continue; + if( ((TBL_MOB*)bl)->special_state.clone && !(map[bl->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + continue; + } + if( d.damage > map[bl->m].zone->capped_skills[i]->cap ) + d.damage = map[bl->m].zone->capped_skills[i]->cap; + if( d.damage2 > map[bl->m].zone->capped_skills[i]->cap ) + d.damage2 = map[bl->m].zone->capped_skills[i]->cap; + break; + } + } + } +#endif + if( d.damage + d.damage2 < 1 ) { //Miss/Absorbed //Weapon attacks should go through to cause additional effects. if (d.dmg_lv == ATK_DEF /*&& attack_type&(BF_MAGIC|BF_MISC)*/) // Isn't it that additional effects don't apply if miss? @@ -5872,7 +5949,7 @@ void Hercules_report(char* date, char *time_c) { enum config_table { C_CIRCULAR_AREA = 0x0001, C_CELLNOSTACK = 0x0002, - C_BETA_THREAD_TEST = 0x0004, + //C_BETA_THREAD_TEST = 0x0004, (free slot) C_SCRIPT_CALLFUNC_CHECK = 0x0008, C_OFFICIAL_WALKPATH = 0x0010, C_RENEWAL = 0x0020, @@ -5903,10 +5980,6 @@ void Hercules_report(char* date, char *time_c) { config |= C_CELLNOSTACK; #endif -#ifdef BETA_THREAD_TEST - config |= C_BETA_THREAD_TEST; -#endif - #ifdef SCRIPT_CALLFUNC_CHECK config |= C_SCRIPT_CALLFUNC_CHECK; #endif @@ -5951,7 +6024,7 @@ void Hercules_report(char* date, char *time_c) { if( db_use_sqldbs ) config |= C_SQL_DBS; - if( log_config.sql_logs ) + if( logs->config.sql_logs ) config |= C_SQL_LOGS; #define BFLAG_LENGTH 35 @@ -6103,8 +6176,10 @@ int battle_config_read(const char* cfgName) count--; - if (count == 0) + if (count == 0) { battle->config_adjust(); + clif->bc_ready(); + } return 0; } |