2018-03-29 17:01:57 -04:00
|
|
|
|
2019-07-07 20:56:15 +00:00
|
|
|
#include <StdAfx.h>
|
2018-03-29 17:01:57 -04:00
|
|
|
#include "Config.h"
|
|
|
|
|
|
|
|
|
|
CPhatACServerConfig *g_pConfig = NULL;
|
|
|
|
|
|
|
|
|
|
CKeyValueConfig::CKeyValueConfig(const char *filepath) : m_strFile(filepath)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CKeyValueConfig::~CKeyValueConfig()
|
|
|
|
|
{
|
|
|
|
|
Destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CKeyValueConfig::Destroy()
|
|
|
|
|
{
|
|
|
|
|
m_KeyValues.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CKeyValueConfig::Load(const char *filepath)
|
|
|
|
|
{
|
|
|
|
|
m_strFile = filepath;
|
|
|
|
|
return Load();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CKeyValueConfig::Load()
|
|
|
|
|
{
|
|
|
|
|
Destroy();
|
|
|
|
|
|
|
|
|
|
std::ifstream f;
|
|
|
|
|
f.open(m_strFile.c_str(), std::ios::in);
|
|
|
|
|
|
|
|
|
|
if (f.fail())
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
std::string line;
|
|
|
|
|
std::string valuename, value;
|
|
|
|
|
std::string::size_type pLeft;
|
|
|
|
|
|
|
|
|
|
while (getline(f, line))
|
|
|
|
|
{
|
|
|
|
|
if (!line.length())
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
// Standardize line endings
|
|
|
|
|
if (line[line.length() - 1] == '\r')
|
|
|
|
|
line = line.substr(0, line.length() - 1);
|
|
|
|
|
|
|
|
|
|
if ((pLeft = line.find_first_of(";#=/")) != std::string::npos)
|
|
|
|
|
{
|
|
|
|
|
switch (line[pLeft])
|
|
|
|
|
{
|
|
|
|
|
case '=':
|
|
|
|
|
valuename = line.substr(0, pLeft);
|
|
|
|
|
value = line.substr(pLeft + 1);
|
|
|
|
|
m_KeyValues[valuename] = value;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case ';':
|
|
|
|
|
case '#':
|
|
|
|
|
case '/':
|
|
|
|
|
// comments
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f.close();
|
|
|
|
|
|
|
|
|
|
PostLoad();
|
2018-11-04 17:31:25 -05:00
|
|
|
|
2018-03-29 17:01:57 -04:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char *CKeyValueConfig::GetValue(const char *valuename, const char *defaultvalue)
|
|
|
|
|
{
|
|
|
|
|
std::map<std::string, std::string>::iterator entry = m_KeyValues.find(valuename);
|
|
|
|
|
|
|
|
|
|
if (entry != m_KeyValues.end())
|
|
|
|
|
return entry->second.c_str();
|
|
|
|
|
|
|
|
|
|
return defaultvalue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CPhatACServerConfig::CPhatACServerConfig(const char *filepath) : CKeyValueConfig(filepath)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CPhatACServerConfig::~CPhatACServerConfig()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-29 00:15:00 -07:00
|
|
|
void CPhatACServerConfig::SetWelcomeMessage(std::string message)
|
|
|
|
|
{
|
|
|
|
|
m_WelcomeMessage = message;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-07 21:45:07 -07:00
|
|
|
void CPhatACServerConfig::SetBlueSigilProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_bluesigilprocrate = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetYellowSigilProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_yellowsigilprocrate = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetRedSigilProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_redsigilprocrate = value;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-07 22:07:51 -07:00
|
|
|
void CPhatACServerConfig::SetCloakBaseProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_cloakbaseprocrate = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetCloakHalfHealthProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_cloakhalfhealthprocbonus = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetCloakQuarterHealthProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_cloakquarterhealthprocbonus = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetCloakTenthHealthProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_cloaktenthhealthprocbonus = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetCloakPerLevelProcRate(float value)
|
|
|
|
|
{
|
|
|
|
|
m_cloakperlevelbonus = value;
|
|
|
|
|
}
|
|
|
|
|
|
2018-03-29 17:01:57 -04:00
|
|
|
void CPhatACServerConfig::PostLoad()
|
|
|
|
|
{
|
|
|
|
|
m_BindIP = inet_addr(GetValue("bind_ip", "127.0.0.1"));
|
|
|
|
|
m_BindPort = strtoul(GetValue("bind_port", "9050"), NULL, 10);
|
2019-04-26 11:23:38 -05:00
|
|
|
m_netBufferSize = strtoul(GetValue("net_buffer", "131072"), NULL, 10);
|
2018-03-29 17:01:57 -04:00
|
|
|
|
|
|
|
|
m_DatabaseIP = GetValue("database_ip", "127.0.0.1");
|
|
|
|
|
m_DatabasePort = strtoul(GetValue("database_port", "0"), NULL, 10);
|
|
|
|
|
m_DatabaseUsername = GetValue("database_username", "root");
|
|
|
|
|
m_DatabasePassword = GetValue("database_password", "");
|
|
|
|
|
m_DatabaseName = GetValue("database_name", "phatac");
|
|
|
|
|
|
|
|
|
|
m_WorldName = GetValue("world_name", "");
|
|
|
|
|
m_WelcomePopup = GetValue("welcome_popup", "");
|
|
|
|
|
m_WelcomeMessage = GetValue("welcome_message", "");
|
|
|
|
|
|
|
|
|
|
m_bFastTick = atoi(GetValue("fast_tick", "0")) != 0;
|
2018-08-10 21:51:08 -07:00
|
|
|
m_bUseIncrementalIDs = atoi(GetValue("use_incremental_ids", "1")) != 0;
|
2019-01-02 17:07:12 -06:00
|
|
|
m_idScanType = atoi(GetValue("id_scan_type", "0"));
|
2018-03-29 17:01:57 -04:00
|
|
|
|
|
|
|
|
m_bHardcoreMode = atoi(GetValue("hardcore_mode", "0")) != 0;
|
|
|
|
|
m_bHardcoreModePlayersOnly = atoi(GetValue("hardcore_mode_players_only", "0")) != 0;
|
|
|
|
|
m_bPKOnly = atoi(GetValue("player_killer_only", "0")) != 0;
|
|
|
|
|
m_bColoredSentinels = atoi(GetValue("colored_sentinels", "0")) != 0;
|
|
|
|
|
m_bSpawnLandscape = atoi(GetValue("spawn_landscape", "1")) != 0;
|
|
|
|
|
m_bSpawnStaticCreatures = atoi(GetValue("spawn_static_creatures", "1")) != 0;
|
|
|
|
|
m_bEverythingUnlocked = atoi(GetValue("everything_unlocked", "0")) != 0;
|
|
|
|
|
m_bTownCrierBuffs = atoi(GetValue("town_crier_buffs", "0")) != 0;
|
|
|
|
|
|
|
|
|
|
m_bEnableTeleCommands = atoi(GetValue("enable_teleport_commands", "0")) != 0;
|
|
|
|
|
m_bEnableXPCommands = atoi(GetValue("enable_xp_commands", "0")) != 0;
|
|
|
|
|
m_bEnableAttackableCommand = atoi(GetValue("enable_attackable_command", "0")) != 0;
|
|
|
|
|
m_bEnableGodlyCommand = atoi(GetValue("enable_godly_command", "0")) != 0;
|
|
|
|
|
|
|
|
|
|
m_fQuestMultiplierLessThan1Day = atof(GetValue("quest_time_multiplier_less_than_1_day", "1.0"));
|
|
|
|
|
m_fQuestMultiplier1Day = atof(GetValue("quest_time_multiplier_1_day", "1.0"));
|
|
|
|
|
m_fQuestMultiplier3Day = atof(GetValue("quest_time_multiplier_3_day", "1.0"));
|
|
|
|
|
m_fQuestMultiplier7Day = atof(GetValue("quest_time_multiplier_7_day", "1.0"));
|
|
|
|
|
m_fQuestMultiplier14Day = atof(GetValue("quest_time_multiplier_14_day", "1.0"));
|
|
|
|
|
m_fQuestMultiplier30Day = atof(GetValue("quest_time_multiplier_30_day", "1.0"));
|
|
|
|
|
m_fQuestMultiplier60Day = atof(GetValue("quest_time_multiplier_60_day", "1.0"));
|
|
|
|
|
|
2020-04-29 00:15:00 -07:00
|
|
|
m_fKillXPMultiplier = max(0.0, atof(GetValue("kill_xp_multiplier", "1.0")));
|
|
|
|
|
|
|
|
|
|
m_fRewardXPMultiplier = max(0.0, atof(GetValue("reward_xp_multiplier", "1.0")));
|
|
|
|
|
|
|
|
|
|
m_fLumXPMultiplier = max(0.0, atof(GetValue("lum_xp_multipler", "1.0")));
|
2018-03-29 17:01:57 -04:00
|
|
|
|
|
|
|
|
//m_fDropRateMultiplier = max(0.0, atof(GetValue("drop_rate_multiplier", "1.0")));
|
|
|
|
|
|
|
|
|
|
m_fRespawnTimeMultiplier = max(0.0, atof(GetValue("respawn_time_multiplier", "1.0")));
|
|
|
|
|
m_bSpellFociEnabled = atoi(GetValue("spell_foci_enabled", "1")) != 0;
|
2019-11-23 20:34:53 +00:00
|
|
|
m_defaultsecondstofullchardelete = (unsigned int)atoi(GetValue("deletedchar_seconds_to_delete", "3600"));
|
2018-03-29 17:01:57 -04:00
|
|
|
m_bAutoCreateAccounts = atoi(GetValue("auto_create_accounts", "1")) != 0;
|
|
|
|
|
|
|
|
|
|
m_MaxDormantLandblocks = (unsigned int)max(0, atoi(GetValue("max_dormant_landblocks", "1000")));
|
|
|
|
|
m_DormantLandblockCleanupTime = (unsigned int)max(0, atoi(GetValue("dormant_landblock_cleanup_time", "1800")));
|
|
|
|
|
|
|
|
|
|
m_bShowLogins = atoi(GetValue("show_logins", "1")) != 0;
|
|
|
|
|
m_bSpeedHackKicking = atoi(GetValue("speed_hack_kicking", "1")) != 0;
|
2018-07-31 23:56:39 -05:00
|
|
|
m_fSpeedHackKickThreshold = max(0.0, atof(GetValue("speed_hack_kick_threshold", "1.2")));
|
2019-07-20 14:03:47 -07:00
|
|
|
m_fVoidReduction = max(0.0, atof(GetValue("void_damage_reduction", "1.0")));
|
2018-07-31 23:56:39 -05:00
|
|
|
|
2018-03-29 17:01:57 -04:00
|
|
|
m_bShowDeathMessagesGlobally = atoi(GetValue("show_death_messages_globally", "0")) != 0;
|
|
|
|
|
m_bShowPlayerDeathMessagesGlobally = atoi(GetValue("show_player_death_messages_globally", "0")) != 0;
|
|
|
|
|
|
|
|
|
|
m_HoltburgStartPosition = GetValue("holtburg_start_position", "");
|
|
|
|
|
m_YaraqStartPosition = GetValue("yaraq_start_position", "");
|
|
|
|
|
m_ShoushiStartPosition = GetValue("shoushi_start_position", "");
|
2018-07-12 17:56:41 -05:00
|
|
|
m_SanamarStartPosition = GetValue("sanamar_start_position", "");
|
2018-11-15 20:53:36 -06:00
|
|
|
m_OlthoiStartPosition = GetValue("olthoi_start_position", "");
|
2018-03-29 17:01:57 -04:00
|
|
|
|
|
|
|
|
m_PKRespiteTime = atoi(GetValue("pk_respite_time", "300"));
|
2018-07-12 17:56:41 -05:00
|
|
|
m_bSpellPurgeOnLogin = atoi(GetValue("spell_purge_on_login", "0")) != 0;
|
2018-08-14 19:46:16 +01:00
|
|
|
m_bUpdateAllegianceData = atoi(GetValue("update_allegiance_blob", "0")) != 0;
|
2018-11-09 00:21:21 +00:00
|
|
|
m_bInventoryPurgeOnLogin = atoi(GetValue("inventory_purge_on_login", "0")) != 0;
|
2019-09-30 00:24:45 +00:00
|
|
|
m_bRatingPurgeOnLogin = atoi(GetValue("reset_ratings_on_login", "0")) != 0;
|
2020-07-30 16:30:26 -07:00
|
|
|
m_bAllowCoalDispel = atoi(GetValue("allow_coal_dispel", "1")) != 0;
|
2018-11-09 00:21:21 +00:00
|
|
|
|
|
|
|
|
m_WcidForPurge = (unsigned int)max(0, atoi(GetValue("wcid_for_purge", "100000")));
|
2018-08-22 02:46:47 -05:00
|
|
|
|
|
|
|
|
m_bAllowGeneralChat = atoi(GetValue("allow_general_chat", "1")) != 0;
|
2018-09-14 18:46:57 -05:00
|
|
|
|
2018-10-07 20:31:15 -05:00
|
|
|
m_fRareDropMultiplier = max(0.0, atof(GetValue("rare_drop_multiplier", "0.0")));
|
2018-09-27 22:06:01 -05:00
|
|
|
m_bRealTimeRares = atoi(GetValue("real_time_rare_drops", "0")) != 0;
|
2018-11-04 03:56:19 -05:00
|
|
|
|
|
|
|
|
m_bLoginAtLS = (atoi(GetValue("force_users_to_login_at_lifestone", "0"))) != 0;
|
2018-11-09 22:55:00 -06:00
|
|
|
|
|
|
|
|
m_bCreateTemplates = (atoi(GetValue("spawn_template_weenies", "0"))) != 0;
|
2018-11-12 00:31:10 -06:00
|
|
|
m_bAllowPKCommands = (atoi(GetValue("allow_pk_commands", "0"))) != 0;
|
2018-11-15 20:53:36 -06:00
|
|
|
m_bAllowOlthoi = (atoi(GetValue("allow_olthoi", "0"))) != 0;
|
|
|
|
|
m_bFixOldChars = (atoi(GetValue("fix_old_chars", "0"))) != 0;
|
2020-06-04 17:11:00 -07:00
|
|
|
m_bShowDotSpells = (atoi(GetValue("show_dot_spells", "0"))) != 0;
|
2019-07-12 04:09:01 +00:00
|
|
|
m_maxCorpses = (unsigned int)max(0, atoi(GetValue("max_corpses_per_player", "5")));
|
2019-01-25 02:26:45 -06:00
|
|
|
m_BanString = GetValue("ban_string", "");
|
2019-09-03 14:18:02 +00:00
|
|
|
|
|
|
|
|
m_fellowHealthThreshold = max(0.0, atof(GetValue("fellow_update_health", "0.05")));
|
|
|
|
|
m_fellowStamThreshold = max(0.0, atof(GetValue("fellow_update_stam", "0.3")));
|
|
|
|
|
m_fellowManaThreshold = max(0.0, atof(GetValue("fellow_update_mana", "0.3")));
|
2020-05-30 19:50:47 -07:00
|
|
|
m_missileAttribAdjust = max(0.0, atof(GetValue("missile_attr_adj", "0.0")));
|
2020-08-07 10:58:05 -07:00
|
|
|
|
2020-07-30 16:30:26 -07:00
|
|
|
pkCSmeleebasechance = max(0.0, atof(GetValue("pk_cs_melee_base_chance", "0.1")));
|
|
|
|
|
pkCSmeleeminskill = atoi(GetValue("pk_cs_melee_min_skill", "150"));
|
|
|
|
|
pkCSmeleemaxskill = atoi(GetValue("pk_cs_melee_max_skill", "400"));
|
|
|
|
|
pkCSmeleemaxchance = max(0.0, atof(GetValue("pk_cs_melee_max_chance", "0.5")));
|
|
|
|
|
pkCBmeleebasemult = max(0.0, atof(GetValue("pk_cb_melee_base_mult", "1")));
|
|
|
|
|
pkCBmeleeminskill = atoi(GetValue("pk_cb_melee_min_skill", "150"));
|
|
|
|
|
pkCBmeleemaxskill = atoi(GetValue("pk_cb_melee_max_skill", "400"));
|
|
|
|
|
pkCBmeleemaxmult = max(0.0, atof(GetValue("pk_cb_melee_max_mult", "7")));
|
|
|
|
|
|
|
|
|
|
pkCSmissilebasechance = max(0.0, atof(GetValue("pk_cs_missile_base_chance", "0.1")));
|
|
|
|
|
pkCSmissileminskill = atoi(GetValue("pk_cs_missile_min_skill", "125"));
|
|
|
|
|
pkCSmissilemaxskill = atoi(GetValue("pk_cs_missile_max_skill", "360"));
|
|
|
|
|
pkCSmissilemaxchance = max(0.0, atof(GetValue("pk_cs_missile_max_chance", "0.5")));
|
|
|
|
|
pkCBmissilebasemult = max(0.0, atof(GetValue("pk_cb_missile_base_mult", "1")));
|
|
|
|
|
pkCBmissileminskill = atoi(GetValue("pk_cb_missile_min_skill", "125"));
|
|
|
|
|
pkCBmissilemaxskill = atoi(GetValue("pk_cb_missile_max_skill", "360"));
|
|
|
|
|
pkCBmissilemaxmult = max(0.0, atof(GetValue("pk_cb_missile_max_mult", "7")));
|
|
|
|
|
|
|
|
|
|
pkCSmagicbasechance = max(0.0, atof(GetValue("pk_cs_magic_base_chance", "0.05")));
|
|
|
|
|
pkCSmagicminskill = atoi(GetValue("pk_cs_magic_min_skill", "125"));
|
|
|
|
|
pkCSmagicmaxskill = atoi(GetValue("pk_cs_magic_max_skill", "360"));
|
|
|
|
|
pkCSmagicmaxchance = max(0.0, atof(GetValue("pk_cs_magic_max_chance", "0.25")));
|
|
|
|
|
pkCBmagicbasemult = max(0.0, atof(GetValue("pk_cb_magic_base_mult", "0.5")));
|
|
|
|
|
pkCBmagicminskill = atoi(GetValue("pk_cb_magic_min_skill", "125"));
|
|
|
|
|
pkCBmagicmaxskill = atoi(GetValue("pk_cb_magic_max_skill", "360"));
|
|
|
|
|
pkCBmagicmaxmult = max(0.0, atof(GetValue("pk_cb_magic_max_mult", "1")));
|
|
|
|
|
|
2020-08-07 22:13:56 -07:00
|
|
|
|
2020-08-07 10:58:05 -07:00
|
|
|
m_defaultallegchatgagtime = max(0.0, atof(GetValue("alleg_gag_time", "300")));
|
2020-08-07 22:15:46 -07:00
|
|
|
|
2020-08-07 21:45:07 -07:00
|
|
|
m_bluesigilprocrate = max(0.0, atof(GetValue("blue_sigil_rate", "0.005")));
|
|
|
|
|
m_yellowsigilprocrate = max(0.0, atof(GetValue("yellow_sigil_rate", "0.0075")));
|
|
|
|
|
m_redsigilprocrate = max(0.0, atof(GetValue("red_sigil_rate", "0.01")));
|
2018-03-29 17:01:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double CPhatACServerConfig::GetMultiplierForQuestTime(int questTime)
|
|
|
|
|
{
|
|
|
|
|
if (questTime < 0)
|
|
|
|
|
return 1.0;
|
|
|
|
|
|
|
|
|
|
int days = (int)(questTime / 86400);
|
|
|
|
|
|
|
|
|
|
if (days >= 60)
|
|
|
|
|
return m_fQuestMultiplier60Day;
|
|
|
|
|
if (days >= 30)
|
|
|
|
|
return m_fQuestMultiplier30Day;
|
|
|
|
|
if (days >= 14)
|
|
|
|
|
return m_fQuestMultiplier14Day;
|
|
|
|
|
if (days >= 7)
|
|
|
|
|
return m_fQuestMultiplier7Day;
|
|
|
|
|
if (days >= 3)
|
|
|
|
|
return m_fQuestMultiplier3Day;
|
|
|
|
|
if (days >= 1)
|
|
|
|
|
return m_fQuestMultiplier1Day;
|
|
|
|
|
|
|
|
|
|
return m_fQuestMultiplierLessThan1Day;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CPhatACServerConfig::UseMultiplierForQuestTime(int questTime)
|
|
|
|
|
{
|
|
|
|
|
return (int)(questTime * GetMultiplierForQuestTime(questTime));
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-29 00:15:00 -07:00
|
|
|
double CPhatACServerConfig::GetKillXPMultiplier()
|
|
|
|
|
{
|
|
|
|
|
return m_fKillXPMultiplier;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double CPhatACServerConfig::GetRewardXPMultiplier()
|
|
|
|
|
{
|
|
|
|
|
return m_fRewardXPMultiplier;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double CPhatACServerConfig::GetLumXPMultiplier()
|
|
|
|
|
{
|
|
|
|
|
return m_fLumXPMultiplier;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetGlobalXpMultiplier(double mult)
|
|
|
|
|
{
|
|
|
|
|
SetKillXpMulitplier(mult);
|
|
|
|
|
SetRewardXpMultiplier(mult);
|
|
|
|
|
SetLumXpMultiplier(mult);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetKillXpMulitplier(double mult)
|
|
|
|
|
{
|
|
|
|
|
m_fKillXPMultiplier = mult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPhatACServerConfig::SetRewardXpMultiplier(double mult)
|
2018-03-29 17:01:57 -04:00
|
|
|
{
|
2020-04-29 00:15:00 -07:00
|
|
|
m_fRewardXPMultiplier = mult;
|
2018-03-29 17:01:57 -04:00
|
|
|
}
|
|
|
|
|
|
2020-04-29 00:15:00 -07:00
|
|
|
void CPhatACServerConfig::SetLumXpMultiplier(double mult)
|
2018-03-29 17:01:57 -04:00
|
|
|
{
|
2020-04-29 00:15:00 -07:00
|
|
|
m_fLumXPMultiplier = mult;
|
2018-03-29 17:01:57 -04:00
|
|
|
}
|