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"); } }
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)); } }
public virtual void SetCurrentItem(ItemPosition currentItem, ISkillArgs args) { this.currentItem = currentItem; string cat = ((FreeGameItem)currentItem.GetKey()).GetCat(); if (cat != null) { this.lastUseItem[cat] = currentItem; } }
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); }
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); }
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); } }
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()); } } }
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); } }
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); } } }
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); } } }
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); } }
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"); } } }
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"); } } } }
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()); }
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); }
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); } } } }
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); }
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); }