NPC.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using Mir2Assistant.Common.Functions;
  2. using Mir2Assistant.Common.Models;
  3. using Mir2Assistant.Common.TabForms;
  4. using Mir2Assistant.Common.Utils;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Collections.ObjectModel;
  8. using System.ComponentModel;
  9. using System.Data;
  10. using System.Diagnostics;
  11. using System.Drawing;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Text.RegularExpressions;
  15. using System.Threading.Tasks;
  16. using System.Windows.Forms;
  17. namespace Mir2Assistant.TabForms.Demo.TabForms
  18. {
  19. /// <summary>
  20. /// NPC
  21. /// </summary>
  22. [Order(3)]
  23. public partial class NPCForm : Form, ITabForm
  24. {
  25. public NPCForm()
  26. {
  27. InitializeComponent();
  28. }
  29. public string Title => "NPC";
  30. public MirGameInstanceModel? GameInstance { get; set; }
  31. private ObservableCollection<MonsterModel> npcs = new ObservableCollection<MonsterModel>();
  32. private ObservableCollection<SkillModel> skills = new ObservableCollection<SkillModel>();
  33. private async void button1_Click(object sender, EventArgs e)
  34. {
  35. if (listBox1.SelectedItems.Count > 0)
  36. {
  37. var npc = listBox1.SelectedItems?[0] as MonsterModel;
  38. if (npc != null)
  39. {
  40. listBox2.Items.Clear();
  41. textBox1.Text = await NpcFunction.ClickNPC(GameInstance!, npc);
  42. NpcFunction.GetTalkCmds(textBox1.Text).ForEach(cmd =>
  43. {
  44. listBox2.Items.Add(cmd);
  45. });
  46. }
  47. }
  48. }
  49. private void NPCForm_Load(object sender, EventArgs e)
  50. {
  51. bindingSource1.DataSource = npcs;
  52. bindingSource2.DataSource = skills;
  53. listBox1.DataSource = bindingSource1;
  54. listBox1.DisplayMember = "Display";
  55. GameInstance!.NewSysMsg += (flag, str) => this.Invoke(() => textBox2.Text = str);
  56. }
  57. private void timer1_Tick(object sender, EventArgs e)
  58. {
  59. var memoryUtils = GameInstance!.MemoryUtils!;
  60. var scrollOffset = listBox1.TopIndex;
  61. npcs.Clear();
  62. foreach (var item in GameInstance!.Monsters.Values.Where(o => o.TypeStr == "NPC"))
  63. {
  64. npcs.Add(item);
  65. }
  66. bindingSource1.ResetBindings(false);
  67. listBox1.TopIndex = scrollOffset;
  68. }
  69. private async void button3_Click(object sender, EventArgs e)
  70. {
  71. if (!string.IsNullOrEmpty(listBox2.SelectedItem?.ToString()))
  72. {
  73. textBox1.Text = await NpcFunction.Talk2(GameInstance!, listBox2.SelectedItem.ToString()!.Split('/')[1]);
  74. listBox2.Items.Clear();
  75. NpcFunction.GetTalkCmds(textBox1.Text).ForEach(cmd =>
  76. {
  77. listBox2.Items.Add(cmd);
  78. });
  79. }
  80. }
  81. }
  82. }