diff options
author | celest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2005-03-01 13:36:04 +0000 |
---|---|---|
committer | celest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2005-03-01 13:36:04 +0000 |
commit | 2d6a0efbee3592cbee5df858da70f6652fda086e (patch) | |
tree | 8f1076df797e48b063b131ad28fb6b47b3fa232d /src | |
parent | df34f4498984a4d2d37faebe8809fddcd6f8e475 (diff) | |
download | hercules-2d6a0efbee3592cbee5df858da70f6652fda086e.tar.gz hercules-2d6a0efbee3592cbee5df858da70f6652fda086e.tar.bz2 hercules-2d6a0efbee3592cbee5df858da70f6652fda086e.tar.xz hercules-2d6a0efbee3592cbee5df858da70f6652fda086e.zip |
* Effects from dancer/bard skills will stay for 20 seconds after leaving the skill area
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1196 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/map/skill.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index 58af63888..2c44cda7c 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3279,31 +3279,29 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int break; case MO_ABSORBSPIRITS: // ?奪 i=0; - if(sd && dstsd) { - if(sd == dstsd || map[sd->bl.m].flag.pvp || map[sd->bl.m].flag.gvg) { + if(dstsd) { + if((sd && sd == dstsd) || map[src->m].flag.pvp || map[src->m].flag.gvg) { if(dstsd->spiritball > 0) { clif_skill_nodamage(src,bl,skillid,skilllv,1); i = dstsd->spiritball * 7; pc_delspiritball(dstsd,dstsd->spiritball,0); if(i > 0x7FFF) i = 0x7FFF; - if(sd->status.sp + i > sd->status.max_sp) + if(sd && sd->status.sp + i > sd->status.max_sp) i = sd->status.max_sp - sd->status.sp; - } + } } - }else if(sd && dstmd){ //?象がモンスタ?の場合 + } else if (dstmd){ //?象がモンスタ?の場合 //20%の確率で?象のLv*2のSPを回復する。成功したときはタ?ゲット(σ?Д?)σ????!! if(rand()%100<20){ i=2*mob_db[dstmd->class_].lv; mob_target(dstmd,src,0); } } - if(i){ - sd->status.sp += i; - clif_heal(sd->fd,SP_SP,i); - } - else - clif_skill_nodamage(src,bl,skillid,skilllv,0); + if(i && sd){ + sd->status.sp += i; + clif_heal(sd->fd,SP_SP,i); + } else clif_skill_nodamage(src,bl,skillid,skilllv,0); break; case AC_MAKINGARROW: /* 矢作成 */ @@ -5688,11 +5686,17 @@ int skill_unit_onout(struct skill_unit *src,struct block_list *bl,unsigned int t case 0x9e: /* 子守唄 */ case 0x9f: /* ニヨルドの宴 */ case 0xa0: /* 永遠の混沌 */ - case 0xa1: /* ?太鼓の響き */ - case 0xa2: /* ニ?ベルングの指輪 */ + case 0xa1: /* 戦太鼓の響き */ + case 0xa2: /* ニーベルングの指輪 */ case 0xa3: /* ロキの叫び */ case 0xa4: /* 深淵の中に */ - case 0xa5: /* 不死身のジ?クフリ?ド */ + case 0xa5: /* 不死身のジークフリード */ + case 0xad: /* 私を忘れないで… */ + if (sc_data[type].timer!=-1 && sc_data[type].val4==(int)src) { + status_change_end(bl,type,-1); + } + break; + case 0xa6: /* 不協和音 */ case 0xa7: /* 口笛 */ case 0xa8: /* 夕陽のアサシンクロス */ @@ -5700,13 +5704,10 @@ int skill_unit_onout(struct skill_unit *src,struct block_list *bl,unsigned int t case 0xaa: /* イドゥンの林檎 */ case 0xab: /* 自分勝手なダンス */ case 0xac: /* ハミング */ - case 0xad: /* 私を忘れないで… */ case 0xae: /* 幸運のキス */ case 0xaf: /* サ?ビスフォ?ユ? */ - if (sc_data[type].timer!=-1 && sc_data[type].val4==(int)src) { - status_change_end(bl,type,-1); - } - break; + status_change_start(bl,SkillStatusChangeTable[sg->skill_id],sg->skill_lv,0,0,0,20000,0 ); + break; case 0xb4: // Basilica if (sc_data[type].timer!=-1 && sc_data[type].val4==(int)sg) { |