diff options
-rw-r--r-- | Changelog-SVN.txt | 2 | ||||
-rw-r--r-- | src/map/skill.c | 39 |
2 files changed, 22 insertions, 19 deletions
diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 4778e345c..b7497c9fd 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,8 @@ Date Added 03/01 + * Effects from dancer/bard skills will stay for 20 seconds after leaving the + skill area [celest] * Fixed /resetstate /resetskill being unuseable at all [celest] * Fixed /mm /mapmove being useable by all players [celest] * Fixed some compile errors in mob_once_spawn [celest] 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) { |