From 7bae367084aefdbe0e9d92af5814bc8daaaaa962 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 6 Jan 2009 14:46:30 +0300 Subject: [PATCH] [7039] Implement mangosd.conf options Death.Bones.* for disable bones creating from corpse in world zones or in arena/bg. Note: in case apply insignia bones still created as required for looting. --- src/game/GlobalEvents.cpp | 2 +- src/game/ObjectAccessor.cpp | 8 ++++++-- src/game/ObjectAccessor.h | 2 +- src/game/Player.cpp | 2 +- src/game/World.cpp | 2 ++ src/game/World.h | 2 ++ src/mangosd/mangosd.conf.dist.in | 8 ++++++++ src/shared/revision_nr.h | 2 +- 8 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/game/GlobalEvents.cpp b/src/game/GlobalEvents.cpp index 74199e56c..2a03c05f8 100644 --- a/src/game/GlobalEvents.cpp +++ b/src/game/GlobalEvents.cpp @@ -53,7 +53,7 @@ static void CorpsesEraseCallBack(QueryResult *result, bool bones) { if(!ObjectAccessor::Instance().ConvertCorpseForPlayer(player_guid)) { - sLog.outDebug("Corpse %u not found in world. Delete from DB.",guidlow); + sLog.outDebug("Corpse %u not found in world or bones creating forbidden. Delete from DB.",guidlow); CharacterDatabase.PExecute("DELETE FROM corpse WHERE guid = '%u'",guidlow); } } diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index bab108695..53b6c245f 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -36,6 +36,7 @@ #include "Opcodes.h" #include "ObjectDefines.h" #include "MapInstanced.h" +#include "World.h" #include @@ -430,7 +431,7 @@ ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* ma } Corpse* -ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid) +ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia) { Corpse *corpse = GetCorpseForPlayerGUID(player_guid); if(!corpse) @@ -456,7 +457,10 @@ ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid) Corpse *bones = NULL; // create the bones only if the map and the grid is loaded at the corpse's location - if(map && !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) + // ignore bones creating option in case insignia + if (map && (insignia || + (map->IsBattleGroundOrArena() ? sWorld.getConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld.getConfig(CONFIG_DEATH_BONES_WORLD))) && + !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) { // Create bones, don't change Corpse bones = new Corpse; diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index 0c2a55079..eb09f6385 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -192,7 +192,7 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton