diff --git a/LiaoTian_Cup/Dictionary/I18n/Lang.Designer.cs b/LiaoTian_Cup/Dictionary/I18n/Lang.Designer.cs
index 143351f..58ac5ff 100644
--- a/LiaoTian_Cup/Dictionary/I18n/Lang.Designer.cs
+++ b/LiaoTian_Cup/Dictionary/I18n/Lang.Designer.cs
@@ -88,7 +88,7 @@ public static string BackMenuBtn {
}
///
- /// 查找类似 Right click to ban a mutator 的本地化字符串。
+ /// 查找类似 Right click to ban 的本地化字符串。
///
public static string BanTip {
get {
@@ -115,7 +115,7 @@ public static string BaseMutatorsWarn {
}
///
- /// 查找类似 Brave mode 的本地化字符串。
+ /// 查找类似 Vincent's Game 的本地化字符串。
///
public static string BraveMode {
get {
@@ -312,6 +312,15 @@ public static string HubMode {
}
}
+ ///
+ /// 查找类似 Nexus solo mode 的本地化字符串。
+ ///
+ public static string HubSoloMode {
+ get {
+ return ResourceManager.GetString("HubSoloMode", resourceCulture);
+ }
+ }
+
///
/// 查找类似 中文(简体) 的本地化字符串。
///
@@ -870,6 +879,15 @@ public static string 重返亡灵之城 {
}
}
+ ///
+ /// 查找类似 Real Steel 的本地化字符串。
+ ///
+ public static string 铁甲钢拳 {
+ get {
+ return ResourceManager.GetString("铁甲钢拳", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Siege of Storms 的本地化字符串。
///
diff --git a/LiaoTian_Cup/Dictionary/I18n/Lang.resx b/LiaoTian_Cup/Dictionary/I18n/Lang.resx
index 4e1db9e..8f65e95 100644
--- a/LiaoTian_Cup/Dictionary/I18n/Lang.resx
+++ b/LiaoTian_Cup/Dictionary/I18n/Lang.resx
@@ -289,7 +289,7 @@
RandMap:
- Right click to ban a mutator
+ Right click to ban
Banned mutators:
@@ -370,7 +370,7 @@
6 mutators mode
- Brave mode
+ Vincent's Game
Tarsonis
@@ -393,4 +393,10 @@
6 mutators mode will need you pick 4 free choice mutators
+
+ Nexus solo mode
+
+
+ Real Steel
+
\ No newline at end of file
diff --git a/LiaoTian_Cup/Dictionary/I18n/Lang.zh.resx b/LiaoTian_Cup/Dictionary/I18n/Lang.zh.resx
index 8756900..ca80d22 100644
--- a/LiaoTian_Cup/Dictionary/I18n/Lang.zh.resx
+++ b/LiaoTian_Cup/Dictionary/I18n/Lang.zh.resx
@@ -130,7 +130,7 @@
正常单刷模式
- 关于
+ 关于我
选手名称:
@@ -393,4 +393,10 @@
6因子模式需要至少自选4个因子
+
+ 枢纽单刷模式
+
+
+ 铁甲钢拳
+
\ No newline at end of file
diff --git a/LiaoTian_Cup/Helper/DbHelper.cs b/LiaoTian_Cup/Helper/DbHelper.cs
index c88e83e..a47e4c5 100644
--- a/LiaoTian_Cup/Helper/DbHelper.cs
+++ b/LiaoTian_Cup/Helper/DbHelper.cs
@@ -49,4 +49,28 @@ public static List GetListData(string tableName,int columnCount, List<
connection.Close();
return list;
}
+
+ public static List GetCostListData(string tableName, int columnCount, List list)
+ {
+ using var connection = new SqliteConnection("Data Source=./Resources/database.db");
+ connection.Open();
+
+ var command = connection.CreateCommand();
+ command.CommandText = $"SELECT * FROM {tableName} ORDER BY \"group\" DESC";
+
+ using (var reader = command.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ string[] rowStrings = new string[columnCount];
+ for (int i = 0; i < columnCount; i++)
+ {
+ rowStrings[i] = Convert.ToString(reader[i]);
+ }
+ list.Add(rowStrings);
+ }
+ }
+ connection.Close();
+ return list;
+ }
}
\ No newline at end of file
diff --git a/LiaoTian_Cup/Helper/FileData.cs b/LiaoTian_Cup/Helper/FileData.cs
index 23a1b31..5652790 100644
--- a/LiaoTian_Cup/Helper/FileData.cs
+++ b/LiaoTian_Cup/Helper/FileData.cs
@@ -40,11 +40,13 @@ public class FileData
public static List hubNegativeFactorInfo = new List();
public static List hubMultiFactorInfo = new List();
public static List hubFactorList = new List();
+ public static List hubFactorCostList = new List();
public static List hubBeforeCommanderInfo = new List();
public static List hubAfterCommanderInfo = new List();
- public static List braveMapsInfo = new List();
//存放地图数据
+ public static List hubMapsInfo = new List();
+ public static List braveMapsInfo = new List();
public static List mapsInfo = new List();
public FileData()
@@ -56,7 +58,9 @@ public FileData()
private void ReadDataBase()
{
DbHelper.GetListData("global_weeklymutations", 5, mutationList);
- DbHelper.GetListData("group_MutatorList_Cost", 3, scoreFactorList);
+ DbHelper.GetCostListData("group_MutatorList_Cost", 3, scoreFactorList);
+ DbHelper.GetCostListData("hub_MutatorList_Cost", 3, hubFactorCostList);
+
DbHelper.GetColumnData("global_mutatorlist", mutationFactorList);
DbHelper.GetColumnData("global_cmdroldlist", beforeCommanderInfo);
@@ -79,6 +83,7 @@ private void ReadDataBase()
DbHelper.GetColumnData("hub_cmdroldlist", hubBeforeCommanderInfo);
DbHelper.GetColumnData("hub_cmdrnewlist", hubAfterCommanderInfo);
DbHelper.GetColumnData("hub_bravemap", braveMapsInfo);
+ DbHelper.GetColumnData("hub_splmaplist", hubMapsInfo);
}
}
}
diff --git a/LiaoTian_Cup/LiaoTian_Cup.csproj b/LiaoTian_Cup/LiaoTian_Cup.csproj
index 92934b3..98ed956 100644
--- a/LiaoTian_Cup/LiaoTian_Cup.csproj
+++ b/LiaoTian_Cup/LiaoTian_Cup.csproj
@@ -67,6 +67,7 @@
+
@@ -109,6 +110,7 @@
+
@@ -195,6 +197,7 @@
+
@@ -260,6 +263,9 @@
Always
+
+ Always
+
Always
@@ -290,6 +296,9 @@
Always
+
+ Always
+
Always
@@ -693,6 +702,9 @@
Always
+
+ Always
+
Always
diff --git a/LiaoTian_Cup/MainPage.xaml b/LiaoTian_Cup/MainPage.xaml
index 3ee5599..ec26a48 100644
--- a/LiaoTian_Cup/MainPage.xaml
+++ b/LiaoTian_Cup/MainPage.xaml
@@ -17,51 +17,76 @@
-
+
+
+
+
+
+
-
+
-
-
+
+
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LiaoTian_Cup/MainPage.xaml.cs b/LiaoTian_Cup/MainPage.xaml.cs
index c60c798..c7b490f 100644
--- a/LiaoTian_Cup/MainPage.xaml.cs
+++ b/LiaoTian_Cup/MainPage.xaml.cs
@@ -24,15 +24,9 @@ public MainPage()
///
private void I18nBtn(object sender, RoutedEventArgs e)
{
- if((sender as Button).Content.ToString().Equals("English"))
- {
- LanguageManager.Instance.ChangeLanguage(new CultureInfo("en-US"));
- }
- else
- {
- LanguageManager.Instance.ChangeLanguage(new CultureInfo("zh-CN"));
- }
-
+ LanguageManager.Instance.ChangeLanguage((sender as Button).Content.ToString().Equals("English")
+ ? new CultureInfo("en-US")
+ : new CultureInfo("zh-CN"));
}
private void Button_RandomMutation_Click(object sender, RoutedEventArgs e)
@@ -65,9 +59,20 @@ private void Button_Hub_Click(object sender, RoutedEventArgs e)
this.NavigationService.Navigate(new Uri("/LiaoTian_Cup;component/Mode/HubModeWindow.xaml", UriKind.Relative));
}
+ private void Button_SoloHub_Click(object sender, RoutedEventArgs e)
+ {
+ this.NavigationService.Navigate(new Uri("/LiaoTian_Cup;component/Mode/HubSoloModeWindow.xaml", UriKind.Relative));
+ }
+
private void AboutMeBtn(object sender, RoutedEventArgs e)
{
- string url = "https://github.com/B1ackSand";
+ var url = "https://github.com/B1ackSand";
+ System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
+ }
+
+ private void AddGroupBtn(object sender, RoutedEventArgs e)
+ {
+ string url = "https://qm.qq.com/q/nS395vkauA";
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
}
}
diff --git a/LiaoTian_Cup/Mode/DoublesModeWindow.xaml.cs b/LiaoTian_Cup/Mode/DoublesModeWindow.xaml.cs
index b0a8314..ec46ec0 100644
--- a/LiaoTian_Cup/Mode/DoublesModeWindow.xaml.cs
+++ b/LiaoTian_Cup/Mode/DoublesModeWindow.xaml.cs
@@ -99,6 +99,7 @@ public void ResetFunc()
{
Warn.Text = "";
ModeBox.IsEnabled = true;
+ RandStartBtn.IsEnabled = true;
SetRandMapEnable(true);
SetBaseFactorEnable(true);
@@ -132,6 +133,7 @@ public void ResetFunc()
private void Button_Random_Click(object sender, RoutedEventArgs e)
{
ModeBox.IsEnabled = false;
+ RandStartBtn.IsEnabled = false;
ShowRandomMaps();
}
diff --git a/LiaoTian_Cup/Mode/HubModeWindow.xaml b/LiaoTian_Cup/Mode/HubModeWindow.xaml
index 96f83cf..7a29bf8 100644
--- a/LiaoTian_Cup/Mode/HubModeWindow.xaml
+++ b/LiaoTian_Cup/Mode/HubModeWindow.xaml
@@ -187,6 +187,7 @@
+
diff --git a/LiaoTian_Cup/Mode/HubModeWindow.xaml.cs b/LiaoTian_Cup/Mode/HubModeWindow.xaml.cs
index 259a52f..9df05e9 100644
--- a/LiaoTian_Cup/Mode/HubModeWindow.xaml.cs
+++ b/LiaoTian_Cup/Mode/HubModeWindow.xaml.cs
@@ -173,14 +173,14 @@ private void ShowRandomMaps()
}
else
{
- List randNums = rk.GenerateXRandomNum(3, FileData.mapsInfo.Count);
- MapImg1.Source = new BitmapImage(new Uri(mapDir + FileData.mapsInfo[randNums[0]] + ".png", UriKind.Relative));
- MapImg2.Source = new BitmapImage(new Uri(mapDir + FileData.mapsInfo[randNums[1]] + ".png", UriKind.Relative));
- MapImg3.Source = new BitmapImage(new Uri(mapDir + FileData.mapsInfo[randNums[2]] + ".png", UriKind.Relative));
-
- MapName1.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.mapsInfo[randNums[0]]);
- MapName2.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.mapsInfo[randNums[1]]);
- MapName3.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.mapsInfo[randNums[2]]);
+ List randNums = rk.GenerateXRandomNum(3, FileData.hubMapsInfo.Count);
+ MapImg1.Source = new BitmapImage(new Uri(mapDir + FileData.hubMapsInfo[randNums[0]] + ".png", UriKind.Relative));
+ MapImg2.Source = new BitmapImage(new Uri(mapDir + FileData.hubMapsInfo[randNums[1]] + ".png", UriKind.Relative));
+ MapImg3.Source = new BitmapImage(new Uri(mapDir + FileData.hubMapsInfo[randNums[2]] + ".png", UriKind.Relative));
+
+ MapName1.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.hubMapsInfo[randNums[0]]);
+ MapName2.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.hubMapsInfo[randNums[1]]);
+ MapName3.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.hubMapsInfo[randNums[2]]);
}
MapLabel.Foreground = Brushes.Red;
@@ -264,6 +264,7 @@ private void ShowBaseNegativeFactor()
NegativeFactor12.Source = new BitmapImage(new Uri(factorDir + FileData.hubNegativeFactorInfo[11] + ".png", UriKind.Relative));
NegativeFactor13.Source = new BitmapImage(new Uri(factorDir + FileData.hubNegativeFactorInfo[12] + ".png", UriKind.Relative));
NegativeFactor14.Source = new BitmapImage(new Uri(factorDir + FileData.hubNegativeFactorInfo[13] + ".png", UriKind.Relative));
+ NegativeFactor15.Source = new BitmapImage(new Uri(factorDir + FileData.hubNegativeFactorInfo[14] + ".png", UriKind.Relative));
}
//多线因子显示
@@ -626,6 +627,7 @@ private void ClearBaseNegativeFactor()
NegativeFactor12.Source = new BitmapImage();
NegativeFactor13.Source = new BitmapImage();
NegativeFactor14.Source = new BitmapImage();
+ NegativeFactor15.Source = new BitmapImage();
}
//多线因子清除
diff --git a/LiaoTian_Cup/Mode/HubSoloModeWindow.xaml b/LiaoTian_Cup/Mode/HubSoloModeWindow.xaml
new file mode 100644
index 0000000..f22fc11
--- /dev/null
+++ b/LiaoTian_Cup/Mode/HubSoloModeWindow.xaml
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LiaoTian_Cup/Mode/HubSoloModeWindow.xaml.cs b/LiaoTian_Cup/Mode/HubSoloModeWindow.xaml.cs
new file mode 100644
index 0000000..096b771
--- /dev/null
+++ b/LiaoTian_Cup/Mode/HubSoloModeWindow.xaml.cs
@@ -0,0 +1,604 @@
+using Force.DeepCloner;
+using LiaoTian_Cup.Helper;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+
+namespace LiaoTian_Cup
+{
+ ///
+ /// SingleModeWindow.xaml 的交互逻辑
+ ///
+ public partial class HubSoloModeWindow : Page
+ {
+ public string botName = Dictionary.I18n.Lang.ResourceManager.GetString("RandomBotStrTip");
+
+ //链表,存放自选因子
+ private Image hasSelectMap = new Image();
+ private List hasSelectBanFactor = new List(5);
+ private List hasSelectFactor = new List();
+ private Image hasSelectCommander = new Image();
+
+ //初始化工具
+ readonly RandomKit rk = new RandomKit();
+ string factorDir = Dictionary.FilePath.factorDir;
+ string mapDir = Dictionary.FilePath.mapDir;
+ string commanderDir = Dictionary.FilePath.commanderDir;
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public HubSoloModeWindow()
+ {
+ InitializeComponent();
+ this.DataContext = this;
+ }
+
+
+ //是否允许随机AI逻辑
+ private bool _isRandAI;
+ public bool isRandAI
+ {
+ get { return _isRandAI; }
+ set
+ {
+ _isRandAI = value;
+ RaisePropertyChanged(nameof(isRandAI));
+ }
+ }
+
+ //玩家名响应相关逻辑
+ private string _playName;
+ public string playName
+ {
+ get { return _playName; }
+ set
+ {
+ _playName = value;
+ RaisePropertyChanged(nameof(playName));
+ }
+ }
+
+ //模式选择(3因子模式,5因子模式)数据
+ private string _modeName = Dictionary.I18n.Lang.ResourceManager.GetString("ThreeMutatorsMode");
+ public string modeName
+ {
+ get { return _modeName; }
+ set
+ {
+ _modeName = value;
+ RaisePropertyChanged(nameof(_modeName));
+ }
+ }
+
+ //分数响应相关逻辑
+ private int _score = 0;
+ public int score
+ {
+ get { return _score; }
+ set
+ {
+ _score = value;
+ RaisePropertyChanged(nameof(score));
+ }
+ }
+
+ //是否随机AI的处理逻辑
+ private string IsRandAIFunc()
+ {
+ if (isRandAI)
+ {
+ Random rand = new Random();
+ int number = rand.Next(0, FileData.botInfo.Count);
+ return Dictionary.I18n.Lang.ResourceManager.GetString(FileData.botInfo[number]);
+ }
+ else
+ {
+ return Dictionary.I18n.Lang.ResourceManager.GetString("RandomBotStrTip");
+ }
+ }
+
+ private void Button_Reset_Click(object sender, RoutedEventArgs e)
+ {
+ ResetFunc();
+ }
+
+ public void ResetFunc()
+ {
+ Warn.Text = "";
+ MapTip.Text = "";
+ ModeBox.IsEnabled = true;
+ RandStartBtn.IsEnabled = true;
+ SetRandMapEnable(true);
+
+ hasSelectFactor.Clear();
+ ClearRandomFactor();
+ FlashHasSelectFactor();
+ Score.Text = "0";
+ _score = 0;
+
+ hasSelectBanFactor.Clear();
+ FlashHasSelectBanFactor();
+
+ hasSelectCommander = new Image();
+ clearRandomCommander();
+ FlashHasSelectCommander();
+
+ hasSelectMap = new Image();
+ ClearRandomMaps();
+ FlashHasSelectMap();
+
+ MapLabel.Foreground = Brushes.Black;
+ FreeLabel.Foreground = Brushes.Black;
+ OldCmdrLabel.Foreground = Brushes.Black;
+ NewCmdrLabel.Foreground = Brushes.Black;
+ }
+
+
+
+ //开始随机事件响应
+ private void Button_Random_Click(object sender, RoutedEventArgs e)
+ {
+ ModeBox.IsEnabled = false;
+ RandStartBtn.IsEnabled = false;
+ ShowRandomMaps();
+ }
+
+ //随机地图显示清除
+ private void ClearRandomMaps()
+ {
+ MapImg1.Source = new BitmapImage();
+ MapImg2.Source = new BitmapImage();
+ MapImg3.Source = new BitmapImage();
+ MapName1.Text = "";
+ MapName2.Text = "";
+ MapName3.Text = "";
+ }
+
+ //返回主页事件响应
+ private void Button_BackMain_Click(object sender, RoutedEventArgs e)
+ {
+ this.NavigationService.GoBack();
+ }
+
+ //随机地图显示
+ private void ShowRandomMaps()
+ {
+ hasSelectMap = new Image();
+ FlashHasSelectMap();
+ List randNums = rk.GenerateXRandomNum(3, FileData.hubMapsInfo.Count);
+ MapImg1.Source = new BitmapImage(new Uri(mapDir + FileData.hubMapsInfo[randNums[0]] + ".png", UriKind.Relative));
+ MapImg2.Source = new BitmapImage(new Uri(mapDir + FileData.hubMapsInfo[randNums[1]] + ".png", UriKind.Relative));
+ MapImg3.Source = new BitmapImage(new Uri(mapDir + FileData.hubMapsInfo[randNums[2]] + ".png", UriKind.Relative));
+ MapName1.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.hubMapsInfo[randNums[0]]);
+ MapName2.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.hubMapsInfo[randNums[1]]);
+ MapName3.Text = Dictionary.I18n.Lang.ResourceManager.GetString(FileData.hubMapsInfo[randNums[2]]);
+ MapLabel.Foreground = Brushes.Red;
+ }
+
+ //点击地图图片事件响应
+ private void Maps_MouseDown(object sender, MouseEventArgs e)
+ {
+ MapTip.Text = "";
+ Image selectMap = (Image)sender;
+ if (selectMap != null)
+ {
+ hasSelectMap = selectMap;
+ }
+ FlashHasSelectMap();
+ }
+
+ //取消当前选择的地图事件响应(Unused)
+ private void CancelMap_MouseDown(Object sender, RoutedEventArgs e)
+ {
+ Image cancelMap = (Image)sender;
+ if (cancelMap != null)
+ {
+ hasSelectMap = new Image();
+ }
+ else { return; }
+ FlashHasSelectMap();
+ }
+
+ //刷新选择的地图
+ private void FlashHasSelectMap()
+ {
+ HasSelectMap.Source = hasSelectMap.Source;
+ MapTip.Text = "";
+ if (hasSelectMap.Source != null)
+ {
+ var currentMapName = (hasSelectMap.Source as BitmapImage).UriSource.ToString()
+ .Replace("/LiaoTian_Cup;component/Resources/maps/", "").Replace(".png", "");
+ if (!string.IsNullOrEmpty(currentMapName))
+ {
+ MapTip.Text = Dictionary.I18n.Lang.ResourceManager.GetString(currentMapName);
+ }
+ else
+ {
+ MapTip.Text = "";
+ }
+ }
+ }
+
+ //确认地图按钮事件响应
+ private void Button_MapConfirm_Click(object sender, RoutedEventArgs e)
+ {
+ if (hasSelectMap == null || hasSelectMap.Source == null || hasSelectMap.Source.Equals(""))
+ {
+ MapTip.Text = Dictionary.I18n.Lang.ResourceManager.GetString("MapWarn");
+ return;
+ }
+ SetRandMapEnable(false);
+ ShowRandomFactor();
+ RandomCommanderInfo();
+
+ MapLabel.Foreground = Brushes.Gray;
+ FreeLabel.Foreground = Brushes.Red;
+ OldCmdrLabel.Foreground = Brushes.Red;
+ NewCmdrLabel.Foreground = Brushes.Red;
+ }
+
+ //显示最多10个随机选择因子
+ private void ShowRandomFactor()
+ {
+ var factorListClone = FileData.hubFactorCostList.DeepClone();
+
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("ThreeMutatorsMode")))
+ {
+ for (int i = 0; i < factorListClone.Count; i++)
+ {
+ // 不出现cost大于6的因子
+ if (Convert.ToInt32(factorListClone[i][2]) > 6)
+ {
+ factorListClone.RemoveAt(i);
+ i--;
+ }
+ }
+ List randNum = rk.GenerateXRandomNum(6, factorListClone.Count);
+
+ //相对路径URI显示6个因子的图片
+ SelectFactor1.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum[0]][1] + ".png", UriKind.Relative));
+ SelectFactor2.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum[1]][1] + ".png", UriKind.Relative));
+ SelectFactor3.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum[2]][1] + ".png", UriKind.Relative));
+ SelectFactor4.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum[3]][1] + ".png", UriKind.Relative));
+ SelectFactor5.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum[4]][1] + ".png", UriKind.Relative));
+ SelectFactor6.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum[5]][1] + ".png", UriKind.Relative));
+ }
+ else if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("FiveMutatorsMode")))
+ {
+ //3% 18% 79%
+ SortedSet randNum = new SortedSet();
+ while (randNum.Count < 10)
+ {
+ int num = rk.GenerateRandomFromNumToNum(1, 101);
+ if (num <= 3)
+ {
+ randNum.Add(rk.GenerateRandomFromNumToNum(0, 8));
+ continue;
+ }
+ if (num <= 19)
+ {
+ randNum.Add(rk.GenerateRandomFromNumToNum(8, 25));
+ continue;
+ }
+ randNum.Add(rk.GenerateRandomFromNumToNum(25, 63));
+ }
+
+ SelectFactor1.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(0)][1] + ".png", UriKind.Relative));
+ SelectFactor2.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(1)][1] + ".png", UriKind.Relative));
+ SelectFactor3.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(2)][1] + ".png", UriKind.Relative));
+ SelectFactor4.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(3)][1] + ".png", UriKind.Relative));
+ SelectFactor5.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(4)][1] + ".png", UriKind.Relative));
+ SelectFactor6.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(5)][1] + ".png", UriKind.Relative));
+ SelectFactor7.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(6)][1] + ".png", UriKind.Relative));
+ SelectFactor8.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(7)][1] + ".png", UriKind.Relative));
+ SelectFactor9.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(8)][1] + ".png", UriKind.Relative));
+ SelectFactor10.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(9)][1] + ".png", UriKind.Relative));
+ }
+ }
+
+
+ //因子总分数计算
+ private void CalFactorScore(Image img)
+ {
+
+ var selectName = (img.Source as BitmapImage).UriSource.ToString()
+ .Replace("/LiaoTian_Cup;component/Resources/factor/", "").Replace(".png", "");
+
+ for (int i = 0; i < FileData.hubFactorCostList.Count; i++)
+ {
+ if (FileData.hubFactorCostList[i][1].Equals(selectName))
+ {
+ _score += Convert.ToInt32(FileData.hubFactorCostList[i][2]);
+ Score.Text = _score.ToString();
+ break;
+ }
+ }
+ }
+
+ //左键点击自选因子事件响应
+ private void Factor_MouseDown(object sender, RoutedEventArgs e)
+ {
+ Warn.Text = "";
+ Image selectFactor = (Image)sender;
+ if (selectFactor != null)
+ {
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("ThreeMutatorsMode")) && hasSelectFactor != null && !hasSelectFactor.Contains(selectFactor) && !hasSelectBanFactor.Contains(selectFactor))
+ {
+ if (hasSelectFactor.Count < 3)
+ {
+ hasSelectFactor.Add(selectFactor);
+ CalFactorScore(selectFactor);
+ }
+
+ }
+
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("FiveMutatorsMode")) && hasSelectFactor != null && !hasSelectFactor.Contains(selectFactor) && !hasSelectBanFactor.Contains(selectFactor))
+ {
+ if (hasSelectFactor.Count < 5)
+ {
+ hasSelectFactor.Add(selectFactor);
+ CalFactorScore(selectFactor);
+ }
+
+ }
+ }
+ FlashHasSelectFactor();
+ }
+
+ //右键点击自选因子以ban掉
+ private void Ban_MouseDown(object sender, RoutedEventArgs e)
+ {
+ Warn.Text = "";
+ Image selectFactor = (Image)sender;
+ if (selectFactor != null)
+ {
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("ThreeMutatorsMode")) && hasSelectBanFactor != null && !hasSelectBanFactor.Contains(selectFactor) && !hasSelectFactor.Contains(selectFactor))
+ {
+ if (hasSelectBanFactor.Count < 3)
+ {
+ hasSelectBanFactor.Add(selectFactor);
+ }
+
+ }
+
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("FiveMutatorsMode")) && hasSelectBanFactor != null && !hasSelectBanFactor.Contains(selectFactor) && !hasSelectFactor.Contains(selectFactor))
+ {
+ if (hasSelectBanFactor.Count < 5)
+ {
+ hasSelectBanFactor.Add(selectFactor);
+ }
+
+ }
+ }
+ FlashHasSelectBanFactor();
+ }
+
+ //点击已选择的自选因子 取消事件响应
+ private void CancelFactor_MouseDown(object sender, RoutedEventArgs e)
+ {
+ Image cancelFactor = (Image)sender;
+ if (cancelFactor != null)
+ {
+ for (int i = 0; i < hasSelectFactor.Count; i++)
+ {
+ if (hasSelectFactor[i] != null
+ && hasSelectFactor[i].Source.ToString().Equals(cancelFactor.Source.ToString()))
+ {
+ hasSelectFactor.RemoveAt(i);
+ }
+ }
+
+ //因子总分数计算
+ var selectName = (cancelFactor.Source as BitmapImage).UriSource.ToString()
+ .Replace("/LiaoTian_Cup;component/Resources/factor/", "").Replace(".png", "");
+
+ for (int i = 0; i < FileData.hubFactorCostList.Count; i++)
+ {
+ if (FileData.hubFactorCostList[i][1].Equals(selectName))
+ {
+ _score -= Convert.ToInt32(FileData.hubFactorCostList[i][2]);
+ Score.Text = _score.ToString();
+ break;
+ }
+ }
+ }
+ else { return; }
+ FlashHasSelectFactor();
+ }
+
+ //点击已选择的Ban选因子 取消事件响应
+ private void CancelBan_MouseDown(object sender, RoutedEventArgs e)
+ {
+ Image cancelFactor = (Image)sender;
+ if (cancelFactor != null)
+ {
+ for (int i = 0; i < hasSelectBanFactor.Count; i++)
+ {
+ if (hasSelectBanFactor[i] != null
+ && hasSelectBanFactor[i].Source.ToString().Equals(cancelFactor.Source.ToString()))
+ {
+ hasSelectBanFactor.RemoveAt(i);
+ }
+ }
+ }
+ else { return; }
+ FlashHasSelectBanFactor();
+ }
+
+
+ //刷新已选择的因子
+ private void FlashHasSelectFactor()
+ {
+ if (hasSelectFactor != null)
+ {
+ HasSelectFactor1.Source = hasSelectFactor.Count < 1 ? null : hasSelectFactor[0].Source;
+ HasSelectFactor2.Source = hasSelectFactor.Count < 2 ? null : hasSelectFactor[1].Source;
+ HasSelectFactor3.Source = hasSelectFactor.Count < 3 ? null : hasSelectFactor[2].Source;
+
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("FiveMutatorsMode")))
+ {
+ HasSelectFactor4.Source = hasSelectFactor.Count < 4 ? null : hasSelectFactor[3].Source;
+ HasSelectFactor5.Source = hasSelectFactor.Count < 5 ? null : hasSelectFactor[4].Source;
+ }
+ }
+ }
+
+ //刷新已选择的BAN因子
+ private void FlashHasSelectBanFactor()
+ {
+ if (hasSelectBanFactor != null)
+ {
+ HasSelectBanFactor1.Source = hasSelectBanFactor.Count < 1 ? null : hasSelectBanFactor[0].Source;
+ HasSelectBanFactor2.Source = hasSelectBanFactor.Count < 2 ? null : hasSelectBanFactor[1].Source;
+ HasSelectBanFactor3.Source = hasSelectBanFactor.Count < 3 ? null : hasSelectBanFactor[2].Source;
+
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("FiveMutatorsMode")))
+ {
+ HasSelectBanFactor4.Source = hasSelectBanFactor.Count < 4 ? null : hasSelectBanFactor[3].Source;
+ HasSelectBanFactor5.Source = hasSelectBanFactor.Count < 5 ? null : hasSelectBanFactor[4].Source;
+ }
+ }
+ }
+
+
+
+ //随机先出和后出指挥官处理逻辑
+ private void RandomCommanderInfo()
+ {
+ List beforeRandNum = rk.GenerateXRandomNum(4, FileData.hubBeforeCommanderInfo.Count);
+ List afterRandNum = rk.GenerateXRandomNum(2, FileData.hubAfterCommanderInfo.Count);
+
+ //相对路径URI指定指挥官图片来源
+ BeforeCommander1.Source = new BitmapImage(new Uri(commanderDir + FileData.hubBeforeCommanderInfo[beforeRandNum[0]] + ".png", UriKind.Relative));
+ BeforeCommander2.Source = new BitmapImage(new Uri(commanderDir + FileData.hubBeforeCommanderInfo[beforeRandNum[1]] + ".png", UriKind.Relative));
+ BeforeCommander3.Source = new BitmapImage(new Uri(commanderDir + FileData.hubBeforeCommanderInfo[beforeRandNum[2]] + ".png", UriKind.Relative));
+ BeforeCommander4.Source = new BitmapImage(new Uri(commanderDir + FileData.hubBeforeCommanderInfo[beforeRandNum[3]] + ".png", UriKind.Relative));
+
+ AfterCommander1.Source = new BitmapImage(new Uri(commanderDir + FileData.hubAfterCommanderInfo[afterRandNum[0]] + ".png", UriKind.Relative));
+ AfterCommander2.Source = new BitmapImage(new Uri(commanderDir + FileData.hubAfterCommanderInfo[afterRandNum[1]] + ".png", UriKind.Relative));
+ }
+
+ //点击自选指挥官事件响应
+ private void Commander_MouseDown(object sender, RoutedEventArgs e)
+ {
+ Warn.Text = "";
+ Image selectCommander = (Image)sender;
+ if (selectCommander != null)
+ {
+ hasSelectCommander = selectCommander;
+ }
+ FlashHasSelectCommander();
+ }
+
+ //取消当前选择的指挥官事件响应
+ private void CancelCommander_MouseDown(Object sender, RoutedEventArgs e)
+ {
+ Image cancelCommander = (Image)sender;
+ if (cancelCommander != null)
+ {
+ hasSelectCommander = new Image();
+ }
+ else { return; }
+ FlashHasSelectCommander();
+ }
+
+ //刷新选择的指挥官
+ private void FlashHasSelectCommander()
+ {
+ if (hasSelectCommander != null)
+ {
+ HasSelectCommander.Source = hasSelectCommander.Source;
+ }
+ }
+
+
+
+ //确认按钮事件响应
+ private void Button_Confirm_Click(object sender, RoutedEventArgs e)
+ {
+ botName = IsRandAIFunc();
+ if (hasSelectFactor != null)
+ {
+ if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("ThreeMutatorsMode")) && hasSelectFactor != null && hasSelectFactor.Count != 3)
+ {
+ Warn.Text = Dictionary.I18n.Lang.ResourceManager.GetString("FreeMutatorsWarn1");
+ return;
+ }
+ else if (_modeName.Equals(Dictionary.I18n.Lang.ResourceManager.GetString("FiveMutatorsMode")) && hasSelectFactor != null && hasSelectFactor.Count != 5)
+ {
+ Warn.Text = Dictionary.I18n.Lang.ResourceManager.GetString("FreeMutatorsWarn2");
+ return;
+ }
+
+ }
+
+ if (hasSelectCommander == null || hasSelectCommander.Source == null || hasSelectCommander.Source.Equals(""))
+ {
+ Warn.Text = Dictionary.I18n.Lang.ResourceManager.GetString("CommanderWarn2");
+ return;
+ }
+ else
+ {
+ Warn.Text = "";
+ }
+ this.NavigationService.Navigate(new ShowHubSoloDetail(this));
+ }
+
+
+
+ //地图相关控件的可用性设置
+ private void SetRandMapEnable(bool enable)
+ {
+ MapImg1.IsEnabled = enable;
+ MapImg2.IsEnabled = enable;
+ MapImg3.IsEnabled = enable;
+ HasSelectMap.IsEnabled = enable;
+ RandStartBtn.IsEnabled = enable;
+ MapConfirmBtn.IsEnabled = enable;
+ }
+
+ //自选因子清除
+ private void ClearRandomFactor()
+ {
+ //相对路径URI显示10个因子的图片
+ SelectFactor1.Source = new BitmapImage();
+ SelectFactor2.Source = new BitmapImage();
+ SelectFactor3.Source = new BitmapImage();
+ SelectFactor4.Source = new BitmapImage();
+ SelectFactor5.Source = new BitmapImage();
+ SelectFactor6.Source = new BitmapImage();
+ SelectFactor7.Source = new BitmapImage();
+ SelectFactor8.Source = new BitmapImage();
+ SelectFactor9.Source = new BitmapImage();
+ SelectFactor10.Source = new BitmapImage();
+ }
+
+ //随机先出和后出指挥官清除显示
+ private void clearRandomCommander()
+ {
+ //相对路径URI指定指挥官图片来源
+ BeforeCommander1.Source = new BitmapImage();
+ BeforeCommander2.Source = new BitmapImage();
+ BeforeCommander3.Source = new BitmapImage();
+ BeforeCommander4.Source = new BitmapImage();
+
+ AfterCommander1.Source = new BitmapImage();
+ AfterCommander2.Source = new BitmapImage();
+ }
+
+ //实现绑定响应接口
+ private void RaisePropertyChanged(string propertyName)
+ {
+ PropertyChangedEventHandler handler = PropertyChanged;
+ if (handler != null)
+ {
+ handler(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+}
diff --git a/LiaoTian_Cup/Mode/NegativeFactorWindow.xaml.cs b/LiaoTian_Cup/Mode/NegativeFactorWindow.xaml.cs
index 6e19e3f..2c1db41 100644
--- a/LiaoTian_Cup/Mode/NegativeFactorWindow.xaml.cs
+++ b/LiaoTian_Cup/Mode/NegativeFactorWindow.xaml.cs
@@ -159,6 +159,7 @@ private void Button_BackMain_Click(object sender, RoutedEventArgs e)
private void Button_Random_Click(object sender, RoutedEventArgs e)
{
ModeBox.IsEnabled = false;
+ RandStartBtn.IsEnabled = false;
ShowRandomMaps();
}
@@ -525,6 +526,7 @@ private void Button_Reset_Click(object sender, RoutedEventArgs e)
public void ResetFunc()
{
ModeBox.IsEnabled = true;
+ RandStartBtn.IsEnabled = true;
SetRandMapEnable(true);
SetBaseFactorEnable(true);
diff --git a/LiaoTian_Cup/Mode/RandomMutationWindow.xaml.cs b/LiaoTian_Cup/Mode/RandomMutationWindow.xaml.cs
index 3704bff..9330436 100644
--- a/LiaoTian_Cup/Mode/RandomMutationWindow.xaml.cs
+++ b/LiaoTian_Cup/Mode/RandomMutationWindow.xaml.cs
@@ -158,6 +158,7 @@ private string IsRandAIFunc()
private void Button_Random_Click(object sender, RoutedEventArgs e)
{
ChkDoubles.IsEnabled = false;
+ RandStartBtn.IsEnabled = false;
reflashSelectItem();
RandomMutationFunc();
}
@@ -316,6 +317,7 @@ public void ResetFunc()
CommanderWarn.Text = "";
ChkDoubles.IsEnabled = true;
isDoubles = false;
+ RandStartBtn.IsEnabled = true;
MutationBox.Text = string.Empty;
MapBox.Text = string.Empty;
diff --git a/LiaoTian_Cup/Mode/SingleModeWindow.xaml.cs b/LiaoTian_Cup/Mode/SingleModeWindow.xaml.cs
index dcf608e..a0fe4dc 100644
--- a/LiaoTian_Cup/Mode/SingleModeWindow.xaml.cs
+++ b/LiaoTian_Cup/Mode/SingleModeWindow.xaml.cs
@@ -112,6 +112,7 @@ public void ResetFunc()
Warn.Text = "";
MapTip.Text = "";
ModeBox.IsEnabled = true;
+ RandStartBtn.IsEnabled = true;
SetRandMapEnable(true);
hasSelectFactor.Clear();
@@ -143,6 +144,7 @@ public void ResetFunc()
private void Button_Random_Click(object sender, RoutedEventArgs e)
{
ModeBox.IsEnabled = false;
+ RandStartBtn.IsEnabled = false;
ShowRandomMaps();
}
@@ -278,16 +280,12 @@ private void ShowRandomFactor()
randNum.Add(rk.GenerateRandomFromNumToNum(0, 3));
continue;
}
- if (num > 3 && num <= 21)
+ if (num <= 21)
{
randNum.Add(rk.GenerateRandomFromNumToNum(3, 15));
continue;
}
- if (num > 21)
- {
- randNum.Add(rk.GenerateRandomFromNumToNum(15, 48));
- continue;
- }
+ randNum.Add(rk.GenerateRandomFromNumToNum(15, 48));
}
SelectFactor1.Source = new BitmapImage(new Uri(factorDir + factorListClone[randNum.ElementAt(0)][1] + ".png", UriKind.Relative));
diff --git a/LiaoTian_Cup/Mode/USuckModeWindow.xaml.cs b/LiaoTian_Cup/Mode/USuckModeWindow.xaml.cs
index 63ab0ee..9222f1a 100644
--- a/LiaoTian_Cup/Mode/USuckModeWindow.xaml.cs
+++ b/LiaoTian_Cup/Mode/USuckModeWindow.xaml.cs
@@ -100,6 +100,7 @@ public void ResetFunc()
{
Warn.Text = "";
ModeBox.IsEnabled = true;
+ RandStartBtn.IsEnabled = true;
SetRandMapEnable(true);
SetBaseFactorEnable(true);
@@ -133,6 +134,7 @@ public void ResetFunc()
private void Button_Random_Click(object sender, RoutedEventArgs e)
{
ModeBox.IsEnabled = false;
+ RandStartBtn.IsEnabled = false;
ShowRandomMaps();
}
diff --git a/LiaoTian_Cup/Overview/ShowHubSoloDetail.xaml b/LiaoTian_Cup/Overview/ShowHubSoloDetail.xaml
new file mode 100644
index 0000000..7660b80
--- /dev/null
+++ b/LiaoTian_Cup/Overview/ShowHubSoloDetail.xaml
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LiaoTian_Cup/Overview/ShowHubSoloDetail.xaml.cs b/LiaoTian_Cup/Overview/ShowHubSoloDetail.xaml.cs
new file mode 100644
index 0000000..a43a1c8
--- /dev/null
+++ b/LiaoTian_Cup/Overview/ShowHubSoloDetail.xaml.cs
@@ -0,0 +1,51 @@
+using System.Windows;
+using System.Windows.Controls;
+
+namespace LiaoTian_Cup
+{
+ ///
+ /// ShowSingleDetail.xaml 的交互逻辑
+ ///
+ public partial class ShowHubSoloDetail : Page
+ {
+ private HubSoloModeWindow m_parent;
+ public ShowHubSoloDetail(HubSoloModeWindow parent)
+ {
+ m_parent = parent;
+ InitializeComponent();
+ showSelect();
+ }
+
+ public ShowHubSoloDetail()
+ {
+ InitializeComponent();
+ }
+
+ //展示已选择的因子
+ private void showSelect()
+ {
+ //上个窗口的数据传递至本窗口
+ PlayerName.Text = m_parent.PlayerName.Text;
+ modeName.Text = m_parent.modeName;
+
+ HasSelectMap.Source = m_parent.HasSelectMap.Source;
+ MapTip.Text = m_parent.MapTip.Text;
+
+ HasSelectFactor1.Source = m_parent.HasSelectFactor1.Source;
+ HasSelectFactor2.Source = m_parent.HasSelectFactor2.Source;
+ HasSelectFactor3.Source = m_parent.HasSelectFactor3.Source;
+ HasSelectFactor4.Source = m_parent.HasSelectFactor4.Source;
+ HasSelectFactor5.Source = m_parent.HasSelectFactor5.Source;
+ Score.Text = m_parent.Score.Text;
+
+ HasSelectCommander.Source = m_parent.HasSelectCommander.Source;
+
+ AIBox.Text = m_parent.botName;
+ }
+
+ private void Button_Back_Click(object sender, RoutedEventArgs e)
+ {
+ this.NavigationService.GoBack();
+ }
+ }
+}
diff --git a/LiaoTian_Cup/Resources/database.db b/LiaoTian_Cup/Resources/database.db
index e98dfb9..6294edc 100644
Binary files a/LiaoTian_Cup/Resources/database.db and b/LiaoTian_Cup/Resources/database.db differ
diff --git a/LiaoTian_Cup/Resources/factor/nexusbattlefield.png b/LiaoTian_Cup/Resources/factor/nexusbattlefield.png
new file mode 100644
index 0000000..78fd171
Binary files /dev/null and b/LiaoTian_Cup/Resources/factor/nexusbattlefield.png differ
diff --git "a/LiaoTian_Cup/Resources/factor/\346\227\266\347\251\272\346\210\230\345\234\272.png" "b/LiaoTian_Cup/Resources/factor/\346\227\266\347\251\272\346\210\230\345\234\272.png"
new file mode 100644
index 0000000..eb93531
Binary files /dev/null and "b/LiaoTian_Cup/Resources/factor/\346\227\266\347\251\272\346\210\230\345\234\272.png" differ
diff --git "a/LiaoTian_Cup/Resources/maps/\351\223\201\347\224\262\351\222\242\346\213\263.png" "b/LiaoTian_Cup/Resources/maps/\351\223\201\347\224\262\351\222\242\346\213\263.png"
new file mode 100644
index 0000000..055b49c
Binary files /dev/null and "b/LiaoTian_Cup/Resources/maps/\351\223\201\347\224\262\351\222\242\346\213\263.png" differ
diff --git a/README.md b/README.md
index ae1f0f1..e2407a7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# LiaoTian_Cup
-[LiaoTian Cup](https://github.com/B1ackSand/LiaoTianCup) is an unofficial competition of StarCraftII.
+[LiaoTian Cup](https://qm.qq.com/q/nS395vkauA) is an unofficial competition of StarCraftII.
This project is a competition tool created for my friend, based on WPF (C#/.NET 6.0).
@@ -32,3 +32,4 @@ This project is a competition tool created for my friend, based on WPF (C#/.NET
+ 根据GPL3许可证协议你可以自行修改源代码,但无论以何种方式修改或者使用代码,都需要开源。
+ 由于此工具为聊天杯 - “星际争霸2”非官方比赛工具,开源目的是供社区学习使用和软件逻辑公开。
+ 禁止任何人通过修改工具代码,在聊天杯比赛中达成利益目的。
+