Levels are now (properly) separated into class and character levels.

This commit is contained in:
Relintai 2020-02-19 12:17:10 +01:00
parent e16c021ac8
commit a2d4df0c89
14 changed files with 313 additions and 100 deletions

View File

@ -785,11 +785,18 @@ void Aura::son_xp_gained(Ref<AuraData> data, int value) {
call("_son_xp_gained", data, value);
}
void Aura::son_level_up(Ref<AuraData> data, int value) {
void Aura::son_class_level_up(Ref<AuraData> 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<AuraData> 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<AuraData> data, Ref<SpellCastInfo> info) {
@ -908,11 +915,18 @@ void Aura::con_xp_gained(Ref<AuraData> data, int value) {
call("_con_xp_gained", data, value);
}
void Aura::con_level_up(Ref<AuraData> data, int value) {
void Aura::con_class_level_up(Ref<AuraData> 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<AuraData> 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

View File

@ -293,7 +293,8 @@ public:
void son_physics_process(Ref<AuraData> data);
void son_xp_gained(Ref<AuraData> data, int value);
void son_level_up(Ref<AuraData> data, int value);
void son_class_level_up(Ref<AuraData> data, int value);
void son_character_level_up(Ref<AuraData> data, int value);
//Clientside Event Handlers
void con_cast_failed(Ref<AuraData> data, Ref<SpellCastInfo> info);
@ -322,7 +323,8 @@ public:
void con_gcd_finished(Ref<AuraData> data);
void con_xp_gained(Ref<AuraData> data, int value);
void con_level_up(Ref<AuraData> data, int value);
void con_class_level_up(Ref<AuraData> data, int value);
void con_character_level_up(Ref<AuraData> data, int value);
//Equipment
bool should_deny_equip(Ref<AuraData> data, ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item);

View File

@ -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);
}
}

View File

@ -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<int> _xps;
Vector<int> _class_xps;
};
#endif

View File

@ -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>(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>(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>(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>(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

View File

@ -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<SpellCastInfo> 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

View File

@ -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>(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>(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>(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>(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

View File

@ -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<SpellCastInfo> 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

View File

@ -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<EntityCreateInfo> 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<AuraData> 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<AuraData> 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<AuraData> 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<AuraData> 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<AuraData> 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<AuraData> 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);

View File

@ -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<SpellCastInfo> info);
@ -515,7 +516,8 @@ public:
void con_dealt_heal(Ref<SpellHealInfo> 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<SpellDamageInfo> 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<AuraData> 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();

View File

@ -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);

View File

@ -70,7 +70,7 @@ protected:
static void _bind_methods();
private:
ComplexLevelStatsEntry _entries[EntityEnums::MAX_LEVEL];
ComplexLevelStatsEntry _entries[EntityEnums::MAX_CHARACTER_LEVEL];
};
#endif

View File

@ -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);
}

View File

@ -269,7 +269,8 @@ public:
enum {
GENDER_COUNT = 2,
MAX_LEVEL = 50,
MAX_CHARACTER_LEVEL = 20,
MAX_CLASS_LEVEL = 60,
BASE_XP = 50,
};