MagicInfoForm.cs 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020
  1. using Server.MirDatabase;
  2. using Server.MirEnvir;
  3. namespace Server
  4. {
  5. public partial class MagicInfoForm : Form
  6. {
  7. public Envir Envir => SMain.EditEnvir;
  8. private MagicInfo _selectedMagicInfo;
  9. public MagicInfoForm()
  10. {
  11. InitializeComponent();
  12. MagicSearchBox_TextChanged(this, EventArgs.Empty);
  13. UpdateMagicForm();
  14. }
  15. private void UpdateMagicForm(byte field = 0)
  16. {
  17. _selectedMagicInfo = (MagicInfo)MagiclistBox.SelectedItem;
  18. lblBookValid.BackColor = SystemColors.Window;
  19. if (_selectedMagicInfo == null)
  20. {
  21. tabControl1.Enabled = false;
  22. lblBookValid.Text = "Searching";
  23. lblSelected.Text = "Selected Skill: none";
  24. lblDamageExample.Text = "";
  25. lblDamageExplained.Text = "";
  26. txtSkillIcon.Text = "0";
  27. txtSkillLvl1Points.Text = "0";
  28. txtSkillLvl1Req.Text = "0";
  29. txtSkillLvl2Points.Text = "0";
  30. txtSkillLvl2Req.Text = "0";
  31. txtSkillLvl3Points.Text = "0";
  32. txtSkillLvl3Req.Text = "0";
  33. txtMPBase.Text = "0";
  34. txtMPIncrease.Text = "0";
  35. txtDelayBase.Text = "0";
  36. txtDelayReduction.Text = "0";
  37. txtDmgBaseMin.Text = "0";
  38. txtDmgBaseMax.Text = "0";
  39. txtDmgBonusMin.Text = "0";
  40. txtDmgBonusMax.Text = "0";
  41. }
  42. else
  43. {
  44. tabControl1.Enabled = true;
  45. lblSelected.Text = "Selected Skill: " + _selectedMagicInfo.ToString();
  46. lblDamageExample.Text =
  47. $"Damage @ Skill level 0: {GetMinPower(0):000}-{GetMaxPower(0):000} ||| level 1: {GetMinPower(1):000}-{GetMaxPower(1):000} ||| level 2: {GetMinPower(2):000}-{GetMaxPower(2):000} ||| level 3: {GetMinPower(3):000}-{GetMaxPower(3):000}";
  48. lblDamageExplained.Text =
  49. $"Damage: {{Random(minstat-maxstat) + [<(random({_selectedMagicInfo.MPowerBase}-{_selectedMagicInfo.MPowerBase + _selectedMagicInfo.MPowerBonus})/4) X (skill level +1)> + random<{_selectedMagicInfo.PowerBase}-{_selectedMagicInfo.PowerBonus + _selectedMagicInfo.PowerBase}>]}} X {{{_selectedMagicInfo.MultiplierBase} + (skill level * {_selectedMagicInfo.MultiplierBonus})}}";
  50. txtSkillIcon.Text = _selectedMagicInfo.Icon.ToString();
  51. txtSkillLvl1Points.Text = _selectedMagicInfo.Need1.ToString();
  52. txtSkillLvl1Req.Text = _selectedMagicInfo.Level1.ToString();
  53. txtSkillLvl2Points.Text = _selectedMagicInfo.Need2.ToString();
  54. txtSkillLvl2Req.Text = _selectedMagicInfo.Level2.ToString();
  55. txtSkillLvl3Points.Text = _selectedMagicInfo.Need3.ToString();
  56. txtSkillLvl3Req.Text = _selectedMagicInfo.Level3.ToString();
  57. txtMPBase.Text = _selectedMagicInfo.BaseCost.ToString();
  58. txtMPIncrease.Text = _selectedMagicInfo.LevelCost.ToString();
  59. txtDelayBase.Text = _selectedMagicInfo.DelayBase.ToString();
  60. txtDelayReduction.Text = _selectedMagicInfo.DelayReduction.ToString();
  61. txtDmgBaseMin.Text = _selectedMagicInfo.PowerBase.ToString();
  62. txtDmgBaseMax.Text = (_selectedMagicInfo.PowerBase + _selectedMagicInfo.PowerBonus).ToString();
  63. txtDmgBonusMin.Text = _selectedMagicInfo.MPowerBase.ToString();
  64. txtDmgBonusMax.Text = (_selectedMagicInfo.MPowerBase + _selectedMagicInfo.MPowerBonus).ToString();
  65. if (field != 1)
  66. txtDmgMultBase.Text = _selectedMagicInfo.MultiplierBase.ToString();
  67. if (field != 2)
  68. txtDmgMultBoost.Text = _selectedMagicInfo.MultiplierBonus.ToString();
  69. txtRange.Text = _selectedMagicInfo.Range.ToString();
  70. ItemInfo Book = Envir.GetBook((short)_selectedMagicInfo.Spell);
  71. if (Book != null)
  72. {
  73. lblBookValid.Text = Book.Name;
  74. }
  75. else
  76. {
  77. lblBookValid.Text = "No book found";
  78. lblBookValid.BackColor = Color.Red;
  79. }
  80. textBoxName.Text = _selectedMagicInfo.Name;
  81. }
  82. }
  83. private int GetMaxPower(byte level)
  84. {
  85. if (_selectedMagicInfo == null) return 0;
  86. return (int)Math.Round((((_selectedMagicInfo.MPowerBase + _selectedMagicInfo.MPowerBonus) / 4F) * (level + 1) + (_selectedMagicInfo.PowerBase + _selectedMagicInfo.PowerBonus)) * (_selectedMagicInfo.MultiplierBase + (level * _selectedMagicInfo.MultiplierBonus)));
  87. }
  88. private int GetMinPower(byte level)
  89. {
  90. if (_selectedMagicInfo == null) return 0;
  91. return (int)Math.Round(((_selectedMagicInfo.MPowerBase / 4F) * (level + 1) + _selectedMagicInfo.PowerBase) * (_selectedMagicInfo.MultiplierBase + (level * _selectedMagicInfo.MultiplierBonus)));
  92. }
  93. private void InitializeComponent()
  94. {
  95. components = new System.ComponentModel.Container();
  96. MagiclistBox = new ListBox();
  97. tabControl1 = new TabControl();
  98. tabPage1 = new TabPage();
  99. label24 = new Label();
  100. label23 = new Label();
  101. textBoxName = new TextBox();
  102. lblDamageExample = new Label();
  103. lblDamageExplained = new Label();
  104. lblSelected = new Label();
  105. panel4 = new Panel();
  106. txtDmgMultBoost = new TextBox();
  107. txtDmgMultBase = new TextBox();
  108. label21 = new Label();
  109. label22 = new Label();
  110. txtDmgBonusMax = new TextBox();
  111. txtDmgBonusMin = new TextBox();
  112. label18 = new Label();
  113. label19 = new Label();
  114. txtDmgBaseMax = new TextBox();
  115. txtDmgBaseMin = new TextBox();
  116. label17 = new Label();
  117. label16 = new Label();
  118. label15 = new Label();
  119. panel3 = new Panel();
  120. label20 = new Label();
  121. txtRange = new TextBox();
  122. txtDelayReduction = new TextBox();
  123. txtDelayBase = new TextBox();
  124. label14 = new Label();
  125. label13 = new Label();
  126. label12 = new Label();
  127. panel2 = new Panel();
  128. txtMPIncrease = new TextBox();
  129. txtMPBase = new TextBox();
  130. label11 = new Label();
  131. label10 = new Label();
  132. label9 = new Label();
  133. panel1 = new Panel();
  134. txtSkillLvl3Points = new TextBox();
  135. txtSkillLvl2Points = new TextBox();
  136. txtSkillLvl1Points = new TextBox();
  137. label6 = new Label();
  138. label7 = new Label();
  139. label8 = new Label();
  140. txtSkillLvl3Req = new TextBox();
  141. txtSkillLvl2Req = new TextBox();
  142. txtSkillLvl1Req = new TextBox();
  143. label5 = new Label();
  144. label4 = new Label();
  145. label3 = new Label();
  146. label2 = new Label();
  147. txtSkillIcon = new TextBox();
  148. label1 = new Label();
  149. lblBookValid = new Label();
  150. toolTip1 = new ToolTip(components);
  151. MagicSearchBox = new TextBox();
  152. tabControl1.SuspendLayout();
  153. tabPage1.SuspendLayout();
  154. panel4.SuspendLayout();
  155. panel3.SuspendLayout();
  156. panel2.SuspendLayout();
  157. panel1.SuspendLayout();
  158. SuspendLayout();
  159. //
  160. // MagiclistBox
  161. //
  162. MagiclistBox.Dock = DockStyle.Left;
  163. MagiclistBox.FormattingEnabled = true;
  164. MagiclistBox.ItemHeight = 15;
  165. MagiclistBox.Location = new Point(0, 0);
  166. MagiclistBox.Name = "MagiclistBox";
  167. MagiclistBox.Size = new Size(225, 542);
  168. MagiclistBox.TabIndex = 0;
  169. MagiclistBox.SelectedIndexChanged += MagiclistBox_SelectedIndexChanged;
  170. //
  171. // tabControl1
  172. //
  173. tabControl1.Controls.Add(tabPage1);
  174. tabControl1.Dock = DockStyle.Fill;
  175. tabControl1.Location = new Point(225, 0);
  176. tabControl1.Name = "tabControl1";
  177. tabControl1.SelectedIndex = 0;
  178. tabControl1.Size = new Size(702, 542);
  179. tabControl1.TabIndex = 1;
  180. //
  181. // tabPage1
  182. //
  183. tabPage1.Controls.Add(label24);
  184. tabPage1.Controls.Add(label23);
  185. tabPage1.Controls.Add(textBoxName);
  186. tabPage1.Controls.Add(lblDamageExample);
  187. tabPage1.Controls.Add(lblDamageExplained);
  188. tabPage1.Controls.Add(lblSelected);
  189. tabPage1.Controls.Add(panel4);
  190. tabPage1.Controls.Add(panel3);
  191. tabPage1.Controls.Add(panel2);
  192. tabPage1.Controls.Add(panel1);
  193. tabPage1.Controls.Add(txtSkillIcon);
  194. tabPage1.Controls.Add(label1);
  195. tabPage1.Controls.Add(lblBookValid);
  196. tabPage1.Location = new Point(4, 24);
  197. tabPage1.Name = "tabPage1";
  198. tabPage1.Padding = new Padding(3);
  199. tabPage1.Size = new Size(694, 514);
  200. tabPage1.TabIndex = 0;
  201. tabPage1.Text = "Basics";
  202. tabPage1.UseVisualStyleBackColor = true;
  203. //
  204. // label24
  205. //
  206. label24.AutoSize = true;
  207. label24.Location = new Point(20, 23);
  208. label24.Name = "label24";
  209. label24.Size = new Size(63, 15);
  210. label24.TabIndex = 12;
  211. label24.Text = "SkillName:";
  212. //
  213. // label23
  214. //
  215. label23.AutoSize = true;
  216. label23.Location = new Point(181, 3);
  217. label23.Name = "label23";
  218. label23.Size = new Size(37, 15);
  219. label23.TabIndex = 11;
  220. label23.Text = "book:";
  221. //
  222. // textBoxName
  223. //
  224. textBoxName.Location = new Point(89, 18);
  225. textBoxName.Name = "textBoxName";
  226. textBoxName.Size = new Size(112, 23);
  227. textBoxName.TabIndex = 10;
  228. textBoxName.TextChanged += textBoxName_TextChanged;
  229. //
  230. // lblDamageExample
  231. //
  232. lblDamageExample.AutoSize = true;
  233. lblDamageExample.Location = new Point(11, 394);
  234. lblDamageExample.Name = "lblDamageExample";
  235. lblDamageExample.Size = new Size(98, 15);
  236. lblDamageExample.TabIndex = 0;
  237. lblDamageExample.Text = "Damage example";
  238. //
  239. // lblDamageExplained
  240. //
  241. lblDamageExplained.AutoSize = true;
  242. lblDamageExplained.Location = new Point(11, 366);
  243. lblDamageExplained.Name = "lblDamageExplained";
  244. lblDamageExplained.Size = new Size(54, 15);
  245. lblDamageExplained.TabIndex = 9;
  246. lblDamageExplained.Text = "Damage:";
  247. //
  248. // lblSelected
  249. //
  250. lblSelected.AutoSize = true;
  251. lblSelected.Location = new Point(20, 3);
  252. lblSelected.Name = "lblSelected";
  253. lblSelected.Size = new Size(80, 15);
  254. lblSelected.TabIndex = 8;
  255. lblSelected.Text = "Selected skill: ";
  256. //
  257. // panel4
  258. //
  259. panel4.BorderStyle = BorderStyle.FixedSingle;
  260. panel4.Controls.Add(txtDmgMultBoost);
  261. panel4.Controls.Add(txtDmgMultBase);
  262. panel4.Controls.Add(label21);
  263. panel4.Controls.Add(label22);
  264. panel4.Controls.Add(txtDmgBonusMax);
  265. panel4.Controls.Add(txtDmgBonusMin);
  266. panel4.Controls.Add(label18);
  267. panel4.Controls.Add(label19);
  268. panel4.Controls.Add(txtDmgBaseMax);
  269. panel4.Controls.Add(txtDmgBaseMin);
  270. panel4.Controls.Add(label17);
  271. panel4.Controls.Add(label16);
  272. panel4.Controls.Add(label15);
  273. panel4.Location = new Point(14, 166);
  274. panel4.Name = "panel4";
  275. panel4.Size = new Size(233, 191);
  276. panel4.TabIndex = 6;
  277. //
  278. // txtDmgMultBoost
  279. //
  280. txtDmgMultBoost.Location = new Point(168, 157);
  281. txtDmgMultBoost.Name = "txtDmgMultBoost";
  282. txtDmgMultBoost.Size = new Size(46, 23);
  283. txtDmgMultBoost.TabIndex = 14;
  284. toolTip1.SetToolTip(txtDmgMultBoost, "extra multiplyer apply'd for every skill level");
  285. txtDmgMultBoost.TextChanged += txtDmgMultBoost_TextChanged;
  286. //
  287. // txtDmgMultBase
  288. //
  289. txtDmgMultBase.Location = new Point(168, 131);
  290. txtDmgMultBase.Name = "txtDmgMultBase";
  291. txtDmgMultBase.Size = new Size(46, 23);
  292. txtDmgMultBase.TabIndex = 13;
  293. toolTip1.SetToolTip(txtDmgMultBase, "multiplier apply'd to total skill dmg");
  294. txtDmgMultBase.TextChanged += txtDmgMultBase_TextChanged;
  295. //
  296. // label21
  297. //
  298. label21.AutoSize = true;
  299. label21.Location = new Point(12, 160);
  300. label21.Name = "label21";
  301. label21.Size = new Size(178, 15);
  302. label21.TabIndex = 12;
  303. label21.Text = "Damage multiplyer boost/skilllvl";
  304. //
  305. // label22
  306. //
  307. label22.AutoSize = true;
  308. label22.Location = new Point(12, 134);
  309. label22.Name = "label22";
  310. label22.Size = new Size(135, 15);
  311. label22.TabIndex = 11;
  312. label22.Text = "Damage multiplyer base";
  313. //
  314. // txtDmgBonusMax
  315. //
  316. txtDmgBonusMax.Location = new Point(168, 105);
  317. txtDmgBonusMax.Name = "txtDmgBonusMax";
  318. txtDmgBonusMax.Size = new Size(46, 23);
  319. txtDmgBonusMax.TabIndex = 10;
  320. toolTip1.SetToolTip(txtDmgBonusMax, "Damage bonus at skill level '4' ");
  321. txtDmgBonusMax.TextChanged += txtDmgBonusMax_TextChanged;
  322. //
  323. // txtDmgBonusMin
  324. //
  325. txtDmgBonusMin.Location = new Point(168, 79);
  326. txtDmgBonusMin.Name = "txtDmgBonusMin";
  327. txtDmgBonusMin.Size = new Size(46, 23);
  328. txtDmgBonusMin.TabIndex = 9;
  329. toolTip1.SetToolTip(txtDmgBonusMin, "Damage bonus at skill level '4' \r\nyou will get 1/4th of this bonus for every skill level\r\nnote ingame level 0 = 1 bonus, so level 3 = max bonus (4)");
  330. txtDmgBonusMin.TextChanged += txtDmgBonusMin_TextChanged;
  331. //
  332. // label18
  333. //
  334. label18.AutoSize = true;
  335. label18.Location = new Point(12, 108);
  336. label18.Name = "label18";
  337. label18.Size = new Size(154, 15);
  338. label18.TabIndex = 8;
  339. label18.Text = "Maximum skill lvl 3 damage";
  340. //
  341. // label19
  342. //
  343. label19.AutoSize = true;
  344. label19.Location = new Point(12, 82);
  345. label19.Name = "label19";
  346. label19.Size = new Size(156, 15);
  347. label19.TabIndex = 7;
  348. label19.Text = "Minimum skill lvl 3 damage:";
  349. //
  350. // txtDmgBaseMax
  351. //
  352. txtDmgBaseMax.Location = new Point(168, 53);
  353. txtDmgBaseMax.Name = "txtDmgBaseMax";
  354. txtDmgBaseMax.Size = new Size(46, 23);
  355. txtDmgBaseMax.TabIndex = 6;
  356. toolTip1.SetToolTip(txtDmgBaseMax, "Damage at skill level 0");
  357. txtDmgBaseMax.TextChanged += txtDmgBaseMax_TextChanged;
  358. //
  359. // txtDmgBaseMin
  360. //
  361. txtDmgBaseMin.Location = new Point(168, 27);
  362. txtDmgBaseMin.Name = "txtDmgBaseMin";
  363. txtDmgBaseMin.Size = new Size(46, 23);
  364. txtDmgBaseMin.TabIndex = 5;
  365. toolTip1.SetToolTip(txtDmgBaseMin, "Damage at skill level 0");
  366. txtDmgBaseMin.TextChanged += txtDmgBaseMin_TextChanged;
  367. //
  368. // label17
  369. //
  370. label17.AutoSize = true;
  371. label17.Location = new Point(12, 56);
  372. label17.Name = "label17";
  373. label17.Size = new Size(134, 15);
  374. label17.TabIndex = 2;
  375. label17.Text = "Maximum base damage";
  376. //
  377. // label16
  378. //
  379. label16.AutoSize = true;
  380. label16.Location = new Point(12, 30);
  381. label16.Name = "label16";
  382. label16.Size = new Size(136, 15);
  383. label16.TabIndex = 1;
  384. label16.Text = "Minimum base damage:";
  385. //
  386. // label15
  387. //
  388. label15.AutoSize = true;
  389. label15.Location = new Point(5, 8);
  390. label15.Name = "label15";
  391. label15.Size = new Size(95, 15);
  392. label15.TabIndex = 0;
  393. label15.Text = "Damage settings";
  394. //
  395. // panel3
  396. //
  397. panel3.BorderStyle = BorderStyle.FixedSingle;
  398. panel3.Controls.Add(label20);
  399. panel3.Controls.Add(txtRange);
  400. panel3.Controls.Add(txtDelayReduction);
  401. panel3.Controls.Add(txtDelayBase);
  402. panel3.Controls.Add(label14);
  403. panel3.Controls.Add(label13);
  404. panel3.Controls.Add(label12);
  405. panel3.Location = new Point(253, 166);
  406. panel3.Name = "panel3";
  407. panel3.Size = new Size(216, 191);
  408. panel3.TabIndex = 5;
  409. toolTip1.SetToolTip(panel3, "delay = <base delay> - (skill level * <decrease>)");
  410. //
  411. // label20
  412. //
  413. label20.AutoSize = true;
  414. label20.Location = new Point(12, 77);
  415. label20.Name = "label20";
  416. label20.Size = new Size(103, 15);
  417. label20.TabIndex = 15;
  418. label20.Text = "Range (0 No limit)";
  419. //
  420. // txtRange
  421. //
  422. txtRange.Location = new Point(121, 74);
  423. txtRange.Name = "txtRange";
  424. txtRange.Size = new Size(79, 23);
  425. txtRange.TabIndex = 14;
  426. txtRange.TextChanged += txtRange_TextChanged;
  427. //
  428. // txtDelayReduction
  429. //
  430. txtDelayReduction.Location = new Point(121, 47);
  431. txtDelayReduction.Name = "txtDelayReduction";
  432. txtDelayReduction.Size = new Size(79, 23);
  433. txtDelayReduction.TabIndex = 13;
  434. toolTip1.SetToolTip(txtDelayReduction, "delay = <base delay> - (skill level * <decrease>)");
  435. txtDelayReduction.TextChanged += txtDelayReduction_TextChanged;
  436. //
  437. // txtDelayBase
  438. //
  439. txtDelayBase.Location = new Point(121, 22);
  440. txtDelayBase.Name = "txtDelayBase";
  441. txtDelayBase.Size = new Size(79, 23);
  442. txtDelayBase.TabIndex = 12;
  443. toolTip1.SetToolTip(txtDelayBase, "delay = <base delay> - (skill level * <decrease>)");
  444. txtDelayBase.TextChanged += txtDelayBase_TextChanged;
  445. //
  446. // label14
  447. //
  448. label14.AutoSize = true;
  449. label14.Location = new Point(12, 50);
  450. label14.Name = "label14";
  451. label14.Size = new Size(112, 15);
  452. label14.TabIndex = 2;
  453. label14.Text = "Decrease / skill level";
  454. //
  455. // label13
  456. //
  457. label13.AutoSize = true;
  458. label13.Location = new Point(12, 25);
  459. label13.Name = "label13";
  460. label13.Size = new Size(62, 15);
  461. label13.TabIndex = 1;
  462. label13.Text = "Base delay";
  463. //
  464. // label12
  465. //
  466. label12.AutoSize = true;
  467. label12.Location = new Point(12, 8);
  468. label12.Name = "label12";
  469. label12.Size = new Size(129, 15);
  470. label12.TabIndex = 0;
  471. label12.Text = "Delay (in milliseconds!)";
  472. //
  473. // panel2
  474. //
  475. panel2.BorderStyle = BorderStyle.FixedSingle;
  476. panel2.Controls.Add(txtMPIncrease);
  477. panel2.Controls.Add(txtMPBase);
  478. panel2.Controls.Add(label11);
  479. panel2.Controls.Add(label10);
  480. panel2.Controls.Add(label9);
  481. panel2.Location = new Point(253, 53);
  482. panel2.Name = "panel2";
  483. panel2.Size = new Size(216, 107);
  484. panel2.TabIndex = 4;
  485. //
  486. // txtMPIncrease
  487. //
  488. txtMPIncrease.Location = new Point(135, 47);
  489. txtMPIncrease.Name = "txtMPIncrease";
  490. txtMPIncrease.Size = new Size(46, 23);
  491. txtMPIncrease.TabIndex = 12;
  492. toolTip1.SetToolTip(txtMPIncrease, "extra amount of mp used each level");
  493. txtMPIncrease.TextChanged += txtMPIncrease_TextChanged;
  494. //
  495. // txtMPBase
  496. //
  497. txtMPBase.Location = new Point(135, 22);
  498. txtMPBase.Name = "txtMPBase";
  499. txtMPBase.Size = new Size(46, 23);
  500. txtMPBase.TabIndex = 11;
  501. toolTip1.SetToolTip(txtMPBase, "Mp usage when skill is level 0");
  502. txtMPBase.TextChanged += txtMPBase_TextChanged;
  503. //
  504. // label11
  505. //
  506. label11.AutoSize = true;
  507. label11.Location = new Point(12, 50);
  508. label11.Name = "label11";
  509. label11.Size = new Size(126, 15);
  510. label11.TabIndex = 2;
  511. label11.Text = "MP increase each level";
  512. //
  513. // label10
  514. //
  515. label10.AutoSize = true;
  516. label10.Location = new Point(12, 25);
  517. label10.Name = "label10";
  518. label10.Size = new Size(86, 15);
  519. label10.TabIndex = 1;
  520. label10.Text = "Base mp usage";
  521. //
  522. // label9
  523. //
  524. label9.AutoSize = true;
  525. label9.Location = new Point(12, 6);
  526. label9.Name = "label9";
  527. label9.Size = new Size(59, 15);
  528. label9.TabIndex = 0;
  529. label9.Text = "MP usage";
  530. //
  531. // panel1
  532. //
  533. panel1.BorderStyle = BorderStyle.FixedSingle;
  534. panel1.Controls.Add(txtSkillLvl3Points);
  535. panel1.Controls.Add(txtSkillLvl2Points);
  536. panel1.Controls.Add(txtSkillLvl1Points);
  537. panel1.Controls.Add(label6);
  538. panel1.Controls.Add(label7);
  539. panel1.Controls.Add(label8);
  540. panel1.Controls.Add(txtSkillLvl3Req);
  541. panel1.Controls.Add(txtSkillLvl2Req);
  542. panel1.Controls.Add(txtSkillLvl1Req);
  543. panel1.Controls.Add(label5);
  544. panel1.Controls.Add(label4);
  545. panel1.Controls.Add(label3);
  546. panel1.Controls.Add(label2);
  547. panel1.Location = new Point(13, 53);
  548. panel1.Name = "panel1";
  549. panel1.Size = new Size(234, 107);
  550. panel1.TabIndex = 3;
  551. //
  552. // txtSkillLvl3Points
  553. //
  554. txtSkillLvl3Points.Location = new Point(169, 72);
  555. txtSkillLvl3Points.Name = "txtSkillLvl3Points";
  556. txtSkillLvl3Points.Size = new Size(46, 23);
  557. txtSkillLvl3Points.TabIndex = 12;
  558. txtSkillLvl3Points.TextChanged += txtSkillLvl3Points_TextChanged;
  559. //
  560. // txtSkillLvl2Points
  561. //
  562. txtSkillLvl2Points.Location = new Point(169, 47);
  563. txtSkillLvl2Points.Name = "txtSkillLvl2Points";
  564. txtSkillLvl2Points.Size = new Size(46, 23);
  565. txtSkillLvl2Points.TabIndex = 11;
  566. txtSkillLvl2Points.TextChanged += txtSkillLvl2Points_TextChanged;
  567. //
  568. // txtSkillLvl1Points
  569. //
  570. txtSkillLvl1Points.Location = new Point(169, 22);
  571. txtSkillLvl1Points.Name = "txtSkillLvl1Points";
  572. txtSkillLvl1Points.Size = new Size(46, 23);
  573. txtSkillLvl1Points.TabIndex = 10;
  574. txtSkillLvl1Points.TextChanged += txtSkillLvl1Points_TextChanged;
  575. //
  576. // label6
  577. //
  578. label6.AutoSize = true;
  579. label6.Location = new Point(110, 75);
  580. label6.Name = "label6";
  581. label6.Size = new Size(64, 15);
  582. label6.TabIndex = 9;
  583. label6.Text = "Skill points";
  584. //
  585. // label7
  586. //
  587. label7.AutoSize = true;
  588. label7.Location = new Point(110, 50);
  589. label7.Name = "label7";
  590. label7.Size = new Size(64, 15);
  591. label7.TabIndex = 8;
  592. label7.Text = "Skill points";
  593. //
  594. // label8
  595. //
  596. label8.AutoSize = true;
  597. label8.Location = new Point(110, 25);
  598. label8.Name = "label8";
  599. label8.Size = new Size(64, 15);
  600. label8.TabIndex = 7;
  601. label8.Text = "Skill points";
  602. //
  603. // txtSkillLvl3Req
  604. //
  605. txtSkillLvl3Req.Location = new Point(57, 72);
  606. txtSkillLvl3Req.Name = "txtSkillLvl3Req";
  607. txtSkillLvl3Req.Size = new Size(46, 23);
  608. txtSkillLvl3Req.TabIndex = 6;
  609. txtSkillLvl3Req.TextChanged += txtSkillLvl3Req_TextChanged;
  610. //
  611. // txtSkillLvl2Req
  612. //
  613. txtSkillLvl2Req.Location = new Point(57, 47);
  614. txtSkillLvl2Req.Name = "txtSkillLvl2Req";
  615. txtSkillLvl2Req.Size = new Size(46, 23);
  616. txtSkillLvl2Req.TabIndex = 5;
  617. txtSkillLvl2Req.TextChanged += txtSkillLvl2Req_TextChanged;
  618. //
  619. // txtSkillLvl1Req
  620. //
  621. txtSkillLvl1Req.Location = new Point(57, 22);
  622. txtSkillLvl1Req.Name = "txtSkillLvl1Req";
  623. txtSkillLvl1Req.Size = new Size(46, 23);
  624. txtSkillLvl1Req.TabIndex = 4;
  625. txtSkillLvl1Req.TextChanged += txtSkillLvl1Req_TextChanged;
  626. //
  627. // label5
  628. //
  629. label5.AutoSize = true;
  630. label5.Location = new Point(13, 75);
  631. label5.Name = "label5";
  632. label5.Size = new Size(40, 15);
  633. label5.TabIndex = 3;
  634. label5.Text = "level 3";
  635. //
  636. // label4
  637. //
  638. label4.AutoSize = true;
  639. label4.Location = new Point(13, 50);
  640. label4.Name = "label4";
  641. label4.Size = new Size(40, 15);
  642. label4.TabIndex = 2;
  643. label4.Text = "level 2";
  644. //
  645. // label3
  646. //
  647. label3.AutoSize = true;
  648. label3.Location = new Point(13, 25);
  649. label3.Name = "label3";
  650. label3.Size = new Size(40, 15);
  651. label3.TabIndex = 1;
  652. label3.Text = "level 1";
  653. //
  654. // label2
  655. //
  656. label2.AutoSize = true;
  657. label2.Location = new Point(6, 6);
  658. label2.Name = "label2";
  659. label2.Size = new Size(174, 15);
  660. label2.TabIndex = 0;
  661. label2.Text = "Skill level increase requirements";
  662. //
  663. // txtSkillIcon
  664. //
  665. txtSkillIcon.Location = new Point(311, 20);
  666. txtSkillIcon.Name = "txtSkillIcon";
  667. txtSkillIcon.Size = new Size(41, 23);
  668. txtSkillIcon.TabIndex = 2;
  669. txtSkillIcon.TextChanged += txtSkillIcon_TextChanged;
  670. //
  671. // label1
  672. //
  673. label1.AutoSize = true;
  674. label1.Location = new Point(250, 23);
  675. label1.Name = "label1";
  676. label1.Size = new Size(60, 15);
  677. label1.TabIndex = 1;
  678. label1.Text = "Skill icon: ";
  679. //
  680. // lblBookValid
  681. //
  682. lblBookValid.AutoSize = true;
  683. lblBookValid.Location = new Point(222, 3);
  684. lblBookValid.Name = "lblBookValid";
  685. lblBookValid.Size = new Size(112, 15);
  686. lblBookValid.TabIndex = 0;
  687. lblBookValid.Text = "Searching for books";
  688. //
  689. // MagicSearchBox
  690. //
  691. MagicSearchBox.Location = new Point(276, 0);
  692. MagicSearchBox.Name = "MagicSearchBox";
  693. MagicSearchBox.PlaceholderText = "Search...";
  694. MagicSearchBox.Size = new Size(201, 23);
  695. MagicSearchBox.TabIndex = 2;
  696. MagicSearchBox.TextChanged += MagicSearchBox_TextChanged;
  697. //
  698. // MagicInfoForm
  699. //
  700. ClientSize = new Size(927, 542);
  701. Controls.Add(MagicSearchBox);
  702. Controls.Add(tabControl1);
  703. Controls.Add(MagiclistBox);
  704. Name = "MagicInfoForm";
  705. Text = "Magic Settings";
  706. FormClosed += MagicInfoForm_FormClosed;
  707. tabControl1.ResumeLayout(false);
  708. tabPage1.ResumeLayout(false);
  709. tabPage1.PerformLayout();
  710. panel4.ResumeLayout(false);
  711. panel4.PerformLayout();
  712. panel3.ResumeLayout(false);
  713. panel3.PerformLayout();
  714. panel2.ResumeLayout(false);
  715. panel2.PerformLayout();
  716. panel1.ResumeLayout(false);
  717. panel1.PerformLayout();
  718. ResumeLayout(false);
  719. PerformLayout();
  720. }
  721. private void MagicInfoForm_FormClosed(object sender, FormClosedEventArgs e)
  722. {
  723. //do something to save it all
  724. Envir.SaveDB();
  725. }
  726. private void MagiclistBox_SelectedIndexChanged(object sender, EventArgs e)
  727. {
  728. UpdateMagicForm();
  729. }
  730. private bool IsValid(ref byte input)
  731. {
  732. if (!byte.TryParse(ActiveControl.Text, out input))
  733. {
  734. ActiveControl.BackColor = Color.Red;
  735. return false;
  736. }
  737. return true;
  738. }
  739. private bool IsValid(ref ushort input)
  740. {
  741. if (!ushort.TryParse(ActiveControl.Text, out input))
  742. {
  743. ActiveControl.BackColor = Color.Red;
  744. return false;
  745. }
  746. return true;
  747. }
  748. private bool IsValid(ref uint input)
  749. {
  750. if (!uint.TryParse(ActiveControl.Text, out input))
  751. {
  752. ActiveControl.BackColor = Color.Red;
  753. return false;
  754. }
  755. return true;
  756. }
  757. private bool IsValid(ref float input)
  758. {
  759. if (!float.TryParse(ActiveControl.Text, out input))
  760. {
  761. ActiveControl.BackColor = Color.Red;
  762. return false;
  763. }
  764. return true;
  765. }
  766. private void txtSkillIcon_TextChanged(object sender, EventArgs e)
  767. {
  768. if (ActiveControl != sender) return;
  769. byte temp = 0;
  770. if (!IsValid(ref temp)) return;
  771. ActiveControl.BackColor = SystemColors.Window;
  772. _selectedMagicInfo.Icon = temp;
  773. }
  774. private void txtSkillLvl1Req_TextChanged(object sender, EventArgs e)
  775. {
  776. if (ActiveControl != sender) return;
  777. byte temp = 0;
  778. if (!IsValid(ref temp)) return;
  779. ActiveControl.BackColor = SystemColors.Window;
  780. _selectedMagicInfo.Level1 = temp;
  781. }
  782. private void txtSkillLvl2Req_TextChanged(object sender, EventArgs e)
  783. {
  784. if (ActiveControl != sender) return;
  785. byte temp = 0;
  786. if (!IsValid(ref temp)) return;
  787. ActiveControl.BackColor = SystemColors.Window;
  788. _selectedMagicInfo.Level2 = temp;
  789. }
  790. private void txtSkillLvl3Req_TextChanged(object sender, EventArgs e)
  791. {
  792. if (ActiveControl != sender) return;
  793. byte temp = 0;
  794. if (!IsValid(ref temp)) return;
  795. ActiveControl.BackColor = SystemColors.Window;
  796. _selectedMagicInfo.Level3 = temp;
  797. }
  798. private void txtSkillLvl1Points_TextChanged(object sender, EventArgs e)
  799. {
  800. if (ActiveControl != sender) return;
  801. ushort temp = 0;
  802. if (!IsValid(ref temp)) return;
  803. ActiveControl.BackColor = SystemColors.Window;
  804. _selectedMagicInfo.Need1 = temp;
  805. }
  806. private void txtSkillLvl2Points_TextChanged(object sender, EventArgs e)
  807. {
  808. if (ActiveControl != sender) return;
  809. ushort temp = 0;
  810. if (!IsValid(ref temp)) return;
  811. ActiveControl.BackColor = SystemColors.Window;
  812. _selectedMagicInfo.Need2 = temp;
  813. }
  814. private void txtSkillLvl3Points_TextChanged(object sender, EventArgs e)
  815. {
  816. if (ActiveControl != sender) return;
  817. ushort temp = 0;
  818. if (!IsValid(ref temp)) return;
  819. ActiveControl.BackColor = SystemColors.Window;
  820. _selectedMagicInfo.Need3 = temp;
  821. }
  822. private void txtMPBase_TextChanged(object sender, EventArgs e)
  823. {
  824. if (ActiveControl != sender) return;
  825. byte temp = 0;
  826. if (!IsValid(ref temp)) return;
  827. ActiveControl.BackColor = SystemColors.Window;
  828. _selectedMagicInfo.BaseCost = temp;
  829. }
  830. private void txtMPIncrease_TextChanged(object sender, EventArgs e)
  831. {
  832. if (ActiveControl != sender) return;
  833. byte temp = 0;
  834. if (!IsValid(ref temp)) return;
  835. ActiveControl.BackColor = SystemColors.Window;
  836. _selectedMagicInfo.LevelCost = temp;
  837. }
  838. private void txtDmgBaseMin_TextChanged(object sender, EventArgs e)
  839. {
  840. if (ActiveControl != sender) return;
  841. ushort temp = 0;
  842. if (!IsValid(ref temp)) return;
  843. ActiveControl.BackColor = SystemColors.Window;
  844. _selectedMagicInfo.PowerBase = temp;
  845. UpdateMagicForm();
  846. }
  847. private void txtDmgBaseMax_TextChanged(object sender, EventArgs e)
  848. {
  849. if (ActiveControl != sender) return;
  850. ushort temp = 0;
  851. if (!IsValid(ref temp)) return;
  852. if (temp < _selectedMagicInfo.PowerBase)
  853. {
  854. ActiveControl.BackColor = Color.Red;
  855. return;
  856. }
  857. ActiveControl.BackColor = SystemColors.Window;
  858. _selectedMagicInfo.PowerBonus = (ushort)(temp - _selectedMagicInfo.PowerBase);
  859. UpdateMagicForm();
  860. }
  861. private void txtDmgBonusMin_TextChanged(object sender, EventArgs e)
  862. {
  863. if (ActiveControl != sender) return;
  864. ushort temp = 0;
  865. if (!IsValid(ref temp)) return;
  866. ActiveControl.BackColor = SystemColors.Window;
  867. _selectedMagicInfo.MPowerBase = temp;
  868. UpdateMagicForm();
  869. }
  870. private void txtDmgBonusMax_TextChanged(object sender, EventArgs e)
  871. {
  872. if (ActiveControl != sender) return;
  873. ushort temp = 0;
  874. if (!IsValid(ref temp)) return;
  875. if (temp < _selectedMagicInfo.MPowerBase)
  876. {
  877. ActiveControl.BackColor = Color.Red;
  878. return;
  879. }
  880. ActiveControl.BackColor = SystemColors.Window;
  881. _selectedMagicInfo.MPowerBonus = (ushort)(temp - _selectedMagicInfo.MPowerBase);
  882. UpdateMagicForm();
  883. }
  884. private void txtDelayBase_TextChanged(object sender, EventArgs e)
  885. {
  886. if (ActiveControl != sender) return;
  887. uint temp = 0;
  888. if (!IsValid(ref temp)) return;
  889. ActiveControl.BackColor = SystemColors.Window;
  890. _selectedMagicInfo.DelayBase = temp;
  891. }
  892. private void txtDelayReduction_TextChanged(object sender, EventArgs e)
  893. {
  894. if (ActiveControl != sender) return;
  895. uint temp = 0;
  896. if (!IsValid(ref temp)) return;
  897. ActiveControl.BackColor = SystemColors.Window;
  898. _selectedMagicInfo.DelayReduction = temp;
  899. }
  900. private void txtRange_TextChanged(object sender, EventArgs e)
  901. {
  902. if (ActiveControl != sender) return;
  903. byte temp = 0;
  904. if (!IsValid(ref temp)) return;
  905. ActiveControl.BackColor = SystemColors.Window;
  906. _selectedMagicInfo.Range = temp;
  907. }
  908. private void txtDmgMultBase_TextChanged(object sender, EventArgs e)
  909. {
  910. if (ActiveControl != sender) return;
  911. float temp = 0;
  912. if (!IsValid(ref temp)) return;
  913. ActiveControl.BackColor = SystemColors.Window;
  914. _selectedMagicInfo.MultiplierBase = temp;
  915. UpdateMagicForm(1);
  916. }
  917. private void txtDmgMultBoost_TextChanged(object sender, EventArgs e)
  918. {
  919. if (ActiveControl != sender) return;
  920. float temp = 0;
  921. if (!IsValid(ref temp)) return;
  922. ActiveControl.BackColor = SystemColors.Window;
  923. _selectedMagicInfo.MultiplierBonus = temp;
  924. UpdateMagicForm(2);
  925. }
  926. private void textBoxName_TextChanged(object sender, EventArgs e)
  927. {
  928. if (ActiveControl != sender) return;
  929. _selectedMagicInfo.Name = ActiveControl.Text;
  930. UpdateMagicForm();
  931. if (ActiveControl.Text == "")
  932. {
  933. ActiveControl.BackColor = Color.Red;
  934. }
  935. else
  936. {
  937. ActiveControl.BackColor = SystemColors.Window;
  938. }
  939. }
  940. #region Search Box
  941. private void MagicSearchBox_TextChanged(object sender, EventArgs e)
  942. {
  943. // Show all items when the search box is cleared or placeholder is active
  944. if (string.IsNullOrWhiteSpace(MagicSearchBox.Text))
  945. {
  946. MagiclistBox.Items.Clear();
  947. foreach (var magic in Envir.MagicInfoList)
  948. {
  949. MagiclistBox.Items.Add(magic);
  950. }
  951. return;
  952. }
  953. string searchText = MagicSearchBox.Text.ToLower();
  954. MagiclistBox.Items.Clear();
  955. // Add filtered items to the list
  956. foreach (var magic in Envir.MagicInfoList)
  957. {
  958. if (!string.IsNullOrEmpty(magic.Name) && magic.Name.ToLower().Contains(searchText))
  959. {
  960. MagiclistBox.Items.Add(magic);
  961. }
  962. }
  963. }
  964. #endregion
  965. }
  966. }