diff options
Diffstat (limited to 'src/map/unit.c')
-rw-r--r-- | src/map/unit.c | 135 |
1 files changed, 68 insertions, 67 deletions
diff --git a/src/map/unit.c b/src/map/unit.c index df4efef8e..7abfde12b 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -157,7 +157,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr data) map_moveblock(bl, x, y, tick); ud->walk_count++; //walked cell counter, to be used for walk-triggered skills. [Skotlex] - if (bl->x != x || bl->y != y || ud->walktimer != -1) + if (bl->x != x || bl->y != y || ud->walktimer != INVALID_TIMER) return 0; //map_moveblock has altered the object beyond what we expected (moved/warped it) ud->walktimer = -2; // arbitrary non-INVALID_TIMER value to make the clif code send walking packets @@ -197,11 +197,11 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr data) if (md->min_chase > md->db->range3) md->min_chase--; //Walk skills are triggered regardless of target due to the idle-walk mob state. //But avoid triggering on stop-walk calls. - if(tid != -1 && + if(tid != INVALID_TIMER && !(ud->walk_count%WALK_SKILL_INTERVAL) && mobskill_use(md, tick, -1)) { - if (!(ud->skillid == NPC_SELFDESTRUCTION && ud->skilltimer != -1)) + if (!(ud->skillid == NPC_SELFDESTRUCTION && ud->skilltimer != INVALID_TIMER)) { //Skill used, abort walking clif_fixpos(bl); //Fix position as walk has been cancelled. return 0; @@ -211,7 +211,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr data) } } - if(tid == -1) //A directly invoked timer is from battle_stop_walking, therefore the rest is irrelevant. + if(tid == INVALID_TIMER) //A directly invoked timer is from battle_stop_walking, therefore the rest is irrelevant. return 0; if(ud->state.change_walk_target) @@ -306,14 +306,14 @@ int unit_walktoxy( struct block_list *bl, short x, short y, int flag) if (sc && sc->data[SC_CONFUSION]) //Randomize the target position map_random_dir(bl, &ud->to_x, &ud->to_y); - if(ud->walktimer != -1) { + if(ud->walktimer != INVALID_TIMER) { // 現在歩いている最中の目的地変更なのでマス目の中心に来た時に // timer関数からunit_walktoxy_subを呼ぶようにする ud->state.change_walk_target = 1; return 1; } - if(ud->attacktimer != -1) { + if(ud->attacktimer != INVALID_TIMER) { delete_timer( ud->attacktimer, unit_attack_timer ); ud->attacktimer = INVALID_TIMER; } @@ -331,7 +331,7 @@ static int unit_walktobl_sub(int tid, unsigned int tick, int id, intptr data) struct block_list *bl = map_id2bl(id); struct unit_data *ud = bl?unit_bl2ud(bl):NULL; - if (ud && ud->walktimer == -1 && ud->target == data) + if (ud && ud->walktimer == INVALID_TIMER && ud->target == data) { if (DIFF_TICK(ud->canmove_tick, tick) > 0) //Keep waiting? add_timer(ud->canmove_tick+1, unit_walktobl_sub, id, data); @@ -374,7 +374,7 @@ int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, int if (sc && sc->data[SC_CONFUSION]) //Randomize the target position map_random_dir(bl, &ud->to_x, &ud->to_y); - if(ud->walktimer != -1) { + if(ud->walktimer != INVALID_TIMER) { ud->state.change_walk_target = 1; set_mobstate(bl, flag&2); return 1; @@ -389,7 +389,7 @@ int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, int if(!unit_can_move(bl)) return 0; - if(ud->attacktimer != -1) { + if(ud->attacktimer != INVALID_TIMER) { delete_timer( ud->attacktimer, unit_attack_timer ); ud->attacktimer = INVALID_TIMER; } @@ -413,7 +413,7 @@ int unit_run(struct block_list *bl) return 0; if (!unit_can_move(bl)) { - status_change_end(bl,SC_RUN,-1); + status_change_end(bl, SC_RUN, INVALID_TIMER); return 0; } @@ -443,7 +443,7 @@ int unit_run(struct block_list *bl) //Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin] unit_bl2ud(bl)->state.running = 0; - status_change_end(bl,SC_RUN,-1); + status_change_end(bl, SC_RUN, INVALID_TIMER); skill_blown(bl,bl,skill_get_blewcount(TK_RUN,lv),unit_getdir(bl),0); clif_fixpos(bl); //Why is a clif_slide (skill_blown) AND a fixpos needed? Ask Aegis. @@ -463,7 +463,7 @@ int unit_run(struct block_list *bl) //Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin] unit_bl2ud(bl)->state.running = 0; - status_change_end(bl,SC_RUN,-1); + status_change_end(bl, SC_RUN, INVALID_TIMER); skill_blown(bl,bl,skill_get_blewcount(TK_RUN,lv),unit_getdir(bl),0); clif_fixpos(bl); @@ -725,7 +725,7 @@ int unit_stop_walking(struct block_list *bl,int type) nullpo_ret(bl); ud = unit_bl2ud(bl); - if(!ud || ud->walktimer == -1) + if(!ud || ud->walktimer == INVALID_TIMER) return 0; //NOTE: We are using timer data after deleting it because we know the //delete_timer function does not messes with it. If the function's @@ -739,7 +739,7 @@ int unit_stop_walking(struct block_list *bl,int type) || (type&0x04 && td && DIFF_TICK(td->tick, tick) <= td->data/2) //Enough time has passed to cover half-cell ) { ud->walkpath.path_len = ud->walkpath.path_pos+1; - unit_walktoxy_timer(-1, tick, bl->id, ud->walkpath.path_pos); + unit_walktoxy_timer(INVALID_TIMER, tick, bl->id, ud->walkpath.path_pos); } if(type&0x01) @@ -754,7 +754,7 @@ int unit_stop_walking(struct block_list *bl,int type) //Readded, the check in unit_set_walkdelay means dmg during running won't fall through to this place in code [Kevin] if (ud->state.running) - status_change_end(bl, SC_RUN, -1); + status_change_end(bl, SC_RUN, INVALID_TIMER); return 1; } @@ -774,7 +774,7 @@ int unit_is_walking(struct block_list *bl) struct unit_data *ud = unit_bl2ud(bl); nullpo_ret(bl); if(!ud) return 0; - return (ud->walktimer != -1); + return (ud->walktimer != INVALID_TIMER); } /*========================================== @@ -794,7 +794,7 @@ int unit_can_move(struct block_list *bl) if (!ud) return 0; - if (ud->skilltimer != -1 && (!sd || !pc_checkskill(sd, SA_FREECAST) || skill_get_inf2(ud->skillid)&INF2_GUILD_SKILL)) + if (ud->skilltimer != INVALID_TIMER && (!sd || !pc_checkskill(sd, SA_FREECAST) || skill_get_inf2(ud->skillid)&INF2_GUILD_SKILL)) return 0; // prevent moving while casting if (DIFF_TICK(ud->canmove_tick, gettick()) > 0) @@ -880,7 +880,7 @@ int unit_set_walkdelay(struct block_list *bl, unsigned int tick, int delay, int return 0; } ud->canmove_tick = tick + delay; - if (ud->walktimer != -1) + if (ud->walktimer != INVALID_TIMER) { //Stop walking, if chasing, readjust timers. if (delay == 1) { //Minimal delay (walk-delay) disabled. Just stop walking. @@ -939,8 +939,6 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if(skillnotok(skill_num, sd)) // [MouseJstr] return 0; - mob_ksprotected(src, map_id2bl(target_id)); - switch(skill_num) { //Check for skills that auto-select target case MO_CHAINCOMBO: @@ -987,8 +985,11 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if( !target || src->m != target->m || !src->prev || !target->prev ) return 0; + if( mob_ksprotected(src, target) ) + return 0; + //Normally not needed because clif.c checks for it, but the at/char/script commands don't! [Skotlex] - if(ud->skilltimer != -1 && skill_num != SA_CASTCANCEL) + if(ud->skilltimer != INVALID_TIMER && skill_num != SA_CASTCANCEL) return 0; if(skill_get_inf2(skill_num)&INF2_NO_TARGET_SELF && src->id == target_id) @@ -1047,7 +1048,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh //Check range when not using skill on yourself or is a combo-skill during attack //(these are supposed to always have the same range as your attack) - if( src->id != target_id && (!temp || ud->attacktimer == -1) ) + if( src->id != target_id && (!temp || ud->attacktimer == INVALID_TIMER) ) { if( skill_get_state(ud->skillid) == ST_MOVE_ENABLE ) { @@ -1065,7 +1066,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if (!temp) //Stop attack on non-combo skills [Skotlex] unit_stop_attack(src); - else if(ud->attacktimer != -1) //Elsewise, delay current attack sequence + else if(ud->attacktimer != INVALID_TIMER) //Elsewise, delay current attack sequence ud->attackabletime = tick + status_get_adelay(src); ud->state.skillcastcancel = castcancel; @@ -1180,7 +1181,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if( sc && sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4&4) && skill_num != AS_CLOAKING ) { - status_change_end(src,SC_CLOAKING,-1); + status_change_end(src, SC_CLOAKING, INVALID_TIMER); if (!src->prev) return 0; //Warped away! } @@ -1224,7 +1225,7 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh ud = unit_bl2ud(src); if(ud == NULL) return 0; - if(ud->skilltimer != -1) //Normally not needed since clif.c checks for it, but at/char/script commands don't! [Skotlex] + if(ud->skilltimer != INVALID_TIMER) //Normally not needed since clif.c checks for it, but at/char/script commands don't! [Skotlex] return 0; sc = status_get_sc(src); @@ -1285,7 +1286,7 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh if (sc && sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4&4)) { - status_change_end(src,SC_CLOAKING,-1); + status_change_end(src, SC_CLOAKING, INVALID_TIMER); if (!src->prev) return 0; //Warped away! } @@ -1310,7 +1311,7 @@ int unit_stop_attack(struct block_list *bl) struct unit_data *ud = unit_bl2ud(bl); nullpo_ret(bl); - if(!ud || ud->attacktimer == -1) + if(!ud || ud->attacktimer == INVALID_TIMER) return 0; delete_timer( ud->attacktimer, unit_attack_timer ); @@ -1380,7 +1381,7 @@ int unit_attack(struct block_list *src,int target_id,int continuous) ud->chaserange = status_get_range(src); //Just change target/type. [Skotlex] - if(ud->attacktimer != -1) + if(ud->attacktimer != INVALID_TIMER) return 0; //Set Mob's ANGRY/BERSERK states. @@ -1391,7 +1392,7 @@ int unit_attack(struct block_list *src,int target_id,int continuous) //Do attack next time it is possible. [Skotlex] ud->attacktimer=add_timer(ud->attackabletime,unit_attack_timer,src->id,0); else //Attack NOW. - unit_attack_timer(-1,gettick(),src->id,0); + unit_attack_timer(INVALID_TIMER, gettick(), src->id, 0); return 0; } @@ -1402,7 +1403,7 @@ int unit_cancel_combo(struct block_list *bl) { struct unit_data *ud; - if (!status_change_end(bl, SC_COMBO, -1)) + if (!status_change_end(bl, SC_COMBO, INVALID_TIMER)) return 0; //Combo wasn't active. ud = unit_bl2ud(bl); @@ -1410,7 +1411,7 @@ int unit_cancel_combo(struct block_list *bl) ud->attackabletime = gettick() + status_get_amotion(bl); - if (ud->attacktimer == -1) + if (ud->attacktimer == INVALID_TIMER) return 1; //Nothing more to do. delete_timer(ud->attacktimer, unit_attack_timer); @@ -1563,12 +1564,12 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t return 0; } - if( ud->skilltimer != -1 && !(sd && pc_checkskill(sd,SA_FREECAST) > 0) ) + if( ud->skilltimer != INVALID_TIMER && !(sd && pc_checkskill(sd,SA_FREECAST) > 0) ) return 0; // can't attack while casting if( !battle_config.sdelay_attack_enable && DIFF_TICK(ud->canact_tick,tick) > 0 && !(sd && pc_checkskill(sd,SA_FREECAST) > 0) ) { // attacking when under cast delay has restrictions: - if( tid == -1 ) + if( tid == INVALID_TIMER ) { //requested attack. if(sd) clif_skill_fail(sd,1,4,0); return 0; @@ -1612,14 +1613,14 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t //Sync packet only for players. //Non-players use the sync packet on the walk timer. [Skotlex] - if (tid == -1 && sd) clif_fixpos(src); + if (tid == INVALID_TIMER && sd) clif_fixpos(src); if( DIFF_TICK(ud->attackabletime,tick) <= 0 ) { if (battle_config.attack_direction_change && (src->type&battle_config.attack_direction_change)) { ud->dir = map_calc_dir(src, target->x,target->y ); } - if(ud->walktimer != -1) + if(ud->walktimer != INVALID_TIMER) unit_stop_walking(src,1); if(md) { if (mobskill_use(md,tick,-1)) @@ -1674,7 +1675,7 @@ int unit_skillcastcancel(struct block_list *bl,int type) int ret=0, skill; nullpo_ret(bl); - if (!ud || ud->skilltimer==-1) + if (!ud || ud->skilltimer == INVALID_TIMER) return 0; //Nothing to cancel. sd = BL_CAST(BL_PC, bl); @@ -1732,9 +1733,9 @@ void unit_dataset(struct block_list *bl) memset( ud, 0, sizeof( struct unit_data) ); ud->bl = bl; - ud->walktimer = -1; - ud->skilltimer = -1; - ud->attacktimer = -1; + ud->walktimer = INVALID_TIMER; + ud->skilltimer = INVALID_TIMER; + ud->attacktimer = INVALID_TIMER; ud->attackabletime = ud->canact_tick = ud->canmove_tick = gettick(); @@ -1754,7 +1755,7 @@ static int unit_counttargeted_sub(struct block_list* bl, va_list ap) ud = unit_bl2ud(bl); - if (ud && ud->target == id && ud->attacktimer != -1 && ud->attacktarget_lv >= target_lv) + if (ud && ud->target == id && ud->attacktimer != INVALID_TIMER && ud->attacktarget_lv >= target_lv) return 1; return 0; @@ -1821,36 +1822,36 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, map_freeblock_lock(); ud->target = 0; //Unlock walk/attack target. - if (ud->walktimer != -1) + if (ud->walktimer != INVALID_TIMER) unit_stop_walking(bl,0); - if (ud->attacktimer != -1) + if (ud->attacktimer != INVALID_TIMER) unit_stop_attack(bl); - if (ud->skilltimer != -1) + if (ud->skilltimer != INVALID_TIMER) unit_skillcastcancel(bl,0); // Do not reset can-act delay. [Skotlex] ud->attackabletime = ud->canmove_tick /*= ud->canact_tick*/ = gettick(); if(sc && sc->count ) { //map-change/warp dispells. - status_change_end(bl,SC_BLADESTOP,-1); - status_change_end(bl,SC_BASILICA,-1); - status_change_end(bl,SC_ANKLE,-1); - status_change_end(bl,SC_TRICKDEAD,-1); - status_change_end(bl,SC_BLADESTOP_WAIT,-1); - status_change_end(bl,SC_RUN,-1); - status_change_end(bl,SC_DANCING,-1); - status_change_end(bl,SC_WARM,-1); - status_change_end(bl,SC_DEVOTION,-1); - status_change_end(bl,SC_MARIONETTE,-1); - status_change_end(bl,SC_MARIONETTE2,-1); - status_change_end(bl,SC_CLOSECONFINE,-1); - status_change_end(bl,SC_CLOSECONFINE2,-1); - status_change_end(bl,SC_HIDING,-1); - status_change_end(bl,SC_CLOAKING,-1); - status_change_end(bl,SC_CHASEWALK,-1); + status_change_end(bl, SC_BLADESTOP, INVALID_TIMER); + status_change_end(bl, SC_BASILICA, INVALID_TIMER); + status_change_end(bl, SC_ANKLE, INVALID_TIMER); + status_change_end(bl, SC_TRICKDEAD, INVALID_TIMER); + status_change_end(bl, SC_BLADESTOP_WAIT, INVALID_TIMER); + status_change_end(bl, SC_RUN, INVALID_TIMER); + status_change_end(bl, SC_DANCING, INVALID_TIMER); + status_change_end(bl, SC_WARM, INVALID_TIMER); + status_change_end(bl, SC_DEVOTION, INVALID_TIMER); + status_change_end(bl, SC_MARIONETTE, INVALID_TIMER); + status_change_end(bl, SC_MARIONETTE2, INVALID_TIMER); + status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER); + status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER); + status_change_end(bl, SC_HIDING, INVALID_TIMER); + status_change_end(bl, SC_CLOAKING, INVALID_TIMER); + status_change_end(bl, SC_CHASEWALK, INVALID_TIMER); if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) - status_change_end(bl,SC_GOSPEL,-1); - status_change_end(bl,SC_CHANGE,-1); - status_change_end(bl,SC_STOP,-1); + status_change_end(bl, SC_GOSPEL, INVALID_TIMER); + status_change_end(bl, SC_CHANGE, INVALID_TIMER); + status_change_end(bl, SC_STOP, INVALID_TIMER); } if (bl->type&BL_CHAR) { @@ -1890,7 +1891,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, sd->npc_shopid = 0; sd->adopt_invite = 0; - if(sd->pvp_timer!=-1) { + if(sd->pvp_timer != INVALID_TIMER) { delete_timer(sd->pvp_timer,pc_calc_pvprank_timer); sd->pvp_timer = INVALID_TIMER; sd->pvp_rank = 0; @@ -2052,7 +2053,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) pc_delautobonus(sd,sd->autobonus2,ARRAYLENGTH(sd->autobonus2),false); pc_delautobonus(sd,sd->autobonus3,ARRAYLENGTH(sd->autobonus3),false); - if( sd->followtimer != -1 ) + if( sd->followtimer != INVALID_TIMER ) pc_stop_following(sd); if( sd->duel_invite > 0 ) @@ -2103,7 +2104,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) } if( pd->s_skill ) { - if (pd->s_skill->timer != -1) { + if (pd->s_skill->timer != INVALID_TIMER) { if (pd->s_skill->id) delete_timer(pd->s_skill->timer, pet_skill_support_timer); else @@ -2114,14 +2115,14 @@ int unit_free(struct block_list *bl, clr_type clrtype) } if( pd->recovery ) { - if(pd->recovery->timer != -1) + if(pd->recovery->timer != INVALID_TIMER) delete_timer(pd->recovery->timer, pet_recovery_timer); aFree(pd->recovery); pd->recovery = NULL; } if( pd->bonus ) { - if (pd->bonus->timer != -1) + if (pd->bonus->timer != INVALID_TIMER) delete_timer(pd->bonus->timer, pet_skill_bonus_timer); aFree(pd->bonus); pd->bonus = NULL; |