关灯
开启左侧

LOL:有趣的变态魔兽私服服务端的答题系统参考

  [复制链接]
admin实名认证 发表于 2016-4-18 22:46:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

>资源名称:LOL:有趣的变态魔兽私服服务端的答题系统参考

>资源类型:资料共享

>下载帮助:链接失效解压密码吾爱尚玩VIP特权

>本站所有资源均来源于网络,版权归原作者所有,禁止用于一切商业用途。

公告页游平台手游平台金币获取金币充值VIP购买

[资源名称]


LOL:有趣的变态魔兽私服服务端的答题系统参考


[资源类型]


资料共享


[资源详情]


 
  1. diff --git a/src/game/Chat.cpp b/src/game/Chat.cppindex 8f7d802..375d495 100644
  2. --- a/src/game/Chat.cpp
  3. +++ b/src/game/Chat.cpp
  4. @@ -643,6 +643,7 @@ ChatCommand * ChatHandler::getCommandTable()
  5.          { "flusharenapoints",SEC_ADMINISTRATOR, false, &ChatHandler::HandleFlushArenaPointsCommand,    "", NULL },
  6.          { "repairitems",    SEC_GAMEMASTER,     true,  &ChatHandler::HandleRepairitemsCommand,         "", NULL },
  7.          { "waterwalk",      SEC_GAMEMASTER,     false, &ChatHandler::HandleWaterwalkCommand,           "", NULL },
  8. +                { "dt",                        SEC_PLAYER,         false, &ChatHandler::HandleQuestion,                   "", NULL },

  9.          { NULL,             0,                  false, NULL,                                           "", NULL }
  10.      };
  11. diff --git a/src/game/Chat.h b/src/game/Chat.h
  12. index ac03a6f..582d493 100644
  13. --- a/src/game/Chat.h
  14. +++ b/src/game/Chat.h
  15. @@ -491,6 +491,8 @@ class ChatHandler
  16.          bool HandleSet32Bit(const char* args);
  17.          bool HandleSaveAllCommand(const char* args);

  18. +                bool HandleQuestion(const char* args);
  19. +
  20.          Player*   getSelectedPlayer();
  21.          Creature* getSelectedCreature();
  22.          Unit*     getSelectedUnit();
  23. diff --git a/src/game/Language.h b/src/game/Language.h
  24. index e1c15fb..9cdc9f0 100644
  25. --- a/src/game/Language.h
  26. +++ b/src/game/Language.h
  27. @@ -781,5 +781,12 @@ enum MangosStrings
  28.      // NOT RESERVED IDS                   12000-1999999999
  29.      // `db_script_string` table index     2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID)
  30.      // For other tables maybe             2000010000-2147483647 (max index)
  31. +        LANG_AUTO_QUESTION                                        = 11100, //|CFF00FFFF[答题公告]:|R%s  [奖金%s金币]
  32. +        LANG_AUTO_QUESTION_ABCD                                = 11099, //|CFF00FFFF        选项|R     |CFFFF0000A.|R%s    |CFFFF0000B.|R%s    |CFFFF0000C.|R%s    |CFFFF0000D.|R%s
  33. +        LANG_AUTO_QUESTION_OK                       = 11101, //|CFF00FFFF[答题公告]:|R|CFFFFFF00回答正确|R
  34. +        LANG_AUTO_QUESTION_ERROR                        = 11102, //|CFF00FFFF[答题公告]:|R|CFFFF0000回答错误|R
  35. +        LANG_AUTO_QUESTION_RIGHT                        = 11103, //|CFF00FFFF[答题公告]:|R玩家%s|CFFFFFF00回答正确|R
  36. +        LANG_AUTO_QUESTION_NOT_ANSWER_TIME        = 11104, //|CFF00FFFF[答题公告]:|R|CFFFF0000非答题时间|R
  37. +        LANG_AUTO_QUESTION_OFF              = 11105, //|CFFFF0000答题系统功能关闭中!|R
  38. };
  39. #endif
  40. diff --git a/src/game/Level0.cpp b/src/game/Level0.cpp
  41. index 557ca91..b840111 100644
  42. --- a/src/game/Level0.cpp
  43. +++ b/src/game/Level0.cpp
  44. @@ -29,6 +29,8 @@
  45. #include "revision.h"
  46. #include "revision_nr.h"
  47. #include "Util.h"
  48. +#include "UTF8Cn.h"
  49. +#include "worldpacket.h"

  50. bool ChatHandler::HandleHelpCommand(const char* args)
  51. {
  52. @@ -261,3 +263,60 @@ bool ChatHandler::HandleServerMotdCommand(const char* /*args*/)
  53.      PSendSysMessage(LANG_MOTD_CURRENT, sWorld.GetMotd());
  54.      return true;
  55. }
  56. +
  57. +//答题命令
  58. +bool ChatHandler::HandleQuestion(const char* args)
  59. +{
  60. +    if(sWorld.getAutoQuestion(AUTO_QUESTION_ON) != 1)
  61. +    {
  62. +        this->PSendSysMessage(LANG_AUTO_QUESTION_OFF);
  63. +        return true;
  64. +    }
  65. +
  66. +    std::string str = _strupr((char*)args);
  67. +    if(!str.length())
  68. +        return false;
  69. +
  70. +        QueryResult *result;
  71. +        result = WorldDatabase.PQuery("SELECT `ok`,`integral` FROM `auto_question` WHERE flag <> 0");
  72. +
  73. +        if(!result)
  74. +        {
  75. +                sWorld.SendWorldText(LANG_AUTO_QUESTION_NOT_ANSWER_TIME);
  76. +                return true;
  77. +        }
  78. +
  79. +    Field *fields = result->Fetch();
  80. +        std::string answer = _strupr((char*)fields[0].GetString());
  81. +        int32 money = fields[1].GetInt16();
  82. +        delete result;
  83. +
  84. +        if(str == answer)
  85. +        {
  86. +                WorldDatabase.PExecute("UPDATE `auto_question` SET `flag` = 0 WHERE `flag` <> 0");
  87. +                m_session->GetPlayer()->ModifyMoney(money*10000);
  88. +                std::string userName = m_session->GetPlayer()->GetName();
  89. +                PSendSysMessage(LANG_AUTO_QUESTION_OK);
  90. +
  91. +                if(sWorld.getAutoQuestion(AUTO_QUESTION_CENTER) == 0 || sWorld.getAutoQuestion(AUTO_QUESTION_CENTER) == 2)
  92. +                        sWorld.SendWorldText(LANG_AUTO_QUESTION_RIGHT,UTF8Cn::GetNameLink(userName).c_str());
  93. +
  94. +                if(sWorld.getAutoQuestion(AUTO_QUESTION_CENTER) == 1 || sWorld.getAutoQuestion(AUTO_QUESTION_CENTER) == 2)
  95. +                {
  96. +                        std::string messageStr =UTF8Cn::ConvertToUTF8Chinese("|CFF00FFFF[答题公告]:|R玩家|CFFFFFF00[")+userName+UTF8Cn::ConvertToUTF8Chinese("]|R回答正确!");
  97. +
  98. +                        WorldPacket data(SMSG_NOTIFICATION, (messageStr.size()+1));
  99. +                        data << messageStr;
  100. +                        sWorld.SendGlobalMessage(&data);
  101. +                }
  102. +        }
  103. +        else
  104. +        {
  105. +                m_session->GetPlayer()->ModifyMoney(-(int32)sWorld.getAutoQuestion(AUTO_QUESTION_ERROR));
  106. +                PSendSysMessage(LANG_AUTO_QUESTION_ERROR);
  107. +        }
  108. +   
  109. +        //sLog.outString("system info: '%s'",str.c_str());
  110. +        
  111. +        return true;
  112. +}
  113. \ No newline at end of file
  114. diff --git a/src/game/World.cpp b/src/game/World.cpp
  115. index d8a5ab6..5e48d5c 100644
  116. --- a/src/game/World.cpp
  117. +++ b/src/game/World.cpp
  118. @@ -62,6 +62,7 @@
  119. #include "WaypointManager.h"
  120. #include "GMTicketMgr.h"
  121. #include "Util.h"
  122. +#include "Language.h"

  123. INSTANTIATE_SINGLETON_1( World );

  124. @@ -1036,6 +1037,11 @@ void World::LoadConfigSettings(bool reload)
  125.      sLog.outString( "WORLD: VMap support included. LineOfSight:%i, getHeight:%i",enableLOS, enableHeight);
  126.      sLog.outString( "WORLD: VMap data directory is: %svmaps",m_dataPath.c_str());
  127.      sLog.outString( "WORLD: VMap config keys are: vmap.enableLOS, vmap.enableHeight, vmap.ignoreMapIds, vmap.ignoreSpellIds");
  128. +
  129. +        auto_question[AUTO_QUESTION_ON]                          = sConfig.GetIntDefault("AutoQuestion.On", 0);
  130. +    auto_question[AUTO_QUESTION_TIMER]                       = sConfig.GetIntDefault("AutoQuestion.Timer", 300000);
  131. +    auto_question[AUTO_QUESTION_ERROR]                       = sConfig.GetIntDefault("AutoQuestion.Error", 10000);
  132. +        auto_question[AUTO_QUESTION_CENTER]                      = sConfig.GetIntDefault("AutoQuestion.Center", 0);
  133. }

  134. /// Initialize the World
  135. @@ -1403,6 +1409,8 @@ void World::SetInitialWorldSettings()
  136.      m_timers[WUPDATE_CORPSES].SetInterval(20*MINUTE*IN_MILISECONDS);
  137.                                                              //erase corpses every 20 minutes

  138. +        WorldDatabase.PExecute("UPDATE `auto_question` SET `flag` = 0 WHERE `flag` <> 0");
  139. +        m_timers[WUPDATE_AUTOQUESTION].SetInterval(getAutoQuestion(AUTO_QUESTION_TIMER));
  140.      //to set mailtimer to return mails every day between 4 and 5 am
  141.      //mailtimer is increased when updating auctions
  142.      //one second is 1000 -(tested on win system)
  143. @@ -1442,6 +1450,7 @@ void World::SetInitialWorldSettings()
  144.      uint32 nextGameEvent = gameeventmgr.Initialize();
  145.      m_timers[WUPDATE_EVENTS].SetInterval(nextGameEvent);    //depend on next event

  146. +        sLog.outString("Starting AutoQuestion system by LZQGOLD..." );
  147.      sLog.outString( "WORLD: World initialized" );
  148. }

  149. @@ -1594,6 +1603,15 @@ void World::Update(uint32 diff)
  150.          m_timers[WUPDATE_EVENTS].Reset();
  151.      }

  152. +        if(getAutoQuestion(AUTO_QUESTION_ON) == 1)
  153. +    {
  154. +   if (m_timers[WUPDATE_AUTOQUESTION].Passed())
  155. +        {
  156. +           m_timers[WUPDATE_AUTOQUESTION].Reset();
  157. +            SendQuestion();
  158. +                }
  159. +    }
  160. +
  161.      /// </ul>
  162.      ///- Move all creatures with "delayed move" and remove and delete all objects with "delayed remove"
  163.      MapManager::Instance().DoDelayedMovesAndRemoves();
  164. @@ -2016,6 +2034,36 @@ void World::ProcessCliCommands()
  165.      zprint("mangos>");
  166. }

  167. +void World::SendQuestion()
  168. +{
  169. +        int32 guid;
  170. +    std::string text,a,b,c,d,money;
  171. +
  172. +    QueryResult *result;
  173. +    if(!(result = WorldDatabase.PQuery("SELECT `guid`,`text`,`a`,`b`,`c`,`d`,`integral` FROM `auto_question` where `flag` <> 0 LIMIT 1")))
  174. +        result = WorldDatabase.PQuery("SELECT `guid`,`text`,`a`,`b`,`c`,`d`,`integral` FROM `auto_question` ORDER BY RAND() LIMIT 1");
  175. +
  176. +    if(!result)
  177. +        return;
  178. +
  179. +    Field *fields = result->Fetch();
  180. +        guid = fields[0].GetInt16();
  181. +    text = fields[1].GetString();
  182. +        a = fields[2].GetString();
  183. +        b = fields[3].GetString();
  184. +        c = fields[4].GetString();
  185. +        d = fields[5].GetString();
  186. +        money = fields[6].GetString();
  187. +    delete result;
  188. +
  189. +        if(WorldDatabase.PExecute("UPDATE `auto_question` SET `flag` = 1 WHERE `guid` = '%i'",guid))
  190. +        {
  191. +                sWorld.SendWorldText(LANG_AUTO_QUESTION, text.c_str(), money.c_str());
  192. +                sWorld.SendWorldText(LANG_AUTO_QUESTION_ABCD, a.c_str(),b.c_str(),c.c_str(),d.c_str());
  193. +                sLog.outString("AutoQuestion: '%s'",text.c_str());
  194. +        }
  195. +}
  196. +
  197. void World::InitResultQueue()
  198. {
  199.      m_resultQueue = new SqlResultQueue;
  200. diff --git a/src/game/World.h b/src/game/World.h
  201. index e4ff977..b201f0f 100644
  202. --- a/src/game/World.h
  203. +++ b/src/game/World.h
  204. @@ -77,7 +77,8 @@ enum WorldTimers
  205.      WUPDATE_UPTIME      = 4,
  206.      WUPDATE_CORPSES     = 5,
  207.      WUPDATE_EVENTS      = 6,
  208. -    WUPDATE_COUNT       = 7
  209. +        WUPDATE_AUTOQUESTION = 7,
  210. +    WUPDATE_COUNT       = 8
  211. };

  212. /// Configuration elements
  213. @@ -324,6 +325,15 @@ enum RealmZone
  214.      REALM_ZONE_CN9           = 29                           // basic-Latin at create, any at login
  215. };

  216. +enum AutoQuestion
  217. +{
  218. +    AUTO_QUESTION_ON,                                      //是否开启自动答题系统
  219. +    AUTO_QUESTION_TIMER,                                   //自动答题计时时间
  220. +    AUTO_QUESTION_ERROR,                                   //答错扣除金钱
  221. +        AUTO_QUESTION_CENTER,                                                                   //答题公告显示位置,1屏幕中间,0屏幕左下角,2同时
  222. +    AUTO_QUESTION_VALUE_COUNT
  223. +};
  224. +
  225. // DB scripting commands
  226. #define SCRIPT_COMMAND_TALK                  0              // source = unit, target=any, datalong ( 0=say, 1=whisper, 2=yell, 3=emote text)
  227. #define SCRIPT_COMMAND_EMOTE                 1              // source = unit, datalong = anim_id
  228. @@ -474,6 +484,16 @@ class World
  229.                  return 0;
  230.          }

  231. +                void SendQuestion();
  232. +
  233. +                uint32 getAutoQuestion(uint32 index) const
  234. +        {
  235. +            if(index<AUTO_QUESTION_VALUE_COUNT)
  236. +                return auto_question[index];
  237. +            else
  238. +                return 0;
  239. +        }
  240. +
  241.          /// Are we on a "Player versus Player" server?
  242.          bool IsPvPRealm() { return (getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP || getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP); }
  243.          bool IsFFAPvPRealm() { return getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP; }
  244. @@ -546,6 +566,7 @@ class World

  245.          float rate_values[MAX_RATES];
  246.          uint32 m_configs[CONFIG_VALUE_COUNT];
  247. +                uint32 auto_question[AUTO_QUESTION_VALUE_COUNT];
  248.          int32 m_playerLimit;
  249.          LocaleConstant m_defaultDbcLocale;                     // from config for one from loaded DBC locales
  250.          uint32 m_availableDbcLocaleMask;                       // by loaded DBC
  251. diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj
  252. index e457cb7..d2c06aa 100644
  253. --- a/win/VC80/game.vcproj
  254. +++ b/win/VC80/game.vcproj
  255. @@ -1,7 +1,7 @@
  256. <?xml version="1.0" encoding="Windows-1252"?>
  257. <VisualStudioProject
  258.          ProjectType="Visual C++"
  259. -        Version="8,00"
  260. +        Version="8.00"
  261.          Name="game"
  262.          ProjectGUID="{1DC6C4DA-A028-41F3-877D-D5400C594F88}"
  263.          RootNamespace="game"
  264. @@ -1541,6 +1541,14 @@
  265.                                  RelativePath="..\..\src\game\PlayerDump.h"
  266.                                  >
  267.                          </File>
  268. +                        <File
  269. +                                RelativePath="..\..\src\game\UTF8Cn.cpp"
  270. +                                >
  271. +                        </File>
  272. +                        <File
  273. +                                RelativePath="..\..\src\game\UTF8Cn.h"
  274. +                                >
  275. +                        </File>
  276.                  </Filter>
  277.                  <Filter
  278.                          Name="References"
  279. diff --git a/win/VC80/mangosd.vcproj b/win/VC80/mangosd.vcproj
  280. index be3c372..5cd6c49 100644
  281. --- a/win/VC80/mangosd.vcproj
  282. +++ b/win/VC80/mangosd.vcproj
  283. @@ -1,7 +1,7 @@
  284. <?xml version="1.0" encoding="Windows-1252"?>
  285. <VisualStudioProject
  286.          ProjectType="Visual C++"
  287. -        Version="8,00"
  288. +        Version="8.00"
  289.          Name="mangosd"
  290.          ProjectGUID="{A3A04E47-43A2-4C08-90B3-029CEF558594}"
  291.          RootNamespace="mangosd"
复制代码
完整的mangos| trinity魔兽私服服务端的参考代码:
链接: http://pan.baidu.com/s/1hsbcdq0 密码: 4r5y

 

精彩评论2

倒序浏览
asl123456 发表于 2024-9-14 15:04:09 | 显示全部楼层
 
有趣的变态魔兽私服服务端的答题系统参考
 
letver 发表于 2021-11-3 14:32:41 | 显示全部楼层
 
这脚本在哪里啊
 
VIP介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员
  • 活跃会员

    经常参与各类话题的讨论,发帖内容较有主见
  • 热心会员

    经常帮助其他会员答疑
  • 推广达人

    积极宣传本站,为本站带来更多注册会员
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 灌水之王

    经常在论坛发帖,且发帖量较大
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员

0关注

5粉丝

3420帖子

排行榜
作者专栏

QQ交流群&&微信订阅号

QQ交流群

微信订阅号

吾爱尚玩资源基地永久域名:

Www.523Play.Com

在线管理员QQ:1589479632

邮箱:Email@523play.com

QQ交流群:558936238

Copyright   ©2015-2116  吾爱尚玩资源基地|523play.comPowered by©523Pplay.Com技术支持:吾爱尚玩资源基地