Merge pull request #941 from archshift/master
Fixed lots of warnings, and other small changes.
This commit is contained in:
commit
da931da603
@ -324,7 +324,7 @@ eDimension StringToDimension(const AString & a_DimensionString)
|
|||||||
{ dimOverworld, "Normal"},
|
{ dimOverworld, "Normal"},
|
||||||
{ dimOverworld, "World"},
|
{ dimOverworld, "World"},
|
||||||
{ dimNether, "Nether"},
|
{ dimNether, "Nether"},
|
||||||
{ dimNether, "Hell"}, // Alternate name for End
|
{ dimNether, "Hell"}, // Alternate name for Nether
|
||||||
{ dimEnd, "End"},
|
{ dimEnd, "End"},
|
||||||
{ dimEnd, "Sky"}, // Old name for End
|
{ dimEnd, "Sky"}, // Old name for End
|
||||||
} ;
|
} ;
|
||||||
@ -337,7 +337,8 @@ eDimension StringToDimension(const AString & a_DimensionString)
|
|||||||
} // for i - DimensionMap[]
|
} // for i - DimensionMap[]
|
||||||
|
|
||||||
// Not found
|
// Not found
|
||||||
return (eDimension)-1000;
|
LOGWARNING("Unknown dimension: \"%s\". Setting to Overworld", a_DimensionString.c_str());
|
||||||
|
return dimOverworld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -346,9 +346,8 @@ void cChunkMap::BroadcastAttachEntity(const cEntity & a_Entity, const cEntity *
|
|||||||
void cChunkMap::BroadcastBlockAction(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Byte1, char a_Byte2, BLOCKTYPE a_BlockType, const cClientHandle * a_Exclude)
|
void cChunkMap::BroadcastBlockAction(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Byte1, char a_Byte2, BLOCKTYPE a_BlockType, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
int x, y, z, ChunkX, ChunkZ;
|
int x, z, ChunkX, ChunkZ;
|
||||||
x = a_BlockX;
|
x = a_BlockX;
|
||||||
y = a_BlockY;
|
|
||||||
z = a_BlockZ;
|
z = a_BlockZ;
|
||||||
cChunkDef::BlockToChunk(x, z, ChunkX, ChunkZ);
|
cChunkDef::BlockToChunk(x, z, ChunkX, ChunkZ);
|
||||||
cChunkPtr Chunk = GetChunkNoGen(ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
cChunkPtr Chunk = GetChunkNoGen(ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
@ -1146,9 +1145,8 @@ BLOCKTYPE cChunkMap::GetBlock(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
// First check if it isn't queued in the m_FastSetBlockQueue:
|
// First check if it isn't queued in the m_FastSetBlockQueue:
|
||||||
{
|
{
|
||||||
int X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
int X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
||||||
int ChunkX, ChunkY, ChunkZ;
|
int ChunkX, ChunkZ;
|
||||||
cChunkDef::AbsoluteToRelative(X, Y, Z, ChunkX, ChunkZ);
|
cChunkDef::AbsoluteToRelative(X, Y, Z, ChunkX, ChunkZ);
|
||||||
ChunkY = 0;
|
|
||||||
cCSLock Lock(m_CSFastSetBlock);
|
cCSLock Lock(m_CSFastSetBlock);
|
||||||
for (sSetBlockList::iterator itr = m_FastSetBlockQueue.begin(); itr != m_FastSetBlockQueue.end(); ++itr)
|
for (sSetBlockList::iterator itr = m_FastSetBlockQueue.begin(); itr != m_FastSetBlockQueue.end(); ++itr)
|
||||||
{
|
{
|
||||||
|
@ -186,6 +186,46 @@ void cClientHandle::GenerateOfflineUUID(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString cClientHandle::FormatChatPrefix(bool ShouldAppendChatPrefixes, AString a_ChatPrefixS, AString m_Color1, AString m_Color2)
|
||||||
|
{
|
||||||
|
if (ShouldAppendChatPrefixes)
|
||||||
|
return Printf("%s[%s] %s", m_Color1.c_str(), a_ChatPrefixS.c_str(), m_Color2.c_str());
|
||||||
|
else
|
||||||
|
return Printf("%s", m_Color1.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString cClientHandle::FormatMessageType(bool ShouldAppendChatPrefixes, eMessageType a_ChatPrefix, const AString &a_AdditionalData)
|
||||||
|
{
|
||||||
|
switch (a_ChatPrefix)
|
||||||
|
{
|
||||||
|
case mtCustom: return AString();
|
||||||
|
case mtFailure: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Rose, cChatColor::White);
|
||||||
|
case mtInformation: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Yellow, cChatColor::White);
|
||||||
|
case mtSuccess: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Green, cChatColor::White);
|
||||||
|
case mtWarning: return FormatChatPrefix(ShouldAppendChatPrefixes, "WARN", cChatColor::Rose, cChatColor::White);
|
||||||
|
case mtFatal: return FormatChatPrefix(ShouldAppendChatPrefixes, "FATAL", cChatColor::Red, cChatColor::White);
|
||||||
|
case mtDeath: return FormatChatPrefix(ShouldAppendChatPrefixes, "DEATH", cChatColor::Gray, cChatColor::White);
|
||||||
|
case mtJoin: return FormatChatPrefix(ShouldAppendChatPrefixes, "JOIN", cChatColor::Yellow, cChatColor::White);
|
||||||
|
case mtLeave: return FormatChatPrefix(ShouldAppendChatPrefixes, "LEAVE", cChatColor::Yellow, cChatColor::White);
|
||||||
|
case mtPrivateMessage:
|
||||||
|
{
|
||||||
|
if (ShouldAppendChatPrefixes)
|
||||||
|
return Printf("%s[MSG: %s] %s%s", cChatColor::LightBlue.c_str(), a_AdditionalData.c_str(), cChatColor::White.c_str(), cChatColor::Italic.c_str());
|
||||||
|
else
|
||||||
|
return Printf("%s: %s", a_AdditionalData.c_str(), cChatColor::LightBlue.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ASSERT(!"Unhandled chat prefix type!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AString cClientHandle::GenerateOfflineUUID(const AString & a_Username)
|
AString cClientHandle::GenerateOfflineUUID(const AString & a_Username)
|
||||||
{
|
{
|
||||||
// Proper format for a version 3 UUID is:
|
// Proper format for a version 3 UUID is:
|
||||||
@ -1849,7 +1889,7 @@ void cClientHandle::SendBlockChanges(int a_ChunkX, int a_ChunkZ, const sSetBlock
|
|||||||
void cClientHandle::SendChat(const AString & a_Message, eMessageType a_ChatPrefix, const AString & a_AdditionalData)
|
void cClientHandle::SendChat(const AString & a_Message, eMessageType a_ChatPrefix, const AString & a_AdditionalData)
|
||||||
{
|
{
|
||||||
bool ShouldAppendChatPrefixes = true;
|
bool ShouldAppendChatPrefixes = true;
|
||||||
|
|
||||||
if (GetPlayer()->GetWorld() == NULL)
|
if (GetPlayer()->GetWorld() == NULL)
|
||||||
{
|
{
|
||||||
cWorld * World = cRoot::Get()->GetWorld(GetPlayer()->GetLoadedWorldName());
|
cWorld * World = cRoot::Get()->GetWorld(GetPlayer()->GetLoadedWorldName());
|
||||||
@ -1868,89 +1908,9 @@ void cClientHandle::SendChat(const AString & a_Message, eMessageType a_ChatPrefi
|
|||||||
ShouldAppendChatPrefixes = false;
|
ShouldAppendChatPrefixes = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
AString Message;
|
AString Message = FormatMessageType(ShouldAppendChatPrefixes, a_ChatPrefix, a_AdditionalData);
|
||||||
|
|
||||||
switch (a_ChatPrefix)
|
m_Protocol->SendChat(Message.append(a_Message));
|
||||||
{
|
|
||||||
case mtCustom: break;
|
|
||||||
case mtFailure:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[INFO] %s", cChatColor::Rose.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Rose.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtInformation:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[INFO] %s", cChatColor::Yellow.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Yellow.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtSuccess:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[INFO] %s", cChatColor::Green.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Green.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtWarning:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[WARN] %s", cChatColor::Rose.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Rose.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtFatal:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[FATAL] %s", cChatColor::Red.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Red.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtDeath:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[DEATH] %s", cChatColor::Gray.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Gray.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtPrivateMessage:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[MSG: %s] %s%s", cChatColor::LightBlue.c_str(), a_AdditionalData.c_str(), cChatColor::White.c_str(), cChatColor::Italic.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s: %s", a_AdditionalData.c_str(), cChatColor::LightBlue.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtJoin:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[JOIN] %s", cChatColor::Yellow.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Yellow.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case mtLeave:
|
|
||||||
{
|
|
||||||
if (ShouldAppendChatPrefixes)
|
|
||||||
Message = Printf("%s[LEAVE] %s", cChatColor::Yellow.c_str(), cChatColor::White.c_str());
|
|
||||||
else
|
|
||||||
Message = Printf("%s", cChatColor::Yellow.c_str());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: ASSERT(!"Unhandled chat prefix type!"); return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Message.append(a_Message);
|
|
||||||
|
|
||||||
m_Protocol->SendChat(Message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,6 +77,11 @@ public:
|
|||||||
This is used for the offline (non-auth) mode, when there's no UUID source.
|
This is used for the offline (non-auth) mode, when there's no UUID source.
|
||||||
Each username generates a unique and constant UUID, so that when the player reconnects with the same name, their UUID is the same. */
|
Each username generates a unique and constant UUID, so that when the player reconnects with the same name, their UUID is the same. */
|
||||||
static AString GenerateOfflineUUID(const AString & a_Username); // tolua_export
|
static AString GenerateOfflineUUID(const AString & a_Username); // tolua_export
|
||||||
|
|
||||||
|
/** Formats the type of message with the proper color and prefix for sending to the client. **/
|
||||||
|
AString FormatMessageType(bool ShouldAppendChatPrefixes, eMessageType a_ChatPrefix, const AString & a_AdditionalData);
|
||||||
|
|
||||||
|
AString FormatChatPrefix(bool ShouldAppendChatPrefixes, AString a_ChatPrefixS, AString m_Color1, AString m_Color2);
|
||||||
|
|
||||||
void Kick(const AString & a_Reason); // tolua_export
|
void Kick(const AString & a_Reason); // tolua_export
|
||||||
void Authenticate(const AString & a_Name, const AString & a_UUID); // Called by cAuthenticator when the user passes authentication
|
void Authenticate(const AString & a_Name, const AString & a_UUID); // Called by cAuthenticator when the user passes authentication
|
||||||
|
@ -410,11 +410,8 @@ int cEntity::GetRawDamageAgainst(const cEntity & a_Receiver)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cEntity::GetArmorCoverAgainst(const cEntity * a_Attacker, eDamageType a_DamageType, int a_Damage)
|
bool cEntity::ArmorCoversAgainst(eDamageType a_DamageType)
|
||||||
{
|
{
|
||||||
// Returns the hitpoints out of a_RawDamage that the currently equipped armor would cover
|
|
||||||
|
|
||||||
// Filter out damage types that are not protected by armor:
|
|
||||||
// Ref.: http://www.minecraftwiki.net/wiki/Armor#Effects as of 2012_12_20
|
// Ref.: http://www.minecraftwiki.net/wiki/Armor#Effects as of 2012_12_20
|
||||||
switch (a_DamageType)
|
switch (a_DamageType)
|
||||||
{
|
{
|
||||||
@ -429,9 +426,33 @@ int cEntity::GetArmorCoverAgainst(const cEntity * a_Attacker, eDamageType a_Dama
|
|||||||
case dtLightning:
|
case dtLightning:
|
||||||
case dtPlugin:
|
case dtPlugin:
|
||||||
{
|
{
|
||||||
return 0;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
case dtAttack:
|
||||||
|
case dtArrowAttack:
|
||||||
|
case dtCactusContact:
|
||||||
|
case dtLavaContact:
|
||||||
|
case dtFireContact:
|
||||||
|
case dtEnderPearl:
|
||||||
|
case dtExplosion:
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ASSERT(!"Invalid damage type!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cEntity::GetArmorCoverAgainst(const cEntity * a_Attacker, eDamageType a_DamageType, int a_Damage)
|
||||||
|
{
|
||||||
|
// Returns the hitpoints out of a_RawDamage that the currently equipped armor would cover
|
||||||
|
|
||||||
|
// Filter out damage types that are not protected by armor:
|
||||||
|
if (!ArmorCoversAgainst(a_DamageType)) return 0;
|
||||||
|
|
||||||
// Add up all armor points:
|
// Add up all armor points:
|
||||||
// Ref.: http://www.minecraftwiki.net/wiki/Armor#Defense_points as of 2012_12_20
|
// Ref.: http://www.minecraftwiki.net/wiki/Armor#Defense_points as of 2012_12_20
|
||||||
|
@ -270,6 +270,9 @@ public:
|
|||||||
/// Returns the hitpoints that this pawn can deal to a_Receiver using its equipped items
|
/// Returns the hitpoints that this pawn can deal to a_Receiver using its equipped items
|
||||||
virtual int GetRawDamageAgainst(const cEntity & a_Receiver);
|
virtual int GetRawDamageAgainst(const cEntity & a_Receiver);
|
||||||
|
|
||||||
|
/** Returns whether armor will protect against the passed damage type **/
|
||||||
|
virtual bool ArmorCoversAgainst(eDamageType a_DamageType);
|
||||||
|
|
||||||
/// Returns the hitpoints out of a_RawDamage that the currently equipped armor would cover
|
/// Returns the hitpoints out of a_RawDamage that the currently equipped armor would cover
|
||||||
virtual int GetArmorCoverAgainst(const cEntity * a_Attacker, eDamageType a_DamageType, int a_RawDamage);
|
virtual int GetArmorCoverAgainst(const cEntity * a_Attacker, eDamageType a_DamageType, int a_RawDamage);
|
||||||
|
|
||||||
|
@ -87,7 +87,9 @@ void cFallingBlock::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
AddSpeedY(MilliDt * -9.8f);
|
AddSpeedY(MilliDt * -9.8f);
|
||||||
AddPosition(GetSpeed() * MilliDt);
|
AddPosition(GetSpeed() * MilliDt);
|
||||||
|
|
||||||
if ((GetSpeedX() != 0) || (GetSpeedZ() != 0))
|
// If not static (One billionth precision) broadcast movement.
|
||||||
|
static const float epsilon = 0.000000001;
|
||||||
|
if ((fabs(GetSpeedX()) > epsilon) || (fabs(GetSpeedZ()) > epsilon))
|
||||||
{
|
{
|
||||||
BroadcastMovementUpdate();
|
BroadcastMovementUpdate();
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,6 @@ bool cLineBlockTracer::MoveToNextBlock(void)
|
|||||||
double CoeffZ = (DestZ - m_StartZ) / m_DiffZ;
|
double CoeffZ = (DestZ - m_StartZ) / m_DiffZ;
|
||||||
if (CoeffZ < Coeff)
|
if (CoeffZ < Coeff)
|
||||||
{
|
{
|
||||||
Coeff = CoeffZ;
|
|
||||||
Direction = dirZ;
|
Direction = dirZ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
|
|
||||||
cMCLogger * cMCLogger::s_MCLogger = NULL;
|
cMCLogger * cMCLogger::s_MCLogger = NULL;
|
||||||
bool g_ShouldColorOutput = false;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <io.h> // Needed for _isatty(), not available on Linux
|
#include <io.h> // Needed for _isatty(), not available on Linux
|
||||||
@ -33,7 +32,8 @@ cMCLogger * cMCLogger::GetInstance(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cMCLogger::cMCLogger(void)
|
cMCLogger::cMCLogger(void):
|
||||||
|
m_ShouldColorOutput(false)
|
||||||
{
|
{
|
||||||
AString FileName;
|
AString FileName;
|
||||||
Printf(FileName, "LOG_%d.txt", (int)time(NULL));
|
Printf(FileName, "LOG_%d.txt", (int)time(NULL));
|
||||||
@ -76,15 +76,15 @@ void cMCLogger::InitLog(const AString & a_FileName)
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// See whether we are writing to a console the default console attrib:
|
// See whether we are writing to a console the default console attrib:
|
||||||
g_ShouldColorOutput = (_isatty(_fileno(stdin)) != 0);
|
m_ShouldColorOutput = (_isatty(_fileno(stdin)) != 0);
|
||||||
if (g_ShouldColorOutput)
|
if (m_ShouldColorOutput)
|
||||||
{
|
{
|
||||||
CONSOLE_SCREEN_BUFFER_INFO sbi;
|
CONSOLE_SCREEN_BUFFER_INFO sbi;
|
||||||
GetConsoleScreenBufferInfo(g_Console, &sbi);
|
GetConsoleScreenBufferInfo(g_Console, &sbi);
|
||||||
g_DefaultConsoleAttrib = sbi.wAttributes;
|
g_DefaultConsoleAttrib = sbi.wAttributes;
|
||||||
}
|
}
|
||||||
#elif defined (__linux) && !defined(ANDROID_NDK)
|
#elif defined (__linux) && !defined(ANDROID_NDK)
|
||||||
g_ShouldColorOutput = isatty(fileno(stdout));
|
m_ShouldColorOutput = isatty(fileno(stdout));
|
||||||
// TODO: Check if the terminal supports colors, somehow?
|
// TODO: Check if the terminal supports colors, somehow?
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -178,7 +178,7 @@ void cMCLogger::Error(const char * a_Format, va_list a_ArgList)
|
|||||||
|
|
||||||
void cMCLogger::SetColor(eColorScheme a_Scheme)
|
void cMCLogger::SetColor(eColorScheme a_Scheme)
|
||||||
{
|
{
|
||||||
if (!g_ShouldColorOutput)
|
if (!m_ShouldColorOutput)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -211,7 +211,7 @@ void cMCLogger::SetColor(eColorScheme a_Scheme)
|
|||||||
|
|
||||||
void cMCLogger::ResetColor(void)
|
void cMCLogger::ResetColor(void)
|
||||||
{
|
{
|
||||||
if (!g_ShouldColorOutput)
|
if (!m_ShouldColorOutput)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@ private:
|
|||||||
cCriticalSection m_CriticalSection;
|
cCriticalSection m_CriticalSection;
|
||||||
cLog * m_Log;
|
cLog * m_Log;
|
||||||
static cMCLogger * s_MCLogger;
|
static cMCLogger * s_MCLogger;
|
||||||
|
bool m_ShouldColorOutput;
|
||||||
|
|
||||||
|
|
||||||
/// Sets the specified color scheme in the terminal (TODO: if coloring available)
|
/// Sets the specified color scheme in the terminal (TODO: if coloring available)
|
||||||
|
@ -37,7 +37,7 @@ void cAggressiveMonster::InStateChasing(float a_Dt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((float)m_FinalDestination.x != (float)m_Target->GetPosX()) || ((float)m_FinalDestination.z != (float)m_Target->GetPosZ()))
|
if (!IsMovingToTargetPosition())
|
||||||
{
|
{
|
||||||
MoveToPosition(m_Target->GetPosition());
|
MoveToPosition(m_Target->GetPosition());
|
||||||
}
|
}
|
||||||
@ -106,3 +106,18 @@ void cAggressiveMonster::Attack(float a_Dt)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cAggressiveMonster::IsMovingToTargetPosition()
|
||||||
|
{
|
||||||
|
float epsilon = 0.000000000001;
|
||||||
|
// Difference between destination x and target x is negligible (to 10^-12 precision)
|
||||||
|
if (fabsf((float)m_FinalDestination.x - (float)m_Target->GetPosX()) < epsilon)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Difference between destination z and target z is negligible (to 10^-12 precision)
|
||||||
|
else if (fabsf(m_FinalDestination.z - (float)m_Target->GetPosZ()) > epsilon)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -22,6 +22,10 @@ public:
|
|||||||
virtual void EventSeePlayer(cEntity *) override;
|
virtual void EventSeePlayer(cEntity *) override;
|
||||||
virtual void Attack(float a_Dt);
|
virtual void Attack(float a_Dt);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/** Whether this mob's destination is the same as its target's position. */
|
||||||
|
bool IsMovingToTargetPosition();
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
@ -761,8 +761,10 @@ cMonster::eFamily cMonster::FamilyFromType(eType a_Type)
|
|||||||
case mtChicken: return mfPassive;
|
case mtChicken: return mfPassive;
|
||||||
case mtCow: return mfPassive;
|
case mtCow: return mfPassive;
|
||||||
case mtCreeper: return mfHostile;
|
case mtCreeper: return mfHostile;
|
||||||
|
case mtEnderDragon: return mfNoSpawn;
|
||||||
case mtEnderman: return mfHostile;
|
case mtEnderman: return mfHostile;
|
||||||
case mtGhast: return mfHostile;
|
case mtGhast: return mfHostile;
|
||||||
|
case mtGiant: return mfNoSpawn;
|
||||||
case mtHorse: return mfPassive;
|
case mtHorse: return mfPassive;
|
||||||
case mtIronGolem: return mfPassive;
|
case mtIronGolem: return mfPassive;
|
||||||
case mtMagmaCube: return mfHostile;
|
case mtMagmaCube: return mfHostile;
|
||||||
@ -773,17 +775,20 @@ cMonster::eFamily cMonster::FamilyFromType(eType a_Type)
|
|||||||
case mtSilverfish: return mfHostile;
|
case mtSilverfish: return mfHostile;
|
||||||
case mtSkeleton: return mfHostile;
|
case mtSkeleton: return mfHostile;
|
||||||
case mtSlime: return mfHostile;
|
case mtSlime: return mfHostile;
|
||||||
|
case mtSnowGolem: return mfNoSpawn;
|
||||||
case mtSpider: return mfHostile;
|
case mtSpider: return mfHostile;
|
||||||
case mtSquid: return mfWater;
|
case mtSquid: return mfWater;
|
||||||
case mtVillager: return mfPassive;
|
case mtVillager: return mfPassive;
|
||||||
case mtWitch: return mfHostile;
|
case mtWitch: return mfHostile;
|
||||||
case mtWither: return mfHostile;
|
case mtWither: return mfNoSpawn;
|
||||||
case mtWolf: return mfHostile;
|
case mtWolf: return mfHostile;
|
||||||
case mtZombie: return mfHostile;
|
case mtZombie: return mfHostile;
|
||||||
case mtZombiePigman: return mfHostile;
|
case mtZombiePigman: return mfHostile;
|
||||||
} ;
|
|
||||||
|
case mtInvalidType: break;
|
||||||
|
}
|
||||||
ASSERT(!"Unhandled mob type");
|
ASSERT(!"Unhandled mob type");
|
||||||
return mfMaxplusone;
|
return mfUnhandled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -794,10 +799,12 @@ int cMonster::GetSpawnDelay(cMonster::eFamily a_MobFamily)
|
|||||||
{
|
{
|
||||||
switch (a_MobFamily)
|
switch (a_MobFamily)
|
||||||
{
|
{
|
||||||
case mfHostile: return 40;
|
case mfHostile: return 40;
|
||||||
case mfPassive: return 40;
|
case mfPassive: return 40;
|
||||||
case mfAmbient: return 40;
|
case mfAmbient: return 40;
|
||||||
case mfWater: return 400;
|
case mfWater: return 400;
|
||||||
|
case mfNoSpawn: return -1;
|
||||||
|
case mfUnhandled: break;
|
||||||
}
|
}
|
||||||
ASSERT(!"Unhandled mob family");
|
ASSERT(!"Unhandled mob family");
|
||||||
return -1;
|
return -1;
|
||||||
@ -866,6 +873,7 @@ cMonster * cMonster::NewMonsterFromType(cMonster::eType a_MobType)
|
|||||||
case mtEnderDragon: toReturn = new cEnderDragon(); break;
|
case mtEnderDragon: toReturn = new cEnderDragon(); break;
|
||||||
case mtEnderman: toReturn = new cEnderman(); break;
|
case mtEnderman: toReturn = new cEnderman(); break;
|
||||||
case mtGhast: toReturn = new cGhast(); break;
|
case mtGhast: toReturn = new cGhast(); break;
|
||||||
|
case mtGiant: toReturn = new cGiant(); break;
|
||||||
case mtIronGolem: toReturn = new cIronGolem(); break;
|
case mtIronGolem: toReturn = new cIronGolem(); break;
|
||||||
case mtMooshroom: toReturn = new cMooshroom(); break;
|
case mtMooshroom: toReturn = new cMooshroom(); break;
|
||||||
case mtOcelot: toReturn = new cOcelot(); break;
|
case mtOcelot: toReturn = new cOcelot(); break;
|
||||||
|
@ -66,7 +66,8 @@ public:
|
|||||||
mfAmbient = 2, // Bats
|
mfAmbient = 2, // Bats
|
||||||
mfWater = 3, // Squid
|
mfWater = 3, // Squid
|
||||||
|
|
||||||
mfMaxplusone, // Nothing. Be sure this is the last and the others are in order
|
mfNoSpawn,
|
||||||
|
mfUnhandled, // Nothing. Be sure this is the last and the others are in order
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
@ -67,11 +67,11 @@ bool cFile::Open(const AString & iFileName, eMode iMode)
|
|||||||
case fmRead: Mode = "rb"; break;
|
case fmRead: Mode = "rb"; break;
|
||||||
case fmWrite: Mode = "wb"; break;
|
case fmWrite: Mode = "wb"; break;
|
||||||
case fmReadWrite: Mode = "rb+"; break;
|
case fmReadWrite: Mode = "rb+"; break;
|
||||||
default:
|
}
|
||||||
{
|
if (Mode == NULL)
|
||||||
ASSERT(!"Unhandled file mode");
|
{
|
||||||
return false;
|
ASSERT(!"Unhandled file mode");
|
||||||
}
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -316,12 +316,9 @@ int cWorld::GetDefaultWeatherInterval(eWeather a_Weather)
|
|||||||
{
|
{
|
||||||
return 2400 + (m_TickRand.randInt() % 4800); // 2 - 6 minutes
|
return 2400 + (m_TickRand.randInt() % 4800); // 2 - 6 minutes
|
||||||
}
|
}
|
||||||
default:
|
}
|
||||||
{
|
LOGWARNING("%s: Missing default weather interval for weather %d.", __FUNCTION__, a_Weather);
|
||||||
LOGWARNING("%s: Missing default weather interval for weather %d.", __FUNCTION__, a_Weather);
|
return -1;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} // switch (Weather)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -521,21 +518,6 @@ void cWorld::Start(void)
|
|||||||
}
|
}
|
||||||
AString Dimension = IniFile.GetValueSet("General", "Dimension", "Overworld");
|
AString Dimension = IniFile.GetValueSet("General", "Dimension", "Overworld");
|
||||||
m_Dimension = StringToDimension(Dimension);
|
m_Dimension = StringToDimension(Dimension);
|
||||||
switch (m_Dimension)
|
|
||||||
{
|
|
||||||
case dimNether:
|
|
||||||
case dimOverworld:
|
|
||||||
case dimEnd:
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
LOGWARNING("Unknown dimension: \"%s\". Setting to Overworld", Dimension.c_str());
|
|
||||||
m_Dimension = dimOverworld;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} // switch (m_Dimension)
|
|
||||||
|
|
||||||
// Try to find the "SpawnPosition" key and coord values in the world configuration, set the flag if found
|
// Try to find the "SpawnPosition" key and coord values in the world configuration, set the flag if found
|
||||||
int KeyNum = IniFile.FindKey("SpawnPosition");
|
int KeyNum = IniFile.FindKey("SpawnPosition");
|
||||||
@ -592,12 +574,6 @@ void cWorld::Start(void)
|
|||||||
case dimOverworld: DefaultMonsters = "bat, cavespider, chicken, cow, creeper, enderman, horse, mooshroom, ocelot, pig, sheep, silverfish, skeleton, slime, spider, squid, wolf, zombie"; break;
|
case dimOverworld: DefaultMonsters = "bat, cavespider, chicken, cow, creeper, enderman, horse, mooshroom, ocelot, pig, sheep, silverfish, skeleton, slime, spider, squid, wolf, zombie"; break;
|
||||||
case dimNether: DefaultMonsters = "blaze, ghast, magmacube, skeleton, zombie, zombiepigman"; break;
|
case dimNether: DefaultMonsters = "blaze, ghast, magmacube, skeleton, zombie, zombiepigman"; break;
|
||||||
case dimEnd: DefaultMonsters = "enderman"; break;
|
case dimEnd: DefaultMonsters = "enderman"; break;
|
||||||
default:
|
|
||||||
{
|
|
||||||
ASSERT(!"Unhandled world dimension");
|
|
||||||
DefaultMonsters = "wither";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
m_bAnimals = IniFile.GetValueSetB("Monsters", "AnimalsOn", true);
|
m_bAnimals = IniFile.GetValueSetB("Monsters", "AnimalsOn", true);
|
||||||
AString AllMonsters = IniFile.GetValueSet("Monsters", "Types", DefaultMonsters);
|
AString AllMonsters = IniFile.GetValueSet("Monsters", "Types", DefaultMonsters);
|
||||||
@ -687,6 +663,30 @@ void cWorld::GenerateRandomSpawn(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
eWeather cWorld::ChooseNewWeather()
|
||||||
|
{
|
||||||
|
// Pick a new weather. Only reasonable transitions allowed:
|
||||||
|
switch (m_Weather)
|
||||||
|
{
|
||||||
|
case eWeather_Sunny:
|
||||||
|
case eWeather_ThunderStorm: return eWeather_Rain;
|
||||||
|
|
||||||
|
case eWeather_Rain:
|
||||||
|
{
|
||||||
|
// 1/8 chance of turning into a thunderstorm
|
||||||
|
return ((m_TickRand.randInt() % 256) < 32) ? eWeather_ThunderStorm : eWeather_Sunny;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGWARNING("Unknown current weather: %d. Setting sunny.", m_Weather);
|
||||||
|
ASSERT(!"Unknown weather");
|
||||||
|
return eWeather_Sunny;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWorld::Stop(void)
|
void cWorld::Stop(void)
|
||||||
{
|
{
|
||||||
// Delete the clients that have been in this world:
|
// Delete the clients that have been in this world:
|
||||||
@ -786,30 +786,8 @@ void cWorld::TickWeather(float a_Dt)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Change weather:
|
// Change weather:
|
||||||
|
SetWeather(ChooseNewWeather());
|
||||||
// Pick a new weather. Only reasonable transitions allowed:
|
}
|
||||||
eWeather NewWeather = m_Weather;
|
|
||||||
switch (m_Weather)
|
|
||||||
{
|
|
||||||
case eWeather_Sunny: NewWeather = eWeather_Rain; break;
|
|
||||||
case eWeather_ThunderStorm: NewWeather = eWeather_Rain; break;
|
|
||||||
case eWeather_Rain:
|
|
||||||
{
|
|
||||||
// 1/8 chance of turning into a thunderstorm
|
|
||||||
NewWeather = ((m_TickRand.randInt() % 256) < 32) ? eWeather_ThunderStorm : eWeather_Sunny;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
LOGWARNING("Unknown current weather: %d. Setting sunny.", m_Weather);
|
|
||||||
ASSERT(!"Unknown weather");
|
|
||||||
NewWeather = eWeather_Sunny;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SetWeather(NewWeather);
|
|
||||||
} // else (m_WeatherInterval > 0)
|
|
||||||
|
|
||||||
if (m_Weather == eWeather_ThunderStorm)
|
if (m_Weather == eWeather_ThunderStorm)
|
||||||
{
|
{
|
||||||
|
@ -938,7 +938,10 @@ private:
|
|||||||
|
|
||||||
/** <summary>Generates a random spawnpoint on solid land by walking chunks and finding their biomes</summary> */
|
/** <summary>Generates a random spawnpoint on solid land by walking chunks and finding their biomes</summary> */
|
||||||
void GenerateRandomSpawn(void);
|
void GenerateRandomSpawn(void);
|
||||||
|
|
||||||
|
/** Chooses a reasonable transition from the current weather to a new weather **/
|
||||||
|
eWeather ChooseNewWeather(void);
|
||||||
|
|
||||||
/** Creates a new fluid simulator, loads its settings from the inifile (a_FluidName section) */
|
/** Creates a new fluid simulator, loads its settings from the inifile (a_FluidName section) */
|
||||||
cFluidSimulator * InitializeFluidSimulator(cIniFile & a_IniFile, const char * a_FluidName, BLOCKTYPE a_SimulateBlock, BLOCKTYPE a_StationaryBlock);
|
cFluidSimulator * InitializeFluidSimulator(cIniFile & a_IniFile, const char * a_FluidName, BLOCKTYPE a_SimulateBlock, BLOCKTYPE a_StationaryBlock);
|
||||||
|
|
||||||
|
@ -621,10 +621,10 @@ void cNBTChunkSerializer::AddHangingEntity(cHangingEntity * a_Hanging)
|
|||||||
m_Writer.AddInt("TileZ", a_Hanging->GetTileZ());
|
m_Writer.AddInt("TileZ", a_Hanging->GetTileZ());
|
||||||
switch (a_Hanging->GetDirection())
|
switch (a_Hanging->GetDirection())
|
||||||
{
|
{
|
||||||
case 0: m_Writer.AddByte("Dir", (unsigned char)2); break;
|
case BLOCK_FACE_YM: m_Writer.AddByte("Dir", (unsigned char)2); break;
|
||||||
case 1: m_Writer.AddByte("Dir", (unsigned char)1); break;
|
case BLOCK_FACE_YP: m_Writer.AddByte("Dir", (unsigned char)1); break;
|
||||||
case 2: m_Writer.AddByte("Dir", (unsigned char)0); break;
|
case BLOCK_FACE_ZM: m_Writer.AddByte("Dir", (unsigned char)0); break;
|
||||||
case 3: m_Writer.AddByte("Dir", (unsigned char)3); break;
|
case BLOCK_FACE_ZP: m_Writer.AddByte("Dir", (unsigned char)3); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -797,7 +797,6 @@ void cWSSCompact::cPAKFile::UpdateChunk2To3()
|
|||||||
++index2;
|
++index2;
|
||||||
}
|
}
|
||||||
InChunkOffset += index2 / 2;
|
InChunkOffset += index2 / 2;
|
||||||
index2 = 0;
|
|
||||||
|
|
||||||
AString Converted(ConvertedData, ExpectedSize);
|
AString Converted(ConvertedData, ExpectedSize);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user