summaryrefslogtreecommitdiff
path: root/src/map/status.c
diff options
context:
space:
mode:
authormalufett <malufett.eat.my.binaries@gmail.com>2013-10-16 03:11:25 +0800
committermalufett <malufett.eat.my.binaries@gmail.com>2013-10-16 03:11:25 +0800
commit9692bc034537693d331148ae8bd15153265c6cf0 (patch)
tree274e4f14e69802e5bfd59976f3a7bf7649f98ab8 /src/map/status.c
parent3e58e470d0bfc5e615246ef6a7ffff6a1190e0c9 (diff)
downloadhercules-9692bc034537693d331148ae8bd15153265c6cf0.tar.gz
hercules-9692bc034537693d331148ae8bd15153265c6cf0.tar.bz2
hercules-9692bc034537693d331148ae8bd15153265c6cf0.tar.xz
hercules-9692bc034537693d331148ae8bd15153265c6cf0.zip
Fixed Bug#7374
-Hercules now fully support Monster Transformation. Signed-off-by: malufett <malufett.eat.my.binaries@gmail.com>
Diffstat (limited to 'src/map/status.c')
-rw-r--r--src/map/status.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/map/status.c b/src/map/status.c
index ae900e04d..8a2ac7cd6 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -991,6 +991,9 @@ void initChangeTables(void) {
status->ChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED;
status->ChangeFlagTable[SC_WEDDING] = SCB_SPEED;
+ status->ChangeFlagTable[SC_MTF_ASPD] = SCB_ASPD|SCB_HIT;
+ status->ChangeFlagTable[SC_MTF_MATK] = SCB_MATK;
+ status->ChangeFlagTable[SC_MTF_MLEATKED] |= SCB_ALL;
/* status->DisplayType Table [Ind/Hercules] */
status->DisplayType[SC_ALL_RIDING] = true;
@@ -3083,6 +3086,8 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
sd->subele[ELE_EARTH] += i;
sd->subele[ELE_FIRE] -= i;
}
+ if( sc->data[SC_MTF_MLEATKED] )
+ sd->subele[ELE_NEUTRAL] += 2;
if( sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3 )
sd->magic_addele[ELE_FIRE] += 25;
if( sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 3 )
@@ -4590,6 +4595,9 @@ unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc,
matk += matk * sc->data[SC_MOONLIT_SERENADE]->val2/100;
if (sc->data[SC_MELODYOFSINK])
matk += matk * sc->data[SC_MELODYOFSINK]->val3/100;
+ if (sc->data[SC_MTF_MATK])
+ matk += matk * 25 / 100;
+
if (sc->data[SC_BEYOND_OF_WARCRY])
matk -= matk * sc->data[SC_BEYOND_OF_WARCRY]->val3/100;
@@ -4639,6 +4647,8 @@ signed short status_calc_hit(struct block_list *bl, struct status_change *sc, in
if( !viewable ){
/* some statuses that are hidden in the status window */
+ if(sc->data[SC_MTF_ASPD])
+ hit += 5;
return (short)cap_value(hit,1,SHRT_MAX);
}
@@ -5342,6 +5352,8 @@ short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int
aspd -= 50; // +5 ASPD
if( sc && sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2 )
aspd -= (bl->type==BL_PC?pc->checkskill((TBL_PC *)bl, RK_RUNEMASTERY):10) / 10 * 40;
+ if( sc && sc->data[SC_MTF_ASPD] )
+ aspd -= 10;
return cap_value(aspd, 0, 2000); // will be recap for proper bl anyway
}
@@ -9631,6 +9643,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_FULL_THROTTLE:
sc_start(bl,SC_REBOUND,100,sce->val1,skill->get_time2(ALL_FULL_THROTTLE,sce->val1));
break;
+ case SC_MONSTER_TRANSFORM:
+ if( sce->val2 )
+ status_change_end(bl, (sc_type)sce->val2, INVALID_TIMER);
+ break;
case SC_ITEMSCRIPT:
if( sd ) {
switch( sce->val1 ) {