diff options
author | Haru <haru@dotalux.com> | 2017-04-09 15:24:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-09 15:24:22 +0200 |
commit | db5a1d0f714fa196e1c026ccb123ac7104af2f75 (patch) | |
tree | e399edacc33de1a1954777d5ebfd9b1b6213367e /src/map/status.c | |
parent | 083ed4ad7a30bdc3172b3ef2a66bb257c0c0e70f (diff) | |
parent | 974222a8d3f189083205bf5d330de04a43226ad3 (diff) | |
download | hercules-db5a1d0f714fa196e1c026ccb123ac7104af2f75.tar.gz hercules-db5a1d0f714fa196e1c026ccb123ac7104af2f75.tar.bz2 hercules-db5a1d0f714fa196e1c026ccb123ac7104af2f75.tar.xz hercules-db5a1d0f714fa196e1c026ccb123ac7104af2f75.zip |
Merge pull request #1598 from Smokexyz/IRO
Implementation of Item Options System.
Diffstat (limited to 'src/map/status.c')
-rw-r--r-- | src/map/status.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/map/status.c b/src/map/status.c index 78c11899b..d8fb9a350 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2400,8 +2400,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) bstatus->speed = pSpeed; } - //FIXME: Most of these stuff should be calculated once, but how do I fix the memset above to do that? [Skotlex] - //Give them all modes except these (useful for clones) + // FIXME: Most of these stuff should be calculated once, but how do I fix the memset above to do that? [Skotlex] + // Give them all modes except these (useful for clones) bstatus->mode = MD_MASK&~(MD_BOSS|MD_PLANT|MD_DETECTOR|MD_ANGRY|MD_TARGETWEAK); bstatus->size = ((sd->job & JOBL_BABY) != 0 || (sd->job & MAPID_BASEMASK) == MAPID_SUMMONER)?SZ_SMALL:SZ_MEDIUM; @@ -2646,6 +2646,39 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) } } } + + /* parse item options [Smokexyz] */ + for (i = 0; i < EQI_MAX; i++) { + status->current_equip_item_index = index = sd->equip_index[i]; + status->current_equip_option_index = -1; + + if (i == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == index) + continue; + else if (i == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == index) + continue; + else if (i == EQI_HEAD_TOP && (sd->equip_index[EQI_HEAD_MID] == index || sd->equip_index[EQI_HEAD_LOW] == index)) + continue; + + if (index >= 0 && sd->inventory_data[index]) { + int j = 0; + for (j = 0; j < MAX_ITEM_OPTIONS; j++) { + int16 option_index = sd->status.inventory[index].option[j].index; + struct item_option *ito = NULL; + + if (option_index == 0 || (ito = itemdb->option_exists(option_index)) == NULL || ito->script == NULL) + continue; + + status->current_equip_option_index = j; + script->run(ito->script, 0, sd->bl.id, 0); + + if (calculating == 0) //Abort, script->run his function. [Skotlex] + return 1; + } + } + } + + status->current_equip_option_index = -1; + status->current_equip_item_index = -1; status->calc_pc_additional(sd, opt); |