diff --git a/data/aura.cpp b/data/aura.cpp index b602b32..4cca29e 100644 --- a/data/aura.cpp +++ b/data/aura.cpp @@ -857,6 +857,33 @@ void Aura::con_level_up(Ref data, int value) { call("_con_level_up", data, value); } +//Equipment +void Aura::son_equip_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!data.is_valid()); + + if (has_method("_son_equip_success")) + call("_son_equip_success", data, equip_slot, item, old_item, bag_slot); +} +void Aura::son_equip_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!data.is_valid()); + + if (has_method("_son_equip_fail")) + call("_son_equip_fail", data, equip_slot, item, old_item, bag_slot); +} + +void Aura::con_equip_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!data.is_valid()); + + if (has_method("_con_equip_success")) + call("_con_equip_success", data, equip_slot, item, old_item, bag_slot); +} +void Aura::con_equip_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!data.is_valid()); + + if (has_method("_con_equip_fail")) + call("_con_equip_fail", data, equip_slot, item, old_item, bag_slot); +} + void Aura::setup_aura_data(Ref data, Ref info) { ERR_FAIL_COND(!data.is_valid() || !info.is_valid()); @@ -1254,6 +1281,18 @@ void Aura::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_xp_gained", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo("_con_level_up", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); + //Equipment + + BIND_VMETHOD(MethodInfo("_son_equip_success", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_son_equip_fail", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_success", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_fail", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + + ClassDB::bind_method(D_METHOD("son_equip_success", "data", "equip_slot", "item", "old_item", "bag_slot"), &Aura::son_equip_success); + ClassDB::bind_method(D_METHOD("son_equip_fail", "data", "equip_slot", "item", "old_item", "bag_slot"), &Aura::son_equip_fail); + ClassDB::bind_method(D_METHOD("con_equip_success", "data", "equip_slot", "item", "old_item", "bag_slot"), &Aura::con_equip_success); + ClassDB::bind_method(D_METHOD("con_equip_fail", "data", "equip_slot", "item", "old_item", "bag_slot"), &Aura::con_equip_fail); + //Calculations / Queries ClassDB::bind_method(D_METHOD("setup_aura_data", "data", "info"), &Aura::setup_aura_data); diff --git a/data/aura.h b/data/aura.h index ae58820..4739f99 100644 --- a/data/aura.h +++ b/data/aura.h @@ -295,6 +295,13 @@ public: void con_xp_gained(Ref data, int value); void con_level_up(Ref data, int value); + //Equipment + void son_equip_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + + void con_equip_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + //Calculations / Queries void setup_aura_data(Ref data, Ref info); diff --git a/entities/data/entity_class_data.cpp b/entities/data/entity_class_data.cpp index e62b152..0565af0 100644 --- a/entities/data/entity_class_data.cpp +++ b/entities/data/entity_class_data.cpp @@ -3,6 +3,7 @@ #include "../../ai/ai_action.h" #include "../../data/aura.h" #include "../../data/spell.h" +#include "../../data/item_instance.h" #include "../../infos/spell_cast_info.h" #include "../entity.h" #include "character_spec.h" @@ -728,6 +729,68 @@ void EntityClassData::con_level_up_bind(Node *entity, int value) { con_level_up(e, value); } +//Equipment + +//Equipment + +void EntityClassData::son_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (has_method("_son_equip_success")) + call("_son_equip_success", entity, equip_slot, item, old_item, bag_slot); +} +void EntityClassData::son_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + son_equip_success(e, equip_slot, item, old_item, bag_slot); +} + +void EntityClassData::son_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (has_method("_son_equip_fail")) + call("_son_equip_fail", entity, equip_slot, item, old_item, bag_slot); +} +void EntityClassData::son_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + son_equip_fail(e, equip_slot, item, old_item, bag_slot); +} + +void EntityClassData::con_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (has_method("_con_equip_success")) + call("_con_equip_success", entity, equip_slot, item, old_item, bag_slot); +} +void EntityClassData::con_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + con_equip_success(e, equip_slot, item, old_item, bag_slot); +} + +void EntityClassData::con_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (has_method("_con_equip_fail")) + call("_con_equip_fail", entity, equip_slot, item, old_item, bag_slot); +} +void EntityClassData::con_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + con_equip_fail(e, equip_slot, item, old_item, bag_slot); +} + +//AI + void EntityClassData::sai_follow(Entity *entity) { ERR_FAIL_COND(entity == NULL); @@ -938,6 +1001,18 @@ void EntityClassData::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_xp_gained", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo("_con_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + //Equipment + + BIND_VMETHOD(MethodInfo("_son_equip_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_son_equip_fail", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_fail", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + + ClassDB::bind_method(D_METHOD("son_equip_success", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityClassData::son_equip_success_bind); + ClassDB::bind_method(D_METHOD("son_equip_fail", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityClassData::son_equip_fail_bind); + ClassDB::bind_method(D_METHOD("con_equip_success", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityClassData::con_equip_success_bind); + ClassDB::bind_method(D_METHOD("con_equip_fail", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityClassData::con_equip_fail_bind); + ClassDB::bind_method(D_METHOD("sai_follow", "entity"), &EntityClassData::sai_follow_bind); ClassDB::bind_method(D_METHOD("sai_rest", "entity"), &EntityClassData::sai_rest_bind); ClassDB::bind_method(D_METHOD("sai_regenerate", "entity"), &EntityClassData::sai_regenerate_bind); diff --git a/entities/data/entity_class_data.h b/entities/data/entity_class_data.h index 52595cd..7fc324b 100644 --- a/entities/data/entity_class_data.h +++ b/entities/data/entity_class_data.h @@ -15,10 +15,12 @@ #include "../../utility/cooldown.h" #include "../../utility/category_cooldown.h" +#include "../../item_enums.h" class Aura; class Spell; class Entity; +class ItemInstance; class CharacterSpec; class Entity; class SpellCastInfo; @@ -187,6 +189,18 @@ public: void con_level_up(Entity *entity, int value); void con_level_up_bind(Node *entity, int value); + //Equipment + + void son_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + + void con_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + // AI // void sai_follow(Entity *entity); void sai_rest(Entity *entity); diff --git a/entities/data/entity_data.cpp b/entities/data/entity_data.cpp index ddd5a34..ec04a00 100644 --- a/entities/data/entity_data.cpp +++ b/entities/data/entity_data.cpp @@ -796,6 +796,78 @@ void EntityData::con_level_up_bind(Node *entity, int value) { con_level_up(e, value); } +//Equipment + +void EntityData::son_equip_success(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (_entity_class_data.is_valid()) + _entity_class_data->son_equip_success(entity, equip_slot, item, old_item, bag_slot); + + if (has_method("_son_equip_success")) + call("_son_equip_success", entity, equip_slot, item, old_item, bag_slot); +} +void EntityData::son_equip_success_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + son_equip_success(e, equip_slot, item, old_item, bag_slot); +} + +void EntityData::son_equip_fail(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (_entity_class_data.is_valid()) + _entity_class_data->son_equip_fail(entity, equip_slot, item, old_item, bag_slot); + + if (has_method("_son_equip_fail")) + call("_son_equip_fail", entity, equip_slot, item, old_item, bag_slot); +} +void EntityData::son_equip_fail_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + son_equip_fail(e, equip_slot, item, old_item, bag_slot); +} + +void EntityData::con_equip_success(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (_entity_class_data.is_valid()) + _entity_class_data->con_equip_success(entity, equip_slot, item, old_item, bag_slot); + + if (has_method("_con_equip_success")) + call("_con_equip_success", entity, equip_slot, item, old_item, bag_slot); +} +void EntityData::con_equip_success_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + con_equip_success(e, equip_slot, item, old_item, bag_slot); +} + +void EntityData::con_equip_fail(Entity* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + if (_entity_class_data.is_valid()) + _entity_class_data->con_equip_fail(entity, equip_slot, item, old_item, bag_slot); + + if (has_method("_con_equip_fail")) + call("_con_equip_fail", entity, equip_slot, item, old_item, bag_slot); +} +void EntityData::con_equip_fail_bind(Node* entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + con_equip_fail(e, equip_slot, item, old_item, bag_slot); +} + +//AI + void EntityData::sai_follow(Entity *entity) { ERR_FAIL_COND(entity == NULL); @@ -1020,6 +1092,19 @@ void EntityData::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_xp_gained", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo("_con_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + //Equipment + + BIND_VMETHOD(MethodInfo("_son_equip_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_son_equip_fail", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_fail", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + + ClassDB::bind_method(D_METHOD("son_equip_success", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityData::son_equip_success_bind); + ClassDB::bind_method(D_METHOD("son_equip_fail", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityData::son_equip_fail_bind); + ClassDB::bind_method(D_METHOD("con_equip_success", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityData::con_equip_success_bind); + ClassDB::bind_method(D_METHOD("con_equip_fail", "entity", "equip_slot", "item", "old_item", "bag_slot"), &EntityData::con_equip_fail_bind); + + //AI ClassDB::bind_method(D_METHOD("sai_follow", "entity"), &EntityData::sai_follow_bind); ClassDB::bind_method(D_METHOD("sai_rest", "entity"), &EntityData::sai_rest_bind); ClassDB::bind_method(D_METHOD("sai_regenerate", "entity"), &EntityData::sai_regenerate_bind); diff --git a/entities/data/entity_data.h b/entities/data/entity_data.h index 839917b..bc693e6 100644 --- a/entities/data/entity_data.h +++ b/entities/data/entity_data.h @@ -193,6 +193,18 @@ public: void con_level_up(Entity *entity, int value); void con_level_up_bind(Node *entity, int value); + //Equipment + + void son_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + + void con_equip_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + // AI // void sai_follow(Entity *entity); void sai_rest(Entity *entity); diff --git a/entities/entity.cpp b/entities/entity.cpp index 56bc70e..5b52b0d 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -1230,6 +1230,80 @@ void Entity::onc_stat_changed(Ref stat) { //// Equip Slots //// +void Entity::son_equip_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + + if (_c_entity_data.is_valid()) { + _c_entity_data->son_equip_success(this, equip_slot, item, old_item, bag_slot); + } + + for (int i = 0; i < _c_auras.size(); ++i) { + Ref ad = _c_auras.get(i); + + ad->get_aura()->son_equip_success(ad, equip_slot, item, old_item, bag_slot); + } + + if (has_method("_son_equip_success")) + call("_son_equip_success", equip_slot, item, old_item, bag_slot); + + emit_signal("son_equip_success", this, equip_slot, item, old_item, bag_slot); +} + +void Entity::son_equip_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + + if (_c_entity_data.is_valid()) { + _c_entity_data->son_equip_fail(this, equip_slot, item, old_item, bag_slot); + } + + for (int i = 0; i < _c_auras.size(); ++i) { + Ref ad = _c_auras.get(i); + + ad->get_aura()->son_equip_fail(ad, equip_slot, item, old_item, bag_slot); + } + + if (has_method("_son_equip_fail")) + call("_son_equip_fail", equip_slot, item, old_item, bag_slot); + + emit_signal("son_equip_fail", this, equip_slot, item, old_item, bag_slot); +} + + +void Entity::con_equip_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + + if (_c_entity_data.is_valid()) { + _c_entity_data->con_equip_success(this, equip_slot, item, old_item, bag_slot); + } + + for (int i = 0; i < _c_auras.size(); ++i) { + Ref ad = _c_auras.get(i); + + ad->get_aura()->con_equip_success(ad, equip_slot, item, old_item, bag_slot); + } + + if (has_method("_con_equip_success")) + call("_con_equip_success", equip_slot, item, old_item, bag_slot); + + emit_signal("con_equip_success", this, equip_slot, item, old_item, bag_slot); +} + + +void Entity::con_equip_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { + + if (_c_entity_data.is_valid()) { + _c_entity_data->con_equip_fail(this, equip_slot, item, old_item, bag_slot); + } + + for (int i = 0; i < _c_auras.size(); ++i) { + Ref ad = _c_auras.get(i); + + ad->get_aura()->con_equip_fail(ad, equip_slot, item, old_item, bag_slot); + } + + if (has_method("_con_equip_fail")) + call("_con_equip_fail", equip_slot, item, old_item, bag_slot); + + emit_signal("con_equip_fail", this, equip_slot, item, old_item, bag_slot); +} + Ref Entity::equip(Ref item) { if (!has_method("_equip")) { return item; @@ -4590,10 +4664,26 @@ void Entity::_bind_methods() { //Equipment System + ADD_SIGNAL(MethodInfo("son_equip_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + ADD_SIGNAL(MethodInfo("son_equip_fail", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + ADD_SIGNAL(MethodInfo("con_equip_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + ADD_SIGNAL(MethodInfo("con_equip_fail", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + + BIND_VMETHOD(MethodInfo("_son_equip_success", PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_son_equip_fail", PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_success", PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo("_con_equip_fail", PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::OBJECT, "old_item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "bag_slot"))); + BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), "_equip", PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); + ADD_SIGNAL(MethodInfo("equipment_changed", PropertyInfo(Variant::INT, "slot"))); + ClassDB::bind_method(D_METHOD("son_equip_success", "equip_slot", "item", "old_item", "bag_slot"), &Entity::son_equip_success); + ClassDB::bind_method(D_METHOD("son_equip_fail", "equip_slot", "item", "old_item", "bag_slot"), &Entity::son_equip_fail); + ClassDB::bind_method(D_METHOD("con_equip_success", "equip_slot", "item", "old_item", "bag_slot"), &Entity::con_equip_success); + ClassDB::bind_method(D_METHOD("con_equip_fail", "equip_slot", "item", "old_item", "bag_slot"), &Entity::con_equip_fail); + ClassDB::bind_method(D_METHOD("equip", "item"), &Entity::equip); ClassDB::bind_method(D_METHOD("get_equip_slot", "index"), &Entity::get_equip_slot); @@ -4751,6 +4841,9 @@ void Entity::_bind_methods() { ADD_SIGNAL(MethodInfo("scraft_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); ADD_SIGNAL(MethodInfo("ccraft_success", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); + ADD_SIGNAL(MethodInfo("scraft_recipe_added", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::OBJECT, "craft_recipe", PROPERTY_HINT_RESOURCE_TYPE, "CraftRecipe"))); + ADD_SIGNAL(MethodInfo("ccraft_recipe_added", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::OBJECT, "craft_recipe", PROPERTY_HINT_RESOURCE_TYPE, "CraftRecipe"))); + ClassDB::bind_method(D_METHOD("crequest_craft", "id"), &Entity::crequest_craft); ClassDB::bind_method(D_METHOD("scraft", "id"), &Entity::scraft); diff --git a/entities/entity.h b/entities/entity.h index cc6d349..13fea5e 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -242,6 +242,12 @@ public: //// Equip Slots //// + void son_equip_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void son_equip_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + + void con_equip_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void con_equip_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + Ref equip(Ref item); Ref get_equip_slot(int index);