conflict resolution
This commit is contained in:
commit
8557ab18d0
@ -233,8 +233,8 @@ static int tolua_AllToLua_StringToMobType00(lua_State* tolua_S)
|
|||||||
#ifndef TOLUA_RELEASE
|
#ifndef TOLUA_RELEASE
|
||||||
tolua_Error tolua_err;
|
tolua_Error tolua_err;
|
||||||
if (
|
if (
|
||||||
!tolua_iscppstring(tolua_S,1,0,&tolua_err) ||
|
!tolua_iscppstring(tolua_S, 1, 0, &tolua_err) ||
|
||||||
!tolua_isnoobj(tolua_S,2,&tolua_err)
|
!tolua_isnoobj(tolua_S, 2, &tolua_err)
|
||||||
)
|
)
|
||||||
goto tolua_lerror;
|
goto tolua_lerror;
|
||||||
else
|
else
|
||||||
|
@ -120,6 +120,11 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName) :
|
|||||||
{
|
{
|
||||||
m_CanFly = true;
|
m_CanFly = true;
|
||||||
}
|
}
|
||||||
|
if (World->IsGameModeSpectator()) // Otherwise Player will fall out of the world on join
|
||||||
|
{
|
||||||
|
m_CanFly = true;
|
||||||
|
m_IsFlying = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cRoot::Get()->GetServer()->PlayerCreated(this);
|
cRoot::Get()->GetServer()->PlayerCreated(this);
|
||||||
@ -1074,7 +1079,7 @@ bool cPlayer::IsGameModeAdventure(void) const
|
|||||||
bool cPlayer::IsGameModeSpectator(void) const
|
bool cPlayer::IsGameModeSpectator(void) const
|
||||||
{
|
{
|
||||||
return (m_GameMode == gmSpectator) || // Either the player is explicitly in Spectator
|
return (m_GameMode == gmSpectator) || // Either the player is explicitly in Spectator
|
||||||
((m_GameMode == gmNotSet) && m_World->IsGameModeSpectator()); // or they inherit from the world and the world is Adventure
|
((m_GameMode == gmNotSet) && m_World->IsGameModeSpectator()); // or they inherit from the world and the world is Spectator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1893,8 +1898,8 @@ void cPlayer::UseEquippedItem(int a_Amount)
|
|||||||
|
|
||||||
void cPlayer::TickBurning(cChunk & a_Chunk)
|
void cPlayer::TickBurning(cChunk & a_Chunk)
|
||||||
{
|
{
|
||||||
// Don't burn in creative and stop burning in creative if necessary
|
// Don't burn in creative or spectator and stop burning in creative if necessary
|
||||||
if (!IsGameModeCreative())
|
if (!IsGameModeCreative() && !IsGameModeSpectator())
|
||||||
{
|
{
|
||||||
super::TickBurning(a_Chunk);
|
super::TickBurning(a_Chunk);
|
||||||
}
|
}
|
||||||
@ -1913,9 +1918,9 @@ void cPlayer::HandleFood(void)
|
|||||||
{
|
{
|
||||||
// Ref.: http://www.minecraftwiki.net/wiki/Hunger
|
// Ref.: http://www.minecraftwiki.net/wiki/Hunger
|
||||||
|
|
||||||
if (IsGameModeCreative())
|
if (IsGameModeCreative() || IsGameModeSpectator())
|
||||||
{
|
{
|
||||||
// Hunger is disabled for Creative
|
// Hunger is disabled for Creative and Spectator
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2080,7 +2085,7 @@ void cPlayer::UpdateMovementStats(const Vector3d & a_DeltaPos)
|
|||||||
|
|
||||||
void cPlayer::ApplyFoodExhaustionFromMovement()
|
void cPlayer::ApplyFoodExhaustionFromMovement()
|
||||||
{
|
{
|
||||||
if (IsGameModeCreative())
|
if (IsGameModeCreative() || IsGameModeSpectator())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "DungeonRoomsFinisher.h"
|
#include "DungeonRoomsFinisher.h"
|
||||||
#include "../FastRandom.h"
|
#include "../FastRandom.h"
|
||||||
#include "../BlockEntities/ChestEntity.h"
|
#include "../BlockEntities/ChestEntity.h"
|
||||||
|
#include "../BlockEntities/MobSpawnerEntity.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -57,6 +58,22 @@ public:
|
|||||||
int SecondChestPos = (FirstChestPos + 2 + (rnd % (NumPositions - 3))) % NumPositions;
|
int SecondChestPos = (FirstChestPos + 2 + (rnd % (NumPositions - 3))) % NumPositions;
|
||||||
m_Chest1 = DecodeChestCoords(FirstChestPos, SizeX, SizeZ);
|
m_Chest1 = DecodeChestCoords(FirstChestPos, SizeX, SizeZ);
|
||||||
m_Chest2 = DecodeChestCoords(SecondChestPos, SizeX, SizeZ);
|
m_Chest2 = DecodeChestCoords(SecondChestPos, SizeX, SizeZ);
|
||||||
|
|
||||||
|
// Choose what the mobspawner will spawn.
|
||||||
|
// 25% chance for a spider, 25% for a skeleton and 50% chance to get a zombie spawer.
|
||||||
|
int MobType = (a_Noise.IntNoise3DInt(a_OriginX, m_FloorHeight, a_OriginZ) / 7) % 100;
|
||||||
|
if (MobType <= 25)
|
||||||
|
{
|
||||||
|
m_MonsterType = mtSkeleton;
|
||||||
|
}
|
||||||
|
else if (MobType <= 50)
|
||||||
|
{
|
||||||
|
m_MonsterType = mtSpider;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_MonsterType = mtZombie;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -76,6 +93,8 @@ protected:
|
|||||||
/** The (absolute) coords of the second chest. The Y coord represents the chest's Meta value (facing). */
|
/** The (absolute) coords of the second chest. The Y coord represents the chest's Meta value (facing). */
|
||||||
Vector3i m_Chest2;
|
Vector3i m_Chest2;
|
||||||
|
|
||||||
|
/** The monster type for the mobspawner entity. */
|
||||||
|
eMonsterType m_MonsterType;
|
||||||
|
|
||||||
|
|
||||||
/** Decodes the position index along the room walls into a proper 2D position for a chest.
|
/** Decodes the position index along the room walls into a proper 2D position for a chest.
|
||||||
@ -246,7 +265,9 @@ protected:
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
a_ChunkDesc.SetBlockTypeMeta(CenterX, b, CenterZ, E_BLOCK_MOB_SPAWNER, 0);
|
a_ChunkDesc.SetBlockTypeMeta(CenterX, b, CenterZ, E_BLOCK_MOB_SPAWNER, 0);
|
||||||
// TODO: Set the spawned mob
|
cMobSpawnerEntity * MobSpawner = static_cast<cMobSpawnerEntity *>(a_ChunkDesc.GetBlockEntity(CenterX, b, CenterZ));
|
||||||
|
ASSERT((MobSpawner != nullptr) && (MobSpawner->GetBlockType() == E_BLOCK_MOB_SPAWNER));
|
||||||
|
MobSpawner->SetEntity(m_MonsterType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
@ -286,6 +286,19 @@ bool cMobSpawner::CanSpawnHere(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_R
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case mtMooshroom:
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
(TargetBlock == E_BLOCK_AIR) &&
|
||||||
|
(BlockAbove == E_BLOCK_AIR) &&
|
||||||
|
(BlockBelow == E_BLOCK_MYCELIUM) &&
|
||||||
|
(
|
||||||
|
(a_Biome == biMushroomShore) ||
|
||||||
|
(a_Biome == biMushroomIsland)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
LOGD("MG TODO: Write spawning rule for mob type %d", a_MobType);
|
LOGD("MG TODO: Write spawning rule for mob type %d", a_MobType);
|
||||||
|
@ -614,7 +614,7 @@ void cWorld::Start(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adjust the enum-backed variables into their respective bounds:
|
// Adjust the enum-backed variables into their respective bounds:
|
||||||
m_GameMode = (eGameMode) Clamp(GameMode, (int)gmSurvival, (int)gmAdventure);
|
m_GameMode = (eGameMode) Clamp(GameMode, (int)gmSurvival, (int)gmSpectator);
|
||||||
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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user