diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-10-10 23:47:02 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-10-10 23:47:02 +0000 |
commit | fe433ddb58316dcb2479ff6a2c6ee2546e552e0d (patch) | |
tree | acd6472ecc86287e869ec211965678b3076c6ba1 | |
parent | 0fcaba2722719f7883aaedb8ddb360a527e86b52 (diff) | |
download | hercules-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.txt | 5 | ||||
-rw-r--r-- | src/map/clif.c | 33 | ||||
-rw-r--r-- | src/map/skill.c | 14 |
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: |