summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-08-31 16:09:50 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-08-31 16:09:50 +0000
commit693613de2eda402fe459809cbe7ea22cbd052218 (patch)
tree8f4da46add7a622825742986fcb055ff0a0374a3
parent0415b6b6e9ca2a6d08d38fd811e21ffb641a9265 (diff)
downloadhercules-693613de2eda402fe459809cbe7ea22cbd052218.tar.gz
hercules-693613de2eda402fe459809cbe7ea22cbd052218.tar.bz2
hercules-693613de2eda402fe459809cbe7ea22cbd052218.tar.xz
hercules-693613de2eda402fe459809cbe7ea22cbd052218.zip
- Modified the error reporting in map_freeblock_unlock so that when there's an error, the reported line number is the file's linenumber plus the object's type *10000. This is for debug information to help track down the already-freed error.
- pc_adopt will now preserve the kid's job/job-level/experience. This means that if you adopt a Swordman level 45, it will become a baby-swordman level 45, with the exact same exp as before. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8563 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt7
-rw-r--r--src/map/map.c3
-rw-r--r--src/map/pc.c16
3 files changed, 23 insertions, 3 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index a12942bb0..f3bb04931 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,13 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/08/31
+ * Modified the error reporting in map_freeblock_unlock so that when there's
+ an error, the reported line number is the file's linenumber plus the
+ object's type *10000. This is for debug information to help track down the
+ already-freed error. [Skotlex]
+ * pc_adopt will now preserve the kid's job/job-level/experience. This means
+ that if you adopt a Swordman level 45, it will become a baby-swordman level
+ 45, with the exact same exp as before. [Skotlex]
* Fixed new mob's name not sent to the client when the mob is morphed [Toms]
* Added setting attack_walk_delay which specifies whether a character
should (or not) be able to move inmediately after starting a normal attack
diff --git a/src/map/map.c b/src/map/map.c
index 584415ef5..cd70167bd 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -296,7 +296,8 @@ int map_freeblock_unlock_sub(char *file, int lineno)
for (i = 0; i < block_free_count; i++)
{ //Directly calling aFree shouldn't be a leak, as Free remembers the size the original pointed to memory was allocated with? [Skotlex]
// aFree(block_free[i]);
- _mfree(block_free[i], file, lineno, __func__);
+// _mfree(block_free[i], file, lineno, __func__);
+ _mfree(block_free[i], file, block_free[i]->type*100000+lineno, __func__);
block_free[i] = NULL;
}
block_free_count = 0;
diff --git a/src/map/pc.c b/src/map/pc.c
index 5516b51ab..af8aab4a2 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -6677,7 +6677,8 @@ int pc_divorce(struct map_session_data *sd)
*/
int pc_adoption(struct map_session_data *sd,struct map_session_data *dstsd, struct map_session_data *jasd)
{
- int j;
+ int j,level, job;
+ unsigned int exp;
if (sd == NULL || dstsd == NULL || jasd == NULL ||
sd->status.partner_id <= 0 || dstsd->status.partner_id <= 0 ||
sd->status.partner_id != dstsd->status.char_id || dstsd->status.partner_id != sd->status.char_id ||
@@ -6692,8 +6693,19 @@ int pc_adoption(struct map_session_data *sd,struct map_session_data *dstsd, stru
if(jasd->status.inventory[j].nameid>0 && jasd->status.inventory[j].equip!=0)
pc_unequipitem(jasd, j, 3);
}
- if (pc_jobchange(jasd, 4023, 0) == 0)
+
+ //Preserve level and exp.
+ level = jasd->status.job_level;
+ exp = jasd->status.job_exp;
+ job = jasd->class_|JOBL_BABY; //Preserve current Job by babyfying it. [Skotlex]
+ job = pc_mapid2jobid(job, jasd->status.sex);
+ if (job != -1 && pc_jobchange(jasd, job, 0) == 0)
{ //Success, and give Junior the Baby skills. [Skotlex]
+ //Restore job level and experience.
+ jasd->status.job_level = level;
+ jasd->status.job_exp = exp;
+ clif_updatestatus(jasd,SP_JOBLEVEL);
+ clif_updatestatus(jasd,SP_JOBEXP);
pc_skill(jasd,WE_BABY,1,0);
pc_skill(jasd,WE_CALLPARENT,1,0);
clif_displaymessage(jasd->fd, msg_txt(12)); // Your job has been changed.