private void lstCrafts_AfterSelect(object sender, TreeViewEventArgs e) { if (mChangingName) { return; } if (lstCrafts.SelectedNode == null || lstCrafts.SelectedNode.Tag == null) { return; } mEditorItem = CraftBase.Get((Guid)lstCrafts.SelectedNode.Tag); UpdateEditor(); }
//Update the crafting bar public void Update() { if (!mInitialized) { for (var i = 0; i < Globals.ActiveCraftingTable?.Crafts?.Count; ++i) { var activeCraft = CraftBase.Get(Globals.ActiveCraftingTable.Crafts[i]); if (activeCraft == null) { continue; } var tmpRow = mRecipes?.AddRow(i + 1 + ") " + ItemBase.GetName(activeCraft.ItemId)); if (tmpRow == null) { continue; } tmpRow.UserData = Globals.ActiveCraftingTable.Crafts[i]; tmpRow.DoubleClicked += tmpNode_DoubleClicked; tmpRow.Clicked += tmpNode_DoubleClicked; tmpRow.SetTextColor(Color.White); tmpRow.RenderColor = new Color(50, 255, 255, 255); } //Load the craft data if (Globals.ActiveCraftingTable?.Crafts?.Count > 0) { LoadCraftItems(Globals.ActiveCraftingTable.Crafts[0]); } mInitialized = true; } if (!Crafting) { mBar.Width = 0; return; } var craft = CraftBase.Get(mCraftId); if (craft == null) { return; } var delta = Globals.System.GetTimeMs() - mBarTimer; if (delta > craft.Time) { delta = craft.Time; Crafting = false; if (mCraftWindow != null) { mCraftWindow.IsClosable = true; } LoadCraftItems(mCraftId); mBar.Width = 0; } var ratio = craft.Time == 0 ? 0 : Convert.ToDecimal(delta) / Convert.ToDecimal(craft.Time); var width = ratio * mBarContainer?.Width ?? 0; if (mBar == null) { return; } mBar.SetTextureRect( 0, 0, Convert.ToInt32(ratio * mBar.Texture?.GetWidth() ?? 0), mBar.Texture?.GetHeight() ?? 0 ); mBar.Width = Convert.ToInt32(width); }
private void LoadCraftItems(Guid id) { //Combined item mCraftId = id; if (mCombinedItem != null) { mCraftWindow.Children.Remove(mCombinedItem.Container); } //Clear the old item description box if (mCombinedItem != null && mCombinedItem.DescWindow != null) { mCombinedItem.DescWindow.Dispose(); } if (!Globals.ActiveCraftingTable.Crafts.Contains(id)) { return; } var craft = Globals.ActiveCraftingTable.Crafts.Get(id); if (craft == null) { return; } mCombinedItem = new RecipeItem(this, new CraftIngredient(craft.ItemId, 0)) { Container = new ImagePanel(mCraftWindow, "CraftedItem") }; mCombinedItem.Setup("CraftedItemIcon"); mCombinedValue = new Label(mCombinedItem.Container, "CraftedItemQuantity"); mCombinedItem.Container.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString()); mCombinedItem.LoadItem(); mCombinedValue.Show(); var quantity = Math.Max(craft.Quantity, 1); var itm = ItemBase.Get(craft.ItemId); if (itm == null || !itm.IsStackable) { quantity = 1; } mCombinedValue.Text = quantity.ToString(); for (var i = 0; i < mItems.Count; i++) { //Clear the old item description box if (mItems[i].DescWindow != null) { mItems[i].DescWindow.Dispose(); } mItemContainer.RemoveChild(mItems[i].Container, true); } mItems.Clear(); mValues.Clear(); //Quickly Look through the inventory and create a catalog of what items we have, and how many var itemdict = new Dictionary <Guid, int>(); foreach (var item in Globals.Me.Inventory) { if (item != null) { if (itemdict.ContainsKey(item.ItemId)) { itemdict[item.ItemId] += item.Quantity; } else { itemdict.Add(item.ItemId, item.Quantity); } } } for (var i = 0; i < craft.Ingredients.Count; i++) { mItems.Add(new RecipeItem(this, craft.Ingredients[i])); mItems[i].Container = new ImagePanel(mItemContainer, "CraftingIngredient"); mItems[i].Setup("IngredientItemIcon"); var lblTemp = new Label(mItems[i].Container, "IngredientItemValue"); var onHand = 0; if (itemdict.ContainsKey(craft.Ingredients[i].ItemId)) { onHand = itemdict[craft.Ingredients[i].ItemId]; } lblTemp.Text = onHand + "/" + craft.Ingredients[i].Quantity; mValues.Add(lblTemp); mItems[i].Container.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString()); mItems[i].LoadItem(); var xPadding = mItems[i].Container.Margin.Left + mItems[i].Container.Margin.Right; var yPadding = mItems[i].Container.Margin.Top + mItems[i].Container.Margin.Bottom; mItems[i] .Container.SetPosition( i % ((mItemContainer.Width - mItemContainer.GetVerticalScrollBar().Width) / (mItems[i].Container.Width + xPadding)) * (mItems[i].Container.Width + xPadding) + xPadding, i / ((mItemContainer.Width - mItemContainer.GetVerticalScrollBar().Width) / (mItems[i].Container.Width + xPadding)) * (mItems[i].Container.Height + yPadding) + yPadding ); } //If crafting & we no longer have the items for the craft then stop! if (Crafting) { var cancraft = true; foreach (var c in CraftBase.Get(mCraftId).Ingredients) { if (itemdict.ContainsKey(c.ItemId)) { if (itemdict[c.ItemId] >= c.Quantity) { itemdict[c.ItemId] -= c.Quantity; } else { cancraft = false; break; } } else { cancraft = false; break; } } if (!cancraft) { Crafting = false; mCraftWindow.IsClosable = true; mBar.Width = 0; ChatboxMsg.AddMessage(new ChatboxMsg(Strings.Crafting.incorrectresources, Color.Red)); return; } } }
public void InitEditor() { var selectedId = Guid.Empty; var folderNodes = new Dictionary <string, TreeNode>(); if (lstCrafts.SelectedNode != null && lstCrafts.SelectedNode.Tag != null) { selectedId = (Guid)lstCrafts.SelectedNode.Tag; } lstCrafts.Nodes.Clear(); //Collect folders var mFolders = new List <string>(); foreach (var itm in CraftBase.Lookup) { if (!string.IsNullOrEmpty(((CraftBase)itm.Value).Folder) && !mFolders.Contains(((CraftBase)itm.Value).Folder)) { mFolders.Add(((CraftBase)itm.Value).Folder); if (!mKnownFolders.Contains(((CraftBase)itm.Value).Folder)) { mKnownFolders.Add(((CraftBase)itm.Value).Folder); } } } mFolders.Sort(); mKnownFolders.Sort(); cmbFolder.Items.Clear(); cmbFolder.Items.Add(""); cmbFolder.Items.AddRange(mKnownFolders.ToArray()); lstCrafts.Sorted = !btnChronological.Checked; if (!btnChronological.Checked && !CustomSearch()) { foreach (var folder in mFolders) { var node = lstCrafts.Nodes.Add(folder); node.ImageIndex = 0; node.SelectedImageIndex = 0; folderNodes.Add(folder, node); } } foreach (var itm in CraftBase.ItemPairs) { var node = new TreeNode(itm.Value); node.Tag = itm.Key; node.ImageIndex = 1; node.SelectedImageIndex = 1; var folder = CraftBase.Get(itm.Key).Folder; if (!string.IsNullOrEmpty(folder) && !btnChronological.Checked && !CustomSearch()) { var folderNode = folderNodes[folder]; folderNode.Nodes.Add(node); if (itm.Key == selectedId) { folderNode.Expand(); } } else { lstCrafts.Nodes.Add(node); } if (CustomSearch()) { if (!node.Text.ToLower().Contains(txtSearch.Text.ToLower())) { node.Remove(); } } if (itm.Key == selectedId) { lstCrafts.SelectedNode = node; } } var selectedNode = lstCrafts.SelectedNode; if (!btnChronological.Checked) { lstCrafts.Sort(); } lstCrafts.SelectedNode = selectedNode; foreach (var node in mExpandedFolders) { if (folderNodes.ContainsKey(node)) { folderNodes[node].Expand(); } } }
//GameObjectPacket private static void HandlePacket(GameObjectPacket packet) { var id = packet.Id; var deleted = packet.Deleted; var json = ""; if (!packet.Deleted) { json = packet.Data; } switch (packet.Type) { case GameObjectType.Animation: if (deleted) { var anim = AnimationBase.Get(id); anim.Delete(); } else { var anim = new AnimationBase(id); anim.Load(json); try { AnimationBase.Lookup.Set(id, anim); } catch (Exception exception) { Log.Error($"Another mystery NPE. [Lookup={AnimationBase.Lookup}]"); if (exception.InnerException != null) { Log.Error(exception.InnerException); } Log.Error(exception); Log.Error($"{nameof(id)}={id},{nameof(anim)}={anim}"); throw; } } break; case GameObjectType.Class: if (deleted) { var cls = ClassBase.Get(id); cls.Delete(); } else { var cls = new ClassBase(id); cls.Load(json); ClassBase.Lookup.Set(id, cls); } break; case GameObjectType.Item: if (deleted) { var itm = ItemBase.Get(id); itm.Delete(); } else { var itm = new ItemBase(id); itm.Load(json); ItemBase.Lookup.Set(id, itm); } break; case GameObjectType.Npc: if (deleted) { var npc = NpcBase.Get(id); npc.Delete(); } else { var npc = new NpcBase(id); npc.Load(json); NpcBase.Lookup.Set(id, npc); } break; case GameObjectType.Projectile: if (deleted) { var proj = ProjectileBase.Get(id); proj.Delete(); } else { var proj = new ProjectileBase(id); proj.Load(json); ProjectileBase.Lookup.Set(id, proj); } break; case GameObjectType.Quest: if (deleted) { var qst = QuestBase.Get(id); qst.Delete(); } else { var qst = new QuestBase(id); qst.Load(json); foreach (var tsk in qst.Tasks) { qst.OriginalTaskEventIds.Add(tsk.Id, tsk.CompletionEventId); } QuestBase.Lookup.Set(id, qst); } break; case GameObjectType.Resource: if (deleted) { var res = ResourceBase.Get(id); res.Delete(); } else { var res = new ResourceBase(id); res.Load(json); ResourceBase.Lookup.Set(id, res); } break; case GameObjectType.Shop: if (deleted) { var shp = ShopBase.Get(id); shp.Delete(); } else { var shp = new ShopBase(id); shp.Load(json); ShopBase.Lookup.Set(id, shp); } break; case GameObjectType.Spell: if (deleted) { var spl = SpellBase.Get(id); spl.Delete(); } else { var spl = new SpellBase(id); spl.Load(json); SpellBase.Lookup.Set(id, spl); } break; case GameObjectType.CraftTables: if (deleted) { var cft = CraftingTableBase.Get(id); cft.Delete(); } else { var cft = new CraftingTableBase(id); cft.Load(json); CraftingTableBase.Lookup.Set(id, cft); } break; case GameObjectType.Crafts: if (deleted) { var cft = CraftBase.Get(id); cft.Delete(); } else { var cft = new CraftBase(id); cft.Load(json); CraftBase.Lookup.Set(id, cft); } break; case GameObjectType.Map: //Handled in a different packet break; case GameObjectType.Event: var wasCommon = false; if (deleted) { var evt = EventBase.Get(id); wasCommon = evt.CommonEvent; evt.Delete(); } else { var evt = new EventBase(id); evt.Load(json); wasCommon = evt.CommonEvent; EventBase.Lookup.Set(id, evt); } if (!wasCommon) { return; } break; case GameObjectType.PlayerVariable: if (deleted) { var pvar = PlayerVariableBase.Get(id); pvar.Delete(); } else { var pvar = new PlayerVariableBase(id); pvar.Load(json); PlayerVariableBase.Lookup.Set(id, pvar); } break; case GameObjectType.ServerVariable: if (deleted) { var svar = ServerVariableBase.Get(id); svar.Delete(); } else { var svar = new ServerVariableBase(id); svar.Load(json); ServerVariableBase.Lookup.Set(id, svar); } break; case GameObjectType.Tileset: var obj = new TilesetBase(id); obj.Load(json); TilesetBase.Lookup.Set(id, obj); if (Globals.HasGameData && !packet.AnotherFollowing) { GameContentManager.LoadTilesets(); } break; default: throw new ArgumentOutOfRangeException(); } GameObjectUpdatedDelegate?.Invoke(packet.Type); }
//Update the crafting bar public void Update() { if (!mInitialized) { //Quickly Look through the inventory and count the luck stat double luck = 0; foreach (var equip in Globals.Me.Equipment) { if (ItemBase.Get(equip)?.Effect?.Type == EffectType.Luck) { luck += ItemBase.Get(equip).Effect.Percentage; } } var j = 0; for (var i = 0; i < Globals.ActiveCraftingTable?.Crafts?.Count; ++i) { var activeCraft = CraftBase.Get(Globals.ActiveCraftingTable.Crafts[i]); if (activeCraft == null) { continue; } if (!Globals.ActiveCraftingTableReqs.Contains(i + "-")) { j++; var tmpRow = mRecipes?.AddRow(j + ") " + ItemBase.GetName(activeCraft.ItemId) + " (" + Math.Min(activeCraft.SuccessRate + (luck / 10), 100) + "%) "); if (tmpRow == null) { continue; } tmpRow.UserData = Globals.ActiveCraftingTable.Crafts[i]; tmpRow.DoubleClicked += tmpNode_DoubleClicked; tmpRow.Clicked += tmpNode_DoubleClicked; tmpRow.SetTextColor(Color.White); tmpRow.RenderColor = new Color(50, 255, 255, 255); } } //Load the craft data if (Globals.ActiveCraftingTable?.Crafts?.Count > 0) { LoadCraftItems(Globals.ActiveCraftingTable.Crafts[0]); } mInitialized = true; } //We received green light to craft, continue crafting if (Globals.canCraftrq && clickedCraft) { Crafting = true; mBarTimer = Globals.System.GetTimeMs(); PacketSender.SendCraftItem(Globals.canCraftitem); mCraftWindow.IsClosable = false; Globals.canCraftrq = false; Globals.canCraftitem = Guid.Empty; clickedCraft = false; return; } //Uncomment next lines to have the craftbutton disable if requirements are not met /* * if (!Globals.canCraftrq) * { * mCraft.Disable(); * } * * if (Globals.canCraftrq) * { * mCraft.Enable(); * } */ if (!Crafting) { mBar.Width = 0; return; } var craft = CraftBase.Get(mCraftId); if (craft == null) { return; } var delta = Globals.System.GetTimeMs() - mBarTimer; if (delta > craft.Time) { delta = craft.Time; Crafting = false; if (mCraftWindow != null) { mCraftWindow.IsClosable = true; } LoadCraftItems(mCraftId); mBar.Width = 0; } var ratio = craft.Time == 0 ? 0 : Convert.ToDecimal(delta) / Convert.ToDecimal(craft.Time); var width = ratio * mBarContainer?.Width ?? 0; if (mBar == null) { return; } mBar.SetTextureRect( 0, 0, Convert.ToInt32(ratio * mBar.Texture?.GetWidth() ?? 0), mBar.Texture?.GetHeight() ?? 0 ); mBar.Width = Convert.ToInt32(width); }
private void AssignEditorItem(Guid id) { mEditorItem = CraftBase.Get(id); UpdateEditor(); }