added cProtocol function to pass xp to client

This commit is contained in:
Daniel O'Brien 2013-11-15 22:42:09 +11:00
parent af17faac45
commit 1b2e6e7473
7 changed files with 44 additions and 28 deletions

View File

@ -841,7 +841,7 @@ end
function HandleAddExperience(a_Split, a_Player) function HandleAddExperience(a_Split, a_Player)
a_Player->AddExperience(200); a_Player:AddExperience(200);
return true; return true;
end end

View File

@ -1,6 +1,6 @@
/* /*
** Lua binding: AllToLua ** Lua binding: AllToLua
** Generated automatically by tolua++-1.0.92 on 11/14/13 17:13:46. ** Generated automatically by tolua++-1.0.92 on 11/15/13 18:43:44.
*/ */
#ifndef __cplusplus #ifndef __cplusplus
@ -7708,7 +7708,7 @@ static int tolua_AllToLua_cPlayer_SetExperience00(lua_State* tolua_S)
#endif #endif
{ {
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
int a_XpTotal = ((int) tolua_tonumber(tolua_S,2,0)); short a_XpTotal = ((short) tolua_tonumber(tolua_S,2,0));
#ifndef TOLUA_RELEASE #ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetExperience'", NULL); if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetExperience'", NULL);
#endif #endif
@ -7742,12 +7742,12 @@ static int tolua_AllToLua_cPlayer_AddExperience00(lua_State* tolua_S)
#endif #endif
{ {
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0); cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
int a_Xp_delta = ((int) tolua_tonumber(tolua_S,2,0)); short a_Xp_delta = ((short) tolua_tonumber(tolua_S,2,0));
#ifndef TOLUA_RELEASE #ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'AddExperience'", NULL); if (!self) tolua_error(tolua_S,"invalid 'self' in function 'AddExperience'", NULL);
#endif #endif
{ {
int tolua_ret = (int) self->AddExperience(a_Xp_delta); short tolua_ret = (short) self->AddExperience(a_Xp_delta);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
} }
} }
@ -7779,7 +7779,7 @@ static int tolua_AllToLua_cPlayer_XpGetTotal00(lua_State* tolua_S)
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'XpGetTotal'", NULL); if (!self) tolua_error(tolua_S,"invalid 'self' in function 'XpGetTotal'", NULL);
#endif #endif
{ {
int tolua_ret = (int) self->XpGetTotal(); short tolua_ret = (short) self->XpGetTotal();
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
} }
} }
@ -7811,7 +7811,7 @@ static int tolua_AllToLua_cPlayer_XpGetLevel00(lua_State* tolua_S)
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'XpGetLevel'", NULL); if (!self) tolua_error(tolua_S,"invalid 'self' in function 'XpGetLevel'", NULL);
#endif #endif
{ {
int tolua_ret = (int) self->XpGetLevel(); short tolua_ret = (short) self->XpGetLevel();
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret); tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
} }
} }

View File

@ -1,6 +1,6 @@
/* /*
** Lua binding: AllToLua ** Lua binding: AllToLua
** Generated automatically by tolua++-1.0.92 on 11/14/13 17:13:47. ** Generated automatically by tolua++-1.0.92 on 11/15/13 18:43:45.
*/ */
/* Exported function */ /* Exported function */

View File

@ -1873,6 +1873,15 @@ void cClientHandle::SendRespawn(void)
void cClientHandle::SendSetExperience(void)
{
m_Protocol->SendSetExperience();
}
void cClientHandle::SendSoundEffect(const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) void cClientHandle::SendSoundEffect(const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch)
{ {
m_Protocol->SendSoundEffect(a_SoundName, a_SrcX, a_SrcY, a_SrcZ, a_Volume, a_Pitch); m_Protocol->SendSoundEffect(a_SoundName, a_SrcX, a_SrcY, a_SrcZ, a_Volume, a_Pitch);

View File

@ -120,6 +120,7 @@ public:
void SendPlayerPosition (void); void SendPlayerPosition (void);
void SendPlayerSpawn (const cPlayer & a_Player); void SendPlayerSpawn (const cPlayer & a_Player);
void SendRespawn (void); void SendRespawn (void);
void SendSetExperience (void);
void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch); // a_Src coords are Block * 8 void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch); // a_Src coords are Block * 8
void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data); void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data);
void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock); void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock);

View File

@ -262,7 +262,7 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk)
int cPlayer::CalcLevelFromXp(int a_XpTotal) short cPlayer::CalcLevelFromXp(short a_XpTotal)
{ {
//level 0 to 15 //level 0 to 15
if(a_XpTotal <= XP_TO_LEVEL15) if(a_XpTotal <= XP_TO_LEVEL15)
@ -273,18 +273,18 @@ int cPlayer::CalcLevelFromXp(int a_XpTotal)
//level 30+ //level 30+
if(a_XpTotal > XP_TO_LEVEL30) if(a_XpTotal > XP_TO_LEVEL30)
{ {
return (int) (151.5 + sqrt( 22952.25 - (14 * (2220 - a_XpTotal)))) / 7; return (short) (151.5 + sqrt( 22952.25 - (14 * (2220 - a_XpTotal)))) / 7;
} }
//level 16 to 30 //level 16 to 30
return (int) ( 29.5 + sqrt( 870.25 - (6 * ( 360 - a_XpTotal )))) / 3; return (short) ( 29.5 + sqrt( 870.25 - (6 * ( 360 - a_XpTotal )))) / 3;
} }
int cPlayer::XpForLevel(int a_Level) short cPlayer::XpForLevel(short a_Level)
{ {
//level 0 to 15 //level 0 to 15
if(a_Level <= 15) if(a_Level <= 15)
@ -295,18 +295,18 @@ int cPlayer::XpForLevel(int a_Level)
//level 30+ //level 30+
if(a_Level >= 31) if(a_Level >= 31)
{ {
return (int) ( (3.5 * a_Level * a_Level) - (151.5 * a_Level) + 2220 ); return (short) ( (3.5 * a_Level * a_Level) - (151.5 * a_Level) + 2220 );
} }
//level 16 to 30 //level 16 to 30
return (int) ( (1.5 * a_Level * a_Level) - (29.5 * a_Level) + 360 ); return (short) ( (1.5 * a_Level * a_Level) - (29.5 * a_Level) + 360 );
} }
int cPlayer::XpGetLevel() short cPlayer::XpGetLevel()
{ {
return CalcLevelFromXp(m_XpTotal); return CalcLevelFromXp(m_XpTotal);
} }
@ -317,8 +317,8 @@ int cPlayer::XpGetLevel()
float cPlayer::XpGetPercentage() float cPlayer::XpGetPercentage()
{ {
int currentLevel = CalcLevelFromXp(m_XpTotal); short int currentLevel = CalcLevelFromXp(m_XpTotal);
int currentLevel_XpBase = XpForLevel(currentLevel); short int currentLevel_XpBase = XpForLevel(currentLevel);
return (float)(m_XpTotal - currentLevel_XpBase) / return (float)(m_XpTotal - currentLevel_XpBase) /
(float)(XpForLevel(1+currentLevel) - currentLevel_XpBase); (float)(XpForLevel(1+currentLevel) - currentLevel_XpBase);
@ -328,9 +328,9 @@ float cPlayer::XpGetPercentage()
bool cPlayer::SetExperience(int a_XpTotal) bool cPlayer::SetExperience(short int a_XpTotal)
{ {
if(!(a_XpTotal >= 0) || (a_XpTotal > (INT_MAX - m_XpTotal))) if(!(a_XpTotal >= 0) || (a_XpTotal > (SHRT_MAX - m_XpTotal)))
{ {
LOGWARNING("Tried to update experiece with an invalid Xp value: %d", a_XpTotal); LOGWARNING("Tried to update experiece with an invalid Xp value: %d", a_XpTotal);
return false; //oops, they gave us a dodgey number return false; //oops, they gave us a dodgey number
@ -338,6 +338,9 @@ bool cPlayer::SetExperience(int a_XpTotal)
m_XpTotal = a_XpTotal; m_XpTotal = a_XpTotal;
//send details to client
m_ClientHandle->SendSetExperience();
return true; return true;
} }
@ -345,7 +348,7 @@ bool cPlayer::SetExperience(int a_XpTotal)
int cPlayer::AddExperience(int a_Xp_delta) short cPlayer::AddExperience(short a_Xp_delta)
{ {
if(a_Xp_delta < 0) if(a_Xp_delta < 0)
{ {
@ -359,6 +362,9 @@ int cPlayer::AddExperience(int a_Xp_delta)
m_XpTotal += a_Xp_delta; m_XpTotal += a_Xp_delta;
//send details to client
m_ClientHandle->SendSetExperience();
return m_XpTotal; return m_XpTotal;
} }
@ -1420,7 +1426,7 @@ bool cPlayer::LoadFromDisk()
m_FoodTickTimer = root.get("foodTickTimer", 0).asInt(); m_FoodTickTimer = root.get("foodTickTimer", 0).asInt();
m_FoodExhaustionLevel = root.get("foodExhaustion", 0).asDouble(); m_FoodExhaustionLevel = root.get("foodExhaustion", 0).asDouble();
SetExperience(root.get("experience", 0).asInt()); //SetExperience(root.get("experience", 0).asInt());
m_GameMode = (eGameMode) root.get("gamemode", eGameMode_NotSet).asInt(); m_GameMode = (eGameMode) root.get("gamemode", eGameMode_NotSet).asInt();

View File

@ -71,18 +71,18 @@ public:
Returns true on success Returns true on success
"should" really only be called at init or player death, plugins excepted "should" really only be called at init or player death, plugins excepted
*/ */
bool SetExperience(int a_XpTotal); bool SetExperience(short a_XpTotal);
/* Adds Xp, "should" not inc more than MAX_EXPERIENCE_ORB_SIZE unless you're a plugin being funny, *cough* cheating /* 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 Returns the new total experience, -1 on error
*/ */
int AddExperience(int a_Xp_delta); short AddExperience(short a_Xp_delta);
/// Gets the experience total - XpTotal /// Gets the experience total - XpTotal
inline int XpGetTotal(void) { return m_XpTotal; } inline short XpGetTotal(void) { return m_XpTotal; }
/// Gets the current level - XpLevel /// Gets the current level - XpLevel
int XpGetLevel(void); short XpGetLevel(void);
/// Gets the experience bar percentage - XpP /// Gets the experience bar percentage - XpP
float XpGetPercentage(void); float XpGetPercentage(void);
@ -413,13 +413,13 @@ protected:
Int64 m_EatingFinishTick; Int64 m_EatingFinishTick;
/// Player Xp level /// Player Xp level
int m_XpTotal; short int m_XpTotal;
/// Caculates the Xp needed for a given level, ref: http://minecraft.gamepedia.com/XP /// Caculates the Xp needed for a given level, ref: http://minecraft.gamepedia.com/XP
static int XpForLevel(int a_Level); static short XpForLevel(short int a_Level);
/// inverse of XpAtLevel, ref: http://minecraft.gamepedia.com/XP values are as per this with pre-calculations /// inverse of XpAtLevel, ref: http://minecraft.gamepedia.com/XP values are as per this with pre-calculations
static int CalcLevelFromXp(int a_XpTotal); static short CalcLevelFromXp(short int a_XpTotal);
bool m_IsChargingBow; bool m_IsChargingBow;
int m_BowCharge; int m_BowCharge;