Fixed healing, and aura healing.

This commit is contained in:
Relintai 2019-06-25 01:15:08 +02:00
parent 58654d8d70
commit 5d0d8b59d3
3 changed files with 31 additions and 13 deletions

View File

@ -647,6 +647,10 @@ void Aura::_setup_aura_data(Ref<AuraData> data, Ref<AuraApplyInfo> info) {
if (is_damage_enabled()) {
calculate_initial_damage(data, info);
}
if (is_heal_enabled()) {
calculate_initial_heal(data, info);
}
}
void Aura::sapply_passives_damage_receive(Ref<SpellDamageInfo> data) {
@ -711,12 +715,10 @@ void Aura::sapply_passives_heal_deal(Ref<SpellHealInfo> data) {
void Aura::_sapply_passives_heal_receive(Ref<SpellHealInfo> data) {
ERR_FAIL_COND(!data.is_valid());
//always exists
call("_sapply_passives_heal_receive", data);
}
void Aura::_sapply_passives_heal_deal(Ref<SpellHealInfo> data) {
ERR_FAIL_COND(!data.is_valid());
}
void Aura::calculate_initial_heal(Ref<AuraData> aura_data, Ref<AuraApplyInfo> info) {
@ -734,7 +736,7 @@ void Aura::handle_aura_heal(Ref<AuraData> aura_data, Ref<SpellHealInfo> data) {
}
void Aura::_calculate_initial_heal(Ref<AuraData> aura_data, Ref<AuraApplyInfo> info) {
aura_data->set_damage(info->get_aura()->get_damage_min());
aura_data->set_heal(info->get_aura()->get_heal_min());
}
void Aura::_handle_aura_heal(Ref<AuraData> aura_data, Ref<SpellHealInfo> data) {
@ -792,6 +794,16 @@ void Aura::_supdate(Ref<AuraData> aura, float delta) {
handle_aura_damage(aura, dpd);
}
if (aura->get_heal() != 0) {
Ref<SpellHealInfo> shi = Ref<SpellHealInfo>(memnew(SpellHealInfo()));
shi->set_aura_heal_source(aura);
shi->set_dealer(aura->get_caster());
shi->set_receiver(aura->get_owner());
handle_aura_heal(aura, shi);
}
aura->set_unhandled_ticks(aura->get_unhandled_ticks() - 1);
}
@ -939,10 +951,10 @@ void Aura::_bind_methods() {
ClassDB::bind_method(D_METHOD("calculate_initial_heal", "aura_data", "info"), &Aura::calculate_initial_heal);
ClassDB::bind_method(D_METHOD("handle_aura_heal", "aura_data", "data"), &Aura::handle_aura_heal);
BIND_VMETHOD(MethodInfo("_sapply_passives_heal_receive", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "SpellDamageInfo")));
BIND_VMETHOD(MethodInfo("_sapply_passives_heal_deal", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "SpellDamageInfo")));
BIND_VMETHOD(MethodInfo("_calculate_initial_heal", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraApplyInfo")));
BIND_VMETHOD(MethodInfo("_handle_aura_heal", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "SpellHealInfo")));
BIND_VMETHOD(MethodInfo("_sapply_passives_heal_receive", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellDamageInfo")));
BIND_VMETHOD(MethodInfo("_sapply_passives_heal_deal", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellDamageInfo")));
BIND_VMETHOD(MethodInfo("_calculate_initial_heal", PropertyInfo(Variant::OBJECT, "aura_data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "AuraApplyInfo")));
BIND_VMETHOD(MethodInfo("_handle_aura_heal", PropertyInfo(Variant::OBJECT, "aura_data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "spell_heal_info", PROPERTY_HINT_RESOURCE_TYPE, "SpellHealInfo")));
ClassDB::bind_method(D_METHOD("_sapply_passives_heal_receive", "data"), &Aura::_sapply_passives_heal_receive);
ClassDB::bind_method(D_METHOD("_sapply_passives_heal_deal", "data"), &Aura::_sapply_passives_heal_deal);

View File

@ -65,11 +65,13 @@ void CharacterClass::set_current_spell_page(int value) {
}
Ref<Spell> CharacterClass::get_spell(int id) {
ERR_FAIL_INDEX_V(id, MAX_SPELLS, Ref<Spell>());
return _spells[id];
}
void CharacterClass::set_spell(int index, Ref<Spell> spell) {
ERR_FAIL_INDEX(index, MAX_AURAS);
ERR_FAIL_INDEX(index, MAX_SPELLS);
_spells[index] = Ref<Spell>(spell);
}

View File

@ -673,7 +673,6 @@ void Entity::stake_heal(Ref<SpellHealInfo> data) {
if (h > get_health()->gets_max()) {
h = get_health()->gets_max();
}
get_health()->sets_current(h);
//send an event to client
@ -685,6 +684,7 @@ void Entity::stake_heal(Ref<SpellHealInfo> data) {
void Entity::sdeal_heal_to(Ref<SpellHealInfo> data) {
ERR_FAIL_COND(!data.is_valid());
ERR_FAIL_COND(data->get_receiver() == NULL);
//serverside
@ -692,9 +692,9 @@ void Entity::sdeal_heal_to(Ref<SpellHealInfo> data) {
return;
}
sapply_passives_damage_deal(data);
data->get_receiver()->stake_damage(data);
son_damage_dealt(data);
sapply_passives_heal_deal(data);
data->get_receiver()->stake_heal(data);
son_heal_dealt(data);
}
void Entity::die() {
@ -2226,6 +2226,10 @@ void Entity::_bind_methods() {
ClassDB::bind_method(D_METHOD("stake_damage", "data"), &Entity::stake_damage);
ClassDB::bind_method(D_METHOD("sdeal_damage_to", "data"), &Entity::sdeal_damage_to);
//Heal Operations
ClassDB::bind_method(D_METHOD("stake_heal", "data"), &Entity::stake_heal);
ClassDB::bind_method(D_METHOD("sdeal_heal_to", "data"), &Entity::sdeal_heal_to);
//Aura Manipulation
ClassDB::bind_method(D_METHOD("sadd_aura", "aura"), &Entity::sadd_aura);
ClassDB::bind_method(D_METHOD("sremove_aura", "aura"), &Entity::sremove_aura);