From d670871a4faf9f933255a19c7bf52bf3d2d804e7 Mon Sep 17 00:00:00 2001 From: Lucca Faria Ferri Date: Mon, 6 Feb 2023 04:08:12 -0800 Subject: [PATCH] Changed config files to their own name; DrinkHealthPotion.cs configurable; Cleanup --- src/DiIiS-NA/Core/Config/Config.cs | 29 +++++--- src/DiIiS-NA/Core/Config/ConfigManager.cs | 16 ++-- src/DiIiS-NA/Core/Logging/LogConfig.cs | 42 +++++------ .../CommandManager/CommandManager.cs | 6 +- .../CommandManager/CommandsConfig.cs | 20 +++++ .../D3-GameServer/CommandManager/Config.cs | 17 ----- .../ActorSystem/Implementations/Boss.cs | 6 +- .../GSSystem/ActorSystem/Monster.cs | 8 +- .../GSSystem/GameSystem/GSBackend.cs | 4 +- .../GSSystem/GameSystem/QuestManager.cs | 73 +++++++++++-------- .../GeneratorsSystem/WorldGenerator.cs | 4 +- .../GSSystem/ItemsSystem/ItemGenerator.cs | 8 +- .../GSSystem/ItemsSystem/LootManager.cs | 8 +- .../D3-GameServer/GSSystem/MapSystem/World.cs | 2 +- .../GSSystem/PlayerSystem/Player.cs | 2 +- .../General/DrinkHealthPotion.cs | 11 +-- .../PowerSystem/Payloads/DeathPayload.cs | 6 +- .../GSSystem/PowerSystem/Skill.cs | 32 +++----- .../{Config.cs => GameServerConfig.cs} | 23 +++++- src/DiIiS-NA/Program.cs | 4 +- 20 files changed, 171 insertions(+), 150 deletions(-) create mode 100644 src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs delete mode 100644 src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs rename src/DiIiS-NA/D3-GameServer/{Config.cs => GameServerConfig.cs} (84%) diff --git a/src/DiIiS-NA/Core/Config/Config.cs b/src/DiIiS-NA/Core/Config/Config.cs index 0da4eb5..27629b0 100644 --- a/src/DiIiS-NA/Core/Config/Config.cs +++ b/src/DiIiS-NA/Core/Config/Config.cs @@ -1,15 +1,22 @@ //Blizzless Project 2022 + +using System; +using DiIiS_NA.Core.Logging; using Nini.Config; namespace DiIiS_NA.Core.Config { public class Config { + private readonly Logger _logger; + private readonly string _sectionName; private readonly IConfig _section; - public Config(string sectionName) + protected Config(string sectionName) { - this._section = ConfigurationManager.Section(sectionName) ?? ConfigurationManager.AddSection(sectionName); + _sectionName = sectionName; + _logger = LogManager.CreateLogger($"{GetType().Name}:{sectionName}"); + _section = ConfigurationManager.Section(sectionName) ?? ConfigurationManager.AddSection(sectionName); } public void Save() @@ -17,14 +24,14 @@ namespace DiIiS_NA.Core.Config ConfigurationManager.Save(); } - protected bool GetBoolean(string key, bool defaultValue) { return this._section.GetBoolean(key, defaultValue); } - protected double GetDouble(string key, double defaultValue) { return this._section.GetDouble(key, defaultValue); } - protected float GetFloat(string key, float defaultValue) { return this._section.GetFloat(key, defaultValue); } - protected int GetInt(string key, int defaultValue) { return this._section.GetInt(key, defaultValue); } - protected int GetInt(string key, int defaultValue, bool fromAlias) { return this._section.GetInt(key, defaultValue, fromAlias); } - protected long GetLong(string key, long defaultValue) { return this._section.GetLong(key, defaultValue); } - protected string GetString(string key, string defaultValue) { return this._section.Get(key, defaultValue); } - protected string[] GetEntryKeys() { return this._section.GetKeys(); } - protected void Set(string key, object value) { this._section.Set(key, value); } + protected bool GetBoolean(string key, bool defaultValue) => _section.GetBoolean(key, defaultValue); + protected double GetDouble(string key, double defaultValue) => _section.GetDouble(key, defaultValue); + protected float GetFloat(string key, float defaultValue) => _section.GetFloat(key, defaultValue); + protected int GetInt(string key, int defaultValue) => _section.GetInt(key, defaultValue); + protected int GetInt(string key, int defaultValue, bool fromAlias) => _section.GetInt(key, defaultValue, fromAlias); + protected long GetLong(string key, long defaultValue) => _section.GetLong(key, defaultValue); + protected string GetString(string key, string defaultValue) { return _section.Get(key, defaultValue); } + protected string[] GetEntryKeys() { return _section.GetKeys(); } + protected void Set(string key, object value) { _section.Set(key, value); } } } diff --git a/src/DiIiS-NA/Core/Config/ConfigManager.cs b/src/DiIiS-NA/Core/Config/ConfigManager.cs index 3200be2..69a449a 100644 --- a/src/DiIiS-NA/Core/Config/ConfigManager.cs +++ b/src/DiIiS-NA/Core/Config/ConfigManager.cs @@ -17,7 +17,7 @@ namespace DiIiS_NA.Core.Config { try { - ConfigFile = string.Format("{0}/{1}", FileHelpers.AssemblyRoot, "config.ini"); // the config file's location. + ConfigFile = $"{FileHelpers.AssemblyRoot}/{"config.ini"}"; // the config file's location. Parser = new IniConfigSource(ConfigFile); // see if the file exists by trying to parse it. _fileExists = true; } @@ -30,28 +30,28 @@ namespace DiIiS_NA.Core.Config finally { // adds aliases so we can use On and Off directives in ini files. - Parser.Alias.AddAlias("On", true); - Parser.Alias.AddAlias("Off", false); + Parser!.Alias.AddAlias("On", true); + Parser!.Alias.AddAlias("Off", false); // logger level aliases. - Parser.Alias.AddAlias("MinimumLevel", Logger.Level.Trace); - Parser.Alias.AddAlias("MaximumLevel", Logger.Level.Trace); + Parser!.Alias.AddAlias("MinimumLevel", Logger.Level.Trace); + Parser!.Alias.AddAlias("MaximumLevel", Logger.Level.Trace); } Parser.ExpandKeyValues(); } - static internal IConfig Section(string section) // Returns the asked config section. + internal static IConfig Section(string section) // Returns the asked config section. { return Parser.Configs[section]; } - static internal IConfig AddSection(string section) // Adds a config section. + internal static IConfig AddSection(string section) // Adds a config section. { return Parser.AddConfig(section); } - static internal void Save() // Saves the settings. + internal static void Save() // Saves the settings. { if (_fileExists) Parser.Save(); else diff --git a/src/DiIiS-NA/Core/Logging/LogConfig.cs b/src/DiIiS-NA/Core/Logging/LogConfig.cs index 51c2345..c74884c 100644 --- a/src/DiIiS-NA/Core/Logging/LogConfig.cs +++ b/src/DiIiS-NA/Core/Logging/LogConfig.cs @@ -5,11 +5,11 @@ namespace DiIiS_NA.Core.Logging { public string LoggingRoot { - get { return this.GetString("Root", @"logs"); } - set { this.Set("Root", value); } + get => GetString("Root", @"logs"); + set => Set("Root", value); } - public LogTargetConfig[] Targets = new[] + public LogTargetConfig[] Targets { get; } = new[] { new LogTargetConfig("ConsoleLog"), new LogTargetConfig("AnsiLog"), @@ -20,57 +20,55 @@ namespace DiIiS_NA.Core.Logging }; private LogConfig() : - base("Logging") + base(nameof(Logging)) { } - public static LogConfig Instance { get { return _instance; } } - private static readonly LogConfig _instance = new LogConfig(); + public static LogConfig Instance = new(); } public class LogTargetConfig : Config.Config { public bool Enabled { - get { return this.GetBoolean("Enabled", true); } - set { this.Set("Enabled", value); } + get => GetBoolean(nameof(Enabled), true); + set => Set(nameof(Enabled), value); } public string Target { - get { return this.GetString("Target", "Console"); } - set { this.GetString("Target", value); } + get => GetString(nameof(Target), "Console"); + set => GetString(nameof(Target), value); } public bool IncludeTimeStamps { - get { return this.GetBoolean("IncludeTimeStamps", false); } - set { this.Set("IncludeTimeStamps", value); } + get => GetBoolean(nameof(IncludeTimeStamps), false); + set => Set(nameof(IncludeTimeStamps), value); } public string FileName { - get { return this.GetString("FileName", ""); } - set { this.GetString("FileName", value); } + get => GetString(nameof(FileName), ""); + set => GetString(nameof(FileName), value); } public Logger.Level MinimumLevel { - get { return (Logger.Level)(this.GetInt("MinimumLevel", (int)Logger.Level.Info, true)); } - set { this.Set("MinimumLevel", (int)value); } + get => (Logger.Level)(GetInt(nameof(MinimumLevel), (int)Logger.Level.Info, true)); + set => Set(nameof(MinimumLevel), (int)value); } public Logger.Level MaximumLevel { - get { return (Logger.Level)(this.GetInt("MaximumLevel", (int)Logger.Level.Fatal, true)); } - set { this.Set("MaximumLevel", (int)value); } + get => (Logger.Level)(GetInt(nameof(MaximumLevel), (int)Logger.Level.Fatal, true)); + set => Set(nameof(MaximumLevel), (int)value); } public bool ResetOnStartup { - get { return this.GetBoolean("ResetOnStartup", false); } - set { this.Set("ResetOnStartup", value); } + get => GetBoolean(nameof(ResetOnStartup), false); + set => Set(nameof(ResetOnStartup), value); } - public LogTargetConfig(string loggerName) - : base(loggerName) { } + public LogTargetConfig(string loggerName) : base(loggerName) { } } } diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs index dfef9d8..ea31479 100644 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs @@ -133,7 +133,7 @@ namespace DiIiS_NA.GameServer.CommandManager if (line == string.Empty) return false; - if (line[0] != Config.Instance.CommandPrefix) // if line does not start with command-prefix + if (line[0] != CommandsConfig.Instance.CommandPrefix) // if line does not start with command-prefix return false; line = line.Substring(1); // advance to actual command. @@ -153,9 +153,9 @@ namespace DiIiS_NA.GameServer.CommandManager output = invokerClient != null ? CommandGroups.Where(pair => pair.Key.MinUserLevel > invokerClient?.Account.UserLevel) - .Aggregate(output, (current, pair) => current + ($"{Config.Instance.CommandPrefix}{pair.Key.Name}: {pair.Key.Help}\n\n")) + .Aggregate(output, (current, pair) => current + ($"{CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}: {pair.Key.Help}\n\n")) : CommandGroups - .Aggregate(output, (current, pair) => current + (($"$[underline green]${Config.Instance.CommandPrefix}{pair.Key.Name}$[/]$: {pair.Key.Help}\n\n"))); + .Aggregate(output, (current, pair) => current + (($"$[underline green]${CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}$[/]$: {pair.Key.Help}\n\n"))); return output + "Type 'help ' to get help about a specific command."; } diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs new file mode 100644 index 0000000..16ab2f3 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DiIiS_NA.GameServer.CommandManager +{ + public sealed class CommandsConfig : DiIiS_NA.Core.Config.Config + { + public char CommandPrefix + { + get => GetString(nameof(CommandPrefix), "!")[0]; + set => Set(nameof(CommandPrefix), value); + } + + public static CommandsConfig Instance = new(); + private CommandsConfig() : base("Commands") { } + } +} diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs deleted file mode 100644 index 734170b..0000000 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DiIiS_NA.GameServer.CommandManager -{ - public sealed class Config : DiIiS_NA.Core.Config.Config - { - public char CommandPrefix { get { return GetString("CommandPrefix", "!")[0]; } set { Set("CommandPrefix", value); } } - - private static readonly Config _instance = new Config(); - public static Config Instance { get { return _instance; } } - private Config() : base("Commands") { } - } -} diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs index fe4ea7b..5f4f012 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs @@ -78,9 +78,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations //this.Attributes[GameAttribute.Immune_To_Charm] = true; Attributes[GameAttribute.using_Bossbar] = true; Attributes[GameAttribute.InBossEncounter] = true; - Attributes[GameAttribute.Hitpoints_Max] *= Config.Instance.BossHealthMultiplier; - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= Config.Instance.BossDamageMultiplier; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= Config.Instance.BossDamageMultiplier; + Attributes[GameAttribute.Hitpoints_Max] *= GameServerConfig.Instance.BossHealthMultiplier; + Attributes[GameAttribute.Damage_Weapon_Min, 0] *= GameServerConfig.Instance.BossDamageMultiplier; + Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= GameServerConfig.Instance.BossDamageMultiplier; Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; Attributes[GameAttribute.TeamID] = 10; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs index 928e8ec..7a4a29f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs @@ -97,26 +97,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem Attributes[GameAttribute.Hitpoints_Max] = (int)((int)monsterLevels.MonsterLevel[monsterLevel].HPMin + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, (int)monsterLevels.MonsterLevel[monsterLevel].HPDelta) * HpMultiplier * World.Game.HpModifier); Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = ((int)World.Game.ConnectedPlayers.Length + 1) * 1.5f; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] *= Config.Instance.RateMonsterHP; + Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] *= GameServerConfig.Instance.RateMonsterHP; if (World.Game.ConnectedPlayers.Length > 1) Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative];// / 2f; var hpMax = Attributes[GameAttribute.Hitpoints_Max]; var hpTotal = Attributes[GameAttribute.Hitpoints_Max_Total]; float damageMin = monsterLevels.MonsterLevel[World.Game.MonsterLevel].Dmg * DmgMultiplier;// * 0.5f; float damageDelta = damageMin; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * Config.Instance.RateMonsterDMG; + Attributes[GameAttribute.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * GameServerConfig.Instance.RateMonsterDMG; Attributes[GameAttribute.Damage_Weapon_Delta, 0] = damageDelta; if (monsterLevel > 30) { Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative];// * 0.5f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * Config.Instance.RateMonsterDMG;// * 0.2f; + Attributes[GameAttribute.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * GameServerConfig.Instance.RateMonsterDMG;// * 0.2f; Attributes[GameAttribute.Damage_Weapon_Delta, 0] = damageDelta; } if (monsterLevel > 60) { Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative];// * 0.7f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * Config.Instance.RateMonsterDMG;// * 0.15f; + Attributes[GameAttribute.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * GameServerConfig.Instance.RateMonsterDMG;// * 0.15f; //this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = DamageDelta * 0.5f; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs index da4778e..de09d86 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs @@ -71,8 +71,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { Logger.Info("GameServer connected to BattleNet."); System.Threading.Thread.Sleep(3000); - string backEndIp = Config.Instance.BindIP; - int backEndPort = Config.Instance.Port; + string backEndIp = GameServerConfig.Instance.BindIP; + int backEndPort = GameServerConfig.Instance.Port; bool pvp = false; if (!pvp) RegisterGameServer(backEndIp, backEndPort); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs index e74c778..39a3f9f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs @@ -194,13 +194,16 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem if (!Game.Empty) { SaveQuestProgress(true); - Logger.Trace($"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, completed $[underline white]${Quests[Game.CurrentQuest].Completed}$[/]$"); - Game.BroadcastPlayers((client, player) => + Logger.Trace( + $"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, completed $[underline white]${Quests[Game.CurrentQuest].Completed}$[/]$"); + Game.BroadcastPlayers((client, player) => { if (Game.CurrentQuest == 312429) return; // open world quest - - int xpReward = (int)(Quests[Game.CurrentQuest].RewardXp * Game.XpModifier); - int goldReward = (int)(Quests[Game.CurrentQuest].RewardGold * Game.GoldModifier); + + int xpReward = (int)(Quests[Game.CurrentQuest].RewardXp * + Game.XpModifier); + int goldReward = (int)(Quests[Game.CurrentQuest].RewardGold * + Game.GoldModifier); player.InGameClient.SendMessage(new QuestStepCompleteMessage() { QuestStepComplete = QuestStepComplete.CreateBuilder() @@ -213,28 +216,34 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem .SetIsQuestComplete(true) .Build() }); - player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage() - { - Place = new WorldPlace() - { - Position = player.Position, - WorldID = player.World.DynamicID(player), - }, + player.InGameClient.SendMessage( + new GameServer.MessageSystem.Message.Definitions.Base. + FloatingAmountMessage() + { + Place = new WorldPlace() + { + Position = player.Position, + WorldID = player.World.DynamicID(player), + }, - Amount = xpReward, - Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Experience, - }); - player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage() - { - Place = new WorldPlace() - { - Position = player.Position, - WorldID = player.World.DynamicID(player), - }, + Amount = xpReward, + Type = GameServer.MessageSystem.Message.Definitions.Base + .FloatingAmountMessage.FloatType.Experience, + }); + player.InGameClient.SendMessage( + new GameServer.MessageSystem.Message.Definitions.Base. + FloatingAmountMessage() + { + Place = new WorldPlace() + { + Position = player.Position, + WorldID = player.World.DynamicID(player), + }, - Amount = goldReward, - Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold, - }); + Amount = goldReward, + Type = GameServer.MessageSystem.Message.Definitions.Base + .FloatingAmountMessage.FloatType.Gold, + }); player.UpdateExp(xpReward); player.Inventory.AddGoldAmount(goldReward); player.AddAchievementCounter(74987243307173, (uint)goldReward); @@ -253,21 +262,25 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem { Logger.WarnException(e, "Advance() exception caught:"); } + //Пока только для одного квеста - // if (this.Game.CurrentQuest != 72221) - // if (this.Game.CurrentStep != -1) - Advance(); + // if (this.Game.CurrentQuest != 72221) + // if (this.Game.CurrentStep != -1) + Advance(); } if (!Game.Empty) { RevealQuestProgress(); - if ((Game.CurrentActEnum != ActEnum.OpenWorld && Config.Instance.AutoSaveQuests) || Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Saveable) + if ((Game.CurrentActEnum != ActEnum.OpenWorld && GameServerConfig.Instance.AutoSaveQuests) || + Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Saveable) SaveQuestProgress(false); } + OnQuestProgress(); AutoSetQuestMarker(); - Logger.Trace($"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, step $[underline white]${Game.CurrentStep}$[/]$"); + Logger.Trace( + $"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, step $[underline white]${Game.CurrentStep}$[/]$"); } public void SideAdvance() diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs index 695a639..4616d93 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs @@ -104,11 +104,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem //445736 - p4_forest_snow_icecave_01 if (world.worldData.DynamicWorld && !worldSNO.IsNotDynamicWorld()) //Gardens of Hope - 2 lvl is NOT random { - if (!Config.Instance.DRLGemu) + if (!GameServerConfig.Instance.DRLGemu) Logger.Warn("DRLG-Emu is Disabled."); string DRLGVersion = "1.8"; var WorldContainer = DBSessions.WorldSession.Query().Where(dbt => dbt.WorldSNO == (int)worldSNO).ToList(); - if (WorldContainer.Count > 0 && worldSNO != WorldSno.a1trdun_level05_templar && Config.Instance.DRLGemu) + if (WorldContainer.Count > 0 && worldSNO != WorldSno.a1trdun_level05_templar && GameServerConfig.Instance.DRLGemu) { DRLGEmuActive = true; Logger.Warn("World - {0} [{1}] is dynamic! Found container, DRLG-Emu v{2} Activated!", worldAsset.Name, worldAsset.SNOId, DRLGVersion); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs index 3d06539..bb47942 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs @@ -1353,15 +1353,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem /// /// Randomly sets unidentified flag on item. - /// If the item is unique, legendary, special or set, it will have % chance to be unidentified. - /// Otherwise, it will have % chance to be unidentified. + /// If the item is unique, legendary, special or set, it will have % chance to be unidentified. + /// Otherwise, it will have % chance to be unidentified. /// /// The item to set the flag private static void RandomSetUnidentified(Item item) => item.Unidentified = FastRandom.Instance.Chance(item.Name.Contains("unique", StringComparison.InvariantCultureIgnoreCase) || item.ItemDefinition.Quality is ItemTable.ItemQuality.Legendary or ItemTable.ItemQuality.Special or ItemTable.ItemQuality.Set - ? Config.Instance.ChanceHighQualityUnidentified - : Config.Instance.ChanceNormalUnidentified); + ? GameServerConfig.Instance.ChanceHighQualityUnidentified + : GameServerConfig.Instance.ChanceNormalUnidentified); // Allows cooking a custom item. public static Item Cook(Player player, string name) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs index c5a1fb8..30ddf39 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs @@ -613,16 +613,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem switch (MonsterQuality) { case 0: //Normal - return new List { 0.18f * Config.Instance.RateChangeDrop }; + return new List { 0.18f * GameServerConfig.Instance.RateChangeDrop }; case 1: //Champion - return new List { 1f, 1f, 1f, 1f, 0.75f * Config.Instance.RateChangeDrop }; + return new List { 1f, 1f, 1f, 1f, 0.75f * GameServerConfig.Instance.RateChangeDrop }; case 2: //Rare (Elite) case 4: //Unique return new List { 1f, 1f, 1f, 1f, 1f }; case 7: //Boss - return new List { 1f, 1f, 1f, 1f, 1f, 0.75f * Config.Instance.RateChangeDrop, 0.4f * Config.Instance.RateChangeDrop }; + return new List { 1f, 1f, 1f, 1f, 1f, 0.75f * GameServerConfig.Instance.RateChangeDrop, 0.4f * GameServerConfig.Instance.RateChangeDrop }; default: - return new List { 0.12f * Config.Instance.RateChangeDrop }; + return new List { 0.12f * GameServerConfig.Instance.RateChangeDrop }; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs index b21ff8c..5ec3e88 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs @@ -934,7 +934,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// The position for drop. public void SpawnGold(Actor source, Player player, int Min = -1) { - int amount = (int)(LootManager.GetGoldAmount(player.Attributes[GameAttribute.Level]) * Game.GoldModifier * Config.Instance.RateMoney); + int amount = (int)(LootManager.GetGoldAmount(player.Attributes[GameAttribute.Level]) * Game.GoldModifier * GameServerConfig.Instance.RateMoney); if (Min != -1) amount += Min; var item = ItemGenerator.CreateGold(player, amount); // somehow the actual ammount is not shown on ground /raist. diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs index 9b80b47..2b45c4e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs @@ -2740,7 +2740,7 @@ public class Player : Actor, IMessageConsumer, IUpdateable } } // Reset resurrection charges on zone change - TODO: do not reset charges on reentering the same zone - Attributes[GameAttribute.Corpse_Resurrection_Charges] = Config.Instance.ResurrectionCharges; + Attributes[GameAttribute.Corpse_Resurrection_Charges] = GameServerConfig.Instance.ResurrectionCharges; #if DEBUG Logger.Warn($"Player Location {Toon.Name}, Scene: {CurrentScene.SceneSNO.Name} SNO: {CurrentScene.SceneSNO.Id} LevelArea: {CurrentScene.Specification.SNOLevelAreas[0]}"); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs index 4db143e..28b7709 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.TickerSystem; +using DiIiS_NA.LoginServer; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.General { @@ -10,13 +11,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.General { public override IEnumerable Run() { - if (User is Player player) - { - player.AddPercentageHP(60); - AddBuff(player, player, new CooldownBuff(30211, TickTimer.WaitSeconds(player.World.Game, 30f))); - } - - yield break; + if (User is not Player player) yield break; + player.AddPercentageHP(GameServerConfig.Instance.HealthPotionRestorePercentage); + AddBuff(player, player, new CooldownBuff(30211, TickTimer.WaitSeconds(player.World.Game, GameServerConfig.Instance.HealthPotionCooldown))); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs index 0bde8f6..49ed878 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs @@ -403,7 +403,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { grantedExp = (int)(grantedExp * plr.World.Game.XpModifier); - float tempExp = grantedExp * Config.Instance.RateExp; + float tempExp = grantedExp * GameServerConfig.Instance.RateExp; plr.UpdateExp(Math.Max((int)tempExp, 1)); var a = (int)plr.Attributes[GameAttribute.Experience_Bonus]; @@ -597,7 +597,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads //Nephalem Rift if ((Target.CurrentScene.Specification.SNOLevelAreas[0] is 332339 or 288482) && Target.World.Game.ActiveNephalemTimer && Target.World.Game.ActiveNephalemKilledMobs == false) { - Target.World.Game.ActiveNephalemProgress += Config.Instance.NephalemRiftProgressMultiplier * (Target.Quality + 1); + Target.World.Game.ActiveNephalemProgress += GameServerConfig.Instance.NephalemRiftProgressMultiplier * (Target.Quality + 1); Player master = null; foreach (var plr in Target.World.Game.Players.Values) { @@ -878,7 +878,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads // if seed is less than the drop rate, drop the item if (seed < rate * (1f + plr.Attributes[GameAttribute.Magic_Find]) - * Config.Instance.RateDrop) + * GameServerConfig.Instance.RateDrop) { //Logger.Debug("rate: {0}", rate); var lootQuality = Target.World.Game.IsHardcore diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs index acf785f..c44801c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs @@ -64,7 +64,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem catch (Exception ex) { #if DEBUG - Logger.Error(ex.Message, "GetActionAnimationSNO: Please don't take this error seriously, it's just a workaround for a bug in the game."); + Logger.ErrorException(ex, "GetActionAnimationSNO throws error"); #endif return AnimationSno._NONE; } @@ -78,32 +78,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem } - public virtual float GetActionSpeed() - { - return EvalTag(PowerKeys.AttackSpeed); - } + public virtual float GetActionSpeed() => EvalTag(PowerKeys.AttackSpeed); - public virtual int GetCastEffectSNO() - { - return EvalTag(IsUserFemale ? PowerKeys.CastingEffectGroup_Female : PowerKeys.CastingEffectGroup_Male); - } + public virtual int GetCastEffectSNO() => EvalTag(IsUserFemale ? PowerKeys.CastingEffectGroup_Female : PowerKeys.CastingEffectGroup_Male); - public virtual int GetContactEffectSNO() - { - return EvalTag(IsUserFemale ? PowerKeys.ContactFrameEffectGroup_Female : PowerKeys.ContactFrameEffectGroup_Male); - } + public virtual int GetContactEffectSNO() => EvalTag(IsUserFemale ? PowerKeys.ContactFrameEffectGroup_Female : PowerKeys.ContactFrameEffectGroup_Male); - public virtual float GetContactDelay() - { - return 0f; - } + public virtual float GetContactDelay() => 0f; public float GetCooldown() { - if (EvalTag(PowerKeys.CooldownTime) > 0f) - return EvalTag(PowerKeys.CooldownTime); - else - return 1f; + var tag = EvalTag(PowerKeys.CooldownTime); + return tag > 0f ? tag : 1f; } private void PlayActionAnimation() @@ -112,10 +98,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem var animationSNO = GetActionAnimationSNO(); #region Патч анимаций if(animationSNO == AnimationSno._NONE) - switch (this.User.SNO) + switch (User.SNO) { case ActorSno._x1_skeletonarcher_westmarch_a: //x1_SkeletonArcher_Westmarch_A - if (this.PowerSNO == 30334) + if (PowerSNO == 30334) animationSNO = AnimationSno.x1_skeletonarcher_westmarch_attack_01; break; case ActorSno._p6_necro_skeletonmage_f_archer: //p6_necro_skeletonMage_F_archer diff --git a/src/DiIiS-NA/D3-GameServer/Config.cs b/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs similarity index 84% rename from src/DiIiS-NA/D3-GameServer/Config.cs rename to src/DiIiS-NA/D3-GameServer/GameServerConfig.cs index a1b404e..a6408fc 100644 --- a/src/DiIiS-NA/D3-GameServer/Config.cs +++ b/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace DiIiS_NA.GameServer { - public sealed class Config : DiIiS_NA.Core.Config.Config + public sealed class GameServerConfig : DiIiS_NA.Core.Config.Config { public bool Enabled { @@ -170,9 +170,26 @@ namespace DiIiS_NA.GameServer set => Set(nameof(NephalemRiftProgressMultiplier), value); } - public static Config Instance { get; } = new(); + /// + /// How much a health potion heals in percentage + /// + public float HealthPotionRestorePercentage + { + get => GetFloat(nameof(HealthPotionRestorePercentage), 60f); + set => Set(nameof(HealthPotionRestorePercentage), value); + } + + /// + /// Cooldown (in seconds) to use a health potion again. + /// + public float HealthPotionCooldown + { + get => GetFloat(nameof(HealthPotionCooldown), 30f); + set => Set(nameof(HealthPotionCooldown), value); + } + public static GameServerConfig Instance { get; } = new(); - private Config() : base("Game-Server") + private GameServerConfig() : base("Game-Server") { } } diff --git a/src/DiIiS-NA/Program.cs b/src/DiIiS-NA/Program.cs index d0eb100..2f1b042 100644 --- a/src/DiIiS-NA/Program.cs +++ b/src/DiIiS-NA/Program.cs @@ -62,14 +62,14 @@ namespace DiIiS_NA public static Thread WatchdogThread; public static string LoginServerIp = DiIiS_NA.LoginServer.Config.Instance.BindIP; - public static string GameServerIp = DiIiS_NA.GameServer.Config.Instance.BindIP; + public static string GameServerIp = DiIiS_NA.GameServer.GameServerConfig.Instance.BindIP; public static string RestServerIp = REST.Config.Instance.IP; public static string PublicGameServerIp = DiIiS_NA.GameServer.NATConfig.Instance.PublicIP; public static int Build => 30; public static int Stage => 2; public static TypeBuildEnum TypeBuild => TypeBuildEnum.Beta; - private static bool DiabloCoreEnabled = DiIiS_NA.GameServer.Config.Instance.CoreActive; + private static bool DiabloCoreEnabled = DiIiS_NA.GameServer.GameServerConfig.Instance.CoreActive; static async Task LoginServer() {