diff --git a/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs b/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs index 3349e3c..ff346d3 100644 --- a/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs @@ -77,6 +77,11 @@ namespace DiIiS_NA.Core.Extensions do action(array, walker.Position); while (walker.Step()); } + + public static int FindIndex(this T[] source, Predicate match) + { + return Array.FindIndex(source, match); + } } internal class ArrayTraverse diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs index 9f87e6b..337064f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs @@ -104,11 +104,8 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains int powerToUse = PickPowerToUse(); if (powerToUse > 0) { - var elites = targets.Where(t => t is Champion || t is Rare || t is RareMinion); - if (elites.Count() > 0) - _target = elites.First(); - else - _target = targets.First(); + var elite = targets.FirstOrDefault(t => t is Champion or Rare or RareMinion); + _target = elite ?? targets.First(); PowerScript power = PowerLoader.CreateImplementationForPowerSNO(powerToUse); power.User = Body; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs index 8c2946c..21dacaf 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs @@ -124,11 +124,8 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (targets.Count != 0 && PowerMath.Distance2D(Body.Position, (Body as Minion).Master.Position) < 80f) { - var elites = targets.Where(t => t is Champion || t is Rare || t is RareMinion); - if (elites.Count() > 0) - _target = elites.First(); - else - _target = targets.First(); + var elite = targets.FirstOrDefault(target => target is Champion or Rare or RareMinion); + _target = elite ?? targets.First(); int powerToUse = PickPowerToUse(); if (powerToUse > 0) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs index 75f7941..4099266 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs @@ -26,6 +26,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using DiIiS_NA.Core.MPQ; +using DiIiS_NA.D3_GameServer.GSSystem.GameSystem; using Player = DiIiS_NA.GameServer.GSSystem.PlayerSystem.Player; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs index 0543806..a235aeb 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs @@ -23,6 +23,7 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.GSSystem.GameSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs index 3159d5e..d546d75 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs @@ -33,6 +33,7 @@ using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using System.Diagnostics; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.GSSystem.GameSystem; namespace DiIiS_NA.GameServer.GSSystem.GameSystem { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs index 46ab9d4..e1262d0 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs @@ -1,22 +1,27 @@ using System; -using System.Linq; using System.Collections.Generic; +using System.Linq; +using DiIiS_NA.Core.Extensions; +using DiIiS_NA.Core.Helpers.Hash; +using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.MPQ.FileFormats; +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.GameServer.GSSystem.GameSystem; +using DiIiS_NA.GameServer.GSSystem.ItemsSystem; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.QuestSystem; using DiIiS_NA.GameServer.GSSystem.TickerSystem; -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -using DiIiS_NA.Core.Helpers.Hash; -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.MessageSystem; -using DiIiS_NA.Core.Logging; -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -using DiIiS_NA.Core.Helpers.Math; -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; +using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor; +using Monster = DiIiS_NA.GameServer.GSSystem.ActorSystem.Monster; -namespace DiIiS_NA.GameServer.GSSystem.GameSystem +namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem { public class QuestManager { @@ -72,91 +77,89 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { Bounties.Clear(); - var kill_boss_bounties = ItemGenerator.Bounties.Values - .Where(b => b.BountyData0.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillBoss) - .Where(b => !Bounties.Select(b => b.LevelArea).Contains(b.BountyData0.LeveAreaSNO0)) - .OrderBy(b => FastRandom.Instance.Next()) - .Select(b => new Bounty() + var actToKillBossBounties = ItemGenerator.Bounties.Values + .Where(bounty => bounty.BountyData0.Type == BountyData.BountyType.KillBoss) + .Where(bounty => !Bounties.Select(b => b.LevelArea).Contains(bounty.BountyData0.LeveAreaSNO0)) + .OrderBy(_ => FastRandom.Instance.Next()) + .Select(bounty => { - QuestManager = this, - BountySNOid = b.Header.SNOId, - Act = b.BountyData0.ActData, - Type = b.BountyData0.Type, - LevelArea = b.BountyData0.LeveAreaSNO0, - World = WorldSno.__NONE, - Target = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster).SNOName1.Id, - TargetTaskId = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .ToList() - .FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster), - AdditionalTaskId = 0, - AdditionalTargetCounter = 0, - AdditionalTargetNeed = 0, - LevelAreaChecks = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) - .Select(o => o.SNOName1.Id) - .ToList() - }); - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1).Take(1)); //A1 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2).Take(1)); //A2 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3).Take(1)); //A3 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4).Take(1)); //A4 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5).Take(1)); //A5 + var stepObjectives = bounty.QuestSteps + .SelectMany(s => s.StepObjectiveSets) + .SelectMany(s => s.StepObjectives) + .ToArray(); + var killMonsterObjectiveIndex = stepObjectives + .FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster); + var levelAreaChecks = stepObjectives + .Where(o => o.ObjectiveType == QuestStepObjectiveType.EnterLevelArea) + .Select(o => o.SNOName1.Id) + .ToList(); + + return new Bounty + { + QuestManager = this, + BountySNOid = bounty.Header.SNOId, + Act = bounty.BountyData0.ActData, + Type = bounty.BountyData0.Type, + LevelArea = bounty.BountyData0.LeveAreaSNO0, + World = WorldSno.__NONE, + Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id, + TargetTaskId = killMonsterObjectiveIndex, + AdditionalTaskId = 0, + AdditionalTargetCounter = 0, + AdditionalTargetNeed = 0, + LevelAreaChecks = levelAreaChecks + }; + }) + .ToLookup(bounty => bounty.Act); + + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A1].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A2].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A3].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A4].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A5].Take(1)); - var kill_unique_bounties = ItemGenerator.Bounties.Values - .Where(b => b.BountyData0.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique) - .Where(b => !Bounties.Select(b => b.LevelArea).Contains(b.BountyData0.LeveAreaSNO0)) - .OrderBy(b => FastRandom.Instance.Next()) - .GroupBy(b => b.BountyData0.LeveAreaSNO0)//b.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Single(o => o.ObjectiveType == Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id) - .Select(b => b.First()) - .Select(b => new Bounty() + var actToKillUniqueBounties = ItemGenerator.Bounties.Values + .Where(bounty => bounty.BountyData0.Type == BountyData.BountyType.KillUnique) + .Where(bounty => !Bounties.Select(b => b.LevelArea).Contains(bounty.BountyData0.LeveAreaSNO0)) + .OrderBy(_ => FastRandom.Instance.Next()) + .GroupBy(bounty => bounty.BountyData0.LeveAreaSNO0)//b.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Single(o => o.ObjectiveType == Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id) + .Select(group => group.First()) + .Select(bounty => { - QuestManager = this, - BountySNOid = b.Header.SNOId, - Act = b.BountyData0.ActData, - Type = b.BountyData0.Type, - LevelArea = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id, - World = WorldSno.__NONE, - Target = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster).SNOName1.Id, - TargetTaskId = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .ToList() - .FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster), - AdditionalTaskId = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .ToList() - .FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny), - AdditionalTargetCounter = 0, - AdditionalTargetNeed = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny).CounterTarget, - LevelAreaChecks = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) - .Select(o => o.SNOName1.Id) - .ToList() - }); - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1).Take(4)); //A1 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2).Take(4)); //A2 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3).Take(4)); //A3 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4).Take(4)); //A4 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5).Take(4)); //A5 + var stepObjectives = bounty.QuestSteps + .SelectMany(s => s.StepObjectiveSets) + .SelectMany(s => s.StepObjectives) + .ToArray(); + var killMonsterObjectiveIndex = stepObjectives.FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster); + var killAnyObjectiveIndex = stepObjectives.FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillAny); + var levelAreaChecks = stepObjectives + .Where(o => o.ObjectiveType == QuestStepObjectiveType.EnterLevelArea) + .Select(o => o.SNOName1.Id) + .ToList(); + + return new Bounty + { + QuestManager = this, + BountySNOid = bounty.Header.SNOId, + Act = bounty.BountyData0.ActData, + Type = bounty.BountyData0.Type, + LevelArea = stepObjectives[killAnyObjectiveIndex].SNOName1.Id, + World = WorldSno.__NONE, + Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id, + TargetTaskId = killMonsterObjectiveIndex, + AdditionalTaskId = killAnyObjectiveIndex, + AdditionalTargetCounter = 0, + AdditionalTargetNeed = stepObjectives[killAnyObjectiveIndex].CounterTarget, + LevelAreaChecks = levelAreaChecks + }; + }) + .ToLookup(bounty => bounty.Act); + + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A1].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A2].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A3].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A4].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A5].Take(4)); } /// @@ -210,7 +213,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem //rewardXp = xpReward, //rewardGold = goldReward }); - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.FloatingAmountMessage() + player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage() { Place = new WorldPlace() { @@ -219,9 +222,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }, Amount = xpReward, - Type = MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Experience, + Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Experience, }); - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.FloatingAmountMessage() + player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage() { Place = new WorldPlace() { @@ -230,7 +233,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }, Amount = goldReward, - Type = MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold, + Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold, }); player.UpdateExp(xpReward); player.Inventory.AddGoldAmount(goldReward); @@ -538,7 +541,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { Logger.MethodTrace($"AutoSetQuestMarker() - {Game.QuestProgress.QuestTriggers.Count} triggers found"); var trigger = Game.QuestProgress.QuestTriggers.First(); - if (trigger.Value.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) + if (trigger.Value.triggerType == QuestStepObjectiveType.InteractWithActor) foreach (var world in Game.Worlds) { var actors = world.GetActorsBySNO((ActorSno)trigger.Key).Where(d => d.Visible); @@ -564,7 +567,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }); } - if (trigger.Value.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation) + if (trigger.Value.triggerType == QuestStepObjectiveType.HadConversation) foreach (var world in Game.Worlds) { var actors = world.Actors.Values.Where(d => d.Visible && (d is InteractiveNPC) && (d as InteractiveNPC).Conversations.Any(c => c.ConversationSNO == trigger.Key)); @@ -594,9 +597,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public void SetBountyMarker(Player player) { - foreach (var bounty in Bounties.Where(b => !b.Finished && b.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique)) + foreach (var bounty in Bounties.Where(b => !b.Finished && b.Type == BountyData.BountyType.KillUnique)) { - var unique = player.World.GetActorsBySNO((ActorSno)bounty.Target).Where(u => !u.Dead).FirstOrDefault(); + var unique = player.World.GetActorsBySNO((ActorSno)bounty.Target).FirstOrDefault(u => !u.Dead); if (unique == null) continue; player.InGameClient.SendMessage(new MapMarkerInfoMessage { @@ -711,7 +714,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem return Quests.ContainsKey(snoQuest) && Quests[snoQuest].Completed; } - public bool IsInQuestRange(DiIiS_NA.Core.MPQ.FileFormats.QuestRange range) + public bool IsInQuestRange(QuestRange range) { if (range.Header.SNOId == 312431) return (Game.CurrentAct == 3000); @@ -835,8 +838,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { public QuestManager QuestManager { get; set; } public int BountySNOid { get; set; } - public DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT Act { get; set; } - public DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType Type { get; set; } + public BountyData.ActT Act { get; set; } + public BountyData.BountyType Type { get; set; } public int LevelArea { get; set; } public WorldSno World { get; set; } public bool PortalSpawned = false; @@ -871,9 +874,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { if (Finished) return; if (levelArea == 19943) levelArea = 19780; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique && LevelArea == levelArea && AdditionalTargetNeed != AdditionalTargetCounter) + if (Type == BountyData.BountyType.KillUnique && LevelArea == levelArea && AdditionalTargetNeed != AdditionalTargetCounter) { - var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Quest][BountySNOid]; + var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[GameServer.Core.Types.SNO.SNOGroup.Quest][BountySNOid]; AdditionalTargetCounter++; foreach (var player in QuestManager.Game.Players.Values) @@ -894,16 +897,16 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem //220789 if (Finished) return; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillBoss && Target == snoId) + if (Type == BountyData.BountyType.KillBoss && Target == snoId) { Complete(); } - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique && (LevelArea == levelArea || (LevelAreaOverrides.ContainsKey(levelArea) && LevelAreaOverrides[levelArea] == LevelArea))) + if (Type == BountyData.BountyType.KillUnique && (LevelArea == levelArea || (LevelAreaOverrides.ContainsKey(levelArea) && LevelAreaOverrides[levelArea] == LevelArea))) { AdditionalTargetCounter++; foreach (var player in QuestManager.Game.Players.Values) { - List Scenes = new List(); + List Scenes = new List(); int MonsterCount = 0; foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values) if (!scene.SceneSNO.Name.ToLower().Contains("filler")) @@ -929,15 +932,15 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { while (MonsterCount < AdditionalTargetCounter + 20) { - Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count)].Position; - Core.Types.Math.Vector3D SP = null; + GameServer.Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count)].Position; + GameServer.Core.Types.Math.Vector3D SP = null; while (true) { - SP = new Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); - if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) + SP = new GameServer.Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); + if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, Scene.NavCellFlags.AllowWalk)) break; } - QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].melee[FastRandom.Instance.Next(GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].melee.Count())], SP); + QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)GameServer.GSSystem.GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].melee[FastRandom.Instance.Next(GameServer.GSSystem.GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].melee.Count())], SP); MonsterCount++; } } //Нужен дополнительный спаун монстров, их мало @@ -959,7 +962,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (!TargetSpawned) if (QuestManager.Game.GetWorld(world).GetActorBySNO((ActorSno)Target) == null) { - List Scenes = new List(); + List Scenes = new List(); foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values) { if (!scene.SceneSNO.Name.ToLower().Contains("filler")) @@ -967,12 +970,12 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Scenes.Add(scene); } - Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count - 1)].Position; - Core.Types.Math.Vector3D SP = null; + GameServer.Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count - 1)].Position; + GameServer.Core.Types.Math.Vector3D SP = null; while (true) { - SP = new Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); - if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) + SP = new GameServer.Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); + if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, Scene.NavCellFlags.AllowWalk)) break; } QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)Target, SP); @@ -982,7 +985,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (AdditionalTargetNeed <= AdditionalTargetCounter && TargetKilled) Complete(); } - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.ClearDungeon && World == world) + if (Type == BountyData.BountyType.ClearDungeon && World == world) { if (QuestManager.Game.WorldCleared(world)) Complete(); @@ -1012,9 +1015,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem foreach (var player in QuestManager.Game.Players.Values) { var xpReward = 1000 * player.Level * (1 + (player.Level / 7)) * QuestManager.Game.XPModifier; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique) + if (Type == BountyData.BountyType.KillUnique) xpReward *= 1.8f; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.ClearDungeon) + if (Type == BountyData.BountyType.ClearDungeon) xpReward *= 5f; var goldReward = 10000 * QuestManager.Game.GoldModifier; player.InGameClient.SendMessage(new QuestUpdateMessage() @@ -1050,19 +1053,19 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { switch (Act) { - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1: + case BountyData.ActT.A1: QuestManager.LaunchSideQuest(356988, true); //x1_AdventureMode_BountyTurnin_A1 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2: + case BountyData.ActT.A2: QuestManager.LaunchSideQuest(356994, true); //x1_AdventureMode_BountyTurnin_A2 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3: + case BountyData.ActT.A3: QuestManager.LaunchSideQuest(356996, true); //x1_AdventureMode_BountyTurnin_A3 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4: + case BountyData.ActT.A4: QuestManager.LaunchSideQuest(356999, true); //x1_AdventureMode_BountyTurnin_A4 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5: + case BountyData.ActT.A5: QuestManager.LaunchSideQuest(357001, true); //x1_AdventureMode_BountyTurnin_A5 break; }