summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-10-10 23:47:02 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-10-10 23:47:02 +0000
commitfe433ddb58316dcb2479ff6a2c6ee2546e552e0d (patch)
treeacd6472ecc86287e869ec211965678b3076c6ba1
parent0fcaba2722719f7883aaedb8ddb360a527e86b52 (diff)
downloadhercules-fe433ddb58316dcb2479ff6a2c6ee2546e552e0d.tar.gz
hercules-fe433ddb58316dcb2479ff6a2c6ee2546e552e0d.tar.bz2
hercules-fe433ddb58316dcb2479ff6a2c6ee2546e552e0d.tar.xz
hercules-fe433ddb58316dcb2479ff6a2c6ee2546e552e0d.zip
* Implemented more official Warp Portal behavior
- the transition from active to waiting mode is now done as a simple appearance change instead of deleting one and creating the other - due to the above, an opening warp is now properly accompanied by the log-in like sound effect git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11404 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt5
-rw-r--r--src/map/clif.c33
-rw-r--r--src/map/skill.c14
3 files changed, 30 insertions, 22 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 93a6e18d2..f0f2efa54 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -7,6 +7,11 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
* Fixed itemdb_read_sqldb blowing up the server with segmentation faults.
* Added an option for parse_script to ignore the checks for the set of
brackets around the script. [FlavioJS]
+ * Implemented more official Warp Portal behavior
+ - the transition from active to waiting mode is now done as a simple
+ appearance change instead of deleting one and creating the other
+ - due to the above, an opening warp is now properly accompanied by
+ the log-in like sound effect
* Re-enabled packet 0x1ac to be sent when something gets ankle-snared
* Partially removed the usage of 'flags' to direct the execution path
in skill unit code (some people seem to really like flags >_>)
diff --git a/src/map/clif.c b/src/map/clif.c
index ba0c0ad6f..d6cb74288 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -2632,17 +2632,19 @@ int clif_changestatus(struct block_list *bl,int type,int val)
/*==========================================
*
*------------------------------------------*/
-int clif_changelook(struct block_list *bl,int type,int val)
+void clif_changelook(struct block_list *bl,int type,int val)
{
- unsigned char buf[32];
- struct map_session_data *sd = NULL;
- struct view_data *vd;
- vd = status_get_viewdata(bl);
- nullpo_retr(0, vd);
+ unsigned char buf[16];
+ struct map_session_data* sd = NULL;
+ struct view_data* vd;
+ nullpo_retv(bl);
BL_CAST(BL_PC, bl, sd);
-
- switch(type) {
+ vd = status_get_viewdata(bl);
+ //nullpo_ret(vd);
+ if( vd ) //temp hack to let Warp Portal change appearance
+ switch(type)
+ {
case LOOK_WEAPON:
if (sd)
{
@@ -2710,6 +2712,7 @@ int clif_changelook(struct block_list *bl,int type,int val)
//Shoes? No packet uses this....
break;
}
+
#if PACKETVER < 4
WBUFW(buf,0)=0xc3;
WBUFL(buf,2)=bl->id;
@@ -2717,25 +2720,19 @@ int clif_changelook(struct block_list *bl,int type,int val)
WBUFB(buf,7)=val;
clif_send(buf,packet_len(0xc3),bl,AREA);
#else
+ WBUFW(buf,0)=0x1d7;
+ WBUFL(buf,2)=bl->id;
if(type == LOOK_WEAPON || type == LOOK_SHIELD) {
- WBUFW(buf,0)=0x1d7;
- WBUFL(buf,2)=bl->id;
WBUFB(buf,6)=LOOK_WEAPON;
WBUFW(buf,7)=vd->weapon;
WBUFW(buf,9)=vd->shield;
- clif_send(buf,packet_len(0x1d7),bl,AREA);
- }
- else
- {
- WBUFW(buf,0)=0x1d7;
- WBUFL(buf,2)=bl->id;
+ } else {
WBUFB(buf,6)=type;
WBUFW(buf,7)=val;
WBUFW(buf,9)=0;
- clif_send(buf,packet_len(0x1d7),bl,AREA);
}
+ clif_send(buf,packet_len(0x1d7),bl,AREA);
#endif
- return 0;
}
//Sends a change-base-look packet required for traps as they are triggered.
diff --git a/src/map/skill.c b/src/map/skill.c
index dc26db4ab..00b9a49d7 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -7041,9 +7041,9 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
group->limit = unit->limit;
}
+ // execute on all targets standing on this cell
if (range==0 && active_flag)
- map_foreachincell(skill_unit_effect,unit->bl.m,
- unit->bl.x,unit->bl.y,group->bl_flag,&unit->bl,gettick(),1);
+ map_foreachincell(skill_unit_effect,unit->bl.m, unit->bl.x,unit->bl.y,group->bl_flag,&unit->bl,gettick(),1);
}
}
@@ -10262,8 +10262,14 @@ int skill_unit_timer_sub (struct block_list* bl, va_list ap)
break;
case UNT_WARP_ACTIVE:
- skill_unitsetting(&unit->bl,group->skill_id,group->skill_lv,unit->bl.x,unit->bl.y,1);
- skill_delunit(unit);
+ // warp portal opens (morph to a UNT_WARP_WAITING cell)
+ group->unit_id = UNT_WARP_WAITING;
+ clif_changelook(&unit->bl, LOOK_BASE, group->unit_id);
+ // restart timers
+ group->limit = skill_get_time(group->skill_id,group->skill_lv);
+ unit->limit = skill_get_time(group->skill_id,group->skill_lv);
+ // apply effect to all units standing on it
+ map_foreachincell(skill_unit_effect,unit->bl.m,unit->bl.x,unit->bl.y,group->bl_flag,&unit->bl,gettick(),1);
break;
case UNT_CALLFAMILY: