From 1b7a54c893ac97b20a227bf090ebbe50e668f8ac Mon Sep 17 00:00:00 2001 From: skotlex Date: Fri, 30 Jun 2006 13:53:13 +0000 Subject: [PATCH] - Moved item group enumeration from itemdb.h to map.h - Cleanup in itemheal related code, fixed the item heal group bonus not working on Groups beyond 7. - Fixed pet's loot not being moved to your inventory on logout. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7419 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 4 ++++ src/map/itemdb.h | 39 --------------------------------------- src/map/map.h | 42 +++++++++++++++++++++++++++++++++++++++++- src/map/pc.c | 16 +++++++++------- src/map/pc.h | 2 +- src/map/script.c | 7 +++++-- src/map/unit.c | 1 + 7 files changed, 61 insertions(+), 50 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 64c729717e..e5363ac31f 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,10 @@ 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/05/30 + * Cleanup in itemheal related code, fixed the item heal group bonus not + working on Groups beyond 7. [Skotlex] + * Fixed pet's loot not being moved to your inventory on logout. [Skotlex] 2006/05/29 * Made the map server send list of characters online to the char-server on reconnection regardless of "kick_on_disconnect" setting, as otherwise, a diff --git a/src/map/itemdb.h b/src/map/itemdb.h index 5c7ef4240f..fd3c5191f2 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -59,45 +59,6 @@ struct item_group { int id[30]; // 120 bytes }; -enum { - IG_BLUEBOX=1, - IG_VIOLETBOX, //2 - IG_CARDALBUM, //3 - IG_GIFTBOX, //4 - IG_SCROLLBOX, //5 - IG_FINDINGORE, //6 - IG_COOKIEBAG, //7 - IG_POTION, //8 - IG_HERBS, //9 - IG_FRUITS, //10 - IG_MEAT, //11 - IG_CANDY, //12 - IG_JUICE, //13 - IG_FISH, //14 - IG_BOXES, //15 - IG_GEMSTONE, //16 - IG_JELLOPY, //17 - IG_ORE, //18 - IG_FOOD, //19 - IG_RECOVERY, //20 - IG_MINERALS, //21 - IG_TAMING, //22 - IG_SCROLLS, //23 - IG_QUIVERS, //24 - IG_MASKS, //25 - IG_ACCESORY, //26 - IG_JEWELS, //27 - IG_GIFTBOX_1, //28 - IG_GIFTBOX_2, //29 - IG_GIFTBOX_3, //30 - IG_GIFTBOX_4, //31 - IG_EGGBOY, //32 - IG_EGGGIRL, //33 - IG_GIFTBOXCHINA, //34 - IG_LOTTOBOX, //35 - MAX_ITEMGROUP, -} item_group_list; - struct item_data* itemdb_searchname(const char *name); int itemdb_searchname_array(struct item_data** data, int size, const char *str); struct item_data* itemdb_load(int nameid); diff --git a/src/map/map.h b/src/map/map.h index 7a8b99f334..da8b1c7157 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -216,6 +216,46 @@ enum { ELE_MAX }; +enum { + IG_BLUEBOX=1, + IG_VIOLETBOX, //2 + IG_CARDALBUM, //3 + IG_GIFTBOX, //4 + IG_SCROLLBOX, //5 + IG_FINDINGORE, //6 + IG_COOKIEBAG, //7 + IG_POTION, //8 + IG_HERBS, //9 + IG_FRUITS, //10 + IG_MEAT, //11 + IG_CANDY, //12 + IG_JUICE, //13 + IG_FISH, //14 + IG_BOXES, //15 + IG_GEMSTONE, //16 + IG_JELLOPY, //17 + IG_ORE, //18 + IG_FOOD, //19 + IG_RECOVERY, //20 + IG_MINERALS, //21 + IG_TAMING, //22 + IG_SCROLLS, //23 + IG_QUIVERS, //24 + IG_MASKS, //25 + IG_ACCESORY, //26 + IG_JEWELS, //27 + IG_GIFTBOX_1, //28 + IG_GIFTBOX_2, //29 + IG_GIFTBOX_3, //30 + IG_GIFTBOX_4, //31 + IG_EGGBOY, //32 + IG_EGGGIRL, //33 + IG_GIFTBOXCHINA, //34 + IG_LOTTOBOX, //35 + MAX_ITEMGROUP, +} item_group_list; + + struct block_list { struct block_list *next,*prev; int id; @@ -587,7 +627,7 @@ struct map_session_data { int magic_addsize[3]; int critaddrace[RC_MAX]; int expaddrace[RC_MAX]; - int itemhealrate[7]; + int itemhealrate[MAX_ITEMGROUP]; int addeff3[SC_COMMON_MAX-SC_COMMON_MIN+1]; short addeff3_type[SC_COMMON_MAX-SC_COMMON_MIN+1]; short sp_gain_race[RC_MAX]; diff --git a/src/map/pc.c b/src/map/pc.c index 4f153252ef..606d85f88d 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2131,8 +2131,12 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) sd->subrace2[type2]+=val; break; case SP_ADD_ITEM_HEAL_RATE: - if(sd->state.lr_flag != 2) - sd->itemhealrate[type2 - 1] += val; + if(sd->state.lr_flag == 2) + break; + if (type2 < MAX_ITEMGROUP) + sd->itemhealrate[type2] += val; + else + ShowWarning("pc_bonus2: AddItemHealRate: Group %d is beyond limit (%d).\n", type2, MAX_ITEMGROUP); break; case SP_EXP_ADDRACE: if(sd->state.lr_flag != 2) @@ -5225,20 +5229,18 @@ void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int ty * HP/SP‰ñ•œ *------------------------------------------ */ -int pc_itemheal(struct map_session_data *sd,int hp,int sp) +int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) { int bonus, type; - nullpo_retr(0, sd); - if(hp) { bonus = 100 + (sd->battle_status.vit<<1) + pc_checkskill(sd,SM_RECOVERY)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5; // A potion produced by an Alchemist in the Fame Top 10 gets +50% effect [DracoRPG] bonus += (potion_flag==2)?50:(potion_flag==3?100:0); - if ((type = itemdb_group(sd->itemid)) > 0 && type <= 7) - bonus = bonus * (100+sd->itemhealrate[type - 1]) / 100; + if ((type = itemdb_group(itemid)) > 0 && type < MAX_ITEMGROUP && sd->itemhealrate[type]) + bonus += bonus * sd->itemhealrate[type] / 100; if(bonus!=100) hp = hp * bonus / 100; } diff --git a/src/map/pc.h b/src/map/pc.h index 47dd0b4aa4..94613d1142 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -156,7 +156,7 @@ void pc_damage(struct map_session_data *sd,struct block_list *src,unsigned int h int pc_dead(struct map_session_data *sd,struct block_list *src); void pc_revive(struct map_session_data *sd,unsigned int hp, unsigned int sp); void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int type); -int pc_itemheal(struct map_session_data *sd,int hp,int sp); +int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp); int pc_percentheal(struct map_session_data *sd,int,int); int pc_jobchange(struct map_session_data *,int, int); int pc_setoption(struct map_session_data *,int); diff --git a/src/map/script.c b/src/map/script.c index 21fe6dab5f..c442f210f6 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -3343,6 +3343,7 @@ int buildin_heal(struct script_state *st) */ int buildin_itemheal(struct script_state *st) { + struct map_session_data *sd; int hp,sp; hp=conv_num(st,& (st->stack->stack_data[st->start+2])); @@ -3353,8 +3354,10 @@ int buildin_itemheal(struct script_state *st) potion_sp = sp; return 0; } - - pc_itemheal(script_rid2sd(st),hp,sp); + + sd = script_rid2sd(st); + if (!sd) return 0; + pc_itemheal(sd,sd->itemid,hp,sp); return 0; } /*========================================== diff --git a/src/map/unit.c b/src/map/unit.c index 5137d5f71b..304160fe8a 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1658,6 +1658,7 @@ int unit_free(struct block_list *bl) { } if (pd->loot) { + pet_lootitem_drop(pd,sd); if (pd->loot->item) aFree(pd->loot->item); aFree (pd->loot);