- Modified the skill damage packet and the knockback packets to mimic aegis sent packets for such skills.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9471 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
04b76739c4
commit
84f8ec45d5
@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||
|
||||
2006/12/12
|
||||
* Modified the skill damage packet and the knockback packets to mimic aegis
|
||||
sent packets for such skills.
|
||||
* Removed CART_MASK as OPTION_CART can take care of that.
|
||||
* Moved the OPTION_MASK define to status.h
|
||||
* Reverted the knockback implementation to use clif_slide instead of
|
||||
|
@ -1865,8 +1865,8 @@ int clif_changemapserver(struct map_session_data *sd, char *mapname, int x, int
|
||||
|
||||
int clif_blown(struct block_list *bl) {
|
||||
//Aegis packets says fixpos, but it's unsure whether slide works better or not.
|
||||
// return clif_fixpos(bl);
|
||||
return clif_slide(bl, bl->x, bl->y);
|
||||
return clif_fixpos(bl);
|
||||
// return clif_slide(bl, bl->x, bl->y);
|
||||
}
|
||||
/*==========================================
|
||||
*
|
||||
@ -4515,7 +4515,7 @@ int clif_skill_fail(struct map_session_data *sd,int skill_id,int type,int btype)
|
||||
*------------------------------------------
|
||||
*/
|
||||
int clif_skill_damage(struct block_list *src,struct block_list *dst,
|
||||
unsigned int tick,int sdelay,int ddelay,int damage,int div,int skill_id,int skill_lv,int type)
|
||||
unsigned int tick,int sdelay,int ddelay,int damage,int div,int skill_id,int skill_lv,int type,int flag)
|
||||
{
|
||||
unsigned char buf[64];
|
||||
struct status_change *sc;
|
||||
@ -4540,13 +4540,19 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,
|
||||
WBUFL(buf,12)=tick;
|
||||
WBUFL(buf,16)=sdelay;
|
||||
WBUFL(buf,20)=ddelay;
|
||||
WBUFW(buf,26)=skill_lv;
|
||||
WBUFW(buf,28)=div;
|
||||
if (flag && src->type == BL_PC)
|
||||
{ //Needed for appropiate knockback on the receiving client.
|
||||
WBUFW(buf,24)=-30000;
|
||||
WBUFB(buf,30)=6;
|
||||
clif_send(buf,packet_len_table[0x114],src,SELF);
|
||||
}
|
||||
if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
|
||||
WBUFW(buf,24)=damage?div:0;
|
||||
} else {
|
||||
WBUFW(buf,24)=damage;
|
||||
}
|
||||
WBUFW(buf,26)=skill_lv;
|
||||
WBUFW(buf,28)=div;
|
||||
WBUFB(buf,30)=type;
|
||||
clif_send(buf,packet_len_table[0x114],src,AREA);
|
||||
if(disguised(src)) {
|
||||
@ -4571,13 +4577,19 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,
|
||||
WBUFL(buf,12)=tick;
|
||||
WBUFL(buf,16)=sdelay;
|
||||
WBUFL(buf,20)=ddelay;
|
||||
WBUFW(buf,28)=skill_lv;
|
||||
WBUFW(buf,30)=div;
|
||||
if (flag && src->type == BL_PC)
|
||||
{ //Needed for appropiate knockback on the receiving client.
|
||||
WBUFL(buf,24)=-30000;
|
||||
WBUFB(buf,32)=6;
|
||||
clif_send(buf,packet_len_table[0x114],src,SELF);
|
||||
}
|
||||
if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
|
||||
WBUFL(buf,24)=damage?div:0;
|
||||
} else {
|
||||
WBUFL(buf,24)=damage;
|
||||
}
|
||||
WBUFW(buf,28)=skill_lv;
|
||||
WBUFW(buf,30)=div;
|
||||
WBUFB(buf,32)=type;
|
||||
clif_send(buf,packet_len_table[0x1de],src,AREA);
|
||||
if(disguised(src)) {
|
||||
|
@ -176,7 +176,7 @@ int clif_skillcastcancel(struct block_list* bl);
|
||||
int clif_skill_fail(struct map_session_data *sd,int skill_id,int type,int btype);
|
||||
int clif_skill_damage(struct block_list *src,struct block_list *dst,
|
||||
unsigned int tick,int sdelay,int ddelay,int damage,int div,
|
||||
int skill_id,int skill_lv,int type);
|
||||
int skill_id,int skill_lv,int type, int flag);
|
||||
int clif_skill_damage2(struct block_list *src,struct block_list *dst,
|
||||
unsigned int tick,int sdelay,int ddelay,int damage,int div,
|
||||
int skill_id,int skill_lv,int type);
|
||||
|
@ -8688,8 +8688,8 @@ static int buildin_maprespawnguildid_sub_pc(DBKey key, void *data, va_list ap)
|
||||
if(!sd || sd->bl.m != m)
|
||||
return 0;
|
||||
if(
|
||||
((sd->status.guild_id == g_id) && flag&1) || //Warp out owners
|
||||
((sd->status.guild_id != g_id) && flag&2) || //Warp out outsiders
|
||||
(sd->status.guild_id == g_id && flag&1) || //Warp out owners
|
||||
(sd->status.guild_id != g_id && flag&2) || //Warp out outsiders
|
||||
(sd->status.guild_id == 0) // Warp out players not in guild [Valaris]
|
||||
)
|
||||
pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
|
||||
|
@ -1731,7 +1731,6 @@ int skill_break_equip (struct block_list *bl, unsigned short where, int rate, in
|
||||
int skill_blown (struct block_list *src, struct block_list *target, int count)
|
||||
{
|
||||
int dx=0,dy=0,nx,ny;
|
||||
int x=target->x,y=target->y;
|
||||
int dir,ret;
|
||||
struct skill_unit *su=NULL;
|
||||
|
||||
@ -1767,15 +1766,15 @@ int skill_blown (struct block_list *src, struct block_list *target, int count)
|
||||
dy = -diry[dir];
|
||||
}
|
||||
|
||||
ret=path_blownpos(target->m,x,y,dx,dy,count&0xffff);
|
||||
ret=path_blownpos(target->m,target->x,target->y,dx,dy,count&0xffff);
|
||||
nx=ret>>16;
|
||||
ny=ret&0xffff;
|
||||
|
||||
if (!su)
|
||||
unit_stop_walking(target,0);
|
||||
|
||||
dx = nx - x;
|
||||
dy = ny - y;
|
||||
dx = nx - target->x;
|
||||
dy = ny - target->y;
|
||||
|
||||
if (!dx && !dy) //Could not knockback.
|
||||
return 0;
|
||||
@ -1794,8 +1793,9 @@ int skill_blown (struct block_list *src, struct block_list *target, int count)
|
||||
if(!(count&0x20000))
|
||||
clif_blown(target);
|
||||
|
||||
if(target->type == BL_PC && map_getcell(target->m,x,y,CELL_CHKNPC))
|
||||
npc_touch_areanpc((TBL_PC*)target,target->m,x,y); //Invoke area NPC
|
||||
if(target->type == BL_PC &&
|
||||
map_getcell(target->m, target->x, target->y, CELL_CHKNPC))
|
||||
npc_touch_areanpc((TBL_PC*)target, target->m, target->x, target->y); //Invoke area NPC
|
||||
|
||||
return (count&0xFFFF); //Return amount of knocked back cells.
|
||||
}
|
||||
@ -2017,7 +2017,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
|
||||
//Display damage.
|
||||
switch(skillid){
|
||||
case PA_GOSPEL: //Should look like Holy Cross [Skotlex]
|
||||
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, 5);
|
||||
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, 5, dmg.blewcount);
|
||||
break;
|
||||
//Skills that need be passed as a normal attack for the client to display correctly.
|
||||
case HVAN_EXPLOSION:
|
||||
@ -2045,7 +2045,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
|
||||
//Disabling skill animation doesn't works on multi-hit.
|
||||
dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion,
|
||||
damage, dmg.div_, skillid, flag&SD_LEVEL?-1:skilllv,
|
||||
(flag&SD_ANIMATION && dmg.div_ < 2?5:type));
|
||||
(flag&SD_ANIMATION && dmg.div_ < 2?5:type), dmg.blewcount);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -5771,7 +5771,7 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
|
||||
if (unit_movepos(src, src->x+dx, src->y+dy, 1, 1))
|
||||
{ //Display movement + animation.
|
||||
clif_slide(src,src->x,src->y);
|
||||
clif_skill_damage(src,target,tick,sd->battle_status.amotion,0,0,1,ud->skillid, ud->skilllv, 5);
|
||||
clif_skill_damage(src,target,tick,sd->battle_status.amotion,0,0,1,ud->skillid, ud->skilllv, 5, 0);
|
||||
}
|
||||
clif_skill_fail(sd,ud->skillid,0,0);
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ static int unit_walktoxy_timer(int tid,unsigned int tick,int id,int data)
|
||||
|
||||
// バシリカ判定
|
||||
|
||||
map_foreachinmovearea(clif_outsight,bl, AREA_SIZE,
|
||||
map_foreachinmovearea(clif_outsight, bl, AREA_SIZE,
|
||||
dx, dy, sd?BL_ALL:BL_PC, bl);
|
||||
|
||||
x += dx;
|
||||
|
Loading…
x
Reference in New Issue
Block a user