예제 #1
0
        /// <summary>
        /// Drops an item to the current entity layer.
        /// </summary>
        /// <param name="entity">Entity</param>
        /// <param name="e">Drop item event</param>
        private void DropItem(IEntity entity, DropItemEventArgs e)
        {
            var worldServerConfiguration = DependencyContainer.Instance.Resolve <WorldConfiguration>();
            var drop = entity.Object.CurrentLayer.CreateEntity <ItemEntity>();

            drop.Drop.Item = new Item(e.Item.Id, e.Item.Quantity, -1, -1, -1, e.Item.Refine);

            if (e.Owner != null)
            {
                drop.Drop.Owner         = e.Owner;
                drop.Drop.OwnershipTime = Time.TimeInSeconds() + worldServerConfiguration.Drops.OwnershipTime;
                drop.Drop.DespawnTime   = Time.TimeInSeconds() + worldServerConfiguration.Drops.DespawnTime;
            }

            drop.Object = new ObjectComponent
            {
                MapId    = entity.Object.MapId,
                LayerId  = entity.Object.LayerId,
                ModelId  = e.Item.Id,
                Name     = drop.Drop.Item.Data.Name,
                Spawned  = true,
                Position = Vector3.GetRandomPositionInCircle(entity.Object.Position, DropCircleRadius),
                Type     = WorldObjectType.Item
            };
        }
예제 #2
0
        public void Broadcast(BroadcastEventType e,
                              AddItemEventArgs aea             = null,
                              RemoveItemEventArgs rea          = null,
                              SwapItemsEventArgs sea           = null,
                              SwapItemsTrhuInvEventArgs siea   = null,
                              UseItemEventArgs uea             = null,
                              DropItemEventArgs dea            = null,
                              InitializeInventoryEventArgs iea = null)
        {
            //Debug.Log($"Broadcasting event {e}");
            switch (e)
            {
            case BroadcastEventType.AddItem:
                OnAddItem?.Invoke(this, aea);
                OnChange?.Invoke(this, aea);
                break;

            case BroadcastEventType.RemoveItem:
                OnRemoveItem?.Invoke(this, rea);
                OnChange?.Invoke(this, rea);
                break;

            case BroadcastEventType.SwapItem:
                OnSwapItem?.Invoke(this, sea);
                OnChange?.Invoke(this, sea);
                break;

            case BroadcastEventType.SwapTrhuInventory:
                OnSwapTrhuInventory?.Invoke(this, siea);
                OnChange?.Invoke(this, siea);
                break;

            case BroadcastEventType.UseItem:
                OnUseItem?.Invoke(this, uea);
                OnChange?.Invoke(this, uea);
                break;

            case BroadcastEventType.DropItem:
                OnDropItem?.Invoke(this, dea);
                OnChange?.Invoke(this, dea);
                break;

            case BroadcastEventType.PickUpItem:
                OnPickUpItem?.Invoke(this, aea);
                OnChange?.Invoke(this, aea);
                break;

            case BroadcastEventType.InitializeInventory:
                OnInitializeInventory?.Invoke(this, iea);
                OnChange?.Invoke(this, iea);
                break;

            default:
                break;
            }
            if (autoSaveOnChange)
            {
                InventoryController.SaveInventoryData();
            }
        }
예제 #3
0
    private void DropItemFun(object sender, GameEventArgs e)
    {
        DropItemEventArgs args = (DropItemEventArgs)e;

        bool boo = args.ItemId == null || args.ItemId.Count == 0;

        if (sv != null)
        {
            sv.gameObject.SetActive(!boo);
            if (!boo)
            {
                Open(sender, args.ItemId);
            }
        }
    }
예제 #4
0
 void DragItemOver(object sender, DropItemEventArgs e)
 {
     e.Allow = IsItemDraggable(e.DropItem);
 }