diff --git a/entities/entity.cpp b/entities/entity.cpp index e144544..5899146 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -6423,7 +6423,9 @@ void Entity::_notification(int p_what) { bool Entity::_set(const StringName &p_name, const Variant &p_value) { String name = p_name; - if (name.get_slicec('/', 0) == "stat") { + String main_prop = name.get_slicec('/', 0); + + if (main_prop == "stat") { int stat_id = name.get_slicec('/', 1).to_int(); String stat_prop_name = name.get_slicec('/', 2); @@ -6446,52 +6448,21 @@ bool Entity::_set(const StringName &p_name, const Variant &p_value) { } else { return false; } - } else { - return false; + } else if (main_prop == "sequipment") { + int slot_id = name.get_slicec('/', 1).to_int(); + + if (_s_equipment.size() <= slot_id) { + return false; + } + + _s_equipment.write[slot_id] = p_value; + + return true; } return false; /* - sets_entity_type((int)((int)dict.get("type", 0))); - - sets_model_index(static_cast(static_cast(dict.get("model_index", 0)))); - - if (ESS::get_singleton()->get_use_global_class_level()) { - _s_class_level = (dict.get("class_level", 0)); - _s_class_xp = (dict.get("class_xp", 0)); - } else { - sets_class_level(dict.get("class_level", 0)); - sets_class_xp(dict.get("class_xp", 0)); - } - - sets_character_level(dict.get("character_level", 0)); - sets_character_xp(dict.get("character_xp", 0)); - - sets_money(dict.get("money", 0)); - - sets_entity_name(dict.get("entity_name", "")); - - sets_seed(dict.get("seed", _s_seed)); - - //// Equipment //// - - Dictionary equipment = dict.get("equipment", Dictionary()); - - for (int i = 0; i < ESS::get_singleton()->equip_slot_get_count(); ++i) { - if (equipment.has(String::num(i))) { - Ref ii = _s_equipment[i]; - - if (!ii.is_valid()) { - ii.instance(); - } - - ii->from_dict(dict[String::num(i)]); - - _s_equipment[i] = ii; - _c_equipment[i] = ii; - } - } //// Resources //// @@ -6553,14 +6524,6 @@ bool Entity::_set(const StringName &p_name, const Variant &p_value) { //_c_auras.push_back(r); } - sets_entity_type((int)((int)dict.get("entity_type", 0))); - sets_immunity_flags(dict.get("immunity_flags", 0)); - sets_entity_flags(dict.get("entity_flags", 0)); - EntityEnums::EntityController contr = static_cast(static_cast(dict.get("entity_controller", 0))); - - sets_original_entity_controller(contr); - sets_entity_controller(contr); - //// Cooldowns //// _s_cooldowns.clear(); @@ -6712,7 +6675,9 @@ bool Entity::_set(const StringName &p_name, const Variant &p_value) { bool Entity::_get(const StringName &p_name, Variant &r_ret) const { String name = p_name; - if (name.get_slicec('/', 0) == "stat") { + String main_prop = name.get_slicec('/', 0); + + if (main_prop == "stat") { int stat_id = name.get_slicec('/', 1).to_int(); String stat_prop_name = name.get_slicec('/', 2); @@ -6735,27 +6700,23 @@ bool Entity::_get(const StringName &p_name, Variant &r_ret) const { } else { return false; } - } else { - return false; + } else if (main_prop == "sequipment") { + int slot_id = name.get_slicec('/', 1).to_int(); + + if (_s_equipment.size() <= slot_id) { + return false; + } + + r_ret = _s_equipment[slot_id]; + + return true; } return false; + /* Dictionary dict; - //// Equipment //// - - Dictionary equipment; - - for (int i = 0; i < ESS::get_singleton()->equip_slot_get_count(); ++i) { - Ref ii = _s_equipment[i]; - - if (ii.is_valid()) - equipment[i] = ii->to_dict(); - } - - dict["equipment"] = equipment; - //// Resources //// Dictionary rd; @@ -6890,13 +6851,17 @@ bool Entity::_get(const StringName &p_name, Variant &r_ret) const { void Entity::_get_property_list(List *p_list) const { //int property_usange = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_INTERNAL; - int property_usange = PROPERTY_USAGE_DEFAULT; + int property_usange = PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL; for (int i = 0; i < ESS::get_singleton()->stat_get_count(); ++i) { p_list->push_back(PropertyInfo(Variant::REAL, "stat/" + itos(i) + "/base", PROPERTY_HINT_NONE, "", property_usange)); p_list->push_back(PropertyInfo(Variant::REAL, "stat/" + itos(i) + "/percent", PROPERTY_HINT_NONE, "", property_usange)); p_list->push_back(PropertyInfo(Variant::REAL, "stat/" + itos(i) + "/scurrent", PROPERTY_HINT_NONE, "", property_usange)); } + + for (int i = 0; i < ESS::get_singleton()->equip_slot_get_count(); ++i) { + p_list->push_back(PropertyInfo(Variant::OBJECT, "sequipment/" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance", property_usange)); + } } void Entity::_validate_property(PropertyInfo &property) const {