|
@@ -3072,7 +3072,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
|
|
|
|
|
if (!map_flag_gvg2(src->m) && !map[src->m].flag.battleground && unit_movepos(src,bl->x,bl->y,1,1)) {
|
|
|
clif_slide(src, bl->x, bl->y);
|
|
|
- clif_fixpos(src); //Aegis send this packet too
|
|
|
+ clif_fixpos(src);
|
|
|
}
|
|
|
if (i < dmg.blewcount)
|
|
|
skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4);
|
|
@@ -4108,8 +4108,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
uint8 dir = map_calc_dir(bl, src->x, src->y);
|
|
|
|
|
|
// teleport to target (if not on WoE grounds)
|
|
|
- if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 0, 1) )
|
|
|
+ if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 0, 1) ) {
|
|
|
clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
+ }
|
|
|
|
|
|
// cause damage and knockback if the path to target was a straight one
|
|
|
if( path )
|
|
@@ -4224,7 +4226,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
// Ashura Strike still has slide effect in GVG
|
|
|
if ((mbl == src || (!map_flag_gvg2(src->m) && !map[src->m].flag.battleground)) &&
|
|
|
unit_movepos(src, mbl->x + x, mbl->y + y, 1, 1)) {
|
|
|
- clif_slide(src, src->x, src->y);
|
|
|
+ clif_slide(src, mbl->x, mbl->y);
|
|
|
clif_fixpos(src);
|
|
|
clif_spiritball(src);
|
|
|
}
|
|
@@ -4640,9 +4642,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
else
|
|
|
y = 0;
|
|
|
// Doesn't have slide effect in GVG
|
|
|
- if (!map_flag_gvg2(src->m) && !map[src->m].flag.battleground &&
|
|
|
- unit_movepos(src, bl->x + x, bl->y + y, 1, 1)) {
|
|
|
- clif_slide(src, bl->x + x, bl->y + y);
|
|
|
+ if (!map_flag_gvg2(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x + x, bl->y + y, 1, 1)) {
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
clif_fixpos(src);
|
|
|
clif_spiritball(src);
|
|
|
}
|
|
@@ -4716,8 +4717,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
{ //You don't move on GVG grounds.
|
|
|
short x, y;
|
|
|
map_search_freecell(bl, 0, &x, &y, 1, 1, 0);
|
|
|
- if (unit_movepos(src, x, y, 0, 0))
|
|
|
- clif_slide(src,src->x,src->y);
|
|
|
+ if (unit_movepos(src, x, y, 0, 0)) {
|
|
|
+ clif_slide(src, src->x, src->y);
|
|
|
+ clif_fixpos(src);
|
|
|
+ }
|
|
|
}
|
|
|
status_change_end(src, SC_HIDING, INVALID_TIMER);
|
|
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
|
@@ -4760,10 +4763,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
else if( dir == 7 || dir < 2 ) y = -2;
|
|
|
else y = 0;
|
|
|
|
|
|
- if( unit_movepos(src, bl->x+x, bl->y+y, 1, 1) )
|
|
|
- {
|
|
|
- clif_slide(src,bl->x+x,bl->y+y);
|
|
|
- clif_fixpos(src); // the official server send these two packts.
|
|
|
+ if( unit_movepos(src, bl->x+x, bl->y+y, 1, 1) ) {
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
|
|
if( rnd()%100 < 4 * skill_lv )
|
|
|
skill_castend_damage_id(src,bl,GC_CROSSIMPACT,skill_lv,tick,flag);
|
|
@@ -4978,9 +4980,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
short y[8]={1,1,0,-1,-1,-1,0,1};
|
|
|
uint8 dir = map_calc_dir(bl, src->x, src->y);
|
|
|
|
|
|
- if( unit_movepos(src, bl->x+x[dir], bl->y+y[dir], 1, 1) )
|
|
|
- {
|
|
|
- clif_slide(src, bl->x+x[dir], bl->y+y[dir]);
|
|
|
+ if( unit_movepos(src, bl->x+x[dir], bl->y+y[dir], 1, 1) ) {
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
clif_fixpos(src);
|
|
|
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
|
|
|
}
|
|
@@ -5039,7 +5040,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
break;
|
|
|
|
|
|
case NC_MAGNETICFIELD:
|
|
|
- if( !map[src->m].flag.pvp ) // Doesn't affect enemies on PvP maps
|
|
|
+ if( flag&1 && !map[src->m].flag.pvp ) // Doesn't affect enemies on PvP maps
|
|
|
sc_start2(src,bl,SC_MAGNETICFIELD,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
|
|
|
break;
|
|
|
case SC_FATALMENACE:
|
|
@@ -5058,8 +5059,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
}
|
|
|
break;
|
|
|
case LG_PINPOINTATTACK:
|
|
|
- if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 1, 1) )
|
|
|
- clif_slide(src,bl->x,bl->y);
|
|
|
+ if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 1, 1) ) {
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
+ }
|
|
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
|
|
break;
|
|
|
|
|
@@ -5074,8 +5077,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
|
|
|
case SR_KNUCKLEARROW:
|
|
|
if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 1, 1) ) {
|
|
|
- clif_slide(src,bl->x,bl->y);
|
|
|
- clif_fixpos(src); // Aegis send this packet too.
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
}
|
|
|
|
|
|
if( flag&1 )
|
|
@@ -5176,8 +5179,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
else
|
|
|
y = 0;
|
|
|
if (unit_movepos(src,bl->x + x,bl->y + y,1,1)) {
|
|
|
- clif_slide(src,bl->x + x,bl->y + y);
|
|
|
- clif_fixpos(src); //The official server send these two packts.
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
|
|
}
|
|
|
}
|
|
@@ -5290,6 +5293,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
|
|
|
if (skill_id == MH_TINDER_BREAKER && unit_movepos(src, bl->x, bl->y, 1, 1)) {
|
|
|
clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
clif_skill_poseffect(src,skill_id,skill_lv,bl->x,bl->y,tick);
|
|
|
}
|
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
|
@@ -5949,15 +5953,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
|
|
|
case TK_JUMPKICK:
|
|
|
/* Check if the target is an enemy; if not, skill should fail so the character doesn't unit_movepos (exploitable) */
|
|
|
- if( battle_check_target(src, bl, BCT_ENEMY) > 0 )
|
|
|
- {
|
|
|
- if( unit_movepos(src, bl->x, bl->y, 1, 1) )
|
|
|
- {
|
|
|
+ if( battle_check_target(src, bl, BCT_ENEMY) > 0 ) {
|
|
|
+ if( unit_movepos(src, bl->x, bl->y, 1, 1) ) {
|
|
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
|
|
clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
+ } else
|
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
|
|
break;
|
|
|
|
|
@@ -7261,9 +7263,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
}
|
|
|
|
|
|
clif_skill_nodamage(src,bl,TK_HIGHJUMP,skill_lv,1);
|
|
|
- if(!map_count_oncell(src->m,x,y,BL_PC|BL_NPC|BL_MOB) && map_getcell(src->m,x,y,CELL_CHKREACH)) {
|
|
|
- clif_slide(src,x,y);
|
|
|
- unit_movepos(src, x, y, 1, 0);
|
|
|
+ if(!map_count_oncell(src->m,x,y,BL_PC|BL_NPC|BL_MOB) && map_getcell(src->m,x,y,CELL_CHKREACH) && unit_movepos(src, x, y, 1, 0)) {
|
|
|
+ clif_slide(src, src->x, src->y);
|
|
|
+ clif_fixpos(src);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
@@ -8151,11 +8153,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
|
|
|
if (unit_movepos(src,bl->x,bl->y,0,0)) {
|
|
|
clif_skill_nodamage(src,src,skill_id,skill_lv,1); // Homunc
|
|
|
- clif_slide(src,bl->x,bl->y) ;
|
|
|
- if (unit_movepos(bl,x,y,0,0))
|
|
|
- {
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
+ if (unit_movepos(bl,x,y,0,0)) {
|
|
|
clif_skill_nodamage(bl,bl,skill_id,skill_lv,1); // Master
|
|
|
- clif_slide(bl,x,y) ;
|
|
|
+ clif_slide(bl, x, y);
|
|
|
+ clif_fixpos(src);
|
|
|
}
|
|
|
|
|
|
//TODO: Shouldn't also players and the like switch targets?
|
|
@@ -8946,8 +8949,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
{
|
|
|
uint8 dir = (skill_id == NC_F_SIDESLIDE) ? (unit_getdir(src)+4)%8 : unit_getdir(src);
|
|
|
skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),dir,0x1);
|
|
|
- clif_slide(src,src->x,src->y);
|
|
|
- clif_fixpos(src); //Aegis sent this packet
|
|
|
+ clif_slide(src, src->x, src->y);
|
|
|
+ clif_fixpos(src);
|
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
|
}
|
|
|
break;
|
|
@@ -9887,14 +9890,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
|
|
|
if (unit_movepos(src,bl->x,bl->y,0,0)) {
|
|
|
clif_skill_nodamage(src,src,skill_id,skill_lv,1);
|
|
|
- clif_slide(src,bl->x,bl->y) ;
|
|
|
+ clif_slide(src, bl->x, bl->y);
|
|
|
+ clif_fixpos(src);
|
|
|
sc_start(src,src,SC_CONFUSION,25,skill_lv,skill_get_time(skill_id,skill_lv));
|
|
|
if (unit_movepos(bl,x,y,0,0))
|
|
|
{
|
|
|
clif_skill_damage(bl,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, -1, 6);
|
|
|
if( bl->type == BL_PC && pc_issit((TBL_PC*)bl))
|
|
|
clif_sitting(bl); //Avoid sitting sync problem
|
|
|
- clif_slide(bl,x,y) ;
|
|
|
+ clif_slide(bl, x, y);
|
|
|
+ clif_fixpos(bl);
|
|
|
sc_start(src,bl,SC_CONFUSION,75,skill_lv,skill_get_time(skill_id,skill_lv));
|
|
|
}
|
|
|
}
|
|
@@ -10958,9 +10963,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
}
|
|
|
break;
|
|
|
case NJ_SHADOWJUMP:
|
|
|
- if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground ) { //You don't move on GVG grounds.
|
|
|
- unit_movepos(src, x, y, 1, 0);
|
|
|
- clif_slide(src,x,y);
|
|
|
+ if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, x, y, 1, 0) ) { //You don't move on GVG grounds.
|
|
|
+ clif_slide(src, x, y);
|
|
|
+ clif_fixpos(src);
|
|
|
}
|
|
|
status_change_end(src, SC_HIDING, INVALID_TIMER);
|
|
|
break;
|
|
@@ -11402,7 +11407,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
if (unit_movepos(src,x,y,1,1)) {
|
|
|
enum e_skill skill_use = GS_DESPERADO;
|
|
|
uint8 skill_use_lv = pc_checkskill(sd,skill_use);
|
|
|
- clif_slide(src,x,y);
|
|
|
+ clif_slide(src, x, y);
|
|
|
+ clif_fixpos(src);
|
|
|
if (skill_check_condition_castend(sd,skill_use,skill_use_lv)) {
|
|
|
sd->skill_id_old = RL_FALLEN_ANGEL;
|
|
|
skill_castend_pos2(src,src->x,src->y,skill_use,skill_use_lv,tick,SD_LEVEL|SD_ANIMATION|SD_SPLASH);
|