From bf46a43d5fb26ba76075bdea0dc6161c2da6c7da Mon Sep 17 00:00:00 2001 From: Jesusalva Jesusalva Date: Mon, 17 Oct 2022 23:01:13 +0000 Subject: Track more stuff --- src/emap/battle.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/emap/status.c | 21 +++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/emap/battle.c b/src/emap/battle.c index e0b7942..66097ca 100644 --- a/src/emap/battle.c +++ b/src/emap/battle.c @@ -97,6 +97,18 @@ struct Damage ebattle_calc_weapon_attack_post(struct Damage retVal, if (src == NULL) return retVal; + /* Player Variable updates (target) */ + if (target->type == BL_PC) { + struct map_session_data *tsd = BL_CAST(BL_PC, target); + pc->setreg(tsd, script->add_variable("@weaponDef"), pc->readreg(tsd,script->add_variable("@weaponDef"))+retVal.damage); + + if (retVal.type == BDT_PDODGE) + pc->setreg(tsd, script->add_variable("@weaponDodge"), pc->readreg(tsd,script->add_variable("@weaponDodge"))+10); + + if (retVal.dmg_lv == ATK_FLEE) + pc->setreg(tsd, script->add_variable("@weaponDodge"), pc->readreg(tsd,script->add_variable("@weaponDodge"))+1); + } + struct map_session_data *sd = BL_CAST(BL_PC, src); if (sd == NULL) return retVal; @@ -131,6 +143,18 @@ struct Damage ebattle_calc_weapon_attack_post(struct Damage retVal, } retVal.damage = apply_percentrate64(retVal.damage, mod, 10000); retVal.damage2 = apply_percentrate64(retVal.damage2, mod, 10000); + + /* Player Variable updates (source) */ + if (src->type == BL_PC) { + pc->setreg(sd, script->add_variable("@weaponAtk"), pc->readreg(sd,script->add_variable("@weaponAtk"))+1); + + if (retVal.type == BDT_CRIT) + pc->setreg(sd, script->add_variable("@weaponCrit"), pc->readreg(sd,script->add_variable("@weaponCrit"))+1); + + if (retVal.dmg_lv == ATK_FLEE) + pc->setreg(sd, script->add_variable("@weaponMiss"), pc->readreg(sd,script->add_variable("@weaponMiss"))+1); + } + return retVal; } @@ -149,9 +173,20 @@ enum damage_lv ebattle_weapon_attack_pre(struct block_list **srcPtr, if (sd == NULL) return ATK_NONE; - const int weaponIndex = sd->equip_index[EQI_HAND_L]; - if (weaponIndex < 0) + const int weaponIndex = sd->equip_index[EQI_HAND_R]; + if (weaponIndex < 0) { + const int oldWeapon = pc->readreg(sd, script->add_variable("@weaponId")); + if (oldWeapon < 1) + { + pc->setreg(sd, script->add_variable("@weaponId"), 1); + } + else if (1 != oldWeapon) + { + pc->setreg(sd, script->add_variable("@weaponId"), 1); + pc->setreg(sd, script->add_variable("@weaponNew"), 1); + } return ATK_NONE; + } struct ItemdExt *data = itemd_get(sd->inventory_data[weaponIndex]); if (!data) @@ -162,5 +197,16 @@ enum damage_lv ebattle_weapon_attack_pre(struct block_list **srcPtr, hookStop(); return ATK_NONE; } + + const int oldWeapon = pc->readreg(sd,script->add_variable("@weaponId")); + if (oldWeapon < 1) + { + pc->setreg(sd, script->add_variable("@weaponId"), sd->inventory_data[weaponIndex]->nameid); + } + else if (sd->inventory_data[weaponIndex]->nameid != oldWeapon) + { + pc->setreg(sd, script->add_variable("@weaponId"), sd->inventory_data[weaponIndex]->nameid); + pc->setreg(sd, script->add_variable("@weaponNew"), 1); + } return ATK_NONE; } diff --git a/src/emap/status.c b/src/emap/status.c index 7b42fa1..49780f8 100644 --- a/src/emap/status.c +++ b/src/emap/status.c @@ -149,6 +149,21 @@ void estatus_calc_pc_additional_pre(struct map_session_data **sdPtr, horse_add_bonus(sd); + struct linkdb_node **label_linkdb = strdb_get(npc->ev_label_db, "OnPCBonusEvent"); + if (label_linkdb == NULL) { + hookStop(); + return; + } + + struct linkdb_node *node = *label_linkdb; + while (node) { + struct event_data* ev = node->data; + if (ev) { + script->run(ev->nd->u.scr.script, ev->pos, sd->bl.id, ev->nd->bl.id); + } + node = node->next; + } + hookStop(); } @@ -172,6 +187,12 @@ defType estatus_calc_def_post(defType retVal, if (sc->data[SC_PHYSICAL_SHIELD]) retVal += sc->data[SC_PHYSICAL_SHIELD]->val1; + if (bl->type == BL_PC) { + struct map_session_data *sd = NULL; + sd = BL_UCAST(BL_PC, bl); + if (sd) + pc->setreg(sd, script->add_variable("@defend"), pc->readreg(sd, script->add_variable("@defend"))+retVal); + } return (defType)cap_value(retVal, DEFTYPE_MIN, DEFTYPE_MAX); } -- cgit v1.2.3-60-g2f50