EquipSlots are now customizable from the ProjectSettings.

This commit is contained in:
Relintai 2020-05-19 18:58:01 +02:00
parent d20419621d
commit b1efeb662a
22 changed files with 373 additions and 352 deletions

1
SCsub
View File

@ -24,7 +24,6 @@ sources = [
"data/items/item_instance.cpp",
"data/items/item_template.cpp",
"data/items/equipment_data.cpp",
"data/items/equipment_data_entry.cpp",
"data/items/craft_recipe_helper.cpp",
"data/items/craft_recipe.cpp",
"data/items/item_visual.cpp",

View File

@ -21,7 +21,6 @@ def get_doc_classes():
"Aura",
"CraftRecipeHelper",
"CraftRecipe",
"EquipmentDataEntry",
"EquipmentData",
"ItemInstance",
"ItemStatModifier",

View File

@ -799,7 +799,7 @@ void Aura::notification_centity_resource_removed(Ref<AuraData> data, Ref<EntityR
//Equipment
bool Aura::equip_should_deny(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool Aura::equip_should_deny(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item) {
ERR_FAIL_COND_V(!data.is_valid(), false);
if (has_method("_equip_should_deny"))
@ -809,26 +809,26 @@ bool Aura::equip_should_deny(Ref<AuraData> data, ItemEnums::EquipSlots equip_slo
return false;
}
void Aura::equip_son_success(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Aura::equip_son_success(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!data.is_valid());
if (has_method("_equip_son_success"))
call("_equip_son_success", data, equip_slot, item, old_item, bag_slot);
}
void Aura::equip_son_fail(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Aura::equip_son_fail(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!data.is_valid());
if (has_method("_equip_son_fail"))
call("_equip_son_fail", data, equip_slot, item, old_item, bag_slot);
}
void Aura::equip_con_success(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Aura::equip_con_success(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!data.is_valid());
if (has_method("_equip_con_success"))
call("_equip_con_success", data, equip_slot, item, old_item, bag_slot);
}
void Aura::equip_con_fail(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Aura::equip_con_fail(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
ERR_FAIL_COND(!data.is_valid());
if (has_method("_equip_con_fail"))

View File

@ -304,13 +304,13 @@ public:
void notification_centity_resource_removed(Ref<AuraData> data, Ref<EntityResource> resource);
//Equipment
bool equip_should_deny(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_should_deny(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item);
void equip_son_success(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(Ref<AuraData> data, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
//Calculations / Queries
void setup_aura_data(Ref<AuraData> data, Ref<AuraApplyInfo> info);

View File

@ -22,42 +22,100 @@ SOFTWARE.
#include "equipment_data.h"
Ref<EquipmentDataEntry> EquipmentData::get_slot(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<EquipmentDataEntry>());
#include "item_instance.h"
#include "item_template.h"
#include "../../singletons/ess.h"
Ref<ItemTemplate> EquipmentData::get_slot(int index) {
ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref<ItemTemplate>());
return _entries[index];
}
void EquipmentData::set_slot(int index, Ref<EquipmentDataEntry> entry) {
ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
void EquipmentData::set_slot(int index, Ref<ItemTemplate> entry) {
ERR_FAIL_INDEX(index, ESS::get_instance()->equip_slot_get_count());
_entries[index] = entry;
_entries.write[index] = entry;
}
Ref<ItemInstance> EquipmentData::get_item(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<ItemInstance>());
ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref<ItemInstance>());
Ref<EquipmentDataEntry> ede = _entries[index];
Ref<ItemTemplate> ede = _entries[index];
if (!ede.is_valid())
return Ref<ItemInstance>();
return ede->get_item();
return ede->create_item_instance();
}
EquipmentData::EquipmentData() {
_entries.resize(ESS::get_instance()->equip_slot_get_count());
}
EquipmentData::~EquipmentData() {
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i)
_entries[i].unref();
_entries.clear();
}
bool EquipmentData::_set(const StringName &p_name, const Variant &p_value) {
String name = p_name;
if (name.get_slicec('/', 0) == "slot") {
StringName prop = name.get_slicec('/', 1);
if (ESS::get_instance()->equip_slot_is_property(prop)) {
int id = ESS::get_instance()->equip_slot_get_property_id(prop);
if (_entries.size() < id) {
return false;
}
_entries.set(id, p_value);
return true;
} else {
return false;
}
} else {
return false;
}
return true;
}
bool EquipmentData::_get(const StringName &p_name, Variant &r_ret) const {
String name = p_name;
if (name.get_slicec('/', 0) == "slot") {
StringName prop = name.get_slicec('/', 1);
if (ESS::get_instance()->equip_slot_is_property(prop)) {
int id = ESS::get_instance()->equip_slot_get_property_id(prop);
if (_entries.size() < id) {
return false;
}
r_ret = _entries[id];
return true;
} else {
return false;
}
} else {
return false;
}
return true;
}
void EquipmentData::_get_property_list(List<PropertyInfo> *p_list) const {
for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) {
p_list->push_back(PropertyInfo(Variant::OBJECT, "slot/" + ESS::get_instance()->equip_slot_get_property_name(i), PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate"));
}
}
void EquipmentData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_slot", "index"), &EquipmentData::get_slot);
ClassDB::bind_method(D_METHOD("set_slot", "index", "entry"), &EquipmentData::set_slot);
ADD_GROUP("Slots", "slot");
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "slot_" + ItemEnums::get_equip_slot_string(i), PROPERTY_HINT_RESOURCE_TYPE, "EquipmentDataEntry"), "set_slot", "get_slot", i);
}
}

View File

@ -25,15 +25,15 @@ SOFTWARE.
#include "core/resource.h"
#include "../../item_enums.h"
#include "equipment_data_entry.h"
class ItemInstance;
class ItemTemplate;
class EquipmentData : public Resource {
GDCLASS(EquipmentData, Resource);
public:
Ref<EquipmentDataEntry> get_slot(int index);
void set_slot(int index, Ref<EquipmentDataEntry> entry);
Ref<ItemTemplate> get_slot(int index);
void set_slot(int index, Ref<ItemTemplate> entry);
Ref<ItemInstance> get_item(int index);
@ -41,10 +41,13 @@ public:
~EquipmentData();
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
static void _bind_methods();
private:
Ref<EquipmentDataEntry> _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX];
Vector<Ref<ItemTemplate> > _entries;
};
#endif

View File

@ -1,43 +0,0 @@
/*
Copyright (c) 2019-2020 Péter Magyar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include "equipment_data_entry.h"
Ref<ItemInstance> EquipmentDataEntry::get_item() {
if (has_method("_get_item")) {
return call("_get_item");
}
return Ref<ItemInstance>();
}
EquipmentDataEntry::EquipmentDataEntry() {
}
EquipmentDataEntry::~EquipmentDataEntry() {
}
void EquipmentDataEntry::_bind_methods() {
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), "_get_item"));
ClassDB::bind_method(D_METHOD("get_item"), &EquipmentDataEntry::get_item);
}

View File

@ -1,47 +0,0 @@
/*
Copyright (c) 2019-2020 Péter Magyar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#ifndef EQUIPMENT_DATA_ENTRY_H
#define EQUIPMENT_DATA_ENTRY_H
#include "core/resource.h"
#include "item_instance.h"
class ItemInstance;
class EquipmentDataEntry : public Resource {
GDCLASS(EquipmentDataEntry, Resource);
public:
Ref<ItemInstance> get_item();
EquipmentDataEntry();
~EquipmentDataEntry();
protected:
static void _bind_methods();
//private:
};
#endif

View File

@ -73,10 +73,10 @@ void ItemTemplate::set_armor_type(const ItemEnums::ArmorType value) {
_armor_type = value;
}
ItemEnums::EquipSlots ItemTemplate::get_equip_slot() const {
int ItemTemplate::get_equip_slot() const {
return _equip_slot;
}
void ItemTemplate::set_equip_slot(const ItemEnums::EquipSlots value) {
void ItemTemplate::set_equip_slot(const int value) {
_equip_slot = value;
}
@ -461,7 +461,7 @@ ItemTemplate::ItemTemplate() {
_item_sub_sub_type = ItemEnums::ITEM_SUB_SUB_TYPE_NONE;
_rarity = ItemEnums::ITEM_RARITY_NONE;
_armor_type = ItemEnums::ARMOR_TYPE_NONE;
_equip_slot = ItemEnums::EQUIP_SLOT_NONE;
_equip_slot = ESS::get_instance()->equip_slot_get_count();
_price = 0;
_scale_x = 0;
@ -497,6 +497,8 @@ void ItemTemplate::_validate_property(PropertyInfo &property) const {
if (property.name.ends_with("stat_id"))
property.hint_string = ESS::get_instance()->stat_get_string();
} else if (prop == "equip_slot") {
property.hint_string = ESS::get_instance()->equip_slot_get_string();
}
}
@ -531,7 +533,7 @@ void ItemTemplate::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_equip_slot"), &ItemTemplate::get_equip_slot);
ClassDB::bind_method(D_METHOD("set_equip_slot", "count"), &ItemTemplate::set_equip_slot);
ADD_PROPERTY(PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_EQUIP_SLOTS), "set_equip_slot", "get_equip_slot");
ADD_PROPERTY(PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ""), "set_equip_slot", "get_equip_slot");
ClassDB::bind_method(D_METHOD("get_price"), &ItemTemplate::get_price);
ClassDB::bind_method(D_METHOD("set_price", "count"), &ItemTemplate::set_price);

View File

@ -58,8 +58,8 @@ public:
ItemEnums::ArmorType get_armor_type() const;
void set_armor_type(const ItemEnums::ArmorType value);
ItemEnums::EquipSlots get_equip_slot() const;
void set_equip_slot(const ItemEnums::EquipSlots value);
int get_equip_slot() const;
void set_equip_slot(const int value);
Ref<ItemVisual> get_item_visual() const;
void set_item_visual(const Ref<ItemVisual> &value);
@ -195,7 +195,7 @@ private:
ItemEnums::ItemSubtype _item_sub_type;
ItemEnums::ItemSubSubtype _item_sub_sub_type;
ItemEnums::ArmorType _armor_type;
ItemEnums::EquipSlots _equip_slot;
int _equip_slot;
int _price;

View File

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="EquipmentDataEntry" inherits="Resource" version="3.2">
<brief_description>
Stores equipment information.
</brief_description>
<description>
</description>
<tutorials>
</tutorials>
<methods>
<method name="_get_item" qualifiers="virtual">
<return type="ItemInstance">
</return>
<description>
</description>
</method>
<method name="get_item">
<return type="ItemInstance">
</return>
<description>
</description>
</method>
</methods>
<constants>
</constants>
</class>

View File

@ -732,14 +732,14 @@ void EntityClassData::notification_centity_resource_removed(Ref<EntityResource>
//Equipment
bool EntityClassData::equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool EntityClassData::equip_should_deny(Entity *entity, int equip_slot, Ref<ItemInstance> item) {
if (has_method("_equip_should_deny"))
if (call("_equip_should_deny", entity, equip_slot, item))
return true;
return false;
}
bool EntityClassData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool EntityClassData::equip_should_deny_bind(Node *entity, int equip_slot, Ref<ItemInstance> item) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND_V(!ObjectDB::instance_validate(entity), false);
#else
@ -753,11 +753,11 @@ bool EntityClassData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots
return equip_should_deny(e, equip_slot, item);
}
void EntityClassData::equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_son_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (has_method("_equip_son_success"))
call("_equip_son_success", entity, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_son_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else
@ -771,11 +771,11 @@ void EntityClassData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots
equip_son_success(e, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_son_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (has_method("_equip_son_fail"))
call("_equip_son_fail", entity, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_son_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else
@ -789,11 +789,11 @@ void EntityClassData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots eq
equip_son_fail(e, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_con_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (has_method("_equip_con_success"))
call("_equip_con_success", entity, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_con_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else
@ -807,11 +807,11 @@ void EntityClassData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots
equip_con_success(e, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_con_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (has_method("_equip_con_fail"))
call("_equip_con_fail", entity, equip_slot, item, old_item, bag_slot);
}
void EntityClassData::equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityClassData::equip_con_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else

View File

@ -204,18 +204,18 @@ public:
//Equipment
bool equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_should_deny(Entity *entity, int equip_slot, Ref<ItemInstance> item);
bool equip_should_deny_bind(Node *entity, int equip_slot, Ref<ItemInstance> item);
void equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
EntityClassData();
~EntityClassData();

View File

@ -770,7 +770,7 @@ void EntityData::notification_centity_resource_removed(Ref<EntityResource> resou
//Equipment
bool EntityData::equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool EntityData::equip_should_deny(Entity *entity, int equip_slot, Ref<ItemInstance> item) {
if (_entity_class_data.is_valid())
if (_entity_class_data->equip_should_deny(entity, equip_slot, item))
return true;
@ -781,7 +781,7 @@ bool EntityData::equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_s
return false;
}
bool EntityData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool EntityData::equip_should_deny_bind(Node *entity, int equip_slot, Ref<ItemInstance> item) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND_V(!ObjectDB::instance_validate(entity), false);
#else
@ -795,14 +795,14 @@ bool EntityData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equi
return equip_should_deny(e, equip_slot, item);
}
void EntityData::equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_son_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->equip_son_success(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_equip_son_success"))
call("_equip_son_success", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_son_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else
@ -816,14 +816,14 @@ void EntityData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equi
equip_son_success(e, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_son_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->equip_son_fail(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_equip_son_fail"))
call("_equip_son_fail", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_son_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else
@ -837,14 +837,14 @@ void EntityData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_s
equip_son_fail(e, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_con_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->equip_con_success(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_equip_con_success"))
call("_equip_con_success", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_con_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else
@ -858,14 +858,14 @@ void EntityData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equi
equip_con_success(e, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_con_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_entity_class_data.is_valid())
_entity_class_data->equip_con_fail(entity, equip_slot, item, old_item, bag_slot);
if (has_method("_equip_con_fail"))
call("_equip_con_fail", entity, equip_slot, item, old_item, bag_slot);
}
void EntityData::equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void EntityData::equip_con_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(entity));
#else

View File

@ -214,18 +214,18 @@ public:
//Equipment
bool equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_should_deny(Entity *entity, int equip_slot, Ref<ItemInstance> item);
bool equip_should_deny_bind(Node *entity, int equip_slot, Ref<ItemInstance> item);
void equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(Entity *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail_bind(Node *entity, int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
EntityData();
~EntityData();

View File

@ -700,11 +700,11 @@ void Entity::_setup() {
if (_s_entity_data->get_equipment_data().is_valid()) {
Ref<EquipmentData> eqd = _s_entity_data->get_equipment_data();
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) {
Ref<ItemInstance> ii = eqd->get_item(i);
if (ii.is_valid())
_s_equipment[i] = ii;
_s_equipment.write[i] = ii;
}
}
@ -1124,7 +1124,7 @@ Dictionary Entity::_to_dict() {
Dictionary equipment;
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) {
Ref<ItemInstance> ii = _s_equipment[i];
if (ii.is_valid())
@ -1311,7 +1311,7 @@ void Entity::_from_dict(const Dictionary &dict) {
Dictionary equipment = dict.get("equipment", Dictionary());
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) {
if (equipment.has(String::num(i))) {
Ref<ItemInstance> ii = _s_equipment[i];
@ -1321,8 +1321,8 @@ void Entity::_from_dict(const Dictionary &dict) {
ii->from_dict(dict[String::num(i)]);
_s_equipment[i] = ii;
_c_equipment[i] = ii;
_s_equipment.write[i] = ii;
_c_equipment.write[i] = ii;
}
}
@ -2030,7 +2030,7 @@ void Entity::creceive_stat(int id, int ccurrent) {
//// Equip Slots ////
bool Entity::equip_should_deny(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool Entity::equip_should_deny(int equip_slot, Ref<ItemInstance> item) {
if (_s_entity_data.is_valid()) {
if (_s_entity_data->equip_should_deny(this, equip_slot, item))
return true;
@ -2050,7 +2050,7 @@ bool Entity::equip_should_deny(ItemEnums::EquipSlots equip_slot, Ref<ItemInstanc
return false;
}
void Entity::equip_son_success(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Entity::equip_son_success(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_s_entity_data.is_valid()) {
_s_entity_data->equip_son_success(this, equip_slot, item, old_item, bag_slot);
}
@ -2067,7 +2067,7 @@ void Entity::equip_son_success(ItemEnums::EquipSlots equip_slot, Ref<ItemInstanc
emit_signal("equip_son_success", this, equip_slot, item, old_item, bag_slot);
}
void Entity::equip_son_fail(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Entity::equip_son_fail(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_s_entity_data.is_valid()) {
_s_entity_data->equip_son_fail(this, equip_slot, item, old_item, bag_slot);
}
@ -2084,7 +2084,7 @@ void Entity::equip_son_fail(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance>
emit_signal("equip_son_fail", this, equip_slot, item, old_item, bag_slot);
}
void Entity::equip_con_success(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Entity::equip_con_success(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_c_entity_data.is_valid()) {
_c_entity_data->equip_con_success(this, equip_slot, item, old_item, bag_slot);
}
@ -2101,7 +2101,7 @@ void Entity::equip_con_success(ItemEnums::EquipSlots equip_slot, Ref<ItemInstanc
emit_signal("equip_con_success", this, equip_slot, item, old_item, bag_slot);
}
void Entity::equip_con_fail(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
void Entity::equip_con_fail(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot) {
if (_c_entity_data.is_valid()) {
_c_entity_data->equip_con_fail(this, equip_slot, item, old_item, bag_slot);
}
@ -2118,14 +2118,14 @@ void Entity::equip_con_fail(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance>
emit_signal("equip_con_fail", this, equip_slot, item, old_item, bag_slot);
}
void Entity::equip_crequest(ItemEnums::EquipSlots equip_slot, int bag_slot) {
void Entity::equip_crequest(int equip_slot, int bag_slot) {
RPCS(equips, equip_slot, bag_slot)
}
void Entity::equips(ItemEnums::EquipSlots equip_slot, int bag_slot) {
void Entity::equips(int equip_slot, int bag_slot) {
call("_equips", equip_slot, bag_slot);
}
void Entity::_equips(ItemEnums::EquipSlots equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
void Entity::_equips(int equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ESS::get_instance()->equip_slot_get_count());
ERR_FAIL_COND(!_s_bag.is_valid());
Ref<ItemInstance> bag_item = _s_bag->get_item(bag_slot);
@ -2155,8 +2155,8 @@ void Entity::_equips(ItemEnums::EquipSlots equip_slot, int bag_slot) {
ORPC(equip_csuccess, equip_slot, bag_slot);
}
void Entity::equip_csuccess(ItemEnums::EquipSlots equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
void Entity::equip_csuccess(int equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ESS::get_instance()->equip_slot_get_count());
ERR_FAIL_COND(!_c_bag.is_valid());
Ref<ItemInstance> old_bag_item = _c_bag->get_item(bag_slot);
@ -2173,8 +2173,8 @@ void Entity::equip_csuccess(ItemEnums::EquipSlots equip_slot, int bag_slot) {
equip_con_success(equip_slot, old_bag_item, old_equipped_item, bag_slot);
}
void Entity::equip_cfail(ItemEnums::EquipSlots equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
void Entity::equip_cfail(int equip_slot, int bag_slot) {
ERR_FAIL_INDEX(equip_slot, ESS::get_instance()->equip_slot_get_count());
ERR_FAIL_COND(!_c_bag.is_valid());
Ref<ItemInstance> bag_item = _c_bag->get_item(bag_slot);
@ -2184,31 +2184,31 @@ void Entity::equip_cfail(ItemEnums::EquipSlots equip_slot, int bag_slot) {
}
Ref<ItemInstance> Entity::equip_gets_slot(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<ItemInstance>());
ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref<ItemInstance>());
return _s_equipment[index];
}
void Entity::equip_sets_slot(int index, Ref<ItemInstance> item) {
ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
ERR_FAIL_INDEX(index, ESS::get_instance()->equip_slot_get_count());
_s_equipment[index] = item;
_s_equipment.write[index] = item;
}
Ref<ItemInstance> Entity::equip_getc_slot(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<ItemInstance>());
ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref<ItemInstance>());
return _c_equipment[index];
}
void Entity::equip_setc_slot(int index, Ref<ItemInstance> item) {
ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
ERR_FAIL_INDEX(index, ESS::get_instance()->equip_slot_get_count());
_c_equipment[index] = item;
_c_equipment.write[index] = item;
}
bool Entity::equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool Entity::equip_can_equip_item(int equip_slot, Ref<ItemInstance> item) {
return call("_equip_can_equip_item", equip_slot, item);
}
bool Entity::_equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
bool Entity::_equip_can_equip_item(int equip_slot, Ref<ItemInstance> item) {
//deequip
if (!item.is_valid())
return true;
@ -5843,6 +5843,9 @@ Entity::Entity() {
_s_pet_formation_index = 0;
_s_pet_ai_state = EntityEnums::AI_STATE_OFF;
_s_equipment.resize(ESS::get_instance()->equip_slot_get_count());
_c_equipment.resize(ESS::get_instance()->equip_slot_get_count());
SET_RPC_REMOTE("csend_request_rank_increase");
SET_RPC_REMOTE("csend_request_rank_decrease");
@ -6072,10 +6075,8 @@ Entity::~Entity() {
_stats.clear();
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
_s_equipment[i].unref();
_c_equipment[i].unref();
}
_s_equipment.clear();
_c_equipment.clear();
_action_bar_profile.unref();
@ -6425,7 +6426,7 @@ bool Entity::_set(const StringName &p_name, const Variant &p_value) {
Dictionary equipment = dict.get("equipment", Dictionary());
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) {
if (equipment.has(String::num(i))) {
Ref<ItemInstance> ii = _s_equipment[i];
@ -6694,7 +6695,7 @@ bool Entity::_get(const StringName &p_name, Variant &r_ret) const {
Dictionary equipment;
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) {
Ref<ItemInstance> ii = _s_equipment[i];
if (ii.is_valid())
@ -7394,7 +7395,7 @@ void Entity::_bind_methods() {
ClassDB::bind_method(D_METHOD("equip_gets_slot", "index"), &Entity::equip_gets_slot);
ClassDB::bind_method(D_METHOD("equip_getc_slot", "index"), &Entity::equip_getc_slot);
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "can"), "_equip_can_equip_item", PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_EQUIP_SLOTS), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "can"), "_equip_can_equip_item", PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance")));
ClassDB::bind_method(D_METHOD("equip_can_equip_item", "equip_slot", "item"), &Entity::equip_can_equip_item);
ClassDB::bind_method(D_METHOD("_equip_can_equip_item", "equip_slot", "item"), &Entity::_equip_can_equip_item);

View File

@ -411,20 +411,20 @@ public:
//// Equip Slots ////
bool equip_should_deny(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_should_deny(int equip_slot, Ref<ItemInstance> item);
void equip_son_success(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_success(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_son_fail(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_success(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_con_fail(int equip_slot, Ref<ItemInstance> item, Ref<ItemInstance> old_item, int bag_slot);
void equip_crequest(ItemEnums::EquipSlots equip_slot, int bag_slot);
void equips(ItemEnums::EquipSlots equip_slot, int bag_slot);
void _equips(ItemEnums::EquipSlots equip_slot, int bag_slot);
void equip_crequest(int equip_slot, int bag_slot);
void equips(int equip_slot, int bag_slot);
void _equips(int equip_slot, int bag_slot);
void equip_csuccess(ItemEnums::EquipSlots equip_slot, int bag_slot);
void equip_cfail(ItemEnums::EquipSlots equip_slot, int bag_slot);
void equip_csuccess(int equip_slot, int bag_slot);
void equip_cfail(int equip_slot, int bag_slot);
Ref<ItemInstance> equip_gets_slot(int index);
void equip_sets_slot(int index, Ref<ItemInstance> item);
@ -432,8 +432,8 @@ public:
Ref<ItemInstance> equip_getc_slot(int index);
void equip_setc_slot(int index, Ref<ItemInstance> item);
bool equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool _equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);
bool equip_can_equip_item(int equip_slot, Ref<ItemInstance> item);
bool _equip_can_equip_item(int equip_slot, Ref<ItemInstance> item);
void equip_applys_item(Ref<ItemInstance> item);
void equip_deapplys_item(Ref<ItemInstance> item);
@ -702,11 +702,11 @@ public:
//// Cooldowns ////
Vector<Ref<Cooldown>> *cooldowns_gets();
Vector<Ref<Cooldown>> *cooldowns_getc();
Vector<Ref<Cooldown> > *cooldowns_gets();
Vector<Ref<Cooldown> > *cooldowns_getc();
HashMap<int, Ref<Cooldown>> *cooldown_get_maps();
HashMap<int, Ref<Cooldown>> *cooldown_get_mapc();
HashMap<int, Ref<Cooldown> > *cooldown_get_maps();
HashMap<int, Ref<Cooldown> > *cooldown_get_mapc();
bool cooldown_hass(int spell_id);
void cooldown_adds(int spell_id, float value);
@ -724,8 +724,8 @@ public:
//Category Cooldowns
Vector<Ref<CategoryCooldown>> category_cooldowns_gets();
Vector<Ref<CategoryCooldown>> category_cooldowns_getc();
Vector<Ref<CategoryCooldown> > category_cooldowns_gets();
Vector<Ref<CategoryCooldown> > category_cooldowns_getc();
bool category_cooldown_hass(int category_id);
void category_cooldown_adds(int category_id, float value);
@ -1128,13 +1128,13 @@ private:
//// Equipment ////
Ref<ItemInstance> _s_equipment[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX];
Ref<ItemInstance> _c_equipment[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX];
Vector<Ref<ItemInstance> > _s_equipment;
Vector<Ref<ItemInstance> > _c_equipment;
//// Resources ////
Vector<Ref<EntityResource>> _s_resources;
Vector<Ref<EntityResource>> _c_resources;
Vector<Ref<EntityResource> > _s_resources;
Vector<Ref<EntityResource> > _c_resources;
//// GCD ////
@ -1155,8 +1155,8 @@ private:
//// AuraComponent ////
Vector<Ref<AuraData>> _s_auras;
Vector<Ref<AuraData>> _c_auras;
Vector<Ref<AuraData> > _s_auras;
Vector<Ref<AuraData> > _c_auras;
EntityEnums::EntityType _s_entity_type;
EntityEnums::EntityType _c_entity_type;
@ -1167,14 +1167,14 @@ private:
int _c_entity_flags;
//// Cooldowns ////
Vector<Ref<Cooldown>> _s_cooldowns;
Vector<Ref<Cooldown>> _c_cooldowns;
Vector<Ref<Cooldown> > _s_cooldowns;
Vector<Ref<Cooldown> > _c_cooldowns;
HashMap<int, Ref<Cooldown>> _s_cooldown_map;
HashMap<int, Ref<Cooldown>> _c_cooldown_map;
HashMap<int, Ref<Cooldown> > _s_cooldown_map;
HashMap<int, Ref<Cooldown> > _c_cooldown_map;
Vector<Ref<CategoryCooldown>> _s_category_cooldowns;
Vector<Ref<CategoryCooldown>> _c_category_cooldowns;
Vector<Ref<CategoryCooldown> > _s_category_cooldowns;
Vector<Ref<CategoryCooldown> > _c_category_cooldowns;
int _s_active_category_cooldowns;
int _c_active_category_cooldowns;
@ -1194,8 +1194,8 @@ private:
//// Data ////
Vector<Ref<EntityDataContainer>> _s_data;
Vector<Ref<EntityDataContainer>> _c_data;
Vector<Ref<EntityDataContainer> > _s_data;
Vector<Ref<EntityDataContainer> > _c_data;
//// Actionbars ////
@ -1204,21 +1204,21 @@ private:
//// Crafting System ////
Vector<Ref<CraftRecipe>> _s_craft_recipes;
Vector<Ref<CraftRecipe>> _c_craft_recipes;
Vector<Ref<CraftRecipe> > _s_craft_recipes;
Vector<Ref<CraftRecipe> > _c_craft_recipes;
//// Known Spells ////
int _s_free_spell_points;
int _c_free_spell_points;
Vector<Ref<Spell>> _s_spells;
Vector<Ref<Spell>> _c_spells;
Vector<Ref<Spell> > _s_spells;
Vector<Ref<Spell> > _c_spells;
//// Skills ////
Vector<Ref<EntitySkill>> _s_skills;
Vector<Ref<EntitySkill>> _c_skills;
Vector<Ref<EntitySkill> > _s_skills;
Vector<Ref<EntitySkill> > _c_skills;
//// Stat Allocations ////
@ -1262,7 +1262,7 @@ private:
// Callbacks
Vector<Ref<SpellCastInfo>> _physics_process_scis;
Vector<Ref<SpellCastInfo> > _physics_process_scis;
};
#endif

View File

@ -28,45 +28,9 @@ const String ItemEnums::BINDING_STRING_ITEM_TYPE = "None,Equipment,Potion,Herb,O
const String ItemEnums::BINDING_STRING_ITEM_TYPE_FLAGS = "Equipment,Potion,Herb,Ore,Gemstone,Food,Alchemy,Engineering,Enchanting,Tailoring,Recipe,Currency,Bag";
const String ItemEnums::BINDING_STRING_ITEM_SUB_TYPE = "None,Sword,Axe,Mace,Dagger,Bow,Crossbow,Gun,Wand,Quest Item";
const String ItemEnums::BINDING_STRING_ITEM_SUB_SUB_TYPE = "None,Two Hand,One Hand,Left Hand,Right Hand";
const String ItemEnums::BINDING_STRING_EQUIP_SLOTS = "Head,Neck,Shoulders,Chest,Gloves,Belt,Legs,Feet,Ring 1,Ring 2,Trinket 1,Trinket 2,Main Hand,Off Hand,None";
const String ItemEnums::BINDING_STRING_ARMOR_TYPE = "None,Cloth,Leather,Mail,Plate";
const String ItemEnums::BINDING_STRING_ENTITY_TEXTURE_LAYERS = "None,Skin,Underwear,Shirt,Clothes Base,Clothes 1,Clothes 2,Clothes 3,Clothes 4,Clothes 5,Belt,Tabard,Overlay";
String ItemEnums::get_equip_slot_string(int slot) {
switch (slot) {
case 0:
return "head";
case 1:
return "neck";
case 2:
return "shoulders";
case 3:
return "chest";
case 4:
return "gloves";
case 5:
return "belt";
case 6:
return "legs";
case 7:
return "feet";
case 8:
return "ring_1";
case 9:
return "ring_2";
case 10:
return "trinket_1";
case 11:
return "trinket_2";
case 12:
return "main_hand";
case 13:
return "off_hand";
}
return "";
}
String ItemEnums::get_armor_type_string(int type) {
switch (type) {
case 0:

View File

@ -36,7 +36,6 @@ public:
static const String BINDING_STRING_ITEM_TYPE_FLAGS;
static const String BINDING_STRING_ITEM_SUB_TYPE;
static const String BINDING_STRING_ITEM_SUB_SUB_TYPE;
static const String BINDING_STRING_EQUIP_SLOTS;
static const String BINDING_STRING_ARMOR_TYPE;
static const String BINDING_STRING_ENTITY_TEXTURE_LAYERS;
@ -98,29 +97,6 @@ public:
ITEM_SUB_SUB_TYPE_RIGHT_HAND
};
enum EquipSlots {
EQUIP_SLOT_HEAD = 0,
EQUIP_SLOT_NECK = 1,
EQUIP_SLOT_SHOULDERS = 2,
EQUIP_SLOT_CHEST = 3,
EQUIP_SLOT_GLOVES = 4,
EQUIP_SLOT_BELT = 5,
EQUIP_SLOT_LEGS = 6,
EQUIP_SLOT_FEET = 7,
EQUIP_SLOT_RING_1 = 8,
EQUIP_SLOT_RING_2 = 9,
EQUIP_SLOT_TRINKET_1 = 10,
EQUIP_SLOT_TRINKET_2 = 11,
EQUIP_SLOT_MAIN_HAND = 12,
EQUIP_SLOT_OFF_HAND = 13,
EQUIP_SLOT_EQUIP_SLOT_MAX = 14,
EQUIP_SLOT_NONE = 14
};
enum ArmorType {
ARMOR_TYPE_NONE = 0,
ARMOR_TYPE_CLOTH = 1,
@ -201,27 +177,6 @@ protected:
BIND_ENUM_CONSTANT(ITEM_SUB_SUB_TYPE_LEFT_HAND);
BIND_ENUM_CONSTANT(ITEM_SUB_SUB_TYPE_RIGHT_HAND);
BIND_ENUM_CONSTANT(EQUIP_SLOT_HEAD);
BIND_ENUM_CONSTANT(EQUIP_SLOT_NECK);
BIND_ENUM_CONSTANT(EQUIP_SLOT_SHOULDERS);
BIND_ENUM_CONSTANT(EQUIP_SLOT_CHEST);
BIND_ENUM_CONSTANT(EQUIP_SLOT_GLOVES);
BIND_ENUM_CONSTANT(EQUIP_SLOT_BELT);
BIND_ENUM_CONSTANT(EQUIP_SLOT_LEGS);
BIND_ENUM_CONSTANT(EQUIP_SLOT_FEET);
BIND_ENUM_CONSTANT(EQUIP_SLOT_RING_1);
BIND_ENUM_CONSTANT(EQUIP_SLOT_RING_2);
BIND_ENUM_CONSTANT(EQUIP_SLOT_TRINKET_1);
BIND_ENUM_CONSTANT(EQUIP_SLOT_TRINKET_2);
BIND_ENUM_CONSTANT(EQUIP_SLOT_MAIN_HAND);
BIND_ENUM_CONSTANT(EQUIP_SLOT_OFF_HAND);
BIND_ENUM_CONSTANT(EQUIP_SLOT_NONE);
BIND_ENUM_CONSTANT(EQUIP_SLOT_EQUIP_SLOT_MAX);
BIND_ENUM_CONSTANT(ARMOR_TYPE_NONE);
BIND_ENUM_CONSTANT(ARMOR_TYPE_CLOTH);
BIND_ENUM_CONSTANT(ARMOR_TYPE_LEATHER);
@ -250,7 +205,6 @@ VARIANT_ENUM_CAST(ItemEnums::ItemRarityFlag);
VARIANT_ENUM_CAST(ItemEnums::ItemType);
VARIANT_ENUM_CAST(ItemEnums::ItemSubtype);
VARIANT_ENUM_CAST(ItemEnums::ItemSubSubtype);
VARIANT_ENUM_CAST(ItemEnums::EquipSlots);
VARIANT_ENUM_CAST(ItemEnums::ArmorType);
VARIANT_ENUM_CAST(ItemEnums::EntityTextureLayers);

View File

@ -33,7 +33,6 @@ SOFTWARE.
#include "data/entities/xp_data.h"
#include "data/items/equipment_data.h"
#include "data/items/equipment_data_entry.h"
#include "data/items/item_stat_modifier.h"
#include "data/items/item_template_stat_modifier.h"
#include "data/spells/spell_cooldown_manipulation_data.h"
@ -178,7 +177,6 @@ void register_entity_spell_system_types() {
ClassDB::register_class<TalentRowData>();
ClassDB::register_class<EquipmentData>();
ClassDB::register_class<EquipmentDataEntry>();
ClassDB::register_class<EntitySkill>();
ClassDB::register_class<EntitySkillData>();

View File

@ -306,6 +306,114 @@ void ESS::stat_set_main_stat_count(const int index) {
_stat_main_stat_count = index;
}
//Equipslots
void ESS::equip_slot_set_string(const String &equip_slot_enum_string) {
_equip_slot_id_to_name.clear();
_equip_slot_name_to_id.clear();
_equip_slot_id_to_property.clear();
_equip_slot_property_to_id.clear();
int slicec = equip_slot_enum_string.get_slice_count(",");
_equip_slot_id_to_name.resize(slicec);
_equip_slot_id_to_property.resize(slicec);
for (int i = 0; i < slicec; ++i) {
String slice = equip_slot_enum_string.get_slicec(',', i);
StringName s = StringName(slice);
_equip_slot_id_to_name.set(i, s);
_equip_slot_name_to_id.set(s, i);
String st = slice;
st = st.to_lower();
st = st.replace(" ", "_");
StringName stp = StringName(st);
_equip_slot_id_to_property.set(i, stp);
_equip_slot_property_to_id.set(stp, i);
}
_equip_slot_enum_string = equip_slot_enum_string + ",None";
}
String ESS::equip_slot_get_string() const {
return _equip_slot_enum_string;
}
int ESS::equip_slot_get_id(const StringName &name) const {
ERR_FAIL_COND_V(!_equip_slot_name_to_id.has(name), 0);
return _equip_slot_name_to_id[name];
}
StringName ESS::equip_slot_get_name(const int id) const {
ERR_FAIL_INDEX_V(id, _equip_slot_id_to_name.size(), StringName());
return _equip_slot_id_to_name[id];
}
int ESS::equip_slot_get_property_id(const StringName &name) const {
ERR_FAIL_COND_V(!_equip_slot_property_to_id.has(name), 0);
return _equip_slot_property_to_id[name];
}
StringName ESS::equip_slot_get_property_name(const int id) const {
ERR_FAIL_INDEX_V(id, _equip_slot_id_to_property.size(), StringName());
return _equip_slot_id_to_property[id];
}
bool ESS::equip_slot_is_property(const StringName &name) const {
return _equip_slot_property_to_id.has(name);
}
int ESS::equip_slot_get_count() const {
return _equip_slot_id_to_name.size();
}
PoolStringArray ESS::equip_slots_get() const {
PoolStringArray arr;
arr.resize(_equip_slot_id_to_name.size());
for (int i = 0; i < _equip_slot_id_to_name.size(); ++i) {
arr.set(i, _equip_slot_id_to_name[i]);
}
return arr;
}
void ESS::equip_slots_set(const PoolStringArray &array) {
_equip_slot_enum_string = "";
_equip_slot_id_to_name.clear();
_equip_slot_name_to_id.clear();
_equip_slot_id_to_property.clear();
_equip_slot_property_to_id.clear();
_equip_slot_id_to_name.resize(array.size());
_equip_slot_id_to_property.resize(array.size());
if (array.size() > 0)
_equip_slot_enum_string += array[0];
for (int i = 0; i < array.size(); ++i) {
StringName s = StringName(array[i]);
_equip_slot_id_to_name.set(i, s);
_equip_slot_name_to_id.set(s, i);
String st = array[i];
st = st.to_lower();
st = st.replace(" ", "_");
StringName stp = StringName(st);
_equip_slot_id_to_property.set(i, stp);
_equip_slot_property_to_id.set(stp, i);
_equip_slot_enum_string += ",";
_equip_slot_enum_string += array[i];
}
}
void ESS::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_use_spell_points"), &ESS::get_use_spell_points);
ClassDB::bind_method(D_METHOD("set_use_spell_points", "value"), &ESS::set_use_spell_points);
@ -397,6 +505,24 @@ void ESS::_bind_methods() {
ClassDB::bind_method(D_METHOD("stat_get_main_stat_count"), &ESS::stat_get_main_stat_count);
ClassDB::bind_method(D_METHOD("stat_set_main_stat_count", "index"), &ESS::stat_set_main_stat_count);
ADD_PROPERTY(PropertyInfo(Variant::INT, "main_stat_count"), "stat_set_main_stat_count", "stat_get_main_stat_count");
//Equipslots
ClassDB::bind_method(D_METHOD("equip_slot_get_string"), &ESS::equip_slot_get_string);
ClassDB::bind_method(D_METHOD("equip_slot_set_string", "equip_slot_enum_string"), &ESS::equip_slot_set_string);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "equip_slot_string"), "equip_slot_set_string", "equip_slot_get_string");
ClassDB::bind_method(D_METHOD("equip_slot_get_id", "name"), &ESS::equip_slot_get_id);
ClassDB::bind_method(D_METHOD("equip_slot_get_name", "id"), &ESS::equip_slot_get_name);
ClassDB::bind_method(D_METHOD("equip_slot_get_property_id", "name"), &ESS::equip_slot_get_property_id);
ClassDB::bind_method(D_METHOD("equip_slot_get_property_name", "id"), &ESS::equip_slot_get_property_name);
ClassDB::bind_method(D_METHOD("equip_slot_is_property", "name"), &ESS::equip_slot_is_property);
ClassDB::bind_method(D_METHOD("equip_slot_get_count"), &ESS::equip_slot_get_count);
ClassDB::bind_method(D_METHOD("equip_slots_get"), &ESS::equip_slots_get);
ClassDB::bind_method(D_METHOD("equip_slots_set", "array"), &ESS::equip_slots_set);
ADD_PROPERTY(PropertyInfo(Variant::POOL_STRING_ARRAY, "equip_slots"), "equip_slots_set", "equip_slots_get");
}
ESS::ESS() {
@ -422,6 +548,8 @@ ESS::ESS() {
stat_set_string(GLOBAL_DEF("ess/enums/stats", "Agility,Strength,Stamina,Intellect,Spirit,Health,Speed,Global Cooldown,Haste"));
_stat_main_stat_count = GLOBAL_DEF("ess/enums/main_stat_count", 5);
equip_slot_set_string(GLOBAL_DEF("ess/enums/equip_slots", "Head,Neck,Shoulder,Chest,Gloves,Belt,Legs,Feet,Ring_1,Ring_2,Trinket_1,Trinket_2,Main_Hand,Off_Hand"));
if (!Engine::get_singleton()->is_editor_hint() && _automatic_load) {
call_deferred("load_all");
}
@ -438,4 +566,10 @@ ESS::~ESS() {
_stat_id_to_property.clear();
_stat_property_to_id.clear();
_equip_slot_id_to_name.clear();
_equip_slot_name_to_id.clear();
_equip_slot_id_to_property.clear();
_equip_slot_property_to_id.clear();
}

View File

@ -126,6 +126,22 @@ public:
int stat_get_main_stat_count() const;
void stat_set_main_stat_count(const int index);
//Equipslots
String equip_slot_get_string() const;
void equip_slot_set_string(const String &equip_slot_enum_string);
int equip_slot_get_id(const StringName &name) const;
StringName equip_slot_get_name(const int id) const;
int equip_slot_get_property_id(const StringName &name) const;
StringName equip_slot_get_property_name(const int id) const;
bool equip_slot_is_property(const StringName &name) const;
int equip_slot_get_count() const;
PoolStringArray equip_slots_get() const;
void equip_slots_set(const PoolStringArray &array);
ESS();
~ESS();
@ -162,6 +178,15 @@ private:
String _stat_enum_string;
int _stat_main_stat_count;
//Equipslots
Vector<StringName> _equip_slot_id_to_name;
HashMap<StringName, int> _equip_slot_name_to_id;
Vector<StringName> _equip_slot_id_to_property;
HashMap<StringName, int> _equip_slot_property_to_id;
String _equip_slot_enum_string;
};
#endif