From e67db33d16f6923d1708a63e4ab6a4931a1fa6cc Mon Sep 17 00:00:00 2001 From: toms Date: Sun, 20 Aug 2006 20:24:13 +0000 Subject: [PATCH] - Added clif_skill_fail for homunc to skill_castend_id & skill_castend_pos ('skill has failed' will may be appear 2 times) - Fixed homunc skill 8016 not considered as homunc skill git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8386 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 2 ++ src/map/atcommand.c | 4 ++-- src/map/clif.c | 2 +- src/map/skill.c | 17 +++++++++++++---- src/map/unit.c | 4 ++-- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index f9fe1cd77b..7a109ab329 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,8 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/08/20 + * Added clif_skill_fail for homunc to skill_castend_id & skill_castend_pos [Toms] + * Fixed homunc skill 8016 not considered as homunc skill [Toms] * @useskill will now cause your homun to use the skill instead of you if the skill is a Homun skill and you have an active homunculus. [Skotlex] * Reduced the Success Chance of GS_FLING to 10+10*lv% (Playtester told me diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 31e68c224c..1ba9e620df 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -7563,7 +7563,7 @@ atcommand_useskill(const int fd, struct map_session_data* sd, return -1; } - if (skillnum >= HM_SKILLBASE && skillnum < HM_SKILLBASE+MAX_HOMUNSKILL + if (skillnum >= HM_SKILLBASE && skillnum <= HM_SKILLBASE+MAX_HOMUNSKILL && sd->hd && merc_is_hom_active(sd->hd)) // (If used with @useskill, put the homunc as dest) bl = &sd->hd->bl; else @@ -9867,7 +9867,7 @@ int atcommand_homfriendly( return -1; friendly = atoi(message); - if (sd->status.hom_id > 0 && sd->hd) { + if (merc_is_hom_active(sd->hd)) { if (friendly > 0 && friendly <= 1000) { sd->homunculus.intimacy = friendly * 100 ; clif_send_homdata(sd,SP_INTIMATE,friendly); diff --git a/src/map/clif.c b/src/map/clif.c index 295de5a150..64411d5bf5 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9754,7 +9754,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) { //Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex] sd->idletime = last_tick; - if (skillnum >= HM_SKILLBASE && skillnum < HM_SKILLBASE+MAX_HOMUNSKILL) { + if (skillnum >= HM_SKILLBASE && skillnum <= HM_SKILLBASE+MAX_HOMUNSKILL) { clif_parse_UseSkillToId_homun(sd->hd, sd, tick, skillnum, skilllv, target_id); return; } diff --git a/src/map/skill.c b/src/map/skill.c index f69a0dcce6..8e2c9e44af 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5814,13 +5814,19 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data) 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_fail(sd,ud->skillid,0,0); } } ud->skillid = ud->skilllv = ud->skilltarget = 0; ud->canact_tick = tick; - if(sd) sd->skillitem = sd->skillitemlv = -1; - if(md) md->skillidx = -1; + if(sd) + { + sd->skillitem = sd->skillitemlv = -1; + clif_skill_fail(sd, ud->skillid, 0, 0); + } + else if (hd) + clif_skill_fail(hd->master, ud->skillid, 0, 0); + else if(md) + md->skillidx = -1; return 0; } @@ -5935,7 +5941,10 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data) clif_skill_fail(sd,ud->skillid,0,0); sd->skillitem = sd->skillitemlv = -1; } - if(md) md->skillidx = -1; + else if (hd) + clif_skill_fail(hd->master, ud->skillid, 0, 0); + else if(md) + md->skillidx = -1; return 0; } diff --git a/src/map/unit.c b/src/map/unit.c index 3defad727a..e042444696 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -733,9 +733,9 @@ int unit_skilluse_id2(struct block_list *src, int target_id, int skill_num, int if(status_isdead(src)) return 0; // 死んでいないか - if( BL_CAST( BL_PC, src, sd ) ) { + if( BL_CAST( BL_PC, src, sd ) ) ud = &sd->ud; - } else + else ud = unit_bl2ud(src); if(ud == NULL) return 0;