Compare commits

...

13 Commits

Author SHA1 Message Date
afe8d53638 修复新账号系统的问题,禁用自动更新 2025-02-28 00:17:12 +08:00
e92c497407 tmp 2025-02-26 23:41:34 +08:00
3b2f350439 clear 2024-08-04 18:27:07 +08:00
b532d7ae05 clear New Account 2024-08-04 18:24:17 +08:00
e069c3ccbc clear 2024-08-04 18:11:12 +08:00
779c59f112 fix 2024-08-04 18:10:13 +08:00
4d0cf5a012 fix and clear 2024-08-04 18:10:03 +08:00
b5c7241fcb 更新框架代码 2024-08-04 18:03:32 +08:00
f34713b9f3 cache 2024-07-16 10:39:09 +08:00
6f4515cfe3 cache 2024-07-15 00:36:28 +08:00
b2fdb364bf clean up code 2024-07-13 15:34:07 +08:00
05e0baac8f cache 2024-07-04 15:03:37 +08:00
788a823b60 cache 6.23 2024-06-23 10:04:00 +08:00
29 changed files with 1045 additions and 407 deletions

View File

@ -0,0 +1,13 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# Rider 忽略的文件
/modules.xml
/contentModel.xml
/projectSettingsUpdater.xml
/.idea.Zerolauncher.iml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -28,7 +28,7 @@ namespace Zerolauncher.AboutDialog
private void Hyperlink_Click_1(object sender, RoutedEventArgs e) private void Hyperlink_Click_1(object sender, RoutedEventArgs e)
{ {
MessageBox.Show("已拷贝到粘贴板", "提示"); MessageBox.Show("已拷贝到粘贴板呢喵", "提示");
Clipboard.SetDataObject("ddfgame@foxmail.com", true); Clipboard.SetDataObject("ddfgame@foxmail.com", true);
} }

View File

@ -82,9 +82,9 @@ namespace Zerolauncher
for (int i = 0; i < 3 && !TryDeleteDirectory(@"./cache", true); i++) await Task.Delay(3000); for (int i = 0; i < 3 && !TryDeleteDirectory(@"./cache", true); i++) await Task.Delay(3000);
} }
}); });
DataStream.Load(); DataStreamNew.Load();
_ = WebApiManager.StartListener(); _ = WebApiManager.StartListener();
AccountManager.initLoadData(); AccountManager.InitLoadData();
} }
protected override void OnExit(ExitEventArgs e) protected override void OnExit(ExitEventArgs e)

9
Defender/SystemSha.cs Normal file
View File

@ -0,0 +1,9 @@

namespace Zerolauncher.Defender
{
class SystemSha
{
}
}

View File

@ -29,13 +29,18 @@ namespace Zerolauncher
memberBG.ContextMenu = CreateContextMenu(); memberBG.ContextMenu = CreateContextMenu();
int i = 0; int i = 0;
foreach (var account in AccountManager.accountsList) foreach (var account in AccountManager.AccountsList)
{ {
var member = new MemberControl(); var member = new MemberControl();
member.memberId = i++; member.memberId = i++;
member.text.Content = ServicesStaticInfo.ServicesShortName[account.providerId] + "-" + account.nickName; member.text.Content = ServicesStaticInfo.ServicesShortName[account.ProviderId] + "-" + account.nickName;
mLayout.Children.Add(member); mLayout.Children.Add(member);
} }
if (i ==0)
{
EditMemberDialog.CreateDailog(null);
MessageBox.Show("下次右键账号和窗口空白处可以打菜单喵", "小提示");
}
} }
public void ReloadBtn() public void ReloadBtn()
@ -43,11 +48,11 @@ namespace Zerolauncher
//foreach (var btn in mLayout.Children.) //foreach (var btn in mLayout.Children.)
mLayout.Children.Clear(); mLayout.Children.Clear();
int i = 0; int i = 0;
foreach (var account in AccountManager.accountsList) foreach (var account in AccountManager.AccountsList)
{ {
var member = new MemberControl(); var member = new MemberControl();
member.memberId = i++; member.memberId = i++;
member.text.Content = ServicesStaticInfo.ServicesShortName[account.providerId] + "-" + account.nickName; member.text.Content = ServicesStaticInfo.ServicesShortName[account.ProviderId] + "-" + account.nickName;
mLayout.Children.Add(member); mLayout.Children.Add(member);
} }
} }
@ -92,7 +97,7 @@ namespace Zerolauncher
MenuItem menuItem = sender as MenuItem; MenuItem menuItem = sender as MenuItem;
int i = (int)menuItem.Tag; int i = (int)menuItem.Tag;
Trace.WriteLine("Clicked item index: " + i); Trace.WriteLine("Clicked item index: " + i);
AccountManager.reloadData(i); AccountManager.ChangeTeam(i);
ReloadBtn(); ReloadBtn();
}; };
changeTeamItem.Items.Add(menuItem); changeTeamItem.Items.Add(menuItem);
@ -119,7 +124,7 @@ namespace Zerolauncher
private void editTeamItem_Click(object sender, RoutedEventArgs e) private void editTeamItem_Click(object sender, RoutedEventArgs e)
{ {
EditTeamDialog.CreateDailog(AccountManager.teamName); EditTeamDialog.CreateDailog(AccountManager.TeamName);
} }
private void Button_Click_3(object sender, RoutedEventArgs e) private void Button_Click_3(object sender, RoutedEventArgs e)

View File

@ -1,155 +1,132 @@
 
using System.Diagnostics;
using System.Windows.Input;
namespace Zerolauncher.Manager namespace Zerolauncher.Manager
{ {
internal class AccountManager internal static class AccountManager
{ {
static int teamIndex=0; static int _teamId;
public static string teamName = ""; public static string TeamName = "";
public static List<Account> accountsList = new List<Account>(); public static List<AccountNew>? AccountsList;
public static void initLoadData() public static void InitLoadData()
{ {
teamIndex = DataStream.dataStream.teamIndex; _teamId = AccountData.TeamIndex;
var group = DataStream.dataStream.Groups[teamIndex]; foreach (var pair in GroupsData.Data)
teamName = group.Name;
foreach (var acc in group.Accounts)
{ {
accountsList.Add(acc); Trace.WriteLine(pair.Key, pair.Value);
} }
TeamName = GroupsData.Data[_teamId];
AccountsList = AccountData.Data[_teamId];
} }
public static void reloadData(int index = -1) public static void ChangeTeam(int index)
{ {
if (index < 0) index = teamIndex; _teamId = TeamManager.Index2Key(index);
var group = DataStream.dataStream.Groups[index]; AccountData.TeamIndex = _teamId;
if (teamIndex!=index) TeamName = GroupsData.Data[_teamId];
{ if (!AccountData.Data.ContainsKey(_teamId))
teamIndex = index; AccountData.Data.Add(_teamId, []);
teamName = group.Name; AccountsList = AccountData.Data[_teamId];
DataStream.dataStream.teamIndex = index; DataStreamNew.Save();
DataStream.write(); }
}
accountsList.Clear();
foreach (var acc in group.Accounts)
{
accountsList.Add(acc);
}
}
public static void saveEdit() public static void SaveEdit()
{ {
DataStream.write(); DataStreamNew.Save();
MainWindow.Instance.ReloadBtn(); MainWindow.Instance.ReloadBtn();
} }
public static bool AddAccount(Account account) public static bool AddAccount(AccountNew account)
{ {
if (TeamManager.Nick2Acc(account.nickName) != null) account.GroupId = _teamId;
{ AccountData.AddAccount(account);
return false;
} DataStreamNew.Save();
var group = DataStream.dataStream.Groups[teamIndex];
group.Accounts.Add(account);
accountsList.Add(account);
DataStream.write();
MainWindow.Instance.ReloadBtn(); MainWindow.Instance.ReloadBtn();
return true; return true;
} }
public static bool AddAccounts(Account account) public static bool AddAccounts(AccountNew account)
{ {
if (TeamManager.Nick2Acc(account.nickName) != null) account.GroupId = _teamId;
{ AccountData.AddAccount(account);
return false;
}
var group = DataStream.dataStream.Groups[teamIndex];
group.Accounts.Add(account);
accountsList.Add(account);
//DataStream.write(); 不写
//MainWindow.Instance.ReloadBtn(); 不更新
return true; return true;
} }
public static void MoveAccount(int memberId, int newIndex) public static void MoveAccount(int memberId, int newIndex)
{ {
var group1 = DataStream.dataStream.Groups[newIndex]; var groupId = TeamManager.Index2Key(newIndex);
group1.Accounts.Add(accountsList[memberId]); if (AccountsList != null)
var group = DataStream.dataStream.Groups[teamIndex]; {
group.Accounts.RemoveAt(memberId); var acc = AccountsList[memberId];
DataStream.write(); AccountsList.RemoveAt(memberId);
reloadData(); if (!AccountData.CheckGroup(groupId)) return;
AccountData.Data[groupId].Add(acc);
}
DataStreamNew.Save();
MainWindow.Instance.ReloadBtn(); MainWindow.Instance.ReloadBtn();
} }
public static void DeleteAccount(int index) { public static void DeleteAccount(int index) {
var group = DataStream.dataStream.Groups[teamIndex]; if (AccountsList != null)
group.Accounts.RemoveAt(index); {
DataStream.write(); var nick = AccountsList[index].nickName;
reloadData(); AccountsList.RemoveAt(index);
AccountData.Dict.Remove(nick);
}
DataStreamNew.Save();
MainWindow.Instance.ReloadBtn(); MainWindow.Instance.ReloadBtn();
} }
public static void editTeamName(string teamName0) public static void EditTeamName(string teamName0)
{ {
teamName = teamName0; TeamName = teamName0;
var group = DataStream.dataStream.Groups[teamIndex]; GroupsData.Data[_teamId] = TeamName;
group.Name = teamName; DataStreamNew.Save();
DataStream.write();
} }
public static bool DeleteTeam() public static bool DeleteTeam()
{ {
if (DataStream.dataStream.Groups.Count == 1) if (GroupsData.Data.Keys.Count == 1)
{ {
return false; return false;
} }
DataStream.dataStream.Groups.RemoveAt(teamIndex); AccountData.RemoveGroup();
DataStream.write(); ChangeTeam(GroupsData.Data.Keys.First());
reloadData(0); DataStreamNew.Save();
MainWindow.Instance.ReloadBtn(); MainWindow.Instance.ReloadBtn();
return true; return true;
} }
} }
internal class TeamManager internal static class TeamManager
{ {
public static int Index2Key(int index) { return GroupsData.Data.ElementAt(index).Key; }
public static string[] GetAllTeamName() public static string[] GetAllTeamName()
{ {
string[] names = new string[DataStream.dataStream.Groups.Count]; return GroupsData.Data.Values.ToArray();
int i = 0;
foreach (var group in DataStream.dataStream.Groups)
{
names[i++] = group.Name;
}
return names;
} }
public static void addTeam(string teamName) public static void AddTeam(string teamName)
{ {
var group = new Group { Name = teamName, Accounts = new List<Account> { } }; var key = GroupsData.Data.Keys.LastOrDefault() + 1;
DataStream.dataStream.Groups.Add(group); GroupsData.Data.Add(key, teamName);
DataStream.write(); DataStreamNew.Save();
} }
//运行时才能决定是否执行内联 //运行时才能决定是否执行内联
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public static Account? Nick2Acc(string nickName) public static AccountNew? Nick2Acc(string nickName)
{ {
// find and return first take return AccountData.Dict.GetValueOrDefault(nickName);
foreach (var group in DataStream.dataStream.Groups)
{
foreach (var acc in group.Accounts)
{
if (acc.nickName.Equals(nickName)) return acc;
}
}
return null;
} }
} }

View File

@ -0,0 +1,12 @@

namespace Zerolauncher.Manager
{
static class BusinessManager
{
public static bool checkIsBuy()
{
return false;
}
}
}

View File

@ -1,90 +0,0 @@
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Text;
using Newtonsoft.Json;
namespace Zerolauncher.Manager
{
class DataStream
{
private const string path = "user.data";
public static Data dataStream;
public static void Load()
{
if (File.Exists(path))
{
dataStream = JsonConvert.DeserializeObject<Data>(Encoding.UTF8.GetString(Decompress(File.ReadAllBytes(path))));
}
else
{
dataStream = JsonConvert.DeserializeObject<Data>(
"{\"teamIndex\":0,\"Groups\":[{\"Name\":\"队伍1\", \"Accounts\": [{\"providerId\":0,\"userName\":\"test\",\"userPWD\":\"test\",\"nickName\":\"测试账号\",\"serverId\":\"1\"}]}], \"ecs\": \"\"}");
}
}
public static void write()
{
string? data = JsonConvert.SerializeObject(dataStream);
//Trace.WriteLine(data);
if (data == null) return;
File.WriteAllBytes(path, CompressBytes(Encoding.UTF8.GetBytes(data)));
}
//压缩字节
//1.创建压缩的数据流
//2.设定compressStream为存放被压缩的文件流,并设定为压缩模式
//3.将需要压缩的字节写到被压缩的文件流
public static byte[] CompressBytes(byte[] bytes)
{
using (MemoryStream compressStream = new MemoryStream())
{
using (var zipStream = new GZipStream(compressStream, CompressionMode.Compress))
zipStream.Write(bytes, 0, bytes.Length);
return compressStream.ToArray();
}
}
//解压缩字节
//1.创建被压缩的数据流
//2.创建zipStream对象并传入解压的文件流
//3.创建目标流
//4.zipStream拷贝到目标流
//5.返回目标流输出字节
public static byte[] Decompress(byte[] bytes)
{
using (var compressStream = new MemoryStream(bytes))
{
using (var zipStream = new GZipStream(compressStream, CompressionMode.Decompress))
{
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
}
}
public class Account
{
public int providerId, serverId;
public string userName, userPWD, nickName;
}
class Group
{
public string Name;
public List<Account> Accounts;
}
struct Data
{
public int teamIndex;
public List<Group> Groups;
public string ecs;
}
}

276
Manager/DataStreamNew.cs Normal file
View File

@ -0,0 +1,276 @@
using System.Buffers;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
namespace Zerolauncher.Manager
{
class DiyWriteSteamer()
{
ArrayBufferWriter<byte> data = new();
public void WriteInt(int value)
{
data.Write(BitConverter.GetBytes(value));
}
public void WriteString(string value)
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(value);
WriteInt(bytes.Length);
data.Write(bytes);
}
public byte[] GetBytes() => data.WrittenSpan.ToArray();
}
class DiyReader(byte[] data, int _offset=0)
{
public int ReadInt()
{
_offset += 4;
return BitConverter.ToInt32(data, _offset - 4);
}
public string ReadStr()
{
int lenght = ReadInt();
_offset += lenght;
return System.Text.Encoding.UTF8.GetString(data, _offset - lenght, lenght);
}
}
internal static class DataStreamNew
{
private const string Path = "users.data";
private static readonly byte[] Key = [9, 5, 33, 64, 99, 200, 66, 77];
private const int HeaderVersion = 20240531;
public static void Load()
{
if (File.Exists(Path))
{
byte[] byteArray;
using (var fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
{
byteArray = new byte[fs.Length];
fs.ReadExactly(byteArray, 0, byteArray.Length);
}
ByteCry(byteArray);
byteArray = Decompress(byteArray);
{
var data = new DiyReader(byteArray);
if (data.ReadInt() != HeaderVersion)
{
OldDataUpdate(data);
return;
}
GroupsData.Init(data);
AccountData.Init(data);
}
return;
}
InitDefaultData();
}
static void OldDataUpdate(DiyReader _item)
{
InitDefaultData();
}
static void InitDefaultData()
{
Trace.WriteLine("加载初始数据");
GroupsData.InitDefaultData();
AccountData.InitDefaultData();
}
public static void Save()
{
var data = new DiyWriteSteamer();
data.WriteInt(HeaderVersion);
GroupsData.Out(data);
AccountData.Out(data);
var buffer = CompressBytes(data.GetBytes());
ByteCry(buffer);
using (FileStream file = new(Path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
file.Seek(0, SeekOrigin.Begin);
file.Write(buffer);
}
}
static void ByteCry(byte[] data)
{
for (int i = 0; i < data.Length; i++)
{
data[i] = (byte)(data[i] ^ Key[i % Key.Length]);
}
}
//压缩字节
//1.创建压缩的数据流
//2.设定compressStream为存放被压缩的文件流,并设定为压缩模式
//3.将需要压缩的字节写到被压缩的文件流
static byte[] CompressBytes(byte[] bytes)
{
using var compressStream = new MemoryStream();
using (var zipStream = new GZipStream(compressStream, CompressionMode.Compress))
zipStream.Write(bytes, 0, bytes.Length);
return compressStream.ToArray();
}
//解压缩字节
//1.创建被压缩的数据流
//2.创建zipStream对象并传入解压的文件流
//3.创建目标流
//4.zipStream拷贝到目标流
//5.返回目标流输出字节
static byte[] Decompress(byte[] bytes)
{
using (var compressStream = new MemoryStream(bytes))
{
using (var zipStream = new GZipStream(compressStream, CompressionMode.Decompress))
{
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
}
}
public class AccountNew
{
public int GroupId, ProviderId, ServerId;
public string userName, userPWD, nickName;
}
internal static class AccountData
{
public static int TeamIndex = 0;
public static readonly Dictionary<int, List<AccountNew>> Data = [];
public static readonly Dictionary<string, AccountNew> Dict = [];
public static void Init(DiyReader data)
{
TeamIndex = data.ReadInt();
var accountCount = data.ReadInt();
for (var i = 0; i < accountCount; i++)
{
AddAccount(new AccountNew()
{
GroupId = data.ReadInt(),
ProviderId = data.ReadInt(),
ServerId = data.ReadInt(),
userName = data.ReadStr(),
userPWD = data.ReadStr(),
nickName = data.ReadStr()
});
}
}
public static void InitDefaultData()
{
AddAccount(new AccountNew()
{
GroupId = 0,
ProviderId = 0,
ServerId = 1,
userName = "test",
userPWD = "test",
nickName = "右键修改账号"
});
}
public static void AddAccount(AccountNew item)
{
var count = 0;
while (Dict.ContainsKey(item.nickName))
item.nickName += count++.ToString();
if (CheckGroup(item.GroupId))
Data[item.GroupId].Add(item);
}
public static bool CheckGroup(int groupId)
{
if (!GroupsData.Data.ContainsKey(groupId)) return false;
if (!Data.ContainsKey(groupId)) Data.Add(groupId, []);
return true;
}
public static void RemoveGroup()
{
GroupsData.Data.Remove(TeamIndex);
foreach (var item in Data[TeamIndex])
{
Dict.Remove(item.nickName);
}
Data.Remove(TeamIndex);
}
public static void Out(DiyWriteSteamer data)
{
data.WriteInt(TeamIndex);
var arr = new List<AccountNew>();
foreach (var item in Data.Values)
arr.AddRange(item);
data.WriteInt(arr.Count);
foreach (var item in arr)
{
data.WriteInt(item.GroupId);
data.WriteInt(item.ProviderId);
data.WriteInt(item.ServerId);
data.WriteString(item.userName);
data.WriteString(item.userPWD);
data.WriteString(item.nickName);
}
}
}
internal static class GroupsData
{
public static readonly Dictionary<int, string> Data = [];
public static void Init(DiyReader dataItem)
{
var count = dataItem.ReadInt();
for (var i = 0; i < count; i++)
{
Data.Add(dataItem.ReadInt(), dataItem.ReadStr());
}
}
public static void InitDefaultData()
{
Data.Add(0, "队伍1");
}
public static void Out(DiyWriteSteamer data)
{
data.WriteInt(Data.Count);
foreach (var item in Data)
{
data.WriteInt(item.Key);
data.WriteString(item.Value);
}
}
}
}

View File

@ -12,36 +12,36 @@ namespace Zerolauncher.Manager
//运行时才能决定是否执行内联 //运行时才能决定是否执行内联
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)] [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
private static string AccToKey(Account account) private static string AccToKey(AccountNew account)
{ {
return string.Format("{0}{1}{2}", account.providerId, account.serverId, account.userName); return string.Format("{0}{1}{2}", account.ProviderId, account.ServerId, account.userName);
} }
public static bool CreateGame(Account account) public static bool CreateGame(AccountNew account)
{ {
if (UpDateData.is_check == false) if (UpDateData.is_check == false)
{ {
MessageBox.Show("正在更新游戏数据请等待1-3秒。\n 请检查网络", "错误", MessageBoxButton.OK, MessageBoxImage.Warning); MessageBox.Show("正在更新游戏数据请等待1-3秒喵。\n 请检查网络", "错误", MessageBoxButton.OK, MessageBoxImage.Warning);
return true;
}
if (UpDateManager.state)
{
UpDateManager.DoUpdate();
return true; return true;
} }
//if (UpDateManager.state)
//{
// UpDateManager.DoUpdate();
// return true;
//}
var key = AccToKey(account); var key = AccToKey(account);
if (mGame.ContainsKey(key)) { return false; } if (mGame.ContainsKey(key)) { return false; }
if (CacheSha.errorCode != 0) { if (CacheSha.errorCode != 0) {
switch (CacheSha.errorCode) switch (CacheSha.errorCode)
{ {
case 1: case 1:
MessageBox.Show("发生网络错误==EMS。\n 请检查网络", "错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("发生网络错误==EMS。\n 请检查网络", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
break; break;
case 2: case 2:
MessageBox.Show("发生游戏服务错误==EMS。\n 请联系管理员", "错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("发生游戏服务错误==EMS。\n 请联系管理员", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
break; break;
default: default:
MessageBox.Show("发生未知错误==EMS。\n 请联系管理员", "错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("发生未知错误==EMS。\n 请联系管理员", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
break; break;
} }
return true; return true;
@ -59,17 +59,17 @@ namespace Zerolauncher.Manager
public static bool CreateGame(int memberId) public static bool CreateGame(int memberId)
{ {
return CreateGame(AccountManager.accountsList[memberId]); return CreateGame(AccountManager.AccountsList[memberId]);
} }
public static int CheckGameState(Account account) public static int CheckGameState(AccountNew account)
{ {
var key = AccToKey(account); var key = AccToKey(account);
if (mGame.ContainsKey(key)) { return mGame[key].mHandle; } if (mGame.ContainsKey(key)) { return mGame[key].mHandle; }
return -1; return -1;
} }
public static short TurnGameSizeMini(Account account) public static short TurnGameSizeMini(AccountNew account)
{ {
var key = AccToKey(account); var key = AccToKey(account);
if (mGame.ContainsKey(key)) if (mGame.ContainsKey(key))
@ -85,7 +85,7 @@ namespace Zerolauncher.Manager
return 0; return 0;
} }
public static short TurnGameSizeNormal(Account account) public static short TurnGameSizeNormal(AccountNew account)
{ {
var key = AccToKey(account); var key = AccToKey(account);
if (mGame.ContainsKey(key)) if (mGame.ContainsKey(key))
@ -101,7 +101,7 @@ namespace Zerolauncher.Manager
return 0; return 0;
} }
public static bool ExitGame(Account account) public static bool ExitGame(AccountNew account)
{ {
var key = AccToKey(account); var key = AccToKey(account);
if (!mGame.ContainsKey(key)) { return false; } if (!mGame.ContainsKey(key)) { return false; }
@ -109,7 +109,7 @@ namespace Zerolauncher.Manager
return true; return true;
} }
public static void OnGameExit(Account account) public static void OnGameExit(AccountNew account)
{ {
mGame.Remove(AccToKey(account)); mGame.Remove(AccToKey(account));
} }
@ -125,10 +125,10 @@ namespace Zerolauncher.Manager
Process process; Process process;
string? restartUrl; string? restartUrl;
public int mHandle; public int mHandle;
public Account? account; public AccountNew? account;
string gameMode; string gameMode;
public SingleGame(Account? acc, string mod = StaticHandleA.GameMode) public SingleGame(AccountNew? acc, string mod = StaticHandleA.GameMode)
{ {
restartUrl = null; restartUrl = null;
account = acc; account = acc;
@ -155,6 +155,7 @@ namespace Zerolauncher.Manager
private void Process_Exited(object? sender, EventArgs e) private void Process_Exited(object? sender, EventArgs e)
{ {
if (account == null) return;
Trace.WriteLine( Trace.WriteLine(
$"Exit time : {process.ExitTime}\n" + $"Exit time : {process.ExitTime}\n" +
$"Exit code : {process.ExitCode}\n" + $"Exit code : {process.ExitCode}\n" +
@ -180,7 +181,7 @@ namespace Zerolauncher.Manager
UpDateManager.DoUpdate1(); UpDateManager.DoUpdate1();
return; return;
} }
Send($"{StaticHandleS.ShowWindow} {ServicesStaticInfo.ServicesName[account.providerId]}-{account.nickName}"); Send($"{StaticHandleS.ShowWindow} {ServicesStaticInfo.ServicesName[account.ProviderId]}-{account.nickName}");
break; break;
case StaticHandleC.StartDone: case StaticHandleC.StartDone:
if (gameMode == StaticHandleA.UpdateMode) if (gameMode == StaticHandleA.UpdateMode)
@ -251,45 +252,27 @@ namespace Zerolauncher.Manager
{ {
bool is_first_luancher = EngineManager.CheckEmpy(); bool is_first_luancher = EngineManager.CheckEmpy();
#region #region
//if (mod == StaticHandleA.UpdateMode) if (mod == StaticHandleA.UpdateMode)
//{ {
// if (DataStream.dataStream.ecs.Length > 10) }
// { else if (!is_check && is_first_luancher)
// string? now_bit; {
// using (SHA256 sha256 = SHA256.Create()) string? now_bit;
// { using (SHA256 sha256 = SHA256.Create())
// using (FileStream fileStream = File.OpenRead(engine_file)) {
// { using (FileStream fileStream = File.OpenRead(engine_file))
// byte[] hashBytes = sha256.ComputeHash(fileStream); {
// now_bit = BitConverter.ToString(hashBytes).Replace("-", string.Empty); byte[] hashBytes = sha256.ComputeHash(fileStream);
// } now_bit = BitConverter.ToString(hashBytes).Replace("-", string.Empty);
// } }
// if (DataStream.dataStream.ecs != now_bit) }
// { if (CacheSha.GetE() != now_bit)
// Trace.WriteLine("lalalala" + DataStream.dataStream.ecs); {
// throw new FileReadException("error esu1!"); Trace.WriteLine("lalalala1");
// } throw new FileReadException("error esu0!");
// } }
//} is_check = true;
//else if (!is_check && is_first_luancher) }
//{
// string? now_bit;
// using (SHA256 sha256 = SHA256.Create())
// {
// using (FileStream fileStream = File.OpenRead(engine_file))
// {
// byte[] hashBytes = sha256.ComputeHash(fileStream);
// now_bit = BitConverter.ToString(hashBytes).Replace("-", string.Empty);
// }
// }
// if (CacheSha.GetE() != now_bit)
// {
// Trace.WriteLine("lalalala1");
// throw new FileReadException("error esu0!");
// }
// if (DataStream.dataStream.ecs != now_bit) { DataStream.dataStream.ecs = now_bit; DataStream.write(); }
// is_check = true;
//}
#endregion #endregion
var process = new Process var process = new Process

View File

@ -1,5 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using Zerolauncher.util; using Zerolauncher.util;
@ -69,15 +70,15 @@ namespace Zerolauncher.Manager
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"); client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0");
string? need_web = null; string? need_web = null;
client.Timeout = TimeSpan.FromSeconds(3); client.Timeout = TimeSpan.FromSeconds(3);
game.Send($"{StaticHandleS.HintText} 尝试登玩家{game.account.nickName}到{ServicesStaticInfo.ServicesName[game.account.providerId]}的{ServicesStaticInfo.ServerNames[game.account.serverId]}服"); game.Send($"{StaticHandleS.HintText} 尝试登玩家{game.account.nickName}到{ServicesStaticInfo.ServicesName[game.account.ProviderId]}的{ServicesStaticInfo.ServerNames[game.account.ServerId]}服");
switch (game.account.providerId) switch (game.account.ProviderId)
{ {
case 0: case 0:
case 1: case 1:
need_web = "https://www.917play.com.tw/ddt_webserver"; need_web = "https://www.917play.com.tw/ddt_webserver";
break; break;
default: default:
game.Send($"{StaticHandleS.HintText} 错误。未适配的运营商:{game.account.serverId}"); game.Send($"{StaticHandleS.HintText} 错误。未适配的运营商:{game.account.ServerId}");
break; break;
} }
client.Dispose(); client.Dispose();
@ -87,7 +88,7 @@ namespace Zerolauncher.Manager
// await Task.Delay(1000); // await Task.Delay(1000);
// if (!game.Send($"{StaticHandleS.HintText} 自动登录失败,将在{i}后启用网页登录,关闭窗口取消")) { return; } // if (!game.Send($"{StaticHandleS.HintText} 自动登录失败,将在{i}后启用网页登录,关闭窗口取消")) { return; }
//} //}
game.Send($"{StaticHandleS.UseBrowser} {need_web} {game.account.providerId + 4} {ServicesStaticInfo.ServerIds[game.account.serverId]} {game.account.userName} {game.account.userPWD}"); game.Send($"{StaticHandleS.UseBrowser} {need_web} {game.account.ProviderId + 4} {ServicesStaticInfo.ServerIds[game.account.ServerId]} {game.account.userName} {game.account.userPWD}");
} }
public static async Task DoVerify(SingleGame game, string vid, string cookie) public static async Task DoVerify(SingleGame game, string vid, string cookie)
@ -102,7 +103,12 @@ namespace Zerolauncher.Manager
if (OnnxManager.onnxVerify == null) OnnxManager.onnxVerify = new OnnxVerify(); if (OnnxManager.onnxVerify == null) OnnxManager.onnxVerify = new OnnxVerify();
var verify = OnnxManager.onnxVerify.RunInference(new Bitmap(bin)); var verify = OnnxManager.onnxVerify.RunInference(new Bitmap(bin));
game.Send($"{StaticHandleS.VerifyDone} {verify}"); //using (var fileStream = File.Create("tmp.png"))
//{
// bin.Seek(0, SeekOrigin.Begin);//设置复制开始的地方
// bin.CopyTo(fileStream);
//}
game.Send($"{StaticHandleS.VerifyDone} {verify}");
Trace.WriteLine(verify); Trace.WriteLine(verify);
} }
catch (Exception ex) catch (Exception ex)

View File

@ -58,30 +58,31 @@ namespace Zerolauncher.Manager
switch (CacheSha.errorCode) switch (CacheSha.errorCode)
{ {
case 1: case 1:
MessageBox.Show("检查更新出错。\n 请检查网络", "错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("检查更新出错。\n 请检查网络", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
break; break;
case 2: case 2:
MessageBox.Show("软件已停止服务或服务错误。\n 请联系管理员", "错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("软件已停止服务或服务错误。\n 请联系管理员", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
break; break;
default: default:
MessageBox.Show("检查更新出错。", "错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("检查更新出错。", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
break; break;
} }
return; return;
} }
MessageBoxResult result = MessageBox.Show($"大厅组件需要更新\n是否更新?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Warning); MessageBoxResult result = MessageBox.Show($"大厅组件需要更新\n是否更新?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
if (result == MessageBoxResult.OK) if (result == MessageBoxResult.OK)
{ {
try Process.Start(new ProcessStartInfo(UpDateData.lanzou + UpDateData.user_packet_url) { UseShellExecute = true });
{ // try
updateProcess = new SingleGame(null, StaticHandleA.UpdateMode); // {
return; // updateProcess = new SingleGame(null, StaticHandleA.UpdateMode);
} // return;
catch (Exception _ex) // }
{ // catch (Exception _ex)
MessageBox.Show("执行自动更新失败!,\n请手动访问链接重新下载大厅文件或联系管理员。", "错误", MessageBoxButton.OK, MessageBoxImage.Error); // {
} // MessageBox.Show("执行自动更新失败!,\n请手动访问链接重新下载大厅文件或联系管理员喵。", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
} //}
}
} }
public static void DoUpdate1() public static void DoUpdate1()

View File

@ -4,23 +4,23 @@ using System.Net;
using System.Text; using System.Text;
namespace Zerolauncher.Manager namespace Zerolauncher.Manager
{ {
internal class WebApiManager internal static class WebApiManager
{ {
static HttpListener listener = new HttpListener(); static readonly HttpListener Listener = new HttpListener();
static CancellationTokenSource cts = new CancellationTokenSource(); static readonly CancellationTokenSource Cts = new CancellationTokenSource();
public static async Task StartListener() public static async Task StartListener()
{ {
listener.Prefixes.Add("http://127.0.0.1:7233/"); Listener.Prefixes.Add("http://127.0.0.1:7233/");
listener.Start(); Listener.Start();
Trace.WriteLine("Listening..."); Trace.WriteLine("Listening...");
while (!cts.Token.IsCancellationRequested) while (!Cts.Token.IsCancellationRequested)
{ {
HttpListenerContext context = await listener.GetContextAsync(); var context = await Listener.GetContextAsync();
HttpListenerRequest request = context.Request; var request = context.Request;
HttpListenerResponse response = context.Response; var response = context.Response;
var raw = request.RawUrl; var raw = request.RawUrl;
ResponesBody? rb = null; ResponseBody? rb = null;
if (raw != null && raw.Contains("?")) if (raw != null && raw.Contains("?"))
{ {
var lines = raw.Split("?"); var lines = raw.Split("?");
@ -34,121 +34,79 @@ namespace Zerolauncher.Manager
switch (lines[0]) switch (lines[0])
{ {
case "/CloseGame": case "/CloseGame":
{ {
if (EngineManager.ExitGame(acc)) rb = EngineManager.ExitGame(acc) ? new ResponseBody(1, 0, $"Account [{nick}] successful to close.") : new ResponseBody($"Account [{nick}] is unluacher.");
{ }
rb = new ResponesBody(1, 0, $"Account [{nick}] successful to close.");
}
else
{
rb = new ResponesBody($"Account [{nick}] is unluacher.");
break;
}
}
break; break;
case "/ToNormalSize": case "/ToNormalSize":
{
rb = EngineManager.TurnGameSizeNormal(acc) switch
{ {
switch (EngineManager.TurnGameSizeNormal(acc)) 2 => new ResponseBody(1, 0, $"Account [{nick}] now is normal size."),
{ 1 => new ResponseBody(0, 0, $"Account [{nick}] is loading, please wait."),
case 2: 0 => new ResponseBody($"Account [{nick}] is unluacher."),
rb = new ResponesBody(1, 0, $"Account [{nick}] now is normal size."); _ => rb
break; };
case 1: }
rb = new ResponesBody(0, 0, $"Account [{nick}] is loading, please wait.");
break;
case 0:
rb = new ResponesBody($"Account [{nick}] is unluacher.");
break;
}
}
break; break;
case "/ToMiniSize": case "/ToMiniSize":
{
rb = EngineManager.TurnGameSizeMini(acc) switch
{ {
switch (EngineManager.TurnGameSizeMini(acc)) 2 => new ResponseBody(1, 0, $"Account [{nick}] now is mini size."),
{ 1 => new ResponseBody(0, 0, $"Account [{nick}] is loading, please wait."),
case 2: 0 => new ResponseBody($"Account [{nick}] is unluacher."),
rb = new ResponesBody(1, 0, $"Account [{nick}] now is mini size."); _ => rb
break; };
case 1: }
rb = new ResponesBody(0, 0, $"Account [{nick}] is loading, please wait.");
break;
case 0:
rb = new ResponesBody($"Account [{nick}] is unluacher.");
break;
}
}
break; break;
case "/LoginGame": case "/LoginGame":
{ {
if (EngineManager.CreateGame(acc)) if (EngineManager.CreateGame(acc))
{ {
rb = new ResponesBody(0, 0, $"Account [{nick}] successful to start."); rb = new ResponseBody(0, 0, $"Account [{nick}] successful to start.");
} }
else else
{ {
int hwnd = EngineManager.CheckGameState(acc); var hwnd = EngineManager.CheckGameState(acc);
if (hwnd <= 0) rb = hwnd <= 0 ? new ResponseBody(0, 0, $"Account [{nick}] is loading, please wait.") : new ResponseBody(1, hwnd, $"Account [{nick}] now is running.");
{
rb = new ResponesBody(0, 0, $"Account [{nick}] is loading, please wait.");
}
else
{
rb = new ResponesBody(1, hwnd, $"Account [{nick}] now is running.");
}
} }
} }
break; break;
default: default:
rb = new ResponesBody($"commad [{lines[0]}] undefind."); rb = new ResponseBody($"commad [{lines[0]}] undefind.");
break; break;
} }
} }
else else
{ {
rb = new ResponesBody($"Account [{nick}] undefind."); rb = new ResponseBody($"Account [{nick}] undefind.");
} }
} }
else else
{ {
rb = new ResponesBody("args is missing."); rb = new ResponseBody("args is missing.");
} }
} }
if (rb == null) rb ??= new ResponseBody();
{ var buffer = Encoding.UTF8.GetBytes(rb.Encode());
rb = new ResponesBody();
}
byte[] buffer = Encoding.UTF8.GetBytes(rb.Encode());
response.ContentLength64 = buffer.Length; response.ContentLength64 = buffer.Length;
Stream output = response.OutputStream; var output = response.OutputStream;
await output.WriteAsync(buffer, 0, buffer.Length); await output.WriteAsync(buffer, 0, buffer.Length);
output.Close(); output.Close();
} }
listener.Stop(); Listener.Stop();
} }
public static void StopListener() { cts.Cancel(); } public static void StopListener() { Cts.Cancel(); }
} }
class ResponesBody class ResponseBody(int status = -1, int hwnd = 0, string message = "Hello, World!")
{ {
public int status; public ResponseBody(string message) : this(-1, 0, message)
public int hwnd;
public string message;
public ResponesBody(string message)
{ {
this.status = -1;
this.hwnd = 0;
this.message = message;
}
public ResponesBody(int status=-1, int hwnd=0, string message= "Hello, World!")
{
this.status = status;
this.hwnd = hwnd;
this.message = message;
} }
public string Encode() public string Encode()

View File

@ -50,6 +50,7 @@
<PackageReference Include="Microsoft.ML.OnnxRuntime" Version="1.17.3" /> <PackageReference Include="Microsoft.ML.OnnxRuntime" Version="1.17.3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Drawing.Common" Version="8.0.4" /> <PackageReference Include="System.Drawing.Common" Version="8.0.4" />
<PackageReference Include="System.Management" Version="8.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

200
clean_up_code.patch Normal file
View File

@ -0,0 +1,200 @@
Subject: [PATCH] clean up code
---
Index: Manager/WebApiManager.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Manager/WebApiManager.cs b/Manager/WebApiManager.cs
--- a/Manager/WebApiManager.cs (revision 5129f68dadfebc3477fa29452cc914fcbcbb0106)
+++ b/Manager/WebApiManager.cs (revision cc94e7fcc8edfcb500c176ec8e111d0f8ca98866)
@@ -4,23 +4,23 @@
using System.Text;
namespace Zerolauncher.Manager
{
- internal class WebApiManager
+ internal static class WebApiManager
{
- static HttpListener listener = new HttpListener();
- static CancellationTokenSource cts = new CancellationTokenSource();
+ static readonly HttpListener Listener = new HttpListener();
+ static readonly CancellationTokenSource Cts = new CancellationTokenSource();
public static async Task StartListener()
{
- listener.Prefixes.Add("http://127.0.0.1:7233/");
- listener.Start();
+ Listener.Prefixes.Add("http://127.0.0.1:7233/");
+ Listener.Start();
Trace.WriteLine("Listening...");
- while (!cts.Token.IsCancellationRequested)
+ while (!Cts.Token.IsCancellationRequested)
{
- HttpListenerContext context = await listener.GetContextAsync();
- HttpListenerRequest request = context.Request;
- HttpListenerResponse response = context.Response;
+ var context = await Listener.GetContextAsync();
+ var request = context.Request;
+ var response = context.Response;
var raw = request.RawUrl;
- ResponesBody? rb = null;
+ ResponseBody? rb = null;
if (raw != null && raw.Contains("?"))
{
var lines = raw.Split("?");
@@ -34,121 +34,79 @@
switch (lines[0])
{
case "/CloseGame":
- {
- if (EngineManager.ExitGame(acc))
- {
- rb = new ResponesBody(1, 0, $"Account [{nick}] successful to close.");
- }
- else
- {
- rb = new ResponesBody($"Account [{nick}] is unluacher.");
- break;
- }
- }
+ {
+ rb = EngineManager.ExitGame(acc) ? new ResponseBody(1, 0, $"Account [{nick}] successful to close.") : new ResponseBody($"Account [{nick}] is unluacher.");
+ }
break;
case "/ToNormalSize":
- {
- switch (EngineManager.TurnGameSizeNormal(acc))
- {
- case 2:
- rb = new ResponesBody(1, 0, $"Account [{nick}] now is normal size.");
- break;
- case 1:
- rb = new ResponesBody(0, 0, $"Account [{nick}] is loading, please wait.");
- break;
- case 0:
- rb = new ResponesBody($"Account [{nick}] is unluacher.");
- break;
- }
- }
+ {
+ rb = EngineManager.TurnGameSizeNormal(acc) switch
+ {
+ 2 => new ResponseBody(1, 0, $"Account [{nick}] now is normal size."),
+ 1 => new ResponseBody(0, 0, $"Account [{nick}] is loading, please wait."),
+ 0 => new ResponseBody($"Account [{nick}] is unluacher."),
+ _ => rb
+ };
+ }
break;
case "/ToMiniSize":
- {
- switch (EngineManager.TurnGameSizeMini(acc))
- {
- case 2:
- rb = new ResponesBody(1, 0, $"Account [{nick}] now is mini size.");
- break;
- case 1:
- rb = new ResponesBody(0, 0, $"Account [{nick}] is loading, please wait.");
- break;
- case 0:
- rb = new ResponesBody($"Account [{nick}] is unluacher.");
- break;
- }
- }
+ {
+ rb = EngineManager.TurnGameSizeMini(acc) switch
+ {
+ 2 => new ResponseBody(1, 0, $"Account [{nick}] now is mini size."),
+ 1 => new ResponseBody(0, 0, $"Account [{nick}] is loading, please wait."),
+ 0 => new ResponseBody($"Account [{nick}] is unluacher."),
+ _ => rb
+ };
+ }
break;
case "/LoginGame":
{
if (EngineManager.CreateGame(acc))
{
- rb = new ResponesBody(0, 0, $"Account [{nick}] successful to start.");
+ rb = new ResponseBody(0, 0, $"Account [{nick}] successful to start.");
}
else
{
- int hwnd = EngineManager.CheckGameState(acc);
- if (hwnd <= 0)
- {
- rb = new ResponesBody(0, 0, $"Account [{nick}] is loading, please wait.");
- }
- else
- {
- rb = new ResponesBody(1, hwnd, $"Account [{nick}] now is running.");
- }
+ var hwnd = EngineManager.CheckGameState(acc);
+ rb = hwnd <= 0 ? new ResponseBody(0, 0, $"Account [{nick}] is loading, please wait.") : new ResponseBody(1, hwnd, $"Account [{nick}] now is running.");
}
}
break;
default:
- rb = new ResponesBody($"commad [{lines[0]}] undefind.");
+ rb = new ResponseBody($"commad [{lines[0]}] undefind.");
break;
}
}
else
{
- rb = new ResponesBody($"Account [{nick}] undefind.");
+ rb = new ResponseBody($"Account [{nick}] undefind.");
}
}
else
{
- rb = new ResponesBody("args is missing.");
+ rb = new ResponseBody("args is missing.");
}
}
- if (rb == null)
- {
- rb = new ResponesBody();
- }
- byte[] buffer = Encoding.UTF8.GetBytes(rb.Encode());
+ rb ??= new ResponseBody();
+ var buffer = Encoding.UTF8.GetBytes(rb.Encode());
response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
+ var output = response.OutputStream;
await output.WriteAsync(buffer, 0, buffer.Length);
output.Close();
}
- listener.Stop();
+ Listener.Stop();
}
- public static void StopListener() { cts.Cancel(); }
+ public static void StopListener() { Cts.Cancel(); }
}
- class ResponesBody
+ class ResponseBody(int status = -1, int hwnd = 0, string message = "Hello, World!")
{
- public int status;
- public int hwnd;
- public string message;
-
- public ResponesBody(string message)
+ public ResponseBody(string message) : this(-1, 0, message)
{
- this.status = -1;
- this.hwnd = 0;
- this.message = message;
- }
-
- public ResponesBody(int status=-1, int hwnd=0, string message= "Hello, World!")
- {
- this.status = status;
- this.hwnd = hwnd;
- this.message = message;
}
public string Encode()

View File

@ -5,10 +5,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="75" d:DesignWidth="65" Margin="5"> d:DesignHeight="75" d:DesignWidth="65" Margin="5">
<Grid>
<DockPanel> <DockPanel>
<Image Name="icon" DockPanel.Dock="Top" Source="/res/player_ico1.png" Width="60" Height="60"/> <Image Name="icon" DockPanel.Dock="Top" Source="/res/player_ico1.png" Width="60" Height="60"/>
<Label Name="text" DockPanel.Dock="Bottom" Content="43-测试账号" FontSize="9" Padding="0" Width="65"/> <Label Name="text" DockPanel.Dock="Bottom" Content="43-测试账号" FontSize="9" Padding="0" Width="65"/>
</DockPanel> </DockPanel>
</Grid>
</UserControl> </UserControl>

View File

@ -27,8 +27,7 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button x:Name="btn_diy" Content="自定义图片"/> <!--<Button x:Name="btn_diy" Content="自定义图片"/>-->
<Button x:Name="btn_clut" Content="截取游戏" Grid.Row="1"/>
<Image Grid.Column="1" Grid.RowSpan="2" Source="/res/player_ico1.png"/> <Image Grid.Column="1" Grid.RowSpan="2" Source="/res/player_ico1.png"/>
</Grid> </Grid>
<DockPanel Grid.ColumnSpan="1" Margin="2"> <DockPanel Grid.ColumnSpan="1" Margin="2">

View File

@ -28,9 +28,9 @@ namespace Zerolauncher.dialog
if (EditMemberDialog.member != null) if (EditMemberDialog.member != null)
{ {
int index = (int)EditMemberDialog.member; int index = (int)EditMemberDialog.member;
var acc = AccountManager.accountsList[index]; var acc = AccountManager.AccountsList[index];
cb_pid.SelectedIndex = acc.providerId; cb_pid.SelectedIndex = acc.ProviderId;
cb_sid.SelectedIndex = acc.serverId; cb_sid.SelectedIndex = acc.ServerId;
edit_acc.Text = acc.userName; edit_acc.Text = acc.userName;
edit_pwd.Password = acc.userPWD; edit_pwd.Password = acc.userPWD;
edit_nick.Text = acc.nickName; edit_nick.Text = acc.nickName;
@ -64,19 +64,19 @@ namespace Zerolauncher.dialog
} }
if (EditMemberDialog.member == null) if (EditMemberDialog.member == null)
{ {
AccountManager.AddAccount(new Account { providerId = cb_pid.SelectedIndex, serverId = cb_sid.SelectedIndex, userName = edit_acc.Text, userPWD = edit_pwd.Password, nickName = edit_nick.Text }); AccountManager.AddAccount(new AccountNew { ProviderId = cb_pid.SelectedIndex, ServerId = cb_sid.SelectedIndex, userName = edit_acc.Text, userPWD = edit_pwd.Password, nickName = edit_nick.Text });
EditMemberDialog.Close(); EditMemberDialog.Close();
return; return;
} }
int index = (int)EditMemberDialog.member; int index = (int)EditMemberDialog.member;
var acc = AccountManager.accountsList[index]; var acc = AccountManager.AccountsList[index];
acc.providerId = cb_pid.SelectedIndex; acc.ProviderId = cb_pid.SelectedIndex;
acc.serverId = cb_sid.SelectedIndex; acc.ServerId = cb_sid.SelectedIndex;
acc.userName = edit_acc.Text; acc.userName = edit_acc.Text;
acc.userPWD = edit_pwd.Password; acc.userPWD = edit_pwd.Password;
acc.nickName = edit_nick.Text; acc.nickName = edit_nick.Text;
AccountManager.saveEdit(); AccountManager.SaveEdit();
EditMemberDialog.Close(); EditMemberDialog.Close();
return; return;
} }

View File

@ -22,21 +22,24 @@ namespace Zerolauncher.dialog
{ {
if(string.IsNullOrEmpty(edit_name.Text)) if(string.IsNullOrEmpty(edit_name.Text))
{ {
MessageBox.Show("昵称不能为空!", "提示"); MessageBox.Show("昵称不能为空!", "提示");
return; return;
} }
if (isEditModle) AccountManager.editTeamName(edit_name.Text); else TeamManager.addTeam(edit_name.Text); if (isEditModle) AccountManager.EditTeamName(edit_name.Text); else TeamManager.AddTeam(edit_name.Text);
EditTeamDialog.Close(); EditTeamDialog.Close();
} }
private void Button_Click_1(object sender, RoutedEventArgs e) private void Button_Click_1(object sender, RoutedEventArgs e)
{ {
MessageBoxResult result = MessageBox.Show("即将放生此队伍以及队伍里所有的账号\n将会为你带来114点功德\n您确定要执行此操作吗", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); MessageBoxResult result = MessageBox.Show("放生此队伍以及队伍里所有的账号\n为你带来114514点功德\n要执行此操作喵", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (result == MessageBoxResult.OK) if (result == MessageBoxResult.OK)
{ {
if (!AccountManager.DeleteTeam()) MessageBox.Show("少爷这已经是最后一个队伍了!\n请新建一个队伍后再放生这个吧~", "提示"); if (!AccountManager.DeleteTeam())
{
MessageBox.Show("已经是最后一个队伍了喵!\n新建一个队伍后再放生这个~", "提示");
}
else EditTeamDialog.Close(); else EditTeamDialog.Close();
} }
} }
} }

60
dialog/RegDialog.xaml Normal file
View File

@ -0,0 +1,60 @@
<Window x:Class="Zerolauncher.dialog.RegDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="注册账号.."
MinHeight="200"
MinWidth="300"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize"
ShowInTaskbar="False"
WindowStartupLocation="CenterOwner"
FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">
<Grid Margin="10">
<Grid.Resources>
<!-- Default settings for controls -->
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="0,3,5,5" />
<Setter Property="Padding" Value="0,0,0,5" />
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,0,0,5" />
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="70" />
<Setter Property="Height" Value="25" />
<Setter Property="Margin" Value="5,0,0,0" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Left,Top,Right,Bottom margins-->
<Button Width="200" Margin="0, 0, 0, 30" Height="50" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" Grid.RowSpan="2" Click="FleshPic">
<Image x:Name="CapPic" Source="/res/captcha.jpg"/>
</Button>
<Label Grid.Column="0" Grid.Row="2">验证码:</Label>
<TextBox Name="RightMarginTextBox" Grid.Column="1" Grid.Row="2" />
<Label Grid.Column="0" Grid.Row="3">注册邮箱:</Label>
<TextBox Name="BottomMarginTextBox" Grid.Column="1" Grid.Row="3" />
<!-- Accept or Cancel -->
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Name="OkButton" IsDefault="True" Click="okButton_Click" >确定</Button>
<Button Name="CancelButton" IsCancel="True" Click="cancelButton_Click">取消</Button>
</StackPanel>
</Grid >
</Window>

94
dialog/RegDialog.xaml.cs Normal file
View File

@ -0,0 +1,94 @@
using Newtonsoft.Json.Linq;
using System.Net.Http;
using System.Windows;
using System.Windows.Media.Imaging;
using Zerolauncher.Manager;
namespace Zerolauncher.dialog
{
/// <summary>
/// RegDialog.xaml 的交互逻辑
/// </summary>
public partial class RegDialog : Window
{
private HttpClient client;
private string user;
private string password;
public RegDialog(String acc, String pwd)
{
user = acc;
password = pwd;
InitializeComponent();
client = new();
FleshPic(null, null);
}
private async void FleshPic(object _, RoutedEventArgs e)
{
// var main_ip = UpDateData.game_url;
// HttpResponseMessage? response = null;
// try
// {
// response = await client.GetAsync($"http://{main_ip}/module/captcha.php");
// if (response != null)
// {
// foreach (var item in response.Headers)
// Console.WriteLine($"{item.Key}");
// }
// //var bin = response.Content.ReadAsStream();
// //verify = ocr.RunInference(new Bitmap(bin));
// //using (var fileStream = File.Create("tmp.png"))
// //{
// // bin.Seek(0, SeekOrigin.Begin);//设置复制开始的地方
// // bin.CopyTo(fileStream);
// //}
// using (var stream = response.Content.ReadAsStream())
// {
// BitmapImage bitmap = new BitmapImage();
// bitmap.BeginInit();
// bitmap.CacheOption = BitmapCacheOption.OnLoad;
// bitmap.StreamSource = stream;
// bitmap.EndInit();
// bitmap.Freeze(); // 为了线程安全
//
// CapPic.Source = bitmap; // 设置Image控件的Source
// }
// }
// catch (Exception ex)
// {
// Console.WriteLine($" 网络发生错误,类型:{ex.GetType().Name},消息:{ex.Message}");
// }
}
private async void okButton_Click(object _, RoutedEventArgs e)
{
// var main_ip = UpDateData.game_url;
// var values = new Dictionary<string, string>
// {
// { "rUsername", user },
// { "rPassword", password },
// { "rPasswords", password },
// { "rEmail", BottomMarginTextBox.Text },
// { "rCode", RightMarginTextBox.Text }
// };
// var content = new FormUrlEncodedContent(values);
// try
// {
// var response = await client.PostAsync($"http://{main_ip}/form/register.php", content);
// var src = await response.Content.ReadAsStringAsync();
// var jsonObj = JObject.Parse(src);
// MessageBox.Show(jsonObj["content"].ToString(), jsonObj["title"].ToString());
// if(int.Parse(jsonObj["type"].ToString()) == 0) Close();
// }
// catch (Exception ex)
// {
// MessageBox.Show($"类型:{ex.GetType().Name},消息:{ex.Message}", "发生错误喵");
// }
}
private void cancelButton_Click(object sender, RoutedEventArgs e)
{
Close();
}
}
}

View File

@ -9,7 +9,7 @@
<TextBlock DockPanel.Dock="Top" Margin="5" Text="文本格式:一行一个账号,如:&#x0a; 服务器---区号---账号---密码---备注&#x0a;服务器填代号:&#x0a; 如[0, 4399大区]意味着4399大区的代号是0&#x0a; 具体查看添加账号时,以列表显示的为准" Foreground="#FFB44242"/> <TextBlock DockPanel.Dock="Top" Margin="5" Text="文本格式:一行一个账号,如:&#x0a; 服务器---区号---账号---密码---备注&#x0a;服务器填代号:&#x0a; 如[0, 4399大区]意味着4399大区的代号是0&#x0a; 具体查看添加账号时,以列表显示的为准" Foreground="#FFB44242"/>
<DockPanel DockPanel.Dock="Bottom"> <DockPanel DockPanel.Dock="Bottom">
<Button DockPanel.Dock="Right" Content="选择文件" Click="Button_Click"/> <Button DockPanel.Dock="Right" Content="选择文件" Click="Button_Click"/>
<TextBox Name="input_split" DockPanel.Dock="Right" Text="---" Width="100"/> <TextBox Name="InputSplit" DockPanel.Dock="Right" Text="---" Width="100"/>
<TextBlock DockPanel.Dock="Right" Text="分隔符:" Foreground="#FFEE9595"/> <TextBlock DockPanel.Dock="Right" Text="分隔符:" Foreground="#FFEE9595"/>
<Label/> <Label/>
</DockPanel> </DockPanel>

View File

@ -2,7 +2,6 @@
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls;
using Zerolauncher.Manager; using Zerolauncher.Manager;
namespace Zerolauncher.dialog namespace Zerolauncher.dialog
@ -10,7 +9,7 @@ namespace Zerolauncher.dialog
/// <summary> /// <summary>
/// UseAccDataTextAdd.xaml 的交互逻辑 /// UseAccDataTextAdd.xaml 的交互逻辑
/// </summary> /// </summary>
public partial class UseAccDataTextAdd : UserControl public partial class UseAccDataTextAdd
{ {
public UseAccDataTextAdd() public UseAccDataTextAdd()
{ {
@ -20,54 +19,55 @@ namespace Zerolauncher.dialog
private void Button_Click(object sender, RoutedEventArgs e) private void Button_Click(object sender, RoutedEventArgs e)
{ {
//创建一个打开文件式的对话框 //创建一个打开文件式的对话框
OpenFileDialog ofd = new OpenFileDialog(); var ofd = new OpenFileDialog
//设置这个对话框的起始打开路径 {
ofd.InitialDirectory = @"C:\"; //设置这个对话框的起始打开路径
//设置打开的文件的类型,注意过滤器的语法 InitialDirectory = @"C:\",
ofd.Filter = "账号文本|*.txt|其他格式|*."; //设置打开的文件的类型,注意过滤器的语法
Filter = "账号文本|*.txt|其他格式|*."
};
//调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮 //调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮
if (ofd.ShowDialog() == true) if (ofd.ShowDialog() == true)
{ {
string[] lines = File.ReadAllLines(ofd.FileName, Encoding.UTF8); var lines = File.ReadAllLines(ofd.FileName, Encoding.UTF8);
for (int i = 0; i < lines.Length; i++) for (var i = 0; i < lines.Length; i++)
{ {
var accTexts = lines[i].Split(input_split.Text); var accTexts = lines[i].Split(InputSplit.Text);
if (accTexts.Length != 5) if (accTexts.Length != 5)
{ {
MessageBox.Show($"文本在{i}行非法\n{lines[i]}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show($"文本在{i}行非法\n{lines[i]}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return; return;
} }
var acc = new Account { }; var acc = new AccountNew { };
if (!int.TryParse(accTexts[0], out acc.providerId)) if (!int.TryParse(accTexts[0], out acc.ProviderId))
{ {
MessageBox.Show($"输入的服务商代号错误!在{i}行\n错误[{lines[i]}]无法转换成服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show($"输入的服务器代号错误喵!在{i}行\n错误[{lines[i]}]无法转换成服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return; return;
} }
if(0 < acc.providerId || acc.providerId > ServicesStaticInfo.ServicesName.Length) if(0 < acc.ProviderId || acc.ProviderId > ServicesStaticInfo.ServicesName.Length)
{ {
MessageBox.Show($"输入的服务商代号错误!在{i}行\n错误[{acc.providerId}]不是有效的服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show($"输入的服务器代号错误喵!在{i}行\n错误[{acc.ProviderId}]不是有效的服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (!int.TryParse(accTexts[1], out acc.ServerId))
{
MessageBox.Show($"输入的服务器代号错误喵!在{i}行\n错误[{lines[i]}]无法转换成服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (0 < acc.ProviderId || acc.ProviderId > ServicesStaticInfo.ServerIds.Length)
{
MessageBox.Show($"输入的服务器代号错误喵!在{i}行\n错误[{acc.ProviderId}]不是有效的服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return; return;
} }
if (!int.TryParse(accTexts[1], out acc.serverId))
{
MessageBox.Show($"输入的服务器代号错误!在{i}行\n错误[{lines[i]}]无法转换成服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (0 < acc.providerId || acc.providerId > ServicesStaticInfo.ServerIds.Length)
{
MessageBox.Show($"输入的服务器代号错误!在{i}行\n错误[{acc.providerId}]不是有效的服务器代号", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
acc.userName = accTexts[2]; acc.userName = accTexts[2];
acc.userPWD = accTexts[3]; acc.userPWD = accTexts[3];
acc.nickName = accTexts[4]; acc.nickName = accTexts[4];
if (!AccountManager.AddAccounts(acc)) if (AccountManager.AddAccounts(acc)) continue;
{ MessageBox.Show($"文本在{i}行出错喵!\n警告[{acc.nickName}]昵称冲突,将跳过添加此账号", "Warring", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show($"文本在{i}行出错!\n警告[{acc.nickName}]昵称冲突,将跳过添加此账号", "Warring", MessageBoxButton.OK, MessageBoxImage.Error); return;
}
} }
MessageBox.Show("添加完成", "提示"); MessageBox.Show("添加完成喵!", "提示");
AccountManager.saveEdit(); AccountManager.SaveEdit();
AddMemebersDialog.Close(); AddMemebersDialog.Close();
} }
else else

BIN
res/captcha.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -83,4 +83,109 @@ namespace Zerolauncher.util
return sb.ToString(); return sb.ToString();
} }
} }
class UrlEncoder
{
static readonly Dictionary<char, char> map = new Dictionary<char, char> {
{'0', (char)8194},
{'1', (char)8196},
{'2', (char)8197},
{'3', (char)8198},
{'4', (char)8199},
{'5', (char)8200},
{'6', (char)8201},
{'7', (char)8202},
{'8', (char)8239},
{'9', (char)8287},
};
static readonly Dictionary<char, char> map1 = new Dictionary<char, char>
{
{'.', (char)8192},
{':', (char)8194},
};
static readonly Dictionary<char, char> dmap1 = new Dictionary<char, char>
{
{(char)8192, '.'},
{(char)8194, ':'},
};
static readonly Dictionary<char, char> dmap = new Dictionary<char, char> {
{(char)8194, '0'},
{(char)8196, '1'},
{(char)8197, '2'},
{(char)8198, '3'},
{(char)8199, '4'},
{(char)8200, '5'},
{(char)8201, '6'},
{(char)8202, '7'},
{(char)8239, '8'},
{(char)8287, '9'},
};
static readonly char end_line = (char)8193;
static readonly char sec_char = (char)32;
public static string? Encode(string url, out int counter)
{
var sb = new StringBuilder();
sb.Append(end_line);
counter = 0;
foreach (var item in url)
{
if (map.ContainsKey(item)) sb.Append(map[item]);
else if (map1.ContainsKey(item)) { sb.Append(sec_char); sb.Append(map1[item]); }
else return null;
counter++;
}
sb.Append(end_line);
return sb.ToString();
}
public static string? Decode(string space, out int counter)
{
var sb = new StringBuilder();
counter = 0;
bool is_sec_char = false;
foreach (var item in space)
{
if (counter != 0)
{
if (item == end_line) break;
else if (is_sec_char)
{
if (!dmap1.ContainsKey(item)) return null;
sb.Append(dmap1[item]);
is_sec_char = false;
}
else if (item == sec_char) is_sec_char = true;
else if (dmap.ContainsKey(item)) sb.Append(dmap[item]);
else return null;
}
counter++;
}
return sb.ToString();
}
}
class KeyUrlEncoder
{
static readonly string key = "TestKey123456";
public static string XorEncryptDecrypt(string input)
{
char[] output = new char[input.Length];
for (int i = 0; i < input.Length; i++)
{
output[i] = (char)(input[i] ^ key[i % key.Length]);
}
return new string(output);
}
}
} }

View File

@ -0,0 +1,9 @@

namespace Zerolauncher.util
{
static class SyStemExcuteCommand
{
}
}