Пример #1
0
 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();
 }
Пример #2
0
 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();
 }
Пример #3
0
 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();
 }
Пример #4
0
 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();
 }