当前位置:首页>>魔兽单机>>正文
T端中带时间间隔限制和聊天字符限制的世界喊话系统
2013-05-22 21:14:52 作者:网络 来源: 浏览次数:0
摘要:T端中带时间间隔限制和聊天字符限制的世界喊话系统
这个是一个Trinity端的设计公告系统,该系统与其他的世界公告不同的地方在于:
1、可以限制每次世界喊话后,下次喊话的时间间隔。这样就不会出现玩家刷屏的情况

2、限制每次世界喊话最少的字符数量。

参考意义:可以通过该代码,获得时间间隔怎么设置和控制字符数量的配置


 
---
 src/server/game/World/World.cpp              |   5 ++
 src/server/game/World/World.h                |   3 +
 src/server/scripts/Custom/CMakeLists.txt     |   1 +
 src/server/scripts/Custom/World_Chat.cpp     | 119 +++++++++++++++++++++++++++
 src/server/worldserver/worldserver.conf.dist |  24 ++++++
 5 files changed, 152 insertions(+)
 create mode 100644 src/server/scripts/Custom/World_Chat.cpp
 
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index ec11a29..a627a90 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1221,6 +1221,11 @@ void World::LoadConfigSettings(bool reload)
     m_int_configs[CONFIG_WINTERGRASP_NOBATTLETIME] = ConfigMgr::GetIntDefault("Wintergrasp.NoBattleTimer", 150);
     m_int_configs[CONFIG_WINTERGRASP_RESTART_AFTER_CRASH] = ConfigMgr::GetIntDefault("Wintergrasp.CrashRestartTimer", 10);
 
+    // World Chat
+    m_bool_configs[CONFIG_WORLD_CHAT_ENABLE] = ConfigMgr::GetBoolDefault("World_Chat.Enable", false);
+    m_int_configs[CONFIG_WORLD_CHAT_MINLENGTH] = ConfigMgr::GetIntDefault("World_Chat.MinLength", 0);
+    m_int_configs[CONFIG_WORLD_CHAT_MUTETIME] = ConfigMgr::GetIntDefault("World_Chat.MuteTime", 0);
+
     // call ScriptMgr if we're reloading the configuration
     if (reload)
         sScriptMgr->OnConfigLoad(reload);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 00bb9e7..2f97dd7 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -159,6 +159,7 @@ enum WorldBoolConfigs
     CONFIG_WINTERGRASP_ENABLE,
     CONFIG_UI_QUESTLEVELS_IN_DIALOGS,     // Should we add quest levels to the title in the NPC dialogs?
     CONFIG_EVENT_ANNOUNCE,
+    CONFIG_WORLD_CHAT_ENABLE,
     BOOL_CONFIG_VALUE_COUNT
 };
 
@@ -320,6 +321,8 @@ enum WorldIntConfigs
     CONFIG_WINTERGRASP_BATTLETIME,
     CONFIG_WINTERGRASP_NOBATTLETIME,
     CONFIG_WINTERGRASP_RESTART_AFTER_CRASH,
+    CONFIG_WORLD_CHAT_MINLENGTH,
+    CONFIG_WORLD_CHAT_MUTETIME,
     INT_CONFIG_VALUE_COUNT
 };
 
diff --git a/src/server/scripts/Custom/CMakeLists.txt b/src/server/scripts/Custom/CMakeLists.txt
index 99cf026..daf48e6 100644
--- a/src/server/scripts/Custom/CMakeLists.txt
+++ b/src/server/scripts/Custom/CMakeLists.txt
@@ -10,6 +10,7 @@
 
 set(scripts_STAT_SRCS
   ${scripts_STAT_SRCS}
+Custom/World_Chat.cpp
 )
 
 message("  -> Prepared: Custom")
diff --git a/src/server/scripts/Custom/World_Chat.cpp b/src/server/scripts/Custom/World_Chat.cpp
new file mode 100644
index 0000000..38af933
--- /dev/null
+++ b/src/server/scripts/Custom/World_Chat.cpp
@@ -0,0 +1,119 @@
+/* 
+
+By: @mthsena
+
+Script made by: @Ghostcrawler336
+Rewrote and improved by: @AlexeWarr
+
+*/
+#include "ScriptPCH.h"
+#include "Chat.h"
+
+// Ranks
+#define PLAYER                "<Player>"
+#define MODERATOR            "<MOD>"
+#define GAMEMASTER            "<GM>"
+#define ADMINISTRATOR        "<ADM>"
+#define CONSOLE                "<OWNER>"
+// Colors
+#define MSG_COLOR_WHITE        "|cffffffff"
+#define MSG_COLOR_CHAT        "|cff0bf10a"
+#define MSG_COLOR_MSG        "|cff4387c4"
+#define MSG_COLOR_PLAYER    "|cff00ffff"
+#define MSG_COLOR_MOD        "|cffffc800"
+#define MSG_COLOR_GM        "|cffff5f00"
+#define MSG_COLOR_ADM        "|cffff3c00"
+#define MSG_COLOR_OWNER        "|cffFF0000"
+
+void _SendWorldChat(Player* player, std::string message)
+{
+    std::string rank, color;
+    std::ostringstream chat_string;
+
+    switch(player->GetSession()->GetSecurity())
+    {
+    case SEC_PLAYER:
+        rank = PLAYER;
+        color = MSG_COLOR_PLAYER;
+        break;
+    case SEC_MODERATOR:    
+        rank = MODERATOR;
+        color = MSG_COLOR_MOD;
+        break;
+    case SEC_GAMEMASTER:
+        rank = GAMEMASTER;
+        color = MSG_COLOR_GM;
+        break;
+    case SEC_ADMINISTRATOR:
+        rank = ADMINISTRATOR;
+        color = MSG_COLOR_ADM;
+        break;
+    case SEC_CONSOLE:
+        rank = CONSOLE;
+        color = MSG_COLOR_OWNER;
+        break;
+    }
+
+    chat_string << color << rank << MSG_COLOR_WHITE << " " << ChatHandler(player->GetSession()).GetNameLink() << " " << MSG_COLOR_CHAT << "Chat: " << MSG_COLOR_MSG << message;
+
+    char msg[1024];
+
+    snprintf(msg, 1024, chat_string.str().c_str());
+
+    if(message.length() >= sWorld->getIntConfig(CONFIG_WORLD_CHAT_MINLENGTH))//这里就是判断字符的长度了
+    {
+        sWorld->SendGlobalText(msg, NULL);
+        if(sWorld->getIntConfig(CONFIG_WORLD_CHAT_MUTETIME) > 0) //这里开始设置每次喊话的时间间隔了
+        {
+            PreparedStatement * mt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);
+            int64 muteTime = time(NULL) + sWorld->getIntConfig(CONFIG_WORLD_CHAT_MUTETIME);
+            player->GetSession()->m_muteTime = muteTime;
+            mt->setInt64(0, muteTime);
+        }
+    }
+    else
+        player->GetSession()->SendNotification("Your message has to be at least %d characters longer", sWorld->getIntConfig(CONFIG_WORLD_CHAT_MINLENGTH));
+
+}
+
+class World_Chat : public CommandScript
+{
+public:
+    World_Chat() : CommandScript("World_Chat"){}
+
+    static bool HandleWorldChatCommand(ChatHandler * pChat, const char * msg)
+    {
+        if (!sWorld->getBoolConfig(CONFIG_WORLD_CHAT_ENABLE))
+        {
+            pChat->PSendSysMessage("World Chat is disabled.");
+            pChat->SetSentErrorMessage(true);
+            return false;
+        }
+
+        if(!*msg)
+            return false;
+
+        Player* pPlayer = pChat->GetSession()->GetPlayer();
+
+        if (!pChat->GetSession()->GetPlayer()->CanSpeak())
+            return false;
+
+        _SendWorldChat(pChat->GetSession()->GetPlayer(), msg);
+        return true;
+    }
+
+    ChatCommand * GetCommands() const
+    {
+        static ChatCommand World_ChatCommandTable[] = 
+        {
+            {"chat", SEC_PLAYER, true, &HandleWorldChatCommand, "", NULL},
+            {NULL, 0, false, NULL, "", NULL}
+        };
+        return World_ChatCommandTable;
+    }
+};
+
+void AddSC_World_Chat()
+{
+    new World_Chat;
+}
\ No newline at end of file
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index bf19240..4765836 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -27,6 +27,7 @@
 #    CHARACTER DELETE OPTIONS
 #    CUSTOM SERVER OPTIONS
 #    LOGGING SYSTEM SETTINGS
+#    WORLD CHAT
 #
 ###################################################################################################
 
@@ -2760,3 +2761,26 @@ Log.Async.Enable = 0
 
 #
 ###################################################################################################
+
+###################################################################################################
+# WORLD CHAT
+#
+#    World_Chat.Enable
+#          Description: Enables the script World_Chat on server.   (这个地方就是控制是否开启世界喊话)
+#          Default:     0 - (Disabled)
+#                       1 - (Enabled)
+#    World_Chat.MinLength
+#          Description: Minimum characters to use the chat.  (每次世界喊话输入的最少的字符数)
+#                       Example: if 1, will need at least 1 character. (如果设置1,那么最少1个字符)
+#    World_Chat.MuteTime
+#          Description: MuteTime(in seconds) after use the chat, avoids the flood.(设置每次喊话的时间间隔。避免刷频)
+#          Default:     0 - (Disabled)
+#                       Example: if 1, will get 1 second mutetime.
+
+World_Chat.Enable = 1
+World_Chat.MinLength = 3
+World_Chat.MuteTime = 5
+
+#
+###################################################################################################
-- 
1.8.1.msysgit.1
 


OK,。代码就到这里。下面提供一个下载。。有些解释我已经些到代码里面了。其他的请大家自己看看


下载完整代码



相关报道:

[关闭] [返回顶部]


  返回首页 | 最新资讯 | 资源下载 | 魔兽图片 | 单机文档 | 技术攻略 | 玩家视频
备案号:蜀ICP备2024062380号-1
免责声明:本网站为热爱怀旧WOW的玩家们建立的魔兽世界资料网站,仅供交流和学习使用,非盈利和商用.如有侵权之处,请联系我们,我们会在24小时内确认删除侵权内容,谢谢合作。
Copyright © 2024 - 2024 WOWAII.COM Corporation, All Rights Reserved

机器人国度