diff --git a/data/aura.cpp b/data/aura.cpp index 67e81db..e6c5a13 100644 --- a/data/aura.cpp +++ b/data/aura.cpp @@ -647,6 +647,10 @@ void Aura::_setup_aura_data(Ref data, Ref 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 data) { @@ -711,12 +715,10 @@ void Aura::sapply_passives_heal_deal(Ref data) { void Aura::_sapply_passives_heal_receive(Ref data) { ERR_FAIL_COND(!data.is_valid()); - - //always exists - call("_sapply_passives_heal_receive", data); } void Aura::_sapply_passives_heal_deal(Ref data) { + ERR_FAIL_COND(!data.is_valid()); } void Aura::calculate_initial_heal(Ref aura_data, Ref info) { @@ -734,7 +736,7 @@ void Aura::handle_aura_heal(Ref aura_data, Ref data) { } void Aura::_calculate_initial_heal(Ref aura_data, Ref 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 aura_data, Ref data) { @@ -792,6 +794,16 @@ void Aura::_supdate(Ref aura, float delta) { handle_aura_damage(aura, dpd); } + if (aura->get_heal() != 0) { + Ref shi = Ref(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); diff --git a/data/character.cpp b/data/character.cpp index 2e9355c..a4aab8c 100644 --- a/data/character.cpp +++ b/data/character.cpp @@ -65,11 +65,13 @@ void CharacterClass::set_current_spell_page(int value) { } Ref CharacterClass::get_spell(int id) { + ERR_FAIL_INDEX_V(id, MAX_SPELLS, Ref()); + return _spells[id]; } void CharacterClass::set_spell(int index, Ref spell) { - ERR_FAIL_INDEX(index, MAX_AURAS); + ERR_FAIL_INDEX(index, MAX_SPELLS); _spells[index] = Ref(spell); } diff --git a/entities/entity.cpp b/entities/entity.cpp index 83118cd..c088113 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -673,7 +673,6 @@ void Entity::stake_heal(Ref 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 data) { void Entity::sdeal_heal_to(Ref 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 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);