Merge pull request #109 from goremykin/optimizations

More multiple enumerations
This commit is contained in:
Lucca Faria Ferri 2023-01-28 11:34:56 -03:00 committed by GitHub
commit 8fc7021992
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 143 additions and 138 deletions

View File

@ -77,6 +77,11 @@ namespace DiIiS_NA.Core.Extensions
do action(array, walker.Position); do action(array, walker.Position);
while (walker.Step()); while (walker.Step());
} }
public static int FindIndex<T>(this T[] source, Predicate<T> match)
{
return Array.FindIndex(source, match);
}
} }
internal class ArrayTraverse internal class ArrayTraverse

View File

@ -104,11 +104,8 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
int powerToUse = PickPowerToUse(); int powerToUse = PickPowerToUse();
if (powerToUse > 0) if (powerToUse > 0)
{ {
var elites = targets.Where(t => t is Champion || t is Rare || t is RareMinion); var elite = targets.FirstOrDefault(t => t is Champion or Rare or RareMinion);
if (elites.Count() > 0) _target = elite ?? targets.First();
_target = elites.First();
else
_target = targets.First();
PowerScript power = PowerLoader.CreateImplementationForPowerSNO(powerToUse); PowerScript power = PowerLoader.CreateImplementationForPowerSNO(powerToUse);
power.User = Body; power.User = Body;

View File

@ -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) 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); var elite = targets.FirstOrDefault(target => target is Champion or Rare or RareMinion);
if (elites.Count() > 0) _target = elite ?? targets.First();
_target = elites.First();
else
_target = targets.First();
int powerToUse = PickPowerToUse(); int powerToUse = PickPowerToUse();
if (powerToUse > 0) if (powerToUse > 0)

View File

@ -26,6 +26,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
using Player = DiIiS_NA.GameServer.GSSystem.PlayerSystem.Player; using Player = DiIiS_NA.GameServer.GSSystem.PlayerSystem.Player;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem namespace DiIiS_NA.GameServer.GSSystem.ActorSystem

View File

@ -23,6 +23,7 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan;
using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations;
using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {

View File

@ -33,6 +33,7 @@ using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem;
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
using System.Diagnostics; using System.Diagnostics;
using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
namespace DiIiS_NA.GameServer.GSSystem.GameSystem namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{ {

View File

@ -1,22 +1,27 @@
using System; using System;
using System.Linq;
using System.Collections.Generic; 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.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.QuestSystem;
using DiIiS_NA.GameServer.GSSystem.TickerSystem; 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.GameServer.MessageSystem;
using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map;
using DiIiS_NA.GameServer.GSSystem.ItemsSystem; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest;
using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.GameServer.MessageSystem.Message.Fields;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor;
using DiIiS_NA.D3_GameServer.Core.Types.SNO; using Monster = DiIiS_NA.GameServer.GSSystem.ActorSystem.Monster;
namespace DiIiS_NA.GameServer.GSSystem.GameSystem namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
{ {
public class QuestManager public class QuestManager
{ {
@ -72,91 +77,89 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{ {
Bounties.Clear(); Bounties.Clear();
var kill_boss_bounties = ItemGenerator.Bounties.Values var actToKillBossBounties = ItemGenerator.Bounties.Values
.Where(b => b.BountyData0.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillBoss) .Where(bounty => bounty.BountyData0.Type == BountyData.BountyType.KillBoss)
.Where(b => !Bounties.Select(b => b.LevelArea).Contains(b.BountyData0.LeveAreaSNO0)) .Where(bounty => !Bounties.Select(b => b.LevelArea).Contains(bounty.BountyData0.LeveAreaSNO0))
.OrderBy(b => FastRandom.Instance.Next()) .OrderBy(_ => FastRandom.Instance.Next())
.Select(b => new Bounty() .Select(bounty =>
{ {
QuestManager = this, var stepObjectives = bounty.QuestSteps
BountySNOid = b.Header.SNOId, .SelectMany(s => s.StepObjectiveSets)
Act = b.BountyData0.ActData, .SelectMany(s => s.StepObjectives)
Type = b.BountyData0.Type, .ToArray();
LevelArea = b.BountyData0.LeveAreaSNO0, var killMonsterObjectiveIndex = stepObjectives
World = WorldSno.__NONE, .FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster);
Target = b.QuestSteps var levelAreaChecks = stepObjectives
.SelectMany(s => s.StepObjectiveSets) .Where(o => o.ObjectiveType == QuestStepObjectiveType.EnterLevelArea)
.SelectMany(s => s.StepObjectives) .Select(o => o.SNOName1.Id)
.Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster).SNOName1.Id, .ToList();
TargetTaskId = b.QuestSteps
.SelectMany(s => s.StepObjectiveSets) return new Bounty
.SelectMany(s => s.StepObjectives) {
.ToList() QuestManager = this,
.FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster), BountySNOid = bounty.Header.SNOId,
AdditionalTaskId = 0, Act = bounty.BountyData0.ActData,
AdditionalTargetCounter = 0, Type = bounty.BountyData0.Type,
AdditionalTargetNeed = 0, LevelArea = bounty.BountyData0.LeveAreaSNO0,
LevelAreaChecks = b.QuestSteps World = WorldSno.__NONE,
.SelectMany(s => s.StepObjectiveSets) Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id,
.SelectMany(s => s.StepObjectives) TargetTaskId = killMonsterObjectiveIndex,
.Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) AdditionalTaskId = 0,
.Select(o => o.SNOName1.Id) AdditionalTargetCounter = 0,
.ToList() AdditionalTargetNeed = 0,
}); LevelAreaChecks = levelAreaChecks
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 .ToLookup(bounty => bounty.Act);
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 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 var actToKillUniqueBounties = ItemGenerator.Bounties.Values
.Where(b => b.BountyData0.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique) .Where(bounty => bounty.BountyData0.Type == BountyData.BountyType.KillUnique)
.Where(b => !Bounties.Select(b => b.LevelArea).Contains(b.BountyData0.LeveAreaSNO0)) .Where(bounty => !Bounties.Select(b => b.LevelArea).Contains(bounty.BountyData0.LeveAreaSNO0))
.OrderBy(b => FastRandom.Instance.Next()) .OrderBy(_ => 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) .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(b => b.First()) .Select(group => group.First())
.Select(b => new Bounty() .Select(bounty =>
{ {
QuestManager = this, var stepObjectives = bounty.QuestSteps
BountySNOid = b.Header.SNOId, .SelectMany(s => s.StepObjectiveSets)
Act = b.BountyData0.ActData, .SelectMany(s => s.StepObjectives)
Type = b.BountyData0.Type, .ToArray();
LevelArea = b.QuestSteps var killMonsterObjectiveIndex = stepObjectives.FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster);
.SelectMany(s => s.StepObjectiveSets) var killAnyObjectiveIndex = stepObjectives.FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillAny);
.SelectMany(s => s.StepObjectives) var levelAreaChecks = stepObjectives
.Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id, .Where(o => o.ObjectiveType == QuestStepObjectiveType.EnterLevelArea)
World = WorldSno.__NONE, .Select(o => o.SNOName1.Id)
Target = b.QuestSteps .ToList();
.SelectMany(s => s.StepObjectiveSets)
.SelectMany(s => s.StepObjectives) return new Bounty
.Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster).SNOName1.Id, {
TargetTaskId = b.QuestSteps QuestManager = this,
.SelectMany(s => s.StepObjectiveSets) BountySNOid = bounty.Header.SNOId,
.SelectMany(s => s.StepObjectives) Act = bounty.BountyData0.ActData,
.ToList() Type = bounty.BountyData0.Type,
.FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster), LevelArea = stepObjectives[killAnyObjectiveIndex].SNOName1.Id,
AdditionalTaskId = b.QuestSteps World = WorldSno.__NONE,
.SelectMany(s => s.StepObjectiveSets) Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id,
.SelectMany(s => s.StepObjectives) TargetTaskId = killMonsterObjectiveIndex,
.ToList() AdditionalTaskId = killAnyObjectiveIndex,
.FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny), AdditionalTargetCounter = 0,
AdditionalTargetCounter = 0, AdditionalTargetNeed = stepObjectives[killAnyObjectiveIndex].CounterTarget,
AdditionalTargetNeed = b.QuestSteps LevelAreaChecks = levelAreaChecks
.SelectMany(s => s.StepObjectiveSets) };
.SelectMany(s => s.StepObjectives) })
.Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny).CounterTarget, .ToLookup(bounty => bounty.Act);
LevelAreaChecks = b.QuestSteps
.SelectMany(s => s.StepObjectiveSets) Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A1].Take(4));
.SelectMany(s => s.StepObjectives) Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A2].Take(4));
.Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A3].Take(4));
.Select(o => o.SNOName1.Id) Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A4].Take(4));
.ToList() Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A5].Take(4));
});
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
} }
/// <summary> /// <summary>
@ -210,7 +213,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
//rewardXp = xpReward, //rewardXp = xpReward,
//rewardGold = goldReward //rewardGold = goldReward
}); });
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.FloatingAmountMessage() player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage()
{ {
Place = new WorldPlace() Place = new WorldPlace()
{ {
@ -219,9 +222,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
}, },
Amount = xpReward, 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() Place = new WorldPlace()
{ {
@ -230,7 +233,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
}, },
Amount = goldReward, Amount = goldReward,
Type = MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold, Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold,
}); });
player.UpdateExp(xpReward); player.UpdateExp(xpReward);
player.Inventory.AddGoldAmount(goldReward); player.Inventory.AddGoldAmount(goldReward);
@ -538,7 +541,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{ {
Logger.MethodTrace($"AutoSetQuestMarker() - {Game.QuestProgress.QuestTriggers.Count} triggers found"); Logger.MethodTrace($"AutoSetQuestMarker() - {Game.QuestProgress.QuestTriggers.Count} triggers found");
var trigger = Game.QuestProgress.QuestTriggers.First(); 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) foreach (var world in Game.Worlds)
{ {
var actors = world.GetActorsBySNO((ActorSno)trigger.Key).Where(d => d.Visible); 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) 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)); 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) 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; if (unique == null) continue;
player.InGameClient.SendMessage(new MapMarkerInfoMessage player.InGameClient.SendMessage(new MapMarkerInfoMessage
{ {
@ -711,7 +714,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
return Quests.ContainsKey(snoQuest) && Quests[snoQuest].Completed; 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); 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 QuestManager QuestManager { get; set; }
public int BountySNOid { get; set; } public int BountySNOid { get; set; }
public DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT Act { get; set; } public BountyData.ActT Act { get; set; }
public DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType Type { get; set; } public BountyData.BountyType Type { get; set; }
public int LevelArea { get; set; } public int LevelArea { get; set; }
public WorldSno World { get; set; } public WorldSno World { get; set; }
public bool PortalSpawned = false; public bool PortalSpawned = false;
@ -871,9 +874,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{ {
if (Finished) return; if (Finished) return;
if (levelArea == 19943) levelArea = 19780; 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++; AdditionalTargetCounter++;
foreach (var player in QuestManager.Game.Players.Values) foreach (var player in QuestManager.Game.Players.Values)
@ -894,16 +897,16 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
//220789 //220789
if (Finished) return; if (Finished) return;
if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillBoss && Target == snoId) if (Type == BountyData.BountyType.KillBoss && Target == snoId)
{ {
Complete(); 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++; AdditionalTargetCounter++;
foreach (var player in QuestManager.Game.Players.Values) foreach (var player in QuestManager.Game.Players.Values)
{ {
List<MapSystem.Scene> Scenes = new List<MapSystem.Scene>(); List<GameServer.GSSystem.MapSystem.Scene> Scenes = new List<GameServer.GSSystem.MapSystem.Scene>();
int MonsterCount = 0; int MonsterCount = 0;
foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values) foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values)
if (!scene.SceneSNO.Name.ToLower().Contains("filler")) if (!scene.SceneSNO.Name.ToLower().Contains("filler"))
@ -929,15 +932,15 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{ {
while (MonsterCount < AdditionalTargetCounter + 20) while (MonsterCount < AdditionalTargetCounter + 20)
{ {
Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count)].Position; GameServer.Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count)].Position;
Core.Types.Math.Vector3D SP = null; GameServer.Core.Types.Math.Vector3D SP = null;
while (true) while (true)
{ {
SP = new Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); 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, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, Scene.NavCellFlags.AllowWalk))
break; 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++; MonsterCount++;
} }
} //Нужен дополнительный спаун монстров, их мало } //Нужен дополнительный спаун монстров, их мало
@ -959,7 +962,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
if (!TargetSpawned) if (!TargetSpawned)
if (QuestManager.Game.GetWorld(world).GetActorBySNO((ActorSno)Target) == null) if (QuestManager.Game.GetWorld(world).GetActorBySNO((ActorSno)Target) == null)
{ {
List<MapSystem.Scene> Scenes = new List<MapSystem.Scene>(); List<GameServer.GSSystem.MapSystem.Scene> Scenes = new List<GameServer.GSSystem.MapSystem.Scene>();
foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values) foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values)
{ {
if (!scene.SceneSNO.Name.ToLower().Contains("filler")) if (!scene.SceneSNO.Name.ToLower().Contains("filler"))
@ -967,12 +970,12 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
Scenes.Add(scene); Scenes.Add(scene);
} }
Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count - 1)].Position; GameServer.Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count - 1)].Position;
Core.Types.Math.Vector3D SP = null; GameServer.Core.Types.Math.Vector3D SP = null;
while (true) while (true)
{ {
SP = new Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); 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, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, Scene.NavCellFlags.AllowWalk))
break; break;
} }
QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)Target, SP); QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)Target, SP);
@ -982,7 +985,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
if (AdditionalTargetNeed <= AdditionalTargetCounter && TargetKilled) if (AdditionalTargetNeed <= AdditionalTargetCounter && TargetKilled)
Complete(); 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)) if (QuestManager.Game.WorldCleared(world))
Complete(); Complete();
@ -1012,9 +1015,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
foreach (var player in QuestManager.Game.Players.Values) foreach (var player in QuestManager.Game.Players.Values)
{ {
var xpReward = 1000 * player.Level * (1 + (player.Level / 7)) * QuestManager.Game.XPModifier; 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; xpReward *= 1.8f;
if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.ClearDungeon) if (Type == BountyData.BountyType.ClearDungeon)
xpReward *= 5f; xpReward *= 5f;
var goldReward = 10000 * QuestManager.Game.GoldModifier; var goldReward = 10000 * QuestManager.Game.GoldModifier;
player.InGameClient.SendMessage(new QuestUpdateMessage() player.InGameClient.SendMessage(new QuestUpdateMessage()
@ -1050,19 +1053,19 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{ {
switch (Act) switch (Act)
{ {
case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1: case BountyData.ActT.A1:
QuestManager.LaunchSideQuest(356988, true); //x1_AdventureMode_BountyTurnin_A1 QuestManager.LaunchSideQuest(356988, true); //x1_AdventureMode_BountyTurnin_A1
break; break;
case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2: case BountyData.ActT.A2:
QuestManager.LaunchSideQuest(356994, true); //x1_AdventureMode_BountyTurnin_A2 QuestManager.LaunchSideQuest(356994, true); //x1_AdventureMode_BountyTurnin_A2
break; break;
case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3: case BountyData.ActT.A3:
QuestManager.LaunchSideQuest(356996, true); //x1_AdventureMode_BountyTurnin_A3 QuestManager.LaunchSideQuest(356996, true); //x1_AdventureMode_BountyTurnin_A3
break; break;
case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4: case BountyData.ActT.A4:
QuestManager.LaunchSideQuest(356999, true); //x1_AdventureMode_BountyTurnin_A4 QuestManager.LaunchSideQuest(356999, true); //x1_AdventureMode_BountyTurnin_A4
break; break;
case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5: case BountyData.ActT.A5:
QuestManager.LaunchSideQuest(357001, true); //x1_AdventureMode_BountyTurnin_A5 QuestManager.LaunchSideQuest(357001, true); //x1_AdventureMode_BountyTurnin_A5
break; break;
} }