- Linux compatible fixes including updated makefile
- Mersenne Twister still says uint32 but it's now signed for compatibility with random uses needing negative values - Server seed is sent to clients, but needs to be able to be signed long long later on for authentic reasons - Protocol Version is required to match to ensure client compatibility, this should probably have a settings.ini check as well as store the value there git-svn-id: http://mc-server.googlecode.com/svn/trunk@121 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
e2acb45d19
commit
c7fa610be3
53
makefile
53
makefile
@ -77,6 +77,7 @@ MCServer : \
|
||||
build/cChestEntity.o\
|
||||
build/cChunk.o\
|
||||
build/cChunkMap.o\
|
||||
build/cChunkGenerator.o\
|
||||
build/cClientHandle.o\
|
||||
build/cCraftingWindow.o\
|
||||
build/cCriticalSection.o\
|
||||
@ -90,6 +91,9 @@ MCServer : \
|
||||
build/cInventory.o\
|
||||
build/cLog.o\
|
||||
build/cMonster.o\
|
||||
build/cAggressiveMonster.o\
|
||||
build/cPassiveMonster.o\
|
||||
build/cPassiveAggressiveMonster.o\
|
||||
build/cRedstone.o\
|
||||
build/cPiston.o\
|
||||
build/cPawn.o\
|
||||
@ -108,6 +112,7 @@ MCServer : \
|
||||
build/cWebPlugin.o\
|
||||
build/cWindow.o\
|
||||
build/cWorld.o\
|
||||
build/cWorldGenerator.o\
|
||||
build/main.o\
|
||||
build/ManualBindings.o\
|
||||
build/Matrix4f.o\
|
||||
@ -141,6 +146,7 @@ MCServer : \
|
||||
build/cPacket_Handshake.o\
|
||||
build/cPacket_InventoryProgressBar.o\
|
||||
build/cPacket_InventorySlot.o\
|
||||
build/cPacket_ItemData.o\
|
||||
build/cPacket_ItemSwitch.o\
|
||||
build/cPacket_KeepAlive.o\
|
||||
build/cPacket_Login.o\
|
||||
@ -149,6 +155,7 @@ MCServer : \
|
||||
build/cPacket_MultiBlock.o\
|
||||
build/cPacket_NamedEntitySpawn.o\
|
||||
build/cPacket_PickupSpawn.o\
|
||||
build/cPacket_PlayerListItem.o\
|
||||
build/cPacket_PlayerLook.o\
|
||||
build/cPacket_PlayerMoveLook.o\
|
||||
build/cPacket_PlayerPosition.o\
|
||||
@ -225,6 +232,7 @@ MCServer : \
|
||||
build/zutil.o\
|
||||
build/iniFile.o\
|
||||
build/cSocket.o\
|
||||
build/cFluidSimulator.o\
|
||||
build/cWaterSimulator.o\
|
||||
build/cLavaSimulator.o\
|
||||
build/cFileFormatUpdater.o\
|
||||
@ -268,6 +276,7 @@ MCServer : \
|
||||
build/cChestEntity.o\
|
||||
build/cChunk.o\
|
||||
build/cChunkMap.o\
|
||||
build/cChunkGenerator.o\
|
||||
build/cClientHandle.o\
|
||||
build/cCraftingWindow.o\
|
||||
build/cCriticalSection.o\
|
||||
@ -281,6 +290,9 @@ MCServer : \
|
||||
build/cInventory.o\
|
||||
build/cLog.o\
|
||||
build/cMonster.o\
|
||||
build/cAggressiveMonster.o\
|
||||
build/cPassiveMonster.o\
|
||||
build/cPassiveAggressiveMonster.o\
|
||||
build/cRedstone.o\
|
||||
build/cPiston.o\
|
||||
build/cPawn.o\
|
||||
@ -299,6 +311,7 @@ MCServer : \
|
||||
build/cWebPlugin.o\
|
||||
build/cWindow.o\
|
||||
build/cWorld.o\
|
||||
build/cWorldGenerator.o\
|
||||
build/main.o\
|
||||
build/ManualBindings.o\
|
||||
build/Matrix4f.o\
|
||||
@ -332,6 +345,7 @@ MCServer : \
|
||||
build/cPacket_Handshake.o\
|
||||
build/cPacket_InventoryProgressBar.o\
|
||||
build/cPacket_InventorySlot.o\
|
||||
build/cPacket_ItemData.o\
|
||||
build/cPacket_ItemSwitch.o\
|
||||
build/cPacket_KeepAlive.o\
|
||||
build/cPacket_Login.o\
|
||||
@ -340,6 +354,7 @@ MCServer : \
|
||||
build/cPacket_MultiBlock.o\
|
||||
build/cPacket_NamedEntitySpawn.o\
|
||||
build/cPacket_PickupSpawn.o\
|
||||
build/cPacket_PlayerListItem.o\
|
||||
build/cPacket_PlayerLook.o\
|
||||
build/cPacket_PlayerMoveLook.o\
|
||||
build/cPacket_PlayerPosition.o\
|
||||
@ -416,6 +431,7 @@ MCServer : \
|
||||
build/zutil.o\
|
||||
build/iniFile.o\
|
||||
build/cSocket.o\
|
||||
build/cFluidSimulator.o\
|
||||
build/cWaterSimulator.o\
|
||||
build/cLavaSimulator.o\
|
||||
build/cFileFormatUpdater.o\
|
||||
@ -462,6 +478,7 @@ clean :
|
||||
build/cChestEntity.o\
|
||||
build/cChunk.o\
|
||||
build/cChunkMap.o\
|
||||
build/cChunkGenerator.o\
|
||||
build/cClientHandle.o\
|
||||
build/cCraftingWindow.o\
|
||||
build/cCriticalSection.o\
|
||||
@ -475,6 +492,9 @@ clean :
|
||||
build/cInventory.o\
|
||||
build/cLog.o\
|
||||
build/cMonster.o\
|
||||
build/cAggressiveMonster.o\
|
||||
build/cPassiveMonster.o\
|
||||
build/cPassiveAggressiveMonster.o\
|
||||
build/cRedstone.o\
|
||||
build/cPiston.o\
|
||||
build/cPawn.o\
|
||||
@ -493,6 +513,7 @@ clean :
|
||||
build/cWebPlugin.o\
|
||||
build/cWindow.o\
|
||||
build/cWorld.o\
|
||||
build/cWorldGenerator.o\
|
||||
build/main.o\
|
||||
build/ManualBindings.o\
|
||||
build/Matrix4f.o\
|
||||
@ -526,6 +547,7 @@ clean :
|
||||
build/cPacket_Handshake.o\
|
||||
build/cPacket_InventoryProgressBar.o\
|
||||
build/cPacket_InventorySlot.o\
|
||||
build/cPacket_ItemData.o\
|
||||
build/cPacket_ItemSwitch.o\
|
||||
build/cPacket_KeepAlive.o\
|
||||
build/cPacket_Login.o\
|
||||
@ -534,6 +556,7 @@ clean :
|
||||
build/cPacket_MultiBlock.o\
|
||||
build/cPacket_NamedEntitySpawn.o\
|
||||
build/cPacket_PickupSpawn.o\
|
||||
build/cPacket_PlayerListItem.o\
|
||||
build/cPacket_PlayerLook.o\
|
||||
build/cPacket_PlayerMoveLook.o\
|
||||
build/cPacket_PlayerPosition.o\
|
||||
@ -610,6 +633,7 @@ clean :
|
||||
build/zutil.o\
|
||||
build/iniFile.o\
|
||||
build/cSocket.o\
|
||||
build/cFluidSimulator.o\
|
||||
build/cWaterSimulator.o\
|
||||
build/cLavaSimulator.o\
|
||||
build/cFileFormatUpdater.o\
|
||||
@ -673,6 +697,10 @@ build/cChunk.o : source/cChunk.cpp
|
||||
build/cChunkMap.o : source/cChunkMap.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cChunkMap.cpp -c $(INCLUDE) -o build/cChunkMap.o
|
||||
|
||||
# Item # 10 -- cChunkGenerator --
|
||||
build/cChunkGenerator.o : source/cChunkGenerator.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cChunkGenerator.cpp -c $(INCLUDE) -o build/cChunkGenerator.o
|
||||
|
||||
|
||||
# Item # 11 -- cClientHandle --
|
||||
build/cClientHandle.o : source/cClientHandle.cpp
|
||||
@ -738,6 +766,18 @@ build/cLog.o : source/cLog.cpp
|
||||
build/cMonster.o : source/cMonster.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cMonster.cpp -c $(INCLUDE) -o build/cMonster.o
|
||||
|
||||
# Item # 23 -- cAggressiveMonster --
|
||||
build/cAggressiveMonster.o : source/cAggressiveMonster.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cAggressiveMonster.cpp -c $(INCLUDE) -o build/cAggressiveMonster.o
|
||||
|
||||
# Item # 23 -- cPassiveMonster --
|
||||
build/cPassiveMonster.o : source/cPassiveMonster.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cPassiveMonster.cpp -c $(INCLUDE) -o build/cPassiveMonster.o
|
||||
|
||||
# Item # 23 -- cPassiveAgressiveMonster --
|
||||
build/cPassiveAggressiveMonster.o : source/cPassiveAggressiveMonster.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cPassiveAggressiveMonster.cpp -c $(INCLUDE) -o build/cPassiveAggressiveMonster.o
|
||||
|
||||
|
||||
# Item # 23 -- cRedstone --
|
||||
build/cRedstone.o : source/cRedstone.cpp
|
||||
@ -828,6 +868,10 @@ build/cWindow.o : source/cWindow.cpp
|
||||
build/cWorld.o : source/cWorld.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cWorld.cpp -c $(INCLUDE) -o build/cWorld.o
|
||||
|
||||
# Item # 40 -- cWorldGenerator --
|
||||
build/cWorldGenerator.o : source/cWorldGenerator.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cWorldGenerator.cpp -c $(INCLUDE) -o build/cWorldGenerator.o
|
||||
|
||||
|
||||
# Item # 41 -- main --
|
||||
build/main.o : source/main.cpp
|
||||
@ -946,6 +990,9 @@ build/cPacket_InventoryProgressBar.o : source/packets/cPacket_InventoryProgressB
|
||||
build/cPacket_InventorySlot.o : source/packets/cPacket_InventorySlot.cpp
|
||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_InventorySlot.cpp -c $(INCLUDE) -o build/cPacket_InventorySlot.o
|
||||
|
||||
build/cPacket_ItemData.o : source/packets/cPacket_ItemData.cpp
|
||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_ItemData.cpp -c $(INCLUDE) -o build/cPacket_ItemData.o
|
||||
|
||||
build/cPacket_ItemSwitch.o : source/packets/cPacket_ItemSwitch.cpp
|
||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_ItemSwitch.cpp -c $(INCLUDE) -o build/cPacket_ItemSwitch.o
|
||||
|
||||
@ -970,6 +1017,9 @@ build/cPacket_NamedEntitySpawn.o : source/packets/cPacket_NamedEntitySpawn.cpp
|
||||
build/cPacket_PickupSpawn.o : source/packets/cPacket_PickupSpawn.cpp
|
||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PickupSpawn.cpp -c $(INCLUDE) -o build/cPacket_PickupSpawn.o
|
||||
|
||||
build/cPacket_PlayerListItem.o : source/packets/cPacket_PlayerListItem.cpp
|
||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PlayerListItem.cpp -c $(INCLUDE) -o build/cPacket_PlayerListItem.o
|
||||
|
||||
build/cPacket_PlayerLook.o : source/packets/cPacket_PlayerLook.cpp
|
||||
$(CC) $(CC_OPTIONS) source/packets/cPacket_PlayerLook.cpp -c $(INCLUDE) -o build/cPacket_PlayerLook.o
|
||||
|
||||
@ -1398,6 +1448,9 @@ build/cMakeDir.o : source/cMakeDir.cpp
|
||||
build/cSocket.o : source/cSocket.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cSocket.cpp -c $(INCLUDE) -o build/cSocket.o
|
||||
|
||||
build/cFluidSimulator.o : source/cFluidSimulator.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cFluidSimulator.cpp -c $(INCLUDE) -o build/cFluidSimulator.o
|
||||
|
||||
build/cWaterSimulator.o : source/cWaterSimulator.cpp
|
||||
$(CC) $(CC_OPTIONS) source/cWaterSimulator.cpp -c $(INCLUDE) -o build/cWaterSimulator.o
|
||||
|
||||
|
@ -63,7 +63,7 @@
|
||||
class MTRand {
|
||||
// Data
|
||||
public:
|
||||
typedef unsigned long uint32; // unsigned integer type, at least 32 bits
|
||||
typedef long uint32; // unsigned integer type, at least 32 bits
|
||||
|
||||
enum { N = 624 }; // length of state vector
|
||||
enum { SAVE = N + 1 }; // length of array for save()
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include "Vector3f.h"
|
||||
#include "cPlayer.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
|
||||
cAggressiveMonster::cAggressiveMonster()
|
||||
@ -58,7 +59,8 @@ void cAggressiveMonster::Tick(float a_Dt)
|
||||
|
||||
if(m_SeePlayerInterval > 1)
|
||||
{
|
||||
int rem = rand() % 3 + 1; //check most of the time but miss occasionally
|
||||
MTRand r1;
|
||||
int rem = r1.randInt() % 3 + 1; //check most of the time but miss occasionally
|
||||
|
||||
m_SeePlayerInterval = 0.0;
|
||||
if(rem >= 2)
|
||||
|
@ -2,9 +2,11 @@
|
||||
#include "Defines.h"
|
||||
#include "BlockID.h"
|
||||
#include "stdlib.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
ENUM_ITEM_ID cBlockToPickup::ToPickup( unsigned char a_BlockID, ENUM_ITEM_ID a_UsedItemID )
|
||||
{
|
||||
MTRand r1;
|
||||
(void)a_UsedItemID;
|
||||
|
||||
switch( a_BlockID )
|
||||
@ -28,7 +30,7 @@ ENUM_ITEM_ID cBlockToPickup::ToPickup( unsigned char a_BlockID, ENUM_ITEM_ID a_U
|
||||
if( a_UsedItemID == E_ITEM_SHEARS )
|
||||
return E_ITEM_LEAVES;
|
||||
else
|
||||
if(rand() % 5 == 0) return E_ITEM_SAPLING;
|
||||
if(r1.randInt() % 5 == 0) return E_ITEM_SAPLING;
|
||||
return E_ITEM_EMPTY;
|
||||
case E_BLOCK_COAL_ORE:
|
||||
return E_ITEM_COAL;
|
||||
@ -67,17 +69,18 @@ ENUM_ITEM_ID cBlockToPickup::ToPickup( unsigned char a_BlockID, ENUM_ITEM_ID a_U
|
||||
|
||||
char cBlockToPickup::PickupCount(unsigned char a_BlockID)
|
||||
{
|
||||
MTRand r1;
|
||||
switch(a_BlockID)
|
||||
{
|
||||
case E_BLOCK_REDSTONE_ORE_GLOWING:
|
||||
case E_BLOCK_REDSTONE_ORE:
|
||||
return rand() % 2 + 4;
|
||||
return r1.randInt() % 2 + 4;
|
||||
case E_BLOCK_GLOWSTONE:
|
||||
return rand() % 3 + 2;
|
||||
return r1.randInt() % 3 + 2;
|
||||
case E_BLOCK_MELON:
|
||||
return rand() % 8 + 3;
|
||||
return r1.randInt() % 8 + 3;
|
||||
case E_BLOCK_LAPIS_ORE:
|
||||
return rand() % 5 + 4;
|
||||
return r1.randInt() % 5 + 4;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "cCriticalSection.h"
|
||||
#include "cWorldGenerator.h"
|
||||
#include "cBlockToPickup.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
#include "packets/cPacket_DestroyEntity.h"
|
||||
#include "packets/cPacket_PreChunk.h"
|
||||
@ -333,11 +334,11 @@ void cChunk::Tick(float a_Dt)
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
MTRand r1;
|
||||
// Tick dem blocks
|
||||
int RandomX = rand();
|
||||
int RandomY = rand();
|
||||
int RandomZ = rand();
|
||||
int RandomX = r1.randInt();
|
||||
int RandomY = r1.randInt();
|
||||
int RandomZ = r1.randInt();
|
||||
|
||||
for(int i = 0; i < 50; i++)
|
||||
{
|
||||
|
@ -82,7 +82,7 @@ public:
|
||||
void AddTickBlockEntity( cFurnaceEntity* a_Entity );
|
||||
void RemoveTickBlockEntity( cFurnaceEntity* a_Entity );
|
||||
|
||||
inline static unsigned int cChunk::MakeIndex(int x, int y, int z )
|
||||
inline static unsigned int MakeIndex(int x, int y, int z )
|
||||
{
|
||||
if( x < 16 && x > -1 && y < 128 && y > -1 && z < 16 && z > -1 )
|
||||
return y + (z * 128) + (x * 128 * 16);
|
||||
|
@ -70,7 +70,6 @@
|
||||
|
||||
#ifndef _WIN32
|
||||
#define sprintf_s(dst, size, format, ...) sprintf(dst, format, __VA_ARGS__ )
|
||||
#include <stdlib.h> // rand()
|
||||
#endif
|
||||
|
||||
#define AddPistonDir( x, y, z, dir, amount ) switch(dir) { case 0: (y)-=(amount); break; case 1: (y)+=(amount); break;\
|
||||
@ -84,7 +83,7 @@ typedef std::list<cPacket*> PacketList;
|
||||
struct cClientHandle::sClientHandleState
|
||||
{
|
||||
sClientHandleState()
|
||||
: ProtocolVersion( 0 )
|
||||
: ProtocolVersion( 22 )
|
||||
, pReceiveThread( 0 )
|
||||
, pSendThread( 0 )
|
||||
, pAuthenticateThread( 0 )
|
||||
@ -458,6 +457,10 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
||||
{
|
||||
LOG("LOGIN %s", GetUsername() );
|
||||
cPacket_Login* PacketData = reinterpret_cast<cPacket_Login*>(a_Packet);
|
||||
if (PacketData->m_ProtocolVersion != m_pState->ProtocolVersion) {
|
||||
Kick("Your client is outdated!");
|
||||
return;
|
||||
}
|
||||
if( m_pState->Username.compare( PacketData->m_Username ) != 0 )
|
||||
{
|
||||
Kick("Login Username does not match Handshake username!");
|
||||
@ -1243,9 +1246,10 @@ void cClientHandle::Tick(float a_Dt)
|
||||
LoginResponse.m_ProtocolVersion = m_Player->GetUniqueID();
|
||||
//LoginResponse.m_Username = "";
|
||||
LoginResponse.m_ServerMode = m_Player->GetGameMode(); //set gamemode from player.
|
||||
LoginResponse.m_MapSeed = 0;
|
||||
LoginResponse.m_MapSeed = cRoot::Get()->GetWorld()->GetWorldSeed();
|
||||
LoginResponse.m_Dimension = 0;
|
||||
LoginResponse.m_MaxPlayers = (unsigned char)cRoot::Get()->GetWorld()->GetMaxPlayers();
|
||||
LoginResponse.m_Difficulty = 2;
|
||||
Send( LoginResponse );
|
||||
|
||||
// Send Weather if raining:
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "cPickup.h"
|
||||
#include "cItem.h"
|
||||
#include "cMonsterConfig.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
#include "packets/cPacket_SpawnMob.h"
|
||||
#include "packets/cPacket_EntityLook.h"
|
||||
@ -64,7 +65,8 @@ cMonster::cMonster()
|
||||
LOG("In state: %s",GetState());
|
||||
m_Health = 10;
|
||||
|
||||
int RandVal = rand() % 4;
|
||||
MTRand r1;
|
||||
int RandVal = r1.randInt() % 4;
|
||||
if( RandVal == 0 )
|
||||
m_MobType = 90; // Pig
|
||||
else if( RandVal == 1 )
|
||||
@ -418,12 +420,13 @@ void cMonster::EventLosePlayer(){
|
||||
void cMonster::InStateIdle(float a_Dt) {
|
||||
idle_interval += a_Dt;
|
||||
if(idle_interval > 1) { //at this interval the results are predictable
|
||||
int rem = rand()%6 + 1;
|
||||
MTRand r1;
|
||||
int rem = r1.randInt()%6 + 1;
|
||||
//LOG("Moving: int: %3.3f rem: %i",idle_interval,rem);
|
||||
idle_interval = 0;
|
||||
Vector3f Dist;
|
||||
Dist.x = (float)((rand()%11)-5);
|
||||
Dist.z = (float)((rand()%11)-5);
|
||||
Dist.x = (float)((r1.randInt()%11)-5);
|
||||
Dist.z = (float)((r1.randInt()%11)-5);
|
||||
if( Dist.SqrLength() > 2 && rem >= 3)
|
||||
{
|
||||
m_Destination->x = (float)(m_Pos->x + Dist.x);
|
||||
@ -581,5 +584,6 @@ void cMonster::DropItem(ENUM_ITEM_ID a_Item, unsigned int a_Count)
|
||||
|
||||
void cMonster::RandomDropItem(ENUM_ITEM_ID a_Item, unsigned int a_Min, unsigned int a_Max)
|
||||
{
|
||||
return cMonster::DropItem(a_Item, rand() % (a_Max + 1) + a_Min);
|
||||
MTRand r1;
|
||||
return cMonster::DropItem(a_Item, r1.randInt() % (a_Max + 1) + a_Min);
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
#include "Defines.h"
|
||||
#include "cWorld.h"
|
||||
#include "BlockID.h"
|
||||
#include <string.h>
|
||||
|
||||
class Vector3f;
|
||||
class cClientHandle;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "cPassiveMonster.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
|
||||
cPassiveMonster::cPassiveMonster()
|
||||
@ -24,7 +25,8 @@ void cPassiveMonster::Tick(float a_Dt)
|
||||
|
||||
if(m_SeePlayerInterval > 1)
|
||||
{
|
||||
int rem = rand() % 3 + 1; //check most of the time but miss occasionally
|
||||
MTRand r1;
|
||||
int rem = r1.randInt() % 3 + 1; //check most of the time but miss occasionally
|
||||
|
||||
m_SeePlayerInterval = 0.0;
|
||||
if(rem >= 2) {
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "cRoot.h"
|
||||
#include "cMakeDir.h"
|
||||
#include "cTimer.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
#include "packets/cPacket_NamedEntitySpawn.h"
|
||||
#include "packets/cPacket_EntityLook.h"
|
||||
@ -375,15 +376,16 @@ void cPlayer::KilledBy( cEntity* a_Killer )
|
||||
|
||||
m_bVisible = false; // So new clients don't see the player
|
||||
|
||||
MTRand r1;
|
||||
// Puke out all the items
|
||||
cItem* Items = m_Inventory->GetSlots();
|
||||
for( unsigned int i = 1; i < m_Inventory->c_NumSlots; ++i )
|
||||
{
|
||||
if( !Items[i].IsEmpty() )
|
||||
{
|
||||
float SpeedX = ((rand()%1000)-500) /100.f;
|
||||
float SpeedY = ((rand()%1000)) /100.f;
|
||||
float SpeedZ = ((rand()%1000)-500) /100.f;
|
||||
float SpeedX = ((r1.randInt()%1000)-500) /100.f;
|
||||
float SpeedY = ((r1.randInt()%1000)) /100.f;
|
||||
float SpeedZ = ((r1.randInt()%1000)-500) /100.f;
|
||||
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), Items[i], SpeedX, SpeedY, SpeedZ );
|
||||
Pickup->Initialize( GetWorld() );
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public:
|
||||
int GetWindowID() { return m_WindowID; }
|
||||
void SetWindowID( int a_WindowID ) { m_WindowID = a_WindowID; }
|
||||
|
||||
static enum WindowType {
|
||||
enum WindowType {
|
||||
Chest,
|
||||
Workbench,
|
||||
Furnace,
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "cGenSettings.h"
|
||||
#include "cMakeDir.h"
|
||||
#include "cChunkGenerator.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
|
||||
#include "packets/cPacket_TimeUpdate.h"
|
||||
@ -65,7 +66,8 @@ bool g_BlockPistonBreakable[128];
|
||||
#define RECI_RAND_MAX (1.f/RAND_MAX)
|
||||
inline float fRadRand( float a_Radius )
|
||||
{
|
||||
return ((float)rand() * RECI_RAND_MAX)*a_Radius - a_Radius*0.5f;
|
||||
MTRand r1;
|
||||
return ((float)r1.rand() * RECI_RAND_MAX)*a_Radius - a_Radius*0.5f;
|
||||
}
|
||||
|
||||
struct sSetBlockData
|
||||
@ -141,11 +143,11 @@ cWorld::cWorld( const char* a_WorldName )
|
||||
|
||||
cMakeDir::MakeDir(m_pState->WorldName.c_str());
|
||||
|
||||
srand( (unsigned int) time(0) );
|
||||
m_SpawnX = (double)((rand()%1000)-500);
|
||||
MTRand r1;
|
||||
m_SpawnX = (double)((r1.randInt()%1000)-500);
|
||||
m_SpawnY = 128;
|
||||
m_SpawnZ = (double)((rand()%1000)-500);
|
||||
m_WorldSeed = rand();
|
||||
m_SpawnZ = (double)((r1.randInt()%1000)-500);
|
||||
m_WorldSeed = r1.randInt();
|
||||
m_GameMode = 0;
|
||||
|
||||
cIniFile IniFile( m_pState->WorldName + "/world.ini");
|
||||
@ -411,11 +413,12 @@ void cWorld::Tick(float a_Dt)
|
||||
m_LavaSimulator->Simulate(a_Dt);
|
||||
UnlockChunks();
|
||||
|
||||
MTRand r1;
|
||||
|
||||
////////////////Weather///////////////////////
|
||||
if ( GetWeather() == 0 ) { //if sunny
|
||||
if( CurrentTick % 19 == 0 ) { //every 20 ticks random weather
|
||||
randWeather = (rand() %10000);
|
||||
randWeather = (r1.randInt() %10000);
|
||||
if (randWeather == 0) {
|
||||
LOG("Starting Rainstorm!");
|
||||
SetWeather ( 1 );
|
||||
@ -428,7 +431,7 @@ void cWorld::Tick(float a_Dt)
|
||||
|
||||
if ( GetWeather() != 0 ) { //if raining or thunderstorm
|
||||
if( CurrentTick % 19 == 0 ) { //every 20 ticks random weather
|
||||
randWeather = (rand() %4999);
|
||||
randWeather = (r1.randInt() %4999);
|
||||
if (randWeather == 0) { //2% chance per second
|
||||
LOG("Back to sunny!");
|
||||
SetWeather ( 0 );
|
||||
@ -440,7 +443,7 @@ void cWorld::Tick(float a_Dt)
|
||||
}
|
||||
|
||||
if ( GetWeather() == 2 ) { //if thunderstorm
|
||||
if (rand() %199 == 0) { //0.5% chance per tick of thunderbolt
|
||||
if (r1.randInt() %199 == 0) { //0.5% chance per tick of thunderbolt
|
||||
CastThunderbolt ( 0, 0, 0 ); //todo: find random possitions near players to cast thunderbolts.
|
||||
}
|
||||
}
|
||||
@ -480,17 +483,17 @@ void cWorld::Tick(float a_Dt)
|
||||
cMonster *Monster = 0;
|
||||
|
||||
//srand ( time(NULL) ); // Only seed random ONCE! Is already done in the cWorld constructor
|
||||
int dayRand = rand() % 6; //added mob code
|
||||
int nightRand = rand() % 10; //added mob code
|
||||
int dayRand = r1.randInt() % 6; //added mob code
|
||||
int nightRand = r1.randInt() % 10; //added mob code
|
||||
|
||||
int RandomPlayerIdx = rand() & m_pState->Players.size();
|
||||
int RandomPlayerIdx = r1.randInt() & m_pState->Players.size();
|
||||
PlayerList::iterator itr = m_pState->Players.begin();
|
||||
for( int i = 1; i < RandomPlayerIdx; i++ )
|
||||
itr++;
|
||||
|
||||
cPlayer* Player = *itr;
|
||||
Vector3d SpawnPos = Player->GetPosition();
|
||||
SpawnPos += Vector3d( (double)(rand()%64)-32, (double)(rand()%64)-32, (double)(rand()%64)-32 );
|
||||
SpawnPos += Vector3d( (double)(r1.randInt()%64)-32, (double)(r1.randInt()%64)-32, (double)(r1.randInt()%64)-32 );
|
||||
char Height = GetHeight( (int)SpawnPos.x, (int)SpawnPos.z );
|
||||
|
||||
if(m_WorldTime >= 12000 + 1000) {
|
||||
@ -581,7 +584,8 @@ void cWorld::GrowTree( int a_X, int a_Y, int a_Z )
|
||||
// converted from php to lua then lua to c++
|
||||
|
||||
// build trunk
|
||||
int trunk = rand() % (7 - 5 + 1) + 5;
|
||||
MTRand r1;
|
||||
int trunk = r1.randInt() % (7 - 5 + 1) + 5;
|
||||
for (int i = 0; i < trunk; i++)
|
||||
{
|
||||
if( GetBlock( a_X, a_Y + i, a_Z ) == E_BLOCK_AIR )
|
||||
@ -598,7 +602,7 @@ void cWorld::GrowTree( int a_X, int a_Y, int a_Z )
|
||||
for (int i = a_X - radius; i <= a_X + radius; i++) {
|
||||
for (int k = a_Z-radius; k <= a_Z + radius; k++) {
|
||||
// small chance to be missing a block to add a little random
|
||||
if (k != a_Z || i != a_X && (rand() % 100 + 1) > 20) {
|
||||
if (k != a_Z || i != a_X && (r1.randInt() % 100 + 1) > 20) {
|
||||
if( GetBlock( i, a_Y + j, k ) == E_BLOCK_AIR )
|
||||
FastSetBlock(i, a_Y+j, k, E_BLOCK_LEAVES, 0 );
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ enum ENUM_ITEM_ID;
|
||||
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class cPacket;
|
||||
class cRedstone;
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "cWorld.h"
|
||||
#include "cChunk.h"
|
||||
#include "cGenSettings.h"
|
||||
#include "MersenneTwister.h"
|
||||
|
||||
#include "BlockID.h"
|
||||
#include "Vector3i.h"
|
||||
@ -205,7 +206,7 @@ void cWorldGenerator::GenerateFoliage( cChunk* a_Chunk )
|
||||
BlockType[ index ] = (char)GrassID;
|
||||
}
|
||||
|
||||
|
||||
MTRand r1;
|
||||
// Plant sum trees
|
||||
{
|
||||
int xx = x + PosX*16;
|
||||
@ -215,10 +216,10 @@ void cWorldGenerator::GenerateFoliage( cChunk* a_Chunk )
|
||||
float val2 = m_Noise.CubicNoise2D( xx*0.01f, zz*0.01f );
|
||||
if( BlockType[index] == SandID )
|
||||
{
|
||||
if( (val1 + val2 > 0.f) && (rand()%128) > 124 && BlockType[index] == E_BLOCK_SAND )
|
||||
if( (val1 + val2 > 0.f) && (r1.randInt()%128) > 124 && BlockType[index] == E_BLOCK_SAND )
|
||||
{
|
||||
BlockType[ cChunk::MakeIndex(x, TopY+1, z) ] = E_BLOCK_CACTUS;
|
||||
if( (rand() & 3) == 3 )
|
||||
if( (r1.randInt() & 3) == 3 )
|
||||
{
|
||||
BlockType[ cChunk::MakeIndex(x, TopY+2, z) ] = E_BLOCK_CACTUS;
|
||||
}
|
||||
@ -229,15 +230,15 @@ void cWorldGenerator::GenerateFoliage( cChunk* a_Chunk )
|
||||
{
|
||||
float val3 = m_Noise.CubicNoise2D( xx*0.01f+10, zz*0.01f+10 );
|
||||
float val4 = m_Noise.CubicNoise2D( xx*0.05f+20, zz*0.05f+20 );
|
||||
if( val1 + val2 > 0.2f && (rand()%128) > 124 )
|
||||
if( val1 + val2 > 0.2f && (r1.randInt()%128) > 124 )
|
||||
World->GrowTree( xx, TopY, zz );
|
||||
else if( val3 > 0.2f && (rand()%128) > 124 )
|
||||
else if( val3 > 0.2f && (r1.randInt()%128) > 124 )
|
||||
BlockType[ cChunk::MakeIndex(x, TopY+1, z) ] = E_BLOCK_YELLOW_FLOWER;
|
||||
else if( val4 > 0.2f && (rand()%128) > 124 )
|
||||
else if( val4 > 0.2f && (r1.randInt()%128) > 124 )
|
||||
BlockType[ cChunk::MakeIndex(x, TopY+1, z) ] = E_BLOCK_RED_ROSE;
|
||||
else if( val1+val2+val3+val4 > 0.2f && (rand()%128) > 124 )
|
||||
else if( val1+val2+val3+val4 > 0.2f && (r1.randInt()%128) > 124 )
|
||||
BlockType[ cChunk::MakeIndex(x, TopY+1, z) ] = E_BLOCK_RED_MUSHROOM;
|
||||
else if( val1+val2+val3+val4 > 0.2f && (rand()%128) > 124 )
|
||||
else if( val1+val2+val3+val4 > 0.2f && (r1.randInt()%128) > 124 )
|
||||
BlockType[ cChunk::MakeIndex(x, TopY+1, z) ] = E_BLOCK_BROWN_MUSHROOM;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user