diff options
-rw-r--r-- | db/re/skill_cast_db.txt | 2 | ||||
-rw-r--r-- | db/re/skill_require_db.txt | 8 | ||||
-rw-r--r-- | src/map/battle.c | 19 | ||||
-rw-r--r-- | src/map/pc.h | 2 | ||||
-rw-r--r-- | src/map/skill.c | 4 | ||||
-rw-r--r-- | src/map/status.c | 6 |
6 files changed, 31 insertions, 10 deletions
diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index 375455d28..0ac81340a 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1660,7 +1660,7 @@ //-- ALL_GUARDIAN_RECALL 2536,3000,0,0,0,0,300000,0 //-- ALL_ODINS_POWER -2537,5000,5000,0,60000,0,60000,0 +2537,0,0,0,60000,0,0,0 //========================================== //===== Rebellion ========================== diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt index 16af38c32..0b9f86efe 100644 --- a/db/re/skill_require_db.txt +++ b/db/re/skill_require_db.txt @@ -778,10 +778,10 @@ 2461,0,0,50,0,0,0,99,0,0,elementalspirit,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_EL_ACTION#Elemental Action# 2462,0,0,10:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_EL_ANALYSIS#Four Spirit Analysis# 2464,0,0,10,0,0,0,99,0,0,elementalspirit,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_EL_CURE#Spirit Recovery# -2465,0,0,22:30:38,0,0,0,99,0,0,none,0,6360,1:2:3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_FIRE_INSIGNIA#Fire Insignia# -2466,0,0,22:30:38,0,0,0,99,0,0,none,0,6361,1:2:3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_WATER_INSIGNIA#Water Insignia# -2467,0,0,22:30:38,0,0,0,99,0,0,none,0,6362,1:2:3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_WIND_INSIGNIA#Wind Insignia# -2468,0,0,22:30:38,0,0,0,99,0,0,none,0,6363,1:2:3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_EARTH_INSIGNIA#Earth Insignia# +2465,0,0,22:30:38,0,0,0,99,0,0,none,0,6360,1,6360,2,6360,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_FIRE_INSIGNIA#Fire Insignia# +2466,0,0,22:30:38,0,0,0,99,0,0,none,0,6361,1,6361,2,6361,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_WATER_INSIGNIA#Water Insignia# +2467,0,0,22:30:38,0,0,0,99,0,0,none,0,6362,1,6362,2,6362,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_WIND_INSIGNIA#Wind Insignia# +2468,0,0,22:30:38,0,0,0,99,0,0,none,0,6363,1,6363,2,6363,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_EARTH_INSIGNIA#Earth Insignia# //**** // GN Genetic diff --git a/src/map/battle.c b/src/map/battle.c index e9e17708c..40f3d2482 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3220,6 +3220,14 @@ int battle_range_type(struct block_list *src, struct block_list *target, uint16 return BF_SHORT; return BF_LONG; } + + if (skill_id == SR_GATEOFHELL) { + if (skill_lv < 5) + return BF_SHORT; + else + return BF_LONG; + } + //based on used skill's range if (skill->get_range2(src, skill_id, skill_lv) < 5) return BF_SHORT; @@ -4441,8 +4449,11 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if( !sd ) hitrate = cap_value(hitrate, 5, 95); #endif - if(rnd()%100 >= hitrate) + if(rnd()%100 >= hitrate){ wd.dmg_lv = ATK_FLEE; + if (skill_id == SR_GATEOFHELL) + flag.hit = 1;/* will hit with the special */ + } else flag.hit = 1; } //End hit/miss calculation @@ -4645,6 +4656,12 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list } #endif switch(skill_id){ + case SR_GATEOFHELL: + if (wd.dmg_lv != ATK_FLEE) + ATK_RATE(battle->calc_skillratio(BF_WEAPON, src, target, skill_id, skill_lv, skillratio, wflag)); + else + wd.dmg_lv = ATK_DEF; + break; #ifdef RENEWAL case NJ_TATAMIGAESHI: ATK_RATE(200); diff --git a/src/map/pc.h b/src/map/pc.h index 47bbe9202..255fcdbc4 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -655,7 +655,7 @@ enum equip_pos { #define pc_leftside_mdef(sd) ((sd)->battle_status.mdef2) #define pc_rightside_mdef(sd) ((sd)->battle_status.mdef) #define pc_leftside_matk(sd) (status->base_matk(status->get_status_data(&(sd)->bl), (sd)->status.base_level)) -#define pc_rightside_matk(sd) ((sd)->battle_status.rhw.matk+(sd)->battle_status.lhw.matk+(sd)->bonus.ematk) +#define pc_rightside_matk(sd) ((sd)->battle_status.rhw.matk+(sd)->battle_status.lhw.matk+(sd)->bonus.ematk+((sd)->battle_status.matk_min-(sd)->base_status.matk_min)) #else #define pc_leftside_atk(sd) ((sd)->battle_status.batk + (sd)->battle_status.rhw.atk + (sd)->battle_status.lhw.atk) #define pc_rightside_atk(sd) ((sd)->battle_status.rhw.atk2 + (sd)->battle_status.lhw.atk2) diff --git a/src/map/skill.c b/src/map/skill.c index 9f03fcd20..72b59aab7 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -11005,6 +11005,10 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ val1 = skill_lv + 1; val2 = 1; case WM_POEMOFNETHERWORLD: // Can't be placed on top of Land Protector. + case SO_WATER_INSIGNIA: + case SO_FIRE_INSIGNIA: + case SO_WIND_INSIGNIA: + case SO_EARTH_INSIGNIA: if( map->getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) return NULL; break; diff --git a/src/map/status.c b/src/map/status.c index 6b8282a4e..5dcf35198 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -445,7 +445,7 @@ void initChangeTables(void) { set_sc( CASH_ASSUMPTIO , SC_ASSUMPTIO , SI_ASSUMPTIO , SCB_NONE ); set_sc( ALL_PARTYFLEE , SC_PARTYFLEE , SI_PARTYFLEE , SCB_NONE ); - set_sc( ALL_ODINS_POWER , SC_ODINS_POWER , SI_ODINS_POWER , SCB_MATK|SCB_BATK|SCB_MDEF|SCB_DEF ); + set_sc( ALL_ODINS_POWER , SC_ODINS_POWER , SI_ODINS_POWER , SCB_WATK | SCB_MATK | SCB_MDEF | SCB_DEF); set_sc( CR_SHRINK , SC_CR_SHRINK , SI_CR_SHRINK , SCB_NONE ); set_sc( RG_CLOSECONFINE , SC_RG_CCONFINE_S , SI_RG_CCONFINE_S , SCB_NONE ); @@ -4510,8 +4510,6 @@ unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, batk += batk / 5; if(sc->data[SC_FULL_SWING_K]) batk += sc->data[SC_FULL_SWING_K]->val1; - if(sc->data[SC_ODINS_POWER]) - batk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; if(sc->data[SC_VOLCANIC_ASH] && (bl->type==BL_MOB)){ if(status_get_element(bl) == ELE_WATER) //water type batk /= 2; @@ -4628,6 +4626,8 @@ unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, watk -= watk * sc->data[SC__ENERVATION]->val2 / 100; if(sc->data[SC_RUSH_WINDMILL]) watk += sc->data[SC_RUSH_WINDMILL]->val2; + if (sc->data[SC_ODINS_POWER]) + watk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; if((sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2) || (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2) || (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 2) |