| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543 |
- using Server.MirEnvir;
- namespace Server
- {
- public partial class GameShop : Form
- {
- private List<GameShopItem> SelectedItems;
- public Envir Envir => SMain.EditEnvir;
- public GameShop()
- {
- InitializeComponent();
- LoadGameShopItems();
- GameShopSearchBox_TextChanged(this, EventArgs.Empty);
- }
- private void GameShop_Load(object sender, EventArgs e)
- {
- UpdateInterface();
- LoadItemsIntoComboBox();
- ItemComboBox.SelectedIndex = -1;
- }
- private void GameShop_FormClosed(object sender, FormClosedEventArgs e)
- {
- Envir.SaveDB();
- }
- public class ListBoxItem
- {
- public string DisplayMember { get; set; }
- public object ValueMember { get; set; }
- public override string ToString()
- {
- return DisplayMember;
- }
- }
- private void LoadGameShopItems()
- {
- ClassFilter_lb.Items.Clear();
- CategoryFilter_lb.Items.Clear();
- GameShopListBox.Items.Clear();
- ClassFilter_lb.Items.Add("All Classes");
- CategoryFilter_lb.Items.Add("All Categories");
- for (int i = 0; i < SMain.EditEnvir.GameShopList.Count; i++)
- {
- if (!ClassFilter_lb.Items.Contains(SMain.EditEnvir.GameShopList[i].Class)) ClassFilter_lb.Items.Add(SMain.EditEnvir.GameShopList[i].Class);
- if (!CategoryFilter_lb.Items.Contains(SMain.EditEnvir.GameShopList[i].Category)) CategoryFilter_lb.Items.Add(SMain.EditEnvir.GameShopList[i].Category);
- GameShopListBox.Items.Add(SMain.EditEnvir.GameShopList[i]);
- }
- ClassFilter_lb.Text = "All Classes";
- CategoryFilter_lb.Text = "All Categories";
- SectionFilter_lb.Text = "All Items";
- }
- private void UpdateGameShopList()
- {
- GameShopListBox.Items.Clear();
- for (int i = 0; i < SMain.EditEnvir.GameShopList.Count; i++)
- {
- if (ClassFilter_lb.Text == "All Classes" || SMain.EditEnvir.GameShopList[i].Class == ClassFilter_lb.Text)
- if (SectionFilter_lb.Text == "All Items" || SMain.EditEnvir.GameShopList[i].TopItem && SectionFilter_lb.Text == "Top Items" || SMain.EditEnvir.GameShopList[i].Deal && SectionFilter_lb.Text == "Sale Items" || SMain.EditEnvir.GameShopList[i].Date > Envir.Now.AddDays(-7) && SectionFilter_lb.Text == "New Items")
- if (CategoryFilter_lb.Text == "All Categories" || SMain.EditEnvir.GameShopList[i].Category == CategoryFilter_lb.Text)
- GameShopListBox.Items.Add(SMain.EditEnvir.GameShopList[i]);
- }
- }
- private void GameShopListBox_SelectedIndexChanged(object sender, EventArgs e)
- {
- UpdateInterface();
- }
- public void UpdateInterface(bool refreshList = false)
- {
- SelectedItems = GameShopListBox.SelectedItems.Cast<GameShopItem>().ToList();
- if (SelectedItems.Count == 0)
- {
- GoldPrice_textbox.Text = String.Empty;
- GPPrice_textbox.Text = String.Empty;
- Stock_textbox.Text = String.Empty;
- Individual_checkbox.Checked = false;
- Class_combo.Text = "All";
- Category_textbox.Text = "";
- TopItem_checkbox.Checked = false;
- DealofDay_checkbox.Checked = false;
- CredxGold_textbox.Text = Settings.CredxGold.ToString();
- ItemDetails_gb.Visible = false;
- TotalSold_label.Text = "0";
- LeftinStock_label.Text = "";
- Count_textbox.Text = String.Empty;
- CreditOnlyBox.Checked = false;
- GoldOnlyBox.Checked = false;
- // Reset ComboBox
- ItemComboBox.SelectedIndex = -1;
- return;
- }
- ItemDetails_gb.Visible = true;
- GoldPrice_textbox.Text = SelectedItems[0].GoldPrice.ToString();
- GPPrice_textbox.Text = SelectedItems[0].CreditPrice.ToString();
- Stock_textbox.Text = SelectedItems[0].Stock.ToString();
- Individual_checkbox.Checked = SelectedItems[0].iStock;
- Class_combo.Text = SelectedItems[0].Class;
- Category_textbox.Text = SelectedItems[0].Category;
- TopItem_checkbox.Checked = SelectedItems[0].TopItem;
- DealofDay_checkbox.Checked = SelectedItems[0].Deal;
- Count_textbox.Text = SelectedItems[0].Count.ToString();
- CreditOnlyBox.Checked = SelectedItems[0].CanBuyCredit;
- GoldOnlyBox.Checked = SelectedItems[0].CanBuyGold;
- // Set the ItemComboBox selection to match the ItemIndex
- if (SelectedItems[0].Info != null && !string.IsNullOrEmpty(SelectedItems[0].Info.Name))
- {
- var itemName = SelectedItems[0].Info.Name;
- // Select the corresponding item in the ComboBox
- if (ItemComboBox.Items.Contains(itemName))
- {
- ItemComboBox.SelectedItem = itemName;
- }
- else
- {
- ItemComboBox.SelectedIndex = -1; // Reset if no match found
- }
- }
- else
- {
- ItemComboBox.SelectedIndex = -1; // Reset if no valid Info or Name
- }
- GetStats();
- }
- private void GetStats()
- {
- int purchased;
- SMain.Envir.GameshopLog.TryGetValue(SelectedItems[0].GIndex, out purchased);
- TotalSold_label.Text = purchased.ToString();
- if (!Individual_checkbox.Checked && SelectedItems[0].Stock != 0)
- {
- if (SelectedItems[0].Stock - purchased >= 0)
- LeftinStock_label.Text = (SelectedItems[0].Stock - purchased).ToString();
- else
- LeftinStock_label.Text = "";
- }
- else if (SelectedItems[0].Stock == 0)
- {
- LeftinStock_label.Text = "Infinite";
- }
- else if (Individual_checkbox.Checked)
- {
- LeftinStock_label.Text = "Can't calc individual levels";
- }
- }
- private void GoldPrice_textbox_TextChanged(object sender, EventArgs e)
- {
- uint temp;
- if (!uint.TryParse(GoldPrice_textbox.Text, out temp))
- {
- GoldPrice_textbox.BackColor = Color.Red;
- return;
- }
- GoldPrice_textbox.BackColor = SystemColors.Window;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].GoldPrice = temp;
- }
- private void GPPrice_textbox_TextChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- uint temp;
- if (!uint.TryParse(ActiveControl.Text, out temp))
- {
- ActiveControl.BackColor = Color.Red;
- return;
- }
- ActiveControl.BackColor = SystemColors.Window;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].CreditPrice = temp;
- if (ActiveControl.Text != "") GoldPrice_textbox.Text = (temp * Settings.CredxGold).ToString();
- }
- private void Class_combo_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- string temp = ActiveControl.Text;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].Class = temp;
- }
- private void TopItem_checkbox_CheckedChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].TopItem = TopItem_checkbox.Checked;
- }
- private void Remove_button_Click(object sender, EventArgs e)
- {
- if (SelectedItems.Count == 0) return;
- if (MessageBox.Show("Are you sure you want to remove the selected Items?", "Remove Items?", MessageBoxButtons.YesNo) != DialogResult.Yes) return;
- for (int i = 0; i < SelectedItems.Count; i++) Envir.Remove(SelectedItems[i]);
- LoadGameShopItems();
- UpdateInterface();
- }
- private void DealofDay_checkbox_CheckedChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].Deal = DealofDay_checkbox.Checked;
- }
- private void Category_textbox_TextChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- string temp = ActiveControl.Text;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].Category = temp;
- }
- private void Stock_textbox_TextChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- int temp;
- if (!int.TryParse(ActiveControl.Text, out temp))
- {
- ActiveControl.BackColor = Color.Red;
- return;
- }
- ActiveControl.BackColor = SystemColors.Window;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].Stock = temp;
- GetStats();
- }
- private void Individual_checkbox_CheckedChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].iStock = Individual_checkbox.Checked;
- }
- private void CredxGold_textbox_TextChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- short temp;
- if (!short.TryParse(ActiveControl.Text, out temp))
- {
- ActiveControl.BackColor = Color.Red;
- return;
- }
- ActiveControl.BackColor = SystemColors.Window;
- Settings.CredxGold = temp;
- }
- private void Count_textbox_TextChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender) return;
- ushort temp;
- if (!ushort.TryParse(ActiveControl.Text, out temp) || temp > 999)
- {
- ActiveControl.BackColor = Color.Red;
- return;
- }
- if (temp < 1)
- {
- temp = 1;
- ActiveControl.Text = "1";
- }
- else if (temp > SelectedItems[0].Info.StackSize)
- {
- temp = SelectedItems[0].Info.StackSize;
- ActiveControl.Text = SelectedItems[0].Info.StackSize.ToString();
- }
- ActiveControl.BackColor = SystemColors.Window;
- SelectedItems[0].Count = temp;
- }
- private void ClassFilter_lb_SelectedIndexChanged(object sender, EventArgs e)
- {
- UpdateGameShopList();
- }
- private void SectionFilter_lb_SelectedIndexChanged(object sender, EventArgs e)
- {
- UpdateGameShopList();
- }
- private void CategoryFilter_lb_SelectedIndexChanged(object sender, EventArgs e)
- {
- UpdateGameShopList();
- }
- private void ResetFilter_button_Click(object sender, EventArgs e)
- {
- ClassFilter_lb.Text = "All Classes";
- CategoryFilter_lb.Text = "All Categories";
- SectionFilter_lb.Text = "All Items";
- UpdateGameShopList();
- }
- private void ServerLog_button_Click(object sender, EventArgs e)
- {
- if (SMain.Envir.Running)
- {
- if (MessageBox.Show("Reseting purchase logs cannot be reverted and will set stock levels back to defaults, This will take effect instantly.", "Remove Logs?", MessageBoxButtons.YesNo) != DialogResult.Yes) return;
- SMain.Envir.ClearGameshopLog();
- }
- else
- {
- if (MessageBox.Show("Reseting purchase logs cannot be reverted and will set stock levels back to defaults, This will take effect when you start the server", "Remove Logs?", MessageBoxButtons.YesNo) != DialogResult.Yes) return;
- SMain.Envir.ResetGS = true;
- }
- }
- private void GoldOnlyBox_CheckedChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender)
- return;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].CanBuyGold = GoldOnlyBox.Checked;
- }
- private void CreditOnly_CheckedChanged(object sender, EventArgs e)
- {
- if (ActiveControl != sender)
- return;
- for (int i = 0; i < SelectedItems.Count; i++)
- SelectedItems[i].CanBuyCredit = CreditOnlyBox.Checked;
- }
- #region Load Items
- private void LoadItemsIntoComboBox()
- {
- ItemComboBox.Items.Clear();
- // Add "None" as a default option
- ItemComboBox.Items.Add("None");
- // Add all items from ItemInfoList
- foreach (var item in SMain.EditEnvir.ItemInfoList)
- {
- if (!string.IsNullOrEmpty(item.Name))
- {
- ItemComboBox.Items.Add($"{item.Name}");
- }
- }
- ItemComboBox.SelectedIndex = 0; // Default to "None"
- }
- #endregion
- private void Add_Button_Click(object sender, EventArgs e)
- {
- if (SMain.EditEnvir.ItemInfoList == null || SMain.EditEnvir.ItemInfoList.Count == 0)
- {
- MessageBox.Show("No items available to add.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- // Get the first item's index as default
- var defaultItem = SMain.EditEnvir.ItemInfoList.First();
- int firstItemIndex = defaultItem.Index;
- // Find the next available GIndex
- int nextGIndex = SMain.EditEnvir.GameShopList.Count > 0
- ? SMain.EditEnvir.GameShopList.Max(item => item.GIndex) + 1
- : 1;
- // Create the new GameShopItem
- var newItem = new GameShopItem
- {
- GIndex = nextGIndex,
- GoldPrice = 0,
- CreditPrice = 0,
- ItemIndex = firstItemIndex,
- Info = defaultItem,
- Date = DateTime.Now,
- Class = "None",
- Category = "None"
- };
- // Add to GameShopList (main data source)
- SMain.EditEnvir.GameShopList.Add(newItem);
- // Add to GameShopListBox for UI display
- GameShopListBox.Items.Add(newItem);
- // Set ComboBox to the first item's name
- ItemComboBox.SelectedItem = $"{defaultItem.Name}";
- // Save the database
- Envir.SaveDB();
- }
- private void ItemComboBox_SelectedIndexChanged(object sender, EventArgs e)
- {
- // Ensure we have a selected GameShopItem
- if (SelectedItems == null || SelectedItems.Count == 0)
- return;
- // Get the selected item name
- var selectedName = ItemComboBox.SelectedItem as string;
- if (string.IsNullOrEmpty(selectedName) || selectedName == "None")
- return;
- // Find the corresponding ItemInfo object by name
- var newItemInfo = SMain.EditEnvir.ItemInfoList
- .FirstOrDefault(x => x.Name == selectedName);
- if (newItemInfo == null)
- return;
- // Update the selected GameShopItem
- var selectedGameShopItem = SelectedItems[0];
- selectedGameShopItem.ItemIndex = newItemInfo.Index;
- selectedGameShopItem.Info = newItemInfo;
- // Refresh the GameShopListBox to reflect changes
- int selectedIndex = GameShopListBox.SelectedIndex;
- GameShopListBox.Items[selectedIndex] = selectedGameShopItem;
- }
- #region Search Box
- private void GameShopSearchBox_TextChanged(object sender, EventArgs e)
- {
- string searchText = GameShopSearchBox.Text.Trim().ToLower();
- GameShopListBox.Items.Clear();
- foreach (var item in SMain.EditEnvir.GameShopList)
- {
- // Add to list if search text is empty or the item matches the search criteria
- if (string.IsNullOrEmpty(searchText) ||
- (!string.IsNullOrEmpty(item.Info?.Name) && item.Info.Name.ToLower().Contains(searchText)))
- {
- GameShopListBox.Items.Add(item);
- }
- }
- }
- #endregion
- private void ExportButton_Click(object sender, EventArgs e)
- {
- if (GameShopListBox.Items.Count == 0)
- {
- MessageBox.Show("No items to export.", "Export Failed", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- string exportDir = Path.Combine(Application.StartupPath, "Exports");
- if (!Directory.Exists(exportDir))
- Directory.CreateDirectory(exportDir);
- SaveFileDialog saveDialog = new SaveFileDialog
- {
- Title = "GameShop Info",
- Filter = "Text Files (*.txt)|*.txt",
- FileName = "GameShop_Export.txt",
- InitialDirectory = exportDir
- };
- if (saveDialog.ShowDialog() != DialogResult.OK)
- return;
- List<string> lines = new List<string>
- {
- "GameShop Info",
- ""
- };
- foreach (var obj in GameShopListBox.Items)
- {
- if (obj is GameShopItem item && item.Info != null)
- {
- string name = item.Info.Name;
- uint gp = item.CreditPrice;
- uint gold = item.GoldPrice;
- lines.Add($"{name}: GameGold: {gp:n0} Gold: {gold:n0}");
- }
- }
- File.WriteAllLines(saveDialog.FileName, lines);
- MessageBox.Show("Export complete.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- }
- }
|