Added random weather that persists per world. Also added SetWeather, GetWeather, and CastThunderbolt to lua bindings.
git-svn-id: http://mc-server.googlecode.com/svn/trunk@83 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
18b7563680
commit
3be48a2d5a
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
** Lua binding: AllToLua
|
** Lua binding: AllToLua
|
||||||
** Generated automatically by tolua++-1.0.92 on 11/09/11 15:37:09.
|
** Generated automatically by tolua++-1.0.92 on 11/09/11 17:20:10.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
@ -8746,6 +8746,108 @@ static int tolua_AllToLua_cWorld_GetName00(lua_State* tolua_S)
|
||||||
}
|
}
|
||||||
#endif //#ifndef TOLUA_DISABLE
|
#endif //#ifndef TOLUA_DISABLE
|
||||||
|
|
||||||
|
/* method: CastThunderbolt of class cWorld */
|
||||||
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_CastThunderbolt00
|
||||||
|
static int tolua_AllToLua_cWorld_CastThunderbolt00(lua_State* tolua_S)
|
||||||
|
{
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_Error tolua_err;
|
||||||
|
if (
|
||||||
|
!tolua_isusertype(tolua_S,1,"cWorld",0,&tolua_err) ||
|
||||||
|
!tolua_isnumber(tolua_S,2,0,&tolua_err) ||
|
||||||
|
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||||
|
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
|
||||||
|
!tolua_isnoobj(tolua_S,5,&tolua_err)
|
||||||
|
)
|
||||||
|
goto tolua_lerror;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
||||||
|
int tolua_var_1 = ((int) tolua_tonumber(tolua_S,2,0));
|
||||||
|
int tolua_var_2 = ((int) tolua_tonumber(tolua_S,3,0));
|
||||||
|
int tolua_var_3 = ((int) tolua_tonumber(tolua_S,4,0));
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'CastThunderbolt'", NULL);
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
self->CastThunderbolt(tolua_var_1,tolua_var_2,tolua_var_3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_lerror:
|
||||||
|
tolua_error(tolua_S,"#ferror in function 'CastThunderbolt'.",&tolua_err);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif //#ifndef TOLUA_DISABLE
|
||||||
|
|
||||||
|
/* method: SetWeather of class cWorld */
|
||||||
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_SetWeather00
|
||||||
|
static int tolua_AllToLua_cWorld_SetWeather00(lua_State* tolua_S)
|
||||||
|
{
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_Error tolua_err;
|
||||||
|
if (
|
||||||
|
!tolua_isusertype(tolua_S,1,"cWorld",0,&tolua_err) ||
|
||||||
|
!tolua_isnumber(tolua_S,2,0,&tolua_err) ||
|
||||||
|
!tolua_isnoobj(tolua_S,3,&tolua_err)
|
||||||
|
)
|
||||||
|
goto tolua_lerror;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
||||||
|
int tolua_var_4 = ((int) tolua_tonumber(tolua_S,2,0));
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetWeather'", NULL);
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
self->SetWeather(tolua_var_4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_lerror:
|
||||||
|
tolua_error(tolua_S,"#ferror in function 'SetWeather'.",&tolua_err);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif //#ifndef TOLUA_DISABLE
|
||||||
|
|
||||||
|
/* method: GetWeather of class cWorld */
|
||||||
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_GetWeather00
|
||||||
|
static int tolua_AllToLua_cWorld_GetWeather00(lua_State* tolua_S)
|
||||||
|
{
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_Error tolua_err;
|
||||||
|
if (
|
||||||
|
!tolua_isusertype(tolua_S,1,"cWorld",0,&tolua_err) ||
|
||||||
|
!tolua_isnoobj(tolua_S,2,&tolua_err)
|
||||||
|
)
|
||||||
|
goto tolua_lerror;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetWeather'", NULL);
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int tolua_ret = (int) self->GetWeather();
|
||||||
|
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_lerror:
|
||||||
|
tolua_error(tolua_S,"#ferror in function 'GetWeather'.",&tolua_err);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif //#ifndef TOLUA_DISABLE
|
||||||
|
|
||||||
/* method: Clear of class cInventory */
|
/* method: Clear of class cInventory */
|
||||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cInventory_Clear00
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cInventory_Clear00
|
||||||
static int tolua_AllToLua_cInventory_Clear00(lua_State* tolua_S)
|
static int tolua_AllToLua_cInventory_Clear00(lua_State* tolua_S)
|
||||||
|
@ -15839,6 +15941,9 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||||
tolua_function(tolua_S,"GrowTree",tolua_AllToLua_cWorld_GrowTree00);
|
tolua_function(tolua_S,"GrowTree",tolua_AllToLua_cWorld_GrowTree00);
|
||||||
tolua_function(tolua_S,"GetWorldSeed",tolua_AllToLua_cWorld_GetWorldSeed00);
|
tolua_function(tolua_S,"GetWorldSeed",tolua_AllToLua_cWorld_GetWorldSeed00);
|
||||||
tolua_function(tolua_S,"GetName",tolua_AllToLua_cWorld_GetName00);
|
tolua_function(tolua_S,"GetName",tolua_AllToLua_cWorld_GetName00);
|
||||||
|
tolua_function(tolua_S,"CastThunderbolt",tolua_AllToLua_cWorld_CastThunderbolt00);
|
||||||
|
tolua_function(tolua_S,"SetWeather",tolua_AllToLua_cWorld_SetWeather00);
|
||||||
|
tolua_function(tolua_S,"GetWeather",tolua_AllToLua_cWorld_GetWeather00);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
tolua_cclass(tolua_S,"cInventory","cInventory","",NULL);
|
tolua_cclass(tolua_S,"cInventory","cInventory","",NULL);
|
||||||
tolua_beginmodule(tolua_S,"cInventory");
|
tolua_beginmodule(tolua_S,"cInventory");
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
** Lua binding: AllToLua
|
** Lua binding: AllToLua
|
||||||
** Generated automatically by tolua++-1.0.92 on 11/09/11 15:37:10.
|
** Generated automatically by tolua++-1.0.92 on 11/09/11 17:20:10.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Exported function */
|
/* Exported function */
|
||||||
|
|
|
@ -59,7 +59,6 @@
|
||||||
#include "packets/cPacket_EntityEquipment.h"
|
#include "packets/cPacket_EntityEquipment.h"
|
||||||
#include "packets/cPacket_CreateInventoryAction.h"
|
#include "packets/cPacket_CreateInventoryAction.h"
|
||||||
#include "packets/cPacket_NewInvalidState.h"
|
#include "packets/cPacket_NewInvalidState.h"
|
||||||
#include "packets/cPacket_Thunderbolt.h" //for testing.
|
|
||||||
#include "packets/cPacket_UseEntity.h"
|
#include "packets/cPacket_UseEntity.h"
|
||||||
#include "packets/cPacket_WindowClose.h"
|
#include "packets/cPacket_WindowClose.h"
|
||||||
#include "packets/cPacket_13.h"
|
#include "packets/cPacket_13.h"
|
||||||
|
@ -693,17 +692,6 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
||||||
break;
|
break;
|
||||||
case E_BLOCK_WORKBENCH:
|
case E_BLOCK_WORKBENCH:
|
||||||
{
|
{
|
||||||
////////////// For testing V
|
|
||||||
cPacket_NewInvalidState RainPacket;
|
|
||||||
RainPacket.m_Reason = 1; //begin rain
|
|
||||||
cRoot::Get()->GetServer()->Broadcast( RainPacket );
|
|
||||||
//also strike table with lightning for test purposes
|
|
||||||
cPacket_Thunderbolt ThunderboltPacket;
|
|
||||||
ThunderboltPacket.m_xLBPos = PacketData->m_PosX;
|
|
||||||
ThunderboltPacket.m_yLBPos = PacketData->m_PosY;
|
|
||||||
ThunderboltPacket.m_zLBPos = PacketData->m_PosZ;
|
|
||||||
cRoot::Get()->GetServer()->Broadcast( ThunderboltPacket );
|
|
||||||
////////////// For testing ^
|
|
||||||
bPlaceBlock = false;
|
bPlaceBlock = false;
|
||||||
cWindow* Window = new cCraftingWindow( 0, true );
|
cWindow* Window = new cCraftingWindow( 0, true );
|
||||||
m_Player->OpenWindow( Window );
|
m_Player->OpenWindow( Window );
|
||||||
|
@ -712,11 +700,6 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
||||||
case E_BLOCK_FURNACE:
|
case E_BLOCK_FURNACE:
|
||||||
case E_BLOCK_CHEST:
|
case E_BLOCK_CHEST:
|
||||||
{
|
{
|
||||||
////////////// For testing V
|
|
||||||
cPacket_NewInvalidState RainPacket;
|
|
||||||
RainPacket.m_Reason = 2; //end rain
|
|
||||||
cRoot::Get()->GetServer()->Broadcast( RainPacket );
|
|
||||||
////////////// For testing ^
|
|
||||||
bPlaceBlock = false;
|
bPlaceBlock = false;
|
||||||
cBlockEntity* BlockEntity = m_Player->GetWorld()->GetBlockEntity( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
|
cBlockEntity* BlockEntity = m_Player->GetWorld()->GetBlockEntity( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
|
||||||
if( BlockEntity )
|
if( BlockEntity )
|
||||||
|
@ -1091,6 +1074,13 @@ void cClientHandle::Tick(float a_Dt)
|
||||||
LoginResponse.m_Dimension = 0;
|
LoginResponse.m_Dimension = 0;
|
||||||
Send( LoginResponse );
|
Send( LoginResponse );
|
||||||
|
|
||||||
|
// Send Weather if raining:
|
||||||
|
if ( (World->GetWeather() == 1) || (World->GetWeather() == 2) ) {
|
||||||
|
cPacket_NewInvalidState RainPacket;
|
||||||
|
RainPacket.m_Reason = 1; //begin rain
|
||||||
|
Send( RainPacket );
|
||||||
|
}
|
||||||
|
|
||||||
// Send position
|
// Send position
|
||||||
Send( cPacket_PlayerMoveLook( m_Player ) );
|
Send( cPacket_PlayerMoveLook( m_Player ) );
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
|
|
||||||
|
|
||||||
#include "packets/cPacket_TimeUpdate.h"
|
#include "packets/cPacket_TimeUpdate.h"
|
||||||
|
#include "packets/cPacket_NewInvalidState.h"
|
||||||
|
#include "packets/cPacket_Thunderbolt.h"
|
||||||
|
|
||||||
#include "Vector3d.h"
|
#include "Vector3d.h"
|
||||||
|
|
||||||
|
@ -114,6 +116,7 @@ cWorld::cWorld( const char* a_WorldName )
|
||||||
: m_pState( new sWorldState )
|
: m_pState( new sWorldState )
|
||||||
, m_SpawnMonsterTime( 0.f )
|
, m_SpawnMonsterTime( 0.f )
|
||||||
, m_RSList ( 0 )
|
, m_RSList ( 0 )
|
||||||
|
, m_Weather ( 0 )
|
||||||
{
|
{
|
||||||
LOG("cWorld::cWorld(%s)", a_WorldName);
|
LOG("cWorld::cWorld(%s)", a_WorldName);
|
||||||
m_pState->WorldName = a_WorldName;
|
m_pState->WorldName = a_WorldName;
|
||||||
|
@ -288,6 +291,37 @@ cWorld::cWorld( const char* a_WorldName )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cWorld::SetWeather( int Weather )
|
||||||
|
{
|
||||||
|
if (Weather == 2) { //thunder storm
|
||||||
|
m_Weather = 2;
|
||||||
|
cPacket_NewInvalidState WeatherPacket;
|
||||||
|
WeatherPacket.m_Reason = 1; //begin rain
|
||||||
|
Broadcast ( WeatherPacket );
|
||||||
|
CastThunderbolt ( 0, 0, 0 ); //start thunderstorm with a lightning strike at 0, 0, 0. >:D
|
||||||
|
}
|
||||||
|
if (Weather == 1) { //rainstorm
|
||||||
|
m_Weather = 1;
|
||||||
|
cPacket_NewInvalidState WeatherPacket;
|
||||||
|
WeatherPacket.m_Reason = 1; //begin rain
|
||||||
|
Broadcast ( WeatherPacket );
|
||||||
|
}
|
||||||
|
if (Weather == 0) { //sunny
|
||||||
|
m_Weather = 0;
|
||||||
|
cPacket_NewInvalidState WeatherPacket;
|
||||||
|
WeatherPacket.m_Reason = 2; //stop rain
|
||||||
|
Broadcast ( WeatherPacket );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cWorld::CastThunderbolt ( int X, int Y, int Z ) {
|
||||||
|
cPacket_Thunderbolt ThunderboltPacket;
|
||||||
|
ThunderboltPacket.m_xLBPos = X;
|
||||||
|
ThunderboltPacket.m_yLBPos = Y;
|
||||||
|
ThunderboltPacket.m_zLBPos = Z;
|
||||||
|
Broadcast( ThunderboltPacket );
|
||||||
|
}
|
||||||
|
|
||||||
void cWorld::InitializeSpawn()
|
void cWorld::InitializeSpawn()
|
||||||
{
|
{
|
||||||
int ChunkX = 0, ChunkY = 0, ChunkZ = 0;
|
int ChunkX = 0, ChunkY = 0, ChunkZ = 0;
|
||||||
|
@ -306,6 +340,7 @@ void cWorld::InitializeSpawn()
|
||||||
|
|
||||||
void cWorld::Tick(float a_Dt)
|
void cWorld::Tick(float a_Dt)
|
||||||
{
|
{
|
||||||
|
int randWeather = 0;
|
||||||
m_Time+=a_Dt/1000.f;
|
m_Time+=a_Dt/1000.f;
|
||||||
|
|
||||||
CurrentTick++;
|
CurrentTick++;
|
||||||
|
@ -355,6 +390,42 @@ void cWorld::Tick(float a_Dt)
|
||||||
m_LavaSimulator->Simulate(a_Dt);
|
m_LavaSimulator->Simulate(a_Dt);
|
||||||
UnlockChunks();
|
UnlockChunks();
|
||||||
|
|
||||||
|
|
||||||
|
////////////////Weather///////////////////////
|
||||||
|
if ( GetWeather() == 0 ) { //if sunny
|
||||||
|
if( CurrentTick % 19 == 0 ) { //every 20 ticks random weather
|
||||||
|
randWeather = (rand() %100);
|
||||||
|
if (randWeather == 0) {
|
||||||
|
LOG("Starting Rainstorm!");
|
||||||
|
SetWeather ( 1 );
|
||||||
|
} else if (randWeather == 1) {
|
||||||
|
LOG("Starting Thunderstorm!");
|
||||||
|
SetWeather ( 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( GetWeather() != 0 ) { //if raining or thunderstorm
|
||||||
|
if( CurrentTick % 19 == 0 ) { //every 20 ticks random weather
|
||||||
|
randWeather = (rand() %49);
|
||||||
|
if (randWeather == 0) { //2% chance per second
|
||||||
|
LOG("Back to sunny!");
|
||||||
|
SetWeather ( 0 );
|
||||||
|
} else if ( (randWeather > 40) && (GetWeather() != 2) ) { //random chance for rainstorm to turn into thunderstorm.
|
||||||
|
LOG("Starting Thunderstorm!");
|
||||||
|
SetWeather ( 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( GetWeather() == 2 ) { //if thunderstorm
|
||||||
|
if (rand() %99 == 0) { //1% chance per tick of thunderbolt
|
||||||
|
CastThunderbolt ( 0, 0, 0 ); //todo: find random possitions near players to cast thunderbolts.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
////////////////Weather///////////////////////
|
||||||
|
|
||||||
|
|
||||||
if( m_Time - m_LastSave > 60*5 ) // Save each 5 minutes
|
if( m_Time - m_LastSave > 60*5 ) // Save each 5 minutes
|
||||||
{
|
{
|
||||||
SaveAllChunks();
|
SaveAllChunks();
|
||||||
|
|
|
@ -31,7 +31,6 @@ public:
|
||||||
std::vector<int> m_RSList;
|
std::vector<int> m_RSList;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static cWorld* GetWorld(); //tolua_export
|
static cWorld* GetWorld(); //tolua_export
|
||||||
|
|
||||||
// Return time in seconds
|
// Return time in seconds
|
||||||
|
@ -130,6 +129,11 @@ public:
|
||||||
|
|
||||||
void InitializeSpawn();
|
void InitializeSpawn();
|
||||||
|
|
||||||
|
void CastThunderbolt ( int, int, int ); //tolua_export
|
||||||
|
void SetWeather ( int ); //tolua_export
|
||||||
|
int GetWeather() { return m_Weather; }; //tolua_export
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class cRoot;
|
friend class cRoot;
|
||||||
cWorld( const char* a_WorldName );
|
cWorld( const char* a_WorldName );
|
||||||
|
@ -172,4 +176,5 @@ private:
|
||||||
float m_SpawnMonsterRate;
|
float m_SpawnMonsterRate;
|
||||||
|
|
||||||
unsigned int m_WorldSeed;
|
unsigned int m_WorldSeed;
|
||||||
|
int m_Weather;
|
||||||
}; //tolua_export
|
}; //tolua_export
|
||||||
|
|
Loading…
Reference in New Issue
Block a user