这个代码是Trinity的内核代码。 主要功能,。就是BOSS被杀死后,世界BOSS向所有的私服玩家都公告一次。公告的内容在SQL里面配置 适合使用在变态魔兽世界私服中。可以实现BOSS击杀公告。你也可以根据此代码扩展更改,实现击杀boss获得奖励什么的 # HG changeset patch # User aa@aa-HP # Date 1367859811 -10800 # Node ID cfa885e9e6e4c4e37f6799a45918b946546830a4 # Parent 0af922d0404643f4ebaac4d2b786c43aaf190967 # Project: DoomCore Добавил систему анонс при убийстве босса diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/Entities/Unit/Unit.cpp --- a/src/server/game/Entities/Unit/Unit.cpp Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/Entities/Unit/Unit.cpp Mon May 06 20:03:31 2013 +0300 @@ -15354,6 +15354,9 @@ // Call creature just died function if (creature->IsAIEnabled) creature->AI()->JustDied(this); + + if (creature) + sScriptMgr->AllCreatureJustDied(creature); if (TempSummon* summon = creature->ToTempSummon()) if (Unit* summoner = summon->GetSummoner()) diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/Miscellaneous/Language.h --- a/src/server/game/Miscellaneous/Language.h Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/Miscellaneous/Language.h Mon May 06 20:03:31 2013 +0300 @@ -1175,6 +1175,10 @@ // Use for custom patches 11000-11999 LANG_AUTO_BROADCAST = 11000, LANG_INVALID_REALMID = 11001, + + // Boss kill announce + LANG_BOSS_KILL_HISTORY_NORMAL = 11008, + LANG_BOSS_KILL_HISTORY_HEROIC = 11009, // NOT RESERVED IDS 12000-1999999999 // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID) diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/Scripting/ScriptLoader.cpp --- a/src/server/game/Scripting/ScriptLoader.cpp Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/Scripting/ScriptLoader.cpp Mon May 06 20:03:31 2013 +0300 @@ -1315,6 +1315,8 @@ void AddSC_npc_title(); //Top 5 Class Killers void AddSC_Top5_Killers(); +//Boss Kill Announcer +void AddSC_boss_kill_history(); #endif void AddCustomScripts() @@ -1333,6 +1335,7 @@ AddSC_title_granter(); AddSC_npc_title(); AddSC_Top5_Killers(); + AddSC_boss_kill_history(); #endif } diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/Scripting/ScriptMgr.cpp --- a/src/server/game/Scripting/ScriptMgr.cpp Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/Scripting/ScriptMgr.cpp Mon May 06 20:03:31 2013 +0300 @@ -217,6 +217,7 @@ SCR_CLEAR(PlayerScript); SCR_CLEAR(GuildScript); SCR_CLEAR(GroupScript); + SCR_CLEAR(AllCreatureScript); SCR_CLEAR(UnitScript); #undef SCR_CLEAR @@ -796,6 +797,11 @@ tmpscript->OnUpdate(creature, diff); } +void ScriptMgr::AllCreatureJustDied(Creature* creature) +{ + FOREACH_SCRIPT(AllCreatureScript)->AllCreatureJustDied(creature); +} + bool ScriptMgr::OnGossipHello(Player* player, GameObject* go) { ASSERT(player); @@ -1432,6 +1438,12 @@ ScriptRegistry<CreatureScript>::AddScript(this); } +AllCreatureScript::AllCreatureScript(const char* name) + : ScriptObject(name) +{ + ScriptRegistry<AllCreatureScript>::AddScript(this); +} + GameObjectScript::GameObjectScript(const char* name) : ScriptObject(name) { @@ -1536,6 +1548,7 @@ template class ScriptRegistry<BattlegroundMapScript>; template class ScriptRegistry<ItemScript>; template class ScriptRegistry<CreatureScript>; +template class ScriptRegistry<AllCreatureScript>; template class ScriptRegistry<GameObjectScript>; template class ScriptRegistry<AreaTriggerScript>; template class ScriptRegistry<BattlegroundScript>; diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/Scripting/ScriptMgr.h --- a/src/server/game/Scripting/ScriptMgr.h Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/Scripting/ScriptMgr.h Mon May 06 20:03:31 2013 +0300 @@ -450,6 +450,18 @@ virtual CreatureAI* GetAI(Creature* /*creature*/) const { return NULL; } }; +class AllCreatureScript : public ScriptObject +{ + protected: + + AllCreatureScript(const char* name); + + public: + + // Called when creature dying + virtual void AllCreatureJustDied(Creature* /*creature*/) { } +}; + class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject> { protected: @@ -928,6 +940,10 @@ uint32 GetDialogStatus(Player* player, Creature* creature); CreatureAI* GetCreatureAI(Creature* creature); void OnCreatureUpdate(Creature* creature, uint32 diff); + + public: /* AllCreatureScript */ + + void AllCreatureJustDied(Creature* creature); public: /* GameObjectScript */ diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/World/World.cpp --- a/src/server/game/World/World.cpp Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/World/World.cpp Mon May 06 20:03:31 2013 +0300 @@ -1197,6 +1197,14 @@ // Management for LFG EveryWhere m_bool_configs[CONFIG_ON_LFG_EVERY_WHERE] = ConfigMgr::GetBoolDefault("LFG.Everywhere", true); + + //Boss kill history system + m_bool_configs[CONFIG_BOSS_KILL_HISTORY_ENABLE] = ConfigMgr::GetBoolDefault("Boss.Kill.History.Enable", true); + m_int_configs[CONFIG_BOSS_KILL_HISTORY_GUILD_GROUP_10_COUNT] = ConfigMgr::GetIntDefault("Boss.Kill.History.Guild.Group.10",8); + m_int_configs[CONFIG_BOSS_KILL_HISTORY_GUILD_GROUP_25_COUNT] = ConfigMgr::GetIntDefault("Boss.Kill.History.Guild.Group.25",20); + m_int_configs[CONFIG_BOSS_KILL_HISTORY_REWARD_ENABLE] = ConfigMgr::GetBoolDefault("Boss.Kill.History.Reward.Enable", false); + m_int_configs[CONFIG_BOSS_KILL_HISTORY_REWARD_ITEM] = ConfigMgr::GetIntDefault("Boss.Kill.History.Reward.Item.Id",49426); + m_int_configs[CONFIG_BOSS_KILL_HISTORY_REWARD_ITEM_COUNT] = ConfigMgr::GetIntDefault("Boss.Kill.History.Reward.Item.Count",10); // AutoBroadcast m_bool_configs[CONFIG_AUTOBROADCAST] = ConfigMgr::GetBoolDefault("AutoBroadcast.On", false); diff -r 0af922d04046 -r cfa885e9e6e4 src/server/game/World/World.h --- a/src/server/game/World/World.h Mon May 06 19:16:04 2013 +0300 +++ b/src/server/game/World/World.h Mon May 06 20:03:31 2013 +0300 @@ -160,6 +160,8 @@ CONFIG_UI_QUESTLEVELS_IN_DIALOGS, // Should we add quest levels to the title in the NPC dialogs? CONFIG_EVENT_ANNOUNCE, CONFIG_ON_LFG_EVERY_WHERE, + CONFIG_BOSS_KILL_HISTORY_REWARD_ENABLE, + CONFIG_BOSS_KILL_HISTORY_ENABLE, BOOL_CONFIG_VALUE_COUNT }; @@ -322,6 +324,10 @@ CONFIG_WINTERGRASP_BATTLETIME, CONFIG_WINTERGRASP_NOBATTLETIME, CONFIG_WINTERGRASP_RESTART_AFTER_CRASH, + CONFIG_BOSS_KILL_HISTORY_GUILD_GROUP_10_COUNT, + CONFIG_BOSS_KILL_HISTORY_GUILD_GROUP_25_COUNT, + CONFIG_BOSS_KILL_HISTORY_REWARD_ITEM, + CONFIG_BOSS_KILL_HISTORY_REWARD_ITEM_COUNT, INT_CONFIG_VALUE_COUNT }; diff -r 0af922d04046 -r cfa885e9e6e4 src/server/worldserver/worldserver.conf.dist --- a/src/server/worldserver/worldserver.conf.dist Mon May 06 19:16:04 2013 +0300 +++ b/src/server/worldserver/worldserver.conf.dist Mon May 06 20:03:31 2013 +0300 @@ -2778,4 +2778,65 @@ Channel.CityOnlyFlag = 1 # +################################################################################################### + +################################################################################################### +# BOSS KILL HISTORY SYSTEM +# +# Boss.Kill.History.Enable +# Description: Enables the boss kill history system. +# Important: When you kiliing the boss, if you're in guild the world receive announcement, +# that your guild killed this boss, on whisch difficult and the count of kills. +# Default: 1 - (Enabled) +# 0 - (Disabled) +# + +Boss.Kill.History.Enable = 1 + +# +# Boss.Kill.History.Reward.Enable +# Description: Enables or disables the reward system for BKH. +# Default: 0 - (Disabled) +# 1 - (Enabled) +# + +Boss.Kill.History.Reward.Enable = 0 + +# +# Boss.Kill.History.Reward.Item.Id +# Description: ID of the item, which all of party members will be rewarded on guild kill. +# Default: 1 - (Enabled) +# 0 - (Disabled) +# + +Boss.Kill.History.Reward.Item.Id = 49426 + +# +# Boss.Kill.History.Reward.Item.Count +# Description: Count of the items, which all of party members will be rewarded on guild kill. +# Default: 1 - (Enabled) +# 0 - (Disabled) +# + +Boss.Kill.History.Reward.Item.Count = 10 + +# +# Boss.Kill.History.Guild.Group.10 +# Description: How many liverymen have to be in group +# Default: 8 +# +# + +Boss.Kill.History.Guild.Group.10 = 8 + +# +# Boss.Kill.History.Guild.Group.25 +# Description: How many liverymen have to be in group +# Default: 20 +# +# + +Boss.Kill.History.Guild.Group.25 = 20 + +# ################################################################################################### No newline at end of file 上面是C++代码文件 下面是SQL文件代码 DELETE FROM `trinity_string` WHERE `entry` IN (12010, 12011); INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc8`) VALUES (12010, '|cFF00FFFF%s - %s (Normal, %u peoples) defeated by guild "%s", in %u person(s)|r', '|cFF00FFFF%s - %s (Обычный режим на %u человек) повержен гильдией "%s", составом в %u человек.|r'), (12011, '|cFF00FFFF%s - %s (Heroic, %u peoples) defeated by guild "%s", in %u person(s)|r', '|cFF00FFFF%s - %s (Героический режим на %u человек) повержен гильдией "%s", составом в %u человек(а)|r');