summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-08-30 04:39:59 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-08-30 04:39:59 +0000
commit8ec06e1832af8a2f68bd8d79b7ade09d861a2dea (patch)
tree825a318c8d4496eafa5af8edb785700fee0babbc /src
parentd35ff1c213b7d77cc45c037e950a180c08279cd6 (diff)
downloadhercules-8ec06e1832af8a2f68bd8d79b7ade09d861a2dea.tar.gz
hercules-8ec06e1832af8a2f68bd8d79b7ade09d861a2dea.tar.bz2
hercules-8ec06e1832af8a2f68bd8d79b7ade09d861a2dea.tar.xz
hercules-8ec06e1832af8a2f68bd8d79b7ade09d861a2dea.zip
- Cleaned up a bit the homunculus evolution code, and fixed homevolution allowing the homunc to 're-evolve' even though it was already evolved.
- Optimized a bit the skillheal code in regards to Apple of Idun and Sanctuary git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11090 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/atcommand.c5
-rw-r--r--src/map/charcommand.c26
-rw-r--r--src/map/mercenary.c4
-rw-r--r--src/map/script.c6
-rw-r--r--src/map/skill.c12
5 files changed, 22 insertions, 31 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index b57f2bd75..aa6931d74 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -8307,11 +8307,8 @@ int atcommand_homevolution(const int fd, struct map_session_data* sd, const char
return -1;
}
- if (sd->hd->homunculusDB->evo_class)
- {
- merc_hom_evolution(sd->hd) ;
+ if ( merc_hom_evolution(sd->hd) )
return 0;
- }
clif_displaymessage(fd, "Your homunculus doesn't evolve.");
return -1;
diff --git a/src/map/charcommand.c b/src/map/charcommand.c
index 9154048ac..505bf3d37 100644
--- a/src/map/charcommand.c
+++ b/src/map/charcommand.c
@@ -3755,24 +3755,20 @@ int charcommand_homevolution(const int fd, struct map_session_data* sd, const ch
return -1;
}
- if (pl_sd->hd)
- {
- if (pl_sd->hd->homunculusDB->evo_class)
- {
- merc_hom_evolution(pl_sd->hd);
- clif_displaymessage(pl_sd->fd, "Homunculus evolution initiated.");
- if (pl_sd->fd != fd)
- clif_displaymessage(fd, "Homunculus evolution initiated.");
- return 0;
- }
- clif_displaymessage(fd, "Target homunculus cannot evolve.");
+ if ( !merc_is_hom_active(pl_sd->hd) ) {
+ clif_displaymessage(fd, "Target player does not have a homunculus.");
return -1;
}
- else
- {
- clif_displaymessage(fd, "Target player does not have a homunculus.");
+
+ if ( !merc_hom_evolution(pl_sd->hd) ) {
+ clif_displaymessage(fd, "Target homunculus cannot evolve.");
+ return -1;
}
- return -1;
+
+ clif_displaymessage(pl_sd->fd, "Homunculus evolution initiated.");
+ if (pl_sd->fd != fd)
+ clif_displaymessage(fd, "Homunculus evolution initiated.");
+ return 0;
}
/*==========================================
diff --git a/src/map/mercenary.c b/src/map/mercenary.c
index 8dd63724f..577cbf22b 100644
--- a/src/map/mercenary.c
+++ b/src/map/mercenary.c
@@ -289,7 +289,7 @@ int merc_hom_evolution(struct homun_data *hd)
struct map_session_data *sd;
nullpo_retr(0, hd);
- if(!hd->homunculusDB->evo_class)
+ if(!hd->homunculusDB->evo_class || hd->homunculus.class_ == hd->homunculusDB->evo_class)
{
clif_emotion(&hd->bl, 4) ; //swt
return 0 ;
@@ -297,12 +297,12 @@ int merc_hom_evolution(struct homun_data *hd)
sd = hd->master;
if (!sd)
return 0;
-
if (!merc_hom_change_class(hd, hd->homunculusDB->evo_class)) {
ShowError("merc_hom_evolution: Can't evolve homunc from %d to %d", hd->homunculus.class_, hd->homunculusDB->evo_class);
return 0;
}
+
//Apply evolution bonuses
hom = &hd->homunculus;
max = &hd->homunculusDB->emax;
diff --git a/src/map/script.c b/src/map/script.c
index 86019c40e..31fba0429 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -8737,10 +8737,8 @@ BUILDIN_FUNC(homunculus_evolution)
{
TBL_PC *sd;
sd=script_rid2sd(st);
- if ( sd->hd && sd->hd->homunculusDB->evo_class && sd->hd->homunculus.intimacy > 91000 ) {
- return !merc_hom_evolution(sd->hd) ;
- }
- clif_emotion(&sd->hd->bl, 4) ; //swt
+ if(merc_is_hom_active(sd->hd))
+ merc_hom_evolution(sd->hd);
return 0;
}
diff --git a/src/map/skill.c b/src/map/skill.c
index 339525d93..daf55d9be 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -6702,6 +6702,8 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
case NPC_EVILLAND:
val1=(skilllv+3)*2;
val2=(skilllv>6)?(skillid == PR_SANCTUARY?777:666):skilllv*100;
+ if (sd && (i = pc_skillheal_bonus(sd, skillid)))
+ val2 += val2 * i / 100;
break;
case WZ_FIREPILLAR:
@@ -6807,6 +6809,8 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
if(sd){
val1 += pc_checkskill(sd,BA_MUSICALLESSON);
val2 += 5*pc_checkskill(sd,BA_MUSICALLESSON);
+ if ((i = pc_skillheal_bonus(sd, skillid)))
+ val2 += val2 * i / 100;
}
break;
case DC_SERVICEFORYOU:
@@ -7269,9 +7273,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
int heal = sg->val2;
if (tstatus->hp >= tstatus->max_hp)
break;
- if (sd && (type = pc_skillheal_bonus(sd, sg->skill_id)))
- heal += heal * type / 100;
- if (tsc && tsc->count && tsc->data[SC_CRITICALWOUND].timer!=-1)
+ if (tsc && tsc->data[SC_CRITICALWOUND].timer!=-1)
heal -= heal * tsc->data[SC_CRITICALWOUND].val2 / 100;
if (status_isimmune(bl))
heal = 0; /* 黄金蟲カード(ヒール量0) */
@@ -7449,9 +7451,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
if (sg->src_id == bl->id)
break;
heal = sg->val2;
- if (sd && (type = pc_skillheal_bonus(sd, sg->skill_id)))
- heal += heal * type / 100;
- if(tsc && tsc->count && tsc->data[SC_CRITICALWOUND].timer!=-1)
+ if(tsc && tsc->data[SC_CRITICALWOUND].timer!=-1)
heal -= heal * tsc->data[SC_CRITICALWOUND].val2 / 100;
clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
status_heal(bl, heal, 0, 0);