bool LoadConfig(std::string filename) { bool oauthSet = false; //Loads the configuration options from the target file. These are core options //required for the server to operate. FileReader lfr; if (lfr.OpenText(filename.c_str()) != Err_OK) { return false; } static char Delimiter[] = { '=', 13, 10 }; lfr.Delimiter = Delimiter; lfr.CommentStyle = Comment_Semi; while (lfr.FileOpen() == true) { int r = lfr.ReadLine(); if (r > 0) { lfr.SingleBreak("="); char *NameBlock = lfr.BlockToString(0); if (strcmp(NameBlock, "ProtocolVersion") == 0) { g_ProtocolVersion = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "AuthMode") == 0) { g_AuthMode = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "AuthKey") == 0) { strncpy(g_AuthKey, lfr.BlockToString(1), sizeof(g_AuthKey) - 1); } else if (strcmp(NameBlock, "RouterPort") == 0) { g_RouterPort = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "SimulatorAddress") == 0) { strncpy(g_SimulatorAddress, lfr.BlockToString(1), sizeof(g_SimulatorAddress) - 1); } else if (strcmp(NameBlock, "BindAddress") == 0) { strncpy(g_BindAddress, lfr.BlockToString(1), sizeof(g_BindAddress) - 1); } else if (strcmp(NameBlock, "SimulatorPort") == 0) { g_SimulatorPort = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "ThreadSleep") == 0) { g_ThreadSleep = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "ErrorSleep") == 0) { g_ErrorSleep = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "MainSleep") == 0) { g_MainSleep = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "DefX") == 0) { g_Config.DefX = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "DefY") == 0) { g_Config.DefY = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "DefZ") == 0) { g_Config.DefZ = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "DefZone") == 0) { g_Config.DefZone = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "DefRotation") == 0) { g_Config.DefRotation = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "HTTPBaseFolder") == 0) { g_Config.HTTPBaseFolder = lfr.BlockToString(1); } else if (strcmp(NameBlock, "HTTPCARFolder") == 0) { g_Config.HTTPCARFolder = lfr.BlockToString(1); } else if (strcmp(NameBlock, "HTTPListenPort") == 0) { g_HTTPListenPort = lfr.BlockToInt(1); } #ifndef NO_SSL else if(strcmp(NameBlock, "HTTPSListenPort") == 0) { g_HTTPSListenPort = lfr.BlockToInt(1); } else if(strcmp(NameBlock, "SSLCertificate") == 0) { AppendString(g_SSLCertificate, lfr.BlockToStringC(1, 0)); } #endif else if (strcmp(NameBlock, "RebroadcastDelay") == 0) { g_RebroadcastDelay = lfr.BlockToULongC(1); } else if (strcmp(NameBlock, "SceneryAutosaveTime") == 0) { g_SceneryAutosaveTime = lfr.BlockToULongC(1); } else if (strcmp(NameBlock, "ForceUpdateTime") == 0) { g_ForceUpdateTime = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "ItemBindingTypeOverride") == 0) { g_ItemBindingTypeOverride = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "ItemArmorTypeOverride") == 0) { g_ItemArmorTypeOverride = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "ItemWeaponTypeOverride") == 0) { g_ItemWeaponTypeOverride = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "MOTD_Name") == 0) { g_MOTD_Name = lfr.BlockToStringC(1, 0); } else if (strcmp(NameBlock, "MOTD_Channel") == 0) { g_MOTD_Channel = lfr.BlockToStringC(1, 0); } else if (strcmp(NameBlock, "RemoteAuthenticationPassword") == 0) { g_Config.RemoteAuthenticationPassword = lfr.BlockToStringC(1, 0); } else if (strcmp(NameBlock, "ProperSceneryList") == 0) { g_Config.ProperSceneryList = lfr.BlockToIntC(1); } else if (strcmp(NameBlock, "BuybackLimit") == 0) { g_Config.BuybackLimit = lfr.BlockToIntC(1); } else if (strcmp(NameBlock, "Upgrade") == 0) g_Config.Upgrade = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HeartbeatIntervalMS") == 0) g_Config.HeartbeatIntervalMS = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HeartbeatAbortCount") == 0) g_Config.HeartbeatAbortCount = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "WarpMovementBlockTime") == 0) g_Config.WarpMovementBlockTime = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "IdleCheckVerification") == 0) g_Config.IdleCheckVerification = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "IdleCheckFrequency") == 0) g_Config.IdleCheckFrequency = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "IdleCheckDistance") == 0) g_Config.IdleCheckDistance = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "IdleCheckCast") == 0) g_Config.IdleCheckCast = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "IdleCheckCastInterval") == 0) g_Config.IdleCheckCastInterval = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "IdleCheckDistanceTolerance") == 0) g_Config.IdleCheckDistanceTolerance = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "EnvironmentCycle") == 0) g_Config.EnvironmentCycle = lfr.BlockToString(1); else if (strcmp(NameBlock, "SendLobbyHeartbeat") == 0) g_Config.SendLobbyHeartbeat = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "CapExperienceLevel") == 0) g_Config.CapExperienceLevel = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "CapExperienceAmount") == 0) g_Config.CapExperienceAmount = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "CustomAbilityMechanics") == 0) g_Config.CustomAbilityMechanics = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "DebugPingServer") == 0) g_Config.DebugPingServer = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "DebugPingClient") == 0) g_Config.DebugPingClient = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "DebugPingFrequency") == 0) g_Config.DebugPingFrequency = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "DebugPingClientPollInterval") == 0) g_Config.DebugPingClientPollInterval = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "DebugPingServerLogThreshold") == 0) g_Config.DebugPingServerLogThreshold = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HTTPDeleteConnectedTime") == 0) g_Config.HTTPDeleteConnectedTime = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HTTPDeleteDisconnectedTime") == 0) g_Config.HTTPDeleteDisconnectedTime = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HTTPDeleteRecheckDelay") == 0) g_Config.HTTPDeleteRecheckDelay = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "PartyPositionSendInterval") == 0) g_Config.PartyPositionSendInterval = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "VaultDefaultSize") == 0) g_Config.VaultDefaultSize = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "VaultInitialPurchaseSize") == 0) g_Config.VaultInitialPurchaseSize = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "DebugPacketSendTrigger") == 0) g_Config.DebugPacketSendTrigger = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "DebugPacketSendDelay") == 0) g_Config.DebugPacketSendDelay = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "DebugPacketSendMessage") == 0) g_Config.DebugPacketSendMessage = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "GlobalMovementBonus") == 0) g_Config.GlobalMovementBonus = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "AllowEliteMob") == 0) g_Config.AllowEliteMob = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "DexBlockDivisor") == 0) g_Config.DexBlockDivisor = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "DexParryDivisor") == 0) g_Config.DexParryDivisor = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "DexDodgeDivisor") == 0) g_Config.DexDodgeDivisor = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "SpiResistDivisor") == 0) g_Config.SpiResistDivisor = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "PsyResistDivisor") == 0) g_Config.PsyResistDivisor = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "ForceMaxPacketSize") == 0) g_Config.ForceMaxPacketSize = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "SceneryAuditDelay") == 0) g_Config.SceneryAuditDelay = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "SceneryAuditAllow") == 0) g_Config.SceneryAuditAllow = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "MegaLootParty") == 0) g_Config.MegaLootParty = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "LootMaxRandomizedLevel") == 0) g_Config.LootMaxRandomizedLevel = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "LootMaxRandomizedSpecialLevel") == 0) g_Config.LootMaxRandomizedSpecialLevel = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "LootNamedMobSpecial") == 0) g_Config.LootNamedMobSpecial = lfr.BlockToBoolC(1); else if (strcmp(NameBlock, "LootMinimumMobRaritySpecial") == 0) g_Config.LootMinimumMobRaritySpecial = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HeroismQuestLevelTolerance") == 0) g_Config.HeroismQuestLevelTolerance = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "HeroismQuestLevelPenalty") == 0) g_Config.HeroismQuestLevelPenalty = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "NamedMobDropMultiplier") == 0) g_Config.NamedMobDropMultiplier = static_cast<float>(lfr.BlockToDblC(1)); else if (strcmp(NameBlock, "NamedMobCreditDrops") == 0) g_Config.NamedMobCreditDrops = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "ProgressiveDropRateBonusMult") == 0) Util::AssignFloatArrayFromStringSplit( g_Config.ProgressiveDropRateBonusMult, COUNT_ARRAY_ELEMENTS( g_Config.ProgressiveDropRateBonusMult), lfr.BlockToStringC(1, 0)); else if (strcmp(NameBlock, "ProgressiveDropRateBonusMultMax") == 0) g_Config.ProgressiveDropRateBonusMultMax = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "DropRateBonusMultMax") == 0) g_Config.DropRateBonusMultMax = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "UseIntegerHealth") == 0) { g_Config.UseIntegerHealth = lfr.BlockToBool(1); StatManager::SetHealthToInteger(g_Config.UseIntegerHealth); } else if (strcmp(NameBlock, "UseMessageBox") == 0) g_Config.UseMessageBox = lfr.BlockToBool(1); else if (strcmp(NameBlock, "UseStopSwim") == 0) g_Config.UseStopSwim = lfr.BlockToBool(1); else if (strcmp(NameBlock, "UseWeather") == 0) g_Config.UseWeather = lfr.BlockToBool(1); else if (strcmp(NameBlock, "UseReagents") == 0) g_Config.UseReagents = lfr.BlockToBool(1); else if (strcmp(NameBlock, "UseUserAgentProtection") == 0) g_Config.UseUserAgentProtection = lfr.BlockToBool(1); else if (strcmp(NameBlock, "InvalidLoginMessage") == 0) g_Config.InvalidLoginMessage = lfr.BlockToStringC(1, 0); else if(strcmp(NameBlock, "MaintenanceMessage") == 0) g_Config.MaintenanceMessage = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "GitHubToken") == 0) g_Config.GitHubToken = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "ServiceAuthURL") == 0) g_Config.ServiceAuthURL = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "VerifyMovement") == 0) g_Config.VerifyMovement = lfr.BlockToBool(1); else if (strcmp(NameBlock, "DebugLogAIScriptUse") == 0) g_Config.DebugLogAIScriptUse = lfr.BlockToBool(1); else if (strcmp(NameBlock, "SquirrelGCCallCount") == 0) g_Config.SquirrelGCCallCount = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "SquirrelGCDelay") == 0) g_Config.SquirrelGCDelay = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "SquirrelGCMaxDelay") == 0) g_Config.SquirrelGCMaxDelay = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "SquirrelVMStackSize") == 0) g_Config.SquirrelVMStackSize = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "SquirrelQueueSpeed") == 0) g_Config.SquirrelQueueSpeed = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "PersistentBuffs") == 0) g_Config.PersistentBuffs = lfr.BlockToBool(1); else if (strcmp(NameBlock, "FallDamage") == 0) g_Config.FallDamage = lfr.BlockToBool(1); else if (strcmp(NameBlock, "PartyLoot") == 0) g_Config.PartyLoot = lfr.BlockToBool(1); else if (strcmp(NameBlock, "AccountCredits") == 0) g_Config.AccountCredits = lfr.BlockToBool(1); else if (strcmp(NameBlock, "MinPVPPlayerLootItems") == 0) g_Config.MinPVPPlayerLootItems = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "MaxPVPPlayerLootItems") == 0) g_Config.MaxPVPPlayerLootItems = lfr.BlockToIntC(1); else if (strcmp(NameBlock, "NameChangeCost") == 0) g_Config.NameChangeCost = lfr.BlockToInt(1); else if (strcmp(NameBlock, "SSLVerifyPeer") == 0) g_Config.SSLVerifyPeer = lfr.BlockToBool(1); else if (strcmp(NameBlock, "SSLVerifyHostname") == 0) g_Config.SSLVerifyHostname = lfr.BlockToBool(1); else if (strcmp(NameBlock, "SMTPHost") == 0) g_Config.SMTPHost = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "SMTPUsername") == 0) g_Config.SMTPUsername = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "SMTPPassword") == 0) g_Config.SMTPPassword = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "SMTPPort") == 0) g_Config.SMTPPort = lfr.BlockToInt(1); else if (strcmp(NameBlock, "SMTPSSL") == 0) g_Config.SMTPSSL = lfr.BlockToBool(1); else if (strcmp(NameBlock, "SMTPSender") == 0) g_Config.SMTPSender = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "LegacyAccounts") == 0) g_Config.LegacyAccounts = lfr.BlockToBool(1); else if (strcmp(NameBlock, "PublicAPI") == 0) g_Config.PublicAPI = lfr.BlockToBool(1); else if (strcmp(NameBlock, "DirectoryListing") == 0) g_Config.DirectoryListing = lfr.BlockToBool(1); else if (strcmp(NameBlock, "HTTPKeepAlive") == 0) g_Config.HTTPKeepAlive = lfr.BlockToBool(1); else if (strcmp(NameBlock, "HTTPServeAssets") == 0) g_Config.HTTPServeAssets = lfr.BlockToBool(1); else if (strcmp(NameBlock, "LegacyServer") == 0) g_Config.LegacyServer = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "SiteServiceUsername") == 0) g_Config.SiteServiceUsername = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "SiteServicePassword") == 0) g_Config.SiteServicePassword = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "APIAuthentication") == 0) g_Config.APIAuthentication = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "OAuth2Client") == 0) { if(!oauthSet) { oauthSet = true; g_Config.OAuth2Clients.clear(); } STRINGLIST output; Util::Split(lfr.BlockToString(1), "|", output); if (output.size() == 3) { OAuth2Client *c = new OAuth2Client(); c->ClientId = output[0]; c->ClientSecret = output[1]; c->RedirectURL = output[2]; g_Config.OAuth2Clients.push_back(c); } else { g_Logs.data->error("Invalid OAuth2Client string [%v] in config file [%v]", lfr.BlockToString(0), filename); } } else if (strcmp(NameBlock, "Clans") == 0) g_Config.Clans = lfr.BlockToBool(1); else if (strcmp(NameBlock, "ClanCost") == 0) g_Config.ClanCost = lfr.BlockToInt(1); else if (strcmp(NameBlock, "MaxAuctionHours") == 0) g_Config.MaxAuctionHours = lfr.BlockToInt(1); else if (strcmp(NameBlock, "MinAuctionHours") == 0) g_Config.MinAuctionHours = lfr.BlockToInt(1); else if (strcmp(NameBlock, "MinAuctionHours") == 0) g_Config.PercentageCommisionPerHour = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "MaxAuctionExpiredHours") == 0) g_Config.MaxAuctionExpiredHours = lfr.BlockToInt(1); else if (strcmp(NameBlock, "ShutdownHandlerScript") == 0) g_Config.ShutdownHandlerScript = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "MaxNewCreditShopItemDays") == 0) g_Config.MaxNewCreditShopItemDays = lfr.BlockToFloatC(1); else if (strcmp(NameBlock, "StaticDataPath") == 0) g_Config.StaticDataPath = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "VariableDataPath") == 0) g_Config.VariableDataPath = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "TmpDataPath") == 0) g_Config.TmpDataPath = lfr.BlockToStringC(1, 0); else if (strcmp(NameBlock, "LogPath") == 0) g_Config.LogPath = lfr.BlockToStringC(1, 0); else { g_Logs.data->error("Unknown identifier [%v] in config file [%v]", lfr.BlockToString(0), filename); } } } lfr.CloseCurrent(); return true; }
bool InfoManager::Init() { TextFileEntityReader ter(Platform::JoinPath(Platform::JoinPath(g_Config.ResolveStaticDataPath(), "Data"), "Tips.txt" ), Case_None, Comment_Semi); ter.Start(); if (!ter.Exists()) return false; ter.Key("", "", true); ter.Index("ENTRY"); STRINGLIST sections = ter.Sections(); int i = 0; for (auto a = sections.begin(); a != sections.end(); ++a) { ter.PushSection(*a); Tip t; t.mID = ++i; if (!t.EntityKeys(&ter) || !t.ReadEntity(&ter)) return false; mTips.push_back(t); ter.PopSection(); } ter.End(); std::string filename = Platform::JoinPath(Platform::JoinPath(g_Config.ResolveStaticDataPath(), "Data"), "Game.txt" ); FileReader lfr; if (lfr.OpenText(filename.c_str()) != Err_OK) { g_Logs.data->error("Could not open configuration file: %v", filename); return false; } else { static char Delimiter[] = { '=', 13, 10 }; lfr.Delimiter = Delimiter; lfr.CommentStyle = Comment_Semi; while (lfr.FileOpen() == true) { int r = lfr.ReadLine(); if (r > 0) { lfr.SingleBreak("="); char *NameBlock = lfr.BlockToString(0); if (strcmp(NameBlock, "GameName") == 0) { mGameName = lfr.BlockToStringC(1, 0); } else if (strcmp(NameBlock, "Edition") == 0) { mEdition = lfr.BlockToStringC(1, 0); } else if (strcmp(NameBlock, "StartZone") == 0) { mStartZone = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "StartX") == 0) { mStartX = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "StartY") == 0) { mStartY = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "StartZ") == 0) { mStartZ = lfr.BlockToInt(1); } else if (strcmp(NameBlock, "StartRotation") == 0) { mStartRotation = lfr.BlockToInt(1); } else { g_Logs.data->error("Unknown identifier [%v] in config file [%v]", lfr.BlockToString(0), filename); } } } lfr.CloseCurrent(); } return true; }