From 3b47a07bac747be2be5e9f61152faa0a3d6b8044 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 00:50:47 +1100 Subject: Player Xp --- source/Entities/Player.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++-- source/Entities/Player.h | 44 ++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 4 deletions(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index 2e4199629..31834df39 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -1,4 +1,4 @@ - + #include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "Player.h" @@ -33,6 +33,7 @@ + cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName) : super(etPlayer, 0.6, 1.8) , m_GameMode(eGameMode_NotSet) @@ -65,6 +66,10 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName) , m_EatingFinishTick(-1) , m_IsChargingBow(false) , m_BowCharge(0) + , m_XpLevel(0) + , m_XpP(0.f) + , m_XpTotal(0) + , m_XpNextLevelTotal(0) { LOGD("Created a player object for \"%s\" @ \"%s\" at %p, ID %d", a_PlayerName.c_str(), a_Client->GetIPString().c_str(), @@ -260,6 +265,67 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk) +bool cPlayer::SetExperience(int a_XpTotal) +{ + if(!(a_XpTotal >= 0) || (a_XpTotal > (INT_MAX - m_XpTotal))) + { + LOGWARNING("Tried to update experiece with an invalid Xp value: %d", a_XpTotal); + return false; //oops, they gave us a dodgey number + } + + + m_XpTotal = a_XpTotal; + + //now calculate XpP and XpLevel + //First Calc current level using quadratic eqn + m_XpLevel = CalcLevelFromXp(m_XpTotal); + + //calculate total Xp for next level + m_XpNextLevelTotal = XpAtLevel(m_XpLevel+1); + + //calulate Xp Percentage + m_XpP = (float)m_XpLevel / (float)m_XpNextLevelTotal; + + return true;//aka happy :) +} + + + + + +bool cPlayer::AddExperience(int a_Xp_delta) +{ + if(a_Xp_delta > MAX_EXPERIENCE_ORB_SIZE || a_Xp_delta < 0) + { + //value was too large or negative, abort and report + LOGWARNING("Attempt was made to increment Xp by %d, max is %d and must be positive", + a_Xp_delta, MAX_EXPERIENCE_ORB_SIZE); + return false; + } + + LOGD("Player \"%s\" earnt %d experience", m_PlayerName.c_str(), a_Xp_delta); + + //update Xp, note there is no min + m_XpTotal += a_Xp_delta; + + //update Xp percentage + if(m_XpTotal >= m_XpNextLevelTotal) + { + //oh actually, update their level first + + m_XpLevel++; + m_XpNextLevelTotal = XpAtLevel(m_XpLevel+1); + } + + m_XpP = (float)m_XpLevel / (float)m_XpNextLevelTotal; + + return true; +} + + + + + void cPlayer::StartChargingBow(void) { LOGD("Player \"%s\" started charging their bow", m_PlayerName.c_str()); @@ -1268,7 +1334,7 @@ bool cPlayer::LoadFromDisk() cFile f; if (!f.Open(SourceFile, cFile::fmRead)) { - // This is a new player whom we haven't seen yet, bail out, let them have the defaults + // This is a new player whom we haven't seen yet, bail, let them have the defaults return false; } @@ -1278,7 +1344,7 @@ bool cPlayer::LoadFromDisk() LOGWARNING("Cannot read player data from file \"%s\"", SourceFile.c_str()); return false; } - f.Close(); + f.Close(); //cool kids play nice Json::Value root; Json::Reader reader; @@ -1308,6 +1374,7 @@ bool cPlayer::LoadFromDisk() } m_Health = root.get("health", 0).asInt(); + m_XpLevel = root.get("experience", 0).asInt(); m_AirLevel = root.get("air", MAX_AIR_LEVEL).asInt(); m_FoodLevel = root.get("food", MAX_FOOD_LEVEL).asInt(); m_FoodSaturationLevel = root.get("foodSaturation", MAX_FOOD_LEVEL).asDouble(); @@ -1354,6 +1421,7 @@ bool cPlayer::SaveToDisk() root["rotation"] = JSON_PlayerRotation; root["inventory"] = JSON_Inventory; root["health"] = m_Health; + root["experience"] = m_XpTotal; root["air"] = m_AirLevel; root["food"] = m_FoodLevel; root["foodSaturation"] = m_FoodSaturationLevel; diff --git a/source/Entities/Player.h b/source/Entities/Player.h index 01efa3681..81552fcf1 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -63,6 +63,27 @@ public: /// Returns the currently equipped boots; empty item if none virtual cItem GetEquippedBoots(void) const override { return m_Inventory.GetEquippedBoots(); } + + /** Sets the experience total - XpTotal, updates XpLevel and XpP as appropriate + Returns true on success + should really only be called at init or player death + */ + bool SetExperience(int a_XpTotal); + + /* Adds Xp, will not inc more than MAX_EXPERIENCE_ORB_SIZE! + Returns true on success + Updates XpLevel and XpP appropriately + */ + bool AddExperience(int a_Xp_delta); + + /// Gets the experience total - XpTotal + inline int GetExperience(void) { return m_XpTotal; } + + /// Gets the current level - XpLevel + inline int GetExperienceLevel(void) { return m_XpLevel; } + + /// Gets the experience bar percentage - XpP + inline float GetExperiencePercentage(void) { return m_XpP; } /// Starts charging the equipped bow void StartChargingBow(void); @@ -289,7 +310,7 @@ public: virtual bool IsSubmerged(void) const{ return m_IsSubmerged; } // tolua_end - + // cEntity overrides: virtual bool IsCrouched (void) const { return m_IsCrouched; } virtual bool IsSprinting(void) const { return m_IsSprinting; } @@ -378,6 +399,27 @@ protected: /// The world tick in which eating will be finished. -1 if not eating Int64 m_EatingFinishTick; + + /// Player Xp levels etc + int m_XpLevel; //store this and m_XpP to save calculating each time + float m_XpP; //between 0 & 1 + int m_XpTotal; + int m_XpNextLevelTotal; //save calculating this often + + //Xp level defines + #define XP_TO_LEVEL15 255 + #define XP_PER_LEVEL_TO15 17 + #define XP_TO_LEVEL30 825 + + /// Caculates the Xp at a given level, ref: http://minecraft.gamepedia.com/XP + inline int XpAtLevel(int level) { return (int) ((level <= 15)? (15*level) : + ((level <= 31)? (1.5*level*level - 29.5*level + 360) : + (3.5*level*level - 151.5*level + 2220))); } + + /// inverse of XpAtLevel, ref: http://minecraft.gamepedia.com/XP values are as per this with pre-calculations + inline int CalcLevelFromXp(int XpTotal) { return (int) ((XpTotal <= XP_TO_LEVEL15)? XpTotal / XP_PER_LEVEL_TO15 : //level 0-15 or... + (XpTotal <= XP_TO_LEVEL30)? ( 29.5 + sqrt( 870.25 - (6 * ( 360 - XpTotal )))) / 3 : //level 15-30 + (151.5 + sqrt( 22952.25 - (14 * (2220 - XpTotal)))) / 7); }//level 30+ bool m_IsChargingBow; int m_BowCharge; -- cgit v1.2.3 From fc0b6adf51f6f3b847b98be1d5a3454c65109a90 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 01:05:58 +1100 Subject: Player Xp, includes get/set and addExperience --- source/Entities/Player.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index 31834df39..a39eda1ba 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -1374,13 +1374,14 @@ bool cPlayer::LoadFromDisk() } m_Health = root.get("health", 0).asInt(); - m_XpLevel = root.get("experience", 0).asInt(); m_AirLevel = root.get("air", MAX_AIR_LEVEL).asInt(); m_FoodLevel = root.get("food", MAX_FOOD_LEVEL).asInt(); m_FoodSaturationLevel = root.get("foodSaturation", MAX_FOOD_LEVEL).asDouble(); m_FoodTickTimer = root.get("foodTickTimer", 0).asInt(); m_FoodExhaustionLevel = root.get("foodExhaustion", 0).asDouble(); + SetExperience(root.get("experience", 0).asInt()); + m_GameMode = (eGameMode) root.get("gamemode", eGameMode_NotSet).asInt(); m_Inventory.LoadFromJson(root["inventory"]); -- cgit v1.2.3 From 875bca5fb9ea509c0bac40cb3c874bf0a45db9c8 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 01:07:24 +1100 Subject: Player Xp, includes get/set and addExperience --- source/Entities/Player.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.h b/source/Entities/Player.h index 81552fcf1..ab8fd3b5a 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -77,7 +77,7 @@ public: bool AddExperience(int a_Xp_delta); /// Gets the experience total - XpTotal - inline int GetExperience(void) { return m_XpTotal; } + inline int GetExperienceTotal(void) { return m_XpTotal; } /// Gets the current level - XpLevel inline int GetExperienceLevel(void) { return m_XpLevel; } -- cgit v1.2.3 From bf2dc38f352b24b4df1b4b1601f234b98c6d7a5b Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 04:25:47 +1100 Subject: Fixed problems with code style etc --- source/Entities/Player.cpp | 98 ++++++++++++++++++++++++++++++++-------------- source/Entities/Player.h | 37 ++++++++--------- 2 files changed, 84 insertions(+), 51 deletions(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index a39eda1ba..02d80a8b9 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -66,10 +66,7 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName) , m_EatingFinishTick(-1) , m_IsChargingBow(false) , m_BowCharge(0) - , m_XpLevel(0) - , m_XpP(0.f) , m_XpTotal(0) - , m_XpNextLevelTotal(0) { LOGD("Created a player object for \"%s\" @ \"%s\" at %p, ID %d", a_PlayerName.c_str(), a_Client->GetIPString().c_str(), @@ -265,6 +262,70 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk) +int cPlayer::CalcLevelFromXp(int a_XpTotal) +{ + //level 0 to 15 + if(a_XpTotal <= XP_TO_LEVEL15) + { + return (int) a_XpTotal / XP_PER_LEVEL_TO15; + } + + //level 30+ + if(a_XpTotal > XP_TO_LEVEL30) + { + return (int) (151.5 + sqrt( 22952.25 - (14 * (2220 - a_XpTotal)))) / 7; + } + + //level 16 to 30 + return (int) ( 29.5 + sqrt( 870.25 - (6 * ( 360 - a_XpTotal )))) / 3; +} + + + + + +int cPlayer::XpAtLevel(int a_Level) +{ + //level 0 to 15 + if(a_Level <= 15) + { + return a_Level * XP_PER_LEVEL_TO15; + } + + //level 30+ + if(a_Level >= 31) + { + return (int) ( (3.5 * a_Level * a_Level) - (151.5 * a_Level) + 2220 ); + } + + //level 16 to 30 + return (int) ( (1.5 * a_Level * a_Level) - (29.5 * a_Level) + 360 ); +} + + + + + +int cPlayer::GetExperienceLevel() +{ + return CalcLevelFromXp(m_XpTotal); +} + + + + + +float cPlayer::GetExperiencePercentage() +{ + int currentLevel = CalcLevelFromXp(m_XpTotal); + + return (float)m_XpTotal / (float)XpAtLevel(1+currentLevel); +} + + + + + bool cPlayer::SetExperience(int a_XpTotal) { if(!(a_XpTotal >= 0) || (a_XpTotal > (INT_MAX - m_XpTotal))) @@ -273,53 +334,30 @@ bool cPlayer::SetExperience(int a_XpTotal) return false; //oops, they gave us a dodgey number } - m_XpTotal = a_XpTotal; - //now calculate XpP and XpLevel - //First Calc current level using quadratic eqn - m_XpLevel = CalcLevelFromXp(m_XpTotal); - - //calculate total Xp for next level - m_XpNextLevelTotal = XpAtLevel(m_XpLevel+1); - - //calulate Xp Percentage - m_XpP = (float)m_XpLevel / (float)m_XpNextLevelTotal; - - return true;//aka happy :) + return true; } -bool cPlayer::AddExperience(int a_Xp_delta) +int cPlayer::AddExperience(int a_Xp_delta) { if(a_Xp_delta > MAX_EXPERIENCE_ORB_SIZE || a_Xp_delta < 0) { //value was too large or negative, abort and report LOGWARNING("Attempt was made to increment Xp by %d, max is %d and must be positive", a_Xp_delta, MAX_EXPERIENCE_ORB_SIZE); - return false; + return -1; //should we instead just return the current Xp? } LOGD("Player \"%s\" earnt %d experience", m_PlayerName.c_str(), a_Xp_delta); - //update Xp, note there is no min m_XpTotal += a_Xp_delta; - //update Xp percentage - if(m_XpTotal >= m_XpNextLevelTotal) - { - //oh actually, update their level first - - m_XpLevel++; - m_XpNextLevelTotal = XpAtLevel(m_XpLevel+1); - } - - m_XpP = (float)m_XpLevel / (float)m_XpNextLevelTotal; - - return true; + return m_XpTotal; } diff --git a/source/Entities/Player.h b/source/Entities/Player.h index ab8fd3b5a..e0ccaf318 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -64,26 +64,25 @@ public: /// Returns the currently equipped boots; empty item if none virtual cItem GetEquippedBoots(void) const override { return m_Inventory.GetEquippedBoots(); } - /** Sets the experience total - XpTotal, updates XpLevel and XpP as appropriate + /** Sets the experience total Returns true on success should really only be called at init or player death */ bool SetExperience(int a_XpTotal); /* Adds Xp, will not inc more than MAX_EXPERIENCE_ORB_SIZE! - Returns true on success - Updates XpLevel and XpP appropriately + Returns the new total experience, -1 on error */ - bool AddExperience(int a_Xp_delta); + int AddExperience(int a_Xp_delta); /// Gets the experience total - XpTotal inline int GetExperienceTotal(void) { return m_XpTotal; } /// Gets the current level - XpLevel - inline int GetExperienceLevel(void) { return m_XpLevel; } + int GetExperienceLevel(void); /// Gets the experience bar percentage - XpP - inline float GetExperiencePercentage(void) { return m_XpP; } + float GetExperiencePercentage(void); /// Starts charging the equipped bow void StartChargingBow(void); @@ -329,6 +328,14 @@ protected: std::string m_PlayerName; std::string m_LoadedWorldName; + /// Xp Level stuff + enum + { + XP_TO_LEVEL15 = 255, + XP_PER_LEVEL_TO15 = 17, + XP_TO_LEVEL30 = 825 + } ; + /// Player's air level (for swimming) int m_AirLevel; @@ -400,26 +407,14 @@ protected: /// The world tick in which eating will be finished. -1 if not eating Int64 m_EatingFinishTick; - /// Player Xp levels etc - int m_XpLevel; //store this and m_XpP to save calculating each time - float m_XpP; //between 0 & 1 + /// Player Xp level int m_XpTotal; - int m_XpNextLevelTotal; //save calculating this often - - //Xp level defines - #define XP_TO_LEVEL15 255 - #define XP_PER_LEVEL_TO15 17 - #define XP_TO_LEVEL30 825 /// Caculates the Xp at a given level, ref: http://minecraft.gamepedia.com/XP - inline int XpAtLevel(int level) { return (int) ((level <= 15)? (15*level) : - ((level <= 31)? (1.5*level*level - 29.5*level + 360) : - (3.5*level*level - 151.5*level + 2220))); } + static int XpAtLevel(int a_Level); /// inverse of XpAtLevel, ref: http://minecraft.gamepedia.com/XP values are as per this with pre-calculations - inline int CalcLevelFromXp(int XpTotal) { return (int) ((XpTotal <= XP_TO_LEVEL15)? XpTotal / XP_PER_LEVEL_TO15 : //level 0-15 or... - (XpTotal <= XP_TO_LEVEL30)? ( 29.5 + sqrt( 870.25 - (6 * ( 360 - XpTotal )))) / 3 : //level 15-30 - (151.5 + sqrt( 22952.25 - (14 * (2220 - XpTotal)))) / 7); }//level 30+ + static int CalcLevelFromXp(int a_XpTotal); bool m_IsChargingBow; int m_BowCharge; -- cgit v1.2.3 From c17f77cf2a6394c833bcc7e83f65e7281f2f32b5 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 04:41:36 +1100 Subject: changed name convention --- source/Entities/Player.cpp | 4 ++-- source/Entities/Player.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index 02d80a8b9..470ed428f 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -306,7 +306,7 @@ int cPlayer::XpAtLevel(int a_Level) -int cPlayer::GetExperienceLevel() +int cPlayer::XpGetLevel() { return CalcLevelFromXp(m_XpTotal); } @@ -315,7 +315,7 @@ int cPlayer::GetExperienceLevel() -float cPlayer::GetExperiencePercentage() +float cPlayer::XpGetPercentage() { int currentLevel = CalcLevelFromXp(m_XpTotal); diff --git a/source/Entities/Player.h b/source/Entities/Player.h index e0ccaf318..d998c47bb 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -76,13 +76,13 @@ public: int AddExperience(int a_Xp_delta); /// Gets the experience total - XpTotal - inline int GetExperienceTotal(void) { return m_XpTotal; } + inline int XpGetTotal(void) { return m_XpTotal; } /// Gets the current level - XpLevel - int GetExperienceLevel(void); + int XpGetLevel(void); /// Gets the experience bar percentage - XpP - float GetExperiencePercentage(void); + float XpGetPercentage(void); /// Starts charging the equipped bow void StartChargingBow(void); -- cgit v1.2.3 From 8c6bdca425a70fabaee6d3937685314dcaad04a6 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 07:02:53 +1100 Subject: minor changes --- source/Entities/Player.cpp | 10 +++++----- source/Entities/Player.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index 470ed428f..88be5de56 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -267,7 +267,7 @@ int cPlayer::CalcLevelFromXp(int a_XpTotal) //level 0 to 15 if(a_XpTotal <= XP_TO_LEVEL15) { - return (int) a_XpTotal / XP_PER_LEVEL_TO15; + return a_XpTotal / XP_PER_LEVEL_TO15; } //level 30+ @@ -345,11 +345,11 @@ bool cPlayer::SetExperience(int a_XpTotal) int cPlayer::AddExperience(int a_Xp_delta) { - if(a_Xp_delta > MAX_EXPERIENCE_ORB_SIZE || a_Xp_delta < 0) + if(a_Xp_delta < 0) { - //value was too large or negative, abort and report - LOGWARNING("Attempt was made to increment Xp by %d, max is %d and must be positive", - a_Xp_delta, MAX_EXPERIENCE_ORB_SIZE); + //value was negative, abort and report + LOGWARNING("Attempt was made to increment Xp by %d, must be positive", + a_Xp_delta); return -1; //should we instead just return the current Xp? } diff --git a/source/Entities/Player.h b/source/Entities/Player.h index d998c47bb..3623617f2 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -70,7 +70,7 @@ public: */ bool SetExperience(int a_XpTotal); - /* Adds Xp, will not inc more than MAX_EXPERIENCE_ORB_SIZE! + /* Adds Xp, "should" not inc more than MAX_EXPERIENCE_ORB_SIZE unless you're a plugin being funny, *cough* cheating Returns the new total experience, -1 on error */ int AddExperience(int a_Xp_delta); -- cgit v1.2.3 From b0be6cb02d674ae93ed06354b68f76a01b3c346d Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 07:07:57 +1100 Subject: changed function name --- source/Entities/Player.cpp | 2 +- source/Entities/Player.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index 88be5de56..f79fbfe7a 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -284,7 +284,7 @@ int cPlayer::CalcLevelFromXp(int a_XpTotal) -int cPlayer::XpAtLevel(int a_Level) +int cPlayer::XpForLevel(int a_Level) { //level 0 to 15 if(a_Level <= 15) diff --git a/source/Entities/Player.h b/source/Entities/Player.h index 3623617f2..e89bd3739 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -66,7 +66,7 @@ public: /** Sets the experience total Returns true on success - should really only be called at init or player death + "should" really only be called at init or player death, plugins excepted */ bool SetExperience(int a_XpTotal); @@ -410,8 +410,8 @@ protected: /// Player Xp level int m_XpTotal; - /// Caculates the Xp at a given level, ref: http://minecraft.gamepedia.com/XP - static int XpAtLevel(int a_Level); + /// Caculates the Xp needed for a given level, ref: http://minecraft.gamepedia.com/XP + static int XpForLevel(int a_Level); /// inverse of XpAtLevel, ref: http://minecraft.gamepedia.com/XP values are as per this with pre-calculations static int CalcLevelFromXp(int a_XpTotal); -- cgit v1.2.3 From d5c6d0666ebe37b1e11d290675d6848e4d3ba3d9 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 07:12:16 +1100 Subject: fixed comment --- source/Entities/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index f79fbfe7a..fcb6d8d71 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -1372,7 +1372,7 @@ bool cPlayer::LoadFromDisk() cFile f; if (!f.Open(SourceFile, cFile::fmRead)) { - // This is a new player whom we haven't seen yet, bail, let them have the defaults + // This is a new player whom we haven't seen yet, bail out, let them have the defaults return false; } -- cgit v1.2.3 From 21bd1d74a17ac92871b5fa32d4258cb669a5a9a0 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 16:20:27 +1100 Subject: luaExport --- source/Entities/Player.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/Entities') diff --git a/source/Entities/Player.h b/source/Entities/Player.h index e89bd3739..ab2f94d4c 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -64,6 +64,9 @@ public: /// Returns the currently equipped boots; empty item if none virtual cItem GetEquippedBoots(void) const override { return m_Inventory.GetEquippedBoots(); } + + // tolua_begin + /** Sets the experience total Returns true on success "should" really only be called at init or player death, plugins excepted @@ -83,6 +86,8 @@ public: /// Gets the experience bar percentage - XpP float XpGetPercentage(void); + + // tolua_end /// Starts charging the equipped bow void StartChargingBow(void); -- cgit v1.2.3 From dbc2694b0f302cc329624e0b0b890737fe3004e5 Mon Sep 17 00:00:00 2001 From: Daniel O'Brien Date: Thu, 14 Nov 2013 16:48:14 +1100 Subject: fixed function name --- source/Entities/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/Entities') diff --git a/source/Entities/Player.cpp b/source/Entities/Player.cpp index fcb6d8d71..098417dc5 100644 --- a/source/Entities/Player.cpp +++ b/source/Entities/Player.cpp @@ -319,7 +319,7 @@ float cPlayer::XpGetPercentage() { int currentLevel = CalcLevelFromXp(m_XpTotal); - return (float)m_XpTotal / (float)XpAtLevel(1+currentLevel); + return (float)m_XpTotal / (float)XpForLevel(1+currentLevel); } -- cgit v1.2.3