Beispiel #1
0
        public void Draw(SimpleInventoryUI ui, IEventArgs args, ItemInventory inventory, ItemPosition ip)
        {
            FreeUICreateAction fui = new FreeUICreateAction();

            FreeImageComponet img = new FreeImageComponet();
            int startX            = GetX(inventory, args, ui, ip, img);
            int startY            = GetY(inventory, args, ui, ip, img);

            img.SetX(startX.ToString());
            img.SetY(startY.ToString());
            img.SetRelative(ui.relative);
            img.SetWidth("64");
            img.SetHeight("64");
            img.SetEvent(inventory.GetName() + "," + ip.GetX() + "," + ip.GetY());
            if (ui.nomouse)
            {
                img.SetNoMouse("true");
            }
            if (ui.itemFixed)
            {
                img.SetFixed("true");
            }

            img.SetUrl(ip.GetKey().GetImg());
            img.SetOriginalSize(ip.GetKey().GetItemWidth() + "," + ip.GetKey().GetItemHeight());

            fui.GetComponents().Add(img);

            fui.SetKey(ip.GetUIKey());
            fui.SetShow(inventory.IsOpen());
            fui.SetScope(1);
            fui.SetPlayer("current");
            fui.Act(args);
        }
        public override void DoAction(IEventArgs args)
        {
            FreeRuleEventArgs fr     = (FreeRuleEventArgs)args;
            IGameUnit         player = GetPlayer(args);

            if (player != null)
            {
                IParable pa = fr.GetUnit(item);
                if (pa is ItemPosition)
                {
                    ItemPosition  ip    = (ItemPosition)pa;
                    FreeData      fd    = (FreeData)player;
                    ItemInventory toInv = fd.freeInventory.GetInventoryManager().GetInventory(FreeUtil.ReplaceVar(toInventory, args));
                    if (toInv != null)
                    {
                        int toX = 0;
                        int toY = 0;
                        if (string.IsNullOrEmpty(x) && string.IsNullOrEmpty(y))
                        {
                            int[] next = toInv.GetNextEmptyPosition(ip.GetKey());
                            toX = next[0];
                            toY = next[1];
                        }
                        else
                        {
                            toX = FreeUtil.ReplaceInt(x, args);
                            toY = FreeUtil.ReplaceInt(y, args);
                        }
                        ItemInventoryUtil.MovePosition(ip, toInv, toX, toY, fr);
                    }
                }
            }
        }
        public override void DoAction(IEventArgs args)
        {
            FreeRuleEventArgs fr     = (FreeRuleEventArgs)args;
            IGameUnit         player = GetPlayer(args);

            if (StringUtil.IsNullOrEmpty(count) || count.Equals("0"))
            {
                count = "0";
            }
            method = new SelectMethod(FreeUtil.ReplaceVar(exp, args));
            if (player != null)
            {
                FreeData       fd           = (FreeData)player;
                ItemPosition[] currentItems = fd.freeInventory.Select(method);
                fr.TempUse("current", fd);
                int c = FreeUtil.ReplaceInt(count, args);
                for (int i = 0; i < currentItems.Length; i++)
                {
                    ItemPosition ip = currentItems[i];
                    ip.SetCount(c);
                    ip.GetKey().SetCount(c);
                    ip.GetInventory().GetInventoryUI().UpdateItem(fr, ip.GetInventory(), ip);
                }
                fr.Resume("current");
            }
        }
Beispiel #4
0
        private static void DropPart(string inv, FreeData fd, ServerRoom room)
        {
            int           c3 = fd.freeInventory.GetInventoryManager().GetInventory(inv).posList.Count;
            ItemInventory w3 = fd.freeInventory.GetInventoryManager().GetInventory(inv);

            if (c3 > 0)
            {
                ItemPosition ip = w3.posList[0];

                w3.RemoveItem(room.FreeArgs, ip);

                FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.GetKey().GetKey());

                if (BagCapacityUtil.CanAddToBag(room.FreeArgs, fd, ip))
                {
                    fd.freeInventory.GetInventoryManager().GetDefaultInventory().AddItem(room.FreeArgs, ip.key, true);
                }
                else
                {
                    if (info.cat > 0)
                    {
                        room.RoomContexts.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleEquipmentEntity(
                            (ECategory)info.cat,
                            info.id,
                            ip.GetCount(), fd.Player.position.Value);
                    }
                }
            }
        }
 public static void UseItem(ItemPosition ip, FreeData fd, FreeRuleEventArgs fr)
 {
     if (ip != null)
     {
         fr.TempUse(PARA_ITEM, ip.GetKey());
         if (ip.GetKey().Effect(fr))
         {
             if (!ip.GetKey().IsGoods())
             {
                 if (ip.GetKey().IsUseClose())
                 {
                     CloseInventory(ip.GetInventory(), fr);
                 }
                 ip.GetInventory().UseItem(fr, ip);
                 if (ip.GetCount() <= 0 && ip.GetKey().IsConsume())
                 {
                     RemoveUI(ip, fr);
                 }
             }
         }
         fr.Resume(PARA_ITEM);
         if (!ip.GetKey().IsGoods())
         {
             fd.freeInventory.SetCurrentItem(ip, fr);
         }
         ip.GetKey().GetParameters().AddPara(new IntPara(PARA_ITEM_USE_TIME, fr.GameContext.session.currentTimeObject.CurrentTime));
     }
 }
Beispiel #6
0
		public virtual void SetCurrentItem(ItemPosition currentItem, ISkillArgs args)
		{
			this.currentItem = currentItem;
			string cat = ((FreeGameItem)currentItem.GetKey()).GetCat();
			if (cat != null)
			{
				this.lastUseItem[cat] = currentItem;
			}
		}
Beispiel #7
0
        public static bool MoveOut(ItemInventory fromIn, ItemInventory toIn, ItemPosition ip, int countX, int countY, ISkillArgs args, FreeRuleEventArgs fr, IInventoryUI fromUI, IInventoryUI toUI)
        {
            if (fromIn == toIn)
            {
                // 竖格超出
                if (countY >= toIn.GetRow() || countY < 0)
                {
                    if (toUI.MoveOutAction != null)
                    {
                        ip.GetKey().SetCount(ip.GetCount());
                        fr.TempUse(PARA_ITEM, ip.GetKey());
                        fr.Resume(PARA_ITEM);
                        RemoveItem(fromIn, ip, args);

                        toUI.MoveOutAction.Act(args);
                        return(true);
                    }
                }
            }
            if (fromIn == toIn)
            {
                // 横格超出
                if (countX >= toIn.GetColumn() || countX < 0)
                {
                    if (toUI.MoveOutAction != null)
                    {
                        ip.GetKey().SetCount(ip.GetCount());
                        fr.TempUse(PARA_ITEM, ip.GetKey());
                        fr.Resume(PARA_ITEM);
                        RemoveItem(fromIn, ip, args);

                        toUI.MoveOutAction.Act(args);
                        return(true);
                    }
                }
            }
            return(false);
        }
Beispiel #8
0
 public virtual void UseItem(ISkillArgs args, ItemInventory inventory, ItemPosition ip)
 {
     string cat = ((FreeGameItem)ip.GetKey()).GetCat();
     foreach (ItemPosition i in inventory.GetItems())
     {
         if (((FreeGameItem)i.GetKey()).GetCat().Equals(cat))
         {
             i.SetUsed(false);
             UpdateItem(args, inventory, i);
         }
     }
     ip.SetUsed(true);
     UpdateItem(args, inventory, ip);
 }
Beispiel #9
0
 private void HandleItem(ItemPosition ip, FreeRuleEventArgs fr)
 {
     if (action != null)
     {
         if ("true".Equals(FreeUtil.ReplaceVar(usePosition, fr)))
         {
             fr.TempUse(item, ip);
         }
         else
         {
             fr.TempUse(item, ip.GetKey());
         }
         action.Act(fr);
         fr.Resume(item);
     }
 }
Beispiel #10
0
        private void SetCount(ItemPosition ip)
        {
            FreeNumberComponet countUI = GetCount();

            if (countUI != null)
            {
                if (ip.GetKey().GetItemStack() == 1)
                {
                    countUI.SetNumber(string.Empty);
                }
                else
                {
                    countUI.SetNumber(ip.GetCount().ToString());
                }
            }
        }
Beispiel #11
0
        private static void ChangeItemStack(int delta, ItemInventory fromIn, ItemInventory toIn, IInventoryUI fromUI, IInventoryUI toUI, ItemPosition ip, ItemPosition old, ISkillArgs args)
        {
            if (ip.GetCount() <= delta)
            {
                RemoveItem(fromIn, ip, args);
                HandleMoveAction(fromIn, toIn, fromUI, toUI, ip, args, true);

                old.SetCount(old.GetCount() + (int)MyMath.Min(delta, ip.GetCount()));
                toUI.UpdateItem(args, toIn, old);
            }
            else
            {
                old.SetCount(old.GetKey().GetItemStack());
                ip.SetCount(ip.GetCount() - delta);
                toUI.UpdateItem(args, toIn, old);
                fromUI.UpdateItem(args, fromIn, ip);
            }
        }
Beispiel #12
0
        private static void DropItem(string inv, FreeData fd, ServerRoom room)
        {
            Debug.LogFormat("inv {0}", inv);
            int           c3 = fd.freeInventory.GetInventoryManager().GetInventory(inv).posList.Count;
            ItemInventory w3 = fd.freeInventory.GetInventoryManager().GetInventory(inv);

            if (c3 > 0)
            {
                ItemPosition ip = w3.posList[0];
                w3.RemoveItem(room.ContextsWrapper.FreeArgs, ip);
                FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.GetKey().GetKey());

                if (info.cat > 0)
                {
                    /*room.RoomContexts.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)info.cat,
                     *  info.id, ip.GetCount(), fd.Player.position.Value, ip.GetCount());*/
                    CreateSceneObjectAction.CreateDropItem(fd.Player, info.cat, info.id, ip.GetCount(), room.RoomContexts.session.entityFactoryObject.SceneObjectEntityFactory);
                }
            }
        }
Beispiel #13
0
 public static void ShowSplitUI(ServerRoom room, FreeData fd, string key)
 {
     // 分拆道具
     if (key.StartsWith("default"))
     {
         ItemPosition ip   = FreeItemManager.GetItemPosition(room.FreeArgs, key, fd.GetFreeInventory().GetInventoryManager());
         FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
         if (ip.count > 1)
         {
             SimpleProto data = FreePool.Allocate();
             data.Key = FreeMessageConstant.ShowSplitUI;
             data.Ins.Add(info.cat);
             data.Ins.Add(info.id);
             data.Ins.Add(ip.count);
             data.Ss.Add(key);
             data.Ss.Add(ip.GetKey().GetName());
             FreeMessageSender.SendMessage(fd.Player, data);
         }
     }
 }
Beispiel #14
0
 public static void ShowSplitUI(ServerRoom room, FreeData fd, string key)
 {
     // 分拆道具
     if (key.StartsWith(ChickenConstant.BagDefault))
     {
         ItemPosition ip        = FreeItemManager.GetItemPosition(room.ContextsWrapper.FreeArgs, key, fd.GetFreeInventory().GetInventoryManager());
         FreeItemInfo info      = FreeItemConfig.GetItemInfo(ip.key.GetKey());
         var          stackable = true;
         if (info.cat == (int)ECategory.Weapon)
         {
             WeaponResConfigItem item = SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(info.id);
             if (item.Type != (int)EWeaponType_Config.ThrowWeapon)
             {
                 stackable = false;
             }
         }
         else
         {
             if (info.stack <= 1)
             {
                 stackable = false;
             }
         }
         SimpleProto data = FreePool.Allocate();
         if (!stackable || ip.count <= 1)
         {
             data.Key = FreeMessageConstant.ChickenTip;
             data.Ss.Add("word78");
             FreeMessageSender.SendMessage(fd.Player, data);
             return;
         }
         data.Key = FreeMessageConstant.ShowSplitUI;
         data.Ins.Add(info.cat);
         data.Ins.Add(info.id);
         data.Ins.Add(ip.count);
         data.Ss.Add(key);
         data.Ss.Add(ip.GetKey().GetName());
         FreeMessageSender.SendMessage(fd.Player, data);
         PlayerStateUtil.AddPlayerState(EPlayerGameState.InterruptItem, fd.Player.gamePlay);
     }
 }
Beispiel #15
0
        public override void DoAction(IEventArgs args)
        {
            FreeRuleEventArgs fr     = (FreeRuleEventArgs)args;
            IGameUnit         player = GetPlayer(args);

            if (player != null)
            {
                FreeData fd = (FreeData)player;
                try
                {
                    ItemPosition currentItem = fd.freeInventory.GetCurrentItem();
                    if (!StringUtil.IsNullOrEmpty(cat))
                    {
                        currentItem = fd.freeInventory.GetCurrentItem(FreeUtil.ReplaceVar(cat, args));
                    }
                    if (currentItem != null)
                    {
                        currentItem.GetInventory().RemoveItem(fr, currentItem);
                        if (drop != null)
                        {
                            fr.TempUse("item", currentItem.GetKey());
                            drop.Act(args);
                            fr.Resume("item");
                        }
                    }
                }
                catch (Exception e)
                {
                    StringPara sp = new StringPara("message", e.Message);
                    args.GetDefault().GetParameters().TempUse(sp);
                    if (message != null)
                    {
                        message.Act(args);
                    }
                    args.GetDefault().GetParameters().Resume("message");
                }
            }
        }
Beispiel #16
0
        private void onFind(IGameEntity localEntity)
        {
            if (localEntity.EntityType != 6)
            {
                return;
            }

            SceneObjectEntity entity = fr.GameContext.sceneObject.GetEntityWithEntityKey(localEntity.EntityKey);

            if (entity != null && entity.hasSimpleItem && entity.simpleItem != null)
            {
                if (IsNear(entity.position.Value, _playerEntity.position.Value))
                {
                    CreateItemToPlayerAction action = new CreateItemToPlayerAction();
                    action.key  = FreeItemConfig.GetItemKey(entity.simpleItem.Category, entity.simpleItem.Id);
                    action.name = ChickenConstant.BagGround;

                    if (!string.IsNullOrEmpty(action.key))
                    {
                        action.count = entity.simpleItem.Count.ToString();
                        action.SetPlayer("current");
                        fr.TempUse("current", (FreeData)_playerEntity.freeData.FreeData);

                        action.Act(fr);

                        if (_ground.posList.Count > 0)
                        {
                            ItemPosition lastItem = _ground.posList[_ground.posList.Count - 1];
                            lastItem.GetKey().GetParameters()
                            .AddPara(new IntPara("entityId", entity.entityKey.Value.EntityId));
                        }

                        fr.Resume("current");
                    }
                }
            }
        }
Beispiel #17
0
        private void AdjustSize(IEventArgs args, SimpleInventoryUI ui, ItemPosition ip, ItemInventory inventory, FreeImageComponet back, FreeImageComponet itemImg, int startX, int startY)
        {
            //back.SetWidth((ip.GetKey().GetGridWidth() * ui.itemWidth + (ip.GetKey().GetGridWidth() - 1) * ui.GetWidthMargin(inventory, args)).ToString());
            //back.SetHeight((ip.GetKey().GetGridHeight() * ui.itemHeight + (ip.GetKey().GetGridHeight() - 1) * ui.GetHeightMargin(inventory, args)).ToString());
            double w   = double.Parse(back.GetWidth(args)) / (double)ip.GetKey().GetItemWidth();
            double h   = double.Parse(back.GetHeight(args)) / (double)ip.GetKey().GetItemHeight();
            double per = h;

            if (w < h)
            {
                per = w;
            }
            int iw = (int)(ip.GetKey().GetItemWidth() * per * ip.GetKey().GetIconScale());
            //itemImg.SetWidth(iw.ToString());
            int ih = (int)(ip.GetKey().GetItemHeight() * per * ip.GetKey().GetIconScale());

            //itemImg.SetHeight(ih.ToString());
            //itemImg.SetX((startX + (NumberUtil.GetInt(back.GetWidth(args)) - iw) / 2).ToString());
            //itemImg.SetY((startY + (NumberUtil.GetInt(back.GetHeight(args)) - ih) / 2).ToString());
            itemImg.SetEvent(inventory.GetName() + "," + ip.GetX() + "," + ip.GetY());
        }
Beispiel #18
0
        public static void Move(ItemInventory fromIn, ItemInventory toIn, ItemPosition ip, int countX, int countY, ISkillArgs args, FreeRuleEventArgs fr, IInventoryUI fromUI, IInventoryUI toUI)
        {
            if (fromIn != toIn)
            {
                fr.TempUse(PARA_ITEM, ip);
                bool canDrop = toIn.IsCanDrop(ip, args);
                // 如果toIn 不可以拖入物品
                if (!canDrop)
                {
                    fromUI.UpdateItem(args, fromIn, ip);
                    if (toIn.GetDropAction() != null)
                    {
                        toIn.GetDropAction().Act(args);
                    }
                    //HandleMoveAction(fromIn, toIn, fromUI, toUI, ip, args);
                    fr.Resume(PARA_ITEM);
                    return;
                }
                fr.Resume(PARA_ITEM);
            }
            // 已有
            ItemPosition[] olds = toIn.GetItem(countX, countY, ip.GetKey().GetGridWidth(), ip.GetKey().GetGridHeight());
            ItemPosition   old  = null;

            if (olds.Length == 1)
            {
                old = olds[0];
                if (old != ip)
                {
                    fr.TempUse(PARA_ITEM, ip);
                    if (old.GetKey().GetKey().Equals(ip.GetKey().GetKey()))
                    {
                        int delta = old.GetKey().GetItemStack() - old.GetCount();
                        if (delta > 0)
                        {
                            // 堆叠物品
                            ChangeItemStack(delta, fromIn, toIn, fromUI, toUI, ip, old, args);
                        }
                        else
                        {
                            // 交换物品位置
                            ExchangeItem(fromIn, toIn, fromUI, toUI, ip, old, args);
                        }
                    }
                    else
                    {
                        if (!ip.DragTo(args, old))
                        {
                            ExchangeItem(fromIn, toIn, fromUI, toUI, ip, old, args);
                        }
                        else
                        {
                            if (ip.GetInventory() != null)
                            {
                                fromUI.UpdateItem(args, fromIn, ip);
                            }
                        }
                    }
                    fr.Resume(PARA_ITEM);
                    return;
                }
            }
            fr.TempUse(PARA_ITEM, ip);
            MoveItem(countX, countY, fromIn, toIn, fromUI, toUI, ip, old, args);
            fr.Resume(PARA_ITEM);
        }
Beispiel #19
0
        public virtual void Draw(SimpleInventoryUI ui, IEventArgs args, ItemInventory inventory, ItemPosition ip)
        {
            this.inventory = inventory;
            if (fui == null)
            {
                fui = new FreeUICreateAction();
                Sharpen.Collections.AddAll(fui.GetComponents(), components);
            }
            ip.GetParameters().AddPara(new StringPara("inventory", inventory.GetName()));
            StringPara img      = new StringPara("img", string.Empty);
            StringPara itemName = new StringPara("name", string.Empty);
            IntPara    count    = new IntPara("count", 0);

            args.GetDefault().GetParameters().TempUse(img);
            args.GetDefault().GetParameters().TempUse(count);
            args.GetDefault().GetParameters().TempUse(itemName);

            img.SetValue(ip.GetKey().GetImg());
            count.SetValue(ip.GetCount());
            itemName.SetValue(ip.GetKey().GetName());
            FreeImageComponet back = GetBackground();

            if (ui.nomouse)
            {
                back.SetNoMouse("true");
            }
            if (ui.itemFixed)
            {
                back.SetFixed("true");
            }
            int startX = GetX(args, ui, ip, back);
            int startY = GetY(args, ui, ip, back);

            if (!StringUtil.IsNullOrEmpty(notused) && !StringUtil.IsNullOrEmpty(used))
            {
                if (ip.IsUsed())
                {
                    back.SetUrl(used);
                }
                else
                {
                    back.SetUrl(notused);
                }
            }
            back.SetX(startX.ToString());
            back.SetY(startY.ToString());
            back.SetRelative(ui.relative);
            back.SetEvent(inventory.GetName() + "," + ip.GetX() + "," + ip.GetY());
            FreeImageComponet itemImg         = back;
            FreeImageComponet secondComponent = GetItemImage();

            if (secondComponent != null)
            {
                back.SetEvent(string.Empty);
                itemImg = secondComponent;
            }
            if (ui.nomouse)
            {
                itemImg.SetNoMouse("true");
            }
            if (ui.itemFixed)
            {
                itemImg.SetFixed("true");
            }
            itemImg.SetUrl(ip.GetKey().GetImg());
            itemImg.SetOriginalSize(ip.GetKey().GetItemWidth() + "," + ip.GetKey().GetItemHeight());
            if (itemImg == back)
            {
                AdjustSize(args, ui, ip, inventory, back, itemImg, startX, startY);
            }
            else
            {
                AdjustSize(args, ui, ip, inventory, back, itemImg, 0, 0);
            }
            SetCount(ip);
            fui.SetKey(ip.GetUIKey());
            fui.SetShow(inventory.IsOpen());
            fui.SetScope(1);
            fui.SetPlayer("current");
            fui.Act(args);
            UpdateHotKey(ui, args, ip);
            args.GetDefault().GetParameters().Resume("img");
            args.GetDefault().GetParameters().Resume("name");
            args.GetDefault().GetParameters().Resume("count");
        }
        public void Handle(ServerRoom room, PlayerEntity player, SimpleProto message)
        {
            FreeData fd = (FreeData)player.freeData.FreeData;

            room.ContextsWrapper.FreeArgs.TempUse(PARA_PLAYER_CURRENT, fd);
            eventKey.SetValue(message.Ss[0]);
            room.ContextsWrapper.FreeArgs.GetDefault().GetParameters().TempUse(eventKey);

            room.GameRule.HandleFreeEvent(room.RoomContexts, player, message);

            string key = message.Ss[0];

            Debug.LogFormat("click item {0}. ", key);
            if (message.Bs[0])
            {
                // 显示拆分UI
                if (message.Bs[1])
                {
                    PickupItemUtil.ShowSplitUI(room, fd, key);
                    return;
                }
                if (key.StartsWith(ChickenConstant.BagGround))
                {
                    SimpleItemInfo info = PickupItemUtil.GetGroundItemInfo(room, fd, key);
                    if (info.cat > 0)
                    {
                        if (CanChangeBag(room, fd, key))
                        {
                            if (PickupItemUtil.AddItemToPlayer(room, player, info.entityId, info.cat, info.id, info.count))
                            {
                                SimpleProto sp = FreePool.Allocate();
                                sp.Key = FreeMessageConstant.PlaySound;
                                sp.Ks.Add(2);
                                sp.Ins.Add(5018);
                                sp.Bs.Add(false);
                                FreeMessageSender.SendMessage(player, sp);
                            }
                        }
                    }
                }
                else if (key.StartsWith(ChickenConstant.BagDefault))
                {
                    ItemPosition ip   = FreeItemManager.GetItemPosition(room.ContextsWrapper.FreeArgs, key, fd.GetFreeInventory().GetInventoryManager());
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                    if (info.cat == (int)ECategory.WeaponPart)
                    {
                        string inv = PickupItemUtil.AutoPutPart(fd, FreeItemConfig.GetItemInfo(info.cat, info.id));
                        if (inv != null && inv != ChickenConstant.BagDefault)
                        {
                            ItemInventoryUtil.MovePosition(ip,
                                                           fd.GetFreeInventory().GetInventoryManager().GetInventory(inv), 0, 0, room.ContextsWrapper.FreeArgs);
                        }
                    }
                    else
                    {
                        FreeItemManager.UseItem(key, fd, room.ContextsWrapper.FreeArgs);
                    }
                }
                // 点击装配好的配件,自动进背包
                else if (key.StartsWith("w") && key.IndexOf(",") == 3)
                {
                    ItemInventory ii = fd.freeInventory.GetInventoryManager().GetInventory(key.Substring(0, 3));
                    ItemInventory defaultInventory = fd.GetFreeInventory().GetInventoryManager().GetDefaultInventory();

                    if (ii != null && ii.posList.Count > 0)
                    {
                        ItemPosition ip = ii.posList[0];
                        if (BagCapacityUtil.CanDemountAttachment(room, fd, FreeItemConfig.GetItemInfo(ip.key.GetKey()), key, false))
                        {
                            int[] xy = defaultInventory.GetNextEmptyPosition(ip.GetKey());
                            ItemInventoryUtil.MovePosition(ip,
                                                           defaultInventory, xy[0], xy[1], room.ContextsWrapper.FreeArgs);
                        }
                    }
                }
                else
                {
                    FreeItemManager.UseItem(key, fd, room.ContextsWrapper.FreeArgs);
                }
            }

            room.ContextsWrapper.FreeArgs.Resume(PARA_PLAYER_CURRENT);
            room.ContextsWrapper.FreeArgs.GetDefault().GetParameters().Resume(PARA_EVENT_KEY);
        }
        public static void DragItem(string key, FreeData fd, ISkillArgs args, string toKey)
        {
            ItemPosition ip = GetItemPosition(args, key, fd.freeInventory.GetInventoryManager());

            if (ip == null)
            {
                ItemInventory inv = fd.freeInventory.GetInventoryManager().GetInventory(key.Trim());
                if (inv != null && inv.GetInventoryUI() is UnityOneInventoryUi)
                {
                    if (inv.posList.Count > 0)
                    {
                        ip = inv.posList[0];
                    }
                }
            }
            ItemPosition toIp = null;

            if (!StringUtil.IsNullOrEmpty(toKey))
            {
                toIp = GetItemPosition(args, toKey, fd.freeInventory.GetInventoryManager());
            }
            if (ip != null)
            {
                InventoryManager invManager = fd.freeInventory.GetInventoryManager();
                ItemInventory    fromInv    = ip.GetInventory();

                ItemInventory toInv = null;
                if (toIp != null)
                {
                    toInv = toIp.GetInventory();
                }
                else
                {
                    string[] ss = toKey.Split(',');
                    toInv = fd.freeInventory.GetInventoryManager().GetInventory(ss[0].Trim());
                }

                int x = -1;
                int y = -1;
                if (toIp != null)
                {
                    x = toIp.x;
                    y = toIp.y;
                }
                else if (toInv != null)
                {
                    if (toInv.GetName() == ChickenConstant.BagDefault)
                    {
                        foreach (ItemPosition old in toInv.GetItems())
                        {
                            if (old.GetKey().GetKey() == ip.GetKey().GetKey() && old.GetCount() < ip.GetKey().GetItemStack())
                            {
                                x = old.GetX();
                                y = old.GetY();
                                break;
                            }
                        }
                    }

                    if (x < 0)
                    {
                        int[] pos = toInv.GetNextEmptyPosition(ip.GetKey());
                        x = pos[0];
                        y = pos[1];
                    }
                }

                if (toInv != null && fromInv != toInv)
                {
                    if (toInv.GetName() == ChickenConstant.BagDefault)
                    {
                        if (BagCapacityUtil.CanAddToBag(args, fd, ip))
                        {
                            ItemInventoryUtil.Move(fromInv, toInv, ip, x, y, args, (FreeRuleEventArgs)args, fromInv.GetInventoryUI(), toInv.GetInventoryUI());
                        }
                    }
                    else
                    {
                        ItemInventoryUtil.Move(fromInv, toInv, ip, x, y, args, (FreeRuleEventArgs)args, fromInv.GetInventoryUI(), toInv.GetInventoryUI());
                    }
                }
                else
                {
                    if (toInv == null)
                    {
                        //fromInv.GetInventoryUI().ReDraw(args, fromInv, true);
                    }
                    else
                    {
                        //fromInv.GetInventoryUI().ReDraw(args, fromInv, true);
                    }
                }
            }
        }
Beispiel #22
0
        public void Handle(ServerRoom room, PlayerEntity player, SimpleProto message)
        {
            FreeData fd       = (FreeData)player.freeData.FreeData;
            var      freeArgs = room.ContextsWrapper.FreeArgs as FreeRuleEventArgs;

            freeArgs.TempUse(PARA_PLAYER_CURRENT, fd);
            eventKey.SetValue(message.Ss[0]);
            freeArgs.GetDefault().GetParameters().TempUse(eventKey);

            Debug.Log("drag from:" + message.Ss[0] + " to:" + message.Ss[1]);
            string from = message.Ss[0];
            string to   = message.Ss[1];

            ItemPosition fromIp = FreeItemManager.GetItemPosition(freeArgs, from, fd.freeInventory.GetInventoryManager());
            ItemPosition toIp   = FreeItemManager.GetItemPosition(freeArgs, to, fd.freeInventory.GetInventoryManager());

            // 显示拆分UI
            if (message.Bs[0] && from.StartsWith(ChickenConstant.BagDefault))
            {
                PickupItemUtil.ShowSplitUI(room, fd, from);
            }
            else if (!HandleBag(from, to, room, fd))
            {
            }
            else if (player.gamePlay.GameState == GameState.AirPlane || player.gamePlay.GameState == GameState.Gliding || player.gamePlay.GameState == GameState.JumpPlane)
            {
            }

            /*else if (from.StartsWith(ChickenConstant.BagBelt) || to.StartsWith(ChickenConstant.BagBelt))
             * {
             *  // 腰包不能做任何操作
             *  SimpleProto msg = FreePool.Allocate();
             *  msg.Key = FreeMessageConstant.ChickenTip;
             *  msg.Ss.Add("word63");
             *  FreeMessageSender.SendMessage(fd.Player, msg);
             * }*/
            else if (from.StartsWith(ChickenConstant.BagGround) && !to.StartsWith(ChickenConstant.BagGround))
            {
                // 地面模糊操作
                HandleAuto(from, to, room, fd);
            }
            else if (from.StartsWith(ChickenConstant.BagGround) || to.StartsWith(ChickenConstant.BagGround))
            {
                /*if (from.StartsWith(Ground) && !to.StartsWith(Ground))
                 * {
                 *  handleFromGround(from, to, room, fd);
                 * }*/
                if (!from.StartsWith(ChickenConstant.BagGround) && to.StartsWith(ChickenConstant.BagGround))
                {
                    FreeItemInfo fromInfo = FreeItemConfig.GetItemInfo(fromIp.key.GetKey());
                    if (fromInfo.cat == (int)ECategory.WeaponPart && from.StartsWith("w"))
                    {
                        if (BagCapacityUtil.CanDemountAttachment(room, fd, fromInfo, from, true))
                        {
                            handleToGround(from, to, room, fd);
                        }
                    }
                    else
                    {
                        handleToGround(from, to, room, fd);
                    }
                }
            }
            else if (from.StartsWith(ChickenConstant.BagDefault) && to.StartsWith("w"))
            {
                // 背包物品拖动到武器槽
                if (fromIp != null)
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(fromIp.key.GetKey());
                    if (info.cat == (int)ECategory.WeaponPart)
                    {
                        MovePartToWeapon(room, fd, fromIp, to, info);
                    }
                    else
                    {
                        FreeItemManager.DragItem(from, fd, room.ContextsWrapper.FreeArgs, to);
                    }
                }
            }
            else if (PickupItemUtil.IsDefault(from) && string.IsNullOrEmpty(to))
            {
                // 背包物品拖动到人身上
                if (fromIp != null)
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(fromIp.key.GetKey());
                    if (info.cat == (int)ECategory.WeaponPart)
                    {
                        MovePartToWeapon(room, fd, fromIp, to, info);
                    }
                    else
                    {
                        FreeItemManager.UseItem(from, fd, room.ContextsWrapper.FreeArgs);
                    }
                }
            }
            else if ((from.StartsWith("w1,") && to.StartsWith("w2,")) || (from.StartsWith("w2,") && to.StartsWith("w1,")))
            {
                ExchangeWeapon(room.ContextsWrapper.FreeArgs, fd, from, to);
            }
            else if (from.StartsWith("w") && to.StartsWith("w") && from.IndexOf(",") == 3 && to.IndexOf(",") == 2)
            {
                if (fromIp != null && toIp != null)
                {
                    WeaponBaseAgent toAgent  = fd.Player.WeaponController().GetWeaponAgent((EWeaponSlotType)short.Parse(to.Substring(1, 1)));
                    FreeItemInfo    fromInfo = FreeItemConfig.GetItemInfo(fromIp.key.GetKey());
                    if (!toAgent.WeaponConfigAssy.IsPartMatchWeapon(WeaponPartUtil.GetWeaponFstMatchedPartId(fromInfo.id, toAgent.ConfigId)))
                    {
                        SimpleProto msg = FreePool.Allocate();
                        msg.Key = FreeMessageConstant.ChickenTip;
                        msg.Ss.Add("word77," + toAgent.WeaponConfigAssy.S_Name + "," + fromInfo.name);
                        FreeMessageSender.SendMessage(fd.Player, msg);
                    }
                    else
                    {
                        string          toPosition = to.Substring(0, 2) + from.Substring(2, 1) + ",0,0";
                        ItemPosition    toPart     = FreeItemManager.GetItemPosition(room.ContextsWrapper.FreeArgs, toPosition, fd.freeInventory.GetInventoryManager());
                        WeaponBaseAgent fromAgent  = fd.Player.WeaponController().GetWeaponAgent((EWeaponSlotType)short.Parse(from.Substring(1, 1)));
                        if (toPart != null)
                        {
                            FreeItemInfo toInfo = FreeItemConfig.GetItemInfo(toPart.key.GetKey());
                            if (!fromAgent.WeaponConfigAssy.IsPartMatchWeapon(WeaponPartUtil.GetWeaponFstMatchedPartId(toInfo.id, fromAgent.ConfigId)))
                            {
                                SimpleProto msg = FreePool.Allocate();
                                msg.Key = FreeMessageConstant.ChickenTip;
                                msg.Ss.Add("word77," + fromAgent.WeaponConfigAssy.S_Name + "," + toInfo.name);
                                FreeMessageSender.SendMessage(fd.Player, msg);
                            }
                            else
                            {
                                if (BagCapacityUtil.CanExchangeAttachment(room, fd, fromInfo, toInfo, fromAgent, toAgent))
                                {
                                    FreeItemManager.DragItem(from, fd, room.ContextsWrapper.FreeArgs, toPosition);
                                }
                            }
                        }
                        else
                        {
                            if (BagCapacityUtil.CanDemountAttachment(room, fd, fromInfo, from, false))
                            {
                                FreeItemManager.DragItem(from, fd, room.ContextsWrapper.FreeArgs, toPosition);
                            }
                        }
                    }
                }
            }
            else if (from.StartsWith("w") && from.IndexOf(",") == 3 && PickupItemUtil.IsDefault(to))
            {
                FreeItemInfo fromInfo = FreeItemConfig.GetItemInfo(fromIp.key.GetKey());
                if (BagCapacityUtil.CanDemountAttachment(room, fd, fromInfo, from, false))
                {
                    ItemInventory fromInv = fromIp.GetInventory();
                    ItemInventory toInv   = toIp == null?fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagDefault) : toIp.GetInventory();

                    int[] pos = toIp == null ? new int[] { 0, 0 } : toInv.GetNextEmptyPosition(toIp.GetKey());
                    ItemInventoryUtil.MoveItem(pos[0], pos[1], fromInv, toInv, fromInv.GetInventoryUI(), toInv.GetInventoryUI(), fromIp, null, room.ContextsWrapper.FreeArgs);
                }
            }
            else
            {
                FreeItemManager.DragItem(from, fd, room.ContextsWrapper.FreeArgs, to);
            }

            room.ContextsWrapper.FreeArgs.Resume(PARA_PLAYER_CURRENT);
            room.ContextsWrapper.FreeArgs.GetDefault().GetParameters().Resume(PARA_EVENT_KEY);
        }
Beispiel #23
0
        public void Handle(ServerRoom room, PlayerEntity player, SimpleProto message)
        {
            FreeData fd = (FreeData)player.freeData.FreeData;

            room.FreeArgs.TempUse(PARA_PLAYER_CURRENT, fd);
            eventKey.SetValue(message.Ss[0]);
            room.FreeArgs.GetDefault().GetParameters().TempUse(eventKey);

            room.GameRule.HandleFreeEvent(room.RoomContexts, player, message);

            string key = message.Ss[0];

            Debug.LogFormat("click item {0}. ", key);
            if (message.Bs[0])
            {
                // 显示拆分UI
                if (message.Bs[1])
                {
                    PickupItemUtil.ShowSplitUI(room, fd, key);
                    return;
                }
                if (key.StartsWith("ground"))
                {
                    SimpleItemInfo info = PickupItemUtil.GetGroundItemInfo(room, fd, key);
                    if (info.cat > 0)
                    {
                        if (CanChangeBag(room, fd, key))
                        {
                            PickupItemUtil.AddItemToPlayer(room, player, info.entityId, info.cat, info.id, info.count);
                        }
                    }
                }
                else if (key.StartsWith("default"))
                {
                    ItemPosition ip   = FreeItemManager.GetItemPosition(room.FreeArgs, key, fd.GetFreeInventory().GetInventoryManager());
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                    if (info.cat == (int)ECategory.WeaponPart)
                    {
                        string inv = PickupItemUtil.AutoPutPart(fd, FreeItemConfig.GetItemInfo(info.cat, info.id));
                        if (inv != null && inv != "default")
                        {
                            ItemInventoryUtil.MovePosition(ip,
                                                           fd.GetFreeInventory().GetInventoryManager().GetInventory(inv), 0, 0, room.FreeArgs);
                        }
                    }
                    else
                    {
                        FreeItemManager.UseItem(key, fd, room.FreeArgs);
                    }
                }
                // 点击装配好的配件,自动进背包
                else if (key.StartsWith("w") && key.Length == 3)
                {
                    ItemInventory ii = fd.freeInventory.GetInventoryManager().GetInventory(key);
                    ItemInventory defaultInventory = fd.GetFreeInventory().GetInventoryManager().GetDefaultInventory();

                    if (ii != null && ii.posList.Count > 0)
                    {
                        ItemPosition ip = ii.posList[0];
                        if (BagCapacityUtil.CanAddToBag(room.FreeArgs, fd, ip))
                        {
                            int[] xy = defaultInventory.GetNextEmptyPosition(ip.GetKey());
                            ItemInventoryUtil.MovePosition(ip,
                                                           defaultInventory, xy[0], xy[1], room.FreeArgs);
                        }
                    }
                }
                else
                {
                    FreeItemManager.UseItem(key, fd, room.FreeArgs);
                }
            }

            room.FreeArgs.Resume(PARA_PLAYER_CURRENT);
            room.FreeArgs.GetDefault().GetParameters().Resume(PARA_EVENT_KEY);
        }