summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichieru <michieru@0-mail.com>2014-03-04 14:12:57 -0800
committerMichieru <michieru@0-mail.com>2014-03-04 14:12:57 -0800
commitd554d61417a6e7f48de96efcc69872e0b7b65da3 (patch)
treea2ec477e900229cdb43eb8fbb3a79866bde6466b /src
parent15a4395a2f2de8629a21b08ac6b9ec363ad94de3 (diff)
downloadhercules-d554d61417a6e7f48de96efcc69872e0b7b65da3.tar.gz
hercules-d554d61417a6e7f48de96efcc69872e0b7b65da3.tar.bz2
hercules-d554d61417a6e7f48de96efcc69872e0b7b65da3.tar.xz
hercules-d554d61417a6e7f48de96efcc69872e0b7b65da3.zip
Fix bug 8036
http://hercules.ws/board/tracker/issue-8036-gate-of-hell-over-powered/ Fix bug 7074 http://hercules.ws/board/tracker/issue-7074-suragoh-issues/ Fix bug 6866 http://hercules.ws/board/tracker/issue-6866-gate-of-hell/?gopid=15411#entry15411 Remove cast, after cast and cool down of All Odin Power as aegis info. All Odin Power is now watk and it's show the matk in the status window. http://hercules.ws/board/tracker/issue-7715-odins-power-lvl-2/ Fix Insignia consume the item correctly and can't be cast on Land Protector.
Diffstat (limited to 'src')
-rw-r--r--src/map/battle.c19
-rw-r--r--src/map/pc.h2
-rw-r--r--src/map/skill.c4
-rw-r--r--src/map/status.c6
4 files changed, 26 insertions, 5 deletions
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)