diff options
author | Jesusaves <cpntb1@ymail.com> | 2019-10-17 13:20:55 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2019-10-17 13:20:55 -0300 |
commit | b972376c3cd817d915e4a15cab84e46992a8d5a2 (patch) | |
tree | c47be7ef1c5704414bb87701a1559fdedf9df9a4 /src | |
parent | c3bdfce989c9964dc1ba3688f35dc2fb8b8a84ac (diff) | |
download | evol-hercules-b972376c3cd817d915e4a15cab84e46992a8d5a2.tar.gz evol-hercules-b972376c3cd817d915e4a15cab84e46992a8d5a2.tar.bz2 evol-hercules-b972376c3cd817d915e4a15cab84e46992a8d5a2.tar.xz evol-hercules-b972376c3cd817d915e4a15cab84e46992a8d5a2.zip |
Fix the mage set and the quiver bug, hopefully without introducing a new one.
If you reset status, you'll be able to be equipping an item you otherwise
wouldn't be able to. That allows you to circumvent stat restrictions.
Option for Atk, MAtk, Def and MDef requeriments were removed. Only base stat counts.
Diffstat (limited to 'src')
-rw-r--r-- | src/emap/init.c | 1 | ||||
-rw-r--r-- | src/emap/pc.c | 65 | ||||
-rw-r--r-- | src/emap/pc.h | 4 |
3 files changed, 47 insertions, 23 deletions
diff --git a/src/emap/init.c b/src/emap/init.c index aa928c3..35eb76a 100644 --- a/src/emap/init.c +++ b/src/emap/init.c @@ -298,6 +298,7 @@ HPExport void plugin_init (void) addHookPre(pc, resetskill_job, epc_resetskill_job_pre); addHookPre(pc, isDeathPenaltyJob, epc_isDeathPenaltyJob_pre); addHookPre(pc, read_skill_job_skip, epc_read_skill_job_skip_pre); + addHookPre(pc, equipitem, epc_equipitem_pre); addHookPre(mob, deleteslave_sub, emob_deleteslave_sub_pre); addHookPre(mob, read_db_additional_fields, emob_read_db_additional_fields_pre); addHookPre(mob, dead, emob_dead_pre); diff --git a/src/emap/pc.c b/src/emap/pc.c index 011743e..0a3d1ce 100644 --- a/src/emap/pc.c +++ b/src/emap/pc.c @@ -15,6 +15,7 @@ #include "common/strlib.h" #include "common/timer.h" #include "map/achievement.h" +#include "map/clif.h" #include "map/chrif.h" #include "map/homunculus.h" #include "map/elemental.h" @@ -293,29 +294,6 @@ int epc_isequip_post(int retVal, if (!data) return retVal; - // test for missing basic stats calculation - if (sd->regen.sregen == NULL) - { - return retVal; - } - if (sd->battle_status.str < data->requiredStr || - sd->battle_status.agi < data->requiredAgi || - sd->battle_status.vit < data->requiredVit || - sd->battle_status.int_ < data->requiredInt || - sd->battle_status.dex < data->requiredDex || - sd->battle_status.luk < data->requiredLuk || - sd->battle_status.max_hp < data->requiredMaxHp || - sd->battle_status.max_sp < data->requiredMaxSp || - sd->battle_status.batk < data->requiredAtk || - sd->battle_status.matk_min < data->requiredMAtkMin || - sd->battle_status.matk_max < data->requiredMAtkMax || - sd->battle_status.def < data->requiredDef || - sd->battle_status.mdef < data->requiredMDef || - (data->requiredSkill && !pc->checkskill(sd, data->requiredSkill)) - ) - { - return 0; - } } return retVal; } @@ -1064,6 +1042,47 @@ void epc_calc_skilltree_clear_pre(struct map_session_data **sdPtr) hookStop(); } +// Required Stats +int epc_equipitem_pre(struct map_session_data **sdPtr, + int *nPtr, + int *req_pos __attribute__ ((unused))) +{ + struct map_session_data *sd = *sdPtr; + if (!sd) + return 1; + + const int n = *nPtr; + + if (n < 0 || n >= sd->status.inventorySize) + return 1; + + struct item_data *id; + id = sd->inventory_data[n]; + struct ItemdExt *data = itemd_get(id); + + if (!data) + return 1; + + if (sd->status.str < data->requiredStr || + sd->status.agi < data->requiredAgi || + sd->status.vit < data->requiredVit || + sd->status.int_ < data->requiredInt || + sd->status.dex < data->requiredDex || + sd->status.luk < data->requiredLuk || + sd->status.max_hp < data->requiredMaxHp || + sd->status.max_sp < data->requiredMaxSp || + (data->requiredSkill && !pc->checkskill(sd, data->requiredSkill)) + ) + { + clif->equipitemack(sd,n,0,EIA_FAIL); // fail + hookStop(); + return 0; + } + + // Okay, continue... + return 0; +} + // disable job based bonuses void epc_calc_skilltree_bonus_pre(struct map_session_data **sdPtr __attribute__ ((unused)), int *classidxPtr __attribute__ ((unused))) diff --git a/src/emap/pc.h b/src/emap/pc.h index d5c59bf..faefd82 100644 --- a/src/emap/pc.h +++ b/src/emap/pc.h @@ -144,4 +144,8 @@ bool epc_isDeathPenaltyJob_pre(uint16 *jobPtr); bool epc_read_skill_job_skip_pre(short *skill_idPtr, int *job_idPtr); +int epc_equipitem_pre(struct map_session_data **sdPtr, + int *nPtr, + int *req_pos __attribute__ ((unused))); + #endif // EVOL_MAP_PC |