2025-06-28 15:38:37 -04:00

134 lines
4.9 KiB
C#

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace PoEco.Net.DB
{
internal class ClassGen
{
public static MySqlConnection MxPoEDB()
{
MySqlConnection conn;
string myConnectionString;
myConnectionString = $"server={JSON.Settings.GetdbHost()};port={JSON.Settings.GetdbPort()};uid={JSON.Settings.GetdbUser()};pwd={JSON.Settings.GetdbPass()};database={JSON.Settings.GetdbName()};";
conn = new MySqlConnection();
conn.ConnectionString = myConnectionString;
return conn;
}
public static void AddClass(int id, string name)
{
MySqlConnection con = MxPoEDB();
string cmdText = $"INSERT INTO poeco_classes(cid, name) VALUES ('{id}','{name}')";
MySqlCommand cmd = new MySqlCommand(cmdText, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
public static void AddBase(string querycmd)
{
MySqlConnection con = MxPoEDB();
//string cmdText = $"INSERT INTO poeco_bases(bid, cid, name) VALUES ('{bid}', '{cid}', '{MySql.Data.MySqlClient.MySqlHelper.EscapeString(name)}')";
string cmdText = querycmd;
MySqlCommand cmd = new MySqlCommand(cmdText, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
public static void AddImplicit(string querycmd)
{
MySqlConnection con = MxPoEDB();
//string cmdText = $"INSERT INTO poeco_implicit(bid, imp) VALUES ('{bid}', '{MySql.Data.MySqlClient.MySqlHelper.EscapeString(imp)}')";
string cmdText = querycmd;
MySqlCommand cmd = new MySqlCommand(cmdText, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
public static void DeleteClass()
{
MySqlConnection con = MxPoEDB();
string cmdText = $"DELETE FROM poeco_classes";
MySqlCommand cmd = new MySqlCommand(cmdText, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
public static void DeleteBase()
{
MySqlConnection con = MxPoEDB();
string cmdText = $"DELETE FROM poeco_bases";
MySqlCommand cmd = new MySqlCommand(cmdText, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
public static void DeleteImplicit()
{
MySqlConnection con = MxPoEDB();
string cmdText = $"DELETE FROM poeco_implicit";
MySqlCommand cmd = new MySqlCommand(cmdText, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
public static void GenClass()
{
DeleteClass();
DeleteBase();
DeleteImplicit();
DirectoryInfo dir = new DirectoryInfo("data/lua");
int cid = 1;
int bid = 1;
StringBuilder sCommandBase = new StringBuilder("INSERT INTO poeco_bases(bid, cid, name) VALUES ");
List<string> RowsBase = new List<string>();
StringBuilder sCommandImp = new StringBuilder("INSERT INTO poeco_implicit(bid, imp) VALUES ");
List<string> RowsImp = new List<string>();
foreach (var f in dir.GetFiles())
{
var fnp = Path.GetFileNameWithoutExtension(f.FullName);
var fnpUp = char.ToUpper(f.Name[0]) + fnp.Substring(1);
AddClass(cid, fnpUp);
Utilities.Message.drawProgress(cid, dir.EnumerateFiles().Count());
foreach (var l in File.ReadLines(@"data/lua/" + f.Name))
{
int ll = l.Length;
if (l.Contains("itemBases["))
{
RowsBase.Add($"('{bid}','{cid}','{MySql.Data.MySqlClient.MySqlHelper.EscapeString(l.Split('"', '"')[1])}')");
}
if (l.Contains("\timplicit = \""))
{
RowsImp.Add($"('{bid}','{MySql.Data.MySqlClient.MySqlHelper.EscapeString(l.Split('"', '"')[1])}')");
bid++;
}
}
cid++;
}
sCommandBase.Append(string.Join(",", RowsBase));
sCommandBase.Append(";");
AddBase(sCommandBase.ToString());
sCommandImp.Append(string.Join(",", RowsImp));
sCommandImp.Append(";");
AddImplicit(sCommandImp.ToString());
sCommandBase.Clear();
sCommandImp.Clear();
}
}
}