Пример #1
0
        public static void Add(YiObj obj, YiObj target)
        {
            if (!Entities.ContainsKey(obj.UniqueId))
            {
                Create(obj);
            }
            if (target.UniqueId == obj.UniqueId || Entities[obj.UniqueId].Contains(target.UniqueId))
            {
                return;
            }


            Entities[obj.UniqueId].Add(target.UniqueId);
            Add(target, obj);

            switch (target)
            {
            case Bot botTarget:
                //(obj as Player)?.Send(MsgSpawn.Create(botTarget));
                break;

            case Player playerTarget:
                (obj as Player)?.Send(MsgSpawn.Create(playerTarget));
                break;

            case Monster monsterTarget:
                monsterTarget.Brain.PlayersInSight++;
                (obj as Player)?.Send(MsgSpawn.Create(monsterTarget));
                break;

            case Npc npcTarget:
                (obj as Player)?.Send(MsgNpcSpawn.Create(npcTarget));
                if (npcTarget.BoothId != 0)
                {
                    (obj as Player)?.Send(LegacyPackets.SpawnCarpet(npcTarget, npcTarget.BoothId));
                }
                break;

            case DynamicNpc dynNpcTarget:
                (obj as Player)?.Send(MsgDynNpcSpawn.Create(dynNpcTarget));
                break;

            case FloorItem floorItemTarget:
                (obj as Player)?.Send(MsgFloorItem.Create(floorItemTarget, MsgFloorItemType.Create));
                break;

            case Portal portal:
                break;

            case null:
                Debugger.Break();
                break;

            default:
                Debugger.Break();
                break;
            }
        }
Пример #2
0
 private static void QueueDrop(FloorItem drop)
 {
     YiScheduler.Instance.Do(SchedulerPriority.Medium, () =>
     {
         for (var i = 0; i < 10; i++)
         {
             if (!GameWorld.Maps[drop.MapId].ItemValid(drop.Location.X, drop.Location.Y))
             {
                 drop.Location.X += (ushort)YiCore.Random.Next(-1, 2);
                 drop.Location.Y += (ushort)YiCore.Random.Next(-1, 2);
             }
             else
             {
                 AddCountdown(drop);
                 ScheduleDestruction(drop);
                 ScheduleOwnerRemove(drop);
                 ScreenSystem.Create(drop);
                 FloorItems.AddOrUpdate(drop.UniqueId, drop);
                 GameWorld.Maps[drop.MapId].Enter(drop);
                 if (drop.Original != null && drop.Owner is Player player)
                 {
                     var packet = MsgItem.Create(drop.Original.UniqueId, drop.Original.UniqueId, drop.Original.UniqueId, MsgItemType.RemoveInventory);
                     player.Send(packet);
                 }
                 ScreenSystem.Send(drop, MsgFloorItem.Create(drop, MsgFloorItemType.Create), true);
                 drop.AddStatusEffect(StatusEffect.SuperMan);
                 return;
             }
         }
         if (drop.Original != null && drop.Owner is Player owner)
         {
             owner.Inventory.AddOrUpdate(drop.Original.UniqueId, drop.Original);
             owner.Send(new MsgItemInformation(drop.Original, MsgItemPosition.Inventory));
         }
         else
         {
             drop.Owner.Money += drop.Amount;
         }
     });
 }
Пример #3
0
 public void Destroy()
 {
     ScreenSystem.Send(this, MsgFloorItem.Create(this, MsgFloorItemType.Delete));
     FloorItemSystem.FloorItems.TryRemove(UniqueId);
     GameWorld.Maps[MapId].Leave(this);
 }