summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-08-20 20:01:07 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-08-20 20:01:07 +0000
commitd0f2d77ed059c68c4b6e6ad599c7e6960fdd269e (patch)
treefa6392e2bede434754e68a5d93295ad4bc7c239a
parent065abbacf70dbc690e76beecc88bdf3faf95d891 (diff)
downloadhercules-d0f2d77ed059c68c4b6e6ad599c7e6960fdd269e.tar.gz
hercules-d0f2d77ed059c68c4b6e6ad599c7e6960fdd269e.tar.bz2
hercules-d0f2d77ed059c68c4b6e6ad599c7e6960fdd269e.tar.xz
hercules-d0f2d77ed059c68c4b6e6ad599c7e6960fdd269e.zip
- @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.
- Some cleanups... git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8383 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--src/map/atcommand.c11
-rw-r--r--src/map/skill.c4
-rw-r--r--src/map/status.c11
4 files changed, 17 insertions, 11 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 5b999490a..f9fe1cd77 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
+ * @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
that Vicious told him the chance was much lower like that) [Skotlex]
* Fixed some Homunc issues with HR servers (capping some values) [Toms]
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 00d051284..31e68c224 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -7547,6 +7547,7 @@ atcommand_useskill(const int fd, struct map_session_data* sd,
const char* command, const char* message)
{
struct map_session_data *pl_sd = NULL;
+ struct block_list *bl;
int skillnum;
int skilllv;
char target[255];
@@ -7562,10 +7563,16 @@ atcommand_useskill(const int fd, struct map_session_data* sd,
return -1;
}
+ 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
+ bl = &sd->bl;
+
if (skill_get_inf(skillnum)&INF_GROUND_SKILL)
- unit_skilluse_pos(&sd->bl, pl_sd->bl.x, pl_sd->bl.y, skillnum, skilllv);
+ unit_skilluse_pos(bl, pl_sd->bl.x, pl_sd->bl.y, skillnum, skilllv);
else
- unit_skilluse_id(&sd->bl, pl_sd->bl.id, skillnum, skilllv);
+ unit_skilluse_id(bl, pl_sd->bl.id, skillnum, skilllv);
return 0;
}
diff --git a/src/map/skill.c b/src/map/skill.c
index a94264530..f69a0dcce 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -5523,8 +5523,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case HAMI_CASTLE: //[orn]
- if (src == bl && sd && sd->hd && merc_is_hom_active(sd->hd)) // (If used with @useskill, put the homunc as dest)
- bl = &sd->hd->bl;
if(rand()%100 < 20*skilllv && src != bl)
{
int x,y;
@@ -5549,7 +5547,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
// Failed
if (hd)
clif_skill_fail(hd->master, skillid, 0, 0);
- else
+ else if (sd)
clif_skill_fail(sd, skillid, 0, 0);
}
break;
diff --git a/src/map/status.c b/src/map/status.c
index 446ed2213..aea2a91dd 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -2220,8 +2220,10 @@ int status_calc_homunculus(struct homun_data *hd, int first)
status->rhw.range = 1 + status->size; //[orn]
status->mode = MD_CANMOVE|MD_CANATTACK|MD_ASSIST|MD_AGGRESSIVE|MD_CASTSENSOR; //[orn]
status->speed = DEFAULT_WALK_SPEED;
- status->def = cap_value(hom->level/10 + status->vit/5, 0, SCHAR_MAX);
- status->mdef = cap_value(hom->level/10 + status->int_/5, 0, SCHAR_MAX);
+ skill = hom->level/10 + status->vit/5;
+ status->def = cap_value(skill, 0, 99);
+ skill = hom->level/10 + status->int_/5;
+ status->mdef = cap_value(skill, 0, 99);
status->hp = 1;
status->sp = 1;
@@ -2243,10 +2245,7 @@ int status_calc_homunculus(struct homun_data *hd, int first)
status->max_hp += skill * 2 * status->max_hp / 100;
if((skill = merc_hom_checkskill(hd->master,HLIF_BRAIN)) > 0)
- {
- int p = 1 +skill/2 -skill/4 +skill/5;
- status->max_sp += p * status->max_sp / 100 ;
- }
+ status->max_sp += (1 +skill/2 -skill/4 +skill/5) * status->max_sp / 100 ;
if (first) {
hd->battle_status.hp = hom->hp ;