Skip to content

Commit adce338

Browse files
committed
fix: fix Player.setCurrentExperience (#243)
1 parent c0ebe7c commit adce338

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

src/legacy/api/PlayerAPI.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,8 +2006,7 @@ Local<Value> PlayerClass::setCurrentExperience(const Arguments& args) {
20062006
return Local<Value>();
20072007
}
20082008

2009-
auto attribute = player->getMutableAttribute(Player::EXPERIENCE());
2010-
AttributeHelper::setCurrentValue(attribute, args[0].asNumber().toFloat());
2009+
PlayerHelper::setXpEarnedAtCurrentLevel(player, args[0].asNumber().toInt32());
20112010
return Boolean::newBoolean(true);
20122011
}
20132012
CATCH("Fail in setCurrentExperience!");

src/lse/api/helper/PlayerHelper.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
#include "PlayerHelper.h"
22

3+
#include "AttributeHelper.h"
34
#include "mc/world/actor/player/Player.h"
45
#include "mc/world/attribute/AttributeInstance.h"
6+
#include "mc/world/attribute/AttributeModificationContext.h"
7+
#include "mc/world/attribute/MutableAttributeWithContext.h"
58

69
namespace lse::api {
7-
unsigned int PlayerHelper::getXpEarnedAtCurrentLevel(Player* player) {
10+
11+
unsigned int PlayerHelper::getPreviousLevelRequirement(Player* player) {
812
int prevLevelReq = player->mPreviousLevelRequirement;
913
if (player->mPlayerLevelChanged) {
1014
int curLvl = player->getAttribute(Player::LEVEL()).mCurrentValue;
@@ -13,7 +17,20 @@ unsigned int PlayerHelper::getXpEarnedAtCurrentLevel(Player* player) {
1317
player->mPlayerLevelChanged = false;
1418
player->mPreviousLevelRequirement = prevLevelReq;
1519
}
16-
auto& attribute = player->getAttribute(Player::EXPERIENCE());
20+
return prevLevelReq;
21+
}
22+
23+
unsigned int PlayerHelper::getXpEarnedAtCurrentLevel(Player* player) {
24+
unsigned int prevLevelReq = PlayerHelper::getPreviousLevelRequirement(player);
25+
auto& attribute = player->getAttribute(Player::EXPERIENCE());
1726
return (unsigned int)roundf(attribute.mCurrentValue * (float)prevLevelReq);
1827
}
28+
29+
bool PlayerHelper::setXpEarnedAtCurrentLevel(Player* player, unsigned int xp) {
30+
unsigned int prevLevelReq = PlayerHelper::getPreviousLevelRequirement(player);
31+
auto attribute = player->getMutableAttribute(Player::EXPERIENCE());
32+
AttributeHelper::setCurrentValue(attribute, (float)xp / (float)prevLevelReq);
33+
return true;
34+
}
35+
1936
} // namespace lse::api

src/lse/api/helper/PlayerHelper.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ class Player;
33
namespace lse::api {
44
class PlayerHelper {
55
public:
6+
static unsigned int getPreviousLevelRequirement(Player* player);
7+
68
static unsigned int getXpEarnedAtCurrentLevel(Player* player);
9+
10+
static bool setXpEarnedAtCurrentLevel(Player* player, unsigned int xp);
711
};
812
} // namespace lse::api

0 commit comments

Comments
 (0)