From 0ec8a5b6c57950ced064d1cb4f65a9cf5c62f5f8 Mon Sep 17 00:00:00 2001 From: lemongrass3110 Date: Wed, 20 Feb 2013 18:08:17 +0000 Subject: [PATCH] Fixes homunculus level up crashing the map server. bugreport:7106 git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17147 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/atcommand.c | 4 +++- src/map/homunculus.c | 16 ++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 190277a170..4ed2a0e55d 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6904,7 +6904,9 @@ ACMD_FUNC(homlevel) for (i = 1; i <= level && hd->exp_next; i++){ hd->homunculus.exp += hd->exp_next; - merc_hom_levelup(hd); + if( !merc_hom_levelup(hd) ){ + break; + } } status_calc_homunculus(hd,0); status_percent_heal(&hd->bl, 100, 100); diff --git a/src/map/homunculus.c b/src/map/homunculus.c index 0f033ded22..4cf17e722c 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -501,12 +501,13 @@ int merc_hom_gainexp(struct homun_data *hd,int exp) return 0; } - //levelup - do - { - merc_hom_levelup(hd) ; + // Do the levelup(s) + while( hd->homunculus.exp > hd->exp_next ){ + // Max level reached or error + if( !merc_hom_levelup(hd) ){ + break; + } } - while(hd->homunculus.exp > hd->exp_next && hd->exp_next != 0 ); if( hd->exp_next == 0 ) hd->homunculus.exp = 0 ; @@ -999,7 +1000,10 @@ int merc_hom_shuffle(struct homun_data *hd) //Level it back up for (i = 1; i < lv && hd->exp_next; i++){ hd->homunculus.exp += hd->exp_next; - merc_hom_levelup(hd); + // Should never happen, but who knows + if( !merc_hom_levelup(hd) ){ + break; + } } if(hd->homunculus.class_ == hd->homunculusDB->evo_class) {