mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-14 03:11:28 +00:00
[Feature] Add Optional Return to EVENT_DAMAGE_TAKEN (#4454)
* [Feature] Add Optional Return to EVENT_DAMAGE_TAKEN # Description - Allows operators to return a value from `EVENT_DAMAGE_TAKEN` to override the amount of damage taken based on any arbitrary criteria they'd like to apply. * Update attack.cpp
This commit is contained in:
parent
e2b545991a
commit
080865faa2
@ -4287,8 +4287,6 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
//final damage has been determined.
|
//final damage has been determined.
|
||||||
int old_hp_ratio = (int)GetHPRatio();
|
int old_hp_ratio = (int)GetHPRatio();
|
||||||
|
|
||||||
SetHP(int64(GetHP() - damage));
|
|
||||||
|
|
||||||
const auto has_bot_given_event = parse->BotHasQuestSub(EVENT_DAMAGE_GIVEN);
|
const auto has_bot_given_event = parse->BotHasQuestSub(EVENT_DAMAGE_GIVEN);
|
||||||
|
|
||||||
const auto has_bot_taken_event = parse->BotHasQuestSub(EVENT_DAMAGE_TAKEN);
|
const auto has_bot_taken_event = parse->BotHasQuestSub(EVENT_DAMAGE_TAKEN);
|
||||||
@ -4334,30 +4332,7 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
);
|
);
|
||||||
|
|
||||||
std::vector<std::any> args;
|
std::vector<std::any> args;
|
||||||
|
int64 damage_override = 0;
|
||||||
if (has_taken_event) {
|
|
||||||
const auto export_string = fmt::format(
|
|
||||||
"{} {} {} {} {} {} {} {} {}",
|
|
||||||
attacker ? attacker->GetID() : 0,
|
|
||||||
damage,
|
|
||||||
spell_id,
|
|
||||||
static_cast<int>(skill_used),
|
|
||||||
FromDamageShield ? 1 : 0,
|
|
||||||
avoidable ? 1 : 0,
|
|
||||||
buffslot,
|
|
||||||
iBuffTic ? 1 : 0,
|
|
||||||
static_cast<int>(special)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (IsBot() && has_bot_taken_event) {
|
|
||||||
parse->EventBot(EVENT_DAMAGE_TAKEN, CastToBot(), attacker ? attacker : nullptr, export_string, 0);
|
|
||||||
} else if (IsClient() && has_player_taken_event) {
|
|
||||||
args.push_back(attacker ? attacker : nullptr);
|
|
||||||
parse->EventPlayer(EVENT_DAMAGE_TAKEN, CastToClient(), export_string, 0, &args);
|
|
||||||
} else if (IsNPC() && has_npc_taken_event) {
|
|
||||||
parse->EventNPC(EVENT_DAMAGE_TAKEN, CastToNPC(), attacker ? attacker : nullptr, export_string, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (has_given_event && attacker) {
|
if (has_given_event && attacker) {
|
||||||
const auto export_string = fmt::format(
|
const auto export_string = fmt::format(
|
||||||
@ -4383,6 +4358,38 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (has_taken_event) {
|
||||||
|
const auto export_string = fmt::format(
|
||||||
|
"{} {} {} {} {} {} {} {} {}",
|
||||||
|
attacker ? attacker->GetID() : 0,
|
||||||
|
damage,
|
||||||
|
spell_id,
|
||||||
|
static_cast<int>(skill_used),
|
||||||
|
FromDamageShield ? 1 : 0,
|
||||||
|
avoidable ? 1 : 0,
|
||||||
|
buffslot,
|
||||||
|
iBuffTic ? 1 : 0,
|
||||||
|
static_cast<int>(special)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (IsBot() && has_bot_taken_event) {
|
||||||
|
damage_override = parse->EventBot(EVENT_DAMAGE_TAKEN, CastToBot(), attacker ? attacker : nullptr, export_string, 0);
|
||||||
|
} else if (IsClient() && has_player_taken_event) {
|
||||||
|
args.push_back(attacker ? attacker : nullptr);
|
||||||
|
damage_override = parse->EventPlayer(EVENT_DAMAGE_TAKEN, CastToClient(), export_string, 0, &args);
|
||||||
|
} else if (IsNPC() && has_npc_taken_event) {
|
||||||
|
damage_override = parse->EventNPC(EVENT_DAMAGE_TAKEN, CastToNPC(), attacker ? attacker : nullptr, export_string, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (damage_override > 0) {
|
||||||
|
damage = damage_override;
|
||||||
|
} else if (damage_override < 0) {
|
||||||
|
damage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetHP(int64(GetHP() - damage));
|
||||||
|
|
||||||
if (HasDied()) {
|
if (HasDied()) {
|
||||||
bool IsSaved = false;
|
bool IsSaved = false;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user