diff --git a/data/auras/aura.cpp b/data/auras/aura.cpp index 453b350..2c5dd0b 100644 --- a/data/auras/aura.cpp +++ b/data/auras/aura.cpp @@ -785,11 +785,18 @@ void Aura::son_xp_gained(Ref data, int value) { call("_son_xp_gained", data, value); } -void Aura::son_level_up(Ref data, int value) { +void Aura::son_class_level_up(Ref data, int value) { ERR_FAIL_COND(!data.is_valid()); - if (has_method("_son_level_up")) - call("_son_level_up", data, value); + if (has_method("_son_class_level_up")) + call("_son_class_level_up", data, value); +} + +void Aura::son_character_level_up(Ref data, int value) { + ERR_FAIL_COND(!data.is_valid()); + + if (has_method("_son_character_level_up")) + call("_son_character_level_up", data, value); } void Aura::con_cast_failed(Ref data, Ref info) { @@ -908,11 +915,18 @@ void Aura::con_xp_gained(Ref data, int value) { call("_con_xp_gained", data, value); } -void Aura::con_level_up(Ref data, int value) { +void Aura::con_class_level_up(Ref data, int value) { ERR_FAIL_COND(!data.is_valid()); - if (has_method("_con_level_up")) - call("_con_level_up", data, value); + if (has_method("_con_class_level_up")) + call("_con_class_level_up", data, value); +} + +void Aura::con_character_level_up(Ref data, int value) { + ERR_FAIL_COND(!data.is_valid()); + + if (has_method("_con_character_level_up")) + call("_con_character_level_up", data, value); } //Equipment @@ -1301,7 +1315,8 @@ void Aura::_bind_methods() { ClassDB::bind_method(D_METHOD("son_physics_process", "data"), &Aura::son_physics_process); ClassDB::bind_method(D_METHOD("son_xp_gained", "data", "value"), &Aura::son_xp_gained); - ClassDB::bind_method(D_METHOD("son_level_up", "data", "value"), &Aura::son_level_up); + ClassDB::bind_method(D_METHOD("son_class_level_up", "data", "value"), &Aura::son_class_level_up); + ClassDB::bind_method(D_METHOD("son_character_level_up", "data", "value"), &Aura::son_character_level_up); BIND_VMETHOD(MethodInfo("_son_before_cast", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); BIND_VMETHOD(MethodInfo("_son_before_cast_target", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); @@ -1344,7 +1359,8 @@ void Aura::_bind_methods() { BIND_VMETHOD(MethodInfo("_son_physics_process", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"))); BIND_VMETHOD(MethodInfo("_son_xp_gained", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); - BIND_VMETHOD(MethodInfo("_son_level_up", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_class_level_up", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_character_level_up", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); //Clientside Event Handlers ClassDB::bind_method(D_METHOD("con_cast_failed", "data", "info"), &Aura::con_cast_failed); @@ -1373,7 +1389,8 @@ void Aura::_bind_methods() { ClassDB::bind_method(D_METHOD("con_gcd_finished", "data"), &Aura::con_gcd_finished); ClassDB::bind_method(D_METHOD("con_xp_gained", "data", "value"), &Aura::con_xp_gained); - ClassDB::bind_method(D_METHOD("con_level_up", "data", "value"), &Aura::con_level_up); + ClassDB::bind_method(D_METHOD("con_class_level_up", "data", "value"), &Aura::con_class_level_up); + ClassDB::bind_method(D_METHOD("con_character_level_up", "data", "value"), &Aura::con_character_level_up); BIND_VMETHOD(MethodInfo("_con_cast_failed", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); BIND_VMETHOD(MethodInfo("_con_cast_started", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); @@ -1401,7 +1418,8 @@ void Aura::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_gcd_finished", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"))); 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"))); + BIND_VMETHOD(MethodInfo("_con_class_level_up", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_con_character_level_up", PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "AuraData"), PropertyInfo(Variant::INT, "value"))); //Equipment diff --git a/data/auras/aura.h b/data/auras/aura.h index c84ddb8..1003a5e 100644 --- a/data/auras/aura.h +++ b/data/auras/aura.h @@ -293,7 +293,8 @@ public: void son_physics_process(Ref data); void son_xp_gained(Ref data, int value); - void son_level_up(Ref data, int value); + void son_class_level_up(Ref data, int value); + void son_character_level_up(Ref data, int value); //Clientside Event Handlers void con_cast_failed(Ref data, Ref info); @@ -322,7 +323,8 @@ public: void con_gcd_finished(Ref data); void con_xp_gained(Ref data, int value); - void con_level_up(Ref data, int value); + void con_class_level_up(Ref data, int value); + void con_character_level_up(Ref data, int value); //Equipment bool should_deny_equip(Ref data, ItemEnums::EquipSlots equip_slot, Ref item); diff --git a/data/entities/xp_data.cpp b/data/entities/xp_data.cpp index e29b57f..f6ccb45 100644 --- a/data/entities/xp_data.cpp +++ b/data/entities/xp_data.cpp @@ -25,31 +25,57 @@ SOFTWARE. #include "../../entity_enums.h" int XPData::get_max_level() { - return EntityEnums::MAX_LEVEL; + return EntityEnums::MAX_CHARACTER_LEVEL; } int XPData::get_xp(int level) { - ERR_FAIL_INDEX_V(level - 1, EntityEnums::MAX_LEVEL, 9999999); + ERR_FAIL_INDEX_V(level - 1, EntityEnums::MAX_CHARACTER_LEVEL, 9999999); return _xps.get(level - 1); } void XPData::set_xp(int level, int value) { - ERR_FAIL_INDEX(level - 1, EntityEnums::MAX_LEVEL); + ERR_FAIL_INDEX(level - 1, EntityEnums::MAX_CHARACTER_LEVEL); _xps.set(level - 1, value); } bool XPData::can_level_up(int level) { - return level < EntityEnums::MAX_LEVEL; + return level < EntityEnums::MAX_CHARACTER_LEVEL; +} + +int XPData::get_class_max_level() { + return EntityEnums::MAX_CLASS_LEVEL; +} + +int XPData::get_class_xp(int level) { + ERR_FAIL_INDEX_V(level - 1, EntityEnums::MAX_CLASS_LEVEL, 9999999); + + return _class_xps.get(level - 1); +} + +void XPData::set_class_xp(int level, int value) { + ERR_FAIL_INDEX(level - 1, EntityEnums::MAX_CLASS_LEVEL); + + _class_xps.set(level - 1, value); +} + +bool XPData::can_class_level_up(int level) { + return level < EntityEnums::MAX_CLASS_LEVEL; } XPData::XPData() { - _xps.resize(EntityEnums::MAX_LEVEL); + _xps.resize(EntityEnums::MAX_CHARACTER_LEVEL); for (int i = 0; i < _xps.size(); ++i) { _xps.set(i, 0); } + + _class_xps.resize(EntityEnums::MAX_CLASS_LEVEL); + + for (int i = 0; i < _class_xps.size(); ++i) { + _class_xps.set(i, 0); + } } XPData::~XPData() { @@ -62,7 +88,17 @@ void XPData::_bind_methods() { ClassDB::bind_method(D_METHOD("can_level_up", "level"), &XPData::can_level_up); ADD_GROUP("Level", "level_"); - for (int i = 1; i <= EntityEnums::MAX_LEVEL; ++i) { + for (int i = 1; i <= EntityEnums::MAX_CHARACTER_LEVEL; ++i) { ADD_PROPERTYI(PropertyInfo(Variant::INT, "level_" + String::num(i)), "set_xp", "get_xp", i); } + + ClassDB::bind_method(D_METHOD("get_class_max_level"), &XPData::get_class_max_level); + ClassDB::bind_method(D_METHOD("get_class_xp", "level"), &XPData::get_class_xp); + ClassDB::bind_method(D_METHOD("set_class_xp", "level", "value"), &XPData::set_class_xp); + ClassDB::bind_method(D_METHOD("can_class_level_up", "level"), &XPData::can_class_level_up); + + ADD_GROUP("Class Level", "class_level_"); + for (int i = 1; i <= EntityEnums::MAX_CLASS_LEVEL; ++i) { + ADD_PROPERTYI(PropertyInfo(Variant::INT, "class_level_" + String::num(i)), "set_class_xp", "get_class_xp", i); + } } diff --git a/data/entities/xp_data.h b/data/entities/xp_data.h index 7b46c65..32a6b18 100644 --- a/data/entities/xp_data.h +++ b/data/entities/xp_data.h @@ -36,6 +36,11 @@ public: void set_xp(int level, int value); bool can_level_up(int level); + int get_class_max_level(); + int get_class_xp(int level); + void set_class_xp(int level, int value); + bool can_class_level_up(int level); + XPData(); ~XPData(); @@ -44,6 +49,7 @@ protected: private: Vector _xps; + Vector _class_xps; }; #endif diff --git a/entities/data/entity_class_data.cpp b/entities/data/entity_class_data.cpp index 361a8da..fb2ac95 100644 --- a/entities/data/entity_class_data.cpp +++ b/entities/data/entity_class_data.cpp @@ -632,18 +632,32 @@ void EntityClassData::son_xp_gained_bind(Node *entity, int value) { son_xp_gained(e, value); } -void EntityClassData::son_level_up(Entity *entity, int value) { - if (has_method("_son_level_up")) - call("_son_level_up", entity); +void EntityClassData::son_class_level_up(Entity *entity, int value) { + if (has_method("_son_class_level_up")) + call("_son_class_level_up", entity); } -void EntityClassData::son_level_up_bind(Node *entity, int value) { +void EntityClassData::son_class_level_up_bind(Node *entity, int value) { ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); Entity *e = Object::cast_to(entity); ERR_FAIL_COND(e == NULL); - son_level_up(e, value); + son_class_level_up(e, value); +} + +void EntityClassData::son_character_level_up(Entity *entity, int value) { + if (has_method("_son_character_level_up")) + call("_son_character_level_up", entity); +} +void EntityClassData::son_character_level_up_bind(Node *entity, int value) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + son_character_level_up(e, value); } //Clientside Event Handlers @@ -810,18 +824,32 @@ void EntityClassData::con_xp_gained_bind(Node *entity, int value) { con_xp_gained(e, value); } -void EntityClassData::con_level_up(Entity *entity, int value) { - if (has_method("_con_level_up")) - call("_con_level_up", entity); +void EntityClassData::con_class_level_up(Entity *entity, int value) { + if (has_method("_con_class_level_up")) + call("_con_class_level_up", entity); } -void EntityClassData::con_level_up_bind(Node *entity, int value) { +void EntityClassData::con_class_level_up_bind(Node *entity, int value) { ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); Entity *e = Object::cast_to(entity); ERR_FAIL_COND(e == NULL); - con_level_up(e, value); + con_class_level_up(e, value); +} + +void EntityClassData::con_character_level_up(Entity *entity, int value) { + if (has_method("_con_character_level_up")) + call("_con_character_level_up", entity); +} +void EntityClassData::con_character_level_up_bind(Node *entity, int value) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + con_character_level_up(e, value); } //Equipment @@ -955,7 +983,8 @@ void EntityClassData::_bind_methods() { ClassDB::bind_method(D_METHOD("son_gcd_finished", "entity"), &EntityClassData::son_gcd_finished_bind); ClassDB::bind_method(D_METHOD("son_xp_gained", "entity", "value"), &EntityClassData::son_xp_gained_bind); - ClassDB::bind_method(D_METHOD("son_level_up", "entity", "value"), &EntityClassData::son_level_up_bind); + ClassDB::bind_method(D_METHOD("son_class_level_up", "entity", "value"), &EntityClassData::son_class_level_up_bind); + ClassDB::bind_method(D_METHOD("son_character_level_up", "entity", "value"), &EntityClassData::son_character_level_up_bind); BIND_VMETHOD(MethodInfo("_son_before_cast", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); BIND_VMETHOD(MethodInfo("_son_before_cast_target", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); @@ -993,7 +1022,8 @@ void EntityClassData::_bind_methods() { BIND_VMETHOD(MethodInfo("_son_gcd_finished", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); BIND_VMETHOD(MethodInfo("_son_xp_gained", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); - BIND_VMETHOD(MethodInfo("_son_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_class_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_character_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo("_setup_resources", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); @@ -1019,7 +1049,8 @@ void EntityClassData::_bind_methods() { ClassDB::bind_method(D_METHOD("con_gcd_finished", "entity"), &EntityClassData::con_gcd_finished_bind); ClassDB::bind_method(D_METHOD("con_xp_gained", "entity", "value"), &EntityClassData::con_xp_gained_bind); - ClassDB::bind_method(D_METHOD("con_level_up", "entity", "value"), &EntityClassData::con_level_up_bind); + ClassDB::bind_method(D_METHOD("con_class_level_up", "entity", "value"), &EntityClassData::con_class_level_up_bind); + ClassDB::bind_method(D_METHOD("con_character_level_up", "entity", "value"), &EntityClassData::con_character_level_up_bind); BIND_VMETHOD(MethodInfo("_con_cast_failed", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); BIND_VMETHOD(MethodInfo("_con_cast_started", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); @@ -1042,7 +1073,8 @@ void EntityClassData::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_gcd_finished", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); 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"))); + BIND_VMETHOD(MethodInfo("_con_class_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_con_character_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); //Equipment diff --git a/entities/data/entity_class_data.h b/entities/data/entity_class_data.h index 33ad673..46fc466 100644 --- a/entities/data/entity_class_data.h +++ b/entities/data/entity_class_data.h @@ -190,8 +190,10 @@ public: void son_xp_gained(Entity *entity, int value); void son_xp_gained_bind(Node *entity, int value); - void son_level_up(Entity *entity, int value); - void son_level_up_bind(Node *entity, int value); + void son_class_level_up(Entity *entity, int value); + void son_class_level_up_bind(Node *entity, int value); + void son_character_level_up(Entity *entity, int value); + void son_character_level_up_bind(Node *entity, int value); //Clientside Event Handlers void con_cast_failed(Ref info); @@ -224,8 +226,10 @@ public: void con_xp_gained(Entity *entity, int value); void con_xp_gained_bind(Node *entity, int value); - void con_level_up(Entity *entity, int value); - void con_level_up_bind(Node *entity, int value); + void con_class_level_up(Entity *entity, int value); + void con_class_level_up_bind(Node *entity, int value); + void con_character_level_up(Entity *entity, int value); + void con_character_level_up_bind(Node *entity, int value); //Equipment diff --git a/entities/data/entity_data.cpp b/entities/data/entity_data.cpp index 9fb0e42..b70aaa6 100644 --- a/entities/data/entity_data.cpp +++ b/entities/data/entity_data.cpp @@ -603,21 +603,38 @@ void EntityData::son_xp_gained_bind(Node *entity, int value) { son_xp_gained(e, value); } -void EntityData::son_level_up(Entity *entity, int value) { +void EntityData::son_class_level_up(Entity *entity, int value) { if (_entity_class_data.is_valid()) - _entity_class_data->son_level_up(entity, value); + _entity_class_data->son_class_level_up(entity, value); - if (has_method("_son_level_up")) - call("_son_level_up", entity); + if (has_method("_son_class_level_up")) + call("_son_class_level_up", entity); } -void EntityData::son_level_up_bind(Node *entity, int value) { +void EntityData::son_class_level_up_bind(Node *entity, int value) { ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); Entity *e = Object::cast_to(entity); ERR_FAIL_COND(e == NULL); - son_level_up(e, value); + son_class_level_up(e, value); +} + +void EntityData::son_character_level_up(Entity *entity, int value) { + if (_entity_class_data.is_valid()) + _entity_class_data->son_character_level_up(entity, value); + + if (has_method("_son_character_level_up")) + call("_son_character_level_up", entity); +} +void EntityData::son_character_level_up_bind(Node *entity, int value) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + son_character_level_up(e, value); } //Clientside Event Handlers @@ -844,21 +861,38 @@ void EntityData::con_xp_gained_bind(Node *entity, int value) { con_xp_gained(e, value); } -void EntityData::con_level_up(Entity *entity, int value) { +void EntityData::con_class_level_up(Entity *entity, int value) { if (_entity_class_data.is_valid()) - _entity_class_data->con_level_up(entity, value); + _entity_class_data->con_class_level_up(entity, value); - if (has_method("_con_level_up")) - call("_con_level_up", entity); + if (has_method("_con_class_level_up")) + call("_con_class_level_up", entity); } -void EntityData::con_level_up_bind(Node *entity, int value) { +void EntityData::con_class_level_up_bind(Node *entity, int value) { ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); Entity *e = Object::cast_to(entity); ERR_FAIL_COND(e == NULL); - con_level_up(e, value); + con_class_level_up(e, value); +} + +void EntityData::con_character_level_up(Entity *entity, int value) { + if (_entity_class_data.is_valid()) + _entity_class_data->con_character_level_up(entity, value); + + if (has_method("_con_character_level_up")) + call("_con_character_level_up", entity); +} +void EntityData::con_character_level_up_bind(Node *entity, int value) { + ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); + + Entity *e = Object::cast_to(entity); + + ERR_FAIL_COND(e == NULL); + + con_character_level_up(e, value); } //Equipment @@ -1025,7 +1059,8 @@ void EntityData::_bind_methods() { ClassDB::bind_method(D_METHOD("son_gcd_finished", "entity"), &EntityData::son_gcd_finished_bind); ClassDB::bind_method(D_METHOD("son_xp_gained", "entity", "value"), &EntityData::son_xp_gained_bind); - ClassDB::bind_method(D_METHOD("son_level_up", "entity", "value"), &EntityData::son_level_up_bind); + ClassDB::bind_method(D_METHOD("son_class_level_up", "entity", "value"), &EntityData::son_class_level_up_bind); + ClassDB::bind_method(D_METHOD("son_character_level_up", "entity", "value"), &EntityData::son_character_level_up_bind); BIND_VMETHOD(MethodInfo("_son_before_cast", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); BIND_VMETHOD(MethodInfo("_son_before_cast_target", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); @@ -1068,7 +1103,8 @@ void EntityData::_bind_methods() { BIND_VMETHOD(MethodInfo("_son_gcd_finished", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); BIND_VMETHOD(MethodInfo("_son_xp_gained", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); - BIND_VMETHOD(MethodInfo("_son_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_class_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_character_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo("_setup_resources", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); @@ -1094,7 +1130,8 @@ void EntityData::_bind_methods() { ClassDB::bind_method(D_METHOD("con_gcd_finished", "entity"), &EntityData::con_gcd_finished_bind); ClassDB::bind_method(D_METHOD("con_xp_gained", "entity", "value"), &EntityData::con_xp_gained_bind); - ClassDB::bind_method(D_METHOD("con_level_up", "entity", "value"), &EntityData::con_level_up_bind); + ClassDB::bind_method(D_METHOD("con_class_level_up", "entity", "value"), &EntityData::con_class_level_up_bind); + ClassDB::bind_method(D_METHOD("con_character_level_up", "entity", "value"), &EntityData::con_character_level_up_bind); BIND_VMETHOD(MethodInfo("_con_cast_failed", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); BIND_VMETHOD(MethodInfo("_con_cast_started", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "SpellCastInfo"))); @@ -1117,7 +1154,8 @@ void EntityData::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_gcd_finished", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); 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"))); + BIND_VMETHOD(MethodInfo("_con_class_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_con_character_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); //Equipment diff --git a/entities/data/entity_data.h b/entities/data/entity_data.h index 59466a1..ef1e92f 100644 --- a/entities/data/entity_data.h +++ b/entities/data/entity_data.h @@ -185,8 +185,10 @@ public: void son_xp_gained(Entity *entity, int value); void son_xp_gained_bind(Node *entity, int value); - void son_level_up(Entity *entity, int value); - void son_level_up_bind(Node *entity, int value); + void son_class_level_up(Entity *entity, int value); + void son_class_level_up_bind(Node *entity, int value); + void son_character_level_up(Entity *entity, int value); + void son_character_level_up_bind(Node *entity, int value); //Clientside Event Handlers void con_cast_failed(Ref info); @@ -219,8 +221,10 @@ public: void con_xp_gained(Entity *entity, int value); void con_xp_gained_bind(Node *entity, int value); - void con_level_up(Entity *entity, int value); - void con_level_up_bind(Node *entity, int value); + void con_class_level_up(Entity *entity, int value); + void con_class_level_up_bind(Node *entity, int value); + void con_character_level_up(Entity *entity, int value); + void con_character_level_up_bind(Node *entity, int value); //Equipment diff --git a/entities/entity.cpp b/entities/entity.cpp index 9325166..c92ad3c 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -244,7 +244,7 @@ int Entity::gets_level() { void Entity::sets_level(int value) { _s_level = value; - emit_signal("son_level_changed", this, value); + emit_signal("son_character_level_changed", this, value); VRPC(setc_level, value); } @@ -255,7 +255,7 @@ int Entity::getc_level() { void Entity::setc_level(int value) { _c_level = value; - emit_signal("con_level_changed", this, value); + emit_signal("con_character_level_changed", this, value); } int Entity::gets_xp() { @@ -537,7 +537,7 @@ void Entity::_setup(Ref info) { sets_entity_name(_s_entity_data->get_name()); } - slevelup(info->get_level() - 1); + scharacter_levelup(info->get_level() - 1); sets_xp(info->get_xp()); } @@ -2229,23 +2229,42 @@ void Entity::addc_xp(int value) { con_xp_gained(value); } -void Entity::slevelup(int value) { +void Entity::sclass_levelup(int value) { if (value <= 0) return; - if (_s_level == EntityEnums::MAX_LEVEL) + if (_s_level == EntityEnums::MAX_CLASS_LEVEL) + return; + + //_s_level += value; + + son_class_level_up(value); + + VRPC(cclass_levelup, value); +} +void Entity::cclass_levelup(int value) { + _c_level += value; + + con_class_level_up(value); +} + +void Entity::scharacter_levelup(int value) { + if (value <= 0) + return; + + if (_s_level == EntityEnums::MAX_CHARACTER_LEVEL) return; _s_level += value; - son_level_up(value); + son_character_level_up(value); - VRPC(clevelup, value); + VRPC(ccharacter_levelup, value); } -void Entity::clevelup(int value) { +void Entity::ccharacter_levelup(int value) { _c_level += value; - con_level_up(value); + con_character_level_up(value); } void Entity::son_before_aura_applied(Ref data) { @@ -2843,21 +2862,38 @@ void Entity::son_xp_gained(int value) { emit_signal("son_xp_gained", this, value); } -void Entity::son_level_up(int value) { +void Entity::son_class_level_up(int value) { if (_s_entity_data.is_valid()) { - _s_entity_data->son_level_up(this, value); + _s_entity_data->son_class_level_up(this, value); } - if (has_method("_son_level_up")) - call("_son_level_up", value); + if (has_method("_son_class_level_up")) + call("_son_class_level_up", value); for (int i = 0; i < _s_auras.size(); ++i) { Ref ad = _s_auras.get(i); - ad->get_aura()->son_level_up(ad, value); + ad->get_aura()->son_class_level_up(ad, value); } - emit_signal("son_level_up", this, value); + emit_signal("son_class_level_up", this, value); +} + +void Entity::son_character_level_up(int value) { + if (_s_entity_data.is_valid()) { + _s_entity_data->son_character_level_up(this, value); + } + + if (has_method("_son_character_level_up")) + call("_son_character_level_up", value); + + for (int i = 0; i < _s_auras.size(); ++i) { + Ref ad = _s_auras.get(i); + + ad->get_aura()->son_character_level_up(ad, value); + } + + emit_signal("son_character_level_up", this, value); } void Entity::sadd_aura(Ref aura) { @@ -3553,21 +3589,38 @@ void Entity::con_xp_gained(int value) { emit_signal("con_xp_gained", this, value); } -void Entity::con_level_up(int value) { +void Entity::con_class_level_up(int value) { if (_s_entity_data.is_valid()) { - _s_entity_data->con_level_up(this, value); + _s_entity_data->con_class_level_up(this, value); } - if (has_method("_con_level_up")) - call("_con_level_up", value); + if (has_method("_con_class_level_up")) + call("_con_class_level_up", value); for (int i = 0; i < _s_auras.size(); ++i) { Ref ad = _s_auras.get(i); - ad->get_aura()->con_level_up(ad, value); + ad->get_aura()->con_class_level_up(ad, value); } - emit_signal("con_level_up", this, value); + emit_signal("con_class_level_up", this, value); +} + +void Entity::con_character_level_up(int value) { + if (_s_entity_data.is_valid()) { + _s_entity_data->con_character_level_up(this, value); + } + + if (has_method("_con_character_level_up")) + call("_con_character_level_up", value); + + for (int i = 0; i < _s_auras.size(); ++i) { + Ref ad = _s_auras.get(i); + + ad->get_aura()->con_character_level_up(ad, value); + } + + emit_signal("con_character_level_up", this, value); } //// Casting System //// @@ -5569,7 +5622,8 @@ Entity::Entity() { //XP Operations SET_RPC_REMOTE("addc_xp"); - SET_RPC_REMOTE("clevelup"); + SET_RPC_REMOTE("cclass_levelup"); + SET_RPC_REMOTE("ccharacter_levelup"); //Aura Manipulation @@ -5776,12 +5830,12 @@ void Entity::_son_xp_gained(int value) { int xpr = EntityDataManager::get_instance()->get_xp_data()->get_xp(gets_level()); if (xpr <= gets_xp()) { - slevelup(1); + scharacter_levelup(1); sets_xp(0); } } -void Entity::_son_level_up(int level) { +void Entity::_son_character_level_up(int level) { if (!gets_entity_data().is_valid()) return; @@ -6042,7 +6096,8 @@ void Entity::_bind_methods() { BIND_VMETHOD(MethodInfo("_son_gcd_finished")); BIND_VMETHOD(MethodInfo("_son_xp_gained", PropertyInfo(Variant::INT, "value"))); - BIND_VMETHOD(MethodInfo("_son_level_up", PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_class_level_up", PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_son_character_level_up", PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo("_son_target_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::OBJECT, "old_target", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); BIND_VMETHOD(MethodInfo("_con_target_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::OBJECT, "old_target", PROPERTY_HINT_RESOURCE_TYPE, "Entity"))); @@ -6153,7 +6208,8 @@ void Entity::_bind_methods() { BIND_VMETHOD(MethodInfo("_con_gcd_finished")); BIND_VMETHOD(MethodInfo("_con_xp_gained", PropertyInfo(Variant::INT, "value"))); - BIND_VMETHOD(MethodInfo("_con_level_up", PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_con_class_level_up", PropertyInfo(Variant::INT, "value"))); + BIND_VMETHOD(MethodInfo("_con_character_level_up", PropertyInfo(Variant::INT, "value"))); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "value"), "_canc_interact")); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "value"), "_cans_interact")); @@ -6188,7 +6244,8 @@ void Entity::_bind_methods() { ClassDB::bind_method(D_METHOD("con_gcd_finished"), &Entity::con_gcd_finished); ClassDB::bind_method(D_METHOD("con_xp_gained", "value"), &Entity::con_xp_gained); - ClassDB::bind_method(D_METHOD("con_level_up", "value"), &Entity::con_level_up); + ClassDB::bind_method(D_METHOD("con_class_level_up", "value"), &Entity::con_class_level_up); + ClassDB::bind_method(D_METHOD("con_character_level_up", "value"), &Entity::con_character_level_up); //Modifiers/Requesters ClassDB::bind_method(D_METHOD("sapply_passives_damage_receive", "data"), &Entity::sapply_passives_damage_receive); @@ -6232,20 +6289,30 @@ void Entity::_bind_methods() { ADD_SIGNAL(MethodInfo("son_xp_gained", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); ADD_SIGNAL(MethodInfo("con_xp_gained", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); - ADD_SIGNAL(MethodInfo("con_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); - ADD_SIGNAL(MethodInfo("son_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + ADD_SIGNAL(MethodInfo("con_class_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + ADD_SIGNAL(MethodInfo("son_class_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); - ADD_SIGNAL(MethodInfo("son_level_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "level"))); - ADD_SIGNAL(MethodInfo("con_level_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "level"))); + ADD_SIGNAL(MethodInfo("con_character_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + ADD_SIGNAL(MethodInfo("son_character_level_up", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "value"))); + + ADD_SIGNAL(MethodInfo("son_class_level_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "level"))); + ADD_SIGNAL(MethodInfo("con_class_level_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "level"))); + + ADD_SIGNAL(MethodInfo("son_character_level_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "level"))); + ADD_SIGNAL(MethodInfo("con_character_level_changed", PropertyInfo(Variant::OBJECT, "entity", PROPERTY_HINT_RESOURCE_TYPE, "Entity"), PropertyInfo(Variant::INT, "level"))); ClassDB::bind_method(D_METHOD("adds_xp", "value"), &Entity::adds_xp); ClassDB::bind_method(D_METHOD("addc_xp", "value"), &Entity::addc_xp); - ClassDB::bind_method(D_METHOD("slevelup", "value"), &Entity::slevelup); - ClassDB::bind_method(D_METHOD("clevelup", "value"), &Entity::clevelup); + ClassDB::bind_method(D_METHOD("sclass_levelup", "value"), &Entity::sclass_levelup); + ClassDB::bind_method(D_METHOD("cclass_levelup", "value"), &Entity::cclass_levelup); + + ClassDB::bind_method(D_METHOD("scharacter_levelup", "value"), &Entity::scharacter_levelup); + ClassDB::bind_method(D_METHOD("ccharacter_levelup", "value"), &Entity::ccharacter_levelup); ClassDB::bind_method(D_METHOD("son_xp_gained", "value"), &Entity::son_xp_gained); - ClassDB::bind_method(D_METHOD("son_level_up", "value"), &Entity::son_level_up); + ClassDB::bind_method(D_METHOD("son_class_level_up", "value"), &Entity::son_class_level_up); + ClassDB::bind_method(D_METHOD("son_character_level_up", "value"), &Entity::son_character_level_up); //Aura Manipulation ClassDB::bind_method(D_METHOD("sadd_aura", "aura"), &Entity::sadd_aura); @@ -6922,7 +6989,7 @@ void Entity::_bind_methods() { ClassDB::bind_method(D_METHOD("_scraft", "id"), &Entity::_scraft); ClassDB::bind_method(D_METHOD("_son_xp_gained", "value"), &Entity::_son_xp_gained); - ClassDB::bind_method(D_METHOD("_son_level_up", "level"), &Entity::_son_level_up); + ClassDB::bind_method(D_METHOD("_son_character_level_up", "level"), &Entity::_son_character_level_up); ClassDB::bind_method(D_METHOD("_moved"), &Entity::_moved); ClassDB::bind_method(D_METHOD("_con_target_changed", "entity", "old_target"), &Entity::_con_target_changed); ClassDB::bind_method(D_METHOD("_son_death"), &Entity::_son_death); diff --git a/entities/entity.h b/entities/entity.h index b0489cd..60bfc33 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -489,7 +489,8 @@ public: void son_physics_process(float delta); void son_xp_gained(int value); - void son_level_up(int value); + void son_class_level_up(int value); + void son_character_level_up(int value); //Clientside EventHandlers void con_cast_failed(Ref info); @@ -515,7 +516,8 @@ public: void con_dealt_heal(Ref info); void con_xp_gained(int value); - void con_level_up(int value); + void con_class_level_up(int value); + void con_character_level_up(int value); //Modifiers/Requesters void sapply_passives_damage_receive(Ref info); @@ -559,8 +561,10 @@ public: //XP Operations void adds_xp(int value); void addc_xp(int value); - void slevelup(int value); - void clevelup(int value); + void sclass_levelup(int value); + void cclass_levelup(int value); + void scharacter_levelup(int value); + void ccharacter_levelup(int value); //Aura Manipulation void sadd_aura(Ref aura); @@ -964,7 +968,7 @@ public: protected: void _scraft(int id); void _son_xp_gained(int value); - void _son_level_up(int level); + void _son_character_level_up(int level); void _moved(); void _con_target_changed(Node *p_entity, Node *p_old_target); void _son_death(); diff --git a/entities/stats/complex_level_stat_data.cpp b/entities/stats/complex_level_stat_data.cpp index 38d1aac..21d28bb 100644 --- a/entities/stats/complex_level_stat_data.cpp +++ b/entities/stats/complex_level_stat_data.cpp @@ -101,7 +101,7 @@ void ComplexLevelStatData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_spirit_for_level", "level"), &ComplexLevelStatData::get_spirit_for_level); ClassDB::bind_method(D_METHOD("set_spirit_for_level", "level", "value"), &ComplexLevelStatData::set_spirit_for_level); - for (int i = 0; i < EntityEnums::MAX_LEVEL; ++i) { + for (int i = 0; i < EntityEnums::MAX_CHARACTER_LEVEL; ++i) { ADD_GROUP("Level " + String::num(i + 1), "level_" + String::num(i + 1)); ADD_PROPERTYI(PropertyInfo(Variant::INT, "level_" + String::num(i + 1) + "_agility"), "set_agility_for_level", "get_agility_for_level", i); ADD_PROPERTYI(PropertyInfo(Variant::INT, "level_" + String::num(i + 1) + "_strength"), "set_strength_for_level", "get_strength_for_level", i); diff --git a/entities/stats/complex_level_stat_data.h b/entities/stats/complex_level_stat_data.h index 2a3cb30..f2f29d9 100644 --- a/entities/stats/complex_level_stat_data.h +++ b/entities/stats/complex_level_stat_data.h @@ -70,7 +70,7 @@ protected: static void _bind_methods(); private: - ComplexLevelStatsEntry _entries[EntityEnums::MAX_LEVEL]; + ComplexLevelStatsEntry _entries[EntityEnums::MAX_CHARACTER_LEVEL]; }; #endif diff --git a/entity_enums.cpp b/entity_enums.cpp index 8f88de9..868ca7a 100644 --- a/entity_enums.cpp +++ b/entity_enums.cpp @@ -199,6 +199,7 @@ void EntityEnums::_bind_methods() { BIND_ENUM_CONSTANT(ENTITY_WINDOW_VENDOR); BIND_CONSTANT(GENDER_COUNT); - BIND_CONSTANT(MAX_LEVEL); + BIND_CONSTANT(MAX_CHARACTER_LEVEL); + BIND_CONSTANT(MAX_CLASS_LEVEL); BIND_CONSTANT(BASE_XP); } diff --git a/entity_enums.h b/entity_enums.h index e3fce95..4b77445 100644 --- a/entity_enums.h +++ b/entity_enums.h @@ -269,7 +269,8 @@ public: enum { GENDER_COUNT = 2, - MAX_LEVEL = 50, + MAX_CHARACTER_LEVEL = 20, + MAX_CLASS_LEVEL = 60, BASE_XP = 50, };