Merge pull request #42 from DeKaN/extract-actor-sno

Extract Actor SNO into enum
This commit is contained in:
pr701 2022-10-17 22:51:44 +03:00 committed by GitHub
commit 662dcde210
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
243 changed files with 25960 additions and 22635 deletions

File diff suppressed because it is too large Load Diff

View File

@ -90,7 +90,7 @@ namespace DiIiS_NA.GameServer.CommandManager
player.Position.Y + (float)RandomHelper.NextDouble() * 20f, player.Position.Y + (float)RandomHelper.NextDouble() * 20f,
player.Position.Z); player.Position.Z);
var monster = player.World.SpawnMonster(actorSNO, position); var monster = player.World.SpawnMonster((ActorSno)actorSNO, position);
} }
return string.Format("Spawned {0} mobs with ActorSNO: {1}", amount, actorSNO); return string.Format("Spawned {0} mobs with ActorSNO: {1}", amount, actorSNO);
@ -889,7 +889,7 @@ namespace DiIiS_NA.GameServer.CommandManager
var matches = invokerClient.InGameClient.Player.World.StartingPoints; var matches = invokerClient.InGameClient.Player.World.StartingPoints;
return matches.Aggregate(matches.Count >= 1 ? "Starting Points:\n" : "No match found.", return matches.Aggregate(matches.Count >= 1 ? "Starting Points:\n" : "No match found.",
(current, match) => current + string.Format("[{0}] {1} - {2}\n", match.GlobalID.ToString("D6"), match.ActorSNO.Name, match.TargetId)); (current, match) => current + string.Format("[{0}] {1} - {2}\n", match.GlobalID.ToString("D6"), match.Name, match.TargetId));
} }
[Command("weather", "Allows you to search for a Weather.\nUsage: lookup weather <pattern>")] [Command("weather", "Allows you to search for a Weather.\nUsage: lookup weather <pattern>")]

View File

@ -325,7 +325,7 @@ namespace DiIiS_NA.GameServer.Core
} }
else else
{ {
Logger.Error("Can't find slot in backpack to add item {0}", item.ActorSNO); Logger.Error("Can't find slot in backpack to add item {0}", item.SNO);
if (_owner is Player) if (_owner is Player)
_owner.World.DropItem((_owner as Player), item); _owner.World.DropItem((_owner as Player), item);
return false; return false;
@ -342,7 +342,7 @@ namespace DiIiS_NA.GameServer.Core
} }
else else
{ {
Logger.Error("Can't find slot in backpack to add item {0}", item.ActorSNO); Logger.Error("Can't find slot in backpack to add item {0}", item.SNO);
return false; return false;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,7 @@ using System.Linq;
using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Helpers.Math;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Math;
//Blizzless Project 2022 //Blizzless Project 2022
@ -128,11 +129,12 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
if (_powerDelay.TimedOut) if (_powerDelay.TimedOut)
{ {
List<Actor> targets = (this.Body as Minion).Master.GetObjectsInRange<Monster>(40f).Where(m => !m.Dead && List<Actor> targets = (this.Body as Minion).Master
m.Visible && .GetObjectsInRange<Monster>(40f)
!m.ActorSNO.Name.ToLower().Contains("spawner") && .Where(m => !m.Dead && m.Visible && m.SNO.IsTargetable())
!m.ActorSNO.Name.ToLower().Contains("_vo") && .OrderBy(m => PowerMath.Distance2D(m.Position, this.Body.Position))
!m.ActorSNO.Name.ToLower().Contains("voiceo")).OrderBy(m => PowerMath.Distance2D(m.Position, this.Body.Position)).Cast<Actor>().ToList(); .Cast<Actor>()
.ToList();
if (this.Body.World.Game.PvP) if (this.Body.World.Game.PvP)
targets = (this.Body as Minion).Master.GetObjectsInRange<Player>(30f).Where(p => p.GlobalID != (this.Body as Minion).Master.GlobalID && p.Attributes[GameAttribute.TeamID] != (this.Body as Minion).Master.Attributes[GameAttribute.TeamID]).Cast<Actor>().ToList(); targets = (this.Body as Minion).Master.GetObjectsInRange<Player>(30f).Where(p => p.GlobalID != (this.Body as Minion).Master.GlobalID && p.Attributes[GameAttribute.TeamID] != (this.Body as Minion).Master.Attributes[GameAttribute.TeamID]).Cast<Actor>().ToList();
if (this.Body.World.IsPvP) if (this.Body.World.IsPvP)
@ -211,7 +213,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
{ {
if (!_warnedNoPowers && this.PresetPowers.Count == 0) if (!_warnedNoPowers && this.PresetPowers.Count == 0)
{ {
Logger.Debug("Minion \"{0}\" has no usable powers. ", this.Body.ActorSNO.Name); Logger.Debug("Minion \"{0}\" has no usable powers. ", this.Body.Name);
_warnedNoPowers = true; _warnedNoPowers = true;
} }

View File

@ -8,6 +8,7 @@ using System.Linq;
using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Helpers.Math;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
@ -85,9 +86,9 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
public override void Think(int tickCounter) public override void Think(int tickCounter)
{ {
if (this.Body.ActorSNO.Id == 255623 || if (this.Body.SNO == ActorSno._uber_siegebreakerdemon ||
this.Body.ActorSNO.Id == 210120 || this.Body.SNO == ActorSno._a4dun_garden_corruption_monster ||
this.Body.ActorSNO.Id == 208561) this.Body.SNO == ActorSno._a4dun_garden_hellportal_pillar)
return; return;
//if(AttackedBy != null && TimeoutAttacked == null) //if(AttackedBy != null && TimeoutAttacked == null)
// TimeoutAttacked = new SecondsTickTimer(this.Body.World.Game, 3.0f); // TimeoutAttacked = new SecondsTickTimer(this.Body.World.Game, 3.0f);
@ -97,8 +98,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
// TimeoutAttacked = null; // TimeoutAttacked = null;
// AttackedBy = null; // AttackedBy = null;
// } // }
if (this.Body.ActorSNO.Id == 114527 //BelialVoiceover if (this.Body.SNO == ActorSno._belialvoiceover) //BelialVoiceover
)
return; return;
if (this.Body.Hidden == true) if (this.Body.Hidden == true)
return; return;
@ -128,8 +128,8 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
this.Body.Attributes[GameAttribute.Blind] || this.Body.Attributes[GameAttribute.Blind] ||
this.Body.Attributes[GameAttribute.Webbed] || this.Body.Attributes[GameAttribute.Webbed] ||
this.Body.Disable || this.Body.Disable ||
this.Body.World.BuffManager.GetFirstBuff<PowerSystem.Implementations.KnockbackBuff>(this.Body) != null || this.Body.World.BuffManager.GetFirstBuff<KnockbackBuff>(this.Body) != null ||
this.Body.World.BuffManager.GetFirstBuff<PowerSystem.Implementations.SummonedBuff>(this.Body) != null) this.Body.World.BuffManager.GetFirstBuff<SummonedBuff>(this.Body) != null)
{ {
if (this.CurrentAction != null) if (this.CurrentAction != null)
{ {
@ -195,9 +195,9 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
.ToList(); .ToList();
else else
targets = this.Body.GetActorsInRange(50f) targets = this.Body.GetActorsInRange(50f)
.Where(p => ((p is Player) && !p.Dead && p.Attributes[GameAttribute.Loading] == false && p.Attributes[GameAttribute.Is_Helper] == false && p.World.BuffManager.GetFirstBuff<PowerSystem.Implementations.ActorGhostedBuff>(p) == null) .Where(p => ((p is Player) && !p.Dead && p.Attributes[GameAttribute.Loading] == false && p.Attributes[GameAttribute.Is_Helper] == false && p.World.BuffManager.GetFirstBuff<ActorGhostedBuff>(p) == null)
|| ((p is Minion) && !p.Dead && p.Attributes[GameAttribute.Is_Helper] == false) || ((p is Minion) && !p.Dead && p.Attributes[GameAttribute.Is_Helper] == false)
|| (p is DesctructibleLootContainer && (p.ActorSNO.Name.ToLower().Contains("door") || p.ActorSNO.Name.ToLower().Contains("barricade"))) || (p is DesctructibleLootContainer && p.SNO.IsDoorOrBarricade())
|| ((p is Hireling) && !p.Dead) || ((p is Hireling) && !p.Dead)
) )
.OrderBy((actor) => PowerMath.Distance2D(actor.Position, this.Body.Position)) .OrderBy((actor) => PowerMath.Distance2D(actor.Position, this.Body.Position))
@ -241,7 +241,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
} }
else if (this.Body.WalkSpeed != 0) else if (this.Body.WalkSpeed != 0)
{ {
if (this.Body.ActorSNO.Name.ToLower().Contains("woodwraith") || this.Body.ActorSNO.Name.ToLower().Contains("wasp")) if (this.Body.SNO.IsWoodwraithOrWasp())
{ {
Logger.Trace("MoveToPointAction to target"); Logger.Trace("MoveToPointAction to target");
this.CurrentAction = new MoveToPointAction( this.CurrentAction = new MoveToPointAction(
@ -268,9 +268,9 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
} }
else else
{ {
switch (this.Body.ActorSNO.Id) switch (this.Body.SNO)
{ {
case 89579: case ActorSno._a1dun_leor_firewall2:
powerToUse = 223284; powerToUse = 223284;
break; break;
} }
@ -309,7 +309,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
targets = this.Body.GetActorsInRange(50f) targets = this.Body.GetActorsInRange(50f)
.Where(p => ((p is LorathNahr_NPC) && !p.Dead) .Where(p => ((p is LorathNahr_NPC) && !p.Dead)
|| ((p is CaptainRumford) && !p.Dead) || ((p is CaptainRumford) && !p.Dead)
|| (p is DesctructibleLootContainer && (p.ActorSNO.Name.ToLower().Contains("door") || p.ActorSNO.Name.ToLower().Contains("barricade"))) || (p is DesctructibleLootContainer && p.SNO.IsDoorOrBarricade())
|| ((p is Cain) && !p.Dead)) || ((p is Cain) && !p.Dead))
.OrderBy((actor) => PowerMath.Distance2D(actor.Position, this.Body.Position)) .OrderBy((actor) => PowerMath.Distance2D(actor.Position, this.Body.Position))
.Cast<Actor>() .Cast<Actor>()
@ -340,7 +340,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
_target = targets.First(); _target = targets.First();
} }
foreach (var tar in targets) foreach (var tar in targets)
if (tar is DesctructibleLootContainer && (tar.ActorSNO.Name.ToLower().Contains("door") || tar.ActorSNO.Name.ToLower().Contains("barricade")) && tar.ActorSNO.Id != 81699) if (tar is DesctructibleLootContainer && tar.SNO.IsDoorOrBarricade() && tar.SNO != ActorSno._trout_wagon_barricade)
{ _target = tar; break; } { _target = tar; break; }
} }
else else
@ -386,7 +386,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
} }
else if (this.Body.WalkSpeed != 0) else if (this.Body.WalkSpeed != 0)
{ {
if (this.Body.ActorSNO.Name.ToLower().Contains("woodwraith") || this.Body.ActorSNO.Name.ToLower().Contains("wasp")) if (this.Body.SNO.IsWoodwraithOrWasp())
{ {
Logger.Trace("MoveToPointAction to target"); Logger.Trace("MoveToPointAction to target");
this.CurrentAction = new MoveToPointAction( this.CurrentAction = new MoveToPointAction(
@ -466,8 +466,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
{ {
if (!_warnedNoPowers && this.PresetPowers.Count == 0) if (!_warnedNoPowers && this.PresetPowers.Count == 0)
{ {
Logger.Info("Monster \"{0}\" has no usable powers. {1} are defined in mpq data.", Logger.Info("Monster \"{0}\" has no usable powers. {1} are defined in mpq data.", this.Body.Name, _mpqPowerCount);
this.Body.ActorSNO.Name, _mpqPowerCount);
_warnedNoPowers = true; _warnedNoPowers = true;
} }

View File

@ -63,13 +63,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// </summary> /// </summary>
public SNOHandle ActorSNO { get; private set; } public SNOHandle ActorSNO { get; private set; }
public ActorSno SNO
{
get { return (ActorSno)ActorSNO.Id; }
}
public string Name
{
get { return ActorSNO.Name; }
}
/// <summary> /// <summary>
/// Gets or sets the sno of the actor used to identify the actor to the player /// Gets or sets the sno of the actor used to identify the actor to the player
/// This is usually the same as actorSNO except for actors that have a GBHandle /// This is usually the same as actorSNO except for actors that have a GBHandle
/// There are few exceptions though like the Inn_Zombies that have both. /// There are few exceptions though like the Inn_Zombies that have both.
/// Used by ACDEnterKnown to name the actor. /// Used by ACDEnterKnown to name the actor.
/// </summary> /// </summary>
public int NameSNOId { get; set; } public ActorSno NameSNO { get; set; }
public bool Disable = false; public bool Disable = false;
@ -191,7 +201,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
get get
{ {
return (DiIiS_NA.Core.MPQ.FileFormats.Actor)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Actor][this.ActorSNO.Id].Data; return (DiIiS_NA.Core.MPQ.FileFormats.Actor)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Actor][(int)this.SNO].Data;
} }
} }
@ -236,9 +246,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// Creates a new actor. /// Creates a new actor.
/// </summary> /// </summary>
/// <param name="world">The world that initially belongs to.</param> /// <param name="world">The world that initially belongs to.</param>
/// <param name="snoId">SNOId of the actor.</param> /// <param name="sno">SNOId of the actor.</param>
/// <param name="tags">TagMapEntry dictionary read for the actor from MPQ's..</param> /// <param name="tags">TagMapEntry dictionary read for the actor from MPQ's..</param>
protected Actor(World world, int snoId, TagMap tags, bool isMarker = false) protected Actor(World world, ActorSno sno, TagMap tags, bool isMarker = false)
: base(world, world.IsPvP ? World.NewActorPvPID : world.Game.NewActorGameID) : base(world, world.IsPvP ? World.NewActorPvPID : world.Game.NewActorGameID)
{ {
this.Tags = tags; this.Tags = tags;
@ -255,8 +265,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
// if (this.ActorData.AnimSetSNO != -1) // if (this.ActorData.AnimSetSNO != -1)
// this.AnimationSet = (Mooege.Common.MPQ.FileFormats.AnimSet)Mooege.Common.MPQ.MPQStorage.Data.Assets[SNOGroup.AnimSet][this.ActorData.AnimSetSNO].Data; // this.AnimationSet = (Mooege.Common.MPQ.FileFormats.AnimSet)Mooege.Common.MPQ.MPQStorage.Data.Assets[SNOGroup.AnimSet][this.ActorData.AnimSetSNO].Data;
this.ActorSNO = new SNOHandle(SNOGroup.Actor, snoId); this.ActorSNO = new SNOHandle(SNOGroup.Actor, (int)sno);
this.NameSNOId = snoId; this.NameSNO = sno;
//Logger.Info("Loaded actor {0}, id {1}, type {2}", this.ActorSNO.Name, this.DynamicID, this.ActorData.Type); //Logger.Info("Loaded actor {0}, id {1}, type {2}", this.ActorSNO.Name, this.DynamicID, this.ActorData.Type);
this.Quality = 0; this.Quality = 0;
this.HasLoot = true; this.HasLoot = true;
@ -283,9 +293,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// Creates a new actor. /// Creates a new actor.
/// </summary> /// </summary>
/// <param name="world">The world that initially belongs to.</param> /// <param name="world">The world that initially belongs to.</param>
/// <param name="snoId">SNOId of the actor.</param> /// <param name="sno">SNOId of the actor.</param>
protected Actor(World world, int snoId) protected Actor(World world, ActorSno sno)
: this(world, snoId, null) : this(world, sno, null)
{ } { }
protected virtual void quest_OnQuestProgress() // erekose changed from protected to public protected virtual void quest_OnQuestProgress() // erekose changed from protected to public
@ -306,7 +316,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// </summary> /// </summary>
public override void Destroy() public override void Destroy()
{ {
if (this.ActorSNO.Id == 454066) if (this.SNO == ActorSno._p6_necro_corpse_flesh)
if (World != null) if (World != null)
foreach (var plr in World.Game.Players.Values) foreach (var plr in World.Game.Players.Values)
if (plr.SkillSet.HasPassive(208594) && DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0,100) > 45) if (plr.SkillSet.HasPassive(208594) && DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0,100) > 45)
@ -328,15 +338,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public virtual void EnterWorld(Vector3D position) public virtual void EnterWorld(Vector3D position)
{ {
var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Quest][74128]; var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Quest][74128];
if (this.World != null) if (this.World != null)
if (this.World.GetActorsBySNO(this.ActorSNO.Id).Count > 0) {
{ int count = this.World.GetActorsBySNO(this.SNO).Count;
int count = this.World.GetActorsBySNO(this.ActorSNO.Id).Count; if (count > 0)
NumberInWorld = count; NumberInWorld = count;
} }
if (this.Spawned)
if (this.Spawned)
return; return;
this.Position = position; this.Position = position;
@ -423,7 +434,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
(minion as Minion).Brain.DeActivate(); (minion as Minion).Brain.DeActivate();
(this as Player).Followers.Remove(fol); (this as Player).Followers.Remove(fol);
minion.ChangeWorld(world, position); minion.ChangeWorld(world, position);
(this as Player).Followers.Add(minion.GlobalID, minion.ActorSNO.Id); (this as Player).Followers.Add(minion.GlobalID, minion.SNO);
(minion as Minion).Brain.Activate(); (minion as Minion).Brain.Activate();
} }
} }
@ -823,14 +834,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
return new ACDEnterKnownMessage return new ACDEnterKnownMessage
{ {
ActorID = this.DynamicID(plr), ActorID = this.DynamicID(plr),
ActorSNOId = this.ActorSNO.Id, ActorSNOId = (int)this.SNO,
Flags = this.Field2, Flags = this.Field2,
LocationType = this.HasWorldLocation ? 0 : 1, LocationType = this.HasWorldLocation ? 0 : 1,
WorldLocation = this.HasWorldLocation ? this.WorldLocationMessage() : null, WorldLocation = this.HasWorldLocation ? this.WorldLocationMessage() : null,
InventoryLocation = this.HasWorldLocation ? null : this.InventoryLocationMessage(plr), InventoryLocation = this.HasWorldLocation ? null : this.InventoryLocationMessage(plr),
GBHandle = this.GBHandle, GBHandle = this.GBHandle,
snoGroup = this.Field7, snoGroup = this.Field7,
snoHandle = this.NameSNOId, snoHandle = (int)this.NameSNO,
Quality = this.Quality, Quality = this.Quality,
LookLinkIndex = this.Field10, LookLinkIndex = this.Field10,
snoAmbientOcclusionOverrideTex = null, snoAmbientOcclusionOverrideTex = null,
@ -861,25 +872,21 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
WorldSno.trdun_crypt_skeletonkingcrown_02, WorldSno.trdun_crypt_skeletonkingcrown_02,
}; };
//Leave Miriam in Crypt //Leave Miriam in Crypt
if (this.ActorSNO.Id == 175310 && mysticHiddenWorlds.Contains(World.SNO)) return false; if (this.SNO == ActorSno._pt_mystic_novendor_nonglobalfollower && mysticHiddenWorlds.Contains(World.SNO)) return false;
//Destroy Bonewall and Jondar if Exit_S on Second Level of Cathedral //Destroy Bonewall and Jondar if Exit_S on Second Level of Cathedral
if (World.SNO == WorldSno.a1trdun_level04 && (this.ActorSNO.Id == 109209 || this.ActorSNO.Id == 86624)) return false; if (World.SNO == WorldSno.a1trdun_level04 && (this.SNO == ActorSno._trdun_cath_bonewall_a_door || this.SNO == ActorSno._adventurer_d_templarintrounique)) return false;
if (this.ActorSNO.Name.Contains("Uber") && !this.World.SNO.IsUberWorld()) return false; if (this.SNO.IsUberWorldActor() && !this.World.SNO.IsUberWorld()) return false;
if (this.ActorSNO.Name.Contains("AdventureMode") && this.World.Game.CurrentAct != 3000) return false; if (this.SNO.IsAdventureModeActor() && this.World.Game.CurrentAct != 3000) return false;
if (this.ActorSNO.Name.Contains("ScriptedSequenceOnly")) return false; if (this.SNO == ActorSno._x1_adria_boss_scriptedsequenceonly) return false;
if (player.RevealedObjects.ContainsKey(this.GlobalID)) return false; // already revealed if (player.RevealedObjects.ContainsKey(this.GlobalID)) return false; // already revealed
if (player.World == null) return false; if (player.World == null) return false;
if (this.ActorSNO.Id == 218339) if (this.SNO == ActorSno._zombieskinny_custom_a && this.World.SNO == WorldSno.trout_town && this.CurrentScene.SceneSNO.Id == 33348 && this.Position.X < 2896) return false;
if (this.World.SNO == WorldSno.trout_town)
if (this.CurrentScene.SceneSNO.Id == 33348)
if (this.Position.X < 2896)
return false;
if (!(this is Item) && player.World.GlobalID != this.World.GlobalID) return false; if (!(this is Item) && player.World.GlobalID != this.World.GlobalID) return false;
@ -946,7 +953,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
TrickleMessage Trickle = new TrickleMessage() TrickleMessage Trickle = new TrickleMessage()
{ {
ActorId = this.DynamicID(player), ActorId = this.DynamicID(player),
ActorSNO = this.ActorSNO.Id, ActorSNO = (int)this.SNO,
WorldLocation = new WorldPlace() WorldLocation = new WorldPlace()
{ {
WorldID = this.World.GlobalID, WorldID = this.World.GlobalID,
@ -982,66 +989,66 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
this.PlayActionAnimation(11514); this.PlayActionAnimation(11514);
} }
//Задаём идл для работяг //Задаём идл для работяг
else if (this.World.SNO == WorldSno.trout_tristram_inn & this.ActorSNO.Id == 84529) else if (this.World.SNO == WorldSno.trout_tristram_inn && this.SNO == ActorSno._omninpc_tristram_male_a)
this.PlayActionAnimation(102329); this.PlayActionAnimation(102329);
else if (this.ActorSNO.Id == 4580) else if (this.SNO == ActorSno._leah)
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage() player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage()
{ {
ActorID = this.DynamicID(player), ActorID = this.DynamicID(player),
EquipmentList = new MessageSystem.Message.Fields.VisualEquipment() EquipmentList = new VisualEquipment()
{ {
Equipment = new MessageSystem.Message.Fields.VisualItem[] Equipment = new VisualItem[]
{ {
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1, GbId = -1,
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1, GbId = -1,
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1, GbId = -1,
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1, GbId = -1,
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = unchecked((int)-2091504072), GbId = unchecked((int)-2091504072),
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1,//0x6C3B0389, GbId = -1,//0x6C3B0389,
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1, GbId = -1,
DyeType = 0, DyeType = 0,
ItemEffectType = 0, ItemEffectType = 0,
EffectLevel = -1, EffectLevel = -1,
}, },
new MessageSystem.Message.Fields.VisualItem() new VisualItem()
{ {
GbId = -1, GbId = -1,
DyeType = 0, DyeType = 0,
@ -1329,20 +1336,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
int snoQuestRange = Tags[MarkerKeys.QuestRange].Id; int snoQuestRange = Tags[MarkerKeys.QuestRange].Id;
if (DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.QuestRange].ContainsKey(snoQuestRange)) if (DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.QuestRange].ContainsKey(snoQuestRange))
_questRange = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.QuestRange][snoQuestRange].Data as DiIiS_NA.Core.MPQ.FileFormats.QuestRange; _questRange = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.QuestRange][snoQuestRange].Data as DiIiS_NA.Core.MPQ.FileFormats.QuestRange;
else Logger.Debug("Actor {0} GlobalID {1} is tagged with unknown QuestRange {2}", NameSNOId, GlobalID, snoQuestRange); else Logger.Debug("Actor {0} GlobalID {1} is tagged with unknown QuestRange {2}", NameSNO, GlobalID, snoQuestRange);
} }
if (Tags.ContainsKey(MarkerKeys.ConversationList) && WorldGenerator.DefaultConversationLists.ContainsKey(this.ActorSNO.Id)) if (Tags.ContainsKey(MarkerKeys.ConversationList) && WorldGenerator.DefaultConversationLists.ContainsKey((int)this.SNO))
{ {
int snoConversationList = WorldGenerator.DefaultConversationLists[this.ActorSNO.Id];//Tags[MarkerKeys.ConversationList].Id; int snoConversationList = WorldGenerator.DefaultConversationLists[(int)this.SNO];//Tags[MarkerKeys.ConversationList].Id;
Logger.Trace(" (ReadTags) actor {0} GlobalID {2} has a conversation list {1}", NameSNOId, snoConversationList, GlobalID); Logger.Trace(" (ReadTags) actor {0} GlobalID {2} has a conversation list {1}", NameSNO, snoConversationList, GlobalID);
if (DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.ConversationList].ContainsKey(snoConversationList)) if (DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.ConversationList].ContainsKey(snoConversationList))
ConversationList = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.ConversationList][snoConversationList].Data as DiIiS_NA.Core.MPQ.FileFormats.ConversationList; ConversationList = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.ConversationList][snoConversationList].Data as DiIiS_NA.Core.MPQ.FileFormats.ConversationList;
else else
if (snoConversationList != -1) if (snoConversationList != -1)
Logger.Warn("Actor {0} - Conversation list {1} not found!", NameSNOId, snoConversationList); Logger.Warn("Actor {0} - Conversation list {1} not found!", NameSNO, snoConversationList);
} }
@ -1402,7 +1409,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override string ToString() public override string ToString()
{ {
return string.Format("[Actor] [Type: {0}] SNOId:{1} GlobalId: {2} Position: {3} Name: {4}", this.ActorType, this.ActorSNO.Id, this.GlobalID, this.Position, this.ActorSNO.Name); return string.Format("[Actor] [Type: {0}] SNOId:{1} GlobalId: {2} Position: {3} Name: {4}", this.ActorType, this.SNO, this.GlobalID, this.Position, this.Name);
} }
} }

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Logging;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Math;
//Blizzless Project 2022 //Blizzless Project 2022
@ -25,45 +26,47 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
public static class ActorFactory public static class ActorFactory
{ {
private static readonly Dictionary<int, Type> SNOHandlers = new Dictionary<int, Type>(); private static readonly Dictionary<ActorSno, Type> SNOHandlers = new Dictionary<ActorSno, Type>();
private static Logger Logger = new Logger("ActorFactory"); private static Logger Logger = new Logger("ActorFactory");
static ActorFactory() static ActorFactory()
{ {
LoadSNOHandlers(); SNOHandlers = Assembly.GetExecutingAssembly().GetTypes()
} .Where(x => x.IsSubclassOf(typeof(Actor)))
.Select(x => new { Type = x, Attribute = x.GetCustomAttributes<HandledSNOAttribute>(true).FirstOrDefault() })
.Where(x => x.Attribute != null)
.SelectMany(x => x.Attribute.SNOIds.Select(a => new { x.Type, Sno = a }))
.ToDictionary(x => x.Sno, x => x.Type);
}
public static void LazyCreate(World world, int snoId, TagMap tags, Vector3D spawn, Action<Actor, Vector3D> OnCreate) public static void LazyCreate(World world, ActorSno sno, TagMap tags, Vector3D spawn, Action<Actor, Vector3D> OnCreate)
{ {
var actor = Create(world, snoId, tags); var actor = Create(world, sno, tags);
if (actor != null) if (actor != null)
OnCreate.Invoke(actor, spawn); OnCreate.Invoke(actor, spawn);
} }
public static Actor Create(World world, int snoId, TagMap tags) public static Actor Create(World world, ActorSno sno, TagMap tags)
{ {
if (!MPQStorage.Data.Assets[SNOGroup.Actor].ContainsKey(snoId)) if (!MPQStorage.Data.Assets[SNOGroup.Actor].ContainsKey((int)sno))
{ {
//Logger.Warn("Actor asset not found, Id: {0}", snoId); //Logger.Warn("Actor asset not found, Id: {0}", snoId);
return null; return null;
} }
switch (snoId) switch (sno)
{ {
case 6572: case ActorSno._woodwraith_a_01:
case 139454: case ActorSno._woodwraith_a_02:
case 139456: case ActorSno._woodwraith_a_03:
case 170324: case ActorSno._woodwraith_b_01:
case 170325: case ActorSno._woodwraith_b_02:
case 495: case ActorSno._woodwraith_b_03:
case 496: case ActorSno._woodwraith_unique_a:
int variable = DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 3); switch (DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 3) / 2)
switch (variable)
{ {
case 0: snoId = 470241; break; case 0: sno = ActorSno._ls_woodwraith; break;
case 1: snoId = 470241; break; case 1: sno = ActorSno._p4_woodwraith_a; break;
case 2: snoId = 430928; break;
case 3: snoId = 430928; break;
} }
break; break;
} }
@ -78,23 +81,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
if (world.Game.CurrentAct == 3000 && !world.IsPvP if (world.Game.CurrentAct == 3000 && !world.IsPvP
&& tags.ContainsKey(MarkerKeys.StoryModeOnly) && tags.ContainsKey(MarkerKeys.StoryModeOnly)
&& tags[MarkerKeys.StoryModeOnly] == 1 && tags[MarkerKeys.StoryModeOnly] == 1
&& snoId != 6442) //only-Adventure Mode && sno != ActorSno._waypoint) //only-Adventure Mode
return null; return null;
if (tags.ContainsKey(MarkerKeys.RiftOnly) && tags[MarkerKeys.RiftOnly] == 1) //Rift Mode if (tags.ContainsKey(MarkerKeys.RiftOnly) && tags[MarkerKeys.RiftOnly] == 1) //Rift Mode
return null; return null;
var actorAsset = MPQStorage.Data.Assets[SNOGroup.Actor][snoId]; var actorAsset = MPQStorage.Data.Assets[SNOGroup.Actor][(int)sno];
var actorData = actorAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor; var actorData = actorAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor;
if (actorData == null) if (actorData == null)
{ {
Logger.Warn("Actor data not found, Id: {0}", snoId); Logger.Warn("Actor data not found, Id: {0}", sno);
return null; return null;
} }
if (actorData.Type == ActorType.Invalid) if (actorData.Type == ActorType.Invalid)
{ {
Logger.Warn("Actor type is Invalid, Id: {0}", snoId); Logger.Warn("Actor type is Invalid, Id: {0}", sno);
return null; return null;
} }
@ -104,14 +107,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
} }
// see if we have an implementation for actor. // see if we have an implementation for actor.
if (SNOHandlers.ContainsKey(snoId)) if (SNOHandlers.ContainsKey(sno))
return (Actor)Activator.CreateInstance(SNOHandlers[snoId], new object[] { world, snoId, tags }); return (Actor)Activator.CreateInstance(SNOHandlers[sno], new object[] { world, sno, tags });
switch (actorData.Type) switch (actorData.Type)
{ {
case ActorType.Monster: case ActorType.Monster:
if (tags.ContainsKey(MarkerKeys.ConversationList)) if (tags.ContainsKey(MarkerKeys.ConversationList))
return new InteractiveNPC(world, snoId, tags); return new InteractiveNPC(world, sno, tags);
else else
if (!MPQStorage.Data.Assets[SNOGroup.Monster].ContainsKey(actorData.MonsterSNO)) if (!MPQStorage.Data.Assets[SNOGroup.Monster].ContainsKey(actorData.MonsterSNO))
return null; return null;
@ -119,29 +122,29 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
var monsterAsset = MPQStorage.Data.Assets[SNOGroup.Monster][actorData.MonsterSNO]; var monsterAsset = MPQStorage.Data.Assets[SNOGroup.Monster][actorData.MonsterSNO];
var monsterData = monsterAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Monster; var monsterData = monsterAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Monster;
if (monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Breakable) if (monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Breakable)
return new Gizmo(world, snoId, tags); return new Gizmo(world, sno, tags);
if (monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Ally || if (monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Ally ||
monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Helper || monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Helper ||
monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Scenery) monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Scenery)
return new NPC(world, snoId, tags); return new NPC(world, sno, tags);
else else
if (actorAsset.Name.ToLower().Contains("unique")) if (actorAsset.Name.ToLower().Contains("unique"))
return new Unique(world, snoId, tags); return new Unique(world, sno, tags);
else else
return new Monster(world, snoId, tags); return new Monster(world, sno, tags);
case ActorType.Gizmo: case ActorType.Gizmo:
switch (actorData.TagMap[ActorKeys.GizmoGroup]) switch (actorData.TagMap[ActorKeys.GizmoGroup])
{ {
case GizmoGroup.LootContainer: case GizmoGroup.LootContainer:
return new LootContainer(world, snoId, tags); return new LootContainer(world, sno, tags);
case GizmoGroup.Door: case GizmoGroup.Door:
return new Door(world, snoId, tags); return new Door(world, sno, tags);
case GizmoGroup.DestructibleLootContainer: case GizmoGroup.DestructibleLootContainer:
return new DesctructibleLootContainer(world, snoId, true, tags); return new DesctructibleLootContainer(world, sno, true, tags);
case GizmoGroup.Destructible: case GizmoGroup.Destructible:
case GizmoGroup.Passive: case GizmoGroup.Passive:
case GizmoGroup.Barricade: case GizmoGroup.Barricade:
return new DesctructibleLootContainer(world, snoId, false, tags); return new DesctructibleLootContainer(world, sno, false, tags);
case GizmoGroup.Portal: case GizmoGroup.Portal:
//Prevent Development Hell portal from showing //Prevent Development Hell portal from showing
if (tags.ContainsKey(MarkerKeys.DestinationWorld) && tags[MarkerKeys.DestinationWorld].Id == 222591) if (tags.ContainsKey(MarkerKeys.DestinationWorld) && tags[MarkerKeys.DestinationWorld].Id == 222591)
@ -149,37 +152,37 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
if (tags.ContainsKey(MarkerKeys.DestinationWorld) && tags[MarkerKeys.DestinationWorld].Id == 443346) if (tags.ContainsKey(MarkerKeys.DestinationWorld) && tags[MarkerKeys.DestinationWorld].Id == 443346)
return null; return null;
else else
return new Portal(world, snoId, tags); return new Portal(world, sno, tags);
case GizmoGroup.BossPortal: case GizmoGroup.BossPortal:
return new BossPortal(world, snoId, tags); return new BossPortal(world, sno, tags);
case GizmoGroup.Readable: case GizmoGroup.Readable:
return new Readable(world, snoId, tags); return new Readable(world, sno, tags);
case GizmoGroup.Banner: case GizmoGroup.Banner:
return new Banner(world, snoId, tags); return new Banner(world, sno, tags);
case GizmoGroup.CheckPoint: case GizmoGroup.CheckPoint:
return new Checkpoint(world, snoId, tags); return new Checkpoint(world, sno, tags);
case GizmoGroup.Waypoint: case GizmoGroup.Waypoint:
return new Waypoint(world, snoId, tags); return new Waypoint(world, sno, tags);
case GizmoGroup.Savepoint: case GizmoGroup.Savepoint:
return new Savepoint(world, snoId, tags); return new Savepoint(world, sno, tags);
case GizmoGroup.ProximityTriggered: case GizmoGroup.ProximityTriggered:
return new ProximityTriggeredGizmo(world, snoId, tags); return new ProximityTriggeredGizmo(world, sno, tags);
case GizmoGroup.Shrine: case GizmoGroup.Shrine:
return new Shrine(world, snoId, tags); return new Shrine(world, sno, tags);
case GizmoGroup.Healthwell: case GizmoGroup.Healthwell:
return new Healthwell(world, snoId, tags); return new Healthwell(world, sno, tags);
case GizmoGroup.ExpPool: case GizmoGroup.ExpPool:
return new XPPool(world, snoId, tags); return new XPPool(world, sno, tags);
case GizmoGroup.StartLocations: case GizmoGroup.StartLocations:
return new StartingPoint(world, snoId, tags); return new StartingPoint(world, sno, tags);
case GizmoGroup.HearthPortal: case GizmoGroup.HearthPortal:
return new HearthPortal(world, snoId, tags); return new HearthPortal(world, sno, tags);
case GizmoGroup.DungeonStonePortal: case GizmoGroup.DungeonStonePortal:
return new DungeonStonePortal(world, snoId, tags); return new DungeonStonePortal(world, sno, tags);
case GizmoGroup.Headstone: case GizmoGroup.Headstone:
return new Headstone(world, snoId, tags); return new Headstone(world, sno, tags);
case GizmoGroup.Spawner: case GizmoGroup.Spawner:
return new Spawner(world, snoId, tags); return new Spawner(world, sno, tags);
case GizmoGroup.GateGizmo: case GizmoGroup.GateGizmo:
case GizmoGroup.ActChangeTempObject: case GizmoGroup.ActChangeTempObject:
@ -194,30 +197,30 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
case GizmoGroup.ScriptObject: case GizmoGroup.ScriptObject:
case GizmoGroup.LootRunObelisk: case GizmoGroup.LootRunObelisk:
case GizmoGroup.Unknown: case GizmoGroup.Unknown:
return CreateGizmo(world, snoId, tags); return CreateGizmo(world, sno, tags);
default: default:
#if DEBUG #if DEBUG
Logger.Warn("Unknown gizmo group {0}, id {1}", actorData.TagMap[ActorKeys.GizmoGroup], snoId); Logger.Warn("Unknown gizmo group {0}, id {1}", actorData.TagMap[ActorKeys.GizmoGroup], sno);
#else #else
#endif #endif
return CreateGizmo(world, snoId, tags); return CreateGizmo(world, sno, tags);
} }
case ActorType.ServerProp: case ActorType.ServerProp:
return new ServerProp(world, snoId, tags); return new ServerProp(world, sno, tags);
case ActorType.Environment: case ActorType.Environment:
return new Environment(world, snoId, tags); return new Environment(world, sno, tags);
case ActorType.Item: case ActorType.Item:
return new StaticItem(world, snoId, tags); return new StaticItem(world, sno, tags);
case ActorType.Player: case ActorType.Player:
return new InteractiveNPC(world, snoId, tags); return new InteractiveNPC(world, sno, tags);
default: default:
//Logger.Warn("Unknown Actor type {0}, Id: {1}", actorData.Type, snoId); //Logger.Warn("Unknown Actor type {0}, Id: {1}", actorData.Type, snoId);
return null; return null;
} }
} }
private static Actor CreateGizmo(World world, int snoId, TagMap tags) private static Actor CreateGizmo(World world, ActorSno sno, TagMap tags)
{ {
//if (tags.ContainsKey(MarkerKeys.DestinationWorld)) //trying to spawn all portals //if (tags.ContainsKey(MarkerKeys.DestinationWorld)) //trying to spawn all portals
//{ //{
@ -225,24 +228,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
//return new Portal(world, snoId, tags); //return new Portal(world, snoId, tags);
//} //}
return new Gizmo(world, snoId, tags); return new Gizmo(world, sno, tags);
}
public static void LoadSNOHandlers()
{
foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
{
if (!type.IsSubclassOf(typeof(Actor))) continue;
var attributes = (HandledSNOAttribute[])type.GetCustomAttributes(typeof(HandledSNOAttribute), true);
if (attributes.Length == 0) continue;
foreach (var sno in attributes.First().SNOIds)
{
if (!SNOHandlers.ContainsKey(sno))
SNOHandlers.Add(sno, type);
}
}
} }
} }
} }

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Hash;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Logging;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -37,6 +38,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
static readonly Logger Logger = LogManager.CreateLogger(); static readonly Logger Logger = LogManager.CreateLogger();
// "EventPortal" actors
private static readonly ActorSno[] eventPortals = new ActorSno[]
{
ActorSno._x1_westmhub_scoundreleventportal,
ActorSno._x1_westmhub_templareventportal,
ActorSno._x1_westmhub_enchantresseventportal,
ActorSno._x1_westmhub_jewelereventportal,
};
public override ActorType ActorType { get { return ActorType.Gizmo; } } public override ActorType ActorType { get { return ActorType.Gizmo; } }
private int Encounter; private int Encounter;
@ -45,8 +55,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
private int DestPoint; private int DestPoint;
private ResolvedPortalDestination Destination { get; set; } private ResolvedPortalDestination Destination { get; set; }
public BossPortal(World world, int snoId, TagMap tags) public BossPortal(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field2 = 0x9;//16; this.Field2 = 0x9;//16;
@ -103,75 +113,75 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
} }
DestPoint = bossEncounter.I11; DestPoint = bossEncounter.I11;
//get EncounterSNO //get EncounterSNO
switch (this.ActorSNO.Id) switch (this.SNO)
{ {
case 168932: //CainIntro case ActorSno._boss_portal_cainintro: //CainIntro
this.Encounter = 168925; this.Encounter = 168925;
break; break;
case 159573: //Leoric case ActorSno._boss_portal_skeletonking: //Leoric
this.Encounter = 159592; this.Encounter = 159592;
break; break;
case 183032: //SpiderQueen case ActorSno._boss_portal_spiderqueen: //SpiderQueen
this.Encounter = 181436; this.Encounter = 181436;
break; break;
case 158944: //Butcher case ActorSno._boss_portal_butcher: //Butcher
this.Encounter = 158915; this.Encounter = 158915;
break; break;
case 195234: //Maghda case ActorSno._boss_portal_maghda: //Maghda
this.Encounter = 195226; this.Encounter = 195226;
break; break;
case 159578: //Cain Death case ActorSno._boss_portal_binkleshulkout: //Cain Death
this.Encounter = 159591; this.Encounter = 159591;
break; break;
//case 159578: //Belial Audience //case 159578: //Belial Audience
//this.Encounter = 162231; //this.Encounter = 162231;
//break; //break;
case 159580: //Adria Rescue case ActorSno._boss_portal_adriasewer: //Adria Rescue
this.Encounter = 159584; this.Encounter = 159584;
break; break;
case 159581: //Zoltun Kulle case ActorSno._boss_portal_blacksoulstone: //Zoltun Kulle
this.Encounter = 159586; this.Encounter = 159586;
break; break;
case 159574: //Belial case ActorSno._boss_portal_belial: //Belial
this.Encounter = 159585; this.Encounter = 159585;
break; break;
case 226784: //SiegeBreaker case ActorSno._boss_portal_siegebreaker: //SiegeBreaker
this.Encounter = 226716; this.Encounter = 226716;
break; break;
case 161278: //Cydaea case ActorSno._boss_portal_mistressofpain: //Cydaea
this.Encounter = 161246; this.Encounter = 161246;
break; break;
case 159575: //Azmodan case ActorSno._boss_portal_azmodan: //Azmodan
this.Encounter = 159582; this.Encounter = 159582;
break; break;
case 159576: //Adria_Betrayal case ActorSno._boss_portal_adriabetrayal: //Adria_Betrayal
this.Encounter = 159583; this.Encounter = 159583;
break; break;
case 182963: //Iskatu case ActorSno._boss_portal_1000monsterfight: //Iskatu
this.Encounter = 182960; this.Encounter = 182960;
break; break;
case 161276: //Rakanoth case ActorSno._boss_portal_despair: //Rakanoth
this.Encounter = 161247; this.Encounter = 161247;
break; break;
case 220551: //Imperius_Spire case ActorSno._bossportal_imperius_spirebase: //Imperius_Spire
this.Encounter = 220541; this.Encounter = 220541;
break; break;
case 161279: //Diablo case ActorSno._boss_portal_diablo: //Diablo
this.Encounter = 161280; this.Encounter = 161280;
break; break;
case 309883: //Urzael case ActorSno._x1_urzael_bossportal: //Urzael
this.Encounter = 298128; this.Encounter = 298128;
break; break;
case 293005: //Adria case ActorSno._x1_boss_portal_adria: //Adria
this.Encounter = 293007; this.Encounter = 293007;
break; break;
case 296314: //BatteringRam case ActorSno._x1_boss_portal_batteringram: //BatteringRam
this.Encounter = 296315; this.Encounter = 296315;
break; break;
case 374257: //Malthael case ActorSno._x1_fortress_malthael_boss_portal: //Malthael
this.Encounter = 278965; this.Encounter = 278965;
break; break;
case 380766: case ActorSno._boss_portal_greed:
this.Encounter = 380760; this.Encounter = 380760;
break; break;
default: default:
@ -186,9 +196,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
StartingPointActorTag = DestPoint StartingPointActorTag = DestPoint
}; };
} }
public static bool setActorOperable(World world, Int32 snoId, bool status) public static bool SetActorOperable(World world, ActorSno sno, bool status)
{ {
var actor = world.GetActorBySNO(snoId); var actor = world.GetActorBySNO(sno);
if (actor == null) if (actor == null)
return false; return false;
@ -205,7 +215,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
} }
public override bool Reveal(Player player) public override bool Reveal(Player player)
{ {
if (this.ActorSNO.Name.EndsWith("EventPortal")) return false; if (eventPortals.Contains(this.SNO)) return false;
if (!base.Reveal(player)) if (!base.Reveal(player))
return false; return false;
/* /*
@ -220,7 +230,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
} }
}); });
//*/ //*/
player.InGameClient.SendMessage(new DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal.PortalSpecifierMessage() player.InGameClient.SendMessage(new PortalSpecifierMessage()
{ {
ActorID = this.DynamicID(player), ActorID = this.DynamicID(player),
Destination = this.Destination Destination = this.Destination
@ -235,7 +245,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override void OnTargeted(Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
Logger.Trace("(OnTargeted) BossPortal has been activated, Id: {0}", this.ActorSNO.Id); Logger.Trace("(OnTargeted) BossPortal has been activated, Id: {0}", this.SNO);
if (this.Encounter == 0) return; if (this.Encounter == 0) return;
//if (this.World.Game.CurrentEncounter.activated) return; //if (this.World.Game.CurrentEncounter.activated) return;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -9,8 +10,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
public override ActorType ActorType { get { return ActorType.Environment; } } public override ActorType ActorType { get { return ActorType.Environment; } }
public Environment(World world, int snoId, TagMap tags) public Environment(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field2 = 0x10;//16; this.Field2 = 0x10;//16;
this.Field7 = 0x00000000; this.Field7 = 0x00000000;

View File

@ -2,6 +2,7 @@
using System; using System;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Logging;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -20,8 +21,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override ActorType ActorType { get { return ActorType.Gizmo; } } public override ActorType ActorType { get { return ActorType.Gizmo; } }
protected Logger Logger = new Logger("Gizmo"); protected Logger Logger = new Logger("Gizmo");
public Gizmo(World world, int snoId, TagMap tags, bool is_marker = false) public Gizmo(World world, ActorSno sno, TagMap tags, bool is_marker = false)
: base(world, snoId, tags, is_marker) : base(world, sno, tags, is_marker)
{ {
this.Field2 = 0x9;//16; this.Field2 = 0x9;//16;
this.Field7 = 0x00000001; this.Field7 = 0x00000001;
@ -41,16 +42,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override void OnTargeted(Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
if (this.Attributes[GameAttribute.Disabled] == true) return; if (this.Attributes[GameAttribute.Disabled] == true) return;
Logger.Trace("(OnTargeted) Gizmo has been activated! Id: {0}, Type: {1}", this.ActorSNO.Id, this.ActorData.TagMap[ActorKeys.GizmoGroup]); Logger.Trace("(OnTargeted) Gizmo has been activated! Id: {0}, Type: {1}", this.SNO, this.ActorData.TagMap[ActorKeys.GizmoGroup]);
//handling quest triggers //handling quest triggers
if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id)) if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{ {
var trigger = this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id]; var trigger = this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
{ {
this.World.Game.QuestProgress.UpdateCounter(this.ActorSNO.Id); this.World.Game.QuestProgress.UpdateCounter((int)this.SNO);
if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id].counter) if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO].counter)
try try
{ {
trigger.questEvent.Execute(this.World); // launch a questEvent trigger.questEvent.Execute(this.World); // launch a questEvent
@ -61,27 +62,27 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
} }
} }
} }
else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id)) else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{ {
var trigger = this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id]; var trigger = this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
{ {
this.World.Game.SideQuestProgress.UpdateSideCounter(this.ActorSNO.Id); this.World.Game.SideQuestProgress.UpdateSideCounter((int)this.SNO);
if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id].counter) if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO].counter)
trigger.questEvent.Execute(this.World); // launch a questEvent trigger.questEvent.Execute(this.World); // launch a questEvent
} }
} }
if (this.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(this.ActorSNO.Id)) if (this.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey((int)this.SNO))
{ {
var trigger = this.World.Game.SideQuestProgress.GlobalQuestTriggers[this.ActorSNO.Id]; var trigger = this.World.Game.SideQuestProgress.GlobalQuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
{ {
this.World.Game.SideQuestProgress.UpdateGlobalCounter(this.ActorSNO.Id); this.World.Game.SideQuestProgress.UpdateGlobalCounter((int)this.SNO);
if (trigger.count == this.World.Game.SideQuestProgress.GlobalQuestTriggers[this.ActorSNO.Id].counter) if (trigger.count == this.World.Game.SideQuestProgress.GlobalQuestTriggers[(int)this.SNO].counter)
try try
{ {
trigger.questEvent.Execute(this.World); // launch a questEvent trigger.questEvent.Execute(this.World); // launch a questEvent
this.World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(this.ActorSNO.Id); this.World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)this.SNO);
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -2,17 +2,18 @@
using System; using System;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class HandledSNOAttribute : Attribute public sealed class HandledSNOAttribute : Attribute
{ {
public List<int> SNOIds { get; private set; } public List<ActorSno> SNOIds { get; private set; }
public HandledSNOAttribute(params int[] snoIds) public HandledSNOAttribute(params ActorSno[] snoIds)
{ {
this.SNOIds = new List<int>(); this.SNOIds = new List<ActorSno>();
this.SNOIds.AddRange(snoIds); this.SNOIds.AddRange(snoIds);
} }
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions;
@ -25,8 +26,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
public class Artisan : InteractiveNPC public class Artisan : InteractiveNPC
{ {
public Artisan(World world, int snoId, TagMap tags) public Artisan(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;
Interactions.Add(new CraftInteraction()); Interactions.Add(new CraftInteraction());

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
@ -9,15 +10,16 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
[HandledSNO(0x0002FA63 /* PT_Blacksmith_ForgeWeaponShortcut.acr */, [HandledSNO(
0x0002FA64 /*PT_Blacksmith_ForgeArmorShortcut.acr */, ActorSno._pt_blacksmith_forgeweaponshortcut /* PT_Blacksmith_ForgeWeaponShortcut.acr */,
0x0002FA62 /*PT_Blacksmith_RepairShortcut.acr */, ActorSno._pt_blacksmith_forgearmorshortcut /*PT_Blacksmith_ForgeArmorShortcut.acr */,
212519 /* Actor PT_Jeweler_AddSocketShortcut */, ActorSno._pt_blacksmith_repairshortcut /*PT_Blacksmith_RepairShortcut.acr */,
212517 /* Actor PT_Jeweler_CombineShortcut */, ActorSno._pt_jeweler_addsocketshortcut /* Actor PT_Jeweler_AddSocketShortcut */,
212521 /* Actor PT_Jeweler_RemoveGemShortcut */, ActorSno._pt_jeweler_combineshortcut /* Actor PT_Jeweler_CombineShortcut */,
212511 /* Actor PT_Mystic_EnhanceShortcut */, ActorSno._pt_jeweler_removegemshortcut /* Actor PT_Jeweler_RemoveGemShortcut */,
212510 /* Actor PT_Mystic_IdentifyShortcut */, ActorSno._pt_mystic_enhanceshortcut /* Actor PT_Mystic_EnhanceShortcut */,
439975 /* KanaiCube_Stand */)] ActorSno._pt_mystic_identifyshortcut /* Actor PT_Mystic_IdentifyShortcut */
)]
public class ArtisanShortcut : InteractiveNPC public class ArtisanShortcut : InteractiveNPC
{ {
/* /*
@ -42,79 +44,60 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
[442282] kanai_Cube_Wash [442282] kanai_Cube_Wash
[138979] NephalemCube [138979] NephalemCube
//*/ //*/
public ArtisanShortcut(MapSystem.World world, int snoId, TagMap tags) public ArtisanShortcut(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
Attributes[GameAttribute.MinimapActive] = false; Attributes[GameAttribute.MinimapActive] = false;
Attributes[GameAttribute.Conversation_Icon, 0] = 0; Attributes[GameAttribute.Conversation_Icon, 0] = 0;
switch (this.ActorSNO.Id)
{
case 0x0002FA62:
case 0x0002FA63:
case 0x0002FA64:
break;
case 212517:
case 212519:
case 212521:
break;
case 212510:
case 212511:
break;
}
} }
public override void OnTargeted(Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID(player) }); player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID(player) });
switch (this.ActorSNO.Id) switch (this.SNO)
{ {
case 0x0002FA62: case ActorSno._pt_blacksmith_repairshortcut:
case 0x0002FA63: case ActorSno._pt_blacksmith_forgeweaponshortcut:
case 0x0002FA64: case ActorSno._pt_blacksmith_forgearmorshortcut:
player.ArtisanInteraction = "Blacksmith"; player.ArtisanInteraction = "Blacksmith";
break; break;
case 212517: case ActorSno._pt_jeweler_combineshortcut:
case 212519: case ActorSno._pt_jeweler_addsocketshortcut:
case 212521: case ActorSno._pt_jeweler_removegemshortcut:
player.ArtisanInteraction = "Jeweler"; player.ArtisanInteraction = "Jeweler";
break; break;
case 212510: case ActorSno._pt_mystic_identifyshortcut:
case 212511: case ActorSno._pt_mystic_enhanceshortcut:
player.ArtisanInteraction = "Mystic"; player.ArtisanInteraction = "Mystic";
break; break;
case 439975:
player.ArtisanInteraction = "Cube";
break;
} }
} }
public override bool Reveal(Player player) public override bool Reveal(Player player)
{ {
if(this.World.Game.CurrentAct != 3000) if (this.World.Game.CurrentAct != 3000)
switch (this.ActorSNO.Id)
{ {
case 0x0002FA62: switch (this.SNO)
case 0x0002FA63: {
case 0x0002FA64: case ActorSno._pt_blacksmith_repairshortcut:
if (!player.BlacksmithUnlocked) case ActorSno._pt_blacksmith_forgeweaponshortcut:
return false; case ActorSno._pt_blacksmith_forgearmorshortcut:
break; if (!player.BlacksmithUnlocked)
case 212517: return false;
case 212519: break;
case 212521: case ActorSno._pt_jeweler_combineshortcut:
if (!player.JewelerUnlocked) case ActorSno._pt_jeweler_addsocketshortcut:
return false; case ActorSno._pt_jeweler_removegemshortcut:
break; if (!player.JewelerUnlocked)
case 212510: return false;
case 212511: break;
if (!player.MysticUnlocked) case ActorSno._pt_mystic_identifyshortcut:
return false; case ActorSno._pt_mystic_enhanceshortcut:
break; if (!player.MysticUnlocked)
return false;
break;
}
} }
if (this.ActorSNO.Id == 439975)
if (!player.KanaiUnlocked)
return false;
return base.Reveal(player); return base.Reveal(player);
} }
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -21,11 +22,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
[HandledSNO(56947 /* PT_Blacksmith.acr */)] [HandledSNO(ActorSno._pt_blacksmith /* PT_Blacksmith.acr */)]
public class Blacksmith : Artisan public class Blacksmith : Artisan
{ {
public Blacksmith(World world, int snoId, TagMap tags) public Blacksmith(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
// TODO add all blacksmith functionality? /fasbat // TODO add all blacksmith functionality? /fasbat
//this.Attributes[GameAttribute.TeamID] = 0; //this.Attributes[GameAttribute.TeamID] = 0;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.ItemsSystem; using DiIiS_NA.GameServer.GSSystem.ItemsSystem;
@ -13,11 +14,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
[HandledSNO(56949 /* PT_Jewler.acr */)] [HandledSNO(ActorSno._pt_jeweler /* PT_Jewler.acr */)]
public class Jeweler : Artisan public class Jeweler : Artisan
{ {
public Jeweler(World world, int snoId, TagMap tags) public Jeweler(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.ItemsSystem; using DiIiS_NA.GameServer.GSSystem.ItemsSystem;
@ -13,11 +14,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
[HandledSNO(56948 /* PT_Mystic.acr */)] [HandledSNO(ActorSno._pt_mystic /* PT_Mystic.acr */)]
public class Mystic : Artisan public class Mystic : Artisan
{ {
public Mystic(World world, int snoId, TagMap tags) public Mystic(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.ItemsSystem; using DiIiS_NA.GameServer.GSSystem.ItemsSystem;
@ -15,11 +16,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
[HandledSNO(398682 /* P1_LR_TieredRift_Nephalem.acr */)] [HandledSNO(ActorSno._p1_lr_tieredrift_nephalem /* P1_LR_TieredRift_Nephalem.acr */)]
public class Nephalem : Artisan public class Nephalem : Artisan
{ {
public Nephalem(World world, int snoId, TagMap tags) public Nephalem(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.NPC_Is_Operatable] = true; this.Attributes[GameAttribute.NPC_Is_Operatable] = true;
this.Attributes[GameAttribute.Is_NPC] = true; this.Attributes[GameAttribute.Is_NPC] = true;

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Storage; using DiIiS_NA.Core.Storage;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -21,17 +22,17 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{ {
[HandledSNO(429005)] //Zoltun [HandledSNO(ActorSno._p2_hq_zoltunkulle)] //Zoltun
//[HandledSNO(431095)] //Wardrobe //[HandledSNO(431095)] //Wardrobe
public class ZoltunNPC : Artisan public class ZoltunNPC : Artisan
{ {
public ZoltunNPC(MapSystem.World world, int snoID, TagMap tags) public ZoltunNPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
if (world.Game.CurrentAct == 3000) if (world.Game.CurrentAct == 3000)
{ {
this.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(430146)); this.Conversations.Add(new ConversationInteraction(430146));
//[430335] [Worlds] a3dun_ruins_frost_city_a_02 //[430335] [Worlds] a3dun_ruins_frost_city_a_02
//[428493] [Worlds] a3dun_ruins_frost_city_a_01 //[428493] [Worlds] a3dun_ruins_frost_city_a_01
//this.Attributes[GameAttribute.Conversation_Icon, 0] = 1; //this.Attributes[GameAttribute.Conversation_Icon, 0] = 1;
@ -39,7 +40,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
} }
} }
public override void OnTargeted(PlayerSystem.Player player, MessageSystem.Message.Definitions.World.TargetMessage message) public override void OnTargeted(Player player, MessageSystem.Message.Definitions.World.TargetMessage message)
{ {
base.OnTargeted(player, message);//player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(MessageSystem.Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID }); base.OnTargeted(player, message);//player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(MessageSystem.Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID });
player.ArtisanInteraction = "KanaiCube"; player.ArtisanInteraction = "KanaiCube";
@ -47,7 +48,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
public override bool Reveal(Player player) public override bool Reveal(Player player)
{ {
if (this.ActorSNO.Id == 439975) if (this.SNO == ActorSno._kanaicube_stand)
if (!player.KanaiUnlocked) if (!player.KanaiUnlocked)
Interactions.Clear(); Interactions.Clear();
else else
@ -59,18 +60,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
} }
} }
[HandledSNO( [HandledSNO(ActorSno._kanaicube_stand /* Actor KanaiCube_Stand */)]
439975 /* Actor KanaiCube_Stand */)]
public class CubeShortcut : InteractiveNPC public class CubeShortcut : InteractiveNPC
{ {
public CubeShortcut(MapSystem.World world, int snoId, TagMap tags) public CubeShortcut(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
Attributes[GameAttribute.MinimapActive] = true; Attributes[GameAttribute.MinimapActive] = true;
Attributes[GameAttribute.Conversation_Icon, 0] = 0; Attributes[GameAttribute.Conversation_Icon, 0] = 0;
} }
public override void OnTargeted(PlayerSystem.Player player, MessageSystem.Message.Definitions.World.TargetMessage message) public override void OnTargeted(Player player, MessageSystem.Message.Definitions.World.TargetMessage message)
{ {
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID(player) }); player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID(player) });
player.ArtisanInteraction = "Cube"; player.ArtisanInteraction = "Cube";

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022 //Blizzless Project 2022
using System; using System;
using System.Collections.Generic;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Linq; using System.Linq;
//Blizzless Project 2022 //Blizzless Project 2022
@ -10,32 +11,54 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
class Banner : Gizmo class Banner : Gizmo
{ {
public Banner(World world, int snoId, TagMap tags) private static readonly Dictionary<int, ActorSno[]> bannerActors = new Dictionary<int, ActorSno[]>()
: base(world, snoId, tags)
{ {
if (this.ActorSNO.Name.Contains("Player_2")) [0] = new ActorSno[] {
this.BannerPlayerIndex = 1; ActorSno._banner_player_1,
else if (this.ActorSNO.Name.Contains("Player_3")) ActorSno._emotebanner_player_1,
this.BannerPlayerIndex = 2; ActorSno._banner_player_1_act2,
else if (this.ActorSNO.Name.Contains("Player_4")) ActorSno._emotebanner_player_1_lit,
this.BannerPlayerIndex = 3; ActorSno._banner_player_1_act5,
},
[1] = new ActorSno[] {
ActorSno._banner_player_2,
ActorSno._emotebanner_player_2,
ActorSno._banner_player_2_act2,
ActorSno._banner_player_2_act5,
},
[2] = new ActorSno[] {
ActorSno._banner_player_3,
ActorSno._emotebanner_player_3,
ActorSno._banner_player_3_act2,
ActorSno._banner_player_3_act5,
},
[3] = new ActorSno[] {
ActorSno._banner_player_4,
ActorSno._emotebanner_player_4,
ActorSno._banner_player_4_act2,
ActorSno._banner_player_4_act5,
},
};
public Banner(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.BannerPlayerIndex = bannerActors.FirstOrDefault(x => x.Value.Contains(this.SNO)).Key;
} }
public int BannerPlayerIndex = 0; public int BannerPlayerIndex = 0;
public override bool Reveal(Player player) public override bool Reveal(Player player)
{ {
if (!base.Reveal(player)) return base.Reveal(player);
return false; }
return true;
}
public override void OnTargeted(Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
Logger.Trace("(OnTargeted) Banner has been activated "); Logger.Trace("(OnTargeted) Banner has been activated ");

View File

@ -19,65 +19,65 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO( [HandledSNO(
5350, //Leoric King ActorSno._skeletonking, //Leoric King
51341, //Aranea ActorSno._spiderqueen, //Aranea
3526, //Butcher ActorSno._butcher, //Butcher
6031, //Maghda ActorSno._maghda, //Maghda
80509, //Zoltun Kulle ActorSno._zoltunkulle, //Zoltun Kulle
62975, //Belial (small) ActorSno._belial_trueform, //Belial (small)
3349, //Belial (big) ActorSno._belial, //Belial (big)
87642, //Gluttony ActorSno._gluttony, //Gluttony
96192, //Siegebreaker ActorSno._siegebreakerdemon, //Siegebreaker
95250, //Cydaea ActorSno._mistressofpain, //Cydaea
89690, //Azmodan ActorSno._azmodan, //Azmodan
148449, //Izual ActorSno._bigred_izual, //Izual
196102, //Iskatu ActorSno._terrordemon_a_unique_1000monster, //Iskatu
4630, //Despair (Rakanoth) ActorSno._despair, //Despair (Rakanoth)
114917, //Diablo ActorSno._diablo, //Diablo
133562, //Diablo's shadow ActorSno._terrordiablo, //Diablo's shadow
291368, //Urzael ActorSno._x1_urzael_boss, //Urzael
279394, //Adria ActorSno._x1_adria_boss, //Adria
297730, //Malthael ActorSno._x1_malthael_boss, //Malthael
//Nephalem Bosses //Nephalem Bosses
358429, //X1_LR_Boss_MistressofPain ActorSno._x1_lr_boss_mistressofpain, //X1_LR_Boss_MistressofPain
358489, //X1_LR_Boss_Angel_Corrupt_A ActorSno._x1_lr_boss_angel_corrupt_a, //X1_LR_Boss_Angel_Corrupt_A
358614, //X1_LR_Boss_creepMob_A ActorSno._x1_lr_boss_creepmob_a, //X1_LR_Boss_creepMob_A
359094, //X1_LR_Boss_SkeletonSummoner_C ActorSno._x1_lr_boss_skeletonsummoner_c, //X1_LR_Boss_SkeletonSummoner_C
359688, //X1_LR_Boss_Succubus_A ActorSno._x1_lr_boss_succubus_a, //X1_LR_Boss_Succubus_A
360281, //X1_LR_Boss_Snakeman_Melee_Belial ActorSno._x1_lr_boss_snakeman_melee_belial, //X1_LR_Boss_Snakeman_Melee_Belial
360636, //X1_LR_Boss_TerrorDemon_A ActorSno._x1_lr_boss_terrordemon_a, //X1_LR_Boss_TerrorDemon_A
434201, //P4_LR_Boss_Sandmonster_Turret ActorSno._p4_lr_boss_sandmonster_turret, //P4_LR_Boss_Sandmonster_Turret
343743, //x1_LR_Boss_SkeletonKing ActorSno._x1_lr_boss_skeletonking, //x1_LR_Boss_SkeletonKing
343751, //x1_LR_Boss_Gluttony ActorSno._x1_lr_boss_gluttony, //x1_LR_Boss_Gluttony
343759, //x1_LR_Boss_Despair ActorSno._x1_lr_boss_despair, //x1_LR_Boss_Despair
343767, //x1_LR_Boss_MalletDemon ActorSno._x1_lr_boss_malletdemon, //x1_LR_Boss_MalletDemon
344119, //X1_LR_Boss_morluSpellcaster_Ice ActorSno._x1_lr_boss_morluspellcaster_ice, //X1_LR_Boss_morluSpellcaster_Ice
344389, //X1_LR_Boss_SandMonster ActorSno._x1_lr_boss_sandmonster, //X1_LR_Boss_SandMonster
345004, //X1_LR_Boss_morluSpellcaster_Fire ActorSno._x1_lr_boss_morluspellcaster_fire, //X1_LR_Boss_morluSpellcaster_Fire
346563, //X1_LR_Boss_DeathMaiden ActorSno._x1_lr_boss_deathmaiden, //X1_LR_Boss_DeathMaiden
353517, //X1_LR_Boss_Secret_Cow ActorSno._x1_lr_boss_secret_cow, //X1_LR_Boss_Secret_Cow
353535, //X1_LR_Boss_Squigglet ActorSno._x1_lr_boss_squigglet, //X1_LR_Boss_Squigglet
353823, //X1_LR_Boss_sniperAngel ActorSno._x1_lr_boss_sniperangel, //X1_LR_Boss_sniperAngel
353874, //X1_LR_Boss_westmarchBrute ActorSno._x1_lr_boss_westmarchbrute, //X1_LR_Boss_westmarchBrute
354050, //X1_LR_Boss_Dark_Angel ActorSno._x1_lr_boss_dark_angel, //X1_LR_Boss_Dark_Angel
354144, //X1_LR_Boss_BigRed_Izual ActorSno._x1_lr_boss_bigred_izual, //X1_LR_Boss_BigRed_Izual
354652, //X1_LR_Boss_demonFlyerMega ActorSno._x1_lr_boss_demonflyermega, //X1_LR_Boss_demonFlyerMega
426943, //X1_LR_Boss_RatKing_A ActorSno._x1_lr_boss_ratking_a, //X1_LR_Boss_RatKing_A
428323, //X1_LR_Boss_RatKing_A_UI ActorSno._x1_lr_boss_ratking_a_ui, //X1_LR_Boss_RatKing_A_UI
429010, //X1_LR_Boss_TerrorDemon_A_BreathMinion ActorSno._x1_lr_boss_terrordemon_a_breathminion, //X1_LR_Boss_TerrorDemon_A_BreathMinion
357917, //x1_LR_Boss_Butcher ActorSno._x1_lr_boss_butcher, //x1_LR_Boss_Butcher
358208, //X1_LR_Boss_ZoltunKulle ActorSno._x1_lr_boss_zoltunkulle, //X1_LR_Boss_ZoltunKulle
360766, //X1_LR_Boss_Minion_shadowVermin_A ActorSno._x1_lr_boss_minion_shadowvermin_a, //X1_LR_Boss_Minion_shadowVermin_A
360794, //X1_LR_Boss_Minion_TerrorDemon_Clone_C ActorSno._x1_lr_boss_minion_terrordemon_clone_c, //X1_LR_Boss_Minion_TerrorDemon_Clone_C
360327, //X1_LR_Boss_Minion_Swarm_A ActorSno._x1_lr_boss_minion_swarm_a, //X1_LR_Boss_Minion_Swarm_A
360329 //X1_LR_Boss_Minion_electricEel_B ActorSno._x1_lr_boss_minion_electriceel_b //X1_LR_Boss_Minion_electricEel_B
)/*Act Bosses*/] )/*Act Bosses*/]
public sealed class Boss : Monster public sealed class Boss : Monster
{ {
public Boss(MapSystem.World world, int snoId, TagMap tags) public Boss(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
if (snoId == 80509 && world.SNO == WorldSno.a2dun_zolt_lobby) this.SetVisible(false); if (sno == ActorSno._zoltunkulle && world.SNO == WorldSno.a2dun_zolt_lobby) this.SetVisible(false);
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;
//this.Attributes[GameAttribute.Immune_To_Charm] = true; //this.Attributes[GameAttribute.Immune_To_Charm] = true;
this.Attributes[GameAttribute.//Blizzless Project 2022 this.Attributes[GameAttribute.//Blizzless Project 2022
@ -90,13 +90,14 @@ using_Bossbar] = true;
this.Attributes[GameAttribute.TeamID] = 10; this.Attributes[GameAttribute.TeamID] = 10;
this.WalkSpeed *= 0.5f; this.WalkSpeed *= 0.5f;
switch (snoId) MonsterBrain monsterBrain = (Brain as MonsterBrain);
switch (sno)
{ {
case 114917: //Diablo case ActorSno._diablo: //Diablo
//(Brain as MonsterBrain).RemovePresetPower(30592); //(Brain as MonsterBrain).RemovePresetPower(30592);
//(Brain as MonsterBrain).AddPresetPower(136189); //[136189] Diablo_ClawRip //(Brain as MonsterBrain).AddPresetPower(136189); //[136189] Diablo_ClawRip
(Brain as MonsterBrain).AddPresetPower(136223); //Diablo_RingOfFire monsterBrain.AddPresetPower(136223); //Diablo_RingOfFire
(Brain as MonsterBrain).AddPresetPower(136226); //Diablo_HellSpikes monsterBrain.AddPresetPower(136226); //Diablo_HellSpikes
; ;
/* /*
@ -155,30 +156,30 @@ using_Bossbar] = true;
*/ */
break; break;
case 5350://Leoric King case ActorSno._skeletonking://Leoric King
(Brain as MonsterBrain).RemovePresetPower(30592); monsterBrain.RemovePresetPower(30592);
(Brain as MonsterBrain).AddPresetPower(30496); monsterBrain.AddPresetPower(30496);
(Brain as MonsterBrain).AddPresetPower(30504); monsterBrain.AddPresetPower(30504);
(Brain as MonsterBrain).AddPresetPower(73824); monsterBrain.AddPresetPower(73824);
(Brain as MonsterBrain).AddPresetPower(79334); monsterBrain.AddPresetPower(79334);
break; break;
case 3526://Butcher case ActorSno._butcher://Butcher
(Brain as MonsterBrain).AddPresetPower(83008); monsterBrain.AddPresetPower(83008);
break; break;
case 62975://Belial (small) case ActorSno._belial_trueform://Belial (small)
this.HasLoot = false; this.HasLoot = false;
break; break;
case 3349://Belial (big) case ActorSno._belial://Belial (big)
(Brain as MonsterBrain).AddPresetPower(152540); monsterBrain.AddPresetPower(152540);
break; break;
case 6031://Maghda case ActorSno._maghda://Maghda
(Brain as MonsterBrain).AddPresetPower(131744); //summon berserker monsterBrain.AddPresetPower(131744); //summon berserker
//(Brain as MonsterBrain).AddPresetPower(131745); //mothDust //(Brain as MonsterBrain).AddPresetPower(131745); //mothDust
(Brain as MonsterBrain).AddPresetPower(131749); //teleport monsterBrain.AddPresetPower(131749); //teleport
break; break;
case 87642://Gluttony case ActorSno._gluttony://Gluttony
(Brain as MonsterBrain).AddPresetPower(93676); //gas cloud monsterBrain.AddPresetPower(93676); //gas cloud
(Brain as MonsterBrain).AddPresetPower(211292); //slime spawn monsterBrain.AddPresetPower(211292); //slime spawn
break; break;
default: default:
break; break;
@ -202,7 +203,7 @@ using_Bossbar] = true;
public override bool Reveal(PlayerSystem.Player player) public override bool Reveal(PlayerSystem.Player player)
{ {
if (this.ActorSNO.Id == 196102) if (this.SNO == ActorSno._terrordemon_a_unique_1000monster)
{ {
this.Destroy(); this.Destroy();
return false; return false;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
@ -11,11 +12,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(460429)] [HandledSNO(ActorSno._challenge_rift_inspect_armorrack)]
class CR_Glass : Gizmo class CR_Glass : Gizmo
{ {
public CR_Glass(MapSystem.World world, int snoId, TagMap tags) public CR_Glass(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
@ -22,21 +23,20 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
//5747 //5747
[HandledSNO(5744, 89503 // trDun_cath_Chandilier_Trap.acr [HandledSNO(
ActorSno._trdun_cath_chandelier_trap, ActorSno._trdun_cath_braizer_trap // trDun_cath_Chandilier_Trap.acr
)] )]
class CathedralLamp : Gizmo class CathedralLamp : Gizmo
{ {
public CathedralLamp(MapSystem.World world, int snoId, TagMap tags) public CathedralLamp(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
} }
private int[] Unbreakables = new int[] { 81699, 5744, 89503 };
public void ReceiveDamage(Actor source, float damage) public void ReceiveDamage(Actor source, float damage)
{ {
if (this.ActorSNO.Id == 225252 && this.World.Game.CurrentSideQuest != 225253) return; if (this.SNO == ActorSno._trout_highlands_goatman_totem_gharbad && this.World.Game.CurrentSideQuest != 225253) return;
World.BroadcastIfRevealed(plr => new FloatingNumberMessage World.BroadcastIfRevealed(plr => new FloatingNumberMessage
{ {
@ -48,7 +48,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0); Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0);
Attributes.BroadcastChangedIfRevealed(); Attributes.BroadcastChangedIfRevealed();
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.Unbreakables.Contains(this.ActorSNO.Id)) if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.SNO.IsUndestroyable())
Die(source); Die(source);
} }
@ -56,7 +56,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
base.OnTargeted(null, null); base.OnTargeted(null, null);
Logger.Trace("Breaked barricade, id: {0}", this.ActorSNO.Id); Logger.Trace("Breaked barricade, id: {0}", this.SNO);
if (this.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault)) if (this.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault))
World.BroadcastIfRevealed(plr => new PlayAnimationMessage World.BroadcastIfRevealed(plr => new PlayAnimationMessage

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
@ -21,21 +22,20 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(5786 // trDun_cath_Chandilier_Trap.acr [HandledSNO(
ActorSno._trdun_cath_wallcollapse_01// trDun_cath_Chandilier_Trap.acr
)] )]
class CathedralWall : Gizmo class CathedralWall : Gizmo
{ {
public CathedralWall(MapSystem.World world, int snoId, TagMap tags) public CathedralWall(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
} }
private int[] Unbreakables = new int[] { 81699, 5744, 89503 };
public void ReceiveDamage(Actor source, float damage) public void ReceiveDamage(Actor source, float damage)
{ {
if (this.ActorSNO.Id == 225252 && this.World.Game.CurrentSideQuest != 225253) return; if (this.SNO == ActorSno._trout_highlands_goatman_totem_gharbad && this.World.Game.CurrentSideQuest != 225253) return;
World.BroadcastIfRevealed(plr => new FloatingNumberMessage World.BroadcastIfRevealed(plr => new FloatingNumberMessage
{ {
@ -47,7 +47,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0); Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0);
Attributes.BroadcastChangedIfRevealed(); Attributes.BroadcastChangedIfRevealed();
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.Unbreakables.Contains(this.ActorSNO.Id)) if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.SNO.IsUndestroyable())
Die(source); Die(source);
} }
@ -55,7 +55,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
base.OnTargeted(null, null); base.OnTargeted(null, null);
Logger.Trace("Breaked barricade, id: {0}", this.ActorSNO.Id); Logger.Trace("Breaked barricade, id: {0}", this.SNO);
if (this.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault)) if (this.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault))
World.BroadcastIfRevealed(plr => new PlayAnimationMessage World.BroadcastIfRevealed(plr => new PlayAnimationMessage

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -25,11 +26,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(416137 /* x1_OpenWorld_LootRunObelisk_B.acr */)] [HandledSNO(ActorSno._p2_weeklychallenge_obelisk /* x1_OpenWorld_LootRunObelisk_B.acr */)]
public sealed class ChallengeObelisk : Gizmo public sealed class ChallengeObelisk : Gizmo
{ {
public ChallengeObelisk(World world, int snoId, TagMap tags) public ChallengeObelisk(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;
@ -52,11 +53,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
CollFlags = 0; CollFlags = 0;
TickTimer Timeout = new SecondsTickTimer(this.World.Game, 3.5f); TickTimer Timeout = new SecondsTickTimer(this.World.Game, 3.5f);
var Boom = System.Threading.Tasks.Task<bool>.Factory.StartNew(() => WaitToSpawn(Timeout)); var Boom = Task<bool>.Factory.StartNew(() => WaitToSpawn(Timeout));
Boom.ContinueWith(delegate Boom.ContinueWith(delegate
{ {
this.World.GetActorBySNO(473334).SetVisible(true); var actor = this.World.GetActorBySNO(ActorSno._x1_openworld_challenge_rifts_portal);
this.World.GetActorBySNO(473334).Reveal(player); actor.SetVisible(true);
actor.Reveal(player);
World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage() World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage()
{ {
@ -73,8 +75,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
return false; return false;
if (!Attributes[GameAttribute.Operatable]) if (!Attributes[GameAttribute.Operatable])
{ {
this.World.GetActorBySNO(473334).SetVisible(false); var actor = this.World.GetActorBySNO(ActorSno._x1_openworld_challenge_rifts_portal);
this.World.GetActorBySNO(473334).Unreveal(player); actor.SetVisible(false);
actor.Unreveal(player);
} }
else else
{ {

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
@ -19,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
private int NamePrefix = -1; private int NamePrefix = -1;
private int NameSuffix = -1; private int NameSuffix = -1;
public Champion(MapSystem.World world, int snoId, TagMap tags) public Champion(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.Hitpoints_Max] *= 4.0f; this.Attributes[GameAttribute.Hitpoints_Max] *= 4.0f;
this.Attributes[GameAttribute.Immune_To_Charm] = true; this.Attributes[GameAttribute.Immune_To_Charm] = true;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -13,8 +14,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
private bool _checkpointReached = false; private bool _checkpointReached = false;
public Checkpoint(World world, int snoId, TagMap tags) public Checkpoint(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags, false) : base(world, sno, tags, false)
{ {
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
@ -15,11 +16,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(364559, 365097)] [HandledSNO(ActorSno._x1_global_chest_cursedchest, ActorSno._x1_global_chest_cursedchest_b)]
class CursedChest : Gizmo class CursedChest : Gizmo
{ {
public CursedChest(MapSystem.World world, int snoId, TagMap tags) public CursedChest(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
Attributes[GameAttribute.MinimapActive] = true; Attributes[GameAttribute.MinimapActive] = true;
} }

View File

@ -12,14 +12,19 @@ using DiIiS_NA.GameServer.MessageSystem;
using DiIiS_NA.GameServer.GSSystem.TickerSystem; using DiIiS_NA.GameServer.GSSystem.TickerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(364601, 368169)] [HandledSNO(
//364601, 368169 - not found, possible values below
ActorSno._p4_bountygrounds_cursedshrine,
ActorSno._p4_bountygrounds_cursedshrine_a5
)]
class CursedShrine : Gizmo class CursedShrine : Gizmo
{ {
public CursedShrine(MapSystem.World world, int snoId, TagMap tags) public CursedShrine(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
Attributes[GameAttribute.MinimapActive] = true; Attributes[GameAttribute.MinimapActive] = true;
} }

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Helpers.Math;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -29,22 +30,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
class DesctructibleLootContainer : Gizmo class DesctructibleLootContainer : Gizmo
{ {
private static readonly ActorSno[] tombs = new ActorSno[]
{
ActorSno._trout_oldtristramtombstonedestructiblea,
ActorSno._trout_oldtristramtombstonedestructibled,
ActorSno._trout_oldtristramtombstonedestructiblee,
ActorSno._trout_oldtristramtombstonedestructibleb,
ActorSno._tombstone_a_wilderness_trout_wilderness,
ActorSno._tombstone_c_wilderness_trout_wilderness,
ActorSno._tombstone_b_wilderness_trout_wilderness
};
private bool haveDrop; private bool haveDrop;
public DesctructibleLootContainer(World world, int snoId, bool haveDrop, TagMap tags) public DesctructibleLootContainer(World world, ActorSno sno, bool haveDrop, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.haveDrop = haveDrop; this.haveDrop = haveDrop;
} }
private List<int> tombs = new List<int>() { 6155, 6158, 6159, 6156, 74909, 75023, 75132 };
private int[] Unbreakables = new int[] { 81699, 5744, 89503 };
public void ReceiveDamage(Actor source, float damage /* critical, type */) public void ReceiveDamage(Actor source, float damage /* critical, type */)
{ {
if (this.ActorSNO.Id == 225252 && this.World.Game.CurrentSideQuest != 225253) return; if (this.SNO == ActorSno._trout_highlands_goatman_totem_gharbad && this.World.Game.CurrentSideQuest != 225253) return;
World.BroadcastIfRevealed(plr => new FloatingNumberMessage World.BroadcastIfRevealed(plr => new FloatingNumberMessage
{ {
@ -58,7 +65,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes.BroadcastChangedIfRevealed(); Attributes.BroadcastChangedIfRevealed();
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.Unbreakables.Contains(this.ActorSNO.Id)) if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.SNO.IsUndestroyable())
{ {
Die(source); Die(source);
} }
@ -92,9 +99,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
} }
} }
Logger.Trace("Breaked barricade, id: {0}", this.ActorSNO.Id); Logger.Trace("Breaked barricade, id: {0}", this.SNO);
if (source != null && source is Player && this.tombs.Contains(this.ActorSNO.Id)) if (source != null && source is Player && tombs.Contains(this.SNO))
{ {
(source as Player).AddAchievementCounter(74987243307171, 1); (source as Player).AddAchievementCounter(74987243307171, 1);
} }
@ -124,28 +131,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes.BroadcastChangedIfRevealed(); Attributes.BroadcastChangedIfRevealed();
//handling quest triggers //handling quest triggers
if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id)) if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{ {
var trigger = this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id]; var trigger = this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
{ {
this.World.Game.QuestProgress.UpdateCounter(this.ActorSNO.Id); this.World.Game.QuestProgress.UpdateCounter((int)this.SNO);
if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id].counter) if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO].counter)
trigger.questEvent.Execute(this.World); // launch a questEvent trigger.questEvent.Execute(this.World); // launch a questEvent
} }
else else
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
{ {
this.World.Game.QuestProgress.UpdateCounter(this.ActorSNO.Id); this.World.Game.QuestProgress.UpdateCounter((int)this.SNO);
} }
} }
else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id)) else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{ {
var trigger = this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id]; var trigger = this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
{ {
this.World.Game.SideQuestProgress.UpdateSideCounter(this.ActorSNO.Id); this.World.Game.SideQuestProgress.UpdateSideCounter((int)this.SNO);
if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id].counter) if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO].counter)
trigger.questEvent.Execute(this.World); // launch a questEvent trigger.questEvent.Execute(this.World); // launch a questEvent
} }
} }

View File

@ -28,13 +28,13 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(175810)] [HandledSNO(ActorSno._caout_stingingwinds_khamsin_gate)]
class Door : Gizmo class Door : Gizmo
{ {
public bool isOpened = false; public bool isOpened = false;
public Portal NearestPortal = null; public Portal NearestPortal = null;
public Door(World world, int snoId, TagMap tags) public Door(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
var Portals = GetObjectsInRange<Portal>(10f); var Portals = GetObjectsInRange<Portal>(10f);
if (Portals.Count > 0) if (Portals.Count > 0)
@ -49,14 +49,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override bool Reveal(Player player) public override bool Reveal(Player player)
{ {
if (this.ActorSNO.Id == 167185) return false; if (this.SNO == ActorSno._trout_cultists_summoning_portal_b) return false;
if (this.ActorSNO.Id == 207615 && this.World.SNO != WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //dakab door if (this.SNO == ActorSno._a2dun_aqd_godhead_door_largepuzzle && this.World.SNO != WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //dakab door
if (this.ActorSNO.Id == 153836 && this.World.SNO == WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //not dakab door if (this.SNO == ActorSno._a2dun_aqd_godhead_door && this.World.SNO == WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //not dakab door
if (this.ActorSNO.Id == 220337) //Treasure Room door if (this.SNO == ActorSno._a2dun_zolt_random_portal_timed) //Treasure Room door
this.isOpened = true; this.isOpened = true;
if (this.ActorSNO.Id == 178161 && (float)DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.NextDouble() < 0.3f) //Mysterious Cave door if (this.SNO == ActorSno._caout_oasis_mine_entrance_a && (float)DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.NextDouble() < 0.3f) //Mysterious Cave door
this.isOpened = true; this.isOpened = true;
if (!base.Reveal(player)) if (!base.Reveal(player))

View File

@ -30,8 +30,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
private ResolvedPortalDestination Destination { get; set; } private ResolvedPortalDestination Destination { get; set; }
public DungeonStonePortal(World world, int snoId, TagMap tags) public DungeonStonePortal(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
//this.Field2 = 0x9;//16; //this.Field2 = 0x9;//16;
@ -79,7 +79,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
StartingPoint NeededStartingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag); StartingPoint NeededStartingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);
var DestWorld = world.Game.GetWorld((WorldSno)this.Destination.WorldSNO); var DestWorld = world.Game.GetWorld((WorldSno)this.Destination.WorldSNO);
var StartingPoints = DestWorld.GetActorsBySNO(5502); var StartingPoints = DestWorld.GetActorsBySNO(ActorSno._start_location_0);
foreach (var ST in StartingPoints) foreach (var ST in StartingPoints)
{ {
if (ST.CurrentScene.SceneSNO.Id == this.Destination.StartingPointActorTag) if (ST.CurrentScene.SceneSNO.Id == this.Destination.StartingPointActorTag)

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
@ -21,11 +22,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(451547)] //EquipmentManagerTest [HandledSNO(ActorSno._equipmentmanagertest)] //EquipmentManagerTest
class EquipmentManager : InteractiveNPC class EquipmentManager : InteractiveNPC
{ {
public EquipmentManager(MapSystem.World world, int snoID, TagMap tags) public EquipmentManager(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -8,20 +9,20 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO( [HandledSNO(
129345, //maghda ActorSno._maghda_a_tempprojection, //maghda
5360, //Leoric ghost ActorSno._skeletonking_ghost, //Leoric ghost
211014, //Maghda event ActorSno._maghda_nolaugh, //Maghda event
215247, //Diablo_EndGame ActorSno._diablo_endgame, //Diablo_EndGame
186130, //DemonVoiceover ActorSno._demonvoiceover, //DemonVoiceover
321479, 321451, 321454, //A5 voice actors ActorSno._x1_westm_heroworship03_vo, ActorSno._x1_westm_heroworship01_vo, ActorSno._x1_westm_heroworship02_vo, //A5 voice actors
175310, //PT_Mystic_NoVendor_NonGlobalFollower ActorSno._pt_mystic_novendor_nonglobalfollower, //PT_Mystic_NoVendor_NonGlobalFollower
340101, //x1_Urzael_Invisible ActorSno._x1_urzael_invisible, //x1_Urzael_Invisible
373456 //Malthael ghost ActorSno._x1_malthael_deathorbevent //Malthael ghost
)] )]
public class Ghost : InteractiveNPC public class Ghost : InteractiveNPC
{ {
public Ghost(MapSystem.World world, int snoId, TagMap tags) public Ghost(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.CollFlags = 0; this.CollFlags = 0;
this.WalkSpeed = 0; this.WalkSpeed = 0;

View File

@ -19,15 +19,14 @@ using System;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO( [HandledSNO(
5984, //treasureGoblin_A ActorSno._treasuregoblin_a, //treasureGoblin_A
5985, //treasureGoblin_B ActorSno._treasuregoblin_b, //treasureGoblin_B
5987, //treasureGoblin_C ActorSno._treasuregoblin_c //treasureGoblin_C
5988 //treasureGoblin_D
)] )]
public class Goblin : Monster public class Goblin : Monster
{ {
public Goblin(World world, int snoId, TagMap tags)//, int level = 1) public Goblin(World world, ActorSno sno, TagMap tags)//, int level = 1)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
// Override minimap icon in markerset tags // Override minimap icon in markerset tags
this.WalkSpeed = 0; this.WalkSpeed = 0;

View File

@ -1,6 +1,7 @@
 
//Blizzless Project 2022 //Blizzless Project 2022
using System.Linq; using System.Linq;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -12,13 +13,13 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(4860 /* PlayerHeadstone.acr */)] [HandledSNO(ActorSno._playerheadstone /* PlayerHeadstone.acr */)]
class Headstone : Gizmo class Headstone : Gizmo
{ {
public int playerIndex { get; set; } public int playerIndex { get; set; }
public Headstone(World world, int snoId, TagMap tags, int playerIndex = -1) public Headstone(World world, ActorSno sno, TagMap tags, int playerIndex = -1)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.playerIndex = playerIndex; this.playerIndex = playerIndex;
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022 //Blizzless Project 2022
using System.Linq; using System.Linq;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -11,11 +12,16 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(141246, 226343, 226345, 309879)] [HandledSNO(
ActorSno._priest_male_b_nolook,
ActorSno._priest_caldeum,
ActorSno._priest_bastionskeep_healer,
ActorSno._x1_a5_westmhub_healer
)]
public sealed class Healer : InteractiveNPC public sealed class Healer : InteractiveNPC
{ {
public Healer(World world, int snoId, TagMap tags) public Healer(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.TeamID] = 0; this.Attributes[GameAttribute.TeamID] = 0;
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -21,8 +22,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
class Healthwell : Gizmo class Healthwell : Gizmo
{ {
public Healthwell(World world, int snoId, TagMap tags) public Healthwell(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
Attributes[GameAttribute.MinimapActive] = true; Attributes[GameAttribute.MinimapActive] = true;
Attributes[GameAttribute.Gizmo_State] = 0; Attributes[GameAttribute.Gizmo_State] = 0;

View File

@ -32,8 +32,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public Player Owner = null; public Player Owner = null;
public HearthPortal(World world, int snoId, TagMap tags) public HearthPortal(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;
this.SetVisible(false); this.SetVisible(false);

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Helpers.Math;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -23,13 +24,34 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(81610, 105372, 81609, 107419, 106354, 115928, 144328, 176826)] [HandledSNO(
ActorSno._a1_genericvendor_tinker,
ActorSno._a1_uniquevendor_alchemist,
ActorSno._a1_uniquevendor_armorer,
ActorSno._a1_uniquevendor_curios,
ActorSno._a1_uniquevendor_weaponsmith,
ActorSno._a2_uniquevendor_event_mapvendor,
ActorSno._a2_uniquevendor_tinker,
ActorSno._a3_uniquevendor_alchemist
)]
public class HiddenVendor : Vendor public class HiddenVendor : Vendor
{ {
// TODO: extract
private static readonly Dictionary<ActorSno, ulong> criteria = new Dictionary<ActorSno, ulong>
{
[ActorSno._a1_genericvendor_tinker] = 74987243309911,
[ActorSno._a1_uniquevendor_alchemist] = 74987243309912,
[ActorSno._a1_uniquevendor_armorer] = 74987243309913,
[ActorSno._a1_uniquevendor_curios] = 74987243309914,
[ActorSno._a1_uniquevendor_weaponsmith] = 74987243309915,
[ActorSno._a2_uniquevendor_event_mapvendor] = 74987243309918,
[ActorSno._a2_uniquevendor_tinker] = 74987243309920,
[ActorSno._a3_uniquevendor_alchemist] = 74987243309922
};
private bool Enabled = false; private bool Enabled = false;
public HiddenVendor(World world, int snoId, TagMap tags) public HiddenVendor(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Enabled = (FastRandom.Instance.Next(100) < 40); this.Enabled = (FastRandom.Instance.Next(100) < 40);
} }
@ -57,33 +79,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override void OnTargeted(PlayerSystem.Player player, TargetMessage message) public override void OnTargeted(PlayerSystem.Player player, TargetMessage message)
{ {
base.OnTargeted(player, message); base.OnTargeted(player, message);
switch (this.ActorSNO.Id) if (criteria.ContainsKey(SNO))
{ player.GrantCriteria(criteria[SNO]);
case 81610:
player.GrantCriteria(74987243309911);
break;
case 105372:
player.GrantCriteria(74987243309912);
break;
case 81609:
player.GrantCriteria(74987243309913);
break;
case 107419:
player.GrantCriteria(74987243309914);
break;
case 106354:
player.GrantCriteria(74987243309915);
break;
case 115928:
player.GrantCriteria(74987243309918);
break;
case 144328:
player.GrantCriteria(74987243309920);
break;
case 176826:
player.GrantCriteria(74987243309922);
break;
}
} }
} }
} }

View File

@ -10,26 +10,27 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{ {
[HandledSNO(4062 /* Enchantress.acr */)] [HandledSNO(ActorSno._enchantress /* Enchantress.acr */)]
public class Enchantress : Hireling public class Enchantress : Hireling
{ {
public Enchantress(MapSystem.World world, int snoId, TagMap tags) public Enchantress(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
mainSNO = 4062; mainSNO = ActorSno._enchantress;
hirelingSNO = 4482; hirelingSNO = ActorSno._hireling_enchantress;
proxySNO = 192942; proxySNO = ActorSno._hireling_enchantress_proxy;
skillKit = 484938; skillKit = 484938;
hirelingGBID = StringHashHelper.HashItemName("Enchantress"); hirelingGBID = StringHashHelper.HashItemName("Enchantress");
this.Attributes[GameAttribute.Hireling_Class] = 3; this.Attributes[GameAttribute.Hireling_Class] = 3;
} }
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags) public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{ {
return new Enchantress(world, snoId, tags); return new Enchantress(world, sno, tags);
} }
public void SetSkill(Player player, int SkillSNOId) public void SetSkill(Player player, int SkillSNOId)

View File

@ -36,14 +36,15 @@ using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
using DiIiS_NA.GameServer.GSSystem.ItemsSystem; using DiIiS_NA.GameServer.GSSystem.ItemsSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{ {
public class Hireling : InteractiveNPC, IUpdateable public class Hireling : InteractiveNPC, IUpdateable
{ {
protected int mainSNO = -1; protected ActorSno mainSNO = ActorSno.__NONE;
protected int hirelingSNO = -1; protected ActorSno hirelingSNO = ActorSno.__NONE;
protected int proxySNO = -1; protected ActorSno proxySNO = ActorSno.__NONE;
protected int skillKit = -1; protected int skillKit = -1;
protected int hirelingGBID = -1; protected int hirelingGBID = -1;
@ -51,15 +52,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
// Resource generation timing // Resource generation timing
private int _lastResourceUpdateTick; private int _lastResourceUpdateTick;
public bool IsProxy { get { return ActorSNO.Id == proxySNO; } } public bool IsProxy { get { return SNO == proxySNO; } }
public bool IsHireling { get { return ActorSNO.Id == hirelingSNO; } } public bool IsHireling { get { return SNO == hirelingSNO; } }
public bool HasHireling { get { return this.hirelingSNO != -1; } } public bool HasHireling { get { return this.hirelingSNO != ActorSno.__NONE; } }
public bool HasProxy { get { return this.proxySNO != -1; } } public bool HasProxy { get { return this.proxySNO != ActorSno.__NONE; } }
public int PetType { get { return IsProxy ? 22 : 0; } } public int PetType { get { return IsProxy ? 22 : 0; } }
private Dictionary<Player, Dictionary<int, Item>> _equipment = new Dictionary<Player, Dictionary<int, Item>>(); private Dictionary<Player, Dictionary<int, Item>> _equipment = new Dictionary<Player, Dictionary<int, Item>>();
public Hireling(MapSystem.World world, int snoId, TagMap tags) public Hireling(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;
Interactions.Add(new HireInteraction()); Interactions.Add(new HireInteraction());
@ -156,7 +157,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
} }
public virtual Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags) public virtual Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -231,7 +232,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
public override void OnHire(Player player) public override void OnHire(Player player)
{ {
if (hirelingSNO == -1) if (hirelingSNO == ActorSno.__NONE)
return; return;
if (this.World.Game.Players.Count > 1) return; if (this.World.Game.Players.Count > 1) return;
@ -274,7 +275,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
} }
if (player.ActiveHireling == null) if (player.ActiveHireling == null)
return; return;
if (proxySNO == -1) if (proxySNO == ActorSno.__NONE)
return; return;
if (IsHireling || IsProxy) if (IsHireling || IsProxy)
@ -447,7 +448,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
Owner = player.PlayerIndex, Owner = player.PlayerIndex,
Index = 10, Index = 10,
PetId = this.DynamicID(player), PetId = this.DynamicID(player),
Type = this.ActorSNO.Id == 274457 ? 29 : 0, Type = this.SNO == ActorSno._x1_malthael_npc ? 29 : 0,
}); });
return true; return true;

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -21,15 +22,16 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{ {
//[HandledSNO(144681 /* Leah_Party.acr */)] // TODO: Check for copy-paste from Scoundrel
public class Leah : Hireling //[HandledSNO(144681 /* Leah_Party.acr */)]
public class Leah : Hireling
{ {
public Leah(World world, int snoId, TagMap tags) public Leah(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
mainSNO = 4580; mainSNO = ActorSno._leah;
hirelingSNO = 52694; hirelingSNO = ActorSno._hireling_scoundrel;
proxySNO = 192941; proxySNO = ActorSno._hireling_scoundrel_proxy;
skillKit = 0x8AFE; skillKit = 0x8AFE;
hirelingGBID = StringHashHelper.HashItemName("Scoundrel"); hirelingGBID = StringHashHelper.HashItemName("Scoundrel");
Attributes[GameAttribute.Hireling_Class] = 4; Attributes[GameAttribute.Hireling_Class] = 4;
@ -49,9 +51,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
} }
public override Hireling CreateHireling(World world, int snoId, TagMap tags) public override Hireling CreateHireling(World world, ActorSno sno, TagMap tags)
{ {
return new Leah(world, snoId, tags); return new Leah(world, sno, tags);
} }
public override bool Reveal(Player player) public override bool Reveal(Player player)

View File

@ -10,18 +10,19 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{ {
public class MalthaelHireling : Hireling public class MalthaelHireling : Hireling
{ {
public MalthaelHireling(MapSystem.World world, int snoId, TagMap tags) public MalthaelHireling(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
//Brain = new AISystem.Brains.HirelingBrain(this); //Brain = new AISystem.Brains.HirelingBrain(this);
mainSNO = 365908; mainSNO = ActorSno._x1_malthael_npc_nocollision;
hirelingSNO = 274457; hirelingSNO = ActorSno._x1_malthael_npc;
proxySNO = 0x0002F1AC; proxySNO = ActorSno._hireling_templar_proxy;
skillKit = 484941; skillKit = 484941;
hirelingGBID = StringHashHelper.HashItemName("Templar"); hirelingGBID = StringHashHelper.HashItemName("Templar");
this.Attributes[GameAttribute.Hireling_Class] = 0; this.Attributes[GameAttribute.Hireling_Class] = 0;
@ -29,9 +30,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
this.Attributes[GameAttribute.Team_Override] = 2; this.Attributes[GameAttribute.Team_Override] = 2;
} }
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags) public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{ {
return new MalthaelHireling(world, snoId, tags); return new MalthaelHireling(world, sno, tags);
} }
public void SetSkill(Player player, int SkillSNOId) public void SetSkill(Player player, int SkillSNOId)

View File

@ -10,26 +10,27 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{ {
[HandledSNO(4644 /* Scoundrel.acr */)] [HandledSNO(ActorSno._scoundrel /* Scoundrel.acr */)]
public class Scoundrel : Hireling public class Scoundrel : Hireling
{ {
public Scoundrel(MapSystem.World world, int snoId, TagMap tags) public Scoundrel(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
mainSNO = 4644; mainSNO = ActorSno._scoundrel;
hirelingSNO = 52694; hirelingSNO = ActorSno._hireling_scoundrel;
proxySNO = 192941; proxySNO = ActorSno._hireling_scoundrel_proxy;
skillKit = 484937; skillKit = 484937;
hirelingGBID = StringHashHelper.HashItemName("Scoundrel"); hirelingGBID = StringHashHelper.HashItemName("Scoundrel");
Attributes[GameAttribute.Hireling_Class] = 2; Attributes[GameAttribute.Hireling_Class] = 2;
} }
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags) public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{ {
return new Scoundrel(world, snoId, tags); return new Scoundrel(world, sno, tags);
} }
public void SetSkill(Player player, int SkillSNOId) public void SetSkill(Player player, int SkillSNOId)

View File

@ -10,26 +10,27 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{ {
[HandledSNO(4538 /* Templar.acr */)] [HandledSNO(ActorSno._templar /* Templar.acr */)]
public class Templar : Hireling public class Templar : Hireling
{ {
public Templar(MapSystem.World world, int snoId, TagMap tags) public Templar(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
mainSNO = 4538; mainSNO = ActorSno._templar;
hirelingSNO = 0x0000CDD5; hirelingSNO = ActorSno._hireling_templar;
proxySNO = 0x0002F1AC; proxySNO = ActorSno._hireling_templar_proxy;
skillKit = 484941; skillKit = 484941;
hirelingGBID = StringHashHelper.HashItemName("Templar"); hirelingGBID = StringHashHelper.HashItemName("Templar");
this.Attributes[GameAttribute.Hireling_Class] = 1; this.Attributes[GameAttribute.Hireling_Class] = 1;
} }
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags) public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{ {
return new Templar(world, snoId, tags); return new Templar(world, sno, tags);
} }
public void SetSkill(Player player, int SkillSNOId) public void SetSkill(Player player, int SkillSNOId)

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using System; using System;
@ -15,20 +16,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO( [HandledSNO(
//act 1 //act 1
109467, ActorSno._trout_barkeep,
//act 2 //act 2
180291, ActorSno._a2_uniquevendor_innkeeper,
//act 3 //act 3
181473, ActorSno._a3_uniquevendor_innkeeper,
//act 4 //act 4
182413, ActorSno._a4_uniquevendor_innkeeper,
//act 5 //act 5
309718 ActorSno._x1_a5_uniquevendor_innkeeper
)] )]
public class Innkeeper : Vendor public class Innkeeper : Vendor
{ {
public Innkeeper(MapSystem.World world, int snoId, TagMap tags) public Innkeeper(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using System; using System;
@ -13,37 +14,36 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(361241)] [HandledSNO(ActorSno._x1_randomitemnpc)]
public class Kadala : Vendor public class Kadala : Vendor
{ {
public Kadala(MapSystem.World world, int snoId, TagMap tags) private static readonly int[] itemGbIds = new int[]
: base(world, snoId, tags) {
-1492848355,
-594428401,
2050033703,
-2026108002,
-537237168,
-1493063970,
-2010009315,
1281756953,
-1492484569,
1816611999,
-767866790,
-1099096773,
-1780286480,
215071258,
-1492657844,
-1843121997
};
public Kadala(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{ {
} }
protected override List<ItemsSystem.Item> GetVendorItems() protected override List<ItemsSystem.Item> GetVendorItems()
{ {
var list = new List<ItemsSystem.Item> return itemGbIds.Select(x => ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(x), 1, false)).ToList();
{
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1492848355), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-594428401), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(2050033703), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-2026108002), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-537237168), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1493063970), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-2010009315), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(1281756953), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1492484569), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(1816611999), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-767866790), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1099096773), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1780286480), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(215071258), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1492657844), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1843121997), 1, false)
};
return list;
} }
public override bool Reveal(PlayerSystem.Player player) public override bool Reveal(PlayerSystem.Player player)

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Helpers.Math;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -31,26 +32,26 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Fields;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(96993)] [HandledSNO(ActorSno._a1dun_cath_chest_rare)]
class LegendaryChest : LootContainer class LegendaryChest : LootContainer
{ {
public bool ChestActive = false; public bool ChestActive = false;
public LegendaryChest(World world, int snoId, TagMap tags) public LegendaryChest(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.NameSNOId = 108122; this.NameSNO = ActorSno._caout_stingingwinds_chest;
this.Field7 = 1; this.Field7 = 1;
} }
public override bool Reveal(PlayerSystem.Player player) public override bool Reveal(Player player)
{ {
if (!this.ChestActive) return false; if (!this.ChestActive) return false;
return base.Reveal(player); return base.Reveal(player);
} }
public override void OnTargeted(PlayerSystem.Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
if (this.Attributes[GameAttribute.Disabled]) return; if (this.Attributes[GameAttribute.Disabled]) return;

View File

@ -35,32 +35,32 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
private bool haveDrop = false; private bool haveDrop = false;
public bool rewardChestAvailable = true; public bool rewardChestAvailable = true;
public LootContainer(World world, int snoId, TagMap tags) public LootContainer(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
if (this.ActorSNO.Id == 200872) this.Attributes[GameAttribute.MinimapActive] = true; if (this.SNO == ActorSno._a3dunrmpt_interactives_signal_fire_a_prop) this.Attributes[GameAttribute.MinimapActive] = true;
if (this.ActorSNO.Name.ToLower().Contains("chest") || this.ActorSNO.Name.ToLower().Contains("corpse")) haveDrop = true; if (this.SNO.IsChest() || this.SNO.IsCorpse()) haveDrop = true;
switch (snoId) switch (sno)
{ {
case 79319: //bloody case ActorSno._trout_highlands_chest_bloody: //bloody
this.Quality = 1; this.Quality = 1;
break; break;
case 62860: //rare case ActorSno._trout_fields_chest_rare: //rare
case 101500: //Zolt_rare case ActorSno._a2dun_zolt_chest_rare: //Zolt_rare
case 363725: //event case ActorSno._x1_global_chest_startsclean: //event
this.Quality = 2; this.Quality = 2;
break; break;
} }
if (snoId == 363725) rewardChestAvailable = false; if (sno == ActorSno._x1_global_chest_startsclean) rewardChestAvailable = false;
} }
public override bool Reveal(PlayerSystem.Player player) public override bool Reveal(Player player)
{ {
if (this.ActorSNO.Id == 190524 && this.World.SNO != WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //dakab chest if (this.SNO == ActorSno._a2dun_aqd_chest_special_facepuzzle_large && this.World.SNO != WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //dakab chest
if (this.ActorSNO.Id == 190708 && this.World.SNO == WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //not dakab chest if (this.SNO == ActorSno._a2dun_aqd_chest_rare_facepuzzlesmall && this.World.SNO == WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //not dakab chest
if (!rewardChestAvailable) return false; //event reward chest if (!rewardChestAvailable) return false; //event reward chest
@ -79,143 +79,139 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override void OnTargeted(PlayerSystem.Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
if (this.ActorSNO.Id == 450254) if (this.SNO == ActorSno._p4_setdung_totem_cru_thorns)
{ return;
if (this.Attributes[GameAttribute.Disabled]) return;
base.OnTargeted(player, message);
player.AddAchievementCounter(74987243307152, 1);
if (ActorData.TagMap.ContainsKey(ActorKeys.Lore))
Logger.Debug("Lore detected: {0}", ActorData.TagMap[ActorKeys.Lore].Id);
if (this.SNO == ActorSno._trout_highlands_manor_firewood) //Leor bone
{
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -629520052);
} }
else if (this.SNO == ActorSno._trout_newtristram_adria_blackmushroom) //Black Mushroom
{ {
if (this.Attributes[GameAttribute.Disabled]) return; foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -1993550104);
}
if (this.SNO == ActorSno._caout_oasis_chest_rare_mapvendorcave) //Rainbow Chest
{
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, 725082635);
}
base.OnTargeted(player, message); if (haveDrop)
{
player.AddAchievementCounter(74987243307152, 1); var dropRates = this.World.Game.IsHardcore ? LootManager.GetSeasonalDropRates((int)this.Quality, Program.MaxLevel) : LootManager.GetDropRates((int)this.Quality, Program.MaxLevel);
foreach (var rate in dropRates)
if (ActorData.TagMap.ContainsKey(ActorKeys.Lore))
Logger.Debug("Lore detected: {0}", ActorData.TagMap[ActorKeys.Lore].Id);
if (this.ActorSNO.Id == 213905) //Leor bone
{
foreach (var plr in this.GetPlayersInRange(30)) foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -629520052); {
} float seed = (float)FastRandom.Instance.NextDouble();
if (this.ActorSNO.Id == 172948) //Black Mushroom if (seed < 0.8f)
{ this.World.SpawnGold(this, plr);
foreach (var plr in this.GetPlayersInRange(30)) if (seed < 0.6f)
this.World.SpawnItem(this, plr, -1993550104); this.World.SpawnGold(this, plr);
} if (seed < 0.5f)
if (this.ActorSNO.Id == 207706) //Rainbow Chest this.World.SpawnRandomCraftItem(this, plr);
{ if (seed < 0.2f)
foreach (var plr in this.GetPlayersInRange(30)) this.World.SpawnRandomCraftItem(this, plr);
this.World.SpawnItem(this, plr, 725082635); if (seed < 0.07f)
} this.World.SpawnRandomGem(this, plr);
if (seed < 0.04f)
if (haveDrop) this.World.SpawnRandomGem(this, plr);
{ if (seed < 0.10f)
var dropRates = this.World.Game.IsHardcore ? LootManager.GetSeasonalDropRates((int)this.Quality, Program.MaxLevel) : LootManager.GetDropRates((int)this.Quality, Program.MaxLevel); this.World.SpawnRandomPotion(this, plr);
foreach (var rate in dropRates) if (seed < (rate * (1f + plr.Attributes[GameAttribute.Magic_Find])))
foreach (var plr in this.GetPlayersInRange(30))
{ {
float seed = (float)FastRandom.Instance.NextDouble(); var lootQuality = this.World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)this.Quality, this.World.Game.Difficulty) : LootManager.GetLootQuality((int)this.Quality, this.World.Game.Difficulty);
if (seed < 0.8f) this.World.SpawnRandomEquip(plr, plr, lootQuality);
this.World.SpawnGold(this, plr);
if (seed < 0.6f)
this.World.SpawnGold(this, plr);
if (seed < 0.5f)
this.World.SpawnRandomCraftItem(this, plr);
if (seed < 0.2f)
this.World.SpawnRandomCraftItem(this, plr);
if (seed < 0.07f)
this.World.SpawnRandomGem(this, plr);
if (seed < 0.04f)
this.World.SpawnRandomGem(this, plr);
if (seed < 0.10f)
this.World.SpawnRandomPotion(this, plr);
if (seed < (rate * (1f + plr.Attributes[GameAttribute.Magic_Find])))
{
var lootQuality = this.World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)this.Quality, this.World.Game.Difficulty) : LootManager.GetLootQuality((int)this.Quality, this.World.Game.Difficulty);
this.World.SpawnRandomEquip(plr, plr, lootQuality);
}
else
break;
} }
} else
break;
if (GeneratorsSystem.LoreRegistry.Lore.ContainsKey(this.World.SNO) && GeneratorsSystem.LoreRegistry.Lore[this.World.SNO].chests_lore.ContainsKey(this.ActorSNO.Id))
foreach (var p in this.GetPlayersInRange(30))
foreach (int loreId in GeneratorsSystem.LoreRegistry.Lore[this.World.SNO].chests_lore[this.ActorSNO.Id])
if (!p.HasLore(loreId))
{
World.DropItem(this, null, ItemGenerator.CreateLore(p, loreId));
break;
}
World.BroadcastIfRevealed(plr => new PlayAnimationMessage
{
ActorID = this.DynamicID(plr),
AnimReason = 5,
UnitAniimStartTime = 0,
tAnim = new PlayAnimationMessageSpec[]
{
new PlayAnimationMessageSpec()
{
Duration = 50,
AnimationSNO = AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening],
PermutationIndex = 0,
AnimationTag = 0,
Speed = 1
}
} }
}
}, this); if (GeneratorsSystem.LoreRegistry.Lore.ContainsKey(this.World.SNO) && GeneratorsSystem.LoreRegistry.Lore[this.World.SNO].chests_lore.ContainsKey(this.SNO))
foreach (var p in this.GetPlayersInRange(30))
foreach (int loreId in GeneratorsSystem.LoreRegistry.Lore[this.World.SNO].chests_lore[this.SNO])
if (!p.HasLore(loreId))
{
World.DropItem(this, null, ItemGenerator.CreateLore(p, loreId));
break;
}
World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage World.BroadcastIfRevealed(plr => new PlayAnimationMessage
{
ActorID = this.DynamicID(plr),
AnimReason = 5,
UnitAniimStartTime = 0,
tAnim = new PlayAnimationMessageSpec[]
{ {
ActorID = this.DynamicID(plr), new PlayAnimationMessageSpec()
AnimationSNO = AnimationSetKeys.Open.ID
}, this);
this.Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true;
//this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID);
this.Attributes[GameAttribute.Chest_Open, 0xFFFFFF] = true;
Attributes.BroadcastChangedIfRevealed();
this.Attributes[GameAttribute.Disabled] = true;
if (this.ActorSNO.Id == 5747)
{ {
var lamp = this.GetActorsInRange(50f).Where(x => x.ActorSNO.Id == 5744 || x.ActorSNO.Id == 89503).First(); Duration = 50,
if (lamp != null) AnimationSNO = AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening],
(lamp as CathedralLamp).Die(); PermutationIndex = 0,
AnimationTag = 0,
Speed = 1
}
} }
if (this.ActorSNO.Id == 2975) }, this);
{
if (this.World.SNO == WorldSno.a2dun_zolt_level01) World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage
foreach (var plr in this.World.Game.Players.Values) {
plr.InGameClient.SendMessage(new QuestCounterMessage() ActorID = this.DynamicID(plr),
{ AnimationSNO = AnimationSetKeys.Open.ID
snoQuest = 57337, }, this);
snoLevelArea = -1,
StepID = 35, this.Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true;
TaskIndex = 0, //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID);
Counter = 1, this.Attributes[GameAttribute.Chest_Open, 0xFFFFFF] = true;
Checked = 1, Attributes.BroadcastChangedIfRevealed();
});
else this.Attributes[GameAttribute.Disabled] = true;
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage() if (this.SNO == ActorSno._trdun_cath_chandelier_trap_switch2)
{ {
snoQuest = 57337, var lamp = this.GetActorsInRange(50f).Where(x => x.SNO == ActorSno._trdun_cath_chandelier_trap || x.SNO == ActorSno._trdun_cath_braizer_trap).First();
snoLevelArea = -1, if (lamp != null)
StepID = 35, (lamp as CathedralLamp).Die();
TaskIndex = 1, }
Counter = 1,
Checked = 1, if (this.SNO == ActorSno._a2dun_zolt_centerpiece_a)
}); {
} if (this.World.SNO == WorldSno.a2dun_zolt_level01)
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage()
{
snoQuest = 57337,
snoLevelArea = -1,
StepID = 35,
TaskIndex = 0,
Counter = 1,
Checked = 1,
});
else
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage()
{
snoQuest = 57337,
snoLevelArea = -1,
StepID = 35,
TaskIndex = 1,
Counter = 1,
Checked = 1,
});
} }
} }
} }

View File

@ -32,14 +32,14 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Fields;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(345935)] [HandledSNO(ActorSno._x1_openworld_lootrunportal)]
public class LootRunPortal : Portal public class LootRunPortal : Portal
{ {
static readonly Logger Logger = LogManager.CreateLogger(); static readonly Logger Logger = LogManager.CreateLogger();
private int MinimapIcon; private int MinimapIcon;
public LootRunPortal(World world, int snoId, TagMap tags) public LootRunPortal(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Destination = new ResolvedPortalDestination this.Destination = new ResolvedPortalDestination
{ {
@ -79,7 +79,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override void OnTargeted(Player player, TargetMessage message) public override void OnTargeted(Player player, TargetMessage message)
{ {
Logger.Debug("(OnTargeted) Portal has been activated, Id: {0}, LevelArea: {1}, World: {2}", this.ActorSNO.Id, this.Destination.DestLevelAreaSNO, this.Destination.WorldSNO); Logger.Debug("(OnTargeted) Portal has been activated, Id: {0}, LevelArea: {1}, World: {2}", (int)this.SNO, this.Destination.DestLevelAreaSNO, this.Destination.WorldSNO);
var world = this.World.Game.GetWorld((WorldSno)this.Destination.WorldSNO); var world = this.World.Game.GetWorld((WorldSno)this.Destination.WorldSNO);
@ -93,7 +93,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
if (startingPoint != null) if (startingPoint != null)
{ {
if (this.ActorSNO.Id == 230751) //a2 timed event if (this.SNO == ActorSno._a2dun_zolt_portal_timedevent) //a2 timed event
{ {
if (!this.World.Game.QuestManager.SideQuests[120396].Completed) if (!this.World.Game.QuestManager.SideQuests[120396].Completed)
player.ShowConfirmation(this.DynamicID(player), (() => { player.ShowConfirmation(this.DynamicID(player), (() => {

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -20,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1; public new int SummonLimit = 1;
public AncientKorlic(World world, PowerContext context, int AncientsID) public AncientKorlic(World world, PowerContext context, int AncientsID)
: base(world, 90443, context.User, null) : base(world, ActorSno._barbarian_calloftheancients_1, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -47,8 +48,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
if (this.Master is Player) if (this.Master is Player)
{ {
if ((this.Master as Player).Followers.Values.Count(a => a == 90443) > 1) if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1)
(this.Master as Player).DestroyFollower(90443); (this.Master as Player).DestroyFollower(SNO);
} }
} }

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -20,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1; public new int SummonLimit = 1;
public AncientMawdawc(World world, PowerContext context, int AncientsID) public AncientMawdawc(World world, PowerContext context, int AncientsID)
: base(world, 90536, context.User, null) : base(world, ActorSno._barbarian_calloftheancients_3, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -47,8 +48,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
if (this.Master is Player) if (this.Master is Player)
{ {
if ((this.Master as Player).Followers.Values.Count(a => a == 90536) > 1) if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1)
(this.Master as Player).DestroyFollower(90536); (this.Master as Player).DestroyFollower(SNO);
} }
} }

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -20,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1; public new int SummonLimit = 1;
public AncientTalic(World world, PowerContext context, int AncientsID) public AncientTalic(World world, PowerContext context, int AncientsID)
: base(world, 90535, context.User, null) : base(world, ActorSno._barbarian_calloftheancients_2, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -47,8 +48,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
if (this.Master is Player) if (this.Master is Player)
{ {
if ((this.Master as Player).Followers.Values.Count(a => a == 90535) > 1) if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1)
(this.Master as Player).DestroyFollower(90535); (this.Master as Player).DestroyFollower(SNO);
} }
} }

View File

@ -12,13 +12,14 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
class AvatarMelee : Minion class AvatarMelee : Minion
{ {
public AvatarMelee(World world, PowerContext context, int AvatarID, float damageMult, TickTimer lifeTime) public AvatarMelee(World world, PowerContext context, int AvatarID, float damageMult, TickTimer lifeTime)
: base(world, 345682, context.User, null) : base(world, ActorSno._x1_crusader_phalanx, context.User, null)
{ {
Scale = 1.2f; Scale = 1.2f;
WalkSpeed *= 5; WalkSpeed *= 5;
@ -42,7 +43,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
class AvatarRanged : Minion class AvatarRanged : Minion
{ {
public AvatarRanged(World world, PowerContext context, int AvatarID, float damageMult, TickTimer lifeTime) public AvatarRanged(World world, PowerContext context, int AvatarID, float damageMult, TickTimer lifeTime)
: base(world, 369795, context.User, null) : base(world, ActorSno._x1_crusader_phalanxarcher, context.User, null)
{ {
Scale = 1f; Scale = 1f;
WalkSpeed *= 5; WalkSpeed *= 5;

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -24,10 +25,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1; public new int SummonLimit = 1;
public static List<int> Companions = new List<int>() { 133741, 173827, 181748, 159098, 159102, 178664 }; private static readonly List<ActorSno> Companions = new List<ActorSno>() {
ActorSno._dh_companion,
ActorSno._dh_companion_spider,
ActorSno._dh_companion_boar,
ActorSno._dh_companion_runec,
ActorSno._dh_companion_runed,
ActorSno._dh_companion_ferret
};
public CompanionMinion(World world, PowerContext context, int CompanionSNOId) public CompanionMinion(World world, PowerContext context, ActorSno CompanionSNO)
: base(world, CompanionSNOId, context.User, null) : base(world, CompanionSNO, context.User, null)
{ {
Scale = 1.2f; Scale = 1.2f;
if (context.User.Attributes[GameAttribute.Rune_B, 0x000592ff] > 0) Scale = 2f; //Boar if (context.User.Attributes[GameAttribute.Rune_B, 0x000592ff] > 0) Scale = 2f; //Boar
@ -38,7 +46,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.Invulnerable] = true;
this.Attributes[GameAttribute.Is_Helper] = true; this.Attributes[GameAttribute.Is_Helper] = true;
this.Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; this.Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO;
if (CompanionSNOId == 178664) if (CompanionSNO == ActorSno._dh_companion_ferret)
SetBrain(new LooterBrain(this, false)); SetBrain(new LooterBrain(this, false));
else else
{ {

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -19,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
//107031, 106731, 106749, 107067, 107107, 107112 //107031, 106731, 106749, 107067, 107107, 107112
public CorpseSpider(World world, PowerContext context, int snoId, int SpiderID) public CorpseSpider(World world, PowerContext context, ActorSno sno, int SpiderID)
: base(world, snoId, context.User, null) : base(world, sno, context.User, null)
{ {
Scale = 0.7f; //they look cooler bigger :) Scale = 0.7f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -24,7 +25,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1; public new int SummonLimit = 1;
public CorpseSpiderQueen(World world, PowerContext context, int SpiderID) public CorpseSpiderQueen(World world, PowerContext context, int SpiderID)
: base(world, 106749, context.User, null) : base(world, ActorSno._witchdoctor_corpsespider_indigorune, context.User, null)
{ {
Scale = 0.7f; //they look cooler bigger :) Scale = 0.7f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -54,7 +55,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
var rem = new List<uint>(); var rem = new List<uint>();
foreach (var fol in (this.Master as Player).Followers) foreach (var fol in (this.Master as Player).Followers)
if (fol.Value == 106749 && fol.Key != this.GlobalID) if (fol.Value == SNO && fol.Key != this.GlobalID)
rem.Add(fol.Key); rem.Add(fol.Key);
foreach (var rm in rem) foreach (var rm in rem)
(this.Master as Player).DestroyFollowerById(rm); (this.Master as Player).DestroyFollowerById(rm);

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934 //Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public FetishHunter(World world, PowerContext context, int FetishID) public FetishHunter(World world, PowerContext context, int FetishID)
: base(world, 89933, context.User, null) : base(world, ActorSno._fetish_ranged_a, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934 //Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public FetishMelee(World world, PowerContext context, int FetishID) public FetishMelee(World world, PowerContext context, int FetishID)
: base(world, 87189, context.User, null) : base(world, ActorSno._fetish_melee_a, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934 //Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public FetishShaman(World world, PowerContext context, int FetishID) public FetishShaman(World world, PowerContext context, int FetishID)
: base(world, 90320, context.User, null) : base(world, ActorSno._fetish_shaman_a, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,13 +14,14 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
class GargantuanMinion : Minion class GargantuanMinion : Minion
{ {
public GargantuanMinion(World world, PowerContext context, int GargID) public GargantuanMinion(World world, PowerContext context, int GargID)
: base(world, 122305, context.User, null) : base(world, ActorSno._wd_gargantuan, context.User, null)
{ {
Scale = 1f; Scale = 1f;
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -58,7 +59,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
var rem = new List<uint>(); var rem = new List<uint>();
foreach (var fol in (this.Master as Player).Followers) foreach (var fol in (this.Master as Player).Followers)
if (fol.Value == 122305 && fol.Key != this.GlobalID) if (fol.Value == SNO && fol.Key != this.GlobalID)
rem.Add(fol.Key); rem.Add(fol.Key);
foreach (var rm in rem) foreach (var rm in rem)
(this.Master as Player).DestroyFollowerById(rm); (this.Master as Player).DestroyFollowerById(rm);

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
@ -33,8 +34,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
//[460042] [Actor] p6_BloodGolem //[460042] [Actor] p6_BloodGolem
public class BaseGolem : Minion public class BaseGolem : Minion
{ {
public BaseGolem(MapSystem.World world, ActorSystem.Actor master) public BaseGolem(World world, Actor master)
: base(world, 471947, master, null) : base(world, ActorSno._p6_necro_revive_golem, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -53,8 +54,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
} }
public class ConsumeFleshGolem : Minion public class ConsumeFleshGolem : Minion
{ {
public ConsumeFleshGolem(MapSystem.World world, ActorSystem.Actor master) public ConsumeFleshGolem(World world, Actor master)
: base(world, 471646, master, null) : base(world, ActorSno._p6_consumefleshgolem, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -73,7 +74,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
} }
public class IceGolem : Minion public class IceGolem : Minion
{ {
public IceGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 471647, master, null) public IceGolem(World world, Actor master)
: base(world, ActorSno._p6_icegolem, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -92,7 +94,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
} }
public class BoneGolem : Minion public class BoneGolem : Minion
{ {
public BoneGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 465239, master, null) public BoneGolem(World world, Actor master)
: base(world, ActorSno._p6_bonegolem, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -110,7 +113,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
} }
public class DecayGolem : Minion public class DecayGolem : Minion
{ {
public DecayGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 471619, master, null) public DecayGolem(World world, Actor master)
: base(world, ActorSno._p6_decaygolem, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -129,7 +133,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
} }
public class BloodGolem : Minion public class BloodGolem : Minion
{ {
public BloodGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 460042, master, null) public BloodGolem(World world, Actor master)
: base(world, ActorSno._p6_bloodgolem, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,13 +14,14 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
class HexMinion : Minion class HexMinion : Minion
{ {
public HexMinion(World world, PowerContext context, int HexID) public HexMinion(World world, PowerContext context, int HexID)
: base(world, 107826, context.User, null) : base(world, ActorSno._fetish_hex, context.User, null)
{ {
Scale = 1f; Scale = 1f;
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -22,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1; public new int SummonLimit = 1;
public LooterPetAnniversary(World world, Actor master) public LooterPetAnniversary(World world, Actor master)
: base(world, 4093, master, null) : base(world, ActorSno._fallenlunatic_a, master, null)
{ {
Scale = 0.75f; Scale = 0.75f;
this.WalkSpeed *= 5; this.WalkSpeed *= 5;

View File

@ -14,13 +14,14 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
class MirrorImageMinion : Minion class MirrorImageMinion : Minion
{ {
public MirrorImageMinion(World world, PowerContext context, int ImageID, float lifetime) public MirrorImageMinion(World world, PowerContext context, int ImageID, float lifetime)
: base(world, 98010, context.User, null) //male Mirror images : base(world, ActorSno._wizard_mirrorimage_female, context.User, null) //female Mirror images
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.
@ -41,13 +42,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
LifeTime = TickTimer.WaitSeconds(world.Game, lifetime); LifeTime = TickTimer.WaitSeconds(world.Game, lifetime);
if (this.Master != null && context.ScriptFormula(1) < (this.Master as Player).Followers.Values.Where(f => f == 98010).Count()) if (this.Master != null && context.ScriptFormula(1) < (this.Master as Player).Followers.Values.Where(f => f == SNO).Count())
{ {
if (this.Master is Player) if (this.Master is Player)
{ {
var rem = new List<uint>(); var rem = new List<uint>();
foreach (var fol in (this.Master as Player).Followers.Where(f => f.Key != this.GlobalID).Take((this.Master as Player).Followers.Values.Where(f => f == 98010).Count() - (int)context.ScriptFormula(1))) foreach (var fol in (this.Master as Player).Followers.Where(f => f.Key != this.GlobalID).Take((this.Master as Player).Followers.Values.Where(f => f == SNO).Count() - (int)context.ScriptFormula(1)))
if (fol.Value == 98010) if (fol.Value == SNO)
rem.Add(fol.Key); rem.Add(fol.Key);
foreach (var rm in rem) foreach (var rm in rem)
(this.Master as Player).DestroyFollowerById(rm); (this.Master as Player).DestroyFollowerById(rm);

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
public new int SummonLimit = 1; public new int SummonLimit = 1;
public MysticAllyMinion(World world, PowerContext context, int MysticAllyID) public MysticAllyMinion(World world, PowerContext context, ActorSno MysticAllyID)
: base(world, MysticAllyID, context.User, null) : base(world, MysticAllyID, context.User, null)
{ {
Scale = 1.35f; //they look cooler bigger :) Scale = 1.35f; //they look cooler bigger :)

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
@ -25,8 +26,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
class NecromancerSkeleton_A : Minion class NecromancerSkeleton_A : Minion
{ {
public NecromancerSkeleton_A(MapSystem.World world, int snoId, ActorSystem.Actor master) public NecromancerSkeleton_A(MapSystem.World world, ActorSno sno, ActorSystem.Actor master)
: base(world, snoId, master, null) : base(world, sno, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -22,10 +23,18 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
//Changes creature with each rune, //Changes creature with each rune,
//RuneSelect(141402, 168815, 150024, 150025, 150026, 150027) //RuneSelect(141402, 168815, 150024, 150025, 150026, 150027)
public static List<int> Sentries = new List<int>() { 141402, 168815, 150024, 150025, 150026, 150027 }; public static readonly List<ActorSno> Sentries = new List<ActorSno>()
{
ActorSno._dh_sentry,
ActorSno._dh_sentry_tether,
ActorSno._dh_sentry_addsduration,
ActorSno._dh_sentry_addsmissiles,
ActorSno._dh_sentry_addsheals,
ActorSno._dh_sentry_addsshield
};
public SentryMinion(World world, PowerContext context, int SentrySNOId) public SentryMinion(World world, PowerContext context, ActorSno SentrySNO)
: base(world, SentrySNOId, context.User, null) : base(world, SentrySNO, context.User, null)
{ {
Scale = 1.2f; Scale = 1.2f;
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -25,7 +26,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
public bool Rune_Flesh = false; public bool Rune_Flesh = false;
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934 //Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public SkeletalMage(World world, PowerContext context, int FetishID, int SNO) public SkeletalMage(World world, PowerContext context, int FetishID, ActorSno SNO)
: base(world, SNO, context.User, null) : base(world, SNO, context.User, null)
{ {
Scale = 1.2f; Scale = 1.2f;

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -22,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 10; public new int SummonLimit = 10;
public WallCreeper(World world, PowerContext context, int creeperID) public WallCreeper(World world, PowerContext context, int creeperID)
: base(world, 146534, context.User, null) : base(world, ActorSno._wd_wallofzombiesrune_spawn, context.User, null)
{ {
Scale = 1.2f; //they look cooler bigger :) Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Collections.Generic; using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{ {
@ -22,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 4; public new int SummonLimit = 4;
public ZombieDog(World world, Actor master, int dogID, float mul = 1f) public ZombieDog(World world, Actor master, int dogID, float mul = 1f)
: base(world, 51353, master, null) : base(world, ActorSno._wd_zombiedog, master, null)
{ {
Scale = 1.35f; Scale = 1.35f;
//TODO: get a proper value for this. //TODO: get a proper value for this.

View File

@ -8,6 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
//Blizzless Project 2022 //Blizzless Project 2022
using System.Threading.Tasks; using System.Threading.Tasks;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -20,11 +21,11 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters
{ {
#region Unique_CaptainDaltyn #region Unique_CaptainDaltyn
[HandledSNO(156801)] [HandledSNO(ActorSno._unique_captaindaltyn)]
public class Unique_CaptainDaltyn : Monster public class Unique_CaptainDaltyn : Monster
{ {
public Unique_CaptainDaltyn(World world, int snoId, TagMap tags) public Unique_CaptainDaltyn(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;
this.Attributes[GameAttribute.Immune_To_Charm] = true; this.Attributes[GameAttribute.Immune_To_Charm] = true;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
@ -20,11 +21,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters
{ {
//89578 GlobalId: 1015703058 Position: x:338 y:320.78137 z:-11.422008 Name: a1dun_leor_firewall1 //89578 GlobalId: 1015703058 Position: x:338 y:320.78137 z:-11.422008 Name: a1dun_leor_firewall1
[HandledSNO(89578)] [HandledSNO(ActorSno._a1dun_leor_firewall1, ActorSno._a1dun_leor_firewall2)]
public class a1dun_firewall : Monster public class A1dun_firewall : Monster
{ {
public a1dun_firewall(World world, int snoId, TagMap tags) public A1dun_firewall(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field2 = 0x8; this.Field2 = 0x8;
this.CollFlags = 0; this.CollFlags = 0;

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.Core.MPQ.FileFormats;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
@ -19,11 +20,11 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
[HandledSNO(5998)] [HandledSNO(ActorSno._tristramgateguardr)]
class ArrowGuardian : NPC, IUpdateable class ArrowGuardian : NPC, IUpdateable
{ {
public ArrowGuardian(MapSystem.World world, int snoID, TagMap tags) public ArrowGuardian(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
Brain = new AggressiveNPCBrain(this); // erekose Brain = new AggressiveNPCBrain(this); // erekose

View File

@ -10,14 +10,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(435707)] //px_Ruins_Frost_Camp_BarbNPC [HandledSNO(ActorSno._px_ruins_frost_camp_barbnpc)] //px_Ruins_Frost_Camp_BarbNPC
public class BarbarianNPC : InteractiveNPC public class BarbarianNPC : InteractiveNPC
{ {
public BarbarianNPC(World world, int snoId, TagMap tags) public BarbarianNPC(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ } { }
protected override void ReadTags() protected override void ReadTags()

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
@ -19,11 +20,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(470782)] //SNO - 470782, Name - P6_ChallengeRift_Nephalem [HandledSNO(ActorSno._p6_challengerift_nephalem)] //SNO - 470782, Name - P6_ChallengeRift_Nephalem
class CR_Nephalem : InteractiveNPC class CR_Nephalem : InteractiveNPC
{ {
public CR_Nephalem(MapSystem.World world, int snoId, TagMap tags) public CR_Nephalem(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
Conversations.Clear(); Conversations.Clear();
Conversations.Add(new Interactions.ConversationInteraction(471065)); Conversations.Add(new Interactions.ConversationInteraction(471065));

View File

@ -12,14 +12,15 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(3533)] //Cain [HandledSNO(ActorSno._cain)] //Cain
public class Cain : InteractiveNPC public class Cain : InteractiveNPC
{ {
public Cain(World world, int snoId, TagMap tags) public Cain(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.Invulnerable] = true;
} }

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.Core.MPQ.FileFormats;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
@ -19,11 +20,25 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(3739, 174436, 205189, 3546, 164195, 181857, 181858, 362323, 362440, 284568, 378363, 361670, 256248, 275409)] [HandledSNO(
ActorSno._captainrumfoord,
ActorSno._angel_trooper_a,
ActorSno._bastionskeepguard_melee_a_01_stationedguard,
ActorSno._caldeumguard_cleaver_a,
ActorSno._caldeumguard_cleaver_a_jarulf,
ActorSno._caldeumguard_cleaver_a_town,
ActorSno._caldeumguard_spear_imperial_town,
ActorSno._x1_westmhub_guardnohelmunarmed,
ActorSno._x1_westmhub_guard_patrol,
ActorSno._x1_westmhub_guard,
ActorSno._x1_westmhub_guardnohelm,
ActorSno._x1_malthael,
ActorSno._x1_imperius
)]
class CaptainRumford : InteractiveNPC, IUpdateable class CaptainRumford : InteractiveNPC, IUpdateable
{ {
public CaptainRumford(MapSystem.World world, int snoID, TagMap tags) public CaptainRumford(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
Brain = new AggressiveNPCBrain(this); // erekose Brain = new AggressiveNPCBrain(this); // erekose
@ -48,9 +63,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
} }
base.ReadTags(); base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
} }
public void Update(int tickCounter) public void Update(int tickCounter)

View File

@ -1,15 +1,16 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(112768)] [HandledSNO(ActorSno._fate)]
class Fate : InteractiveNPC class Fate : InteractiveNPC
{ {
public Fate(MapSystem.World world, int snoId, TagMap tags) public Fate(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -1,15 +1,24 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(196900, 196901, 196902, 196903, 196904, 196905)] //Ghosts [HandledSNO(
ActorSno._a4dun_aspect_ghost_01,
ActorSno._a4dun_aspect_ghost_02,
ActorSno._a4dun_aspect_ghost_03,
ActorSno._a4dun_aspect_ghost_04,
ActorSno._a4dun_aspect_ghost_05,
ActorSno._a4dun_aspect_ghost_06,
ActorSno._a4dun_aspect_ghost_07
)] //Ghosts
public class GhostOnSpire : InteractiveNPC public class GhostOnSpire : InteractiveNPC
{ {
public GhostOnSpire(MapSystem.World world, int snoId, TagMap tags) public GhostOnSpire(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.Core.MPQ.FileFormats;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
@ -21,8 +22,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
class HirelingNPC : InteractiveNPC, IUpdateable class HirelingNPC : InteractiveNPC, IUpdateable
{ {
public HirelingNPC(MapSystem.World world, int snoID, TagMap tags) public HirelingNPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
Brain = new AggressiveNPCBrain(this); // erekose Brain = new AggressiveNPCBrain(this); // erekose
@ -47,9 +48,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
} }
base.ReadTags(); base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
} }
public void Update(int tickCounter) public void Update(int tickCounter)

View File

@ -1,15 +1,16 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(114074)] [HandledSNO(ActorSno._hope)]
class Hope : InteractiveNPC class Hope : InteractiveNPC
{ {
public Hope(MapSystem.World world, int snoId, TagMap tags) public Hope(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -8,18 +8,19 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(308474, //X1_WestM_Intro_Human_Male [HandledSNO(
309191, //X1_WestM_Intro_Human_Male2 ActorSno._x1_westm_intro_human_male, //X1_WestM_Intro_Human_Male
181563, //vizjereiMale_A_Town ActorSno._x1_westm_intro_human_male2, //X1_WestM_Intro_Human_Male2
210087, //Zakarum_Female_Wealthy_Gates ActorSno._vizjereimale_a_town, //vizjereiMale_A_Town
190390, //A3_Hub_SacrificeLadyNew ActorSno._zakarum_female_wealthy_gates, //Zakarum_Female_Wealthy_Gates
378376 //x1_WestmHub_Guard_NoLoS_KnownWithScene ActorSno._a3_hub_sacrificeladynew, //A3_Hub_SacrificeLadyNew
)] ActorSno._x1_westmhub_guard_nolos_knownwithscene //x1_WestmHub_Guard_NoLoS_KnownWithScene
)]
class Humans : NPC class Humans : NPC
{ {
private bool _collapsed = false; private bool _collapsed = false;
public Humans(World world, int snoId, TagMap tags) public Humans(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;
@ -44,20 +45,25 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
_collapsed = true; _collapsed = true;
if (this.World.SNO == WorldSno.x1_westm_intro) if (this.World.SNO == WorldSno.x1_westm_intro)
switch (this.ActorSNO.Id) switch (this.SNO)
{ {
case 308474: case ActorSno._x1_westm_intro_human_male:
if (this.Position.X > 1440) if (this.Position.X > 1440)
StartConversation(this.World, 311433); StartConversation(this.World, 311433);
else else
{ {
foreach (var man in this.World.GetActorsBySNO(308474)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); foreach (var man in this.World.GetActorsBySNO(
foreach (var man in this.World.GetActorsBySNO(309191)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); ActorSno._x1_westm_intro_human_male,
foreach (var man in this.World.GetActorsBySNO(310653)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); ActorSno._x1_westm_intro_human_male2,
foreach (var man in this.World.GetActorsBySNO(310631)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); ActorSno._x1_westm_intro_human_female,
ActorSno._x1_westmarchfemale_deathmaidenkill
))
{
if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
}
} }
break; break;
case 309191: case ActorSno._x1_westm_intro_human_male2:
if (this.Position.X > 1300 & this.Position.Y > 440) if (this.Position.X > 1300 & this.Position.Y > 440)
{ {
StartConversation(this.World, 311435); StartConversation(this.World, 311435);
@ -73,9 +79,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
+ [5] {70976 = 328782} DiIiS_NA.GameServer.Core.Types.TagMap.TagMapEntry + [5] {70976 = 328782} DiIiS_NA.GameServer.Core.Types.TagMap.TagMapEntry
+ [6] {98304 = 330015} DiIiS_NA.GameServer.Core.Types.TagMap.TagMapEntry + [6] {98304 = 330015} DiIiS_NA.GameServer.Core.Types.TagMap.TagMapEntry
*/ */
foreach (var man in this.World.GetActorsBySNO(308474)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); foreach (var man in this.World.GetActorsBySNO(
foreach (var man in this.World.GetActorsBySNO(309191)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); ActorSno._x1_westm_intro_human_male,
foreach (var man in this.World.GetActorsBySNO(310653)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); ActorSno._x1_westm_intro_human_male2,
ActorSno._x1_westm_intro_human_female
))
{
if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
}
} }

View File

@ -10,16 +10,17 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
//[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 449323 Name: Barbarian_KKG_Event, NumInWorld: 0 //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 449323 Name: Barbarian_KKG_Event, NumInWorld: 0
//[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 435818 Name: Barbarian_KKG, NumInWorld: 0 //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 435818 Name: Barbarian_KKG, NumInWorld: 0
[HandledSNO(435818, 449323)] //Barbarian_KKG [HandledSNO(ActorSno._barbarian_kkg, ActorSno._barbarian_kkg_event)] //Barbarian_KKG
public class Barbarian_KKG : NPC public class Barbarian_KKG : NPC
{ {
public Barbarian_KKG(World world, int snoId, TagMap tags) public Barbarian_KKG(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.PlayActionAnimation(449259); this.PlayActionAnimation(449259);
} }

View File

@ -10,16 +10,17 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
//[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 437089 Name: Barbarian_KKG_Follower_NPC, NumInWorld: 0 //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 437089 Name: Barbarian_KKG_Follower_NPC, NumInWorld: 0
[HandledSNO(437089)] //Barbarian_KKG_Follower_NPC [HandledSNO(ActorSno._barbarian_kkg_follower_npc)] //Barbarian_KKG_Follower_NPC
public class Barbarian_KKG_Follower_NPC : NPC public class Barbarian_KKG_Follower_NPC : NPC
{ {
private bool _collapsed = false; private bool _collapsed = false;
public Barbarian_KKG_Follower_NPC(World world, int snoId, TagMap tags) public Barbarian_KKG_Follower_NPC(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
//{[Actor] [Type: Monster] SNOId:437089 GlobalId: 1017303615 Position: x:348.598 y:853.68604 z:5.41089 Name: Barbarian_KKG_Follower_NPC} //{[Actor] [Type: Monster] SNOId:437089 GlobalId: 1017303615 Position: x:348.598 y:853.68604 z:5.41089 Name: Barbarian_KKG_Follower_NPC}
//437394 - Рык //437394 - Рык
@ -53,7 +54,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
_collapsed = true; _collapsed = true;
this.PlayActionAnimation(439753); this.PlayActionAnimation(439753);
var Cube = World.GetActorBySNO(437895); var Cube = World.GetActorBySNO(ActorSno._p4_ruins_frost_kanaicube_altar);
Cube.PlayActionAnimation(441642); Cube.PlayActionAnimation(441642);
//{[Actor] [Type: Gizmo] SNOId:437895 GlobalId: 1017303610 Position: x:331.9304 y:867.761 z:5.41071 Name: p4_Ruins_Frost_KanaiCube_Altar} //{[Actor] [Type: Gizmo] SNOId:437895 GlobalId: 1017303610 Position: x:331.9304 y:867.761 z:5.41071 Name: p4_Ruins_Frost_KanaiCube_Altar}
foreach (var plr in player.InGameClient.Game.Players.Values) foreach (var plr in player.InGameClient.Game.Players.Values)

View File

@ -10,15 +10,16 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(437073)] //p2_HQ_ZoltunKulle_NPC [HandledSNO(ActorSno._p2_hq_zoltunkulle_npc)] //p2_HQ_ZoltunKulle_NPC
public class p2_HQ_ZoltunKulle_NPC : NPC public class P2_HQ_ZoltunKulle_NPC : NPC
{ {
public p2_HQ_ZoltunKulle_NPC(World world, int snoId, TagMap tags) public P2_HQ_ZoltunKulle_NPC(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Hidden = true; this.Hidden = true;
} }

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
@ -15,11 +16,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(138271)] [HandledSNO(ActorSno._leah_afterevent31_exit)]
class LeahNPC : InteractiveNPC class LeahNPC : InteractiveNPC
{ {
public LeahNPC(MapSystem.World world, int snoId, TagMap tags) public LeahNPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -21,11 +21,11 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
//{[Actor] [Type: Monster] SNOId:284530 GlobalId: 1017400498 Position: x:593.36835 y:489.5003 z:-4.8999996 Name: x1_NPC_LorathNahr} //{[Actor] [Type: Monster] SNOId:284530 GlobalId: 1017400498 Position: x:593.36835 y:489.5003 z:-4.8999996 Name: x1_NPC_LorathNahr}
[HandledSNO(284530)] [HandledSNO(ActorSno._x1_npc_lorathnahr)]
class LorathNahr_NPC : InteractiveNPC, IUpdateable class LorathNahr_NPC : InteractiveNPC, IUpdateable
{ {
public LorathNahr_NPC(MapSystem.World world, int snoID, TagMap tags) public LorathNahr_NPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
Brain = new AggressiveNPCBrain(this); // erekose Brain = new AggressiveNPCBrain(this); // erekose
@ -59,9 +59,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
} }
base.ReadTags(); base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
} }
public void Update(int tickCounter) public void Update(int tickCounter)

View File

@ -12,14 +12,15 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(61524)] //PT_Mystic_NoVendor [HandledSNO(ActorSno._pt_mystic_novendor)] //PT_Mystic_NoVendor
public class MysticNoVendor : InteractiveNPC public class MysticNoVendor : InteractiveNPC
{ {
public MysticNoVendor(World world, int snoId, TagMap tags) public MysticNoVendor(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.Invulnerable] = true;
} }
@ -30,11 +31,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
base.ReadTags(); base.ReadTags();
} }
} }
[HandledSNO(87037)] //PT_Mystic_NoVendor [HandledSNO(ActorSno._templarnpc)]
public class TemplarNPC : InteractiveNPC public class TemplarNPC : InteractiveNPC
{ {
public TemplarNPC(World world, int snoId, TagMap tags) public TemplarNPC(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.Invulnerable] = true;
} }

View File

@ -4,14 +4,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{ {
[HandledSNO(453600)] [HandledSNO(ActorSno._p43_ad_cow)]
class Cow : NPC class Cow : NPC
{ {
public Cow(World world, int snoId, TagMap tags) public Cow(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(453551)] [HandledSNO(ActorSno._p43_ad_farnham)]
class Farnham : InteractiveNPC class Farnham : InteractiveNPC
{ {
public Farnham(World world, int snoId, TagMap tags) public Farnham(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(453553)] [HandledSNO(ActorSno._p43_ad_griswold)]
class Griswold : InteractiveNPC class Griswold : InteractiveNPC
{ {
public Griswold(World world, int snoId, TagMap tags) public Griswold(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(453554)] [HandledSNO(ActorSno._p43_ad_ogden)]
class Ogden : InteractiveNPC class Ogden : InteractiveNPC
{ {
public Ogden(World world, int snoId, TagMap tags) public Ogden(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(453555)] [HandledSNO(ActorSno._p43_ad_pepin)]
class Pepin : InteractiveNPC class Pepin : InteractiveNPC
{ {
public Pepin(World world, int snoId, TagMap tags) public Pepin(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field7 = 1; this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.Core.MPQ.FileFormats;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
@ -19,11 +20,11 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(4580)] [HandledSNO(ActorSno._leah)]
class TownLeah : InteractiveNPC, IUpdateable class TownLeah : InteractiveNPC, IUpdateable
{ {
public TownLeah(MapSystem.World world, int snoID, TagMap tags) public TownLeah(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
Brain = new AggressiveNPCBrain(this); Brain = new AggressiveNPCBrain(this);
(Brain as AggressiveNPCBrain).PresetPowers.Clear(); (Brain as AggressiveNPCBrain).PresetPowers.Clear();
@ -48,9 +49,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
} }
base.ReadTags(); base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
} }
public void Update(int tickCounter) public void Update(int tickCounter)

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.Core.MPQ.FileFormats;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
@ -19,11 +20,11 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(6353)] [HandledSNO(ActorSno._tyrael)]
class Tyrael : InteractiveNPC, IUpdateable class Tyrael : InteractiveNPC, IUpdateable
{ {
public Tyrael(MapSystem.World world, int snoID, TagMap tags) public Tyrael(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoID, tags) : base(world, sno, tags)
{ {
Brain = new AggressiveNPCBrain(this); // erekose Brain = new AggressiveNPCBrain(this); // erekose
@ -48,9 +49,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
} }
base.ReadTags(); base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
} }
public void Update(int tickCounter) public void Update(int tickCounter)

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Logging;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
@ -8,11 +9,11 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(454066)] [HandledSNO(ActorSno._p6_necro_corpse_flesh)]
class NecromancerFlesh : Gizmo class NecromancerFlesh : Gizmo
{ {
public NecromancerFlesh(MapSystem.World world, int snoId, TagMap tags) public NecromancerFlesh(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Field2 = 16;//16; this.Field2 = 16;//16;
this.Field7 = 0x00000001; this.Field7 = 0x00000001;

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022 //Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem;
@ -23,11 +24,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{ {
[HandledSNO(364715 /* x1_OpenWorld_LootRunObelisk_B.acr */)] [HandledSNO(ActorSno._x1_openworld_lootrunobelisk_b /* x1_OpenWorld_LootRunObelisk_B.acr */)]
public sealed class NephalemStone : Gizmo public sealed class NephalemStone : Gizmo
{ {
public NephalemStone(World world, int snoId, TagMap tags) public NephalemStone(World world, ActorSno sno, TagMap tags)
: base(world, snoId, tags) : base(world, sno, tags)
{ {
this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.TeamID] = 2;
this.Attributes[GameAttribute.MinimapActive] = true; this.Attributes[GameAttribute.MinimapActive] = true;

Some files were not shown because too many files have changed in this diff Show More