Пример #1
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);
                }
            }
        }
Пример #2
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);
         }
     }
 }
Пример #3
0
        private void CreateItemFromInventory(IEventArgs fr, FreeData fd, ItemInventory ii, Vector3 p, string realName)
        {
            if (ii != null && ii.name != "belt" && ii.name != ChickenConstant.BagGround)
            {
                foreach (ItemPosition ip in ii.GetItems())
                {
                    FreeMoveEntity en = fr.GameContext.freeMove.CreateEntity();
                    en.AddEntityKey(new EntityKey(fr.GameContext.session.commonSession.EntityIdGenerator.GetNextEntityId(), (short)EEntityType.FreeMove));
                    en.AddPosition(new Vector3(p.x, p.y, p.z));

                    en.AddFreeData(FreeUtil.ReplaceVar(name, fr), null);
                    en.AddPositionFilter(Core.Components.PositionFilterType.Filter2D, 1000);
                    if (type == 1)
                    {
                        en.freeData.Cat = FreeEntityConstant.DeadBox;
                    }
                    else if (type == 2)
                    {
                        en.freeData.Cat = FreeEntityConstant.DropBox;
                    }

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

                    if (itemInfo.cat == (int)ECategory.Weapon)
                    {
                        int key = CarryClipUtil.GetWeaponKey(ii.name, fd);
                        if (key >= 1 && key <= 3)
                        {
                            CarryClipUtil.AddCurrentClipToBag(key, fd, fr);
                        }
                    }

                    en.AddFlagImmutability(fr.GameContext.session.currentTimeObject.CurrentTime);

                    SimpleItemInfo info = new SimpleItemInfo(realName, itemInfo.cat, itemInfo.id, ip.GetCount(), en.entityKey.Value.EntityId);
                    en.freeData.Value = SingletonManager.Get <DeadBoxParser>().ToString(info);

                    en.isFlagSyncNonSelf = true;
                }
            }
        }
Пример #4
0
        public static bool CanDemountAttachment(ServerRoom room, FreeData fd, FreeItemInfo part, string ipStr, bool toGround)
        {
            double          capacity     = Math.Round(GetCapacity(fd) - GetWeight(fd), 3);
            float           bulletWeight = 0f;
            WeaponBaseAgent agent        = fd.Player.WeaponController().GetWeaponAgent((EWeaponSlotType)short.Parse(ipStr.Substring(1, 1)));
            int             overBullet   = 0;

            if (SingletonManager.Get <WeaponPartsConfigManager>().GetConfigById(WeaponPartUtil.GetWeaponFstMatchedPartId(part.id, agent.ConfigId)).Bullet > 0)
            {
                overBullet = agent.BaseComponent.Bullet - agent.WeaponConfigAssy.PropertyCfg.Bullet;
                if (overBullet > 0)
                {
                    bulletWeight = SingletonManager.Get <GameItemConfigManager>().GetConfigById((int)agent.Caliber).Weight *overBullet;
                }
            }

            var partWeight = 0f;

            if (!toGround)
            {
                partWeight = part.weight;
            }

            if (capacity < bulletWeight + partWeight)
            {
                SimpleProto msg = FreePool.Allocate();
                msg.Key = FreeMessageConstant.ChickenTip;
                msg.Ss.Add("word79");
                FreeMessageSender.SendMessage(fd.Player, msg);
                return(false);
            }

            if (overBullet > 0)
            {
                agent.BaseComponent.Bullet = agent.WeaponConfigAssy.PropertyCfg.Bullet;
                CarryClipUtil.AddClip(overBullet, (int)agent.Caliber, fd, room.ContextsWrapper.FreeArgs);
                fd.Player.WeaponController().SetReservedBullet(agent.Caliber, CarryClipUtil.GetClipCount((int)agent.Caliber, fd, room.ContextsWrapper.FreeArgs));
            }

            return(true);
        }
Пример #5
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);
     }
 }
Пример #6
0
        private static void DropItem(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 (info.cat > 0)
                {
                    room.RoomContexts.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleEquipmentEntity(
                        (ECategory)info.cat,
                        info.id,
                        ip.GetCount(), fd.Player.position.Value);
                }
            }
        }
Пример #7
0
        public static bool CanAddToBag(IEventArgs args, FreeData fd, int cat, int id, int count)
        {
            bool         can      = true;
            float        capacity = GetCapacity(fd);
            float        weight   = GetWeight(fd);
            FreeItemInfo info     = FreeItemConfig.GetItemInfo(cat, id);

            if (info == null)
            {
                return(false); // 无效道具
            }
            if (cat == (int)ECategory.Avatar)
            {
                float oldCap = GetCapacity(fd, cat, id);

                can = Math.Round(capacity - weight, 3) >= oldCap - info.capacity;
            }
            if (cat == (int)ECategory.GameItem || cat == (int)ECategory.WeaponPart)
            {
                can = Math.Round(capacity - weight, 3) >= info.weight * count;
            }
            if (cat == (int)ECategory.Weapon)
            {
                WeaponResConfigItem item = SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(id);
                if (item.Type == (int)EWeaponType_Config.ThrowWeapon)
                {
                    can = Math.Round(capacity - weight, 3) >= info.weight * count;
                }
            }

            if (!can)
            {
                SimpleProto msg = FreePool.Allocate();
                msg.Key = FreeMessageConstant.ChickenTip;
                msg.Ss.Add("word73");
                FreeMessageSender.SendMessage(fd.Player, msg);
            }
            return(can);
        }
Пример #8
0
        // 获取玩家总容量
        public static float GetCapacity(FreeData fd)
        {
            float w = 70;

            /*foreach (string name in fd.freeInventory.GetInventoryManager().GetInventoryNames())
             * {
             *  if (name != ChickenConstant.BagGround)
             *  {
             *      ItemInventory ii = fd.freeInventory.GetInventoryManager().GetInventory(name);
             *      if (ii != null)
             *      {
             *          foreach (ItemPosition ip in ii.GetItems())
             *          {
             *              FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.GetKey().GetKey());
             *              if (info.cat == 9)
             *              {
             *                  RoleAvatarConfigItem avatar = SingletonManager.Get<RoleAvatarConfigManager>().GetConfigById(info.id);
             *                  w += avatar.Capacity;
             *              }
             *          }
             *      }
             *  }
             * }*/
            ItemInventory ii = fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagBag);

            if (ii != null)
            {
                foreach (ItemPosition ip in ii.GetItems())
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.GetKey().GetKey());
                    if (info.cat == 9)
                    {
                        RoleAvatarConfigItem avatar = SingletonManager.Get <RoleAvatarConfigManager>().GetConfigById(info.id);
                        w += avatar.Capacity;
                    }
                }
            }
            return(w);
        }
Пример #9
0
        public static bool CanChangeBag(IEventArgs args, FreeData fd, int cat, int id)
        {
            bool         can      = true;
            float        capacity = GetCapacity(fd);
            float        weight   = GetWeight(fd);
            FreeItemInfo info     = FreeItemConfig.GetItemInfo(cat, id);

            if (cat == (int)ECategory.Avatar)
            {
                float oldCap = GetCapacity(fd, cat, id);
                can = Math.Round(capacity - weight, 3) >= Math.Round(oldCap - info.capacity, 3);
            }

            if (!can)
            {
                SimpleProto msg = FreePool.Allocate();
                msg.Key = FreeMessageConstant.ChickenTip;
                msg.Ss.Add("word74");
                FreeMessageSender.SendMessage(fd.Player, msg);
            }
            return(can);
        }
Пример #10
0
        public static int CanAddToBagCount(IEventArgs args, FreeData fd, int cat, int id, int count)
        {
            if (count > 1 && cat != (int)ECategory.Avatar)
            {
                int          canCount = 0;
                float        capacity = GetCapacity(fd);
                float        weight   = GetWeight(fd);
                FreeItemInfo info     = FreeItemConfig.GetItemInfo(cat, id);

                if (cat == (int)ECategory.GameItem || cat == (int)ECategory.WeaponPart)
                {
                    canCount = (int)(Math.Round(capacity - weight, 3) / info.weight);
                }

                if (cat == (int)ECategory.Weapon)
                {
                    WeaponResConfigItem item = SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(id);
                    if (item.Type == (int)EWeaponType_Config.ThrowWeapon)
                    {
                        canCount = (int)(Math.Round(capacity - weight, 3) / info.weight);
                    }
                    if (item.Type == (int)EWeaponType_Config.Armor || item.Type == (int)EWeaponType_Config.Helmet)
                    {
                        canCount = count;
                    }
                }

                int realCount = Math.Min(count, canCount);
                if (realCount == 0)
                {
                    SimpleProto msg = FreePool.Allocate();
                    msg.Key = FreeMessageConstant.ChickenTip;
                    msg.Ss.Add("word73");
                    FreeMessageSender.SendMessage(fd.Player, msg);
                }
                return(realCount);
            }
            return(CanAddToBag(args, fd, cat, id, count) ? 1 : 0);
        }
Пример #11
0
        public static bool CanTakeOff(IEventArgs args, FreeData fd, int cat, int id)
        {
            FreeItemInfo info = FreeItemConfig.GetItemInfo(cat, id);

            if (info.cat == (int)ECategory.Avatar)
            {
                if (GetCapacity(fd) - GetWeight(fd) < info.capacity)
                {
                    UseCommonAction use = new UseCommonAction();
                    use.key    = "showBottomTip";
                    use.values = new List <ArgValue>();
                    use.values.Add(new ArgValue("msg", "{desc:10074}"));

                    args.TempUse("current", fd);
                    use.Act(args);
                    args.Resume("current");

                    return(false);
                }
            }

            return(true);
        }
Пример #12
0
        public void ReDraw(ISkillArgs args, ItemInventory inventory, bool includeBack)
        {
            SimpleProto itemInfo = FreePool.Allocate();

            itemInfo.Key = FreeMessageConstant.ItemInfo;
            itemInfo.Ss.Add(inventory.name);

            if (inventory.posList.Count > 0)
            {
                ItemPosition ip = inventory.posList[0];
                itemInfo.Bs.Add(false);
                FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                itemInfo.Ins.Add(info.cat);
                itemInfo.Ins.Add(info.id);
                itemInfo.Ins.Add(ip.GetCount());
            }
            else
            {
                itemInfo.Bs.Add(true);
            }

            FreeMessageSender.SendMessage(args, "current", itemInfo);
        }
Пример #13
0
        public static void AddClip(int count, int clipType, FreeData fd, IEventArgs args)
        {
            if (BagCapacityUtil.CanAddToBag(args, fd, (int)ECategory.GameItem, clipType, count))
            {
                int            leftCount = count;
                ItemPosition[] ips       = fd.freeInventory.GetInventoryManager().GetDefaultInventory().GetItems();
                foreach (ItemPosition ip in ips)
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                    if (ip.GetParameters().HasPara("ClipType") && (int)ip.GetParameters().Get("ClipType").GetValue() == clipType)
                    {
                        int added = Math.Min(leftCount, info.stack - ip.count);
                        leftCount -= added;

                        ip.SetCount(ip.GetCount() + added);
                        ip.GetInventory().GetInventoryUI().UpdateItem((FreeRuleEventArgs)args, ip.GetInventory(), ip);
                    }
                }

                if (leftCount > 0)
                {
                    FreeItem item = FreeItemManager.GetItem((FreeRuleEventArgs)args, FreeItemConfig.GetItemKey((int)ECategory.GameItem, clipType), leftCount);
                    if (item != null)
                    {
                        fd.freeInventory.GetInventoryManager().GetDefaultInventory().AddItem((ISkillArgs)args, item, true);
                    }
                }
            }
            else
            {
                FreeItem item = FreeItemManager.GetItem((FreeRuleEventArgs)args, FreeItemConfig.GetItemKey((int)ECategory.GameItem, clipType), count);
                if (item != null)
                {
                    fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagGround).AddItem((ISkillArgs)args, item, true);
                }
            }
        }
Пример #14
0
 private void HandleAutoPartPut(IEventArgs args)
 {
     if (code == "AutoPart")
     {
         FreeData fd = (FreeData)args.GetUnit("current");
         if (fd != null)
         {
             ItemPosition[] items = fd.freeInventory.GetInventoryManager().GetDefaultInventory().GetItems();
             foreach (ItemPosition ip in items)
             {
                 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.StartsWith("w" + FreeUtil.ReplaceVar("{key}", args)))
                     {
                         ItemInventoryUtil.MovePosition(ip,
                                                        fd.GetFreeInventory().GetInventoryManager().GetInventory(inv), 0, 0, (ISkillArgs)args);
                     }
                 }
             }
         }
     }
 }
Пример #15
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);
        }
Пример #16
0
        public static bool AddItemToPlayer(ServerRoom room, PlayerEntity player, int entityId, int cat, int id, int count, string toInv = "")
        {
            SceneObjectEntity entity         = room.RoomContexts.sceneObject.GetEntityWithEntityKey(new EntityKey(entityId, (short)EEntityType.SceneObject));
            FreeMoveEntity    freeMoveEntity = null;

            if (entity == null || entity.isFlagDestroy)
            {
                freeMoveEntity = room.RoomContexts.freeMove.GetEntityWithEntityKey(new EntityKey(entityId, (short)EEntityType.FreeMove));
                if (freeMoveEntity == null)
                {
                    return(false);
                }
            }

            FreeData fd = (FreeData)player.freeData.FreeData;

            room.ContextsWrapper.FreeArgs.TempUse("current", fd);

            if (!FreeItemConfig.Contains(cat, id))
            {
                return(false);
            }

            FreeItemInfo             item   = FreeItemConfig.GetItemInfo(cat, id);
            CreateItemToPlayerAction action = new CreateItemToPlayerAction();

            action.name = ChickenConstant.BagDefault;
            switch (item.cat)
            {
            case (int)ECategory.Weapon:
                if (item.subType == ChickenConstant.ItemCatPrimeWeapon)
                {
                    action.name = ChickenConstant.BagPrimeWeapon;

                    int c1 = fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagPrimeWeapon).posList.Count;
                    int c2 = fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagSecondaryWeapon).posList.Count;

                    if (toInv.StartsWith(ChickenConstant.BagPrimeWeapon))
                    {
                        action.name = ChickenConstant.BagPrimeWeapon;
                        if (c1 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else if (toInv.StartsWith(ChickenConstant.BagSecondaryWeapon))
                    {
                        action.name = ChickenConstant.BagSecondaryWeapon;
                        if (c2 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else
                    {
                        if (c1 > 0 && c2 == 0)
                        {
                            action.name = ChickenConstant.BagSecondaryWeapon;
                        }

                        if (c1 > 0 && c2 > 0)
                        {
                            int currentKey = FreeWeaponUtil.GetWeaponKey(fd.Player.WeaponController().HeldSlotType);
                            if (currentKey == 0)
                            {
                                currentKey = 1;
                            }
                            if (currentKey == 1 || currentKey == 2)
                            {
                                action.name = "w" + currentKey;
                            }
                            else
                            {
                                action.name = ChickenConstant.BagPrimeWeapon;
                            }

                            DropItem(action.name, fd, room);
                        }
                    }
                }
                else if (item.subType == ChickenConstant.ItemCatPistolWeapon)
                {
                    action.name = ChickenConstant.BagPistolWeapon;
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == ChickenConstant.ItemCatMeleeWeapon)
                {
                    action.name = ChickenConstant.BagMeleeWeapon;
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == ChickenConstant.ItemCatGrenadeWeapon)
                {
                    action.name = ChickenConstant.BagDefault;
                }
                else if (item.subType == ChickenConstant.ItemCatArmor)
                {
                    action.name = ChickenConstant.BagArmor;
                    if (entity != null)
                    {
                        count = entity.armorDurability.CurDurability;
                    }
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == ChickenConstant.ItemCatHelmet)
                {
                    action.name = ChickenConstant.BagHelmet;
                    if (entity != null)
                    {
                        count = entity.armorDurability.CurDurability;
                    }
                    DropItem(action.name, fd, room);
                }
                break;

            case (int)ECategory.Avatar:
                action.name = item.subType;
                DropItem(item.subType, fd, room);
                break;

            case (int)ECategory.WeaponPart:
                action.name = AutoPutPart(fd, item, toInv, room);
                break;

            default:
                break;
            }
            action.key = FreeItemConfig.GetItemKey(item.cat, item.id);

            int canCount = 0;

            if (action.name == ChickenConstant.BagDefault)
            {
                canCount = BagCapacityUtil.CanAddToBagCount(room.ContextsWrapper.FreeArgs, fd, item.cat, item.id, count);
            }
            else if (item.type == ChickenConstant.ItemCatAvatar || action.name == ChickenConstant.BagHelmet || action.name == ChickenConstant.BagArmor)
            {
                canCount = count;
            }
            else
            {
                canCount = 1;
            }

            bool pickupSuccess = false;

            if (canCount > 0 && !string.IsNullOrEmpty(action.name))
            {
                PlayerAnimationAction.DoAnimation(room.RoomContexts, PlayerAnimationAction.Interrupt, fd.Player, true);
                PlayerAnimationAction.DoAnimation(room.RoomContexts, PlayerAnimationAction.PickUp, fd.Player, true);
                PlayerStateUtil.AddPlayerState(EPlayerGameState.InterruptItem, fd.Player.gamePlay);

                if (!string.IsNullOrEmpty(action.key))
                {
                    action.count = canCount.ToString();
                    action.SetPlayer("current");
                    room.ContextsWrapper.FreeArgs.TempUse("current", fd);
                    action.Act(room.ContextsWrapper.FreeArgs);
                    room.ContextsWrapper.FreeArgs.Resume("current");

                    if (count > canCount)
                    {
                        SimpleProto msg = FreePool.Allocate();
                        msg.Key = FreeMessageConstant.ChickenTip;
                        msg.Ss.Add("word80," + count + "," + canCount);
                        FreeMessageSender.SendMessage(fd.Player, msg);
                        room.ContextsWrapper.FreeArgs.GameContext.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)item.cat,
                                                                                                                                                item.id, count - canCount, entity == null ? freeMoveEntity.position.Value : entity.position.Value);
                    }
                    pickupSuccess = true;
                }
                else
                {
                    Debug.LogError(item.cat + "-" + item.key + " not existed");
                }

                if (entity != null)
                {
                    entity.isFlagDestroy = true;
                }
                if (freeMoveEntity != null)
                {
                    freeMoveEntity.isFlagDestroy = true;
                    if (freeMoveEntity.freeData.Cat == FreeEntityConstant.DeadBox)
                    {
                        var deadBox = room.ContextsWrapper.FreeArgs.GameContext.freeMove.GetEntityWithEntityKey(new EntityKey(freeMoveEntity.freeData.IntValue, (short)EEntityType.FreeMove));
                        if (deadBox != null && deadBox.freeData.EmptyDelete)
                        {
                            if (deadBox.freeData.IntValue > 1)
                            {
                                deadBox.freeData.IntValue--;
                            }
                            else
                            {
                                deadBox.isFlagDestroy = true;
                            }
                        }
                    }
                }
            }
            room.ContextsWrapper.FreeArgs.Resume("current");

            return(pickupSuccess);
        }
Пример #17
0
        public static bool CanExchangeAttachment(ServerRoom room, FreeData fd, FreeItemInfo fromPart, FreeItemInfo toPart, WeaponBaseAgent fromAgent, WeaponBaseAgent toAgent)
        {
            double capacity = Math.Round(GetCapacity(fd) - GetWeight(fd), 3);

            int toBullet   = SingletonManager.Get <WeaponPartsConfigManager>().GetConfigById(WeaponPartUtil.GetWeaponFstMatchedPartId(toPart.id, fromAgent.ConfigId)).Bullet;
            int fromBullet = SingletonManager.Get <WeaponPartsConfigManager>().GetConfigById(WeaponPartUtil.GetWeaponFstMatchedPartId(fromPart.id, toAgent.ConfigId)).Bullet;

            if (toBullet == fromBullet)
            {
                return(true);
            }

            int overBulletFrom = fromAgent.BaseComponent.Bullet - fromAgent.WeaponConfigAssy.PropertyCfg.Bullet - toBullet;
            int overBulletTo   = toAgent.BaseComponent.Bullet - toAgent.WeaponConfigAssy.PropertyCfg.Bullet - fromBullet;

            float bulletWeight = 0f;

            if (overBulletFrom > 0)
            {
                bulletWeight += SingletonManager.Get <GameItemConfigManager>().GetConfigById((int)fromAgent.Caliber).Weight *overBulletFrom;
            }

            if (overBulletTo > 0)
            {
                bulletWeight += SingletonManager.Get <GameItemConfigManager>().GetConfigById((int)toAgent.Caliber).Weight *overBulletTo;
            }

            if (capacity < bulletWeight)
            {
                SimpleProto msg = FreePool.Allocate();
                msg.Key = FreeMessageConstant.ChickenTip;
                msg.Ss.Add("word79");
                FreeMessageSender.SendMessage(fd.Player, msg);
                return(false);
            }

            if (overBulletFrom > 0)
            {
                fromAgent.BaseComponent.Bullet = fromAgent.WeaponConfigAssy.PropertyCfg.Bullet + toBullet;
                CarryClipUtil.AddClip(overBulletFrom, (int)fromAgent.Caliber, fd, room.ContextsWrapper.FreeArgs);
                fd.Player.WeaponController().SetReservedBullet(fromAgent.Caliber, CarryClipUtil.GetClipCount((int)fromAgent.Caliber, fd, room.ContextsWrapper.FreeArgs));
            }

            if (overBulletTo > 0)
            {
                toAgent.BaseComponent.Bullet = toAgent.WeaponConfigAssy.PropertyCfg.Bullet + fromBullet;
                CarryClipUtil.AddClip(overBulletTo, (int)toAgent.Caliber, fd, room.ContextsWrapper.FreeArgs);
                fd.Player.WeaponController().SetReservedBullet(toAgent.Caliber, CarryClipUtil.GetClipCount((int)toAgent.Caliber, fd, room.ContextsWrapper.FreeArgs));
            }

            return(true);
        }
Пример #18
0
        public static bool CanAddToBag(IEventArgs args, FreeData fd, ItemPosition ip)
        {
            FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());

            return(CanAddToBag(args, fd, info.cat, info.id, ip.count));
        }
Пример #19
0
        public void ReDraw(ISkillArgs args, ItemInventory inventory, bool includeBack)
        {
            if (update == null)
            {
                update = new FreeUIUpdateAction();
            }

            update.SetKey(FreeUtil.ReplaceVar(uiKey, args));
            update.ClearValue();

            FreeData fd = (FreeData)args.GetUnit("current");

            FreePrefabValue v = new FreePrefabValue();

            v.SetSeq("1");
            update.AddValue(v);
            v.AddOneValue(new OnePrefabValue(image, ""));
            if (!string.IsNullOrEmpty(name))
            {
                v.AddOneValue(new OnePrefabValue(name, ""));
            }
            if (!string.IsNullOrEmpty(count))
            {
                v.AddOneValue(new OnePrefabValue(count, ""));
            }
            update.SetScope(1);
            update.SetPlayer("current");
            update.Act(args);

            if (inventory.posList.Count > 0)
            {
                ItemPosition ip = inventory.posList[0];
                v.Clear();
                v.AddOneValue(new OnePrefabValue(image, ip.key.GetImg()));
                if (!string.IsNullOrEmpty(name))
                {
                    v.AddOneValue(new OnePrefabValue(name, ip.key.GetName()));
                }
                if (!string.IsNullOrEmpty(count))
                {
                    if (ip.count != 1)
                    {
                        v.AddOneValue(new OnePrefabValue(count, ip.GetCount().ToString()));
                    }
                }
                else
                {
                    v.AddOneValue(new OnePrefabValue(count, ""));
                }
                update.Act(args);

                redrawPart(inventory, args, ip, fd);

                SimpleProto itemInfo = FreePool.Allocate();
                itemInfo.Key = FreeMessageConstant.ItemInfo;
                itemInfo.Ss.Add(inventory.name);
                FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                itemInfo.Ins.Add(info.cat);
                itemInfo.Ins.Add(info.id);
                itemInfo.Ins.Add(ip.GetCount());
                FreeMessageSender.SendMessage(args, "current", itemInfo);
            }
            else
            {
                clearPart(inventory, args, fd);
            }
        }
Пример #20
0
        private void MovePartToWeapon(ServerRoom room, FreeData fd, ItemPosition ip, string to, FreeItemInfo info)
        {
            string inv = PickupItemUtil.AutoPutPart(fd, info, to, room);

            if (inv != null && inv != "default")
            {
                ItemInventory toInv = fd.freeInventory.GetInventoryManager().GetInventory(inv);
                int[]         xy    = toInv.GetNextEmptyPosition(ip.key);
                ItemInventoryUtil.MovePosition(ip,
                                               toInv, xy[0], xy[1], room.FreeArgs);
            }
            else
            {
                FuntionUtil.Call(room.FreeArgs, "showBottomTip", "msg", "{desc:10076}");
            }
        }
Пример #21
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);

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

            // 显示拆分UI
            if (message.Bs[0] && from.StartsWith(ChickenConstant.BagDefault))
            {
                PickupItemUtil.ShowSplitUI(room, fd, from);
                return;
            }

            if (!HandleBag(from, to, room, fd))
            {
                return;
            }
            if (player.gamePlay.GameState == GameState.AirPlane)
            {
                return;
            }
            if (from.StartsWith("belt") || to.StartsWith("belt"))
            {
                // 腰包不能做任何操作
            }
            else if (from.StartsWith(Ground) && to != Ground)
            {
                // 地面模糊操作
                HandleAuto(from, to, room, fd);
            }
            else if (from.StartsWith(Ground) || to.StartsWith(Ground))
            {
                handleFromGround(from, to, room, fd);
                handleToGround(from, to, room, fd);
            }
            // 背包物品拖动到武器槽
            else if (from.StartsWith("default") && to.StartsWith("w"))
            {
                ItemPosition ip = FreeItemManager.GetItemPosition(room.FreeArgs, from, fd.freeInventory.GetInventoryManager());
                if (ip != null)
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                    if (info.cat == (int)ECategory.WeaponPart)
                    {
                        MovePartToWeapon(room, fd, ip, to, info);
                    }
                    else
                    {
                        FreeItemManager.DragItem(message.Ss[0], fd, room.FreeArgs, message.Ss[1]);
                    }
                }
            }
            // 背包物品拖动到人身上
            else if (from.StartsWith("default") && string.IsNullOrEmpty(to))
            {
                ItemPosition ip = FreeItemManager.GetItemPosition(room.FreeArgs, from, fd.freeInventory.GetInventoryManager());
                if (ip != null)
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                    if (info.cat == (int)ECategory.WeaponPart)
                    {
                        MovePartToWeapon(room, fd, ip, to, info);
                    }
                    else
                    {
                        FreeItemManager.UseItem(from, fd, room.FreeArgs);
                    }
                }
            }
            else
            {
                FreeItemManager.DragItem(message.Ss[0], fd, room.FreeArgs, message.Ss[1]);
            }

            room.FreeArgs.Resume(PARA_PLAYER_CURRENT);
            room.FreeArgs.GetDefault().GetParameters().Resume(PARA_EVENT_KEY);
        }
Пример #22
0
        private static void handleDropOne(string[] types, CreateItemToPlayerAction action, FreeItemInfo item, FreeData fd, ServerRoom room)
        {
            foreach (string type in types)
            {
                if (item.subType == type)
                {
                    action.name = typeInvDic[type];

                    DropItem(typeInvDic[type], fd, room);
                }
            }
        }
Пример #23
0
 private static void handleAddToDefault(string[] types, CreateItemToPlayerAction action, FreeItemInfo item, FreeData fd, ServerRoom room, SceneObjectEntity entity)
 {
     foreach (string type in types)
     {
         if (item.subType == type)
         {
             action.name = "default";
         }
     }
 }
Пример #24
0
        public static void AddItemToPlayer(ServerRoom room, PlayerEntity player, int entityId, int cat, int id, int count, string toInv = "")
        {
            SceneObjectEntity entity         = room.RoomContexts.sceneObject.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(entityId, (short)EEntityType.SceneObject));
            FreeMoveEntity    freeMoveEntity = null;

            if (entity == null || entity.isFlagDestroy)
            {
                freeMoveEntity = room.RoomContexts.freeMove.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(entityId, (short)EEntityType.FreeMove));
                if (freeMoveEntity == null)
                {
                    return;
                }
            }

            room.FreeArgs.TempUse("current", (FreeData)player.freeData.FreeData);

            if (!FreeItemConfig.Contains(cat, id))
            {
                return;
            }

            FreeItemInfo             item   = FreeItemConfig.GetItemInfo(cat, id);
            CreateItemToPlayerAction action = new CreateItemToPlayerAction();

            FreeData fd = (FreeData)player.freeData.FreeData;

            action.name = "default";

            switch (item.cat)
            {
            case (int)ECategory.Weapon:
                if (item.subType == "w1")
                {
                    action.name = "w1";

                    int c1 = fd.freeInventory.GetInventoryManager().GetInventory("w1").posList.Count;
                    int c2 = fd.freeInventory.GetInventoryManager().GetInventory("w2").posList.Count;


                    if (toInv.StartsWith("w1"))
                    {
                        action.name = "w1";
                        if (c1 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else if (toInv.StartsWith("w2"))
                    {
                        action.name = "w2";
                        if (c2 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else
                    {
                        if (c1 > 0 && c2 == 0)
                        {
                            action.name = "w2";
                        }

                        if (c1 > 0 && c2 > 0)
                        {
                            int currentKey = FreeWeaponUtil.GetWeaponKey(fd.Player.WeaponController().HeldSlotType);
                            if (currentKey == 0)
                            {
                                currentKey = 1;
                            }
                            if (currentKey == 1 || currentKey == 2)
                            {
                                action.name = "w" + currentKey;
                            }
                            else
                            {
                                action.name = "w1";
                            }

                            DropItem(action.name, fd, room);
                        }
                    }
                }
                else if (item.subType == "w2")
                {
                    action.name = "w3";
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == "w3")
                {
                    action.name = "w4";
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == "w4")
                {
                    action.name = "default";
                }

                break;

            case (int)ECategory.Avatar:
                action.name = item.subType;
                DropItem(item.subType, fd, room);
                break;

            case (int)ECategory.WeaponPart:
                action.name = AutoPutPart(fd, item, toInv, room);
                break;

            default:
                break;
            }

            //handleDropOne(new string[] { "w2" }, action, item, fd, room, entity);
            //handleAddToDefault(new string[] { "p1", "p2", "p3", "p4", "p5" }, action, item, fd, room, entity);

            action.key = FreeItemConfig.GetItemKey(item.cat, item.id);

            bool canAdd = true;

            if (action.name == "default")
            {
                canAdd = BagCapacityUtil.CanAddToBag(room.FreeArgs, fd, item.cat, item.id, count);
            }

            if (canAdd)
            {
                PlayerAnimationAction.DoAnimation(room.RoomContexts, PlayerAnimationAction.Interrupt, fd.Player, true);
                PlayerAnimationAction.DoAnimation(room.RoomContexts, 101, fd.Player, true);

                if (!string.IsNullOrEmpty(action.key))
                {
                    action.count = count.ToString();
                    action.SetPlayer("current");
                    room.FreeArgs.TempUse("current", fd);

                    action.Act(room.FreeArgs);

                    room.FreeArgs.Resume("current");
                }
                else
                {
                    Debug.LogError(item.cat + "-" + item.key + " not existed");
                }

                if (entity != null)
                {
                    entity.isFlagDestroy = true;
                }

                if (freeMoveEntity != null)
                {
                    freeMoveEntity.isFlagDestroy = true;
                }
                //Debug.LogErrorFormat("destroy entity {0}", entity != null);

                FreeSoundUtil.PlayOnce("pick", 225, room.FreeArgs, fd);
            }

            room.FreeArgs.Resume("current");
        }
Пример #25
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);
        }
Пример #26
0
        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);
        }
Пример #27
0
        private void MovePartToWeapon(ServerRoom room, FreeData fd, ItemPosition ip, string to, FreeItemInfo info)
        {
            string inv = PickupItemUtil.AutoPutPart(fd, info, to, room);

            if (inv != null && inv != ChickenConstant.BagDefault)
            {
                ItemInventory toInv = fd.freeInventory.GetInventoryManager().GetInventory(inv);
                int[]         xy    = toInv.GetNextEmptyPosition(ip.key);
                ItemInventoryUtil.MovePosition(ip, toInv, xy[0], xy[1], room.ContextsWrapper.FreeArgs);
            }
            else
            {
                SimpleProto msg = FreePool.Allocate();
                msg.Key = FreeMessageConstant.ChickenTip;
                msg.Ss.Add("word76");
                FreeMessageSender.SendMessage(fd.Player, msg);
            }
        }