AutoBroadcast system.
-This commit is paired with 1 database update
This commit is contained in:
parent
f40da5a409
commit
16aa27c03a
@ -235,6 +235,7 @@ bool ChatHandler::HandleReloadAllCommand(char* /*args*/)
|
||||
HandleReloadSkillFishingBaseLevelCommand((char*)"");
|
||||
|
||||
HandleReloadAllAreaCommand((char*)"");
|
||||
HandleReloadAutoBroadcastCommand((char*)"");
|
||||
HandleReloadAllEventAICommand((char*)"");
|
||||
HandleReloadAllLootCommand((char*)"");
|
||||
HandleReloadAllNpcCommand((char*)"");
|
||||
@ -394,6 +395,14 @@ bool ChatHandler::HandleReloadAreaTriggerTeleportCommand(char* /*args*/)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleReloadAutoBroadcastCommand(char* /*args*/)
|
||||
{
|
||||
sLog.outString("Re-Loading broadcast strings...");
|
||||
sWorld.LoadBroadcastStrings();
|
||||
SendGlobalSysMessage("Broadcast strings reloaded.", SEC_MODERATOR);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleReloadCommandCommand(char* /*args*/)
|
||||
{
|
||||
load_command_table = true;
|
||||
|
@ -1051,8 +1051,9 @@ enum MangosStrings
|
||||
LANG_OPVP_SI_CAPTURE_H = 1635,
|
||||
LANG_OPVP_SI_CAPTURE_A = 1636,
|
||||
|
||||
// FREE IDS 1700-9999
|
||||
LANG_AUTOBROADCAST = 1700
|
||||
|
||||
// FREE IDS 1701-9999
|
||||
// Use for not-in-official-sources patches
|
||||
// 10000-10999
|
||||
|
||||
|
@ -490,6 +490,7 @@ ChatCommand* ChatHandler::getCommandTable()
|
||||
{ "areatrigger_quest_end", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestAreaTriggersCommand, "", NULL },
|
||||
{ "areatrigger_tavern", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTavernCommand, "", NULL },
|
||||
{ "areatrigger_teleport", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTeleportCommand, "", NULL },
|
||||
{ "autobroadcast", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAutoBroadcastCommand, "", NULL },
|
||||
{ "command", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommandCommand, "", NULL },
|
||||
{ "conditions", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadConditionsCommand, "", NULL },
|
||||
{ "creature_ai_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventAIScriptsCommand, "", NULL },
|
||||
|
@ -401,6 +401,7 @@ class ChatHandler
|
||||
|
||||
bool HandleReloadAreaTriggerTavernCommand(char* args);
|
||||
bool HandleReloadAreaTriggerTeleportCommand(char* args);
|
||||
bool HandleReloadAutoBroadcastCommand(char* args);
|
||||
bool HandleReloadBattleEventCommand(char* args);
|
||||
bool HandleReloadCommandCommand(char* args);
|
||||
bool HandleReloadConditionsCommand(char* args);
|
||||
@ -739,7 +740,4 @@ class CliHandler : public ChatHandler
|
||||
Print* m_print;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -71,6 +71,7 @@
|
||||
#include "Weather.h"
|
||||
#include "LFGMgr.h"
|
||||
#include "DisableMgr.h"
|
||||
#include "Language.h"
|
||||
|
||||
#ifdef ENABLE_ELUNA
|
||||
#include "LuaEngine.h"
|
||||
@ -118,6 +119,9 @@ World::World()
|
||||
m_startTime = m_gameTime;
|
||||
m_maxActiveSessionCount = 0;
|
||||
m_maxQueuedSessionCount = 0;
|
||||
m_broadcastEnable = false;
|
||||
m_broadcastList.clear();
|
||||
m_broadcastWeight = 0;
|
||||
|
||||
m_defaultDbcLocale = LOCALE_enUS;
|
||||
m_availableDbcLocaleMask = 0;
|
||||
@ -477,6 +481,17 @@ void World::LoadConfigSettings(bool reload)
|
||||
setConfig(CONFIG_BOOL_CLEAN_CHARACTER_DB, "CleanCharacterDB", true);
|
||||
setConfig(CONFIG_BOOL_GRID_UNLOAD, "GridUnload", true);
|
||||
|
||||
setConfig(CONFIG_UINT32_AUTOBROADCAST_INTERVAL, "AutoBroadcast", 600);
|
||||
|
||||
if (getConfig(CONFIG_UINT32_AUTOBROADCAST_INTERVAL) > 0)
|
||||
{ m_broadcastEnable = true; }
|
||||
else
|
||||
{ m_broadcastEnable = false; }
|
||||
|
||||
if (reload && m_broadcastEnable)
|
||||
{ m_broadcastTimer.SetInterval(getConfig(CONFIG_UINT32_AUTOBROADCAST_INTERVAL) * IN_MILLISECONDS); }
|
||||
|
||||
|
||||
std::string forceLoadGridOnMaps = sConfig.GetStringDefault("LoadAllGridsOnMaps", "");
|
||||
if (!forceLoadGridOnMaps.empty())
|
||||
{
|
||||
@ -559,7 +574,7 @@ void World::LoadConfigSettings(bool reload)
|
||||
|
||||
setConfig(CONFIG_BOOL_ALL_TAXI_PATHS, "AllFlightPaths", false);
|
||||
setConfig(CONFIG_BOOL_INSTANT_TAXI, "InstantFlightPaths", false);
|
||||
|
||||
|
||||
setConfig(CONFIG_UINT32_MOUNT_COST, "MountCost", 100000);
|
||||
setConfigMin(CONFIG_UINT32_MIN_TRAIN_MOUNT_LEVEL, "MinTrainMountLevel", 40, 1);
|
||||
setConfig(CONFIG_UINT32_TRAIN_MOUNT_COST, "TrainMountCost", 900000);
|
||||
@ -1316,7 +1331,7 @@ void World::SetInitialWorldSettings()
|
||||
realmID, uint64(m_startTime), isoDate);
|
||||
|
||||
m_timers[WUPDATE_AUCTIONS].SetInterval(MINUTE * IN_MILLISECONDS);
|
||||
m_timers[WUPDATE_UPTIME].SetInterval(getConfig(CONFIG_UINT32_UPTIME_UPDATE)*MINUTE * IN_MILLISECONDS);
|
||||
m_timers[WUPDATE_UPTIME].SetInterval(getConfig(CONFIG_UINT32_UPTIME_UPDATE) * MINUTE * IN_MILLISECONDS);
|
||||
// Update "uptime" table based on configuration entry in minutes.
|
||||
m_timers[WUPDATE_CORPSES].SetInterval(20 * MINUTE * IN_MILLISECONDS);
|
||||
m_timers[WUPDATE_DELETECHARS].SetInterval(DAY * IN_MILLISECONDS); // check for chars to delete every day
|
||||
@ -1324,6 +1339,17 @@ void World::SetInitialWorldSettings()
|
||||
// for AhBot
|
||||
m_timers[WUPDATE_AHBOT].SetInterval(20 * IN_MILLISECONDS); // every 20 sec
|
||||
|
||||
// for AutoBroadcast
|
||||
sLog.outString("Starting AutoBroadcast System");
|
||||
if (m_broadcastEnable)
|
||||
{ LoadBroadcastStrings(); }
|
||||
else
|
||||
{ sLog.outString("AutoBroadcast is disabled");}
|
||||
sLog.outString();
|
||||
|
||||
if (m_broadcastEnable)
|
||||
{ m_broadcastTimer.SetInterval(getConfig(CONFIG_UINT32_AUTOBROADCAST_INTERVAL) * IN_MILLISECONDS); }
|
||||
|
||||
// to set mailtimer to return mails every day between 4 and 5 am
|
||||
// mailtimer is increased when updating auctions
|
||||
// one second is 1000 -(tested on win system)
|
||||
@ -1468,6 +1494,20 @@ void World::Update(uint32 diff)
|
||||
{ m_timers[i].SetCurrent(0); }
|
||||
}
|
||||
|
||||
if (m_broadcastEnable)
|
||||
{
|
||||
if (m_broadcastTimer.GetCurrent() >= 0)
|
||||
{ m_broadcastTimer.Update(diff); }
|
||||
else
|
||||
{ m_broadcastTimer.SetCurrent(0); }
|
||||
|
||||
if (m_broadcastTimer.Passed())
|
||||
{
|
||||
m_broadcastTimer.Reset();
|
||||
AutoBroadcast();
|
||||
}
|
||||
}
|
||||
|
||||
///- Update the game time and check for shutdown time
|
||||
_UpdateGameTime();
|
||||
|
||||
@ -2266,3 +2306,74 @@ void World::InvalidatePlayerDataToAllClient(ObjectGuid guid)
|
||||
data << guid;
|
||||
SendGlobalMessage(&data);
|
||||
}
|
||||
|
||||
void World::LoadBroadcastStrings()
|
||||
{
|
||||
if (!m_broadcastEnable)
|
||||
return;
|
||||
|
||||
std::string queryStr = "SELECT `autobroadcast`.`id`, `autobroadcast`.`content`,`autobroadcast`.`ratio` FROM `autobroadcast`";
|
||||
|
||||
QueryResult* result = WorldDatabase.Query(queryStr.c_str());
|
||||
|
||||
if (!result)
|
||||
{
|
||||
m_broadcastEnable = false;
|
||||
sLog.outErrorDb("DB table `autobroadcast` is empty.");
|
||||
sLog.outString();
|
||||
return;
|
||||
}
|
||||
|
||||
m_broadcastList.clear();
|
||||
|
||||
BarGoLink bar(result->GetRowCount());
|
||||
m_broadcastWeight = 0;
|
||||
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
bar.step();
|
||||
|
||||
uint32 ratio = fields[2].GetUInt32();
|
||||
if (ratio == 0)
|
||||
continue;
|
||||
|
||||
m_broadcastWeight += ratio;
|
||||
|
||||
BroadcastString bs;
|
||||
bs.text = fields[1].GetString();
|
||||
bs.freq = m_broadcastWeight;
|
||||
m_broadcastList.push_back(bs);
|
||||
}
|
||||
while (result->NextRow());
|
||||
|
||||
delete result;
|
||||
if (m_broadcastWeight == 0)
|
||||
{
|
||||
sLog.outString(">> Loaded 0 broadcast strings.");
|
||||
m_broadcastEnable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
sLog.outString(">> Loaded " SIZEFMTD " broadcast strings.", m_broadcastList.size());
|
||||
}
|
||||
}
|
||||
|
||||
void World::AutoBroadcast()
|
||||
{
|
||||
if (m_broadcastList.size() == 1)
|
||||
{
|
||||
SendWorldText(LANG_AUTOBROADCAST, m_broadcastList[0].text.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 rn = urand(1, m_broadcastWeight);
|
||||
std::vector<BroadcastString>::const_iterator it;
|
||||
for (it = m_broadcastList.begin(); it != m_broadcastList.end(); ++it)
|
||||
{
|
||||
if (rn <= it->freq)
|
||||
break;
|
||||
}
|
||||
SendWorldText(LANG_AUTOBROADCAST, it->text.c_str());
|
||||
}
|
||||
}
|
||||
|
@ -74,13 +74,13 @@ enum ShutdownExitCode
|
||||
/// Timers for different object refresh rates
|
||||
enum WorldTimers
|
||||
{
|
||||
WUPDATE_AUCTIONS = 0,
|
||||
WUPDATE_UPTIME = 1,
|
||||
WUPDATE_CORPSES = 2,
|
||||
WUPDATE_EVENTS = 3,
|
||||
WUPDATE_DELETECHARS = 4,
|
||||
WUPDATE_AHBOT = 5,
|
||||
WUPDATE_COUNT = 6
|
||||
WUPDATE_AUCTIONS = 0,
|
||||
WUPDATE_UPTIME,
|
||||
WUPDATE_CORPSES,
|
||||
WUPDATE_EVENTS,
|
||||
WUPDATE_DELETECHARS,
|
||||
WUPDATE_AHBOT,
|
||||
WUPDATE_COUNT
|
||||
};
|
||||
|
||||
/// Configuration elements
|
||||
@ -203,6 +203,7 @@ enum eConfigUInt32Values
|
||||
CONFIG_UINT32_PLAYERBOT_RESTRICTLEVEL,
|
||||
CONFIG_UINT32_PLAYERBOT_MINBOTLEVEL,
|
||||
#endif
|
||||
CONFIG_UINT32_AUTOBROADCAST_INTERVAL,
|
||||
CONFIG_UINT32_VALUE_COUNT
|
||||
};
|
||||
|
||||
@ -605,6 +606,7 @@ class World
|
||||
void LoadDBVersion();
|
||||
char const* GetDBVersion() { return m_DBVersion.c_str(); }
|
||||
|
||||
void LoadBroadcastStrings();
|
||||
|
||||
/**
|
||||
* \brief: force all client to request player data
|
||||
@ -639,6 +641,18 @@ class World
|
||||
bool configNoReload(bool reload, eConfigFloatValues index, char const* fieldname, float defvalue);
|
||||
bool configNoReload(bool reload, eConfigBoolValues index, char const* fieldname, bool defvalue);
|
||||
|
||||
// AutoBroadcast system
|
||||
void AutoBroadcast();
|
||||
struct BroadcastString
|
||||
{
|
||||
uint32 freq;
|
||||
std::string text;
|
||||
};
|
||||
std::vector<BroadcastString> m_broadcastList;
|
||||
uint32 m_broadcastWeight;
|
||||
bool m_broadcastEnable;
|
||||
IntervalTimer m_broadcastTimer;
|
||||
|
||||
static volatile bool m_stopEvent;
|
||||
static uint8 m_ExitCode;
|
||||
uint32 m_ShutdownTimer;
|
||||
|
@ -3,7 +3,7 @@
|
||||
################################################################################
|
||||
|
||||
[MangosdConf]
|
||||
ConfVersion=2016032801
|
||||
ConfVersion=2017011200
|
||||
|
||||
################################################################################
|
||||
# CONNECTIONS AND DIRECTORIES
|
||||
@ -769,6 +769,11 @@ SD3ErrorLogFile = "scriptdev3-errors.log"
|
||||
# Motd
|
||||
# Message of the Day. Displayed at worldlogin for every user ('@' for a newline).
|
||||
#
|
||||
# AutoBroadcast
|
||||
# Timer interval (in seconds) for automatic server announcements (autobroadcasts). Zero value means AB is disabled
|
||||
# 0 (AB is disabled)
|
||||
# Default: 600 (AB every 10 minutes)
|
||||
# N (>0, AB every N seconds)
|
||||
################################################################################
|
||||
|
||||
GameType = 1
|
||||
@ -835,6 +840,7 @@ ShowProgressBars = 1
|
||||
WaitAtStartupError = 10
|
||||
PlayerCommands = 0
|
||||
Motd = "Welcome to Mangos Zero"
|
||||
AutoBroadcast = 600
|
||||
|
||||
################################################################################
|
||||
# PLAYER INTERACTION
|
||||
|
@ -42,7 +42,7 @@
|
||||
// Format is YYYYMMDDRR where RR is the change in the conf file
|
||||
// for that day.
|
||||
#ifndef MANGOSD_CONFIG_VERSION
|
||||
# define MANGOSD_CONFIG_VERSION 2016031901
|
||||
# define MANGOSD_CONFIG_VERSION 2017011200
|
||||
#endif
|
||||
#ifndef REALMD_CONFIG_VERSION
|
||||
# define REALMD_CONFIG_VERSION 2010062001
|
||||
|
@ -37,7 +37,7 @@
|
||||
#define CHAR_DB_UPDATE_DESCRIPTION "Remove field from dbDocs"
|
||||
|
||||
#define WORLD_DB_VERSION_NR 21
|
||||
#define WORLD_DB_STRUCTURE_NR 11
|
||||
#define WORLD_DB_CONTENT_NR 73
|
||||
#define WORLD_DB_UPDATE_DESCRIPTION "Script_Binding"
|
||||
#define WORLD_DB_STRUCTURE_NR 12
|
||||
#define WORLD_DB_CONTENT_NR 1
|
||||
#define WORLD_DB_UPDATE_DESCRIPTION "AutoBroadcast"
|
||||
#endif // __REVISION_H__
|
||||
|
Loading…
x
Reference in New Issue
Block a user