summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusalva Jesusalva <jesusalva@themanaworld.org>2022-10-17 23:01:14 +0000
committerJesusalva Jesusalva <jesusalva@themanaworld.org>2022-10-17 23:01:14 +0000
commitfc6e3a927242b8639b04cdc6ae162a59d4554953 (patch)
treeda83be6a4dda92c897bdabce4b249d63811b11d6
parent4d3a66b4eab50397d6b4ee02b8e2f2b5c00aa527 (diff)
parentbf46a43d5fb26ba76075bdea0dc6161c2da6c7da (diff)
downloadevol-hercules-fc6e3a927242b8639b04cdc6ae162a59d4554953.tar.gz
evol-hercules-fc6e3a927242b8639b04cdc6ae162a59d4554953.tar.bz2
evol-hercules-fc6e3a927242b8639b04cdc6ae162a59d4554953.tar.xz
evol-hercules-fc6e3a927242b8639b04cdc6ae162a59d4554953.zip
Merge branch 'jesusalva/xstats' into 'master'HEADmaster
Track more stuff See merge request revolt/evol-hercules!33
-rw-r--r--src/emap/battle.c50
-rw-r--r--src/emap/status.c21
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);
}