From a6e89b589955999a3690f9b98d852b0e265a3df5 Mon Sep 17 00:00:00 2001 From: Nemesh Date: Fri, 10 Jul 2020 16:41:36 +0300 Subject: [PATCH] v.0.0.2 --- .vs/FloatToolGUI/v16/.suo | Bin 58368 -> 55808 bytes FloatToolGUI/Form1.Designer.cs | 134 +++++++++++++++++++-------------- FloatToolGUI/Form1.cs | 120 +++++++++++++++++++++++------ README.md | 1 + doc/program.png | Bin 0 -> 24774 bytes 5 files changed, 176 insertions(+), 79 deletions(-) create mode 100644 doc/program.png diff --git a/.vs/FloatToolGUI/v16/.suo b/.vs/FloatToolGUI/v16/.suo index 770d425ff11764b0b2f277f00f57cbefb534921d..7197bbafe22b796728c6a59e2e2ff5a721d91684 100644 GIT binary patch delta 2209 zcmcIlZA_b06z+X#DIafHDTQ`?td=rX7{wNvt`G(t#f?ojiV!6m#FUMUAui07WXzA1 zIWxkTl=m1VGn%Cn2HltA)lH3wB`g_#+;EHj(Jj-(A1<0WQ=%9Z&nc~YHT&U`d79_F z_nvd^&3Vo}_tZa|;D0|MP{q>EuU*D52N*d+ny2*DW1l|tCCiqfl)`>)Kf4I?Tm$dK zwF0q-0*#pk;7e#wu|(9ANwh2k^9ifG$*4+2){ z3qgJ)nK(~EZb?fN;dD8L!;_2ZjPBM@Xd7`N_JV!K_l#7cxoX6>sE(_O0H*P1oa)gxb z3S3j{JdRSjv?orN!rw}M&@a#VFMMe;@qL8&rVJ_G#rYWgQK8eH!r5uW8N^w{Im8DD z2&d@9xfC-KcpsaDUj6`^fO)S^5HTpjuFGkW2G1dcp8Ha^} zeJm*U6&z+kD<_yQ@n#IeDhcI8#LN`qsNi5h*N~JiF^N9?5EJZfRkWIj4hc~beRj0y z>;K^nzQQ>^0r!_n&H&%?p`ex%itBhTrj8%NE0df!%S8i z9M76avY{(Qy3`bPLxN*4{qwdPdz|*|gPqgYeq8g>5si%c)meuIc%vO|g_6NFu8gKW z%UCQ~Z&8&~_)#eckHYFTtw9g>aH3aJABa#iz8sAi_~${butZ`_eiIi|{Ic_n=h#S3bFf=8<(gqCR)o5E@25Pc zQb{zEC*G^=H8*q(tKm+oUhI1LjpPS;ZEioSgn9QB6{8S~@wiy1X81MtahTE6hzB2A z$4Ot@h7Au`f#T@qPW9BjOFFpudQ~u>g`WqvK+iy;*gVjq1b<7_RKTT84I)2Eh(dM& z_KXcf{n&>H6PPAGfzr@!b_KNup?z{2Hk>89*`|=yTAG?Gt@wMP-PTc2vBqh$c-!$~ zv+b~2+8xevi`DA&BFZ~D${a6&C3NhB>lA~=Gdg^J8u%&Xfs^9~@tM=ZEd9P+16;C|j=5#nOBwtbbAq;p-(dPJQcV Fe*vPO)uaFb delta 2487 zcmb_eeN0N%6v9X6Dik53b7XODGeO6~L}t;F$ilSZ zj9-|+J2N7F#K6?4bF(~W;?%4PiA1&mkpTa=sQXJpVoYcv{;_#ZKkyNz8=E)zaqm4n zAHQ?oIrrlGOyL_-^p>+Ue?&T51ak&1{%Xb|L&hBmT}!#M>( zHt9IGMC7rNnRIo1I}OkqBe4DOcFcFW2l1!9hg4>f2c* z^7WBi-_^dgl&h~Gl4R6tJo~>aH23S8YtYxy_x&P^<4m}>W=lU7nfc+v+nJUX%M`*CavN3> z(4KpSi=|*2H zWjbnxzYI^aT&dIe0*j;y-u06LHKu);#kwBRG%6IK%qo))Etr_{Bno&~+)yVFQTdUw zv(S;*Af%yKC9{$iG6e=_r);3h#}l+|=B-`eu}?yvv{?BnD!vJwDGlmEnMpKA^7sl4 zuwZoy6jk0~;7#$dlTt7-j+Y0@w02cDJ@#ZXdd@)5C~Qc(($-ynCU{Es$ocqrGxVB@ zZx{odwbq-kTX&z9(M2Uc1Ie4#!^G(TlvX{IRKh|r@lRIZSY++|9KYuxOq$%?Xl1r0JHmj4IeHK9*N4xvwzEE%)r*-}f;Wlj94d?asmBZILDyXbPMqs1Do zE0}p)rK(Q~OMv#LewL8=WGPlataZ@NQ=BoJB6m6@ISs>VYSsE#>V8e$; zuz{in9VM&`wTiU3rG}ZPW9W!Uc^jGQ*cf{bCy}l7zbaESJLgy!S(TS^#c?1 z65^(JJR63l4B(ivz?CTz_@>NoZu~2D8LO)s9=^1f;wWM`C(V#Jkq2$ITsSo89&$`D z$e2x+<|dCbeZf+NS_1dtdJFjPKPq+gxU?|lE*~5)-U9jGU~O{}W1v4#Mb!i~VudQg z6TaC~iWKu-*qkh+k^4H@7?yx^Lse@Z{tkm+FNXXvGR^xNWM8AgMd38c9g1NaA1>) M9$-rL(mSPp17Xi={{R30 diff --git a/FloatToolGUI/Form1.Designer.cs b/FloatToolGUI/Form1.Designer.cs index 9552ca6..ff4f0d1 100644 --- a/FloatToolGUI/Form1.Designer.cs +++ b/FloatToolGUI/Form1.Designer.cs @@ -41,6 +41,8 @@ private void InitializeComponent() this.label1 = new System.Windows.Forms.Label(); this.comboBox1 = new System.Windows.Forms.ComboBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); this.label7 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); @@ -51,8 +53,6 @@ private void InitializeComponent() this.button2 = new System.Windows.Forms.Button(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.textBox2 = new System.Windows.Forms.TextBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); @@ -62,16 +62,16 @@ private void InitializeComponent() // // textBox1 // - this.textBox1.Location = new System.Drawing.Point(336, 19); + this.textBox1.Location = new System.Drawing.Point(336, 20); this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(267, 20); + this.textBox1.Size = new System.Drawing.Size(267, 21); this.textBox1.TabIndex = 0; this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); // // groupBox1 // - this.groupBox1.Controls.Add(this.button1); + this.groupBox1.BackColor = System.Drawing.Color.Transparent; this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.checkBox1); this.groupBox1.Controls.Add(this.label3); @@ -81,7 +81,8 @@ private void InitializeComponent() this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.label1); this.groupBox1.Controls.Add(this.comboBox1); - this.groupBox1.Location = new System.Drawing.Point(12, 27); + this.groupBox1.Font = new System.Drawing.Font("Georgia", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.groupBox1.Location = new System.Drawing.Point(12, 12); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(610, 83); this.groupBox1.TabIndex = 3; @@ -91,29 +92,30 @@ private void InitializeComponent() // button1 // this.button1.Enabled = false; - this.button1.Location = new System.Drawing.Point(491, 52); + this.button1.Location = new System.Drawing.Point(224, 107); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(113, 21); + this.button1.Size = new System.Drawing.Size(10, 177); this.button1.TabIndex = 10; this.button1.Text = "Проверить"; this.button1.UseVisualStyleBackColor = true; + this.button1.Visible = false; // // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(221, 22); + this.label4.Location = new System.Drawing.Point(215, 23); this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(99, 13); + this.label4.Size = new System.Drawing.Size(114, 15); this.label4.TabIndex = 9; this.label4.Text = "Полное название:"; // // checkBox1 // this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(224, 54); + this.checkBox1.Location = new System.Drawing.Point(252, 52); this.checkBox1.Name = "checkBox1"; this.checkBox1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.checkBox1.Size = new System.Drawing.Size(76, 17); + this.checkBox1.Size = new System.Drawing.Size(84, 19); this.checkBox1.TabIndex = 8; this.checkBox1.Text = ":StatTrack"; this.checkBox1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -123,14 +125,15 @@ private void InitializeComponent() // label3 // this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(306, 55); + this.label3.Location = new System.Drawing.Point(362, 53); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(57, 13); + this.label3.Size = new System.Drawing.Size(70, 15); this.label3.TabIndex = 7; this.label3.Text = "Качество:"; // // comboBox3 // + this.comboBox3.Cursor = System.Windows.Forms.Cursors.Hand; this.comboBox3.FormattingEnabled = true; this.comboBox3.Items.AddRange(new object[] { "Factory New", @@ -138,41 +141,45 @@ private void InitializeComponent() "Field-Tested", "Well-Worn", "Battle-Scarred"}); - this.comboBox3.Location = new System.Drawing.Point(363, 52); + this.comboBox3.Location = new System.Drawing.Point(433, 50); this.comboBox3.Name = "comboBox3"; - this.comboBox3.Size = new System.Drawing.Size(121, 21); + this.comboBox3.Size = new System.Drawing.Size(170, 23); this.comboBox3.TabIndex = 6; + this.comboBox3.Text = "Field-Tested"; this.comboBox3.SelectedIndexChanged += new System.EventHandler(this.comboBox3_SelectedIndexChanged); // // comboBox2 // + this.comboBox2.Cursor = System.Windows.Forms.Cursors.Hand; this.comboBox2.FormattingEnabled = true; - this.comboBox2.Location = new System.Drawing.Point(78, 52); + this.comboBox2.Location = new System.Drawing.Point(105, 47); this.comboBox2.Name = "comboBox2"; - this.comboBox2.Size = new System.Drawing.Size(132, 21); + this.comboBox2.Size = new System.Drawing.Size(132, 23); this.comboBox2.TabIndex = 5; + this.comboBox2.Text = "Predator"; this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged); // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(22, 55); + this.label2.Location = new System.Drawing.Point(14, 22); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(35, 13); + this.label2.Size = new System.Drawing.Size(40, 15); this.label2.TabIndex = 4; this.label2.Text = "Скин:"; // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(6, 22); + this.label1.Location = new System.Drawing.Point(14, 51); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(69, 13); + this.label1.Size = new System.Drawing.Size(82, 15); this.label1.TabIndex = 3; this.label1.Text = "Тип оружия:"; // // comboBox1 // + this.comboBox1.Cursor = System.Windows.Forms.Cursors.Hand; this.comboBox1.FormattingEnabled = true; this.comboBox1.Items.AddRange(new object[] { "AK-47", @@ -209,10 +216,11 @@ private void InitializeComponent() "UMP-45", "USP-S", "XM1014"}); - this.comboBox1.Location = new System.Drawing.Point(78, 18); + this.comboBox1.Location = new System.Drawing.Point(72, 19); this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(132, 21); + this.comboBox1.Size = new System.Drawing.Size(132, 23); this.comboBox1.TabIndex = 2; + this.comboBox1.Text = "Nova"; this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); // // groupBox2 @@ -227,19 +235,41 @@ private void InitializeComponent() this.groupBox2.Controls.Add(this.textBox3); this.groupBox2.Controls.Add(this.progressBar1); this.groupBox2.Controls.Add(this.button2); - this.groupBox2.Location = new System.Drawing.Point(12, 117); + this.groupBox2.Font = new System.Drawing.Font("Microsoft Tai Le", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.groupBox2.ForeColor = System.Drawing.Color.Black; + this.groupBox2.Location = new System.Drawing.Point(12, 102); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(210, 182); this.groupBox2.TabIndex = 4; this.groupBox2.TabStop = false; this.groupBox2.Text = "Подбор"; // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Location = new System.Drawing.Point(100, 96); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(110, 18); + this.checkBox3.TabIndex = 9; + this.checkBox3.Text = "По возрастанию"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(7, 96); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(91, 18); + this.checkBox2.TabIndex = 8; + this.checkBox2.Text = "Сортировать"; + this.checkBox2.UseVisualStyleBackColor = true; + // // label7 // this.label7.AutoSize = true; this.label7.Location = new System.Drawing.Point(3, 73); this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(53, 13); + this.label7.Size = new System.Drawing.Size(53, 14); this.label7.TabIndex = 7; this.label7.Text = "Пропуск:"; // @@ -248,7 +278,7 @@ private void InitializeComponent() this.label6.AutoSize = true; this.label6.Location = new System.Drawing.Point(3, 47); this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(69, 13); + this.label6.Size = new System.Drawing.Size(69, 14); this.label6.TabIndex = 6; this.label6.Text = "Количество:"; // @@ -257,7 +287,7 @@ private void InitializeComponent() this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(3, 22); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(85, 13); + this.label5.Size = new System.Drawing.Size(85, 14); this.label5.TabIndex = 5; this.label5.Text = "Нужный флоат:"; // @@ -270,7 +300,7 @@ private void InitializeComponent() 0, 0}); this.numericUpDown2.Name = "numericUpDown2"; - this.numericUpDown2.Size = new System.Drawing.Size(116, 20); + this.numericUpDown2.Size = new System.Drawing.Size(116, 21); this.numericUpDown2.TabIndex = 4; this.numericUpDown2.Value = new decimal(new int[] { 20, @@ -287,7 +317,7 @@ private void InitializeComponent() 0, 0}); this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(116, 20); + this.numericUpDown1.Size = new System.Drawing.Size(116, 21); this.numericUpDown1.TabIndex = 3; this.numericUpDown1.Value = new decimal(new int[] { 100, @@ -299,14 +329,13 @@ private void InitializeComponent() // this.textBox3.Location = new System.Drawing.Point(88, 19); this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(116, 20); + this.textBox3.Size = new System.Drawing.Size(116, 21); this.textBox3.TabIndex = 2; this.textBox3.Text = "0.250000000"; // // progressBar1 // this.progressBar1.Location = new System.Drawing.Point(7, 119); - this.progressBar1.Maximum = 40; this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(197, 21); this.progressBar1.Step = 1; @@ -314,6 +343,7 @@ private void InitializeComponent() // // button2 // + this.button2.Cursor = System.Windows.Forms.Cursors.Hand; this.button2.Location = new System.Drawing.Point(6, 146); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(198, 30); @@ -325,15 +355,19 @@ private void InitializeComponent() // groupBox3 // this.groupBox3.Controls.Add(this.textBox2); - this.groupBox3.Location = new System.Drawing.Point(236, 117); + this.groupBox3.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.groupBox3.Location = new System.Drawing.Point(236, 100); this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(386, 182); + this.groupBox3.Size = new System.Drawing.Size(386, 184); this.groupBox3.TabIndex = 5; this.groupBox3.TabStop = false; this.groupBox3.Text = "Результат"; // // textBox2 // + this.textBox2.BackColor = System.Drawing.Color.Gray; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Cursor = System.Windows.Forms.Cursors.Default; this.textBox2.Location = new System.Drawing.Point(7, 19); this.textBox2.Multiline = true; this.textBox2.Name = "textBox2"; @@ -343,38 +377,24 @@ private void InitializeComponent() this.textBox2.TabIndex = 0; this.textBox2.Text = "Добро пожаловать в FloatTool!\r\nИнструмент для создания флоатов при помощи крафтов" + " CS:GO"; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Location = new System.Drawing.Point(7, 96); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(91, 17); - this.checkBox2.TabIndex = 8; - this.checkBox2.Text = "Сортировать"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.checkBox3.Location = new System.Drawing.Point(100, 96); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(110, 17); - this.checkBox3.TabIndex = 9; - this.checkBox3.Text = "По возрастанию"; - this.checkBox3.UseVisualStyleBackColor = true; + this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged); // // FloatTool // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(634, 311); + this.BackColor = System.Drawing.Color.Gray; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.ClientSize = new System.Drawing.Size(630, 287); + this.Controls.Add(this.button1); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); + this.ForeColor = System.Drawing.Color.Navy; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(650, 350); - this.MinimumSize = new System.Drawing.Size(650, 350); + this.MaximumSize = new System.Drawing.Size(650, 330); + this.MinimumSize = new System.Drawing.Size(650, 330); this.Name = "FloatTool"; this.Text = "FloatTool"; this.Load += new System.EventHandler(this.Form1_Load); diff --git a/FloatToolGUI/Form1.cs b/FloatToolGUI/Form1.cs index 6324b65..2860433 100644 --- a/FloatToolGUI/Form1.cs +++ b/FloatToolGUI/Form1.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Net; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -16,6 +17,7 @@ namespace FloatToolGUI { public partial class FloatTool : Form { + Thread thread1; public static string ToExactString(double d) { if (double.IsPositiveInfinity(d)) @@ -222,22 +224,27 @@ public void parseCraft(double[] inputs, List outputs, string want, bool //} if (flot.StartsWith(want) || ("" + flotOrigin).StartsWith(want.Replace(".", ","))) { - textBox2.Text += "Коомбинация найдена!" + Environment.NewLine; - textBox2.Text += "Возможный флоат: " + flotOrigin + Environment.NewLine; - //textBox2.Text += "IEEE754: " + flot + Environment.NewLine; - textBox2.Text += "Список флоатов: ["; - for (int i = 0; i < 10; i++) + this.Invoke((MethodInvoker)(() => { - textBox2.Text += inputs[i]; - if (i != 9) - { - textBox2.Text += ", "; - } - else + textBox2.Text += "Коомбинация найдена!" + Environment.NewLine; + textBox2.Text += "Возможный флоат: " + flotOrigin + Environment.NewLine; + textBox2.Text += "Список флоатов: ["; + for (int i = 0; i < 10; i++) { - textBox2.Text += "]" + Environment.NewLine +"======================================" + Environment.NewLine; + textBox2.Text += inputs[i]; + if (i != 9) + { + textBox2.Text += ", "; + } + else + { + textBox2.Text += "]" + Environment.NewLine + "======================================" + Environment.NewLine; + } } } + )); + + //textBox2.Text += "IEEE754: " + flot + Environment.NewLine; return; } } @@ -262,7 +269,23 @@ public FloatTool() private void Form1_Load(object sender, EventArgs e) { + thread1 = new Thread(StartCalculation); + comboBox2.Items.Clear(); + using (StreamReader r = new StreamReader("itemData.json")) + { + string json = r.ReadToEnd(); + dynamic items = JsonConvert.DeserializeObject(json); + foreach (var skin in items) + { + if (skin["name"].ToString().Split('|')[0].TrimEnd() == comboBox1.Text) + { + Console.WriteLine(skin["name"].ToString().Split('|')[1].Remove(0, 1)); + comboBox2.Items.Add(skin["name"].ToString().Split('|')[1].Remove(0, 1)); + } + } + } + updateSearchStr(); } private void textBox1_TextChanged(object sender, EventArgs e) @@ -310,22 +333,39 @@ private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) updateSearchStr(); } - private void button2_Click(object sender, EventArgs e) + private void StartCalculation() { - textBox2.Text = "Добро пожаловать в FloatTool!" + Environment.NewLine + "Инструмент для создания флоатов при помощи крафтов CS:GO"; - textBox2.Text += "Время начала процесса: "+ DateTime.Now.ToString("h:mm:ss tt"); + this.Invoke((MethodInvoker)(() => + { + textBox2.Text = "Добро пожаловать в FloatTool!" + Environment.NewLine + "Инструмент для создания флоатов при помощи крафтов CS:GO" + Environment.NewLine; + textBox2.Text += "Время начала процесса: " + DateTime.Now.ToString("hh:mm:ss tt") + Environment.NewLine; + button2.Text = "Стоп"; + } + )); + string count = "" + numericUpDown1.Value; string start = "" + numericUpDown2.Value; string wanted = textBox3.Text; string q = textBox1.Text; string url = "https://steamcommunity.com/market/listings/730/" + q + "/render/?query=&language=russian&count=" + count + "&start=" + start + "¤cy=5"; - textBox2.Text += Environment.NewLine + "Загрузка скинов с торговой площадки..." + Environment.NewLine; + this.Invoke((MethodInvoker)(() => + { + textBox2.Text += "Загрузка скинов с торговой площадки..." + Environment.NewLine; + progressBar1.Maximum = int.Parse(count); + progressBar1.Value = 0; + } + )); + List floats = new List(); using (WebClient wc = new WebClient()) { string json = wc.DownloadString(url); dynamic r = JsonConvert.DeserializeObject(json); - textBox2.Text += "Получение флоатов..." + Environment.NewLine; + this.Invoke((MethodInvoker)(() => + { + textBox2.Text += "Получение флоатов..." + Environment.NewLine; + } + )); int counter = 0; foreach (var el in r["listinginfo"]) { @@ -348,8 +388,12 @@ private void button2_Click(object sender, EventArgs e) Console.Write(""); } } - int loaded = (int)Math.Round(40 * ((float)counter / int.Parse(count))); - progressBar1.Value = loaded; + this.Invoke((MethodInvoker)(() => + { + progressBar1.Value = counter; + } + )); + } } if (checkBox2.Checked) @@ -368,7 +412,12 @@ private void button2_Click(object sender, EventArgs e) //foreach (double v in floats) { // Console.WriteLine(v); //} - textBox2.Text += "Поиск ауткамов..." + Environment.NewLine; + this.Invoke((MethodInvoker)(() => + { + textBox2.Text += "Поиск ауткамов..." + Environment.NewLine; + } + )); + string currData = getSkinData(q.Split('(')[0].TrimEnd()); List craftList = new List(); using (StreamReader r = new StreamReader("itemData.json")) @@ -388,7 +437,11 @@ private void button2_Click(object sender, EventArgs e) } } } - textBox2.Text += "Ауткамы найдены! Начинаю подбор..." + Environment.NewLine + Environment.NewLine; + this.Invoke((MethodInvoker)(() => + { + textBox2.Text += "Ауткамы найдены! Начинаю подбор..." + Environment.NewLine + Environment.NewLine; + } + )); //return; double[] pool = floats.ToArray(); int n = floats.Count; @@ -419,7 +472,30 @@ private void button2_Click(object sender, EventArgs e) // iter++; } - textBox2.Text += "Программа завершила проверку всех комбинаций!" + Environment.NewLine; + this.Invoke((MethodInvoker)(() => + { + textBox2.Text += "Программа завершила проверку всех комбинаций!" + Environment.NewLine; + } + )); + + } + + private void button2_Click(object sender, EventArgs e) + { + if(button2.Text == "Старт") { + thread1.Start(); + } + else + { + thread1.Abort(); + button2.Text = "Старт"; + } + } + + private void textBox2_TextChanged(object sender, EventArgs e) + { + textBox1.SelectionStart = textBox1.Text.Length; + textBox2.ScrollToCaret(); } } } diff --git a/README.md b/README.md index 0ddada0..12723b7 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # FloatTool-GUI Tool written on C# to calculate floats that gonna be created by trade ups in csgo +![Program Working](https://github.com/Nemeshio/FloatTool-GUI/tree/master/doc/program.png) \ No newline at end of file diff --git a/doc/program.png b/doc/program.png new file mode 100644 index 0000000000000000000000000000000000000000..ec16313c9e0c6de4bdc2d3e1a51e415c094d3fe9 GIT binary patch literal 24774 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%0AF3QH@OUx>BoJU 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 SV88U~l+={99+f_{c=K;2F5HX& literal 0 HcmV?d00001