public ImmutableWorldObject(AceObject aceO) : base((ObjectType)aceO.TypeId, new ObjectGuid(aceO.AceObjectId)) { this.Name = aceO.Name; this.DescriptionFlags = (ObjectDescriptionFlag)aceO.WdescBitField; this.Position = aceO.Position; this.WeenieClassid = aceO.WeenieClassId; this.WeenieFlags = (WeenieHeaderFlag)aceO.WeenieFlags; this.PhysicsData.MTableResourceId = aceO.MotionTableId; this.PhysicsData.Stable = aceO.SoundTableId; this.PhysicsData.CSetup = aceO.ModelTableId; // this should probably be determined based on the presence of data. this.PhysicsData.PhysicsDescriptionFlag = (PhysicsDescriptionFlag)aceO.PhysicsBitField; this.PhysicsData.PhysicsState = (PhysicsState)aceO.PhysicsState; // game data min required flags; this.Icon = (ushort)aceO.IconId; this.GameData.Usable = (Usable)aceO.Usability; this.GameData.RadarColour = (RadarColor)aceO.BlipColor; this.GameData.RadarBehavior = (RadarBehavior)aceO.Radar; this.GameData.UseRadius = aceO.UseRadius; }
public Vendor(AceObject aceO) : base((ObjectType)aceO.TypeId, new ObjectGuid(aceO.AceObjectId)) { Name = aceO.Name; DescriptionFlags = (ObjectDescriptionFlag)aceO.WdescBitField; Location = aceO.Position; WeenieClassid = aceO.WeenieClassId; WeenieFlags = (WeenieHeaderFlag)aceO.WeenieFlags; PhysicsData.MTableResourceId = aceO.MotionTableId; PhysicsData.Stable = aceO.SoundTableId; PhysicsData.CSetup = aceO.ModelTableId; // this should probably be determined based on the presence of data. PhysicsData.PhysicsDescriptionFlag = (PhysicsDescriptionFlag)aceO.PhysicsBitField; PhysicsData.PhysicsState = (PhysicsState)aceO.PhysicsState; // game data min required flags; Icon = aceO.IconId; GameData.Usable = (Usable)aceO.Usability; GameData.RadarColour = (RadarColor)aceO.BlipColor; GameData.RadarBehavior = (RadarBehavior)aceO.Radar; GameData.UseRadius = aceO.UseRadius; aceO.AnimationOverrides.ForEach(ao => ModelData.AddModel(ao.Index, (ushort)ao.AnimationId)); aceO.TextureOverrides.ForEach(to => ModelData.AddTexture(to.Index, (ushort)to.OldId, (ushort)to.NewId)); aceO.PaletteOverrides.ForEach(po => ModelData.AddPalette(po.SubPaletteId, po.Offset, po.Length)); }
public Cow(AceObject aceO) : base(aceO) { UseRadius = 1; IsAlive = true; SetupVitals(); }
public Monster(AceObject aceO) : base(aceO) { Guid = GuidManager.NewNonStaticGuid(); IsAlive = true; SetupVitals(); }
public GenericObject(AceObject aceObject) : base(aceObject) { if (Placement == null) { Placement = Enum.Placement.Resting; } }
public DebugObject(AceObject aceO) : this(new ObjectGuid(aceO.AceObjectId), aceO) { this.Location = aceO.Position; this.WeenieClassid = aceO.WeenieClassId; this.GameData.Type = aceO.WeenieClassId; }
public Container(AceObject aceObject, ObjectGuid guid, string name, ushort weenieClassId, ObjectDescriptionFlag descriptionFlag, WeenieHeaderFlag weenieFlag, Position position) : this(aceObject) { Name = name; DescriptionFlags = descriptionFlag; WeenieFlags = weenieFlag; Location = position; WeenieClassId = weenieClassId; }
public CollidableObject(AceObject aceO) : base((ObjectType)aceO.TypeId, new ObjectGuid(aceO.AceObjectId)) { this.Name = aceO.Name; this.DescriptionFlags = (ObjectDescriptionFlag)aceO.WdescBitField; this.Location = aceO.Position; this.WeenieClassid = aceO.WeenieClassId; this.WeenieFlags = (WeenieHeaderFlag)aceO.WeenieFlags; this.PhysicsData.MTableResourceId = aceO.MotionTableId; this.PhysicsData.Stable = aceO.SoundTableId; this.PhysicsData.CSetup = aceO.ModelTableId; // this should probably be determined based on the presence of data. this.PhysicsData.PhysicsDescriptionFlag = (PhysicsDescriptionFlag)aceO.PhysicsBitField; // Creating from weenie - the pcap may have had a container or a position // but if we are creating new that will be sent when we place ground or container not at create this.PhysicsData.PhysicsDescriptionFlag &= ~PhysicsDescriptionFlag.Parent; this.PhysicsData.PhysicsDescriptionFlag &= ~PhysicsDescriptionFlag.Position; this.PhysicsData.PhysicsState = (PhysicsState)aceO.PhysicsState; // game data min required flags; this.Icon = aceO.IconId; this.GameData.AmmoType = (AmmoType)aceO.AmmoType; this.GameData.Burden = (ushort)aceO.Burden; this.GameData.CombatUse = (CombatUse)aceO.CombatUse; this.GameData.ContainerCapacity = aceO.ContainersCapacity; this.GameData.Cooldown = aceO.CooldownId; this.GameData.CooldownDuration = (decimal)aceO.CooldownDuration; this.GameData.HookItemTypes = aceO.HookItemTypes; this.GameData.HookType = (ushort)aceO.HookTypeId; this.GameData.IconOverlay = (ushort)aceO.IconOverlayId; this.GameData.IconUnderlay = (ushort)aceO.IconUnderlayId; this.GameData.ItemCapacity = aceO.ItemsCapacity; this.GameData.Material = (Material)aceO.MaterialType; this.GameData.MaxStackSize = aceO.MaxStackSize; this.GameData.MaxStructure = aceO.MaxStructure; // GameData.Name = aceO.Name; I think this is redundant and should be removed from Game Data or from world object this.GameData.RadarBehavior = (RadarBehavior)aceO.Radar; this.GameData.RadarColour = (RadarColor)aceO.Radar; this.GameData.UseRadius = aceO.UseRadius; this.GameData.Spell = (Spell)aceO.SpellId; this.GameData.Script = aceO.PScript; this.GameData.ValidLocations = (EquipMask)aceO.ValidLocations; this.GameData.StackSize = aceO.StackSize; this.GameData.Struture = aceO.Structure; this.GameData.Value = aceO.Value; this.GameData.Type = (ushort)aceO.AceObjectId; this.GameData.TargetType = aceO.TargetTypeId; this.GameData.Usable = (Usable)aceO.Usability; aceO.AnimationOverrides.ForEach(ao => this.ModelData.AddModel(ao.Index, (ushort)ao.AnimationId)); aceO.TextureOverrides.ForEach(to => this.ModelData.AddTexture(to.Index, (ushort)to.OldId, (ushort)to.NewId)); aceO.PaletteOverrides.ForEach(po => this.ModelData.AddPalette(po.SubPaletteId, po.Offset, po.Length)); }
public Generator(ObjectGuid guid, AceObject baseAceObject) : base(guid, baseAceObject) { DescriptionFlags = ObjectDescriptionFlag.None; Stuck = true; Attackable = true; HiddenAdmin = true; IgnoreCollision = true; Hidden = true; Ethereal = true; RadarBehavior = Enum.RadarBehavior.ShowNever; RadarColor = Enum.RadarColor.Admin; Usable = Enum.Usable.No; }
public Creature(AceObject baseObject) : base(baseObject) { if (Attackable == false) { if (RadarColor != Enum.RadarColor.Yellow || (RadarColor == Enum.RadarColor.Yellow && CreatureType == null)) { NpcLooksLikeObject = true; } } }
public Coin(AceObject aceObject) : base(aceObject) { CoinPropertiesInt = PropertiesInt.Where(x => x.PropertyId == (uint)PropertyInt.Value || x.PropertyId == (uint)PropertyInt.EncumbranceVal).ToList(); StackSize = (base.StackSize ?? 1); Value = (Weenie.Value ?? 0) * (StackSize ?? 1); if (StackSize == null) { StackSize = 1; } }
/// <summary> /// On initial load, we will create all of the wielded items as world objects and add to dictionary for management. /// </summary> /// <param name="aceObject"></param> public Container(AceObject aceObject) : base(aceObject) { CoinValue = 0; log.Debug($"{aceObject.Name} CoinValue initialized to {CoinValue}"); Burden = 0; log.Debug($"{aceObject.Name} Burden initialized to {Burden}"); Burden += Weenie.EncumbranceVal ?? 0; log.Debug($"{aceObject.Name}'s weenie id is {Weenie.WeenieClassId} and its base burden is {Weenie.EncumbranceVal}, added to burden, Burden = {Burden}"); Value = 0; Value += Weenie.Value ?? 0; WieldedObjects = new Dictionary <ObjectGuid, WorldObject>(); foreach (var wieldedItem in WieldedItems) { ObjectGuid woGuid = new ObjectGuid(wieldedItem.Value.AceObjectId); WieldedObjects.Add(woGuid, WorldObjectFactory.CreateWorldObject(wieldedItem.Value)); Burden += wieldedItem.Value.EncumbranceVal; log.Debug($"{aceObject.Name} is wielding {wieldedItem.Value.Name}, adding {wieldedItem.Value.EncumbranceVal}, current Burden = {Burden}"); Value += wieldedItem.Value.Value; } InventoryObjects = new Dictionary <ObjectGuid, WorldObject>(); foreach (var inventoryItem in Inventory) { ObjectGuid woGuid = new ObjectGuid(inventoryItem.Value.AceObjectId); WorldObject wo = WorldObjectFactory.CreateWorldObject(inventoryItem.Value); InventoryObjects.Add(woGuid, wo); Burden += wo.Burden ?? 0; log.Debug($"{aceObject.Name} is has {wo.Name} in inventory, adding {wo.Burden}, current Burden = {Burden}"); Value += wo.Value ?? 0; if (wo.WeenieType == WeenieType.Coin) { CoinValue += wo.Value ?? 0; log.Debug($"{aceObject.Name} is has {wo.Name} in inventory, of WeenieType.Coin, adding {wo.Value}, current CoinValue = {CoinValue}"); } } }
public Food(AceObject aceObject) : base(aceObject) { StackSize = (base.StackSize ?? 1); if (StackSize == null) { StackSize = 1; } Boost = (base.Boost ?? 0); if (BoostEnum == null) { BoostEnum = 0; } }
public Door(AceObject aceO) : base(aceO) { // Set PhysicsState defaults.. Leaving commented for now to read in what was pcapped // PhysicsState = 0; // ReportCollision = true; // HasPhysicsBsp = true; if (!DefaultOpen) { CurrentMotionState = motionStateClosed; IsOpen = false; Ethereal = false; } else { CurrentMotionState = motionStateOpen; IsOpen = true; Ethereal = true; } IsLocked = AceObject.Locked ?? false; ResetInterval = AceObject.ResetInterval ?? 30.0f; ResistLockpick = AceObject.ResistLockpick ?? 0; LockCode = AceObject.LockCode ?? ""; // If we had the base weenies this would be the way to go ////if (DefaultLocked) //// IsLocked = true; ////else //// IsLocked = false; // But since we don't know what doors were DefaultLocked, let's assume for now that any door that starts Locked should default as such. if (IsLocked) { DefaultLocked = true; } movementOpen.ForwardCommand = (uint)MotionCommand.On; movementClosed.ForwardCommand = (uint)MotionCommand.Off; if (UseRadius < 2) { UseRadius = 2; } }
public Door(AceObject aceO) : base((ObjectType)aceO.TypeId, new ObjectGuid(aceO.AceObjectId)) { this.Name = aceO.Name; this.DescriptionFlags = (ObjectDescriptionFlag)aceO.WdescBitField; this.Location = aceO.Position; this.WeenieClassid = aceO.WeenieClassId; this.WeenieFlags = (WeenieHeaderFlag)aceO.WeenieFlags; this.PhysicsData.MTableResourceId = aceO.MotionTableId; this.PhysicsData.Stable = aceO.SoundTableId; this.PhysicsData.CSetup = aceO.ModelTableId; this.PhysicsData.Petable = aceO.PhysicsTableId; // this should probably be determined based on the presence of data. this.PhysicsData.PhysicsDescriptionFlag = (PhysicsDescriptionFlag)aceO.PhysicsBitField; // this.PhysicsData.PhysicsState = (PhysicsState)aceO.PhysicsState; this.PhysicsData.PhysicsState |= PhysicsState.HasPhysicsBsp | PhysicsState.ReportCollision; this.PhysicsData.CurrentMotionState = motionStateClosed; this.PhysicsData.ObjScale = aceO.ObjectScale; this.PhysicsData.AnimationFrame = aceO.AnimationFrameId; this.PhysicsData.Translucency = aceO.Translucency; // game data min required flags; this.Icon = aceO.IconId; this.GameData.Type = aceO.WeenieClassId; this.GameData.Usable = (Usable)aceO.Usability; this.GameData.RadarColour = (RadarColor)aceO.BlipColor; this.GameData.RadarBehavior = (RadarBehavior)aceO.Radar; this.GameData.UseRadius = aceO.UseRadius; aceO.AnimationOverrides.ForEach(ao => this.ModelData.AddModel(ao.Index, ao.AnimationId)); aceO.TextureOverrides.ForEach(to => this.ModelData.AddTexture(to.Index, to.OldId, to.NewId)); aceO.PaletteOverrides.ForEach(po => this.ModelData.AddPalette(po.SubPaletteId, po.Offset, po.Length)); this.ModelData.PaletteGuid = aceO.PaletteId; movementOpen.ForwardCommand = (ushort)MotionCommand.On; movementClosed.ForwardCommand = (ushort)MotionCommand.Off; }
/// <summary> /// On initial load, we will create all of the wielded items as world objects and add to dictionary for management. /// </summary> /// <param name="aceObject"></param> public Container(AceObject aceObject) : base(aceObject) { CoinValue = 0; WieldedObjects = new Dictionary <ObjectGuid, WorldObject>(); foreach (var wieldedItem in WieldedItems) { ObjectGuid woGuid = new ObjectGuid(wieldedItem.Value.AceObjectId); WieldedObjects.Add(woGuid, WorldObjectFactory.CreateWorldObject(wieldedItem.Value)); } InventoryObjects = new Dictionary <ObjectGuid, WorldObject>(); foreach (var inventoryItem in Inventory) { ObjectGuid woGuid = new ObjectGuid(inventoryItem.Value.AceObjectId); InventoryObjects.Add(woGuid, WorldObjectFactory.CreateWorldObject(inventoryItem.Value)); if (InventoryObjects[woGuid].WeenieType == WeenieType.Container) { InventoryObjects[woGuid].InventoryObjects = new Dictionary <ObjectGuid, WorldObject>(); foreach (var item in Inventory[woGuid].Inventory) { ObjectGuid cwoGuid = new ObjectGuid(item.Value.AceObjectId); InventoryObjects[woGuid].InventoryObjects.Add(cwoGuid, WorldObjectFactory.CreateWorldObject(item.Value)); if (InventoryObjects[woGuid].WeenieType == WeenieType.Coin) { CoinValue += item.Value.Value ?? 0; } } } if (InventoryObjects[woGuid].WeenieType == WeenieType.Coin) { CoinValue += inventoryItem.Value.Value ?? 0; } } }
public Portal(AceObject aceO) : base(aceO) { var weenie = Database.DatabaseManager.World.GetAceObjectByWeenie(AceObject.WeenieClassId); // check to see if this ace object has a destination. if so, defer to it. if (aceO.Destination != null) { Destination = aceO.Destination; } else { // but if not, portals roll up to the weenie Destination = weenie.Destination; } MinimumLevel = weenie.MinLevel ?? 0; MaximumLevel = weenie.MaxLevel ?? 0; IsTieable = ((weenie.PortalBitmask ?? 0) & (uint)PortalBitmask.NoRecall) == 0; IsSummonable = ((weenie.PortalBitmask ?? 0) & (uint)PortalBitmask.NoSummon) == 0; AppraisalPortalDestination = weenie.AppraisalPortalDestination; PortalShowDestination = weenie.PortalShowDestination ?? false; }
public Gem(AceObject aceObject) : base(aceObject) { }
public Game(AceObject aceO) : base(aceO) { // Setup game variables... // TODO: so much more than what's here now. }
public Container(AceObject aceObject) : base(aceObject) { }
public GamePiece(AceObject aceO) : base(aceO) { }
// todo : SO : Turning to player movement states - looks at @og public Vendor(AceObject aceO) : base(aceO) { }
public Container(AceObject aceObject, ObjectGuid guid) : base(guid, aceObject) { }
public Scroll(AceObject aceObject) : base(aceObject) { SpellTable table = SpellTable.ReadFromDat(); Use = $"Inscribed spell: {table.Spells[SpellId].Name}\n"; Use += $"{table.Spells[SpellId].Desc}"; LongDesc = "Use this item to attempt to learn its spell."; Power = table.Spells[SpellId].Power; School = table.Spells[SpellId].School; Burden = 30; switch (Power) { case spellLevel1: Value = 1; break; case spellLevel2: Value = 5; break; case spellLevel3: Value = 20; break; case spellLevel4: Value = 100; break; case spellLevel5: Value = 200; break; case spellLevel6: Value = 1000; break; case spellLevel7: Value = 2000; break; case spellLevel8: Value = 60000; break; } ScrollPropertiesInt = PropertiesInt.Where(x => x.PropertyId == (uint)PropertyInt.Value || x.PropertyId == (uint)PropertyInt.EncumbranceVal).ToList(); if (ScrollPropertiesString == null) { ScrollPropertiesString = new List <AceObjectPropertiesString>(); } if (ScrollPropertiesSpellId == null) { ScrollPropertiesSpellId = new List <AceObjectPropertiesSpell>(); } var useString = new AceObjectPropertiesString(); useString.AceObjectId = Guid.Full; useString.PropertyId = (ushort)PropertyString.Use; useString.PropertyValue = Use; ScrollPropertiesString.Add(useString); var longDescString = new AceObjectPropertiesString(); longDescString.AceObjectId = Guid.Full; longDescString.PropertyId = (ushort)PropertyString.LongDesc; longDescString.PropertyValue = LongDesc; ScrollPropertiesString.Add(longDescString); var propSpell = new AceObjectPropertiesSpell(); propSpell.AceObjectId = Guid.Full; propSpell.SpellId = SpellId; ScrollPropertiesSpellId.Add(propSpell); }
public DebugObject(AceObject aceO) : base((ObjectType)aceO.TypeId, new ObjectGuid(aceO.AceObjectId)) { this.Name = aceO.Name; if (this.Name == null) { this.Name = "NULL"; } this.DescriptionFlags = (ObjectDescriptionFlag)aceO.WdescBitField; this.Location = aceO.Position; this.WeenieClassid = aceO.WeenieClassId; this.WeenieFlags = (WeenieHeaderFlag)aceO.WeenieFlags; this.PhysicsData.MTableResourceId = aceO.MotionTableId; this.PhysicsData.Stable = aceO.SoundTableId; this.PhysicsData.CSetup = aceO.ModelTableId; this.PhysicsData.Petable = aceO.PhysicsTableId; // this should probably be determined based on the presence of data. this.PhysicsData.PhysicsDescriptionFlag = (PhysicsDescriptionFlag)aceO.PhysicsBitField; this.PhysicsData.PhysicsState = (PhysicsState)aceO.PhysicsState; if (aceO.CurrentMotionState == "0") { this.PhysicsData.CurrentMotionState = null; } else { this.PhysicsData.CurrentMotionState = new UniversalMotion(Convert.FromBase64String(aceO.CurrentMotionState)); } // this.PhysicsData.CurrentMotionState = new GeneralMotion(MotionStance.Standing, new MotionItem(MotionCommand.Off)); // this.PhysicsData.CurrentMotionState = new GeneralMotion(MotionStance.Standing, new MotionItem(MotionCommand.Dead)); this.PhysicsData.ObjScale = aceO.ObjectScale; this.PhysicsData.AnimationFrame = aceO.AnimationFrameId; // game data min required flags; this.Icon = aceO.IconId; if (this.GameData.NamePlural == null) { this.GameData.NamePlural = "NULLs"; } this.GameData.Type = aceO.WeenieClassId; this.GameData.Usable = (Usable)aceO.Usability; this.GameData.RadarColour = (RadarColor)aceO.BlipColor; this.GameData.RadarBehavior = (RadarBehavior)aceO.Radar; this.GameData.UseRadius = aceO.UseRadius; this.GameData.HookType = (ushort)aceO.HookTypeId; this.GameData.HookItemTypes = aceO.HookItemTypes; this.GameData.Burden = (ushort)aceO.Burden; this.GameData.Value = aceO.Value; this.GameData.ItemCapacity = aceO.ItemsCapacity; aceO.AnimationOverrides.ForEach(ao => this.ModelData.AddModel(ao.Index, ao.AnimationId)); aceO.TextureOverrides.ForEach(to => this.ModelData.AddTexture(to.Index, to.OldId, to.NewId)); aceO.PaletteOverrides.ForEach(po => this.ModelData.AddPalette(po.SubPaletteId, po.Offset, po.Length)); // aceO.PaletteOverrides.ForEach(po => this.ModelData.AddPalette(po.SubPaletteId, (byte)(po.Offset / 8), (byte)(po.Length / 8))); this.ModelData.PaletteGuid = aceO.PaletteId; }
public Lifestone(AceObject aceO) : base(aceO) { }
public Key(AceObject aceO) : base(aceO) { KeyCode = AceObject.KeyCode ?? ""; Structure = AceObject.Structure ?? AceObject.MaxStructure; }
public Portal(AceObject aceObject) : base(aceObject) { }
public Book(AceObject aceO) : base(aceO) { Pages = (uint)PropertiesBook.Count; // Set correct Page Count for appraisal based on data actually in database. MaxPages = MaxPages ?? 1; // If null, set MaxPages to 1. }
public GenericObject(AceObject aceObject) : base(aceObject) { }