diff options
author | shennetsind <ind@henn.et> | 2014-02-04 10:44:33 -0200 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2014-02-04 10:44:33 -0200 |
commit | 144a9eba25cd6773cd85e6446f72ca183bc8cc58 (patch) | |
tree | e1afe81de18c14533fea4afb74131d1d799bc2a1 | |
parent | 250ec31ab4af9a3370d4412689802f9c46c45bea (diff) | |
download | hercules-144a9eba25cd6773cd85e6446f72ca183bc8cc58.tar.gz hercules-144a9eba25cd6773cd85e6446f72ca183bc8cc58.tar.bz2 hercules-144a9eba25cd6773cd85e6446f72ca183bc8cc58.tar.xz hercules-144a9eba25cd6773cd85e6446f72ca183bc8cc58.zip |
Fixed millenium shield crash with clones
Thanks to Michieru
Signed-off-by: shennetsind <ind@henn.et>
-rw-r--r-- | src/map/battle.c | 9 | ||||
-rw-r--r-- | src/map/clif.c | 6 | ||||
-rw-r--r-- | src/map/clif.h | 2 | ||||
-rw-r--r-- | src/map/pc.c | 4 | ||||
-rw-r--r-- | src/map/skill.c | 14 | ||||
-rw-r--r-- | src/map/status.c | 2 |
6 files changed, 17 insertions, 20 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index fd31f5a1f..8ad54f413 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2253,7 +2253,7 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case LG_RAGEBURST: if( sc ){ skillratio += -100 + (status_get_max_hp(src) - status_get_hp(src)) / 100 + sc->fv_counter * 200; - clif->millenniumshield(sd, (sc->fv_counter = 0)); + clif->millenniumshield(src, (sc->fv_counter = 0)); } RE_LVL_DMOD(100); break; @@ -2665,8 +2665,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam if( sce->val3 <= 0 ) { // Shield Down sce->val2--; if( sce->val2 > 0 ) { - if( sd ) - clif->millenniumshield(sd,sce->val2); + clif->millenniumshield(bl,sce->val2); sce->val3 = 1000; // Next Shield } else status_change_end(bl,SC_MILLENNIUMSHIELD,INVALID_TIMER); // All shields down @@ -2932,9 +2931,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam rnd()%100 < sce->val3) status->heal(src, damage*sce->val4/100, 0, 3); - if( sd && (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON + if( (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON && rnd()%100 < sce->val2 && sc->fv_counter <= sce->val3 ) - clif->millenniumshield(sd, sc->fv_counter++); + clif->millenniumshield(bl, sc->fv_counter++); if (sc->data[SC_STYLE_CHANGE] && rnd()%2) { TBL_HOM *hd = BL_CAST(BL_HOM,bl); diff --git a/src/map/clif.c b/src/map/clif.c index 1e1a98e09..5dacf6360 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -17118,15 +17118,15 @@ int clif_elementalconverter_list(struct map_session_data *sd) { /** * Rune Knight **/ -void clif_millenniumshield(struct map_session_data *sd, short shields ) { +void clif_millenniumshield(struct block_list *bl, short shields ) { #if PACKETVER >= 20081217 unsigned char buf[10]; WBUFW(buf,0) = 0x440; - WBUFL(buf,2) = sd->bl.id; + WBUFL(buf,2) = bl->id; WBUFW(buf,6) = shields; WBUFW(buf,8) = 0; - clif->send(buf,packet_len(0x440),&sd->bl,AREA); + clif->send(buf,packet_len(0x440),bl,AREA); #endif } /** diff --git a/src/map/clif.h b/src/map/clif.h index 1e0319b7b..9006a9ea3 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -763,7 +763,7 @@ struct clif_interface { void (*specialeffect) (struct block_list* bl, int type, enum send_target target); void (*specialeffect_single) (struct block_list* bl, int type, int fd); void (*specialeffect_value) (struct block_list* bl, int effect_id, int num, send_target target); - void (*millenniumshield) (struct map_session_data *sd, short shields ); + void (*millenniumshield) (struct block_list *bl, short shields ); void (*charm) (struct map_session_data *sd, short type); void (*charm_single) (int fd, struct map_session_data *sd, short type); void (*snap) ( struct block_list *bl, short x, short y ); diff --git a/src/map/pc.c b/src/map/pc.c index 7ca582b86..8768c83c6 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -196,7 +196,7 @@ int pc_addspiritball(struct map_session_data *sd,int interval,int max) sd->spirit_timer[i] = tid; sd->spiritball++; if( (sd->class_&MAPID_THIRDMASK) == MAPID_ROYAL_GUARD ) - clif->millenniumshield(sd,sd->spiritball); + clif->millenniumshield(&sd->bl,sd->spiritball); else clif->spiritball(&sd->bl); @@ -235,7 +235,7 @@ int pc_delspiritball(struct map_session_data *sd,int count,int type) if(!type) { if( (sd->class_&MAPID_THIRDMASK) == MAPID_ROYAL_GUARD ) - clif->millenniumshield(sd,sd->spiritball); + clif->millenniumshield(&sd->bl,sd->spiritball); else clif->spiritball(&sd->bl); } diff --git a/src/map/skill.c b/src/map/skill.c index 0df90a538..2e520454f 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7778,10 +7778,10 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin break; case RK_MILLENNIUMSHIELD: - if( sd ){ + { short shields = (rnd()%100<50) ? 4 : ((rnd()%100<80) ? 3 : 2); sc_start4(bl,type,100,skill_lv,shields,1000,0,skill->get_time(skill_id,skill_lv)); - clif->millenniumshield(sd,shields); + clif->millenniumshield(src,shields); clif->skill_nodamage(src,bl,skill_id,1,1); } break; @@ -7811,12 +7811,10 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin int value = 0; type = SC_NONE; if( skill->area_temp[5]&0x10 ){ - if( dstsd ){ - value = (rnd()%100<50) ? 4 : ((rnd()%100<80) ? 3 : 2); - clif->millenniumshield(dstsd,value); - skill->area_temp[5] &= ~0x10; - type = SC_MILLENNIUMSHIELD; - } + value = (rnd()%100<50) ? 4 : ((rnd()%100<80) ? 3 : 2); + clif->millenniumshield(bl,value); + skill->area_temp[5] &= ~0x10; + type = SC_MILLENNIUMSHIELD; }else if( skill->area_temp[5]&0x20 ){ value = status_get_max_hp(bl) * 25 / 100; status->change_clear_buffs(bl,4); diff --git a/src/map/status.c b/src/map/status.c index 4114bc859..e204e9d92 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -9683,7 +9683,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const * 3rd Stuff **/ case SC_MILLENNIUMSHIELD: - clif->millenniumshield(sd,0); + clif->millenniumshield(bl,0); break; case SC_HALLUCINATIONWALK: sc_start(bl,SC_HALLUCINATIONWALK_POSTDELAY,100,sce->val1,skill->get_time2(GC_HALLUCINATIONWALK,sce->val1)); |