first commit
This commit is contained in:
commit
9e08b88d81
261
.gitignore
vendored
Normal file
261
.gitignore
vendored
Normal file
@ -0,0 +1,261 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# DNX
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
#*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignoreable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
node_modules/
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
25
PoEco.Net.sln
Normal file
25
PoEco.Net.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.10.35122.118
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoEco.Net", "PoEco.Net\PoEco.Net.csproj", "{EB540AAD-F925-4C2E-913E-2891408DB5A3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{EB540AAD-F925-4C2E-913E-2891408DB5A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EB540AAD-F925-4C2E-913E-2891408DB5A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EB540AAD-F925-4C2E-913E-2891408DB5A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EB540AAD-F925-4C2E-913E-2891408DB5A3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {DF8181D7-9955-49D7-A201-362E5B3863BD}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
18
PoEco.Net/App.config
Normal file
18
PoEco.Net/App.config
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8.1" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
133
PoEco.Net/DB/ClassGen.cs
Normal file
133
PoEco.Net/DB/ClassGen.cs
Normal file
@ -0,0 +1,133 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
87
PoEco.Net/DB/Item.cs
Normal file
87
PoEco.Net/DB/Item.cs
Normal file
@ -0,0 +1,87 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.DB
|
||||
{
|
||||
internal class Item
|
||||
{
|
||||
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 bool CheckItemExistsByUIID(string uuid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_items WHERE uiid = '{uuid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows)
|
||||
{
|
||||
con.Close();
|
||||
return true;
|
||||
} else
|
||||
{
|
||||
con.Close();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static int CountItemByUID(int uid, int tid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT COUNT(*) FROM poeco_items WHERE uid = '{uid}' AND tid = '{tid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
int count = Convert.ToInt32(cmd.ExecuteScalar());
|
||||
return count;
|
||||
}
|
||||
|
||||
public static List<string> EnumerateItemByUID(int uid, int tid)
|
||||
{
|
||||
List<string> i = new List<string>();
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_items WHERE uid = '{uid}' AND tid = '{tid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
MySqlDataReader DR = cmd.ExecuteReader();
|
||||
while (DR.Read())
|
||||
{
|
||||
i.Add(DR.GetString(2));
|
||||
}
|
||||
con.Close();
|
||||
return i;
|
||||
}
|
||||
|
||||
public static void DeleteItemByUIID(int uid, int tid, string uiid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_items WHERE uid = '{uid}' AND tid = '{tid}' AND uiid = '{uiid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteAllItemsByUID(int uid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_items WHERE uid = '{uid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
}
|
||||
}
|
174
PoEco.Net/DB/Stash.cs
Normal file
174
PoEco.Net/DB/Stash.cs
Normal file
@ -0,0 +1,174 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.DB
|
||||
{
|
||||
internal class Stash
|
||||
{
|
||||
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()};;max pool size=200";
|
||||
conn = new MySqlConnection();
|
||||
conn.ConnectionString = myConnectionString;
|
||||
return conn;
|
||||
}
|
||||
|
||||
public static List<int> EnumerateTabByUID(int uid, string type)
|
||||
{
|
||||
List<int> t = new List<int>();
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_tabs WHERE uid = '{uid}' AND type = '{type}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
MySqlDataReader DR = cmd.ExecuteReader();
|
||||
while (DR.Read())
|
||||
{
|
||||
t.Add(DR.GetInt32(1));
|
||||
}
|
||||
con.Close();
|
||||
return t;
|
||||
}
|
||||
|
||||
public static int GetClassIDByBase(string ibase)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_bases WHERE name LIKE '%{MySqlHelper.EscapeString(ibase)}%'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows)
|
||||
{
|
||||
row.Read();
|
||||
int user = row.GetInt32(1);
|
||||
con.Close();
|
||||
return user;
|
||||
}
|
||||
else
|
||||
{
|
||||
con.Close();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetClassByID(int iclass)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM poeco_classes WHERE cid = '{iclass}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows)
|
||||
{
|
||||
row.Read();
|
||||
string user = row.GetString(1);
|
||||
con.Close();
|
||||
return user;
|
||||
}
|
||||
else
|
||||
{
|
||||
con.Close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static int GetBaseIDByName(string ibase)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM poeco_bases WHERE name LIKE '%{MySql.Data.MySqlClient.MySqlHelper.EscapeString(ibase)}%'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return row.GetInt32(0); } else { return 0; }
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddItemTable(int uid, int ti, string uiid, int ilvl, int cid, int bid, string name, string mods, string img, string txt, string b64, double min, double max)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"INSERT INTO poeco_items(uid, tid, uiid, ilvl, cid, bid, name, mods, img, txt, b64, min, max) VALUES ('{uid}','{ti}','{uiid}','{ilvl}','{cid}','{bid}','{name}','{mods}','{img}','{txt}','{b64}','{min}','{max}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddProfitTable(int uid, string uiid, string type, string name, int stack, double value)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"INSERT INTO poeco_profits(uid, uiid, type, name, stack, cvalue) VALUES ('{uid}','{uiid}','{type}','{name}','{stack}','{value}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetTabNameByTID(int uid, int tid, string name)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_tabs SET name = '{name}' WHERE uid = '{uid}' AND tid = '{tid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void SetTabRGBByTID(int uid, int tid, string rgb)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_tabs SET rgb = '{rgb}' WHERE uid = '{uid}' AND tid = '{tid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static bool CheckItemExistsDB(string iid)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM poeco_items WHERE uiid = '{iid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
return row.HasRows;
|
||||
}
|
||||
}
|
||||
|
||||
public static void DeleteSpecificItem(int userid, string uuid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_items WHERE uid = '{userid}' AND uiid = '{uuid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteItems(int userid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_items WHERE uid = '{userid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
}
|
||||
}
|
216
PoEco.Net/DB/User.cs
Normal file
216
PoEco.Net/DB/User.cs
Normal file
@ -0,0 +1,216 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.DB
|
||||
{
|
||||
internal class User
|
||||
{
|
||||
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 bool CheckUserExists(string user, string discriminator)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}|{discriminator}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { con.Close(); return true; } else { con.Close(); return false; }
|
||||
}
|
||||
|
||||
public static int GetUserID(string user)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return Convert.ToInt32(row["uid"]); } else { return 0; }
|
||||
}
|
||||
}
|
||||
|
||||
public static string[] GetUserNameByID(int uid)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE uid = '{uid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows)
|
||||
{
|
||||
row.Read();
|
||||
string[] user = row["account"].ToString().Split('|');
|
||||
con.Close();
|
||||
return user;
|
||||
} else
|
||||
{
|
||||
con.Close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetUserTokenByID(int uid)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE uid = '{uid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows)
|
||||
{
|
||||
row.Read();
|
||||
string user = row["token"].ToString();
|
||||
con.Close();
|
||||
return user;
|
||||
}
|
||||
else
|
||||
{
|
||||
con.Close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static int GetUserTabIndex(string user)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); con.Close(); return Convert.ToInt32(row["rareindex"]); } else { con.Close(); return 0; }
|
||||
}
|
||||
|
||||
public static int GetUserProfitTabIndex(int uid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_tabs WHERE type = 'profit'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return Convert.ToInt32(row["tid"]); } else { return 0; }
|
||||
}
|
||||
|
||||
public static int GetUserCurrencyIndex(string user, string column)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return Convert.ToInt32(row[column]); } else { return 0; }
|
||||
}
|
||||
|
||||
public static int GetUserItemCount(string user)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return Convert.ToInt32(row["itemcount"]); } else { return 0; }
|
||||
}
|
||||
|
||||
public static string GetUserStashHash(string user)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return row["stashb64"].ToString(); } else { return ""; }
|
||||
}
|
||||
|
||||
public static string GetUserToken(string user)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_user WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (row.HasRows) { row.Read(); return row["token"].ToString(); } else { return ""; }
|
||||
}
|
||||
|
||||
public static int GetTabValueByTID(int uid, int tid)
|
||||
{
|
||||
int tv = 0;
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_items WHERE uid = '{uid}' AND tid = '{tid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
MySqlDataReader DR = cmd.ExecuteReader();
|
||||
while (DR.Read())
|
||||
{
|
||||
tv = tv + DR.GetInt32(12);
|
||||
}
|
||||
return tv;
|
||||
}
|
||||
|
||||
public static int CountTabByUID(int uid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"SELECT COUNT(*) FROM poeco_tabs WHERE uid = '{uid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
int count = Convert.ToInt32(cmd.ExecuteScalar());
|
||||
con.Close();
|
||||
return count;
|
||||
}
|
||||
|
||||
public static void SetUserItemCount(int uid, int count, int index)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_tabs SET count = '{count}' WHERE uid = '{uid}' AND tid = '{index}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void SetUserStashHash(string user, string b64)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_user SET stashb64 = '{b64}' WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void SetUserTabValue(int uid, int ti, double value)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_tabs SET cvalue = '{value}' WHERE uid = '{uid}' AND tid = '{ti}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteProfits(int uid)
|
||||
{
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_profits WHERE uid = '{uid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
}
|
||||
}
|
80
PoEco.Net/JSON/Classes/Divination.cs
Normal file
80
PoEco.Net/JSON/Classes/Divination.cs
Normal file
@ -0,0 +1,80 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.JSON.Classes
|
||||
{
|
||||
internal class Divination
|
||||
{
|
||||
public class Sparkline
|
||||
{
|
||||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
public List<double?> data { get; set; }
|
||||
public double? totalChange { get; set; }
|
||||
}
|
||||
|
||||
public class LowConfidenceSparkline
|
||||
{
|
||||
public List<double?> data { get; set; }
|
||||
public double? totalChange { get; set; }
|
||||
}
|
||||
|
||||
public class ExplicitModifier
|
||||
{
|
||||
public string text { get; set; }
|
||||
public bool? optional { get; set; }
|
||||
}
|
||||
|
||||
public class LineDivination
|
||||
{
|
||||
public int? id { get; set; }
|
||||
public string name { get; set; }
|
||||
public string icon { get; set; }
|
||||
public int? mapTier { get; set; }
|
||||
public int? levelRequired { get; set; }
|
||||
public string baseType { get; set; }
|
||||
public int? stackSize { get; set; }
|
||||
public object variant { get; set; }
|
||||
public object prophecyText { get; set; }
|
||||
public object artFilename { get; set; }
|
||||
public int? links { get; set; }
|
||||
public int? itemClass { get; set; }
|
||||
public Sparkline sparkline { get; set; }
|
||||
public LowConfidenceSparkline lowConfidenceSparkline { get; set; }
|
||||
public List<object> implicitModifiers { get; set; }
|
||||
public List<ExplicitModifier> explicitModifiers { get; set; }
|
||||
public string flavourText { get; set; }
|
||||
public bool? corrupted { get; set; }
|
||||
public int? gemLevel { get; set; }
|
||||
public int? gemQuality { get; set; }
|
||||
public string itemType { get; set; }
|
||||
public double chaosValue { get; set; }
|
||||
public double exaltedValue { get; set; }
|
||||
public double divineValue { get; set; }
|
||||
public int count { get; set; }
|
||||
public string detailsId { get; set; }
|
||||
public object tradeInfo { get; set; }
|
||||
public object mapRegion { get; set; }
|
||||
public int? listingCount { get; set; }
|
||||
}
|
||||
|
||||
public class Translations
|
||||
{
|
||||
}
|
||||
|
||||
public class Language
|
||||
{
|
||||
public string name { get; set; }
|
||||
public Translations translations { get; set; }
|
||||
}
|
||||
|
||||
public class RootDivination
|
||||
{
|
||||
public List<LineDivination> lines { get; set; }
|
||||
public Language language { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
76
PoEco.Net/JSON/Currency.cs
Normal file
76
PoEco.Net/JSON/Currency.cs
Normal file
@ -0,0 +1,76 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using Newtonsoft.Json;
|
||||
using PoEco.Net.DB;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Metrics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using static PoEco.Net.JSON.Stash;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace PoEco.Net.JSON
|
||||
{
|
||||
internal class Currency
|
||||
{
|
||||
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 GenCurrencyTab(string user, int tab, string columnname, string table)
|
||||
{
|
||||
int uid = DB.User.GetUserID(user);
|
||||
double chaosValue = 0;
|
||||
string curName = "";
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.tab.{tab}.json"));
|
||||
foreach (Stash.Item i in stash.items)
|
||||
{
|
||||
if (columnname == "divvalue")
|
||||
{
|
||||
//Console.WriteLine(MySqlHelper.EscapeString(i.typeLine)+" "+GetCurrencyValueByName(MySqlHelper.EscapeString(curName), table));
|
||||
MySqlConnection cond = MxPoEDB();
|
||||
string cmdTextd = $"INSERT INTO poeco_tab_div(uid, uiid, name, stack, cvalue) VALUES ('{uid}','{i.id}','{MySqlHelper.EscapeString(i.typeLine)}','{i.stackSize}','{GetCurrencyValueByName(MySqlHelper.EscapeString(curName), table)}')";
|
||||
MySqlCommand cmdd = new MySqlCommand(cmdTextd, cond);
|
||||
cond.Open();
|
||||
cmdd.ExecuteNonQuery();
|
||||
cond.Close();
|
||||
}
|
||||
curName = i.typeLine;
|
||||
chaosValue = chaosValue + (GetCurrencyValueByName(MySqlHelper.EscapeString(curName), table) * i.stackSize);
|
||||
}
|
||||
MySqlConnection con = MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_user SET {columnname} = '{chaosValue}' WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
public static double GetCurrencyValueByName(string name, string table)
|
||||
{
|
||||
using (var con = MxPoEDB())
|
||||
{
|
||||
string cmdText = $"SELECT * FROM {table} WHERE name = '{name}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
var row = cmd.ExecuteReader();
|
||||
if (name == "Chaos Orb")
|
||||
{
|
||||
return 1.0;
|
||||
} else
|
||||
{
|
||||
if (row.HasRows) { row.Read(); return Convert.ToDouble(row["vchaos"]); } else { return 0; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
49
PoEco.Net/JSON/Settings.cs
Normal file
49
PoEco.Net/JSON/Settings.cs
Normal file
@ -0,0 +1,49 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.JSON
|
||||
{
|
||||
internal class Settings
|
||||
{
|
||||
public class SETTINGS
|
||||
{
|
||||
public string dbHost { get; set; }
|
||||
public string dbPort { get; set; }
|
||||
public string dbName { get; set; }
|
||||
public string dbUser { get; set; }
|
||||
public string dbPass { get; set; }
|
||||
public string league { get; set; }
|
||||
public bool web { get; set; }
|
||||
public string webpath { get; set; }
|
||||
}
|
||||
|
||||
public static string GetdbHost() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).dbHost;
|
||||
public static string GetdbPort() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).dbPort;
|
||||
public static string GetdbName() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).dbName;
|
||||
public static string GetdbUser() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).dbUser;
|
||||
public static string GetdbPass() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).dbPass;
|
||||
public static string GetLeague() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).league;
|
||||
public static bool GetWeb() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).web;
|
||||
public static string GetWebPath() => JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/settings.json")).webpath;
|
||||
|
||||
public static void WriteSection(string section)
|
||||
{
|
||||
SETTINGS settings = JsonConvert.DeserializeObject<SETTINGS>(File.ReadAllText("data/gui.settings.json"));
|
||||
File.WriteAllText("data/gui.settings.json", JsonConvert.SerializeObject((object)new SETTINGS()
|
||||
{
|
||||
dbHost = settings.dbHost,
|
||||
dbPort = settings.dbPort,
|
||||
dbName = settings.dbName,
|
||||
dbUser = settings.dbUser,
|
||||
dbPass = settings.dbPass,
|
||||
league = settings.league
|
||||
}, Formatting.Indented));
|
||||
}
|
||||
}
|
||||
}
|
476
PoEco.Net/JSON/Stash.cs
Normal file
476
PoEco.Net/JSON/Stash.cs
Normal file
@ -0,0 +1,476 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using MySqlX.XDevAPI.Relational;
|
||||
using Newtonsoft.Json;
|
||||
using PoEco.Net.DB;
|
||||
using PoEco.Net.Web;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Diagnostics.Metrics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.JSON
|
||||
{
|
||||
internal class Stash
|
||||
{
|
||||
public static void GenStashHash(string user)
|
||||
{
|
||||
List<string> itemsID = new List<string>();
|
||||
StringBuilder stashHash = new StringBuilder();
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.json"));
|
||||
foreach (var i in stash.items)
|
||||
{
|
||||
itemsID.Add(i.id);
|
||||
}
|
||||
stashHash.Append(string.Join(":", itemsID));
|
||||
string sb64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(stashHash.ToString()));
|
||||
DB.User.SetUserStashHash(user, sb64);
|
||||
}
|
||||
public static string GetStashHash(string user)
|
||||
{
|
||||
List<string> itemsID = new List<string>();
|
||||
StringBuilder stashHash = new StringBuilder();
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.json"));
|
||||
foreach (var i in stash.items)
|
||||
{
|
||||
itemsID.Add(i.id);
|
||||
}
|
||||
stashHash.Append(string.Join(":", itemsID));
|
||||
string sb64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(stashHash.ToString()));
|
||||
return sb64;
|
||||
}
|
||||
public static int GetUserItemCount(string user, int tid)
|
||||
{
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.rare.{tid}.json"));
|
||||
return stash.items.Count;
|
||||
}
|
||||
public static int GetUserProfitCount(string user, int tid)
|
||||
{
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.profit.{tid}.json"));
|
||||
return stash.items.Count;
|
||||
}
|
||||
public static void UpdateUserTabRGB(string user, int tabindex)
|
||||
{
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.json"));
|
||||
MySqlConnection con = DB.Stash.MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_user SET tabrgb = '{stash.tabs[tabindex].colour.r}:{stash.tabs[tabindex].colour.g}:{stash.tabs[tabindex].colour.b}' WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
public static void UpdateUserTabName(string user, int tabindex)
|
||||
{
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($"data/stash/{user}.tab{tabindex}.json"));
|
||||
MySqlConnection con = DB.Stash.MxPoEDB();
|
||||
string cmdText = $"UPDATE poeco_user SET tabname = '{stash.tabs[tabindex].n}' WHERE account = '{user}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
public static void CleanDB(string user, int userid)
|
||||
{
|
||||
MySqlConnection con = DB.Stash.MxPoEDB();
|
||||
string cmdText = $"SELECT * FROM poeco_items WHERE uid = '{userid}'";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
MySqlDataReader mdata = cmd.ExecuteReader();
|
||||
while (mdata.Read())
|
||||
{
|
||||
//if (!CheckItemExistsStash(user, mdata.GetString(6)))
|
||||
//{
|
||||
// DB.Stash.DeleteSpecificItem(userid, mdata.GetString(6));
|
||||
//}
|
||||
}
|
||||
}
|
||||
public static bool CheckItemExistsStash(string user, int tid, string uuid)
|
||||
{
|
||||
bool exists = false;
|
||||
List<string> items = new List<string>();
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($"data/stash/{user}.rare.{tid}.json"));
|
||||
foreach (var s in stash.items)
|
||||
{
|
||||
items.Add(s.id);
|
||||
}
|
||||
if (items.Contains(uuid))
|
||||
{
|
||||
exists = true;
|
||||
}
|
||||
return exists;
|
||||
}
|
||||
public static void GenItemTable(string user)
|
||||
{
|
||||
List<string> stringItemTxt = new List<string>();
|
||||
List<string> stringItemMod = new List<string>();
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.json"));
|
||||
int curitem = 1;
|
||||
double chaosValue = 0;
|
||||
int guid = 0;
|
||||
//DB.Stash.DeleteItems(DB.User.GetUserID(user));
|
||||
var tmpfiles = Directory.GetFiles("tmp");
|
||||
StringBuilder sCommand = new StringBuilder("INSERT INTO poeco_items(uid, tabindex, tabname, tabrgb, cid, bid, uiid, imod, var, img, txt, b64, ctype, min, max) VALUES ");
|
||||
List<string> Rows = new List<string>();
|
||||
int itemcount = stash.items.Count();
|
||||
foreach ( var file in tmpfiles ) { File.Delete(file); }
|
||||
foreach (Item obj in stash.items)
|
||||
{
|
||||
if (!DB.Stash.CheckItemExistsDB(obj.id))
|
||||
{
|
||||
itemcount--;
|
||||
}
|
||||
if (obj.typeLine != "" && obj.frameType == 2 && obj.identified && !DB.Stash.CheckItemExistsDB(obj.id))
|
||||
{
|
||||
//Message.drawProgress(curitem, itemcount);
|
||||
int icid = DB.Stash.GetClassIDByBase(obj.typeLine);
|
||||
string itemclass = DB.Stash.GetClassByID(icid);
|
||||
stringItemTxt.Add($"Item Class: {char.ToUpper(itemclass[0]) + itemclass.Substring(1)}");
|
||||
stringItemTxt.Add("Rarity: Rare");
|
||||
stringItemTxt.Add(obj.name ?? "");
|
||||
stringItemTxt.Add(obj.typeLine ?? "");
|
||||
stringItemTxt.Add("--------");
|
||||
if (obj.properties != null && obj.properties.Count<Property>() > 0)
|
||||
{
|
||||
foreach (Property property in obj.properties)
|
||||
{
|
||||
if (property.name == "Quality")
|
||||
stringItemTxt.Add(string.Format("Quality: {0}", property.values[0][0]));
|
||||
if (property.name == "Armour")
|
||||
stringItemTxt.Add(string.Format("Armour: {0}", property.values[0][0]));
|
||||
if (property.name == "Energy Shield")
|
||||
stringItemTxt.Add(string.Format("Energy Shield: {0}", property.values[0][0]));
|
||||
if (property.name == "Evasion Rating")
|
||||
stringItemTxt.Add(string.Format("Evasion Rating: {0}", property.values[0][0]));
|
||||
if (property.values.Count<List<object>>() == 0)
|
||||
stringItemTxt.Add(property.name ?? "");
|
||||
if (property.name == "Physical Damage")
|
||||
stringItemTxt.Add(string.Format("Physical Damage: {0}", property.values[0][0]));
|
||||
if (property.name == "Elemental Damage")
|
||||
stringItemTxt.Add(string.Format("Elemental Damage: {0}", property.values[0][0]));
|
||||
if (property.name == "Critical Strike Chance")
|
||||
stringItemTxt.Add(string.Format("Critical Strike Chance: {0}", property.values[0][0]));
|
||||
if (property.name == "Attacks per Second")
|
||||
stringItemTxt.Add(string.Format("Attacks per Second: {0}", property.values[0][0]));
|
||||
if (property.name == "Weapon Range")
|
||||
stringItemTxt.Add(string.Format("Weapon Range: {0}", property.values[0][0]));
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
}
|
||||
stringItemTxt.Add("Requirements:");
|
||||
if (obj.requirements != null)
|
||||
{
|
||||
foreach (Requirement requirement in obj.requirements)
|
||||
{
|
||||
if (requirement.name == "Level")
|
||||
stringItemTxt.Add(string.Format("Level: {0}", requirement.values[0][0]));
|
||||
if (requirement.name == "Str")
|
||||
stringItemTxt.Add(string.Format("Str: {0}", requirement.values[0][0]));
|
||||
if (requirement.name == "Dex")
|
||||
stringItemTxt.Add(string.Format("Dex: {0}", requirement.values[0][0]));
|
||||
if (requirement.name == "Int")
|
||||
stringItemTxt.Add(string.Format("Int: {0}", requirement.values[0][0]));
|
||||
}
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
if (obj.sockets != null)
|
||||
{
|
||||
List<string> stringList2 = new List<string>();
|
||||
List<string> stringList3 = new List<string>();
|
||||
List<string> stringList4 = new List<string>();
|
||||
List<string> stringList5 = new List<string>();
|
||||
List<string> stringList6 = new List<string>();
|
||||
List<string> stringList7 = new List<string>();
|
||||
foreach (Socket socket in obj.sockets)
|
||||
{
|
||||
if (socket.group == 0)
|
||||
stringList2.Add(socket.sColour.ToString());
|
||||
if (socket.group == 1)
|
||||
stringList3.Add(socket.sColour.ToString());
|
||||
if (socket.group == 2)
|
||||
stringList4.Add(socket.sColour.ToString());
|
||||
if (socket.group == 3)
|
||||
stringList5.Add(socket.sColour.ToString());
|
||||
if (socket.group == 4)
|
||||
stringList6.Add(socket.sColour.ToString());
|
||||
if (socket.group == 5)
|
||||
stringList7.Add(socket.sColour.ToString());
|
||||
}
|
||||
string str1 = string.Join("-", (IEnumerable<string>)stringList2);
|
||||
string str2 = string.Join("-", (IEnumerable<string>)stringList3);
|
||||
string str3 = string.Join("-", (IEnumerable<string>)stringList4);
|
||||
string str4 = string.Join("-", (IEnumerable<string>)stringList5);
|
||||
string str5 = string.Join("-", (IEnumerable<string>)stringList6);
|
||||
string str6 = string.Join("-", (IEnumerable<string>)stringList7);
|
||||
stringItemTxt.Add("Sockets: " + str1 + " " + str2 + " " + str3 + " " + str4 + " " + str5 + " " + str6);
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
stringItemTxt.Add(string.Format("Item Level: {0}", (object)obj.ilvl));
|
||||
stringItemTxt.Add("--------");
|
||||
if (obj.implicitMods != null)
|
||||
{
|
||||
foreach (string implicitMod in obj.implicitMods)
|
||||
{
|
||||
stringItemTxt.Add(implicitMod ?? "");
|
||||
stringItemMod.Add(implicitMod + "/n");
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
stringItemMod.Add("--------/n");
|
||||
}
|
||||
if (obj.explicitMods != null)
|
||||
{
|
||||
foreach (string explicitMod in obj.explicitMods)
|
||||
{
|
||||
stringItemTxt.Add(explicitMod ?? "");
|
||||
stringItemMod.Add(explicitMod + "/n");
|
||||
}
|
||||
}
|
||||
|
||||
File.WriteAllLines("tmp/" + obj.id + ".txt", (IEnumerable<string>)stringItemTxt);
|
||||
File.WriteAllLines("tmp/" + obj.id + ".mod.txt", (IEnumerable<string>)stringItemMod);
|
||||
string ib64 = Convert.ToBase64String(File.ReadAllBytes("tmp/" + obj.id + ".txt"));
|
||||
Web.PoEPrices.GetItemJson(obj.id, ib64);
|
||||
int tabindex = DB.User.GetUserTabIndex(user);
|
||||
Rows.Add(
|
||||
$"(" +
|
||||
$"'{DB.User.GetUserID(user)}'," +
|
||||
$"'{stash.tabs[tabindex].i}'," +
|
||||
$"'{stash.tabs[tabindex].n}'," +
|
||||
$"'{stash.tabs[tabindex].colour.r}:{stash.tabs[tabindex].colour.g}:{stash.tabs[tabindex].colour.b}'," +
|
||||
$"'{icid}'," +
|
||||
$"'{DB.Stash.GetBaseIDByName(obj.typeLine)}'," +
|
||||
$"'{obj.id}'," +
|
||||
$"'{MySql.Data.MySqlClient.MySqlHelper.EscapeString(File.ReadAllText("tmp/" + obj.id + ".mod.txt"))}'," +
|
||||
$"'{DB.Stash.GetClassByID(icid)}:{MySql.Data.MySqlClient.MySqlHelper.EscapeString(obj.typeLine)}:{MySql.Data.MySqlClient.MySqlHelper.EscapeString(obj.name)}:{obj.ilvl}'," +
|
||||
$"'{obj.icon}'," +
|
||||
$"'{MySql.Data.MySqlClient.MySqlHelper.EscapeString(File.ReadAllText("tmp/" + obj.id + ".txt"))}'," +
|
||||
$"'{ib64}'," +
|
||||
$"'{Web.PoEPrices.GetCurType(obj.id)}'," +
|
||||
$"'{Web.PoEPrices.GetMin(obj.id)}'," +
|
||||
$"'{Web.PoEPrices.GetMax(obj.id)}'" +
|
||||
$")");
|
||||
stringItemTxt.Clear();
|
||||
stringItemMod.Clear();
|
||||
curitem++;
|
||||
Utilities.Message.CMW(chaosValue.ToString(),true,1);
|
||||
}
|
||||
}
|
||||
sCommand.Append(string.Join(",", Rows));
|
||||
//Message.CMW(sCommand.ToString(),true,3);
|
||||
sCommand.Append(";");
|
||||
if (sCommand.ToString() != "INSERT INTO poeco_items(uid, tabindex, tabname, tabrgb, cid, bid, uiid, imod, var, img, txt, b64, ctype, min, max) VALUES ;")
|
||||
{
|
||||
//DB.Stash.AddItemTable(sCommand.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public class Colour
|
||||
{
|
||||
public int r { get; set; }
|
||||
|
||||
public int g { get; set; }
|
||||
|
||||
public int b { get; set; }
|
||||
}
|
||||
|
||||
public class Tab
|
||||
{
|
||||
public string n { get; set; }
|
||||
|
||||
public int i { get; set; }
|
||||
|
||||
public string id { get; set; }
|
||||
|
||||
public string type { get; set; }
|
||||
|
||||
public bool selected { get; set; }
|
||||
|
||||
public Colour colour { get; set; }
|
||||
|
||||
public string srcL { get; set; }
|
||||
|
||||
public string srcC { get; set; }
|
||||
|
||||
public string srcR { get; set; }
|
||||
}
|
||||
|
||||
public class Socket
|
||||
{
|
||||
public int group { get; set; }
|
||||
|
||||
public string attr { get; set; }
|
||||
|
||||
public string sColour { get; set; }
|
||||
}
|
||||
|
||||
public class Property
|
||||
{
|
||||
public string name { get; set; }
|
||||
|
||||
public List<List<object>> values { get; set; }
|
||||
|
||||
public int displayMode { get; set; }
|
||||
|
||||
public int? type { get; set; }
|
||||
}
|
||||
|
||||
public class Requirement
|
||||
{
|
||||
public string name { get; set; }
|
||||
|
||||
public List<List<object>> values { get; set; }
|
||||
|
||||
public int displayMode { get; set; }
|
||||
|
||||
public string suffix { get; set; }
|
||||
}
|
||||
|
||||
public class AdditionalProperty
|
||||
{
|
||||
public string name { get; set; }
|
||||
|
||||
public List<List<object>> values { get; set; }
|
||||
|
||||
public int displayMode { get; set; }
|
||||
|
||||
public double progress { get; set; }
|
||||
|
||||
public int type { get; set; }
|
||||
}
|
||||
|
||||
public class NextLevelRequirement
|
||||
{
|
||||
public string name { get; set; }
|
||||
|
||||
public List<List<object>> values { get; set; }
|
||||
|
||||
public int displayMode { get; set; }
|
||||
}
|
||||
|
||||
public class SocketedItem
|
||||
{
|
||||
public bool verified { get; set; }
|
||||
|
||||
public int w { get; set; }
|
||||
|
||||
public int h { get; set; }
|
||||
|
||||
public string icon { get; set; }
|
||||
|
||||
public bool support { get; set; }
|
||||
|
||||
public string id { get; set; }
|
||||
|
||||
public string name { get; set; }
|
||||
|
||||
public string typeLine { get; set; }
|
||||
|
||||
public bool identified { get; set; }
|
||||
|
||||
public int ilvl { get; set; }
|
||||
|
||||
public List<Property> properties { get; set; }
|
||||
|
||||
public List<Requirement> requirements { get; set; }
|
||||
|
||||
public List<AdditionalProperty> additionalProperties { get; set; }
|
||||
|
||||
public List<NextLevelRequirement> nextLevelRequirements { get; set; }
|
||||
|
||||
public string secDescrText { get; set; }
|
||||
|
||||
public List<string> explicitMods { get; set; }
|
||||
|
||||
public string descrText { get; set; }
|
||||
|
||||
public int frameType { get; set; }
|
||||
|
||||
public int socket { get; set; }
|
||||
|
||||
public string colour { get; set; }
|
||||
}
|
||||
|
||||
public class Item
|
||||
{
|
||||
public bool verified { get; set; }
|
||||
|
||||
public int w { get; set; }
|
||||
|
||||
public int h { get; set; }
|
||||
|
||||
public string icon { get; set; }
|
||||
|
||||
public int stackSize { get; set; }
|
||||
|
||||
public int maxStackSize { get; set; }
|
||||
|
||||
public string league { get; set; }
|
||||
|
||||
public string id { get; set; }
|
||||
|
||||
public List<Socket> sockets { get; set; }
|
||||
|
||||
public string name { get; set; }
|
||||
|
||||
public string typeLine { get; set; }
|
||||
|
||||
public bool identified { get; set; }
|
||||
|
||||
public int ilvl { get; set; }
|
||||
|
||||
public bool corrupted { get; set; }
|
||||
|
||||
public int frameType { get; set; }
|
||||
|
||||
public int x { get; set; }
|
||||
|
||||
public int y { get; set; }
|
||||
|
||||
public string inventoryId { get; set; }
|
||||
|
||||
public List<SocketedItem> socketedItems { get; set; }
|
||||
|
||||
public List<Property> properties { get; set; }
|
||||
|
||||
public List<Requirement> requirements { get; set; }
|
||||
|
||||
public List<string> implicitMods { get; set; }
|
||||
|
||||
public List<string> explicitMods { get; set; }
|
||||
|
||||
public List<string> craftedMods { get; set; }
|
||||
|
||||
public bool? support { get; set; }
|
||||
|
||||
public List<AdditionalProperty> additionalProperties { get; set; }
|
||||
|
||||
public string secDescrText { get; set; }
|
||||
|
||||
public string descrText { get; set; }
|
||||
|
||||
public List<string> flavourText { get; set; }
|
||||
|
||||
public bool? fractured { get; set; }
|
||||
|
||||
public List<string> fracturedMods { get; set; }
|
||||
|
||||
public List<string> enchantMods { get; set; }
|
||||
|
||||
public int? talismanTier { get; set; }
|
||||
}
|
||||
|
||||
public class StashRoot
|
||||
{
|
||||
public int numTabs { get; set; }
|
||||
|
||||
public List<Tab> tabs { get; set; }
|
||||
|
||||
public bool quadLayout { get; set; }
|
||||
|
||||
public List<Item> items { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
125
PoEco.Net/PoEco.Net.csproj
Normal file
125
PoEco.Net/PoEco.Net.csproj
Normal file
@ -0,0 +1,125 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{EB540AAD-F925-4C2E-913E-2891408DB5A3}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>PoEco.Net</RootNamespace>
|
||||
<AssemblyName>PoEco</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\BouncyCastle.Cryptography.2.2.1\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Protobuf, Version=3.21.9.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Protobuf.3.21.9\lib\net45\Google.Protobuf.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="K4os.Compression.LZ4, Version=1.3.5.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\K4os.Compression.LZ4.1.3.5\lib\net462\K4os.Compression.LZ4.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="K4os.Compression.LZ4.Streams, Version=1.3.5.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\K4os.Compression.LZ4.Streams.1.3.5\lib\net462\K4os.Compression.LZ4.Streams.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="K4os.Hash.xxHash, Version=1.0.8.0, Culture=neutral, PublicKeyToken=32cd54395057cec3, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\K4os.Hash.xxHash.1.0.8\lib\net462\K4os.Hash.xxHash.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MySql.Data, Version=8.2.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MySql.Data.8.2.0\lib\net48\MySql.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Configuration.ConfigurationManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Configuration.ConfigurationManager.4.4.1\lib\net461\System.Configuration.ConfigurationManager.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=7.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.7.0.2\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.IO.Pipelines, Version=5.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Management" />
|
||||
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Transactions" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="ZstdSharp, Version=0.7.1.0, Culture=neutral, PublicKeyToken=8d151af33a4ad5cf, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ZstdSharp.Port.0.7.1\lib\net461\ZstdSharp.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DB\ClassGen.cs" />
|
||||
<Compile Include="DB\Item.cs" />
|
||||
<Compile Include="DB\Stash.cs" />
|
||||
<Compile Include="DB\User.cs" />
|
||||
<Compile Include="JSON\Currency.cs" />
|
||||
<Compile Include="JSON\Classes\Divination.cs" />
|
||||
<Compile Include="JSON\Settings.cs" />
|
||||
<Compile Include="JSON\Stash.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utilities\Draw.cs" />
|
||||
<Compile Include="Utilities\Message.cs" />
|
||||
<Compile Include="Web\PoBLua.cs" />
|
||||
<Compile Include="Web\PoENinja.cs" />
|
||||
<Compile Include="Web\PoEPrices.cs" />
|
||||
<Compile Include="Web\Stash.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
421
PoEco.Net/Program.cs
Normal file
421
PoEco.Net/Program.cs
Normal file
@ -0,0 +1,421 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using MySqlX.XDevAPI.Relational;
|
||||
using Newtonsoft.Json;
|
||||
using PoEco.Net.DB;
|
||||
using PoEco.Net.Utilities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static PoEco.Net.JSON.Stash;
|
||||
using static PoEco.Net.Web.PoEPrices;
|
||||
|
||||
namespace PoEco.Net
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
public static string version = "1.0.0";
|
||||
static void Main(string[] args)
|
||||
{
|
||||
if (!args.Contains("--gui")) { Utilities.Message.Splash("PoEco.Net", "mikx"); }
|
||||
int a = args.Length;
|
||||
if (a < 1)
|
||||
{
|
||||
Utilities.Message.CMW("Usage: poeco.exe <args>", true, 1);
|
||||
Utilities.Message.CMW("--debug Skip parts of the logics for debuging.", true, 1);
|
||||
Utilities.Message.CMW("--lua Generate up to date classes and bases.", true, 1);
|
||||
Utilities.Message.CMW("--gen Generate up to date currencies value.", true, 1);
|
||||
Utilities.Message.CMW("--usergen-rare <userid> Generate up to date user rare tab.", true, 1);
|
||||
Utilities.Message.CMW("--usergen-tab <userid> Generate up to date user tabs.", true, 1);
|
||||
} else
|
||||
{
|
||||
if (args.Contains("--lua"))
|
||||
{
|
||||
Message.CMW("Generating the latest Classes and Bases from PoB Lua...", true, 1);
|
||||
Web.PoBLua.GetLatestLUA();
|
||||
DB.ClassGen.GenClass();
|
||||
Message.CMW("Generation done.", true, 2);
|
||||
}
|
||||
if (args.Contains("--gen"))
|
||||
{
|
||||
Message.CMW("Getting the latest PoE.Ninja Currency Data...", true, 1);
|
||||
if (File.Exists("data/ninja/currency.json")) { File.Delete("data/ninja/currency.json"); }
|
||||
Web.PoENinja.SaveData("https://poe.ninja/api/data/" + "currencyoverview?league=" + JSON.Settings.GetLeague() + "&type=Currency&language=en", "data/ninja/currency.json");
|
||||
Web.PoENinja.GenCurrency();
|
||||
Message.CMW("Getting the latest PoE.Ninja Divination Data...", true, 1);
|
||||
if (File.Exists("data/ninja/divination.json")) { File.Delete("data/ninja/divination.json"); }
|
||||
Web.PoENinja.SaveData("https://poe.ninja/api/data/" + "itemoverview?league=" + JSON.Settings.GetLeague() + "&type=DivinationCard&language=en", "data/ninja/divination.json");
|
||||
Web.PoENinja.GenDivination();
|
||||
Message.CMW("Getting the latest PoE.Ninja Essence Data...", true, 1);
|
||||
if (File.Exists("data/ninja/essence.json")) { File.Delete("data/ninja/essence.json"); }
|
||||
Web.PoENinja.SaveData("https://poe.ninja/api/data/" + "itemoverview?league=" + JSON.Settings.GetLeague() + "&type=Essence&language=en", "data/ninja/essence.json");
|
||||
Web.PoENinja.GenEssence();
|
||||
Message.CMW("Getting the latest PoE.Ninja Scarab Data...", true, 1);
|
||||
if (File.Exists("data/ninja/scarab.json")) { File.Delete("data/ninja/scarab.json"); }
|
||||
Web.PoENinja.SaveData("https://poe.ninja/api/data/" + "itemoverview?league=" + JSON.Settings.GetLeague() + "&type=Scarab&language=en", "data/ninja/scarab.json");
|
||||
Web.PoENinja.GenFragment();
|
||||
Message.CMW("Getting the latest PoE.Ninja Fossil Data...", true, 1);
|
||||
if (File.Exists("data/ninja/fossil.json")) { File.Delete("data/ninja/fossil.json"); }
|
||||
Web.PoENinja.SaveData("https://poe.ninja/api/data/" + "itemoverview?league=" + JSON.Settings.GetLeague() + "&type=Fossil&language=en", "data/ninja/fossil.json");
|
||||
Web.PoENinja.GenFossil();
|
||||
return;
|
||||
}
|
||||
if (args.Contains("--usergen-rare"))
|
||||
{
|
||||
if (args.Length > 1)
|
||||
{
|
||||
int uid = Convert.ToInt16(args[1]);
|
||||
string user = DB.User.GetUserNameByID(uid)[0];
|
||||
string discriminator = DB.User.GetUserNameByID(uid)[1];
|
||||
Message.CMW($"User \"{user}\" processing...", true, 1);
|
||||
Message.CMW($"Checking the database for user \"{user}\"...", true, 1);
|
||||
if (DB.User.CheckUserExists(user, discriminator))
|
||||
{
|
||||
Message.CMW($"User \"{user}\" exists with ID \"{uid}\".", true, 2);
|
||||
foreach (var png in Directory.GetFiles("data/tabmap")) { File.Delete(png); }
|
||||
File.Copy(@"data/StashTab_Quad.png", $@"data/tabmap/{user}#{discriminator}.png");
|
||||
if (args.Contains("--clean")) { DB.Item.DeleteAllItemsByUID(uid); }
|
||||
int uct = DB.User.CountTabByUID(uid);
|
||||
foreach (int ti in DB.Stash.EnumerateTabByUID(uid, "rare"))
|
||||
{
|
||||
Message.CMW($"Processing tab \"{ti}\" from user \"{user}\".", true, 2);
|
||||
string token = DB.User.GetUserTokenByID(uid);
|
||||
if (!args.Contains("--debug"))
|
||||
{
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={ti}&accountName={user}%23{discriminator}", $"data/stash/{user}.rare.{ti}.json");
|
||||
}
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.rare.{ti}.json"));
|
||||
int stashitemcount = JSON.Stash.GetUserItemCount(user, ti);
|
||||
int stashitemleft = stashitemcount;
|
||||
List<string> stringItemTxt = new List<string>();
|
||||
List<string> stringItemMod = new List<string>();
|
||||
List<string> Rows = new List<string>();
|
||||
StringBuilder sCommand = new StringBuilder("INSERT INTO poeco_items(uid, tabindex, tabname, tabrgb, cid, bid, uiid, imod, var, img, txt, b64, ctype, min, max) VALUES ");
|
||||
double chaosValue = 0;
|
||||
while (stashitemleft > 0)
|
||||
{
|
||||
int idel = 0;
|
||||
foreach (string i in DB.Item.EnumerateItemByUID(uid, ti))
|
||||
{
|
||||
if (!JSON.Stash.CheckItemExistsStash(user, ti, i))
|
||||
{
|
||||
DB.Item.DeleteItemByUIID(uid, ti, i);
|
||||
idel++;
|
||||
}
|
||||
}
|
||||
if (idel > 0) { Message.CMW($"Cleaned Item(s) Database. Deleted {idel} Item(s).", true, 2); }
|
||||
idel = 0;
|
||||
foreach (var i in stash.items)
|
||||
{
|
||||
if (!DB.Item.CheckItemExistsByUIID(i.id))
|
||||
{
|
||||
if (i.frameType == 2)
|
||||
{
|
||||
Message.CMW($"[{stashitemleft}][{i.id.Substring(0,5)}] Processing {i.name} {i.typeLine}.", true, 2);
|
||||
int icid = DB.Stash.GetClassIDByBase(i.typeLine);
|
||||
string itemclass = DB.Stash.GetClassByID(icid);
|
||||
stringItemTxt.Add($"Item Class: {char.ToUpper(itemclass[0]) + itemclass.Substring(1)}");
|
||||
stringItemTxt.Add("Rarity: Rare");
|
||||
stringItemTxt.Add(i.name ?? "");
|
||||
stringItemTxt.Add(i.typeLine ?? "");
|
||||
stringItemTxt.Add("--------");
|
||||
if (i.properties != null && i.properties.Count<Property>() > 0)
|
||||
{
|
||||
foreach (Property property in i.properties)
|
||||
{
|
||||
if (property.name == "Quality")
|
||||
stringItemTxt.Add(string.Format("Quality: {0}", property.values[0][0]));
|
||||
if (property.name == "Armour")
|
||||
stringItemTxt.Add(string.Format("Armour: {0}", property.values[0][0]));
|
||||
if (property.name == "Energy Shield")
|
||||
stringItemTxt.Add(string.Format("Energy Shield: {0}", property.values[0][0]));
|
||||
if (property.name == "Evasion Rating")
|
||||
stringItemTxt.Add(string.Format("Evasion Rating: {0}", property.values[0][0]));
|
||||
if (property.values.Count<List<object>>() == 0)
|
||||
stringItemTxt.Add(property.name ?? "");
|
||||
if (property.name == "Physical Damage")
|
||||
stringItemTxt.Add(string.Format("Physical Damage: {0}", property.values[0][0]));
|
||||
if (property.name == "Elemental Damage")
|
||||
stringItemTxt.Add(string.Format("Elemental Damage: {0}", property.values[0][0]));
|
||||
if (property.name == "Critical Strike Chance")
|
||||
stringItemTxt.Add(string.Format("Critical Strike Chance: {0}", property.values[0][0]));
|
||||
if (property.name == "Attacks per Second")
|
||||
stringItemTxt.Add(string.Format("Attacks per Second: {0}", property.values[0][0]));
|
||||
if (property.name == "Weapon Range")
|
||||
stringItemTxt.Add(string.Format("Weapon Range: {0}", property.values[0][0]));
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
}
|
||||
stringItemTxt.Add("Requirements:");
|
||||
if (i.requirements != null)
|
||||
{
|
||||
foreach (Requirement requirement in i.requirements)
|
||||
{
|
||||
if (requirement.name == "Level")
|
||||
stringItemTxt.Add(string.Format("Level: {0}", requirement.values[0][0]));
|
||||
if (requirement.name == "Str")
|
||||
stringItemTxt.Add(string.Format("Str: {0}", requirement.values[0][0]));
|
||||
if (requirement.name == "Dex")
|
||||
stringItemTxt.Add(string.Format("Dex: {0}", requirement.values[0][0]));
|
||||
if (requirement.name == "Int")
|
||||
stringItemTxt.Add(string.Format("Int: {0}", requirement.values[0][0]));
|
||||
}
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
if (i.sockets != null)
|
||||
{
|
||||
List<string> stringList2 = new List<string>();
|
||||
List<string> stringList3 = new List<string>();
|
||||
List<string> stringList4 = new List<string>();
|
||||
List<string> stringList5 = new List<string>();
|
||||
List<string> stringList6 = new List<string>();
|
||||
List<string> stringList7 = new List<string>();
|
||||
foreach (Socket socket in i.sockets)
|
||||
{
|
||||
if (socket.group == 0)
|
||||
stringList2.Add(socket.sColour.ToString());
|
||||
if (socket.group == 1)
|
||||
stringList3.Add(socket.sColour.ToString());
|
||||
if (socket.group == 2)
|
||||
stringList4.Add(socket.sColour.ToString());
|
||||
if (socket.group == 3)
|
||||
stringList5.Add(socket.sColour.ToString());
|
||||
if (socket.group == 4)
|
||||
stringList6.Add(socket.sColour.ToString());
|
||||
if (socket.group == 5)
|
||||
stringList7.Add(socket.sColour.ToString());
|
||||
}
|
||||
string str1 = string.Join("-", (IEnumerable<string>)stringList2);
|
||||
string str2 = string.Join("-", (IEnumerable<string>)stringList3);
|
||||
string str3 = string.Join("-", (IEnumerable<string>)stringList4);
|
||||
string str4 = string.Join("-", (IEnumerable<string>)stringList5);
|
||||
string str5 = string.Join("-", (IEnumerable<string>)stringList6);
|
||||
string str6 = string.Join("-", (IEnumerable<string>)stringList7);
|
||||
stringItemTxt.Add("Sockets: " + str1 + " " + str2 + " " + str3 + " " + str4 + " " + str5 + " " + str6);
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
stringItemTxt.Add(string.Format("Item Level: {0}", (object)i.ilvl));
|
||||
stringItemTxt.Add("--------");
|
||||
if (i.implicitMods != null)
|
||||
{
|
||||
foreach (string implicitMod in i.implicitMods)
|
||||
{
|
||||
stringItemTxt.Add(implicitMod ?? "");
|
||||
stringItemMod.Add(implicitMod + "/n");
|
||||
}
|
||||
stringItemTxt.Add("--------");
|
||||
stringItemMod.Add("--------/n");
|
||||
}
|
||||
if (i.explicitMods != null)
|
||||
{
|
||||
foreach (string explicitMod in i.explicitMods)
|
||||
{
|
||||
stringItemTxt.Add(explicitMod ?? "");
|
||||
stringItemMod.Add(explicitMod + "/n");
|
||||
}
|
||||
}
|
||||
|
||||
File.WriteAllLines("tmp/" + i.id + ".txt", (IEnumerable<string>)stringItemTxt);
|
||||
File.WriteAllLines("tmp/" + i.id + ".mod.txt", (IEnumerable<string>)stringItemMod);
|
||||
string ib64 = Convert.ToBase64String(File.ReadAllBytes("tmp/" + i.id + ".txt"));
|
||||
if (!args.Contains("--debug")) { Web.PoEPrices.GetItemJson(i.id, ib64); }
|
||||
if (File.Exists($"tmp/" + i.id + ".json"))
|
||||
{
|
||||
string type = "";
|
||||
int tabindex = DB.User.GetUserTabIndex(user);
|
||||
double min = Web.PoEPrices.GetMin(i.id);
|
||||
double max = Web.PoEPrices.GetMax(i.id);
|
||||
type = "c";
|
||||
if (JsonConvert.DeserializeObject<PoEPricesRoot>(File.ReadAllText("tmp/" + i.id + ".json")).currency == "divine")
|
||||
{
|
||||
//min = min * JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString("Divine Orb"), "poeco_currency");
|
||||
//max = max * JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString("Divine Orb"), "poeco_currency");
|
||||
type = "d";
|
||||
}
|
||||
Draw.GenQuad(i.w, i.h, i.x, i.y, i.icon, Math.Round(min, 1), Math.Round(max, 1), type, user, discriminator);
|
||||
DB.Stash.AddItemTable(uid, ti, i.id, i.ilvl, icid, DB.Stash.GetBaseIDByName(i.typeLine), i.name, MySqlHelper.EscapeString(File.ReadAllText("tmp/" + i.id + ".mod.txt")), i.icon, MySqlHelper.EscapeString(File.ReadAllText("tmp/" + i.id + ".txt")), ib64, min, max);
|
||||
chaosValue = chaosValue + max;
|
||||
stringItemTxt.Clear();
|
||||
stringItemMod.Clear();
|
||||
stashitemleft--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Message.CMW($"[{i.id}] Skipping {i.name} {i.typeLine}.", true, 3);
|
||||
stashitemleft--;
|
||||
}
|
||||
stringItemTxt.Clear();
|
||||
stringItemMod.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
stashitemleft--;
|
||||
}
|
||||
}
|
||||
int uic = DB.Item.CountItemByUID(uid, ti);
|
||||
DB.User.SetUserItemCount(uid, uic, ti);
|
||||
chaosValue = chaosValue + DB.User.GetTabValueByTID(uid, ti);
|
||||
DB.User.SetUserTabValue(uid, ti, chaosValue);
|
||||
DB.Stash.SetTabNameByTID(uid,ti, stash.tabs[ti].n);
|
||||
DB.Stash.SetTabRGBByTID(uid, ti, $"{stash.tabs[ti].colour.r}:{stash.tabs[ti].colour.g}:{stash.tabs[ti].colour.b}");
|
||||
}
|
||||
Message.CMW($"Processed all item(s) in the rare tab.", true, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (args.Contains("--usergen-pro"))
|
||||
{
|
||||
int uid = Convert.ToInt16(args[1]);
|
||||
string user = DB.User.GetUserNameByID(uid)[0];
|
||||
string discriminator = DB.User.GetUserNameByID(uid)[1];
|
||||
int proindex = DB.User.GetUserProfitTabIndex(uid);
|
||||
string token = DB.User.GetUserToken(user);
|
||||
DB.User.DeleteProfits(uid);
|
||||
if (!args.Contains("--debug"))
|
||||
{
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={proindex}&accountName={user}%23{discriminator}", $"data/stash/{user}.profit.{proindex}.json");
|
||||
}
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($"data/stash/{user}.profit.{proindex}.json"));
|
||||
|
||||
int currencyIndex = 0;
|
||||
int divIndex = 0;
|
||||
int essenceIndex = 0;
|
||||
int fragIndex = 0;
|
||||
int fossilIndex = 0;
|
||||
|
||||
foreach (var t in stash.tabs)
|
||||
{
|
||||
switch (t.type)
|
||||
{
|
||||
case "CurrencyStash":
|
||||
if (t.n.Length == 1)
|
||||
{
|
||||
currencyIndex = t.i;
|
||||
}
|
||||
break;
|
||||
case "DivinationCardStash":
|
||||
divIndex = t.i;
|
||||
break;
|
||||
case "EssenceStash":
|
||||
essenceIndex = t.i;
|
||||
break;
|
||||
case "FragmentStash":
|
||||
fragIndex = t.i;
|
||||
break;
|
||||
case "DelveStash":
|
||||
fossilIndex = t.i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
double pvalue = 0;
|
||||
int pcount = JSON.Stash.GetUserProfitCount(user, proindex);
|
||||
DB.Stash.SetTabRGBByTID(uid, proindex, $"{stash.tabs[proindex].colour.r}:{stash.tabs[proindex].colour.g}:{stash.tabs[proindex].colour.b}");
|
||||
DB.Stash.SetTabNameByTID(uid, proindex, stash.tabs[proindex].n);
|
||||
Message.CMW($"Processing {pcount} items in Profit tab...", true, 2);
|
||||
foreach (var i in stash.items)
|
||||
{
|
||||
if (i.frameType == 5) // Currency
|
||||
{
|
||||
pvalue = pvalue + (JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString(i.typeLine), "poeco_currency")*i.stackSize);
|
||||
DB.Stash.AddProfitTable(uid, i.id, "currency", MySqlHelper.EscapeString(i.typeLine), i.stackSize, (JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString(i.typeLine), "poeco_currency") * i.stackSize));
|
||||
}
|
||||
if (i.frameType == 0) // Fragment
|
||||
{
|
||||
pvalue = pvalue + (JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString(i.typeLine), "poeco_fragment") * i.stackSize);
|
||||
DB.Stash.AddProfitTable(uid, i.id, "fragment", MySqlHelper.EscapeString(i.typeLine), i.stackSize, (JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString(i.typeLine), "poeco_fragment") * i.stackSize));
|
||||
}
|
||||
if (i.frameType == 6) // Div
|
||||
{
|
||||
pvalue = pvalue + (JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString(i.typeLine), "poeco_divination") * i.stackSize);
|
||||
DB.Stash.AddProfitTable(uid, i.id, "divination", MySqlHelper.EscapeString(i.typeLine), i.stackSize, (JSON.Currency.GetCurrencyValueByName(MySqlHelper.EscapeString(i.typeLine), "poeco_divination") * i.stackSize));
|
||||
}
|
||||
}
|
||||
DB.User.SetUserItemCount(uid, pcount, proindex);
|
||||
DB.User.SetUserTabValue(uid, proindex, pvalue);
|
||||
}
|
||||
|
||||
if (args.Contains("--usergen-tab"))
|
||||
{
|
||||
int uid = Convert.ToInt16(args[1]);
|
||||
string user = DB.User.GetUserNameByID(uid)[0];
|
||||
string discriminator = DB.User.GetUserNameByID(uid)[1];
|
||||
int rareindex = DB.User.GetUserTabIndex(user);
|
||||
string token = DB.User.GetUserToken(user);
|
||||
if (!args.Contains("--debug"))
|
||||
{
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={rareindex}&accountName={user}%23{discriminator}", $"data/stash/{user}.json");
|
||||
}
|
||||
StashRoot stash = JsonConvert.DeserializeObject<StashRoot>(File.ReadAllText($@"data/stash/{user}.json"));
|
||||
int currencyIndex = 0;
|
||||
int divIndex = 0;
|
||||
int essenceIndex = 0;
|
||||
int fragIndex = 0;
|
||||
int fossilIndex = 0;
|
||||
|
||||
foreach (var t in stash.tabs)
|
||||
{
|
||||
switch (t.type)
|
||||
{
|
||||
case "CurrencyStash":
|
||||
if (t.n.Length == 1)
|
||||
{
|
||||
currencyIndex = t.i;
|
||||
}
|
||||
break;
|
||||
case "DivinationCardStash":
|
||||
divIndex = t.i;
|
||||
break;
|
||||
case "EssenceStash":
|
||||
essenceIndex = t.i;
|
||||
break;
|
||||
case "FragmentStash":
|
||||
fragIndex = t.i;
|
||||
break;
|
||||
case "DelveStash":
|
||||
fossilIndex = t.i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (DB.User.GetUserCurrencyIndex(user, "curindex") != -1)
|
||||
{
|
||||
Message.CMW($"Processing Currency tab...", true, 2);
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={currencyIndex}&accountName={user}%23{discriminator}", $"data/stash/{user}.tab.{currencyIndex}.json");
|
||||
JSON.Currency.GenCurrencyTab(user, currencyIndex, "curvalue", "poeco_currency");
|
||||
}
|
||||
if (DB.User.GetUserCurrencyIndex(user, "divindex") != -1)
|
||||
{
|
||||
Message.CMW($"Processing Divination tab...", true, 2);
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={divIndex}&accountName={user}%23{discriminator}", $"data/stash/{user}.tab.{divIndex}.json");
|
||||
JSON.Currency.GenCurrencyTab(user, divIndex, "divvalue", "poeco_divination");
|
||||
}
|
||||
if (DB.User.GetUserCurrencyIndex(user, "essindex") != -1)
|
||||
{
|
||||
Message.CMW($"Processing Essence tab...", true, 2);
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={essenceIndex}&accountName={user}%23{discriminator}", $"data/stash/{user}.tab.{essenceIndex}.json");
|
||||
JSON.Currency.GenCurrencyTab(user, essenceIndex, "essvalue", "poeco_essence");
|
||||
}
|
||||
if (DB.User.GetUserCurrencyIndex(user, "fraindex") != -1)
|
||||
{
|
||||
Message.CMW($"Processing Fragment tab...", true, 2);
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={fragIndex}&accountName={user}%23{discriminator}", $"data/stash/{user}.tab.{fragIndex}.json");
|
||||
JSON.Currency.GenCurrencyTab(user, fragIndex, "fravalue", "poeco_fragment");
|
||||
}
|
||||
if (DB.User.GetUserCurrencyIndex(user, "fosindex") != -1)
|
||||
{
|
||||
Message.CMW($"Processing Fossil tab...", true, 2);
|
||||
Web.Stash.DownloadStash(token, $"https://www.pathofexile.com/character-window/get-stash-items?league={JSON.Settings.GetLeague()}&tabs=1&tabIndex={fossilIndex}&accountName={user}%23{discriminator}", $"data/stash/{user}.tab.{fossilIndex}.json");
|
||||
JSON.Currency.GenCurrencyTab(user, fossilIndex, "fosvalue", "poeco_fossil");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
36
PoEco.Net/Properties/AssemblyInfo.cs
Normal file
36
PoEco.Net/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("PoEco.Net")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("PoEco.Net")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("eb540aad-f925-4c2e-913e-2891408db5a3")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
112
PoEco.Net/Utilities/Draw.cs
Normal file
112
PoEco.Net/Utilities/Draw.cs
Normal file
@ -0,0 +1,112 @@
|
||||
using Org.BouncyCastle.Asn1.Cms;
|
||||
using PoEco.Net.JSON;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.IO.Ports;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
using Image = System.Drawing.Image;
|
||||
|
||||
namespace PoEco.Net.Utilities
|
||||
{
|
||||
internal class Draw
|
||||
{
|
||||
public static void GenQuad(int w, int h, int x, int y, string imgUrl, double min, double max, string type, string user, string discriminator)
|
||||
{
|
||||
int fontsize = 16;
|
||||
|
||||
int calculatedW = w * 47;
|
||||
int calculatedH = h * 47;
|
||||
|
||||
int calculatedX = x * 47;
|
||||
int calculatedY = y * 47;
|
||||
|
||||
Color cborder = Color.FromArgb(61,235,52);
|
||||
|
||||
// Adjust font size by item size
|
||||
// w == item width
|
||||
// h == item height
|
||||
switch (w)
|
||||
{
|
||||
case 1:
|
||||
switch (h)
|
||||
{
|
||||
case 1:
|
||||
fontsize = 12;
|
||||
break;
|
||||
case 3:
|
||||
fontsize = 12;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
ColorConverter cc = new ColorConverter();
|
||||
Color fontc = (Color)cc.ConvertFromString("#3d3d3b");
|
||||
switch (type)
|
||||
{
|
||||
case "c":
|
||||
if (min < 10) { fontc = (Color)cc.ConvertFromString("#fc0303"); }
|
||||
if (min >= 10 && min < 20) { fontc = (Color)cc.ConvertFromString("#fc5e03"); }
|
||||
if (min >= 20 && min < 50) { fontc = (Color)cc.ConvertFromString("#fcce03"); }
|
||||
if (min >= 50) { fontc = (Color)cc.ConvertFromString("#29f705"); }
|
||||
break;
|
||||
case "d":
|
||||
fontc = (Color)cc.ConvertFromString("#29f705");
|
||||
break;
|
||||
}
|
||||
|
||||
var fontFamily = new FontFamily("Verdana");
|
||||
var vfont = new Font(fontFamily, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
|
||||
Image imageFile = Image.FromFile($@"data/tabmap/{user}#{discriminator}.png");
|
||||
Graphics newGraphics = Graphics.FromImage(imageFile);
|
||||
|
||||
Pen border = new Pen(cborder, 2);
|
||||
Pen backPen = new Pen(cborder, 0);
|
||||
SolidBrush back = new SolidBrush((Color)cc.ConvertFromString("#3d3d3b"));
|
||||
SolidBrush font = new SolidBrush(fontc);
|
||||
|
||||
Rectangle rect = new Rectangle(calculatedX, calculatedY, calculatedW, calculatedH);
|
||||
Rectangle backgroundRect = new Rectangle(calculatedX, calculatedY, calculatedW-5, calculatedH-5);
|
||||
|
||||
newGraphics.DrawRectangle(border, rect);
|
||||
newGraphics.FillRectangle(back, rect);
|
||||
newGraphics.DrawRectangle(border, rect);
|
||||
|
||||
WebClient wc = new WebClient();
|
||||
byte[] bytes = wc.DownloadData(imgUrl);
|
||||
MemoryStream ms = new MemoryStream(bytes);
|
||||
Image itemIcon = Image.FromStream(ms);
|
||||
|
||||
Bitmap bmp = new Bitmap(itemIcon.Width, itemIcon.Height);
|
||||
ColorMatrix matrix = new ColorMatrix();
|
||||
|
||||
matrix.Matrix33 = 0.3f;
|
||||
|
||||
ImageAttributes attributes = new ImageAttributes();
|
||||
|
||||
attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
|
||||
|
||||
newGraphics.DrawImage(itemIcon, new Rectangle(x * 47, y * 47, bmp.Width, bmp.Height), 0 , 0, itemIcon.Width, itemIcon.Height, GraphicsUnit.Pixel, attributes);
|
||||
|
||||
StringFormat stringFormatMin = new StringFormat();
|
||||
stringFormatMin.Alignment = StringAlignment.Center;
|
||||
stringFormatMin.LineAlignment = StringAlignment.Near;
|
||||
newGraphics.DrawString(min.ToString() + type, vfont, font, rect, stringFormatMin);
|
||||
|
||||
StringFormat stringFormatMax = new StringFormat();
|
||||
stringFormatMax.Alignment = StringAlignment.Center;
|
||||
stringFormatMax.LineAlignment = StringAlignment.Far;
|
||||
newGraphics.DrawString(max.ToString() + type, vfont, font, rect, stringFormatMax);
|
||||
|
||||
imageFile.Save($@"data/tabmap/{user}#{discriminator}.png", ImageFormat.Bmp);
|
||||
if (Settings.GetWeb()) { File.Copy($@"data/tabmap/{user}#{discriminator}.png", $@"{Settings.GetWebPath()}/{user}#{discriminator}.png", true); }
|
||||
}
|
||||
}
|
||||
}
|
151
PoEco.Net/Utilities/Message.cs
Normal file
151
PoEco.Net/Utilities/Message.cs
Normal file
@ -0,0 +1,151 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.Utilities
|
||||
{
|
||||
internal class Message
|
||||
{
|
||||
public static void CMW(string msg, bool time, int color)
|
||||
{
|
||||
DateTime now;
|
||||
string str1;
|
||||
int num;
|
||||
if (DateTime.Now.Second < 10)
|
||||
{
|
||||
now = DateTime.Now;
|
||||
str1 = string.Format("0{0}", (object)now.Second);
|
||||
}
|
||||
else
|
||||
{
|
||||
num = DateTime.Now.Second;
|
||||
str1 = num.ToString();
|
||||
}
|
||||
now = DateTime.Now;
|
||||
string str2;
|
||||
if (now.Minute < 10)
|
||||
{
|
||||
now = DateTime.Now;
|
||||
str2 = string.Format("0{0}", (object)now.Minute);
|
||||
}
|
||||
else
|
||||
{
|
||||
now = DateTime.Now;
|
||||
num = now.Minute;
|
||||
str2 = num.ToString();
|
||||
}
|
||||
now = DateTime.Now;
|
||||
string str3;
|
||||
if (now.Hour < 10)
|
||||
{
|
||||
now = DateTime.Now;
|
||||
str3 = string.Format("0{0}", (object)now.Hour);
|
||||
}
|
||||
else
|
||||
{
|
||||
now = DateTime.Now;
|
||||
num = now.Hour;
|
||||
str3 = num.ToString();
|
||||
}
|
||||
string str4 = string.Format("{0}:{1}:{2}", (object)str3, (object)str2, (object)str1);
|
||||
File.AppendAllText("mxfiltergen.logs", string.Format("[{0}] {1}", (object)str4, (object)msg) + Environment.NewLine);
|
||||
ConsoleColor consoleColor = ConsoleColor.White;
|
||||
switch (color)
|
||||
{
|
||||
case 1:
|
||||
consoleColor = ConsoleColor.Cyan;
|
||||
break;
|
||||
case 2:
|
||||
consoleColor = ConsoleColor.Green;
|
||||
break;
|
||||
case 3:
|
||||
consoleColor = ConsoleColor.Red;
|
||||
break;
|
||||
}
|
||||
if (time)
|
||||
{
|
||||
Console.ForegroundColor = consoleColor;
|
||||
Console.WriteLine(string.Format("[{0}] {1}", (object)str4, (object)msg));
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.ForegroundColor = consoleColor;
|
||||
Console.WriteLine(string.Format(""));
|
||||
}
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
}
|
||||
|
||||
public static void drawProgress(int progress, int total)
|
||||
{
|
||||
DateTime now;
|
||||
string str1;
|
||||
int num;
|
||||
if (DateTime.Now.Second < 10)
|
||||
{
|
||||
now = DateTime.Now;
|
||||
str1 = string.Format("0{0}", (object)now.Second);
|
||||
}
|
||||
else
|
||||
{
|
||||
num = DateTime.Now.Second;
|
||||
str1 = num.ToString();
|
||||
}
|
||||
now = DateTime.Now;
|
||||
string str2;
|
||||
if (now.Minute < 10)
|
||||
{
|
||||
now = DateTime.Now;
|
||||
str2 = string.Format("0{0}", (object)now.Minute);
|
||||
}
|
||||
else
|
||||
{
|
||||
now = DateTime.Now;
|
||||
num = now.Minute;
|
||||
str2 = num.ToString();
|
||||
}
|
||||
now = DateTime.Now;
|
||||
string str3;
|
||||
if (now.Hour < 10)
|
||||
{
|
||||
now = DateTime.Now;
|
||||
str3 = string.Format("0{0}", (object)now.Hour);
|
||||
}
|
||||
else
|
||||
{
|
||||
now = DateTime.Now;
|
||||
num = now.Hour;
|
||||
str3 = num.ToString();
|
||||
}
|
||||
string str4 = string.Format("[{0}] [", (object)string.Format("{0}:{1}:{2}", (object)str3, (object)str2, (object)str1));
|
||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||
if (progress == 1)
|
||||
{
|
||||
Console.Write(str4);
|
||||
Console.CursorLeft = total + str4.Length;
|
||||
Console.Write("]");
|
||||
}
|
||||
Console.CursorLeft = progress + str4.Length - 1;
|
||||
Console.Write("#");
|
||||
Console.CursorLeft = str4.Length + total + 2;
|
||||
Console.Write(string.Format("{0}/{1}", (object)progress, (object)total));
|
||||
if (progress != total)
|
||||
return;
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
public static void Splash(string progname, string dev)
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine($"#### {progname}");
|
||||
Console.WriteLine(string.Format("#### VERSION: {0}", (object)Program.version));
|
||||
Console.WriteLine($"#### DEV: {dev}");
|
||||
Console.WriteLine("#### POWERED BY: poe.ninja / poeprices.info");
|
||||
Console.WriteLine("");
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
}
|
||||
}
|
||||
}
|
30
PoEco.Net/Web/PoBLua.cs
Normal file
30
PoEco.Net/Web/PoBLua.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.Web
|
||||
{
|
||||
internal class PoBLua
|
||||
{
|
||||
public class LuaRoot
|
||||
{
|
||||
public List<string> lua { get; set; }
|
||||
}
|
||||
public static void GetLatestLUA()
|
||||
{
|
||||
if (!Directory.Exists(@"data\lua")) { Directory.CreateDirectory(@"data\lua"); }
|
||||
WebClient wc = new WebClient();
|
||||
LuaRoot lr = JsonConvert.DeserializeObject<LuaRoot>(File.ReadAllText(@"data\lua.json"));
|
||||
foreach (var l in lr.lua)
|
||||
{
|
||||
if(File.Exists($@"data\lua\{l}.lua")) { File.Delete($@"data\lua\{l}.lua"); }
|
||||
wc.DownloadFile($"https://github.com/PathOfBuildingCommunity/PathOfBuilding/raw/dev/src/Data/Bases/{l}.lua", $@"data\lua\{l}.lua");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
283
PoEco.Net/Web/PoENinja.cs
Normal file
283
PoEco.Net/Web/PoENinja.cs
Normal file
@ -0,0 +1,283 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using Newtonsoft.Json;
|
||||
using PoEco.Net.DB;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static PoEco.Net.JSON.Classes.Divination;
|
||||
|
||||
namespace PoEco.Net.Web
|
||||
{
|
||||
internal class PoENinja
|
||||
{
|
||||
public static void SaveData(string url, string path)
|
||||
{
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.Encoding = Encoding.UTF8;
|
||||
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
|
||||
try
|
||||
{
|
||||
Uri address = new Uri(url);
|
||||
string contents = webClient.DownloadString(address);
|
||||
System.IO.File.AppendAllText(path, contents, Encoding.UTF8);
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message, true, 3);
|
||||
Utilities.Message.CMW("URL: " + url, true, 3);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message, true, 3);
|
||||
}
|
||||
}
|
||||
|
||||
public static void GenCurrency()
|
||||
{
|
||||
DeleteCurrencies();
|
||||
int curID = 1;
|
||||
double divineValue = 0;
|
||||
string cmdText = "";
|
||||
RootCurrency rcur = JsonConvert.DeserializeObject<RootCurrency>(File.ReadAllText("data/ninja/currency.json", Encoding.UTF8));
|
||||
foreach (var c in rcur.lines)
|
||||
{
|
||||
if (c.currencyTypeName == "Divine Orb") { divineValue = Convert.ToInt32(Math.Round(c.chaosEquivalent)); }
|
||||
}
|
||||
foreach (LineCurrency line in JsonConvert.DeserializeObject<RootCurrency>(File.ReadAllText("data/ninja/currency.json", Encoding.UTF8)).lines)
|
||||
{
|
||||
string curType = line.currencyTypeName;
|
||||
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
cmdText = $"INSERT INTO poeco_currency(curid,name,vchaos,vdivine) VALUES ('{curID}','{MySql.Data.MySqlClient.MySqlHelper.EscapeString(line.currencyTypeName)}','{Math.Round(line.chaosEquivalent,10)}','{Math.Round(line.chaosEquivalent / divineValue, 2, MidpointRounding.AwayFromZero)}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
curID++;
|
||||
}
|
||||
}
|
||||
|
||||
public static void GenDivination()
|
||||
{
|
||||
DeleteDivinations();
|
||||
int divID = 1;
|
||||
string cmdText = "";
|
||||
RootCurrency rcur = JsonConvert.DeserializeObject<RootCurrency>(File.ReadAllText("data/ninja/divination.json", Encoding.UTF8));
|
||||
foreach (LineDivination line in JsonConvert.DeserializeObject<RootDivination>(File.ReadAllText("data/ninja/divination.json", Encoding.UTF8)).lines)
|
||||
{
|
||||
string curType = line.name;
|
||||
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
cmdText = $"INSERT INTO poeco_divination(divid,name,vchaos,vdivine) VALUES ('{divID}','{MySqlHelper.EscapeString(line.name)}','{Math.Round(line.chaosValue,2)}','{line.divineValue}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
divID++;
|
||||
}
|
||||
}
|
||||
|
||||
public static void GenEssence()
|
||||
{
|
||||
DeleteEssences();
|
||||
int divID = 1;
|
||||
string cmdText = "";
|
||||
RootCurrency rcur = JsonConvert.DeserializeObject<RootCurrency>(File.ReadAllText("data/ninja/essence.json", Encoding.UTF8));
|
||||
foreach (LineDivination line in JsonConvert.DeserializeObject<RootDivination>(File.ReadAllText("data/ninja/essence.json", Encoding.UTF8)).lines)
|
||||
{
|
||||
string curType = line.name;
|
||||
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
cmdText = $"INSERT INTO poeco_essence(essid,name,vchaos,vdivine) VALUES ('{divID}','{MySqlHelper.EscapeString(line.name)}','{Math.Round(line.chaosValue)}','{line.divineValue}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
divID++;
|
||||
}
|
||||
}
|
||||
|
||||
public static void GenFragment()
|
||||
{
|
||||
DeleteFragments();
|
||||
int divID = 1;
|
||||
string cmdText = "";
|
||||
RootCurrency rcur = JsonConvert.DeserializeObject<RootCurrency>(File.ReadAllText("data/ninja/scarab.json", Encoding.UTF8));
|
||||
foreach (LineDivination line in JsonConvert.DeserializeObject<RootDivination>(File.ReadAllText("data/ninja/scarab.json", Encoding.UTF8)).lines)
|
||||
{
|
||||
string curType = line.name;
|
||||
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
cmdText = $"INSERT INTO poeco_fragment(fraid,name,vchaos,vdivine) VALUES ('{divID}','{MySqlHelper.EscapeString(line.name)}','{Math.Round(line.chaosValue)}','{line.divineValue}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
divID++;
|
||||
}
|
||||
}
|
||||
|
||||
public static void GenFossil()
|
||||
{
|
||||
DeleteFossils();
|
||||
int divID = 1;
|
||||
string cmdText = "";
|
||||
RootCurrency rcur = JsonConvert.DeserializeObject<RootCurrency>(File.ReadAllText("data/ninja/fossil.json", Encoding.UTF8));
|
||||
foreach (LineDivination line in JsonConvert.DeserializeObject<RootDivination>(File.ReadAllText("data/ninja/fossil.json", Encoding.UTF8)).lines)
|
||||
{
|
||||
string curType = line.name;
|
||||
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
cmdText = $"INSERT INTO poeco_fossil(fosid,name,vchaos,vdivine) VALUES ('{divID}','{MySqlHelper.EscapeString(line.name)}','{Math.Round(line.chaosValue)}','{line.divineValue}')";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
divID++;
|
||||
}
|
||||
}
|
||||
|
||||
public static void DeleteCurrencies()
|
||||
{
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_currency";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteDivinations()
|
||||
{
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_divination";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteEssences()
|
||||
{
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_essence";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteFragments()
|
||||
{
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_fragment";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
|
||||
public static void DeleteFossils()
|
||||
{
|
||||
MySqlConnection con = DB.User.MxPoEDB();
|
||||
string cmdText = $"DELETE FROM poeco_fossil";
|
||||
MySqlCommand cmd = new MySqlCommand(cmdText, con);
|
||||
con.Open();
|
||||
cmd.ExecuteNonQuery();
|
||||
con.Close();
|
||||
}
|
||||
}
|
||||
|
||||
public class CurrencyDetail
|
||||
{
|
||||
public int id { get; set; }
|
||||
public string icon { get; set; }
|
||||
public string name { get; set; }
|
||||
public string tradeId { get; set; }
|
||||
}
|
||||
|
||||
public class LanguageCurrency
|
||||
{
|
||||
public string name { get; set; }
|
||||
public TranslationsCurrency translations { get; set; }
|
||||
}
|
||||
|
||||
public class LineCurrency
|
||||
{
|
||||
public string currencyTypeName { get; set; }
|
||||
public Pay pay { get; set; }
|
||||
public Receive receive { get; set; }
|
||||
public double chaosEquivalent { get; set; }
|
||||
public LowConfidencePaySparkLine lowConfidencePaySparkLine { get; set; }
|
||||
public LowConfidenceReceiveSparkLine lowConfidenceReceiveSparkLine { get; set; }
|
||||
public string detailsId { get; set; }
|
||||
}
|
||||
|
||||
public class LowConfidencePaySparkLine
|
||||
{
|
||||
public List<object> data { get; set; }
|
||||
public double totalChange { get; set; }
|
||||
}
|
||||
|
||||
public class LowConfidenceReceiveSparkLine
|
||||
{
|
||||
public List<double?> data { get; set; }
|
||||
public double totalChange { get; set; }
|
||||
}
|
||||
|
||||
public class Pay
|
||||
{
|
||||
public int id { get; set; }
|
||||
public int league_id { get; set; }
|
||||
public int pay_currency_id { get; set; }
|
||||
public int get_currency_id { get; set; }
|
||||
public DateTime sample_time_utc { get; set; }
|
||||
public int count { get; set; }
|
||||
public double value { get; set; }
|
||||
public int data_point_count { get; set; }
|
||||
public bool includes_secondary { get; set; }
|
||||
public int listing_count { get; set; }
|
||||
}
|
||||
|
||||
public class PaySparkLine
|
||||
{
|
||||
public List<object> data { get; set; }
|
||||
public double totalChange { get; set; }
|
||||
}
|
||||
|
||||
public class Receive
|
||||
{
|
||||
public int id { get; set; }
|
||||
public int league_id { get; set; }
|
||||
public int pay_currency_id { get; set; }
|
||||
public int get_currency_id { get; set; }
|
||||
public DateTime sample_time_utc { get; set; }
|
||||
public int count { get; set; }
|
||||
public double value { get; set; }
|
||||
public int data_point_count { get; set; }
|
||||
public bool includes_secondary { get; set; }
|
||||
public int listing_count { get; set; }
|
||||
}
|
||||
|
||||
public class ReceiveSparkLine
|
||||
{
|
||||
public List<double> data { get; set; }
|
||||
public double totalChange { get; set; }
|
||||
}
|
||||
|
||||
public class RootCurrency
|
||||
{
|
||||
public List<LineCurrency> lines { get; set; }
|
||||
public List<CurrencyDetail> currencyDetails { get; set; }
|
||||
public LanguageCurrency language { get; set; }
|
||||
}
|
||||
|
||||
public class TranslationsCurrency
|
||||
{
|
||||
}
|
||||
}
|
||||
|
65
PoEco.Net/Web/PoEPrices.cs
Normal file
65
PoEco.Net/Web/PoEPrices.cs
Normal file
@ -0,0 +1,65 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.Web
|
||||
{
|
||||
internal class PoEPrices
|
||||
{
|
||||
public static void GetItemJson(string iid, string b64)
|
||||
{
|
||||
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
|
||||
string url = $"https://www.poeprices.info/api?l={JSON.Settings.GetLeague()}&i={b64}";
|
||||
WebClient webClient = new WebClient();
|
||||
try
|
||||
{
|
||||
webClient.DownloadFile(url, "tmp/" + iid + ".json");
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
if (ex.Message.Contains("The remote server returned an error: (504) Gateway Time-out."))
|
||||
{
|
||||
Utilities.Message.CMW("Failed. Retrying...", true, 3);
|
||||
GetItemJson(iid, b64);
|
||||
}
|
||||
//Utilities.Message.CMW(ex.Message, true, 3);
|
||||
//Utilities.Message.CMW("URL: " + url, true, 3);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message, true, 3);
|
||||
}
|
||||
}
|
||||
|
||||
public static double GetMin(string iid)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<PoEPricesRoot>(File.ReadAllText("tmp/" + iid + ".json")).min;
|
||||
}
|
||||
|
||||
public static double GetMax(string iid)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<PoEPricesRoot>(File.ReadAllText("tmp/" + iid + ".json")).max;
|
||||
}
|
||||
|
||||
public static string GetCurType(string iid)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<PoEPricesRoot>(File.ReadAllText("tmp/" + iid + ".json")).currency;
|
||||
}
|
||||
|
||||
public class PoEPricesRoot
|
||||
{
|
||||
public double min { get; set; }
|
||||
|
||||
public double max { get; set; }
|
||||
|
||||
public string currency { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
57
PoEco.Net/Web/Stash.cs
Normal file
57
PoEco.Net/Web/Stash.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PoEco.Net.Web
|
||||
{
|
||||
internal class Stash
|
||||
{
|
||||
public static void DownloadStash(string token, string url, string path)
|
||||
{
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.Encoding = Encoding.UTF8;
|
||||
webClient.Headers.Add(HttpRequestHeader.Cookie, "POESESSID=" + token);
|
||||
webClient.Headers.Add("user-agent", $"PoEcoDB/{Program.version} (poeco@mxpoe.ovh)");
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
|
||||
try
|
||||
{
|
||||
Uri address = new Uri(url);
|
||||
webClient.DownloadFile(address, path);
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message, true, 3);
|
||||
Utilities.Message.CMW("URL: " + url, true, 3);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message,true,3);
|
||||
}
|
||||
}
|
||||
|
||||
public static void GetStash(string token, string url, string path)
|
||||
{
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.Encoding = Encoding.UTF8;
|
||||
webClient.Headers.Add("Authorization", "Bearer " + token);
|
||||
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
|
||||
try
|
||||
{
|
||||
Uri address = new Uri(url);
|
||||
webClient.DownloadFile(address, path);
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message, true, 3);
|
||||
Utilities.Message.CMW("URL: " + url, true, 3);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utilities.Message.CMW(ex.Message, true, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
20
PoEco.Net/packages.config
Normal file
20
PoEco.Net/packages.config
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="BouncyCastle.Cryptography" version="2.2.1" targetFramework="net481" />
|
||||
<package id="Google.Protobuf" version="3.21.9" targetFramework="net481" />
|
||||
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net481" />
|
||||
<package id="K4os.Compression.LZ4.Streams" version="1.3.5" targetFramework="net481" />
|
||||
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net481" />
|
||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="5.0.0" targetFramework="net481" />
|
||||
<package id="MySql.Data" version="8.2.0" targetFramework="net481" />
|
||||
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net481" />
|
||||
<package id="System.Buffers" version="4.5.1" targetFramework="net481" />
|
||||
<package id="System.Configuration.ConfigurationManager" version="4.4.1" targetFramework="net481" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="7.0.2" targetFramework="net481" />
|
||||
<package id="System.IO.Pipelines" version="5.0.2" targetFramework="net481" />
|
||||
<package id="System.Memory" version="4.5.5" targetFramework="net481" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net481" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net481" />
|
||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net481" />
|
||||
<package id="ZstdSharp.Port" version="0.7.1" targetFramework="net481" />
|
||||
</packages>
|
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
||||
## PoEco.Net
|
||||
Path of Exile Economy Backend developped in C#.
|
||||
|
||||
## Features
|
||||
- Generate a database of Bases and Classes from PoB lua files.
|
||||
- Generate up to date currency economy value.
|
||||
- Price specialized tabs.
|
||||
- Price identified rare in a tab using PoEPrices.Info API.
|
||||
- Use MySQL (>=5.7.42) for storing the data.
|
||||
- Can be used on Linux using Mono. (>=6.8.0)
|
||||
|
||||
## Credtis
|
||||
- poe.ninja
|
||||
- Path of Building
|
||||
- GGG for his amazing PoE API
|
Loading…
x
Reference in New Issue
Block a user