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);
while (walker.Step());
}
public static int FindIndex<T>(this T[] source, Predicate<T> match)
{
return Array.FindIndex(source, match);
}
}
internal class ArrayTraverse

View File

@ -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;

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)
{
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)

View File

@ -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

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.GSSystem.ActorSystem.Implementations;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
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 System.Diagnostics;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
namespace DiIiS_NA.GameServer.GSSystem.GameSystem
{

View File

@ -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 =>
{
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 = b.Header.SNOId,
Act = b.BountyData0.ActData,
Type = b.BountyData0.Type,
LevelArea = b.BountyData0.LeveAreaSNO0,
BountySNOid = bounty.Header.SNOId,
Act = bounty.BountyData0.ActData,
Type = bounty.BountyData0.Type,
LevelArea = bounty.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),
Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id,
TargetTaskId = killMonsterObjectiveIndex,
AdditionalTaskId = 0,
AdditionalTargetCounter = 0,
AdditionalTargetNeed = 0,
LevelAreaChecks = b.QuestSteps
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 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 =>
{
var stepObjectives = bounty.QuestSteps
.SelectMany(s => s.StepObjectiveSets)
.SelectMany(s => s.StepObjectives)
.Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
.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()
});
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
.ToList();
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()
return new 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,
BountySNOid = bounty.Header.SNOId,
Act = bounty.BountyData0.ActData,
Type = bounty.BountyData0.Type,
LevelArea = stepObjectives[killAnyObjectiveIndex].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),
Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id,
TargetTaskId = killMonsterObjectiveIndex,
AdditionalTaskId = killAnyObjectiveIndex,
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
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));
}
/// <summary>
@ -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<MapSystem.Scene> Scenes = new List<MapSystem.Scene>();
List<GameServer.GSSystem.MapSystem.Scene> Scenes = new List<GameServer.GSSystem.MapSystem.Scene>();
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<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)
{
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;
}