Suggestions
This commit is contained in:
parent
6ab9afd0fd
commit
8050a5b98a
@ -585,7 +585,7 @@ Int64 cIniFile::GetValueSetI(const AString & keyname, const AString & valuename,
|
|||||||
AString Data;
|
AString Data;
|
||||||
Printf(Data, "%lld", defValue);
|
Printf(Data, "%lld", defValue);
|
||||||
AString resultstring = GetValueSet(keyname, valuename, Data);
|
AString resultstring = GetValueSet(keyname, valuename, Data);
|
||||||
Int64 result;
|
Int64 result = defValue;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
sscanf_s(resultstring.c_str(), "%lld", &result);
|
sscanf_s(resultstring.c_str(), "%lld", &result);
|
||||||
#else
|
#else
|
||||||
|
@ -924,7 +924,7 @@ extern int StringToMobType(const AString & a_MobString);
|
|||||||
extern eDimension StringToDimension(const AString & a_DimensionString);
|
extern eDimension StringToDimension(const AString & a_DimensionString);
|
||||||
|
|
||||||
/** Translates a dimension enum to dimension string.
|
/** Translates a dimension enum to dimension string.
|
||||||
Takes a string and returns "Overworld" on failure
|
Takes an eDimension enum value and returns "Overworld" on failure
|
||||||
*/
|
*/
|
||||||
extern AString DimensionToString(eDimension a_Dimension);
|
extern AString DimensionToString(eDimension a_Dimension);
|
||||||
|
|
||||||
|
@ -2427,7 +2427,6 @@ bool cChunkMap::ForEachChunkInRect(int a_MinChunkX, int a_MaxChunkX, int a_MinCh
|
|||||||
{
|
{
|
||||||
for (int x = a_MinChunkX; x <= a_MaxChunkX; x++)
|
for (int x = a_MinChunkX; x <= a_MaxChunkX; x++)
|
||||||
{
|
{
|
||||||
LOG("Request %i %i", x, z);
|
|
||||||
cChunkPtr Chunk = GetChunkNoLoad(x, ZERO_CHUNK_Y, z);
|
cChunkPtr Chunk = GetChunkNoLoad(x, ZERO_CHUNK_Y, z);
|
||||||
if ((Chunk == NULL) || (!Chunk->IsValid()))
|
if ((Chunk == NULL) || (!Chunk->IsValid()))
|
||||||
{
|
{
|
||||||
|
@ -1030,9 +1030,15 @@ void cEntity::DetectPortal()
|
|||||||
{
|
{
|
||||||
if (GetWorld()->GetDimension() == dimOverworld)
|
if (GetWorld()->GetDimension() == dimOverworld)
|
||||||
{
|
{
|
||||||
if (GetWorld()->GetNetherWorldName().empty() && GetWorld()->GetEndWorldName().empty()) { return; }
|
if (GetWorld()->GetNetherWorldName().empty() && GetWorld()->GetEndWorldName().empty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (GetWorld()->GetLinkedOverworldName().empty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (GetWorld()->GetLinkedOverworldName().empty()) { return; }
|
|
||||||
|
|
||||||
int X = POSX_TOINT, Y = POSY_TOINT, Z = POSZ_TOINT;
|
int X = POSX_TOINT, Y = POSY_TOINT, Z = POSZ_TOINT;
|
||||||
if ((Y > 0) && (Y < cChunkDef::Height))
|
if ((Y > 0) && (Y < cChunkDef::Height))
|
||||||
@ -1041,17 +1047,17 @@ void cEntity::DetectPortal()
|
|||||||
{
|
{
|
||||||
case E_BLOCK_NETHER_PORTAL:
|
case E_BLOCK_NETHER_PORTAL:
|
||||||
{
|
{
|
||||||
if (m_PortalCooldownData.second)
|
if (m_PortalCooldownData.m_ShouldPreventTeleportation)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_PortalCooldownData.first != 80)
|
if (IsPlayer() && !((cPlayer *)this)->IsGameModeCreative() && m_PortalCooldownData.m_TicksDelayed != 80)
|
||||||
{
|
{
|
||||||
m_PortalCooldownData.first++;
|
m_PortalCooldownData.m_TicksDelayed++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_PortalCooldownData.first = 0;
|
m_PortalCooldownData.m_TicksDelayed = 0;
|
||||||
|
|
||||||
switch (GetWorld()->GetDimension())
|
switch (GetWorld()->GetDimension())
|
||||||
{
|
{
|
||||||
@ -1062,13 +1068,13 @@ void cEntity::DetectPortal()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_PortalCooldownData.second = true; // Stop portals from working on respawn
|
m_PortalCooldownData.m_ShouldPreventTeleportation = true; // Stop portals from working on respawn
|
||||||
|
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
{
|
{
|
||||||
((cPlayer *)this)->GetClientHandle()->SendRespawn(dimOverworld);
|
((cPlayer *)this)->GetClientHandle()->SendRespawn(dimOverworld);
|
||||||
}
|
}
|
||||||
MoveToWorld(GetWorld()->GetLinkedOverworldName(), cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetLinkedOverworldName()), false);
|
MoveToWorld(cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetLinkedOverworldName()), false);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1079,14 +1085,14 @@ void cEntity::DetectPortal()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_PortalCooldownData.second = true; // Stop portals from working on respawn
|
m_PortalCooldownData.m_ShouldPreventTeleportation = true; // Stop portals from working on respawn
|
||||||
|
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
{
|
{
|
||||||
((cPlayer *)this)->AwardAchievement(achEnterPortal);
|
((cPlayer *)this)->AwardAchievement(achEnterPortal);
|
||||||
((cPlayer *)this)->GetClientHandle()->SendRespawn(dimNether);
|
((cPlayer *)this)->GetClientHandle()->SendRespawn(dimNether);
|
||||||
}
|
}
|
||||||
MoveToWorld(GetWorld()->GetNetherWorldName(), cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetNetherWorldName(), dimNether, GetWorld()->GetName()), false);
|
MoveToWorld(cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetNetherWorldName(), dimNether, GetWorld()->GetName()), false);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1095,7 +1101,7 @@ void cEntity::DetectPortal()
|
|||||||
}
|
}
|
||||||
case E_BLOCK_END_PORTAL:
|
case E_BLOCK_END_PORTAL:
|
||||||
{
|
{
|
||||||
if (m_PortalCooldownData.second)
|
if (m_PortalCooldownData.m_ShouldPreventTeleportation)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1109,7 +1115,7 @@ void cEntity::DetectPortal()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_PortalCooldownData.second = true; // Stop portals from working on respawn
|
m_PortalCooldownData.m_ShouldPreventTeleportation = true; // Stop portals from working on respawn
|
||||||
|
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
{
|
{
|
||||||
@ -1117,7 +1123,7 @@ void cEntity::DetectPortal()
|
|||||||
Player->TeleportToCoords(Player->GetLastBedPos().x, Player->GetLastBedPos().y, Player->GetLastBedPos().z);
|
Player->TeleportToCoords(Player->GetLastBedPos().x, Player->GetLastBedPos().y, Player->GetLastBedPos().z);
|
||||||
Player->GetClientHandle()->SendRespawn(dimOverworld);
|
Player->GetClientHandle()->SendRespawn(dimOverworld);
|
||||||
}
|
}
|
||||||
MoveToWorld(GetWorld()->GetLinkedOverworldName(), cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetLinkedOverworldName()), false);
|
MoveToWorld(cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetLinkedOverworldName()), false);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1128,14 +1134,14 @@ void cEntity::DetectPortal()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_PortalCooldownData.second = true; // Stop portals from working on respawn
|
m_PortalCooldownData.m_ShouldPreventTeleportation = true; // Stop portals from working on respawn
|
||||||
|
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
{
|
{
|
||||||
((cPlayer *)this)->AwardAchievement(achEnterTheEnd);
|
((cPlayer *)this)->AwardAchievement(achEnterTheEnd);
|
||||||
((cPlayer *)this)->GetClientHandle()->SendRespawn(dimEnd);
|
((cPlayer *)this)->GetClientHandle()->SendRespawn(dimEnd);
|
||||||
}
|
}
|
||||||
MoveToWorld(GetWorld()->GetEndWorldName(), cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetEndWorldName(), dimEnd, GetWorld()->GetName()), false);
|
MoveToWorld(cRoot::Get()->CreateAndInitializeWorld(GetWorld()->GetEndWorldName(), dimEnd, GetWorld()->GetName()), false);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1147,34 +1153,20 @@ void cEntity::DetectPortal()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allow portals to work again
|
// Allow portals to work again
|
||||||
m_PortalCooldownData.second = false;
|
m_PortalCooldownData.m_ShouldPreventTeleportation = false;
|
||||||
m_PortalCooldownData.first = 0;
|
m_PortalCooldownData.m_ShouldPreventTeleportation = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cEntity::MoveToWorld(const AString & a_WorldName, cWorld * a_World, bool a_ShouldSendRespawn)
|
bool cEntity::MoveToWorld(cWorld * a_World, bool a_ShouldSendRespawn)
|
||||||
{
|
{
|
||||||
UNUSED(a_ShouldSendRespawn);
|
UNUSED(a_ShouldSendRespawn);
|
||||||
|
ASSERT(a_World == NULL);
|
||||||
|
|
||||||
cWorld * World;
|
if (GetWorld() == a_World)
|
||||||
if (a_World == NULL)
|
|
||||||
{
|
|
||||||
World = cRoot::Get()->GetWorld(a_WorldName);
|
|
||||||
if (World == NULL)
|
|
||||||
{
|
|
||||||
LOG("%s: Couldn't find world \"%s\".", __FUNCTION__, a_WorldName.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
World = a_World;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GetWorld() == World)
|
|
||||||
{
|
{
|
||||||
// Don't move to same world
|
// Don't move to same world
|
||||||
return false;
|
return false;
|
||||||
@ -1185,7 +1177,7 @@ bool cEntity::MoveToWorld(const AString & a_WorldName, cWorld * a_World, bool a_
|
|||||||
GetWorld()->BroadcastDestroyEntity(*this);
|
GetWorld()->BroadcastDestroyEntity(*this);
|
||||||
|
|
||||||
// Queue add to new world
|
// Queue add to new world
|
||||||
World->AddEntity(this);
|
a_World->AddEntity(this);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1194,6 +1186,22 @@ bool cEntity::MoveToWorld(const AString & a_WorldName, cWorld * a_World, bool a_
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cEntity::MoveToWorld(const AString & a_WorldName, bool a_ShouldSendRespawn)
|
||||||
|
{
|
||||||
|
cWorld * World = cRoot::Get()->GetWorld(a_WorldName);
|
||||||
|
if (World == NULL)
|
||||||
|
{
|
||||||
|
LOG("%s: Couldn't find world \"%s\".", __FUNCTION__, a_WorldName.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MoveToWorld(World, a_ShouldSendRespawn);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cEntity::SetSwimState(cChunk & a_Chunk)
|
void cEntity::SetSwimState(cChunk & a_Chunk)
|
||||||
{
|
{
|
||||||
int RelY = (int)floor(GetPosY() + 0.1);
|
int RelY = (int)floor(GetPosY() + 0.1);
|
||||||
|
@ -382,16 +382,19 @@ public:
|
|||||||
/// Teleports to the coordinates specified
|
/// Teleports to the coordinates specified
|
||||||
virtual void TeleportToCoords(double a_PosX, double a_PosY, double a_PosZ);
|
virtual void TeleportToCoords(double a_PosX, double a_PosY, double a_PosZ);
|
||||||
|
|
||||||
/** Moves entity to specified world */
|
/** Moves entity to specified world, taking a world pointer */
|
||||||
virtual bool MoveToWorld(const AString & a_WorldName, cWorld * a_World = NULL, bool a_ShouldSendRespawn = true);
|
virtual bool MoveToWorld(cWorld * a_World, bool a_ShouldSendRespawn = true);
|
||||||
|
|
||||||
|
/** Moves entity to specified world, taking a world name */
|
||||||
|
bool MoveToWorld(const AString & a_WorldName, bool a_ShouldSendRespawn = true);
|
||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
/** Returns if the entity is travelling away from a specified world */
|
/** Returns if the entity is travelling away from a specified world */
|
||||||
bool IsWorldTravellingFrom(cWorld * a_World) const { return (m_WorldTravellingFrom == a_World); }
|
bool IsWorldTravellingFrom(cWorld * a_World) const { return m_WorldTravellingFrom == a_World; }
|
||||||
|
|
||||||
/** Sets the world the entity will be leaving */
|
/** Sets the world the entity will be leaving */
|
||||||
void SetWorldTravellingFrom(cWorld * a_World) { (m_WorldTravellingFrom = a_World); }
|
void SetWorldTravellingFrom(cWorld * a_World) { m_WorldTravellingFrom = a_World; }
|
||||||
|
|
||||||
/// Updates clients of changes in the entity.
|
/// Updates clients of changes in the entity.
|
||||||
virtual void BroadcastMovementUpdate(const cClientHandle * a_Exclude = NULL);
|
virtual void BroadcastMovementUpdate(const cClientHandle * a_Exclude = NULL);
|
||||||
@ -538,11 +541,20 @@ protected:
|
|||||||
int m_AirLevel;
|
int m_AirLevel;
|
||||||
int m_AirTickTimer;
|
int m_AirTickTimer;
|
||||||
|
|
||||||
/** Portal delay timer and cooldown boolean
|
/** Structure storing the portal delay timer and cooldown boolean */
|
||||||
First value is to delay sending the respawn packet (which triggers the Entering the {Dimension} screen).
|
struct sPortalCooldownData
|
||||||
Second value is to prevent a teleportation loop by ensuring we do not reenter a portal that we came out of.
|
{
|
||||||
|
/** Ticks since entry of portal, used to delay teleportation */
|
||||||
|
unsigned short m_TicksDelayed;
|
||||||
|
|
||||||
|
/** Whether the entity has just exited the portal, and should therefore not be teleported again
|
||||||
|
This prevents teleportation loops, and is reset when the entity has moved out of the portal
|
||||||
*/
|
*/
|
||||||
std::pair<unsigned short, bool> m_PortalCooldownData;
|
bool m_ShouldPreventTeleportation;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Portal delay timer and cooldown boolean data */
|
||||||
|
sPortalCooldownData m_PortalCooldownData;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Measured in degrees, [-180, +180) */
|
/** Measured in degrees, [-180, +180) */
|
||||||
|
@ -1611,24 +1611,9 @@ void cPlayer::TossItems(const cItems & a_Items)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPlayer::MoveToWorld(const AString & a_WorldName, cWorld * a_World, bool a_ShouldSendRespawn)
|
bool cPlayer::MoveToWorld(cWorld * a_World, bool a_ShouldSendRespawn)
|
||||||
{
|
{
|
||||||
cWorld * World;
|
if (GetWorld() == a_World)
|
||||||
if (a_World == NULL)
|
|
||||||
{
|
|
||||||
World = cRoot::Get()->GetWorld(a_WorldName);
|
|
||||||
if (World == NULL)
|
|
||||||
{
|
|
||||||
LOG("%s: Couldn't find world \"%s\".", __FUNCTION__, a_WorldName.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
World = a_World;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GetWorld() == World)
|
|
||||||
{
|
{
|
||||||
// Don't move to same world
|
// Don't move to same world
|
||||||
return false;
|
return false;
|
||||||
@ -1637,7 +1622,7 @@ bool cPlayer::MoveToWorld(const AString & a_WorldName, cWorld * a_World, bool a_
|
|||||||
// Send the respawn packet:
|
// Send the respawn packet:
|
||||||
if (a_ShouldSendRespawn && (m_ClientHandle != NULL))
|
if (a_ShouldSendRespawn && (m_ClientHandle != NULL))
|
||||||
{
|
{
|
||||||
m_ClientHandle->SendRespawn(World->GetDimension());
|
m_ClientHandle->SendRespawn(a_World->GetDimension());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove player from the old world
|
// Remove player from the old world
|
||||||
@ -1645,8 +1630,8 @@ bool cPlayer::MoveToWorld(const AString & a_WorldName, cWorld * a_World, bool a_
|
|||||||
GetWorld()->RemovePlayer(this);
|
GetWorld()->RemovePlayer(this);
|
||||||
|
|
||||||
// Queue adding player to the new world, including all the necessary adjustments to the object
|
// Queue adding player to the new world, including all the necessary adjustments to the object
|
||||||
World->AddPlayer(this);
|
a_World->AddPlayer(this);
|
||||||
SetWorld(World);
|
SetWorld(a_World); // Chunks may be streamed before cWorld::AddPlayer() sets the world to the new value
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -333,7 +333,7 @@ public:
|
|||||||
|
|
||||||
/** Moves the player to the specified world.
|
/** Moves the player to the specified world.
|
||||||
Returns true if successful, false on failure (world not found). */
|
Returns true if successful, false on failure (world not found). */
|
||||||
virtual bool MoveToWorld(const AString & a_WorldName, cWorld * a_World = NULL, bool a_ShouldSendRespawn = true) override; // tolua_export
|
virtual bool MoveToWorld(cWorld * a_World, bool a_ShouldSendRespawn = true) override; // tolua_export
|
||||||
|
|
||||||
/** Saves all player data, such as inventory, to JSON */
|
/** Saves all player data, such as inventory, to JSON */
|
||||||
bool SaveToDisk(void);
|
bool SaveToDisk(void);
|
||||||
|
135
src/World.cpp
135
src/World.cpp
@ -512,7 +512,7 @@ void cWorld::InitializeSpawn(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWorld::Start()
|
void cWorld::Start(void)
|
||||||
{
|
{
|
||||||
m_SpawnX = 0;
|
m_SpawnX = 0;
|
||||||
m_SpawnY = cChunkDef::Height;
|
m_SpawnY = cChunkDef::Height;
|
||||||
@ -594,61 +594,8 @@ void cWorld::Start()
|
|||||||
m_TNTShrapnelLevel = (eShrapnelLevel)Clamp(TNTShrapnelLevel, (int)slNone, (int)slAll);
|
m_TNTShrapnelLevel = (eShrapnelLevel)Clamp(TNTShrapnelLevel, (int)slNone, (int)slAll);
|
||||||
m_Weather = (eWeather) Clamp(Weather, (int)wSunny, (int)wStorm);
|
m_Weather = (eWeather) Clamp(Weather, (int)wSunny, (int)wStorm);
|
||||||
|
|
||||||
switch (GetDimension())
|
InitialiseGeneratorDefaults(IniFile);
|
||||||
{
|
InitialiseAndLoadMobSpawningValues(IniFile);
|
||||||
case dimEnd:
|
|
||||||
{
|
|
||||||
IniFile.GetValueSet("Generator", "BiomeGen", "Constant");
|
|
||||||
IniFile.GetValueSet("Generator", "ConstantBiome", "End");
|
|
||||||
IniFile.GetValueSet("Generator", "HeightGen", "Biomal");
|
|
||||||
IniFile.GetValueSet("Generator", "CompositionGen", "End");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case dimOverworld:
|
|
||||||
{
|
|
||||||
IniFile.GetValueSet("Generator", "BiomeGen", "MultiStepMap");
|
|
||||||
IniFile.GetValueSet("Generator", "HeightGen", "DistortedHeightmap");
|
|
||||||
IniFile.GetValueSet("Generator", "CompositionGen", "DistortedHeightmap");
|
|
||||||
IniFile.GetValueSet("Generator", "Finishers", "Ravines, WormNestCaves, WaterLakes, WaterSprings, LavaLakes, LavaSprings, OreNests, Mineshafts, Trees, SprinkleFoliage, Ice, Snow, Lilypads, BottomLava, DeadBushes, PreSimulator");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case dimNether:
|
|
||||||
{
|
|
||||||
IniFile.GetValueSet("Generator", "BiomeGen", "Constant");
|
|
||||||
IniFile.GetValueSet("Generator", "ConstantBiome", "Nether");
|
|
||||||
IniFile.GetValueSet("Generator", "HeightGen", "Flat");
|
|
||||||
IniFile.GetValueSet("Generator", "FlatHeight", "128");
|
|
||||||
IniFile.GetValueSet("Generator", "CompositionGen", "Nether");
|
|
||||||
IniFile.GetValueSet("Generator", "Finishers", "WormNestCaves, BottomLava, LavaSprings, NetherClumpFoliage, NetherForts, PreSimulator");
|
|
||||||
IniFile.GetValueSet("Generator", "BottomLavaHeight", "30");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load allowed mobs:
|
|
||||||
const char * DefaultMonsters = "";
|
|
||||||
switch (m_Dimension)
|
|
||||||
{
|
|
||||||
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 dimEnd: DefaultMonsters = "enderman"; break;
|
|
||||||
}
|
|
||||||
m_bAnimals = IniFile.GetValueSetB("Monsters", "AnimalsOn", true);
|
|
||||||
AString AllMonsters = IniFile.GetValueSet("Monsters", "Types", DefaultMonsters);
|
|
||||||
AStringVector SplitList = StringSplitAndTrim(AllMonsters, ",");
|
|
||||||
for (AStringVector::const_iterator itr = SplitList.begin(), end = SplitList.end(); itr != end; ++itr)
|
|
||||||
{
|
|
||||||
cMonster::eType ToAdd = cMonster::StringToMobType(*itr);
|
|
||||||
if (ToAdd != cMonster::mtInvalidType)
|
|
||||||
{
|
|
||||||
m_AllowedMobs.insert(ToAdd);
|
|
||||||
LOGD("Allowed mob: %s", itr->c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG("World \"%s\": Unknown mob type: %s", m_WorldName.c_str(), itr->c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_ChunkMap = new cChunkMap(this);
|
m_ChunkMap = new cChunkMap(this);
|
||||||
|
|
||||||
@ -745,6 +692,82 @@ eWeather cWorld::ChooseNewWeather()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cWorld::InitialiseGeneratorDefaults(cIniFile & a_IniFile)
|
||||||
|
{
|
||||||
|
switch (GetDimension())
|
||||||
|
{
|
||||||
|
case dimEnd:
|
||||||
|
{
|
||||||
|
a_IniFile.GetValueSet("Generator", "BiomeGen", "Constant");
|
||||||
|
a_IniFile.GetValueSet("Generator", "ConstantBiome", "End");
|
||||||
|
a_IniFile.GetValueSet("Generator", "HeightGen", "Biomal");
|
||||||
|
a_IniFile.GetValueSet("Generator", "CompositionGen", "End");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case dimOverworld:
|
||||||
|
{
|
||||||
|
a_IniFile.GetValueSet("Generator", "BiomeGen", "MultiStepMap");
|
||||||
|
a_IniFile.GetValueSet("Generator", "HeightGen", "DistortedHeightmap");
|
||||||
|
a_IniFile.GetValueSet("Generator", "CompositionGen", "DistortedHeightmap");
|
||||||
|
a_IniFile.GetValueSet("Generator", "Finishers", "Ravines, WormNestCaves, WaterLakes, WaterSprings, LavaLakes, LavaSprings, OreNests, Mineshafts, Trees, SprinkleFoliage, Ice, Snow, Lilypads, BottomLava, DeadBushes, PreSimulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case dimNether:
|
||||||
|
{
|
||||||
|
a_IniFile.GetValueSet("Generator", "BiomeGen", "Constant");
|
||||||
|
a_IniFile.GetValueSet("Generator", "ConstantBiome", "Nether");
|
||||||
|
a_IniFile.GetValueSet("Generator", "HeightGen", "Flat");
|
||||||
|
a_IniFile.GetValueSet("Generator", "FlatHeight", "128");
|
||||||
|
a_IniFile.GetValueSet("Generator", "CompositionGen", "Nether");
|
||||||
|
a_IniFile.GetValueSet("Generator", "Finishers", "WormNestCaves, BottomLava, LavaSprings, NetherClumpFoliage, NetherForts, PreSimulator");
|
||||||
|
a_IniFile.GetValueSet("Generator", "BottomLavaHeight", "30");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cWorld::InitialiseAndLoadMobSpawningValues(cIniFile & a_IniFile)
|
||||||
|
{
|
||||||
|
AString DefaultMonsters;
|
||||||
|
switch (m_Dimension)
|
||||||
|
{
|
||||||
|
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 dimEnd: DefaultMonsters = "enderman"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_bAnimals = a_IniFile.GetValueSetB("Monsters", "AnimalsOn", true);
|
||||||
|
AString AllMonsters = a_IniFile.GetValueSet("Monsters", "Types", DefaultMonsters);
|
||||||
|
|
||||||
|
if (!m_bAnimals)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AStringVector SplitList = StringSplitAndTrim(AllMonsters, ",");
|
||||||
|
for (AStringVector::const_iterator itr = SplitList.begin(), end = SplitList.end(); itr != end; ++itr)
|
||||||
|
{
|
||||||
|
cMonster::eType ToAdd = cMonster::StringToMobType(*itr);
|
||||||
|
if (ToAdd != cMonster::mtInvalidType)
|
||||||
|
{
|
||||||
|
m_AllowedMobs.insert(ToAdd);
|
||||||
|
LOGD("Allowed mob: %s", itr->c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG("World \"%s\": Unknown mob type: %s", m_WorldName.c_str(), itr->c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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:
|
||||||
|
@ -1030,6 +1030,13 @@ private:
|
|||||||
/** Adds the players queued in the m_PlayersToAdd queue into the m_Players list.
|
/** Adds the players queued in the m_PlayersToAdd queue into the m_Players list.
|
||||||
Assumes it is called from the Tick thread. */
|
Assumes it is called from the Tick thread. */
|
||||||
void AddQueuedPlayers(void);
|
void AddQueuedPlayers(void);
|
||||||
|
|
||||||
|
/** Sets generator values to dimension specific defaults, if those values do not exist */
|
||||||
|
void InitialiseGeneratorDefaults(cIniFile & a_IniFile);
|
||||||
|
|
||||||
|
/** Sets mob spawning values if nonexistant to their dimension specific defaults */
|
||||||
|
void InitialiseAndLoadMobSpawningValues(cIniFile & a_IniFile);
|
||||||
|
|
||||||
}; // tolua_export
|
}; // tolua_export
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user