- 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:
skotlex 2006-12-12 14:53:53 +00:00
parent 04b76739c4
commit 84f8ec45d5
6 changed files with 34 additions and 20 deletions

View File

@ -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

View File

@ -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)) {

View File

@ -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);

View File

@ -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);

View File

@ -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);
}

View File

@ -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;