1
0

Merge branch 'master' into MobSpawner

This commit is contained in:
Howaner 2014-11-30 19:38:52 +01:00
commit 6adf749164
17 changed files with 135 additions and 14 deletions

View File

@ -10,6 +10,7 @@ Howaner
keyboard
Lapayo
Luksor
M10360
marmot21
Masy98
mborland

@ -1 +1 @@
Subproject commit 4702471943511f641458c7e8e89b430a723f43ea
Subproject commit 5b7a6d464ed3e0e5d2a438ebf119430cacab26ae

View File

@ -75,7 +75,6 @@ Wool = String, 1:1, 1:2, 2:1, 2:2
TNT = Gunpowder, 1:1, 3:1, 2:2, 1:3, 3:3 | Sand, 2:1, 1:2, 3:2, 2:3
PillarQuartzBlock = QuartzSlab, 1:1, 1:2
ChiseledQuartzBlock, 2 = QuartzBlock, 1:1, 1:2
CoalBlock = Coal, 1:1, 1:2, 1:3, 2:1, 2:2, 2:3, 3:1, 3:2, 3:3
HayBale = Wheat, 1:1, 1:2, 1:3, 2:1, 2:2, 2:3, 3:1, 3:2, 3:3
SnowBlock = SnowBall, 1:1, 1:2, 2:1, 2:2
ClayBlock = Clay, 1:1, 1:2, 2:1, 2:2

View File

@ -52,7 +52,7 @@ RawBeef = Steak
RawChicken = CookedChicken
Clay = Brick
ClayBlock = HardenedClay
TallGrass = NetherBrickItem
Netherrack = NetherBrickItem
RawFish = CookedFish
Log = CharCoal
Cactus = GreenDye
@ -90,6 +90,25 @@ RawMutton = CookedMutton
! CoalBlock = 16000 # -> 800 sec
! BlazeRod = 2400 # -> 120 sec
! NoteBlock = 300 # -> 15 sec
! HugeRedMushroom = 300 # -> 15 sec
! HugeBrownMushroom = 300 # -> 15 sec
! Banner = 300 # -> 15 sec
! BlackBanner = 300 # -> 15 sec
! RedBanner = 300 # -> 15 sec
! GreenBanner = 300 # -> 15 sec
! BrownBanner = 300 # -> 15 sec
! BlueBanner = 300 # -> 15 sec
! PurpleBanner = 300 # -> 15 sec
! CyanBanner = 300 # -> 15 sec
! SilverBanner = 300 # -> 15 sec
! GrayBanner = 300 # -> 15 sec
! PinkBanner = 300 # -> 15 sec
! LimeBanner = 300 # -> 15 sec
! YellowBanner = 300 # -> 15 sec
! LightBlueBanner = 300 # -> 15 sec
! MagentaBanner = 300 # -> 15 sec
! OrangeBanner = 300 # -> 15 sec
! WhiteBanner = 300 # -> 15 sec
! DaylightSensor = 300 # -> 15 sec
! FenceGate = 300 # -> 15 sec
! SpruceFenceGate = 300 # -> 15 sec

View File

@ -46,6 +46,7 @@ set(SHARED_HDR
../../src/ByteBuffer.h
../../src/StringUtils.h
)
flatten_files(SHARED_SRC)
flatten_files(SHARED_HDR)
source_group("Shared" FILES ${SHARED_SRC} ${SHARED_HDR})
@ -54,15 +55,22 @@ set(SHARED_OSS_SRC
../../src/OSSupport/CriticalSection.cpp
../../src/OSSupport/File.cpp
../../src/OSSupport/IsThread.cpp
../../src/OSSupport/StackTrace.cpp
../../src/OSSupport/Timer.cpp
)
set(SHARED_OSS_HDR
../../src/OSSupport/CriticalSection.h
../../src/OSSupport/File.h
../../src/OSSupport/IsThread.h
../../src/OSSupport/StackTrace.h
../../src/OSSupport/Timer.h
)
if(WIN32)
list (APPEND SHARED_OSS_SRC ../../src/StackWalker.cpp)
list (APPEND SHARED_OSS_HDR ../../src/StackWalker.h)
endif()
flatten_files(SHARED_OSS_SRC)
flatten_files(SHARED_OSS_HDR)

View File

@ -57,14 +57,22 @@ set(SHARED_OSS_SRC
../../src/OSSupport/CriticalSection.cpp
../../src/OSSupport/File.cpp
../../src/OSSupport/IsThread.cpp
../../src/OSSupport/StackTrace.cpp
../../src/OSSupport/Timer.cpp
)
set(SHARED_OSS_HDR
../../src/OSSupport/CriticalSection.h
../../src/OSSupport/File.h
../../src/OSSupport/IsThread.h
../../src/OSSupport/StackTrace.h
../../src/OSSupport/Timer.h
)
if(WIN32)
list (APPEND SHARED_OSS_SRC ../../src/StackWalker.cpp)
list (APPEND SHARED_OSS_HDR ../../src/StackWalker.h)
endif()
flatten_files(SHARED_SRC)
flatten_files(SHARED_HDR)
flatten_files(SHARED_OSS_SRC)

View File

@ -17,7 +17,7 @@ SOURCES += \
BiomeView.cpp \
../../src/Generating/BioGen.cpp \
../../src/VoronoiMap.cpp \
../../src/Noise.cpp \
../../src/Noise/Noise.cpp \
../../src/StringUtils.cpp \
../../src/LoggerListeners.cpp \
../../src/Logger.cpp \
@ -25,7 +25,9 @@ SOURCES += \
../../src/OSSupport/File.cpp \
../../src/OSSupport/CriticalSection.cpp \
../../src/OSSupport/IsThread.cpp \
../../src/OSSupport/StackTrace.cpp \
../../src/BiomeDef.cpp \
../../src/StackWalker.cpp \
../../src/StringCompression.cpp \
../../src/WorldStorage/FastNBT.cpp \
../../lib/zlib/adler32.c \
@ -62,7 +64,7 @@ HEADERS += \
../../src/Generating/IntGen.h \
../../src/Generating/ProtIntGen.h \
../../src/VoronoiMap.h \
../../src/Noise.h \
../../src/Noise/Noise.h \
../../src/StringUtils.h \
../../src/LoggerListeners.h \
../../src/Logger.h \
@ -70,7 +72,9 @@ HEADERS += \
../../src/OSSupport/File.h \
../../src/OSSupport/CriticalSection.h \
../../src/OSSupport/IsThread.h \
../../src/OSSupport/StackTrace.h \
../../src/BiomeDef.h \
../../src/StackWalker.h \
../../src/StringCompression.h \
../../src/WorldStorage/FastNBT.h \
../../lib/zlib/crc32.h \
@ -107,4 +111,15 @@ CONFIG += C++11
OTHER_FILES +=
win* {
# Add the advapi32 library for windows compiles; needed for the StackWalker:
LIBS += advapi32.lib
# StackWalker doesn't like how Qt inconsistently defines only UNICODE, but not _UNICODE:
DEFINES -= UNICODE
}

View File

@ -324,7 +324,7 @@ void cCompoGenNether::ComposeTerrain(cChunkDesc & a_ChunkDesc, const cChunkDesc:
CeilingDisguise = -CeilingDisguise;
}
int CeilingDisguiseHeight = Height - 2 - (int)CeilingDisguise * 3;
int CeilingDisguiseHeight = Height - 2 - FloorC(CeilingDisguise * 3);
for (int y = Height - 1; y > CeilingDisguiseHeight; y--)
{

View File

@ -516,7 +516,7 @@ void cFinishGenSingleTopBlock::GenFinish(cChunkDesc & a_ChunkDesc)
}
int Height = a_ChunkDesc.GetHeight(x, z);
if (Height >= cChunkDef::Height)
if (Height >= cChunkDef::Height - 1)
{
// Too high up
continue;

View File

@ -264,6 +264,7 @@ template class SizeChecker<UInt16, 2>;
#include "OSSupport/Thread.h"
#include "OSSupport/File.h"
#include "Logger.h"
#include "OSSupport/StackTrace.h"
#else
// Logging functions
void inline LOGERROR(const char* a_Format, ...) FORMATSTRING(1, 2);
@ -349,14 +350,14 @@ void inline LOGD(const char* a_Format, ...)
#else
#ifdef _DEBUG
#define ASSERT( x) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__), assert(0), 0))
#define ASSERT( x) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__), PrintStackTrace(), assert(0), 0))
#else
#define ASSERT(x) ((void)(x))
#endif
#endif
// Pretty much the same as ASSERT() but stays in Release builds
#define VERIFY( x) ( !!(x) || ( LOGERROR("Verification failed: %s, file %s, line %i", #x, __FILE__, __LINE__), exit(1), 0))
#define VERIFY( x) ( !!(x) || ( LOGERROR("Verification failed: %s, file %s, line %i", #x, __FILE__, __LINE__), PrintStackTrace(), exit(1), 0))
// Same as assert but in all Self test builds
#ifdef SELF_TEST

View File

@ -2,7 +2,6 @@
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
#include "Noise.h"
#include "OSSupport/Timer.h"
#define FAST_FLOOR(x) (((x) < 0) ? (((int)x) - 1) : ((int)x))

View File

@ -16,8 +16,10 @@ SET (SRCS
Sleep.cpp
Socket.cpp
SocketThreads.cpp
StackTrace.cpp
Thread.cpp
Timer.cpp)
Timer.cpp
)
SET (HDRS
CriticalSection.h
@ -32,8 +34,10 @@ SET (HDRS
Sleep.h
Socket.h
SocketThreads.h
StackTrace.h
Thread.h
Timer.h)
Timer.h
)
if(NOT MSVC)
add_library(OSSupport ${SRCS} ${HDRS})

View File

@ -0,0 +1,44 @@
// StackTrace.cpp
// Implements the functions to print current stack traces
#include "Globals.h"
#include "StackTrace.h"
#ifdef _WIN32
#include "../StackWalker.h"
#else
#include <execinfo.h>
#include <unistd.h>
#endif
void PrintStackTrace(void)
{
#ifdef _WIN32
// Reuse the StackWalker from the LeakFinder project already bound to MCS
// Define a subclass of the StackWalker that outputs everything to stdout
class PrintingStackWalker :
public StackWalker
{
virtual void OnOutput(LPCSTR szText) override
{
puts(szText);
}
} sw;
sw.ShowCallstack();
#else
// Use the backtrace() function to get and output the stackTrace:
// Code adapted from http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes
void * stackTrace[30];
size_t numItems = backtrace(stackTrace, ARRAYCOUNT(stackTrace));
backtrace_symbols_fd(stackTrace, numItems, STDERR_FILENO);
#endif
}

View File

@ -0,0 +1,15 @@
// StackTrace.h
// Declares the functions to print current stack trace
/** Prints the stacktrace for the current thread. */
extern void PrintStackTrace(void);

View File

@ -164,6 +164,8 @@ protected:
if (m_NumPrepared >= m_MaxIdx)
{
m_EvtFinished.Set();
// Must return here, because "this" may have gotten deleted by the previous line
return;
}
// Queue another chunk, if appropriate:
@ -2678,7 +2680,7 @@ bool cWorld::ForEachPlayer(cPlayerListCallback & a_Callback)
bool cWorld::DoWithPlayer(const AString & a_PlayerName, cPlayerListCallback & a_Callback)
{
// Calls the callback for each player in the list
// Calls the callback for the specified player in the list
cCSLock Lock(m_CSPlayers);
for (cPlayerList::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
{

View File

@ -315,7 +315,8 @@ public:
/** Calls the callback for each player in the list; returns true if all players processed, false if the callback aborted by returning true */
virtual bool ForEachPlayer(cPlayerListCallback & a_Callback) override; // >> EXPORTED IN MANUALBINDINGS <<
/** Calls the callback for the player of the given name; returns true if the player was found and the callback called, false if player not found. Callback return ignored */
/** Calls the callback for the player of the given name; returns true if the player was found and the callback called, false if player not found.
Callback return value is ignored. If there are multiple players of the same name, only (random) one is processed by the callback. */
bool DoWithPlayer(const AString & a_PlayerName, cPlayerListCallback & a_Callback); // >> EXPORTED IN MANUALBINDINGS <<
/** Finds a player from a partial or complete player name and calls the callback - case-insensitive */

View File

@ -61,6 +61,7 @@ void NonCtrlHandler(int a_Signal)
std::signal(SIGSEGV, SIG_DFL);
LOGERROR(" D: | MCServer has encountered an error and needs to close");
LOGERROR("Details | SIGSEGV: Segmentation fault");
PrintStackTrace();
abort();
}
case SIGABRT:
@ -71,6 +72,7 @@ void NonCtrlHandler(int a_Signal)
std::signal(a_Signal, SIG_DFL);
LOGERROR(" D: | MCServer has encountered an error and needs to close");
LOGERROR("Details | SIGABRT: Server self-terminated due to an internal fault");
PrintStackTrace();
abort();
}
case SIGINT:
@ -137,6 +139,9 @@ LONG WINAPI LastChanceExceptionFilter(__in struct _EXCEPTION_POINTERS * a_Except
g_WriteMiniDump(GetCurrentProcess(), GetCurrentProcessId(), dumpFile, g_DumpFlags, (a_ExceptionInfo) ? &ExcInformation : nullptr, nullptr, nullptr);
CloseHandle(dumpFile);
// Print the stack trace for the basic debugging:
PrintStackTrace();
// Revert to old stack:
_asm
{