public WO_Loot(DB_Loot loot, WorldObject at, MapPlayer onwer, ObjectsMgr manager) : base(manager.GetNewGuid() | Constants.IDRObject, manager) { _onwer = onwer; _position = at.Position; _rotation = at.Rotation; _loot = loot; _resource = DataMgr.SelectResource(Constants.LootResource); OnSpawn += WO_Loot_OnSpawn; OnDespawn += WO_Loot_OnDespawn; OnDestroy += WO_Loot_OnDestroy; Spawn(); }
public WO_NPC(DB_WorldObject data, ObjectsMgr manager) : base(manager.GetNewGuid() | Constants.ReleaseGuide, manager) { _data = data; if (!DataMgr.Select(data.ObjectID, out _npc)) { ServerLogger.LogError($"NPC id {data.ObjectID} doesn't exist"); } if ((_npc.Flags & NPCFlags.Dialog) > 0) { _dialog = _server.Dialogs.GetDialog(_npc.Dialog); } if ((_npc.Flags & NPCFlags.Trader) > 0) { shop_ser = new SER_Shop(_npc.Items, $"{_npc.Pony.Name}'s shop"); } if ((_npc.Flags & NPCFlags.Wears) > 0) { DB_Item entry; byte slot; _wears = new Dictionary <int, InventoryItem>(); wears_ser = new SER_Wears(_wears); foreach (var item in _npc.Wears) { if (item > 0 && DataMgr.Select(item, out entry)) { slot = entry.Slot.ToWearableIndex(); if (_wears.ContainsKey(slot)) { ServerLogger.LogWarn($"NPC id {data.ObjectID} duplicate wear slot {entry.Slot}"); } else { _wears[slot] = new InventoryItem(item); } } } } OnSpawn += WO_NPC_OnSpawn; OnDespawn += WO_NPC_OnDespawn; OnDestroy += WO_NPC_OnDestroy; if ((_npc.Flags & NPCFlags.ScriptedMovement) > 0) { AddComponent(new ScriptedMovement(_npc.Movement, this)); } else { AddComponent(new NullMovement(this)); } m_char = new Character(_npc.ID, -1, _npc.Level, -1, _npc.Pony, null); Spawn(); }
public WO_MOB(DB_WorldObject data, ObjectsMgr manager) : base(manager.GetNewGuid() | Constants.ReleaseGuide, manager) { _data = data; if (!DataMgr.Select(data.ObjectID, out _creature)) { ServerLogger.LogError($"Creature id {data.ObjectID} doesn't exist"); } else if (string.IsNullOrEmpty(_resource = DataMgr.SelectResource(_creature.Resource))) { ServerLogger.LogError($"Resource id {_creature.Resource} doesn't exist"); } OnSpawn += WO_MOB_OnSpawn; OnDespawn += WO_MOB_OnDespawn; OnDestroy += WO_MOB_OnDestroy; OnInitialize += WO_MOB_OnInitialize; OnKilled += WO_MOB_OnKilled; AddComponent(new BasicAI(this)); AddComponent(new MobStatsMgr(this)); AddComponent(new MobMovement(this)); AddComponent(new MobThreatMgr(this)); Spawn(); }
public WO_Pickup(DB_WorldObject data, ObjectsMgr manager) : base(manager.GetNewGuid() | Constants.IRObject, manager) { _data = data; if (data.Data01 <= 0) { ServerLogger.LogWarn($"Pickup {data.Guid} on map {data.Map} has negative or zero amount {data.Data01} of {data.ObjectID}"); } if ((_data.Flags & 1) == 1 && data.Time.TotalSeconds <= 0) { ServerLogger.LogWarn($"Pickup {data.Guid} on map {data.Map} has respawn flag but negative or zero respawn time {data.Time}"); _data.Flags &= 254; } if (!DataMgr.Select(data.ObjectID, out _item)) { ServerLogger.LogError($"Item id {data.ObjectID} doesn't exist"); } _resource = DataMgr.SelectResource(data.Data02); OnSpawn += WO_Pickup_OnSpawn; OnDespawn += WO_Pickup_OnDespawn; OnDestroy += WO_Pickup_OnDestroy; Spawn(); }