1
0

Fixed PlayerAbilities and creative

This commit is contained in:
Tiger Wang 2013-12-19 20:53:47 +00:00
parent 53e8c067ea
commit 03a8dfc4a8
3 changed files with 24 additions and 13 deletions

View File

@ -264,9 +264,6 @@ void cClientHandle::Authenticate(void)
// Send experience // Send experience
m_Player->SendExperience(); m_Player->SendExperience();
// Send gamemode (1.6.1 movementSpeed):
SendGameMode(m_Player->GetGameMode());
m_Player->Initialize(World); m_Player->Initialize(World);
m_State = csAuthenticated; m_State = csAuthenticated;
@ -489,6 +486,9 @@ void cClientHandle::HandleCreativeInventory(short a_SlotNum, const cItem & a_Hel
void cClientHandle::HandlePlayerAbilities(bool a_CanFly, bool a_IsFlying, float FlyingSpeed, float WalkingSpeed) void cClientHandle::HandlePlayerAbilities(bool a_CanFly, bool a_IsFlying, float FlyingSpeed, float WalkingSpeed)
{ {
UNUSED(FlyingSpeed); // Ignore the client values for these
UNUSED(WalkingSpeed);
m_Player->SetCanFly(a_CanFly); m_Player->SetCanFly(a_CanFly);
m_Player->SetFlying(a_IsFlying); m_Player->SetFlying(a_IsFlying);
} }

View File

@ -1501,6 +1501,24 @@ bool cPlayer::LoadFromDisk()
m_GameMode = (eGameMode) root.get("gamemode", eGameMode_NotSet).asInt(); m_GameMode = (eGameMode) root.get("gamemode", eGameMode_NotSet).asInt();
if (m_GameMode == eGameMode_Creative)
{
m_CanFly = true;
}
else if (m_GameMode == eGameMode_NotSet)
{
cWorld * World = cRoot::Get()->GetWorld(GetLoadedWorldName());
if (World == NULL)
{
World = cRoot::Get()->GetDefaultWorld();
}
if (World->GetGameMode() == eGameMode_Creative)
{
m_CanFly = true;
}
}
m_Inventory.LoadFromJson(root["inventory"]); m_Inventory.LoadFromJson(root["inventory"]);
m_LoadedWorldName = root.get("world", "world").asString(); m_LoadedWorldName = root.get("world", "world").asString();

View File

@ -490,6 +490,7 @@ void cProtocol172::SendPlayerAbilities(void)
if (m_Client->GetPlayer()->IsGameModeCreative()) if (m_Client->GetPlayer()->IsGameModeCreative())
{ {
Flags |= 0x01; Flags |= 0x01;
Flags |= 0x08; // Godmode, used for creative
} }
if (m_Client->GetPlayer()->IsFlying()) if (m_Client->GetPlayer()->IsFlying())
{ {
@ -499,7 +500,6 @@ void cProtocol172::SendPlayerAbilities(void)
{ {
Flags |= 0x04; Flags |= 0x04;
} }
// TODO: Other flags (god mode)
Pkt.WriteByte(Flags); Pkt.WriteByte(Flags);
// TODO: Pkt.WriteFloat(m_Client->GetPlayer()->GetMaxFlyingSpeed()); // TODO: Pkt.WriteFloat(m_Client->GetPlayer()->GetMaxFlyingSpeed());
Pkt.WriteFloat(0.05f); Pkt.WriteFloat(0.05f);
@ -1291,23 +1291,16 @@ void cProtocol172::HandlePacketPlayerAbilities(cByteBuffer & a_ByteBuffer)
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, FlyingSpeed); HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, FlyingSpeed);
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, WalkingSpeed); HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, WalkingSpeed);
bool IsFlying, CanFly; bool IsFlying = false, CanFly = false;
if ((Flags & 2) != 0) if ((Flags & 2) != 0)
{ {
IsFlying = true; IsFlying = true;
} }
else
{
IsFlying = false;
}
if ((Flags & 4) != 0) if ((Flags & 4) != 0)
{ {
CanFly = true; CanFly = true;
} }
else
{
CanFly = false;
}
m_Client->HandlePlayerAbilities(CanFly, IsFlying, FlyingSpeed, WalkingSpeed); m_Client->HandlePlayerAbilities(CanFly, IsFlying, FlyingSpeed, WalkingSpeed);
} }