diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/battle.c | 2 | ||||
-rw-r--r-- | src/map/clif.c | 8 | ||||
-rw-r--r-- | src/map/skill.c | 8 | ||||
-rw-r--r-- | src/map/status.c | 8 |
4 files changed, 17 insertions, 9 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 565f6e312..4ba8003e8 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1234,7 +1234,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo //Initial flag flag.rh=1; flag.weapon=1; - flag.infdef=(tstatus->mode&MD_PLANT?1:0); + flag.infdef=(tstatus->mode&MD_PLANT&&skill_num!=RA_CLUSTERBOMB?1:0); //Initial Values wd.type=0; //Normal attack diff --git a/src/map/clif.c b/src/map/clif.c index af64f74b5..d626c94b1 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -4047,6 +4047,8 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) clif_specialeffect_single(bl,421,sd->fd); if( tsd->bg_id && map[tsd->bl.m].flag.battleground ) clif_sendbgemblem_single(sd->fd,tsd); + if( tsd->sc.data[SC_CAMOUFLAGE] ) + clif_status_load(bl,SI_CAMOUFLAGE,1); } break; case BL_MER: // Devotion Effects @@ -4130,6 +4132,7 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic { unsigned char buf[33]; struct status_change *sc; + int dir=0; #if PACKETVER < 20071113 const int cmd = 0x8a; #else @@ -4148,6 +4151,8 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic } } + dir = unit_getdir(src); + WBUFW(buf,0)=cmd; WBUFL(buf,2)=src->id; WBUFL(buf,6)=dst->id; @@ -4195,6 +4200,9 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic #endif clif_send(buf,packet_len(cmd),src,SELF); } + + if(src == dst) + unit_setdir(src,dir); //Return adjusted can't walk delay for further processing. return clif_calc_walkdelay(dst,ddelay,type,damage+damage2,div); } diff --git a/src/map/skill.c b/src/map/skill.c index 2711b4fd4..0916f33bd 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10874,7 +10874,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns if (sg->unit_id != UNT_FIREPILLAR_ACTIVE) clif_changetraplook(&src->bl, sg->unit_id==UNT_LANDMINE?UNT_FIREPILLAR_ACTIVE:UNT_USED_TRAPS); src->range = -1; //Disable range so it does not invoke a for each in area again. - sg->limit=DIFF_TICK(tick,sg->tick)+1500; + sg->limit=DIFF_TICK(tick,sg->tick)+1500 + (sg->unit_id== UNT_CLUSTERBOMB?1000:0);// Cluster Bomb has 1s to disappear once activated. break; case UNT_TALKIEBOX: @@ -13729,7 +13729,7 @@ int skill_detonator(struct block_list *bl, va_list ap) clif_changetraplook(bl,unit_id == UNT_FIRINGTRAP ? UNT_DUMMYSKILL : UNT_USED_TRAPS); unit->group->unit_id = UNT_USED_TRAPS; unit->range = -1; - unit->group->limit = DIFF_TICK(gettick(),unit->group->tick) + (unit_id == UNT_TALKIEBOX ? 5000 : 1500); + unit->group->limit = DIFF_TICK(gettick(),unit->group->tick) + (unit_id == UNT_TALKIEBOX ? 5000 : (unit_id == UNT_CLUSTERBOMB ? 2500 : 1500) ); break; } return 0; @@ -13906,8 +13906,8 @@ static int skill_trap_splash (struct block_list *bl, va_list ap) case UNT_FIRINGTRAP: case UNT_ICEBOUNDTRAP: case UNT_CLUSTERBOMB: - if(skill_attack(BF_MISC,ss,bl,bl,sg->skill_id,sg->skill_lv,tick,sg->val1)) - clif_skill_damage(bl,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5); + if(skill_attack(BF_MISC,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1)) + clif_skill_damage(src,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5); break; case UNT_REVERBERATION: skill_attack(BF_WEAPON,ss,src,bl,WM_REVERBERATION_MELEE,sg->skill_lv,tick,0); diff --git a/src/map/status.c b/src/map/status.c index 343f7cbf7..ee9ef88ea 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -9513,12 +9513,12 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) if( --(sce->val4) >= 0 ) { struct block_list *src = map_id2bl(sce->val3); - int damage = 3 * status_get_max_hp(bl) / 100; // Non Elemental Damage - if( status ) - damage += battle_attr_fix(NULL, bl, sce->val2, ELE_FIRE, status->def_ele, status->ele_lv); + int damage = 1000 + 3 * status_get_max_hp(bl) / 100; // Deals fixed (1000 + 3%*MaxHP) map_freeblock_lock(); - status_fix_damage(src,bl,damage,clif_damage(bl,bl,tick,0,0,damage,0,0,0)); + clif_damage(bl,bl,tick,0,0,damage,1,9,0); //damage is like endure effect with no walk delay + status_damage(src, bl, damage, 0, 0, 1); + if( sc->data[type]){ // Target still lives. [LimitLine] sc_timer_next(2000 + tick, status_change_timer, bl->id, data); } |