Compare commits
51 Commits
v1.12.2
...
e6a2d26671
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6a2d26671 | ||
| fafff8090f | |||
|
|
b37016a49c | ||
| 6e8c1d4a15 | |||
| 92f5289576 | |||
|
|
c62b46850c | ||
| 3d160f9b90 | |||
| 79efb9bd51 | |||
| ef3c85c6d3 | |||
|
|
e61fc45ad2 | ||
| de53f682f0 | |||
| 3ddfa189e9 | |||
| ddc588c792 | |||
| 984afbdf0b | |||
| 56a72ad940 | |||
| b62c539bdd | |||
| d9272acb44 | |||
| 5c89eb5a58 | |||
| 583041c295 | |||
| ded10d175f | |||
| 380682d175 | |||
| 055bddc22c | |||
| 5b2442591f | |||
| 3eb1a08697 | |||
| 79283f4039 | |||
| 497b828f2d | |||
| 41dc3e8fc4 | |||
| eb1be4cdb8 | |||
| d4655c1e50 | |||
| b1debe0aab | |||
| f5780a4366 | |||
| 101e3c5ffc | |||
| 97b3a57ee1 | |||
| 0788a32158 | |||
| f553ddddd8 | |||
| 07fb477c3a | |||
| f8b920100d | |||
| cfdca6f031 | |||
| 085669e43a | |||
| eda70a2aae | |||
| c2be92c41b | |||
| 4bcd23389d | |||
| 2a51fcb47d | |||
| 2c2f05c5b2 | |||
| ab92469f11 | |||
| 749f324f7d | |||
| 1c49c41b71 | |||
| 1993d3d295 | |||
| dce7e54675 | |||
| 41c644f2af | |||
| 78be273c7a |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 37 KiB |
BIN
Doc/Screenshots-en/22-Proxy.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
Doc/Screenshots-en/23-SceneTag.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
Doc/Screenshots-en/24-Weather.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
Doc/Screenshots-en/25-Settings.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 41 KiB |
BIN
Doc/Screenshots/22-Proxy.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
Doc/Screenshots/23-SceneTag.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
Doc/Screenshots/24-Weather.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
Doc/Screenshots/25-Settings.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
@@ -34,6 +34,15 @@ The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-openco
|
||||
|
||||
## Update log
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
|
||||
@@ -35,6 +35,15 @@ GCG поддерживает 简体中文 (китайский упр.), 繁體
|
||||
|
||||
## Лог обновлений
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
|
||||
@@ -35,6 +35,15 @@
|
||||
|
||||
## 更新概要
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
|
||||
@@ -34,6 +34,15 @@
|
||||
|
||||
## 更新日誌
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
|
||||
@@ -76,6 +76,15 @@
|
||||
<setting name="IsUpgraded" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="IsHotkeyEenabled" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="AutoStartProxy" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="WindowOpacity" serializeAs="String">
|
||||
<value>100</value>
|
||||
</setting>
|
||||
</GrasscutterTools.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
||||
202
Source/GrasscutterTools/Eavesdrop/Certifier.cs
Normal file
@@ -0,0 +1,202 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace Eavesdrop;
|
||||
|
||||
public sealed class Certifier : IDisposable
|
||||
{
|
||||
private readonly X509Store _rootStore, _myStore;
|
||||
private readonly IDictionary<string, X509Certificate2> _certificateCache;
|
||||
|
||||
public string Issuer { get; }
|
||||
public string CertificateAuthorityName { get; }
|
||||
|
||||
public DateTime NotAfter { get; set; }
|
||||
public DateTime NotBefore { get; set; }
|
||||
public int KeyLength { get; set; } = 1024;
|
||||
public bool IsCachingSignedCertificates { get; set; }
|
||||
|
||||
public X509Certificate2? Authority { get; private set; }
|
||||
|
||||
public Certifier()
|
||||
: this("Eavesdrop")
|
||||
{ }
|
||||
public Certifier(string issuer)
|
||||
: this(issuer, $"{issuer} Root Certificate Authority", StoreLocation.CurrentUser)
|
||||
{ }
|
||||
public Certifier(string issuer, string certificateAuthorityName)
|
||||
: this(issuer, certificateAuthorityName, StoreLocation.CurrentUser)
|
||||
{ }
|
||||
public Certifier(string issuer, string certificateAuthorityName, StoreLocation location)
|
||||
{
|
||||
_myStore = new X509Store(StoreName.My, location);
|
||||
_rootStore = new X509Store(StoreName.Root, location);
|
||||
_certificateCache = new Dictionary<string, X509Certificate2>();
|
||||
|
||||
NotBefore = DateTime.Now;
|
||||
NotAfter = NotBefore.AddMonths(1);
|
||||
|
||||
Issuer = issuer;
|
||||
CertificateAuthorityName = certificateAuthorityName;
|
||||
}
|
||||
|
||||
public bool CreateTrustedRootCertificate()
|
||||
{
|
||||
return (Authority = InstallCertificate(_rootStore, CertificateAuthorityName)) != null;
|
||||
}
|
||||
public bool DestroyTrustedRootCertificate()
|
||||
{
|
||||
return DestroyCertificates(_rootStore);
|
||||
}
|
||||
public bool ExportTrustedRootCertificate(string path)
|
||||
{
|
||||
X509Certificate2? rootCertificate = InstallCertificate(_rootStore, CertificateAuthorityName);
|
||||
|
||||
path = Path.GetFullPath(path);
|
||||
if (rootCertificate != null)
|
||||
{
|
||||
byte[] data = rootCertificate.Export(X509ContentType.Cert);
|
||||
File.WriteAllBytes(path, data);
|
||||
}
|
||||
return File.Exists(path);
|
||||
}
|
||||
|
||||
public X509Certificate2? GenerateCertificate(string certificateName)
|
||||
{
|
||||
return InstallCertificate(_myStore, certificateName);
|
||||
}
|
||||
public X509Certificate2 CreateCertificate(string subjectName, string alternateName)
|
||||
{
|
||||
using var rsa = RSA.Create(KeyLength);
|
||||
var certificateRequest = new CertificateRequest(subjectName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
|
||||
if (Authority == null)
|
||||
{
|
||||
certificateRequest.CertificateExtensions.Add(new X509BasicConstraintsExtension(true, false, 0, true));
|
||||
certificateRequest.CertificateExtensions.Add(new X509SubjectKeyIdentifierExtension(certificateRequest.PublicKey, false));
|
||||
|
||||
using X509Certificate2 certificate = certificateRequest.CreateSelfSigned(NotBefore.ToUniversalTime(), NotAfter.ToUniversalTime());
|
||||
|
||||
certificate.FriendlyName = alternateName;
|
||||
return new X509Certificate2(certificate.Export(X509ContentType.Pfx, string.Empty), string.Empty, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
|
||||
}
|
||||
else
|
||||
{
|
||||
var sanBuilder = new SubjectAlternativeNameBuilder();
|
||||
sanBuilder.AddDnsName(alternateName);
|
||||
|
||||
certificateRequest.CertificateExtensions.Add(sanBuilder.Build());
|
||||
certificateRequest.CertificateExtensions.Add(new X509BasicConstraintsExtension(false, false, 0, false));
|
||||
certificateRequest.CertificateExtensions.Add(new X509SubjectKeyIdentifierExtension(certificateRequest.PublicKey, false));
|
||||
|
||||
using X509Certificate2 certificate = certificateRequest.Create(Authority, Authority.NotBefore, Authority.NotAfter, Guid.NewGuid().ToByteArray());
|
||||
using X509Certificate2 certificateWithPrivateKey = certificate.CopyWithPrivateKey(rsa);
|
||||
|
||||
certificateWithPrivateKey.FriendlyName = alternateName;
|
||||
return new X509Certificate2(certificateWithPrivateKey.Export(X509ContentType.Pfx, string.Empty), string.Empty, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
|
||||
}
|
||||
}
|
||||
private X509Certificate2? InstallCertificate(X509Store store, string certificateName)
|
||||
{
|
||||
if (_certificateCache.TryGetValue(certificateName, out X509Certificate2? certificate))
|
||||
{
|
||||
if (DateTime.Now >= certificate.NotAfter)
|
||||
{
|
||||
_certificateCache.Remove(certificateName);
|
||||
}
|
||||
else return certificate;
|
||||
}
|
||||
lock (store)
|
||||
{
|
||||
try
|
||||
{
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
string subjectName = $"CN={certificateName}, O={Issuer}";
|
||||
|
||||
certificate = FindCertificates(store, subjectName)?[0];
|
||||
if (certificate != null && DateTime.Now >= certificate.NotAfter)
|
||||
{
|
||||
if (Authority == null)
|
||||
{
|
||||
DestroyCertificates();
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
}
|
||||
else
|
||||
{
|
||||
store.Remove(certificate);
|
||||
}
|
||||
certificate = null;
|
||||
}
|
||||
|
||||
if (certificate == null)
|
||||
{
|
||||
certificate = CreateCertificate(subjectName, certificateName);
|
||||
if (certificate != null)
|
||||
{
|
||||
if (store == _rootStore || IsCachingSignedCertificates)
|
||||
{
|
||||
store.Add(certificate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return certificate;
|
||||
}
|
||||
catch { return certificate = null; }
|
||||
finally
|
||||
{
|
||||
store.Close();
|
||||
if (certificate != null && !_certificateCache.ContainsKey(certificateName))
|
||||
{
|
||||
_certificateCache.Add(certificateName, certificate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool DestroyCertificates(X509Store store)
|
||||
{
|
||||
lock (store)
|
||||
{
|
||||
try
|
||||
{
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
X509Certificate2Collection certificates = store.Certificates.Find(X509FindType.FindByIssuerName, Issuer, false);
|
||||
|
||||
store.RemoveRange(certificates);
|
||||
IEnumerable<string> subjectNames = certificates.Cast<X509Certificate2>().Select(c => c.GetNameInfo(X509NameType.SimpleName, false));
|
||||
|
||||
foreach (string subjectName in subjectNames)
|
||||
{
|
||||
if (!_certificateCache.ContainsKey(subjectName)) continue;
|
||||
_certificateCache.Remove(subjectName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch { return false; }
|
||||
finally { store.Close(); }
|
||||
}
|
||||
}
|
||||
public bool DestroyCertificates() => DestroyCertificates(_myStore) && DestroyCertificates(_rootStore);
|
||||
|
||||
private static X509Certificate2Collection? FindCertificates(X509Store store, string subjectName)
|
||||
{
|
||||
X509Certificate2Collection certificates = store.Certificates
|
||||
.Find(X509FindType.FindBySubjectDistinguishedName, subjectName, false);
|
||||
|
||||
return certificates.Count > 0 ? certificates : null;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_myStore.Close();
|
||||
_rootStore.Close();
|
||||
|
||||
_myStore.Dispose();
|
||||
_rootStore.Dispose();
|
||||
}
|
||||
}
|
||||
200
Source/GrasscutterTools/Eavesdrop/Eavesdropper.cs
Normal file
@@ -0,0 +1,200 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Eavesdrop.Network;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public static class Eavesdropper
|
||||
{
|
||||
private static TcpListener _listener;
|
||||
private static readonly object _stateLock;
|
||||
|
||||
public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e);
|
||||
|
||||
public static event AsyncEventHandler<RequestInterceptedEventArgs> RequestInterceptedAsync;
|
||||
private static async Task OnRequestInterceptedAsync(RequestInterceptedEventArgs e)
|
||||
{
|
||||
Task interceptedTask = RequestInterceptedAsync?.Invoke(null, e);
|
||||
if (interceptedTask != null)
|
||||
{
|
||||
await interceptedTask;
|
||||
}
|
||||
}
|
||||
|
||||
public static event AsyncEventHandler<ResponseInterceptedEventArgs> ResponseInterceptedAsync;
|
||||
private static async Task OnResponseInterceptedAsync(ResponseInterceptedEventArgs e)
|
||||
{
|
||||
Task interceptedTask = ResponseInterceptedAsync?.Invoke(null, e);
|
||||
if (interceptedTask != null)
|
||||
{
|
||||
await interceptedTask;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<string> Overrides { get; }
|
||||
public static bool IsRunning { get; private set; }
|
||||
public static Certifier Certifier { get; set; }
|
||||
|
||||
static Eavesdropper()
|
||||
{
|
||||
_stateLock = new object();
|
||||
|
||||
ServicePointManager.Expect100Continue = true;
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
|
||||
|
||||
Overrides = new List<string>();
|
||||
Certifier = new Certifier("Eavesdrop", "Eavesdrop Root Certificate Authority");
|
||||
}
|
||||
|
||||
public static void Terminate()
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
ResetMachineProxy();
|
||||
IsRunning = false;
|
||||
|
||||
if (_listener != null)
|
||||
{
|
||||
_listener.Stop();
|
||||
_listener = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void Initiate(int port)
|
||||
{
|
||||
Initiate(port, Interceptors.Default);
|
||||
}
|
||||
public static void Initiate(int port, Interceptors interceptors)
|
||||
{
|
||||
Initiate(port, interceptors, true);
|
||||
}
|
||||
public static void Initiate(int port, Interceptors interceptors, bool setSystemProxy)
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
Terminate();
|
||||
|
||||
_listener = new TcpListener(IPAddress.Any, port);
|
||||
_listener.Start();
|
||||
|
||||
IsRunning = true;
|
||||
|
||||
Task.Factory.StartNew(InterceptRequestAsync, TaskCreationOptions.LongRunning);
|
||||
if (setSystemProxy)
|
||||
{
|
||||
SetMachineProxy(port, interceptors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task InterceptRequestAsync()
|
||||
{
|
||||
while (IsRunning && _listener != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
TcpClient client = await _listener.AcceptTcpClientAsync().ConfigureAwait(false);
|
||||
Task handleClientAsync = HandleClientAsync(client);
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task HandleClientAsync(TcpClient client)
|
||||
{
|
||||
using var local = new EavesNode(Certifier, client);
|
||||
WebRequest request = await local.ReadRequestAsync().ConfigureAwait(false);
|
||||
if (request == null) return;
|
||||
|
||||
HttpContent requestContent = null;
|
||||
var requestArgs = new RequestInterceptedEventArgs(request);
|
||||
try
|
||||
{
|
||||
requestArgs.Content = requestContent = await local.ReadRequestContentAsync(request).ConfigureAwait(false);
|
||||
await OnRequestInterceptedAsync(requestArgs).ConfigureAwait(false);
|
||||
if (requestArgs.Cancel) return;
|
||||
|
||||
request = requestArgs.Request;
|
||||
if (requestArgs.Content != null)
|
||||
{
|
||||
await local.WriteRequestContentAsync(request, requestArgs.Content).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
requestContent?.Dispose();
|
||||
requestArgs.Content?.Dispose();
|
||||
}
|
||||
|
||||
WebResponse response = null;
|
||||
try { response = await request.GetResponseAsync().ConfigureAwait(false); }
|
||||
catch (WebException ex) { response = ex.Response; }
|
||||
catch (ProtocolViolationException)
|
||||
{
|
||||
response?.Dispose();
|
||||
response = null;
|
||||
}
|
||||
|
||||
if (response == null) return;
|
||||
HttpContent responseContent = null;
|
||||
var responseArgs = new ResponseInterceptedEventArgs(request, response);
|
||||
try
|
||||
{
|
||||
responseArgs.Content = responseContent = EavesNode.ReadResponseContent(response);
|
||||
await OnResponseInterceptedAsync(responseArgs).ConfigureAwait(false);
|
||||
if (responseArgs.Cancel) return;
|
||||
|
||||
await local.SendResponseAsync(responseArgs.Response, responseArgs.Content).ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
response.Dispose();
|
||||
responseArgs.Response.Dispose();
|
||||
|
||||
responseContent?.Dispose();
|
||||
responseArgs.Content?.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private static void ResetMachineProxy()
|
||||
{
|
||||
INETOptions.Overrides.Clear();
|
||||
INETOptions.IsIgnoringLocalTraffic = false;
|
||||
|
||||
INETOptions.HTTPAddress = null;
|
||||
INETOptions.HTTPSAddress = null;
|
||||
INETOptions.IsProxyEnabled = false;
|
||||
|
||||
INETOptions.Save();
|
||||
}
|
||||
private static void SetMachineProxy(int port, Interceptors interceptors)
|
||||
{
|
||||
foreach (string @override in Overrides)
|
||||
{
|
||||
if (INETOptions.Overrides.Contains(@override)) continue;
|
||||
INETOptions.Overrides.Add(@override);
|
||||
}
|
||||
|
||||
string address = ("127.0.0.1:" + port);
|
||||
if (interceptors.HasFlag(Interceptors.HTTP))
|
||||
{
|
||||
INETOptions.HTTPAddress = address;
|
||||
}
|
||||
if (interceptors.HasFlag(Interceptors.HTTPS))
|
||||
{
|
||||
INETOptions.HTTPSAddress = address;
|
||||
}
|
||||
INETOptions.IsProxyEnabled = true;
|
||||
INETOptions.IsIgnoringLocalTraffic = true;
|
||||
|
||||
INETOptions.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public class RequestInterceptedEventArgs : CancelEventArgs
|
||||
{
|
||||
private HttpWebRequest _httpRequest;
|
||||
|
||||
public HttpContent Content { get; set; }
|
||||
|
||||
private WebRequest _request;
|
||||
public WebRequest Request
|
||||
{
|
||||
get => _request;
|
||||
set
|
||||
{
|
||||
_request = value;
|
||||
_httpRequest = (value as HttpWebRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public Uri Uri => Request?.RequestUri;
|
||||
public CookieContainer CookieContainer => _httpRequest?.CookieContainer;
|
||||
|
||||
public string Method
|
||||
{
|
||||
get => Request?.Method;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.Method = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public IWebProxy Proxy
|
||||
{
|
||||
get => Request?.Proxy;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.Proxy = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public string ContentType
|
||||
{
|
||||
get => Request?.ContentType;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.ContentType = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public WebHeaderCollection Headers
|
||||
{
|
||||
get => Request?.Headers;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.Headers = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public RequestInterceptedEventArgs(WebRequest request)
|
||||
{
|
||||
Request = request;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.ComponentModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Eavesdrop.Network;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public class ResponseInterceptedEventArgs : CancelEventArgs
|
||||
{
|
||||
private WebResponse _response;
|
||||
public WebResponse Response
|
||||
{
|
||||
get => _response;
|
||||
set
|
||||
{
|
||||
_response = value;
|
||||
if (value is HttpWebResponse httpResponse)
|
||||
{
|
||||
CookieContainer = new CookieContainer();
|
||||
CookieContainer.Add(httpResponse.Cookies);
|
||||
}
|
||||
else CookieContainer = null;
|
||||
}
|
||||
}
|
||||
|
||||
public WebRequest Request { get; }
|
||||
public Uri Uri => Response?.ResponseUri;
|
||||
|
||||
public HttpContent Content { get; set; }
|
||||
public CookieContainer CookieContainer { get; private set; }
|
||||
|
||||
public string ContentType
|
||||
{
|
||||
get => Response?.ContentType;
|
||||
set
|
||||
{
|
||||
if (Response != null)
|
||||
{
|
||||
Response.ContentType = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public WebHeaderCollection Headers
|
||||
{
|
||||
get => Response?.Headers;
|
||||
set
|
||||
{
|
||||
if (Response == null) return;
|
||||
foreach (string header in value.AllKeys)
|
||||
{
|
||||
Response.Headers[header] = value[header];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ResponseInterceptedEventArgs(WebRequest request, WebResponse response)
|
||||
{
|
||||
Request = request;
|
||||
Response = response;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
Source/GrasscutterTools/Eavesdrop/Interceptors.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
[Flags]
|
||||
public enum Interceptors
|
||||
{
|
||||
None = 0,
|
||||
HTTP = 1,
|
||||
HTTPS = 2,
|
||||
|
||||
Default = (HTTP | HTTPS)
|
||||
}
|
||||
}
|
||||
241
Source/GrasscutterTools/Eavesdrop/Internals/INETOptions.cs
Normal file
@@ -0,0 +1,241 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public static class INETOptions
|
||||
{
|
||||
private static readonly object _stateLock;
|
||||
private static readonly int _iNetOptionSize;
|
||||
private static readonly int _iNetPackageSize;
|
||||
private static readonly RegistryKey _proxyKey;
|
||||
|
||||
public static List<string> Overrides { get; }
|
||||
|
||||
public static string HTTPAddress { get; set; }
|
||||
public static string HTTPSAddress { get; set; }
|
||||
|
||||
public static bool IsProxyEnabled { get; set; }
|
||||
public static bool IsIgnoringLocalTraffic { get; set; }
|
||||
|
||||
static INETOptions()
|
||||
{
|
||||
_stateLock = new object();
|
||||
_iNetOptionSize = Marshal.SizeOf(typeof(INETOption));
|
||||
_iNetPackageSize = Marshal.SizeOf(typeof(INETPackage));
|
||||
_proxyKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
|
||||
|
||||
Overrides = new List<string>();
|
||||
Load();
|
||||
}
|
||||
|
||||
public static void Save()
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
var options = new List<INETOption>(3);
|
||||
string joinedAddresses = (IsProxyEnabled ? GetJoinedAddresses() : null);
|
||||
string joinedOverrides = (IsProxyEnabled ? GetJoinedOverrides() : null);
|
||||
|
||||
var kind = ProxyKind.PROXY_TYPE_DIRECT;
|
||||
if (!string.IsNullOrWhiteSpace(joinedAddresses))
|
||||
{
|
||||
options.Add(new INETOption(OptionKind.INTERNET_PER_CONN_PROXY_SERVER, joinedAddresses));
|
||||
if (!string.IsNullOrWhiteSpace(joinedOverrides))
|
||||
{
|
||||
options.Add(new INETOption(OptionKind.INTERNET_PER_CONN_PROXY_BYPASS, joinedOverrides));
|
||||
}
|
||||
kind |= ProxyKind.PROXY_TYPE_PROXY;
|
||||
}
|
||||
options.Insert(0, new INETOption(OptionKind.INTERNET_PER_CONN_FLAGS, (int)kind));
|
||||
|
||||
var inetPackage = new INETPackage
|
||||
{
|
||||
_optionError = 0,
|
||||
_size = _iNetPackageSize,
|
||||
_connection = IntPtr.Zero,
|
||||
_optionCount = options.Count
|
||||
};
|
||||
|
||||
IntPtr optionsPtr = Marshal.AllocCoTaskMem(_iNetOptionSize * options.Count);
|
||||
for (int i = 0; i < options.Count; ++i)
|
||||
{
|
||||
var optionPtr = new IntPtr((IntPtr.Size == 4 ? optionsPtr.ToInt32() : optionsPtr.ToInt64()) + (i * _iNetOptionSize));
|
||||
Marshal.StructureToPtr(options[i], optionPtr, false);
|
||||
}
|
||||
inetPackage._optionsPtr = optionsPtr;
|
||||
|
||||
IntPtr iNetPackagePtr = Marshal.AllocCoTaskMem(_iNetPackageSize);
|
||||
Marshal.StructureToPtr(inetPackage, iNetPackagePtr, false);
|
||||
|
||||
int returnvalue = (NativeMethods.InternetSetOption(IntPtr.Zero, 75, iNetPackagePtr, _iNetPackageSize) ? -1 : 0);
|
||||
if (returnvalue == 0)
|
||||
{
|
||||
returnvalue = Marshal.GetLastWin32Error();
|
||||
}
|
||||
|
||||
Marshal.FreeCoTaskMem(optionsPtr);
|
||||
Marshal.FreeCoTaskMem(iNetPackagePtr);
|
||||
if (returnvalue > 0)
|
||||
{
|
||||
throw new Win32Exception(Marshal.GetLastWin32Error());
|
||||
}
|
||||
|
||||
NativeMethods.InternetSetOption(IntPtr.Zero, 39, iNetPackagePtr, _iNetPackageSize);
|
||||
NativeMethods.InternetSetOption(IntPtr.Zero, 37, iNetPackagePtr, _iNetPackageSize);
|
||||
}
|
||||
}
|
||||
public static void Load()
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
LoadAddresses();
|
||||
LoadOverrides();
|
||||
IsProxyEnabled = (_proxyKey.GetValue("ProxyEnable")?.ToString() == "1");
|
||||
}
|
||||
}
|
||||
|
||||
private static void LoadOverrides()
|
||||
{
|
||||
string proxyOverride = _proxyKey.GetValue("ProxyOverride")?.ToString();
|
||||
if (string.IsNullOrWhiteSpace(proxyOverride)) return;
|
||||
|
||||
string[] overrides = proxyOverride.Split(';');
|
||||
foreach (string @override in overrides)
|
||||
{
|
||||
if (@override == "<local>")
|
||||
{
|
||||
IsIgnoringLocalTraffic = true;
|
||||
}
|
||||
else if (!Overrides.Contains(@override))
|
||||
{
|
||||
Overrides.Add(@override);
|
||||
}
|
||||
}
|
||||
}
|
||||
private static void LoadAddresses()
|
||||
{
|
||||
string proxyServer = _proxyKey.GetValue("ProxyServer")?.ToString();
|
||||
if (string.IsNullOrWhiteSpace(proxyServer)) return;
|
||||
|
||||
string[] values = proxyServer.Split(';');
|
||||
foreach (string value in values)
|
||||
{
|
||||
string[] pair = value.Split('=');
|
||||
if (pair.Length != 2)
|
||||
{
|
||||
HTTPAddress = value;
|
||||
HTTPSAddress = value;
|
||||
return;
|
||||
}
|
||||
|
||||
string address = pair[1];
|
||||
string protocol = pair[0];
|
||||
switch (protocol)
|
||||
{
|
||||
case "http": HTTPAddress = address; break;
|
||||
case "https": HTTPSAddress = address; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetJoinedAddresses()
|
||||
{
|
||||
var addresses = new List<string>(2);
|
||||
if (!string.IsNullOrWhiteSpace(HTTPAddress))
|
||||
{
|
||||
addresses.Add("http=" + HTTPAddress);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(HTTPSAddress))
|
||||
{
|
||||
addresses.Add("https=" + HTTPSAddress);
|
||||
}
|
||||
return string.Join(";", addresses);
|
||||
}
|
||||
private static string GetJoinedOverrides()
|
||||
{
|
||||
var overrides = new List<string>(Overrides);
|
||||
if (IsIgnoringLocalTraffic)
|
||||
{
|
||||
overrides.Add("<local>");
|
||||
}
|
||||
return string.Join(";", overrides);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||
private struct INETOption
|
||||
{
|
||||
private readonly OptionKind _kind;
|
||||
private readonly INETOptionValue _value;
|
||||
|
||||
public INETOption(OptionKind kind, int value)
|
||||
{
|
||||
_kind = kind;
|
||||
_value = CreateValue(value);
|
||||
}
|
||||
public INETOption(OptionKind kind, string value)
|
||||
{
|
||||
_kind = kind;
|
||||
_value = CreateValue(value);
|
||||
}
|
||||
|
||||
private static INETOptionValue CreateValue(int value)
|
||||
{
|
||||
return new INETOptionValue
|
||||
{
|
||||
_intValue = value
|
||||
};
|
||||
}
|
||||
private static INETOptionValue CreateValue(string value)
|
||||
{
|
||||
return new INETOptionValue
|
||||
{
|
||||
_stringPointer = Marshal.StringToHGlobalAuto(value)
|
||||
};
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
private struct INETOptionValue
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public int _intValue;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public IntPtr _stringPointer;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public System.Runtime.InteropServices.ComTypes.FILETIME _fileTime;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||
private struct INETPackage
|
||||
{
|
||||
public int _size;
|
||||
public IntPtr _connection;
|
||||
public int _optionCount;
|
||||
public int _optionError;
|
||||
public IntPtr _optionsPtr;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
private enum ProxyKind
|
||||
{
|
||||
PROXY_TYPE_DIRECT = 1,
|
||||
PROXY_TYPE_PROXY = 2,
|
||||
PROXY_TYPE_AUTO_PROXY_URL = 4,
|
||||
PROXY_TYPE_AUTO_DETECT = 8
|
||||
}
|
||||
private enum OptionKind
|
||||
{
|
||||
INTERNET_PER_CONN_FLAGS = 1,
|
||||
INTERNET_PER_CONN_PROXY_SERVER = 2,
|
||||
INTERNET_PER_CONN_PROXY_BYPASS = 3,
|
||||
INTERNET_PER_CONN_AUTOCONFIG_URL = 4
|
||||
}
|
||||
}
|
||||
}
|
||||
12
Source/GrasscutterTools/Eavesdrop/Internals/NativeMethods.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
internal static class NativeMethods
|
||||
{
|
||||
[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
|
||||
}
|
||||
}
|
||||
21
Source/GrasscutterTools/Eavesdrop/LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 ArachisH
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
365
Source/GrasscutterTools/Eavesdrop/Network/EavesNode.cs
Normal file
@@ -0,0 +1,365 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Net.Http;
|
||||
using System.Net.Sockets;
|
||||
using System.Net.Security;
|
||||
using System.Globalization;
|
||||
using System.IO.Compression;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Authentication;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
//using BrotliSharpLib;
|
||||
|
||||
namespace Eavesdrop.Network
|
||||
{
|
||||
public class EavesNode : IDisposable
|
||||
{
|
||||
private SslStream _secureStream;
|
||||
private readonly TcpClient _client;
|
||||
private readonly Certifier _certifier;
|
||||
private static readonly Regex _responseCookieSplitter;
|
||||
|
||||
public bool IsSecure => (_secureStream != null);
|
||||
|
||||
static EavesNode()
|
||||
{
|
||||
_responseCookieSplitter = new Regex(",(?! )");
|
||||
}
|
||||
public EavesNode(Certifier certifier, TcpClient client)
|
||||
{
|
||||
_client = client;
|
||||
_certifier = certifier;
|
||||
|
||||
_client.NoDelay = true;
|
||||
}
|
||||
|
||||
public Task<HttpWebRequest> ReadRequestAsync()
|
||||
{
|
||||
return ReadRequestAsync(null);
|
||||
}
|
||||
private async Task<HttpWebRequest> ReadRequestAsync(Uri baseUri)
|
||||
{
|
||||
string method = null;
|
||||
var headers = new List<string>();
|
||||
string requestUrl = baseUri?.OriginalString;
|
||||
|
||||
string command = ReadNonBufferedLine();
|
||||
if (string.IsNullOrWhiteSpace(command)) return null;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(command)) return null;
|
||||
string[] values = command.Split(' ');
|
||||
|
||||
method = values[0];
|
||||
requestUrl += values[1];
|
||||
while (_client.Connected)
|
||||
{
|
||||
string header = ReadNonBufferedLine();
|
||||
if (string.IsNullOrWhiteSpace(header)) break;
|
||||
|
||||
headers.Add(header);
|
||||
}
|
||||
|
||||
if (method == "CONNECT")
|
||||
{
|
||||
baseUri = new Uri("https://" + requestUrl);
|
||||
await SendResponseAsync(HttpStatusCode.OK).ConfigureAwait(false);
|
||||
|
||||
if (!SecureTunnel(baseUri.Host)) return null;
|
||||
return await ReadRequestAsync(baseUri).ConfigureAwait(false);
|
||||
}
|
||||
else return CreateRequest(method, headers, new Uri(requestUrl));
|
||||
}
|
||||
|
||||
public async Task<ByteArrayContent> ReadRequestContentAsync(WebRequest request)
|
||||
{
|
||||
byte[] payload = await GetPayload(GetStream(), request.ContentLength).ConfigureAwait(false);
|
||||
if (payload == null) return null;
|
||||
|
||||
//if (request.Headers[HttpRequestHeader.ContentEncoding] == "br")
|
||||
//{
|
||||
// request.Headers[HttpRequestHeader.ContentEncoding] = ""; // No longer encoded.
|
||||
// payload = Brotli.DecompressBuffer(payload, 0, payload.Length);
|
||||
//}
|
||||
return new ByteArrayContent(payload);
|
||||
}
|
||||
public async Task WriteRequestContentAsync(WebRequest request, HttpContent content)
|
||||
{
|
||||
byte[] payload = null;
|
||||
if (content is StreamContent streamContent)
|
||||
{
|
||||
// TODO:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
else payload = await content.ReadAsByteArrayAsync().ConfigureAwait(false);
|
||||
|
||||
//if (request.Headers[HttpRequestHeader.ContentEncoding] == "br")
|
||||
//{
|
||||
// payload = Brotli.CompressBuffer(payload, 0, payload.Length);
|
||||
//}
|
||||
|
||||
request.ContentLength = payload.Length;
|
||||
using (Stream output = await request.GetRequestStreamAsync().ConfigureAwait(false))
|
||||
{
|
||||
await output.WriteAsync(payload, 0, payload.Length).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
public Task SendResponseAsync(WebResponse response, HttpContent content)
|
||||
{
|
||||
string description = "OK";
|
||||
var status = HttpStatusCode.OK;
|
||||
if (response is HttpWebResponse httpResponse)
|
||||
{
|
||||
status = httpResponse.StatusCode;
|
||||
description = httpResponse.StatusDescription;
|
||||
}
|
||||
return SendResponseAsync(status, description, response.Headers, content);
|
||||
}
|
||||
public Task SendResponseAsync(HttpStatusCode status, string description = null)
|
||||
{
|
||||
return SendResponseAsync(status, (description ?? status.ToString()), null, null);
|
||||
}
|
||||
public async Task SendResponseAsync(HttpStatusCode status, string description, WebHeaderCollection headers, HttpContent content)
|
||||
{
|
||||
var headerBuilder = new StringBuilder();
|
||||
headerBuilder.AppendLine($"HTTP/{HttpVersion.Version10} {(int)status} {description}");
|
||||
if (headers != null)
|
||||
{
|
||||
foreach (string header in headers.AllKeys)
|
||||
{
|
||||
if (header == "Transfer-Encoding") continue;
|
||||
|
||||
string value = headers[header];
|
||||
if (string.IsNullOrWhiteSpace(value)) continue;
|
||||
|
||||
if (header.Equals("Set-Cookie", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
foreach (string setCookie in _responseCookieSplitter.Split(value))
|
||||
{
|
||||
headerBuilder.AppendLine($"{header}: {setCookie}");
|
||||
}
|
||||
}
|
||||
else headerBuilder.AppendLine($"{header}: {value}");
|
||||
}
|
||||
}
|
||||
headerBuilder.AppendLine();
|
||||
|
||||
byte[] headerData = Encoding.UTF8.GetBytes(headerBuilder.ToString());
|
||||
await GetStream().WriteAsync(headerData, 0, headerData.Length).ConfigureAwait(false);
|
||||
if (content != null)
|
||||
{
|
||||
// TODO: If the Content-Encoding header has been changed, re-compress while writing?
|
||||
Stream input = await content.ReadAsStreamAsync().ConfigureAwait(false);
|
||||
|
||||
int bytesRead = 0;
|
||||
var buffer = new byte[8192];
|
||||
do
|
||||
{
|
||||
bytesRead = await input.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
|
||||
if (_client.Connected && bytesRead > 0)
|
||||
{
|
||||
await GetStream().WriteAsync(buffer, 0, bytesRead).ConfigureAwait(false);
|
||||
}
|
||||
else return;
|
||||
}
|
||||
while (input.CanRead && _client.Connected);
|
||||
}
|
||||
}
|
||||
|
||||
public Stream GetStream()
|
||||
{
|
||||
return ((Stream)_secureStream ?? _client.GetStream());
|
||||
}
|
||||
private StreamWriter WrapStreamWriter()
|
||||
{
|
||||
return new StreamWriter(GetStream(), Encoding.UTF8, 1024, true);
|
||||
}
|
||||
private StreamReader WrapStreamReader(int bufferSize = 1024)
|
||||
{
|
||||
return new StreamReader(GetStream(), Encoding.UTF8, true, bufferSize, true);
|
||||
}
|
||||
|
||||
private string ReadNonBufferedLine()
|
||||
{
|
||||
string line = string.Empty;
|
||||
try
|
||||
{
|
||||
using (var binaryInput = new BinaryReader(GetStream(), Encoding.UTF8, true))
|
||||
{
|
||||
do { line += binaryInput.ReadChar(); }
|
||||
while (!line.EndsWith("\r\n"));
|
||||
}
|
||||
}
|
||||
catch (EndOfStreamException) { line += "\r\n"; }
|
||||
return line.Substring(0, line.Length - 2);
|
||||
}
|
||||
private bool SecureTunnel(string host)
|
||||
{
|
||||
try
|
||||
{
|
||||
X509Certificate2 certificate = _certifier.GenerateCertificate(host);
|
||||
|
||||
_secureStream = new SslStream(GetStream());
|
||||
_secureStream.AuthenticateAsServer(certificate, false, SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch { return false; }
|
||||
}
|
||||
private IEnumerable<Cookie> GetCookies(string cookieHeader, string host)
|
||||
{
|
||||
foreach (string cookie in cookieHeader.Split(';'))
|
||||
{
|
||||
int nameEndIndex = cookie.IndexOf('=');
|
||||
if (nameEndIndex == -1) continue;
|
||||
|
||||
string name = cookie.Substring(0, nameEndIndex).Trim();
|
||||
string value = cookie.Substring(nameEndIndex + 1).Trim();
|
||||
|
||||
yield return new Cookie(name, value, "/", host);
|
||||
}
|
||||
}
|
||||
private HttpWebRequest CreateRequest(string method, List<string> headers, Uri requestUri)
|
||||
{
|
||||
HttpWebRequest request = WebRequest.CreateHttp(requestUri);
|
||||
request.ProtocolVersion = HttpVersion.Version10;
|
||||
request.CookieContainer = new CookieContainer();
|
||||
request.AllowAutoRedirect = false;
|
||||
request.KeepAlive = false;
|
||||
request.Method = method;
|
||||
request.Proxy = null;
|
||||
|
||||
foreach (string header in headers)
|
||||
{
|
||||
int delimiterIndex = header.IndexOf(':');
|
||||
if (delimiterIndex == -1) continue;
|
||||
|
||||
string name = header.Substring(0, delimiterIndex);
|
||||
string value = header.Substring(delimiterIndex + 2);
|
||||
switch (name.ToLower())
|
||||
{
|
||||
case "range":
|
||||
case "expect":
|
||||
case "keep-alive":
|
||||
case "connection":
|
||||
case "proxy-connection": break;
|
||||
|
||||
case "host": request.Host = value; break;
|
||||
case "accept": request.Accept = value; break;
|
||||
case "referer": request.Referer = value; break;
|
||||
case "user-agent": request.UserAgent = value; break;
|
||||
case "content-type": request.ContentType = value; break;
|
||||
|
||||
case "content-length":
|
||||
{
|
||||
request.ContentLength =
|
||||
long.Parse(value, CultureInfo.InvariantCulture);
|
||||
|
||||
break;
|
||||
}
|
||||
case "cookie":
|
||||
{
|
||||
foreach (Cookie cookie in GetCookies(value, request.Host))
|
||||
{
|
||||
try
|
||||
{
|
||||
request.CookieContainer.Add(cookie);
|
||||
}
|
||||
catch (CookieException) { }
|
||||
}
|
||||
request.Headers[name] = value;
|
||||
break;
|
||||
}
|
||||
case "if-modified-since":
|
||||
{
|
||||
request.IfModifiedSince = DateTime.Parse(
|
||||
value.Split(';')[0], CultureInfo.InvariantCulture);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "date":
|
||||
if (long.TryParse(value, out var timestamp))
|
||||
{
|
||||
request.Date = timestamp > 10_000_000_000L
|
||||
? DateTimeOffset.FromUnixTimeMilliseconds(timestamp).DateTime
|
||||
: DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
request.Date = DateTime.Parse(value);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
request.Headers[name] = value; break;
|
||||
}
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
}
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
GetStream().Dispose();
|
||||
_client.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static StreamContent ReadResponseContent(WebResponse response)
|
||||
{
|
||||
if (response.ContentLength == 0)
|
||||
{
|
||||
response.GetResponseStream().Dispose();
|
||||
return null;
|
||||
}
|
||||
|
||||
Stream input = response.GetResponseStream();
|
||||
//if (response is HttpWebResponse httpResponse && !string.IsNullOrWhiteSpace(httpResponse.ContentEncoding))
|
||||
//{
|
||||
// switch (httpResponse.ContentEncoding)
|
||||
// {
|
||||
// //case "br": input = new BrotliStream(input, CompressionMode.Decompress); break;
|
||||
// case "gzip": input = new GZipStream(input, CompressionMode.Decompress); break;
|
||||
// case "deflate": input = new DeflateStream(input, CompressionMode.Decompress); break;
|
||||
// }
|
||||
// response.Headers.Remove(HttpResponseHeader.ContentLength);
|
||||
// response.Headers.Remove(HttpResponseHeader.ContentEncoding);
|
||||
// response.Headers.Add(HttpResponseHeader.TransferEncoding, "chunked");
|
||||
//}
|
||||
return new StreamContent(input, response.ContentLength > 0 ? (int)response.ContentLength : 4096);
|
||||
}
|
||||
public static async Task<byte[]> GetPayload(Stream input, long length)
|
||||
{
|
||||
if (length < 1) return null;
|
||||
|
||||
int totalBytesRead = 0;
|
||||
int nullBytesReadCount = 0;
|
||||
var payload = new byte[length];
|
||||
do
|
||||
{
|
||||
int bytesLeft = (payload.Length - totalBytesRead);
|
||||
int bytesRead = await input.ReadAsync(payload, totalBytesRead, bytesLeft).ConfigureAwait(false);
|
||||
|
||||
if (bytesRead > 0)
|
||||
{
|
||||
nullBytesReadCount = 0;
|
||||
totalBytesRead += bytesRead;
|
||||
}
|
||||
else if (++nullBytesReadCount >= 2) return null;
|
||||
}
|
||||
while (totalBytesRead != payload.Length);
|
||||
return payload;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,9 @@
|
||||
this.LblCountLabel = new System.Windows.Forms.Label();
|
||||
this.ListItems = new System.Windows.Forms.ListBox();
|
||||
this.GrpMonsterList = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearMonsterFilter = new System.Windows.Forms.Label();
|
||||
this.GrpItemList = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearItemFilter = new System.Windows.Forms.Label();
|
||||
this.GrpDropList.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDMaxWeight)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDMinWeight)).BeginInit();
|
||||
@@ -292,19 +294,37 @@
|
||||
// GrpMonsterList
|
||||
//
|
||||
resources.ApplyResources(this.GrpMonsterList, "GrpMonsterList");
|
||||
this.GrpMonsterList.Controls.Add(this.LblClearMonsterFilter);
|
||||
this.GrpMonsterList.Controls.Add(this.ListMonsters);
|
||||
this.GrpMonsterList.Controls.Add(this.TxtMonsterFilter);
|
||||
this.GrpMonsterList.Name = "GrpMonsterList";
|
||||
this.GrpMonsterList.TabStop = false;
|
||||
//
|
||||
// LblClearMonsterFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearMonsterFilter, "LblClearMonsterFilter");
|
||||
this.LblClearMonsterFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearMonsterFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearMonsterFilter.Name = "LblClearMonsterFilter";
|
||||
this.LblClearMonsterFilter.Click += new System.EventHandler(this.LblClearMonsterFilter_Click);
|
||||
//
|
||||
// GrpItemList
|
||||
//
|
||||
resources.ApplyResources(this.GrpItemList, "GrpItemList");
|
||||
this.GrpItemList.Controls.Add(this.LblClearItemFilter);
|
||||
this.GrpItemList.Controls.Add(this.TxtItemFilter);
|
||||
this.GrpItemList.Controls.Add(this.ListItems);
|
||||
this.GrpItemList.Name = "GrpItemList";
|
||||
this.GrpItemList.TabStop = false;
|
||||
//
|
||||
// LblClearItemFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearItemFilter, "LblClearItemFilter");
|
||||
this.LblClearItemFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearItemFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearItemFilter.Name = "LblClearItemFilter";
|
||||
this.LblClearItemFilter.Click += new System.EventHandler(this.LblClearItemFilter_Click);
|
||||
//
|
||||
// FormDropEditor
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
@@ -362,5 +382,7 @@
|
||||
private System.Windows.Forms.Button BtnPaste;
|
||||
private System.Windows.Forms.Button BtnClear;
|
||||
private System.Windows.Forms.Button BtnCopyAll;
|
||||
private System.Windows.Forms.Label LblClearMonsterFilter;
|
||||
private System.Windows.Forms.Label LblClearItemFilter;
|
||||
}
|
||||
}
|
||||
@@ -199,6 +199,15 @@ namespace GrasscutterTools.Forms
|
||||
private void TxtMonsterFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListMonsters, Monsters, TxtMonsterFilter.Text);
|
||||
LblClearMonsterFilter.Visible = TxtMonsterFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空怪物过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearMonsterFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtMonsterFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -496,6 +505,15 @@ namespace GrasscutterTools.Forms
|
||||
private void TxtItemFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListItems, GameData.Items.Lines, TxtItemFilter.Text);
|
||||
LblClearItemFilter.Visible = TxtItemFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空物品列表过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearItemFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtItemFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -507,5 +525,7 @@ namespace GrasscutterTools.Forms
|
||||
}
|
||||
|
||||
#endregion - 物品列表 -
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -241,7 +241,7 @@
|
||||
<value>GrpMonsterList</value>
|
||||
</data>
|
||||
<data name=">>ListMonsters.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TxtMonsterFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
@@ -265,7 +265,7 @@
|
||||
<value>GrpMonsterList</value>
|
||||
</data>
|
||||
<data name=">>TxtMonsterFilter.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TxtItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
@@ -289,7 +289,7 @@
|
||||
<value>GrpItemList</value>
|
||||
</data>
|
||||
<data name=">>TxtItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ListDropData.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
@@ -802,11 +802,47 @@
|
||||
<value>GrpItemList</value>
|
||||
</data>
|
||||
<data name=">>ListItems.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="GrpMonsterList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>228, 25</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.Name" xml:space="preserve">
|
||||
<value>LblClearMonsterFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.Parent" xml:space="preserve">
|
||||
<value>GrpMonsterList</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="GrpMonsterList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 41</value>
|
||||
</data>
|
||||
@@ -834,6 +870,42 @@
|
||||
<data name="GrpItemList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Right</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>227, 25</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.Name" xml:space="preserve">
|
||||
<value>LblClearItemFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.Parent" xml:space="preserve">
|
||||
<value>GrpItemList</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="GrpItemList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>576, 41</value>
|
||||
</data>
|
||||
|
||||
@@ -50,8 +50,10 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
CmbPrefab.DisplayMember = "Value";
|
||||
CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
|
||||
//CmbPrefab.Items.Clear();
|
||||
//CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
}
|
||||
|
||||
private void InitCheckedListBoxs()
|
||||
@@ -96,6 +98,11 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#region - UI -
|
||||
|
||||
private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
|
||||
{
|
||||
return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
|
||||
}
|
||||
|
||||
private void ShowBanner(GachaBanner banner)
|
||||
{
|
||||
try
|
||||
@@ -103,10 +110,17 @@ namespace GrasscutterTools.Forms
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
|
||||
const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
|
||||
const string suffix = "_TITLE";
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
|
||||
{
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
{
|
||||
var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
|
||||
CmbPrefab.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
|
||||
}
|
||||
RbCostItem224.Checked = banner.CostItem == 224;
|
||||
RbCostItem223.Checked = banner.CostItem == 223;
|
||||
NUDBeginTime.Value = banner.BeginTime;
|
||||
@@ -153,15 +167,15 @@ namespace GrasscutterTools.Forms
|
||||
else
|
||||
purpleIds = TxtRateUpItems2.Text.Split(',').Select(s => int.Parse(s.Trim())).ToArray();
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
|
||||
GachaBanner banner = new GachaBanner
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
|
||||
PrefabPath = $"GachaShowPanel_{prefabId}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_{prefabId}_TITLE",
|
||||
CostItem = RbCostItem224.Checked ? 224 : 223,
|
||||
BeginTime = (int)NUDBeginTime.Value,
|
||||
EndTime = (int)NUDEndTime.Value,
|
||||
|
||||
@@ -50,8 +50,11 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
CmbPrefab.DisplayMember = "Value";
|
||||
CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
|
||||
|
||||
//CmbPrefab.Items.Clear();
|
||||
//CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
}
|
||||
|
||||
private void LnkWeightHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
@@ -206,6 +209,10 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#region - 序列化 -
|
||||
|
||||
private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
|
||||
{
|
||||
return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
|
||||
}
|
||||
private void ShowBanner(GachaBanner2 banner)
|
||||
{
|
||||
try
|
||||
@@ -213,10 +220,17 @@ namespace GrasscutterTools.Forms
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
|
||||
const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
|
||||
const string suffix = "_TITLE";
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
|
||||
{
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
{
|
||||
var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
|
||||
CmbPrefab.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
|
||||
}
|
||||
RbCostItem224.Checked = banner.CostItem == 224;
|
||||
RbCostItem223.Checked = banner.CostItem == 223;
|
||||
DTPBeginTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.BeginTime).DateTime;
|
||||
@@ -248,16 +262,16 @@ namespace GrasscutterTools.Forms
|
||||
MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
|
||||
var banner = new GachaBanner2
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
|
||||
PrefabPath = $"GachaShowPanel_{prefabId}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_{prefabId}_TITLE",
|
||||
CostItem = RbCostItem224.Checked ? 224 : 223,
|
||||
BeginTime = (int)new DateTimeOffset(DTPBeginTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
|
||||
EndTime = (int)new DateTimeOffset(DTPEndTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
|
||||
|
||||
@@ -61,10 +61,10 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
CmbTitlePath.Items.Clear();
|
||||
CmbTitlePath.Items.AddRange(GameData.GachaBannerTitles.Names);
|
||||
CmbPrefab.DisplayMember = "Value";
|
||||
CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
|
||||
CmbTitlePath.DisplayMember = "Value";
|
||||
CmbTitlePath.DataSource = GameData.GachaBannerTitles;
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
@@ -405,6 +405,12 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#region - 卡池参数 -
|
||||
|
||||
private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
|
||||
{
|
||||
return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 显示指定卡池参数
|
||||
/// </summary>
|
||||
@@ -416,14 +422,28 @@ namespace GrasscutterTools.Forms
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.PrefabPath) || !int.TryParse(banner.PrefabPath.Substring("GachaShowPanel_A".Length, 3), out int prefabId))
|
||||
const string prefabPrefix = "GachaShowPanel_";
|
||||
if (string.IsNullOrEmpty(banner.PrefabPath) || banner.PrefabPath.Length <= prefabPrefix.Length)
|
||||
{
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int titleId))
|
||||
{
|
||||
var prefabKey = banner.PrefabPath.Substring(prefabPrefix.Length);
|
||||
CmbPrefab.SelectedIndex = GameData.GachaBannerPrefabs.FindIndex(it => it.Key == prefabKey);
|
||||
}
|
||||
|
||||
const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
|
||||
const string suffix = "_TITLE";
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
|
||||
{
|
||||
CmbTitlePath.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbTitlePath.SelectedIndex = Array.IndexOf(GameData.GachaBannerTitles.Ids, titleId);
|
||||
{
|
||||
var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
|
||||
CmbTitlePath.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
|
||||
}
|
||||
RbCostItem224.Checked = banner.CostItemId == 224;
|
||||
RbCostItem223.Checked = banner.CostItemId == 223;
|
||||
NUDCostItemAmount1.Value = banner.CoseItemAmount;
|
||||
@@ -458,16 +478,16 @@ namespace GrasscutterTools.Forms
|
||||
return null;
|
||||
}
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
var titleId = GameData.GachaBannerTitles.Ids[CmbTitlePath.SelectedIndex];
|
||||
var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
|
||||
var titleId = GameData.GachaBannerTitles[CmbTitlePath.SelectedIndex].Key;
|
||||
var banner = new GachaBanner3
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{titleId:000}_TITLE",
|
||||
PrefabPath = $"GachaShowPanel_{prefabId}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_{titleId}_TITLE",
|
||||
CostItemId = RbCostItem224.Checked ? 224 : 223,
|
||||
CoseItemAmount = (int)NUDCostItemAmount1.Value,
|
||||
CostItemId10 = RbCostItem224.Checked ? 224 : 223,
|
||||
|
||||
30
Source/GrasscutterTools/Forms/FormMain.Designer.cs
generated
@@ -32,16 +32,15 @@ namespace GrasscutterTools.Forms
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
|
||||
this.NavContainer = new System.Windows.Forms.SplitContainer();
|
||||
this.ListPages = new System.Windows.Forms.ListBox();
|
||||
this.TCMain = new System.Windows.Forms.TabControl();
|
||||
this.CmbCommand = new System.Windows.Forms.ComboBox();
|
||||
this.BtnCopy = new System.Windows.Forms.Button();
|
||||
this.ChkAutoCopy = new System.Windows.Forms.CheckBox();
|
||||
this.GrpCommand = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.BtnInvokeOpenCommand = new System.Windows.Forms.Button();
|
||||
this.MenuSpawnEntityFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).BeginInit();
|
||||
this.NavContainer.Panel1.SuspendLayout();
|
||||
this.NavContainer.Panel2.SuspendLayout();
|
||||
this.NavContainer.SuspendLayout();
|
||||
this.GrpCommand.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
@@ -55,10 +54,6 @@ namespace GrasscutterTools.Forms
|
||||
//
|
||||
this.NavContainer.Panel1.Controls.Add(this.ListPages);
|
||||
//
|
||||
// NavContainer.Panel2
|
||||
//
|
||||
this.NavContainer.Panel2.Controls.Add(this.TCMain);
|
||||
//
|
||||
// ListPages
|
||||
//
|
||||
this.ListPages.BackColor = System.Drawing.Color.WhiteSmoke;
|
||||
@@ -68,23 +63,17 @@ namespace GrasscutterTools.Forms
|
||||
this.ListPages.FormattingEnabled = true;
|
||||
this.ListPages.Name = "ListPages";
|
||||
this.ListPages.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ListPages_DrawItem);
|
||||
this.ListPages.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListPages_MeasureItem);
|
||||
this.ListPages.SelectedIndexChanged += new System.EventHandler(this.ListPages_SelectedIndexChanged);
|
||||
this.ListPages.SizeChanged += new System.EventHandler(this.ListPages_SizeChanged);
|
||||
//
|
||||
// TCMain
|
||||
//
|
||||
resources.ApplyResources(this.TCMain, "TCMain");
|
||||
this.TCMain.Multiline = true;
|
||||
this.TCMain.Name = "TCMain";
|
||||
this.TCMain.SelectedIndex = 0;
|
||||
this.TCMain.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
|
||||
//
|
||||
// CmbCommand
|
||||
//
|
||||
resources.ApplyResources(this.CmbCommand, "CmbCommand");
|
||||
this.CmbCommand.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
|
||||
this.CmbCommand.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.CmbCommand.Name = "CmbCommand";
|
||||
this.CmbCommand.TextChanged += new System.EventHandler(this.CmbCommand_TextChanged);
|
||||
this.CmbCommand.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtCommand_KeyDown);
|
||||
//
|
||||
// BtnCopy
|
||||
@@ -103,6 +92,7 @@ namespace GrasscutterTools.Forms
|
||||
// GrpCommand
|
||||
//
|
||||
resources.ApplyResources(this.GrpCommand, "GrpCommand");
|
||||
this.GrpCommand.Controls.Add(this.LblClearFilter);
|
||||
this.GrpCommand.Controls.Add(this.BtnInvokeOpenCommand);
|
||||
this.GrpCommand.Controls.Add(this.BtnCopy);
|
||||
this.GrpCommand.Controls.Add(this.ChkAutoCopy);
|
||||
@@ -110,6 +100,14 @@ namespace GrasscutterTools.Forms
|
||||
this.GrpCommand.Name = "GrpCommand";
|
||||
this.GrpCommand.TabStop = false;
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// BtnInvokeOpenCommand
|
||||
//
|
||||
resources.ApplyResources(this.BtnInvokeOpenCommand, "BtnInvokeOpenCommand");
|
||||
@@ -119,6 +117,7 @@ namespace GrasscutterTools.Forms
|
||||
//
|
||||
// MenuSpawnEntityFilter
|
||||
//
|
||||
this.MenuSpawnEntityFilter.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.MenuSpawnEntityFilter.Name = "MenuSpawnEntityFilter";
|
||||
resources.ApplyResources(this.MenuSpawnEntityFilter, "MenuSpawnEntityFilter");
|
||||
//
|
||||
@@ -134,7 +133,6 @@ namespace GrasscutterTools.Forms
|
||||
this.Load += new System.EventHandler(this.FormMain_Load);
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormMain_KeyDown);
|
||||
this.NavContainer.Panel1.ResumeLayout(false);
|
||||
this.NavContainer.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).EndInit();
|
||||
this.NavContainer.ResumeLayout(false);
|
||||
this.GrpCommand.ResumeLayout(false);
|
||||
@@ -150,9 +148,9 @@ namespace GrasscutterTools.Forms
|
||||
private System.Windows.Forms.CheckBox ChkAutoCopy;
|
||||
private System.Windows.Forms.GroupBox GrpCommand;
|
||||
private System.Windows.Forms.Button BtnInvokeOpenCommand;
|
||||
private System.Windows.Forms.TabControl TCMain;
|
||||
private System.Windows.Forms.ContextMenuStrip MenuSpawnEntityFilter;
|
||||
private System.Windows.Forms.ListBox ListPages;
|
||||
private System.Windows.Forms.SplitContainer NavContainer;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
**/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
@@ -30,15 +32,20 @@ using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Forms
|
||||
{
|
||||
public partial class FormMain : Form
|
||||
internal partial class FormMain : Form
|
||||
{
|
||||
#region - 初始化 Init -
|
||||
private const string TAG = nameof(FormMain);
|
||||
|
||||
private const string TAG = "FormMain";
|
||||
public static FormMain Instance { get; private set; }
|
||||
|
||||
#region - 初始化 Init -
|
||||
|
||||
public FormMain()
|
||||
{
|
||||
Logger.I(TAG, "FormMain ctor enter");
|
||||
|
||||
Instance = this;
|
||||
|
||||
InitializeComponent();
|
||||
Icon = Resources.IconGrasscutter;
|
||||
|
||||
@@ -85,6 +92,13 @@ namespace GrasscutterTools.Forms
|
||||
Logger.I(TAG, "Restore NavContainer SplitterDistance: " + NavContainer.SplitterDistance);
|
||||
}
|
||||
|
||||
// 还原窗口的不透明度
|
||||
if (Settings.Default.WindowOpacity < 100)
|
||||
{
|
||||
Opacity = Settings.Default.WindowOpacity / 100.0;
|
||||
Logger.I(TAG, "Restore window opacity: " + Opacity);
|
||||
}
|
||||
|
||||
// 恢复自动复制选项状态
|
||||
ChkAutoCopy.Checked = Settings.Default.AutoCopy;
|
||||
|
||||
@@ -99,133 +113,13 @@ namespace GrasscutterTools.Forms
|
||||
Logger.I(TAG, "FormMain ctor completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化并创建所有页面
|
||||
/// </summary>
|
||||
private void InitPages()
|
||||
{
|
||||
Logger.I(TAG, "InitPages enter");
|
||||
TCMain.SuspendLayout();
|
||||
var ph = CreatePage<PageHome>();
|
||||
ph.OnLanguageChanged = () => FormMain_Load(this, EventArgs.Empty);
|
||||
var poc = CreatePage<PageOpenCommand>();
|
||||
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
|
||||
var pcc = CreatePage<PageCustomCommands>();
|
||||
var phk = CreatePage<PageHotKey>();
|
||||
pcc.OnAddHotKey = tag =>
|
||||
{
|
||||
phk.AddNewHotKey(tag);
|
||||
// 跳转到快捷键界面
|
||||
for (var i = 0; i < TCMain.Controls.Count; i++)
|
||||
{
|
||||
if (TCMain.Controls[i].Controls[0] == phk)
|
||||
{
|
||||
ListPages.SelectedIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
CreatePage<PageGiveArtifact>();
|
||||
CreatePage<PageSetProp>();
|
||||
CreatePage<PageSpawn>();
|
||||
CreatePage<PageGiveItem>();
|
||||
CreatePage<PageAvatar>();
|
||||
CreatePage<PageGiveWeapon>();
|
||||
CreatePage<PageScene>();
|
||||
CreatePage<PageTasks>();
|
||||
CreatePage<PageManagement>();
|
||||
CreatePage<PageMail>();
|
||||
CreatePage<PageQuest>();
|
||||
CreatePage<PageAchievement>();
|
||||
CreatePage<PageAbout>();
|
||||
#if DEBUG
|
||||
CreatePage<PageTools>();
|
||||
#endif
|
||||
TCMain.ResumeLayout();
|
||||
Logger.I(TAG, "InitPages completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化页面导航
|
||||
/// 重载界面
|
||||
/// </summary>
|
||||
private void InitPagesNav()
|
||||
public void Reload()
|
||||
{
|
||||
ListPages.Items.Clear();
|
||||
ListPages.Items.AddRange(new object[]
|
||||
{
|
||||
Resources.PageHomeTitle,
|
||||
Resources.PageOpenCommandTitle,
|
||||
Resources.PageCustomCommandsTitle,
|
||||
Resources.PageHotKey,
|
||||
Resources.PageGetArtifactTitle,
|
||||
Resources.PageSetPropTitle,
|
||||
Resources.PageSpawnTitle,
|
||||
Resources.PageGiveItemTitle,
|
||||
Resources.PageAvatarTitle,
|
||||
Resources.PageGiveWeaponTitle,
|
||||
Resources.PageSceneTitle,
|
||||
Resources.PageTasksTitle,
|
||||
Resources.PageManagementTitle,
|
||||
Resources.PageMailTitle,
|
||||
Resources.PageQuestTitle,
|
||||
Resources.PageAchievementTitle,
|
||||
Resources.PageAboutTitle,
|
||||
#if DEBUG
|
||||
"Tools",
|
||||
#endif
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表项居中绘制
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ListPages_DrawItem(object sender, DrawItemEventArgs e)
|
||||
{
|
||||
e.DrawBackground();
|
||||
e.DrawFocusRectangle();
|
||||
var strFmt = new StringFormat
|
||||
{
|
||||
Alignment = StringAlignment.Center, //文本垂直居中
|
||||
LineAlignment = StringAlignment.Center //文本水平居中
|
||||
};
|
||||
e.Graphics.DrawString(ListPages.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, strFmt);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表大小改变时触发
|
||||
/// </summary>
|
||||
private void ListPages_SizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 立刻重绘列表项
|
||||
ListPages.Refresh();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建指定类型页面
|
||||
/// </summary>
|
||||
/// <typeparam name="T">页面类型,必须继承BasePage</typeparam>
|
||||
/// <returns>页面实例</returns>
|
||||
private T CreatePage<T>() where T : BasePage, new()
|
||||
{
|
||||
var page = new T
|
||||
{
|
||||
SetCommand = SetCommand,
|
||||
RunCommands = RunCommands,
|
||||
GetCommand = () => CmbCommand.Text,
|
||||
Dock = DockStyle.Fill,
|
||||
Name = typeof(T).Name,
|
||||
};
|
||||
var tp = new TabPage();
|
||||
TCMain.TabPages.Add(tp);
|
||||
tp.Controls.Add(page);
|
||||
return page;
|
||||
}
|
||||
|
||||
private void ListPages_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
TCMain.SelectedIndex = ListPages.SelectedIndex;
|
||||
FormMain_Load(this, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -241,21 +135,23 @@ namespace GrasscutterTools.Forms
|
||||
if (DesignMode) return;
|
||||
|
||||
// 加载页面导航
|
||||
InitPagesNav();
|
||||
UpdatePagesNav();
|
||||
|
||||
// 加载游戏ID资源
|
||||
GameData.LoadResources();
|
||||
|
||||
// 遍历每一个页面重新加载
|
||||
foreach (TabPage tp in TCMain.Controls)
|
||||
foreach (var page in Pages.Values)
|
||||
{
|
||||
if (tp.Controls.Count > 0 && tp.Controls[0] is BasePage page)
|
||||
{
|
||||
Logger.I(TAG, $"{page.Name} OnLoad enter");
|
||||
page.OnLoad();
|
||||
Logger.I(TAG, $"{page.Name} OnLoad completed");
|
||||
}
|
||||
Logger.I(TAG, $"{page.Name} OnLoad enter");
|
||||
page.OnLoad();
|
||||
Logger.I(TAG, $"{page.Name} OnLoad completed");
|
||||
}
|
||||
|
||||
// 默认选中首页
|
||||
if (ListPages.SelectedIndex == -1)
|
||||
ListPages.SelectedIndex = 0;
|
||||
|
||||
Logger.I(TAG, "FormMain_Load completed");
|
||||
}
|
||||
|
||||
@@ -266,10 +162,11 @@ namespace GrasscutterTools.Forms
|
||||
{
|
||||
Logger.I(TAG, "FormMain FormClosed enter");
|
||||
// 遍历每一个页面,通知关闭
|
||||
foreach (TabPage tp in TCMain.Controls)
|
||||
foreach (var page in Pages.Values)
|
||||
{
|
||||
if (tp.Controls.Count > 0 && tp.Controls[0] is BasePage page)
|
||||
page.OnClosed();
|
||||
Logger.I(TAG, $"{page.Name} OnClosed enter");
|
||||
page.OnClosed();
|
||||
Logger.I(TAG, $"{page.Name} OnClosed completed");
|
||||
}
|
||||
|
||||
// 保存当前设置
|
||||
@@ -305,6 +202,254 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#endregion - 初始化 Init -
|
||||
|
||||
#region - 页面导航 Nav -
|
||||
|
||||
public Dictionary<string, BasePage> Pages { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 初始化并创建所有页面
|
||||
/// </summary>
|
||||
private void InitPages()
|
||||
{
|
||||
Logger.I(TAG, "InitPages enter");
|
||||
Pages = new Dictionary<string, BasePage>(32);
|
||||
CreatePage<PageHome>();
|
||||
var poc = CreatePage<PageOpenCommand>();
|
||||
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
|
||||
CreatePage<PageProxy>();
|
||||
CreatePage<PageCustomCommands>();
|
||||
CreatePage<PageHotKey>();
|
||||
CreatePage<PageGiveArtifact>();
|
||||
CreatePage<PageSetProp>();
|
||||
CreatePage<PageSpawn>();
|
||||
CreatePage<PageGiveItem>();
|
||||
CreatePage<PageAvatar>();
|
||||
CreatePage<PageGiveWeapon>();
|
||||
CreatePage<PageScene>();
|
||||
CreatePage<PageSceneTag>();
|
||||
CreatePage<PageWeather>();
|
||||
CreatePage<PageTasks>();
|
||||
CreatePage<PageManagement>();
|
||||
CreatePage<PageMail>();
|
||||
CreatePage<PageQuest>();
|
||||
CreatePage<PageAchievement>();
|
||||
CreatePage<PageSettings>();
|
||||
CreatePage<PageAbout>();
|
||||
#if DEBUG
|
||||
CreatePage<PageTools>();
|
||||
#endif
|
||||
Logger.I(TAG, "InitPages completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当前的页面选项卡顺序
|
||||
/// string Item1 = Page Name(Key)
|
||||
/// bool Item2 = IsVisible
|
||||
/// </summary>
|
||||
public List<Tuple<string, bool>> PageTabOrders { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 加载页面选项卡顺序
|
||||
/// </summary>
|
||||
private List<Tuple<string, bool>> LoadPageTabOrders()
|
||||
{
|
||||
if (PageTabOrders != null) return PageTabOrders;
|
||||
List<Tuple<string, bool>> tabOrders;
|
||||
if (!(Settings.Default.PageOrders?.Count > 0))
|
||||
{
|
||||
tabOrders = new List<Tuple<string, bool>>(Pages.Count);
|
||||
// 默认状态
|
||||
foreach (var tab in Pages)
|
||||
tabOrders.Add(new Tuple<string, bool>(tab.Key, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
tabOrders = new List<Tuple<string, bool>>(Settings.Default.PageOrders.Count);
|
||||
// 从设置中读取
|
||||
foreach (var item in Settings.Default.PageOrders)
|
||||
{
|
||||
// 冒号分隔的项 "PageHome:1" 0=隐藏 1=显示
|
||||
var sp = item.IndexOf(':');
|
||||
if (sp == -1 || !int.TryParse(item.Substring(sp + 1), out var isVisible)) continue;
|
||||
tabOrders.Add(new Tuple<string, bool>(item.Substring(0, sp), isVisible != 0));
|
||||
}
|
||||
}
|
||||
|
||||
return tabOrders;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置页面选项卡顺序
|
||||
/// </summary>
|
||||
public void ResetPageTabOrders()
|
||||
{
|
||||
PageTabOrders = new List<Tuple<string, bool>>(Pages.Count);
|
||||
// 默认状态
|
||||
foreach (var tab in Pages)
|
||||
PageTabOrders.Add(new Tuple<string, bool>(tab.Key, true));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存页面选项卡顺序
|
||||
/// </summary>
|
||||
public void SavePageTabOrders()
|
||||
{
|
||||
if (PageTabOrders == null || PageTabOrders.Count == 0)
|
||||
{
|
||||
Settings.Default.PageOrders = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var setting = new StringCollection();
|
||||
// 冒号分隔的项 "PageHome:1" 0=隐藏 1=显示
|
||||
foreach (var pageOrder in PageTabOrders)
|
||||
setting.Add($"{pageOrder.Item1}:{(pageOrder.Item2?'1':'0')}");
|
||||
Settings.Default.PageOrders = setting;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化页面导航
|
||||
/// </summary>
|
||||
public void UpdatePagesNav()
|
||||
{
|
||||
ListPages.BeginUpdate();
|
||||
ListPages.Items.Clear();
|
||||
|
||||
// 以下代码主要是为了加载用户自定义顺序的选项卡
|
||||
var tabOrders = LoadPageTabOrders();
|
||||
// 程序更新后增加或减少了界面的情况
|
||||
if (tabOrders.Count != Pages.Count)
|
||||
{
|
||||
PageTabOrders = new List<Tuple<string, bool>>(Pages.Count);
|
||||
var i = 0;
|
||||
var pageKeys = Pages.Keys.ToList();
|
||||
foreach (var pageOrder in tabOrders)
|
||||
{
|
||||
// 新增页面优先显示
|
||||
if (tabOrders.All(it => it.Item1 != pageKeys[i]))
|
||||
{
|
||||
PageTabOrders.Add(new Tuple<string, bool>(pageKeys[i], true));
|
||||
ListPages.Items.Add(Pages[pageKeys[i]].Text);
|
||||
}
|
||||
// 尝试获取页面标题
|
||||
if (Pages.TryGetValue(pageOrder.Item1, out var page))
|
||||
{
|
||||
// 仅设置为可见时添加
|
||||
if (pageOrder.Item2)
|
||||
ListPages.Items.Add(page.Text);
|
||||
PageTabOrders.Add(new Tuple<string, bool>(pageOrder.Item1, pageOrder.Item2));
|
||||
}
|
||||
// 如果获取不到页面标题,说明在本次更新中这个页面被删掉了,因此设置项也随之更新
|
||||
i++;
|
||||
}
|
||||
// 加上新增在最后的页面
|
||||
if (ListPages.Items.Count == i)
|
||||
{
|
||||
while (i < Pages.Count)
|
||||
{
|
||||
PageTabOrders.Add(new Tuple<string, bool>(pageKeys[i], true));
|
||||
ListPages.Items.Add(Pages[pageKeys[i]].Text);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
// 保存页面顺序
|
||||
SavePageTabOrders();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 按照设定顺序显示
|
||||
foreach (var pageOrder in tabOrders)
|
||||
{
|
||||
if (pageOrder.Item2)
|
||||
ListPages.Items.Add(Pages[pageOrder.Item1].Text);
|
||||
}
|
||||
|
||||
PageTabOrders = tabOrders;
|
||||
}
|
||||
|
||||
ListPages.EndUpdate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表选中项改变时触发
|
||||
/// </summary>
|
||||
private void ListPages_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (ListPages.SelectedIndex == -1) return;
|
||||
// 根据选中索引反查选中页面Key
|
||||
var key = PageTabOrders.Where(it => it.Item2)
|
||||
.ElementAt(ListPages.SelectedIndex)
|
||||
.Item1;
|
||||
// 通过Key找到页面的父节点也就是TabPage,设置为选中项
|
||||
ShowPage(Pages[key]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 展示页面
|
||||
/// </summary>
|
||||
/// <param name="page">页面实例</param>
|
||||
private void ShowPage(BasePage page)
|
||||
{
|
||||
NavContainer.Panel2.SuspendLayout();
|
||||
NavContainer.Panel2.Controls.Clear();
|
||||
NavContainer.Panel2.Controls.Add(page);
|
||||
NavContainer.Panel2.ResumeLayout();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表项居中绘制
|
||||
/// </summary>
|
||||
private void ListPages_DrawItem(object sender, DrawItemEventArgs e)
|
||||
{
|
||||
e.DrawBackground();
|
||||
e.DrawFocusRectangle();
|
||||
var strFmt = new StringFormat
|
||||
{
|
||||
Alignment = StringAlignment.Center, //文本垂直居中
|
||||
LineAlignment = StringAlignment.Center //文本水平居中
|
||||
};
|
||||
e.Graphics.DrawString(ListPages.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, strFmt);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表高度测量
|
||||
/// </summary>
|
||||
private void ListPages_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
// 列表项高度为字体高度1.5倍
|
||||
e.ItemHeight = ListPages.Font.Height * 3 / 2;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表大小改变时触发
|
||||
/// </summary>
|
||||
private void ListPages_SizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 立刻重绘列表项
|
||||
ListPages.Refresh();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建指定类型页面
|
||||
/// </summary>
|
||||
/// <typeparam name="T">页面类型,必须继承BasePage</typeparam>
|
||||
/// <returns>页面实例</returns>
|
||||
private T CreatePage<T>() where T : BasePage, new()
|
||||
{
|
||||
var page = new T
|
||||
{
|
||||
SetCommand = SetCommand,
|
||||
RunCommands = RunCommands,
|
||||
GetCommand = () => CmbCommand.Text,
|
||||
Dock = DockStyle.Fill,
|
||||
Name = typeof(T).Name,
|
||||
};
|
||||
Pages.Add(page.Name, page);
|
||||
return page;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region - 快捷键执行 HotKey -
|
||||
|
||||
/// <summary>
|
||||
@@ -380,9 +525,12 @@ namespace GrasscutterTools.Forms
|
||||
/// <param name="args">参数</param>
|
||||
private void SetCommand(string command, string args)
|
||||
{
|
||||
SetCommand(Settings.Default.IsIncludeUID
|
||||
? $"{command} {args.Trim()} @{Settings.Default.Uid}"
|
||||
: $"{command} {args.Trim()}");
|
||||
if (!string.IsNullOrEmpty(args))
|
||||
command = $"{command} {args}";
|
||||
command = command.Trim();
|
||||
if (Settings.Default.IsIncludeUID)
|
||||
command = $"{command} @{Settings.Default.Uid}";
|
||||
SetCommand(command);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -442,7 +590,7 @@ namespace GrasscutterTools.Forms
|
||||
/// <returns>是否执行成功</returns>
|
||||
private async Task<bool> RunRawCommands(string commands)
|
||||
{
|
||||
if (commands.IndexOf('|') == -1)
|
||||
if (commands.IndexOf('|') == -1 || Common.OC?.CanInvokeMultipleCmd == true)
|
||||
return await RunCommands(FormatCommand(commands));
|
||||
return await RunCommands(commands.Split('|').Select(FormatCommand).ToArray());
|
||||
}
|
||||
@@ -468,16 +616,7 @@ namespace GrasscutterTools.Forms
|
||||
if (Common.OC == null || !Common.OC.CanInvoke)
|
||||
{
|
||||
ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand);
|
||||
//TCMain.SelectedTab = TPRemoteCall;
|
||||
for (var i = 0; i < TCMain.Controls.Count; i++)
|
||||
{
|
||||
if (TCMain.Controls[i].Controls[0] is PageOpenCommand)
|
||||
{
|
||||
ListPages.SelectedIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
NavigateTo<PageOpenCommand>();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -499,7 +638,7 @@ namespace GrasscutterTools.Forms
|
||||
{
|
||||
Logger.I(TAG, "RunCommand:" + cmd);
|
||||
var msg = await Common.OC.Invoke(cmd);
|
||||
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg);
|
||||
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg.Replace("\n", "\r\n"));
|
||||
TxtCommandRunLog.AppendText(Environment.NewLine);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -580,13 +719,42 @@ namespace GrasscutterTools.Forms
|
||||
// F5 为执行命令
|
||||
OnOpenCommandInvoke();
|
||||
}
|
||||
else if (e.Alt && e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
|
||||
else if ((e.Alt || e.Control) && e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
|
||||
{
|
||||
// Alt+数字键 = 跳转到对应页面
|
||||
// Alt|Ctrl+数字键 = 跳转到对应页面
|
||||
var i = e.KeyCode == Keys.D0 ? 9 : e.KeyCode - Keys.D1;
|
||||
if (i < ListPages.Items.Count)
|
||||
ListPages.SelectedIndex = i;
|
||||
}
|
||||
else if (e.Control && e.KeyCode == Keys.Tab)
|
||||
{
|
||||
// 切换到下一个页面
|
||||
ListPages.SelectedIndex = (ListPages.SelectedIndex + 1) % ListPages.Items.Count;
|
||||
}
|
||||
else if (Common.KeyGo.IsEnabled == false)
|
||||
{
|
||||
foreach (var hotkeyItem in Common.KeyGo.Items)
|
||||
{
|
||||
if (!hotkeyItem.IsEnabled) continue;
|
||||
|
||||
var t = hotkeyItem.HotKey.LastIndexOf('+');
|
||||
var key = (t >= 0) ? hotkeyItem.HotKey.Substring(t+1) : hotkeyItem.HotKey;
|
||||
if (e.KeyCode != (Keys)Enum.Parse(typeof(Keys), key.Trim()))
|
||||
continue;
|
||||
|
||||
if (t >= 0)
|
||||
{
|
||||
if (hotkeyItem.HotKey.Contains("Ctrl") && !e.Control)
|
||||
continue;
|
||||
if (hotkeyItem.HotKey.Contains("Shift") && !e.Shift)
|
||||
continue;
|
||||
if (hotkeyItem.HotKey.Contains("Alt") && !e.Alt)
|
||||
continue;
|
||||
}
|
||||
BeginInvoke(new Func<Task>(() => RunRawCommands(hotkeyItem.Commands)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -609,6 +777,46 @@ namespace GrasscutterTools.Forms
|
||||
TTip.Show(message, control, 0, control.Size.Height, 3000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航到目标页面并返回该页面实例
|
||||
/// </summary>
|
||||
/// <typeparam name="TPage">页面类型</typeparam>
|
||||
public TPage NavigateTo<TPage>() where TPage : BasePage
|
||||
{
|
||||
var key = typeof(TPage).Name;
|
||||
var page = Pages[key] as TPage;
|
||||
var i = 0;
|
||||
foreach (var it in PageTabOrders.Where(it => it.Item2))
|
||||
{
|
||||
if (it.Item1 == key)
|
||||
{
|
||||
ListPages.SelectedIndex = i;
|
||||
return page;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
ShowPage(page);
|
||||
return page;
|
||||
}
|
||||
|
||||
#endregion - 通用 General -
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 命令栏文本改变时触发
|
||||
/// </summary>
|
||||
private void CmbCommand_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LblClearFilter.Visible = CmbCommand.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空命令栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
CmbCommand.Text = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,7 @@
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="ListPages.ItemHeight" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name="ListPages.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
@@ -171,39 +171,6 @@
|
||||
<data name="NavContainer.Panel1MinSize" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name="TCMain.Appearance" type="System.Windows.Forms.TabAppearance, System.Windows.Forms">
|
||||
<value>FlatButtons</value>
|
||||
</data>
|
||||
<data name="TCMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="TCMain.ItemSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>0, 1</value>
|
||||
</data>
|
||||
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>610, 275</value>
|
||||
</data>
|
||||
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>656, 275</value>
|
||||
</data>
|
||||
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>TCMain.Name" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TCMain.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TCMain.Parent" xml:space="preserve">
|
||||
<value>NavContainer.Panel2</value>
|
||||
</data>
|
||||
<data name=">>TCMain.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>NavContainer.Panel2.Name" xml:space="preserve">
|
||||
<value>NavContainer.Panel2</value>
|
||||
</data>
|
||||
@@ -262,7 +229,7 @@
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>CmbCommand.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="BtnCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
@@ -289,7 +256,7 @@
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -319,11 +286,47 @@
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoCopy.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>680, 26</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
@@ -352,7 +355,7 @@
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 293</value>
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
this.BtnClearGoods = new System.Windows.Forms.Button();
|
||||
this.BtnDeleteGoods = new System.Windows.Forms.Button();
|
||||
this.GrpItems = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearItemFilter = new System.Windows.Forms.Label();
|
||||
this.TxtItemFilter = new System.Windows.Forms.TextBox();
|
||||
this.GrpGoodsInfo = new System.Windows.Forms.GroupBox();
|
||||
this.BtnSaveGoods = new System.Windows.Forms.Button();
|
||||
@@ -132,8 +133,8 @@
|
||||
//
|
||||
// GrpShopList
|
||||
//
|
||||
resources.ApplyResources(this.GrpShopList, "GrpShopList");
|
||||
this.GrpShopList.Controls.Add(this.ListShop);
|
||||
resources.ApplyResources(this.GrpShopList, "GrpShopList");
|
||||
this.GrpShopList.Name = "GrpShopList";
|
||||
this.GrpShopList.TabStop = false;
|
||||
//
|
||||
@@ -163,11 +164,20 @@
|
||||
// GrpItems
|
||||
//
|
||||
resources.ApplyResources(this.GrpItems, "GrpItems");
|
||||
this.GrpItems.Controls.Add(this.LblClearItemFilter);
|
||||
this.GrpItems.Controls.Add(this.TxtItemFilter);
|
||||
this.GrpItems.Controls.Add(this.ListItems);
|
||||
this.GrpItems.Name = "GrpItems";
|
||||
this.GrpItems.TabStop = false;
|
||||
//
|
||||
// LblClearItemFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearItemFilter, "LblClearItemFilter");
|
||||
this.LblClearItemFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearItemFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearItemFilter.Name = "LblClearItemFilter";
|
||||
this.LblClearItemFilter.Click += new System.EventHandler(this.LblClearItemFilter_Click);
|
||||
//
|
||||
// TxtItemFilter
|
||||
//
|
||||
resources.ApplyResources(this.TxtItemFilter, "TxtItemFilter");
|
||||
@@ -698,5 +708,6 @@
|
||||
private System.Windows.Forms.TextBox TxtItemFilter;
|
||||
private System.Windows.Forms.Button BtnClearGoods;
|
||||
private System.Windows.Forms.Button BtnDeleteGoods;
|
||||
private System.Windows.Forms.Label LblClearItemFilter;
|
||||
}
|
||||
}
|
||||
@@ -529,6 +529,15 @@ namespace GrasscutterTools.Forms
|
||||
private void TxtItemFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListItems, GameData.Items.Lines, TxtItemFilter.Text);
|
||||
LblClearItemFilter.Visible = TxtItemFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空物品列表过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearItemFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtItemFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -37,9 +37,10 @@
|
||||
this.LblResourcesPath = new System.Windows.Forms.Label();
|
||||
this.BtnSearch = new System.Windows.Forms.Button();
|
||||
this.DGVTextMap = new System.Windows.Forms.DataGridView();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.ColumnHash = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnText = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DGVTextMap)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -47,6 +48,7 @@
|
||||
//
|
||||
resources.ApplyResources(this.TxtTextMapFilter, "TxtTextMapFilter");
|
||||
this.TxtTextMapFilter.Name = "TxtTextMapFilter";
|
||||
this.TxtTextMapFilter.TextChanged += new System.EventHandler(this.TxtTextMapFilter_TextChanged);
|
||||
this.TxtTextMapFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTextMapFilter_KeyDown);
|
||||
//
|
||||
// BtnSelectRecoursePath
|
||||
@@ -90,42 +92,51 @@
|
||||
//
|
||||
// DGVTextMap
|
||||
//
|
||||
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
|
||||
this.DGVTextMap.AllowUserToAddRows = false;
|
||||
this.DGVTextMap.AllowUserToDeleteRows = false;
|
||||
this.DGVTextMap.AllowUserToResizeRows = false;
|
||||
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
|
||||
this.DGVTextMap.BackgroundColor = System.Drawing.Color.White;
|
||||
this.DGVTextMap.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.DGVTextMap.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.ColumnHash,
|
||||
this.ColumnID,
|
||||
this.ColumnText});
|
||||
this.ColumnText,
|
||||
this.ColumnID});
|
||||
this.DGVTextMap.Name = "DGVTextMap";
|
||||
this.DGVTextMap.ReadOnly = true;
|
||||
this.DGVTextMap.RowTemplate.Height = 23;
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// ColumnHash
|
||||
//
|
||||
resources.ApplyResources(this.ColumnHash, "ColumnHash");
|
||||
this.ColumnHash.Name = "ColumnHash";
|
||||
this.ColumnHash.ReadOnly = true;
|
||||
//
|
||||
// ColumnID
|
||||
//
|
||||
resources.ApplyResources(this.ColumnID, "ColumnID");
|
||||
this.ColumnID.Name = "ColumnID";
|
||||
this.ColumnID.ReadOnly = true;
|
||||
//
|
||||
// ColumnText
|
||||
//
|
||||
resources.ApplyResources(this.ColumnText, "ColumnText");
|
||||
this.ColumnText.Name = "ColumnText";
|
||||
this.ColumnText.ReadOnly = true;
|
||||
//
|
||||
// ColumnID
|
||||
//
|
||||
resources.ApplyResources(this.ColumnID, "ColumnID");
|
||||
this.ColumnID.Name = "ColumnID";
|
||||
this.ColumnID.ReadOnly = true;
|
||||
//
|
||||
// FormTextMapBrowser
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.DGVTextMap);
|
||||
this.Controls.Add(this.BtnSearch);
|
||||
this.Controls.Add(this.ChkTopMost);
|
||||
@@ -151,8 +162,9 @@
|
||||
private System.Windows.Forms.Label LblResourcesPath;
|
||||
private System.Windows.Forms.Button BtnSearch;
|
||||
private System.Windows.Forms.DataGridView DGVTextMap;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnHash;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnID;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnText;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnID;
|
||||
}
|
||||
}
|
||||
@@ -119,13 +119,12 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void GenLines()
|
||||
{
|
||||
List<ListViewItem> items = new List<ListViewItem>(data.TextMap.Count);
|
||||
var items = new List<ListViewItem>(data.TextMap.Count);
|
||||
foreach (var kv in data.TextMap)
|
||||
{
|
||||
if (data.ManualTextMap.TryGetValue(kv.Key, out string id))
|
||||
items.Add(new ListViewItem(new string[] { kv.Key, id, kv.Value }));
|
||||
else
|
||||
items.Add(new ListViewItem(new string[] { kv.Key, "", kv.Value }));
|
||||
items.Add(data.ManualTextMap?.TryGetValue(kv.Key, out var id) == true
|
||||
? new ListViewItem(new[] { kv.Key, id, kv.Value })
|
||||
: new ListViewItem(new[] { kv.Key, "", kv.Value }));
|
||||
}
|
||||
Items = items;
|
||||
}
|
||||
@@ -161,26 +160,25 @@ namespace GrasscutterTools.Forms
|
||||
Cursor = Cursors.WaitCursor;
|
||||
Application.DoEvents();
|
||||
|
||||
var result = data.ManualTextMap.Where(kv => r.Match(kv.Value).Success)
|
||||
.Select(kv => new { Hash = kv.Key, Id = kv.Value, Text = data.TextMap[kv.Key] })
|
||||
.Concat(
|
||||
data.TextMap.Where(kv => r.Match(kv.Key).Success || r.Match(kv.Value).Success)
|
||||
.Select(kv => new
|
||||
{
|
||||
Hash = kv.Key,
|
||||
Id = data.ManualTextMap.TryGetValue(kv.Key, out string id) ? id : "",
|
||||
Text = kv.Value
|
||||
})
|
||||
).ToList();
|
||||
var manualResult = data.ManualTextMap?.Where(kv => r.Match(kv.Value).Success)
|
||||
.Select(kv => new { Hash = kv.Key, Text = data.TextMap[kv.Key], Id = kv.Value, });
|
||||
var textMapResult = data.TextMap.Where(kv => r.Match(kv.Key).Success || r.Match(kv.Value).Success)
|
||||
.Select(kv => new
|
||||
{
|
||||
Hash = kv.Key,
|
||||
Text = kv.Value,
|
||||
Id = data.ManualTextMap?.TryGetValue(kv.Key, out var id) == true ? id : "",
|
||||
});
|
||||
var result = manualResult == null ? textMapResult.ToList() : textMapResult.Concat(manualResult).ToList();
|
||||
|
||||
DGVTextMap.SuspendLayout();
|
||||
DGVTextMap.Rows.Clear();
|
||||
for (int i = 0; i < result.Count; i++)
|
||||
for (var i = 0; i < result.Count; i++)
|
||||
{
|
||||
DGVTextMap.Rows.Add();
|
||||
DGVTextMap.Rows[i].Cells[0].Value = result[i].Hash;
|
||||
DGVTextMap.Rows[i].Cells[1].Value = result[i].Id;
|
||||
DGVTextMap.Rows[i].Cells[2].Value = result[i].Text;
|
||||
DGVTextMap.Rows[i].Cells[1].Value = result[i].Text;
|
||||
DGVTextMap.Rows[i].Cells[2].Value = result[i].Id;
|
||||
}
|
||||
DGVTextMap.ResumeLayout();
|
||||
}
|
||||
@@ -195,5 +193,15 @@ namespace GrasscutterTools.Forms
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
BtnSearch_Click(sender, e);
|
||||
}
|
||||
|
||||
private void TxtTextMapFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LblClearFilter.Visible = TxtTextMapFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtTextMapFilter.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,289 +117,325 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name=">>BtnSelectRecoursePath.Name" xml:space="preserve">
|
||||
<value>BtnSelectRecoursePath</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<data name="TxtTextMapFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>177, 15</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Name" xml:space="preserve">
|
||||
<value>BtnSearch</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name="ColumnText.HeaderText" xml:space="preserve">
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 41</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>96, 12</value>
|
||||
</data>
|
||||
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="ColumnID.Width" type="System.Int32, mscorlib">
|
||||
<value>240</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Text" xml:space="preserve">
|
||||
<value>请选择Resources路径</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 17</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>327, 17</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>555, 23</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>文本映射表浏览器</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>636, 379</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Name" xml:space="preserve">
|
||||
<value>LblResourcesPath</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtTextMapFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ColumnHash.HeaderText" xml:space="preserve">
|
||||
<value>Hash</value>
|
||||
</data>
|
||||
<data name="ColumnText.Width" type="System.Int32, mscorlib">
|
||||
<value>250</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>548, 12</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Text" xml:space="preserve">
|
||||
<value>搜索</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Name" xml:space="preserve">
|
||||
<value>DGVTextMap</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Name" xml:space="preserve">
|
||||
<value>ColumnHash</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
|
||||
<value>浏览</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>510, 15</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Name" xml:space="preserve">
|
||||
<value>ChkTopMost</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 9pt</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 461</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Name" xml:space="preserve">
|
||||
<value>ColumnID</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="ColumnID.HeaderText" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Name" xml:space="preserve">
|
||||
<value>ColumnText</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormTextMapBrowser</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>573, 41</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.Name" xml:space="preserve">
|
||||
<value>TxtTextMapFilter</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 70</value>
|
||||
<data name=">>TxtTextMapFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<data name=">>TxtTextMapFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
<data name=">>TxtTextMapFilter.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>置顶</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>96, 12</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 400</value>
|
||||
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
|
||||
<value>浏览</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Name" xml:space="preserve">
|
||||
<value>BtnSelectRecoursePath</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>548, 12</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>510, 15</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 17</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 14</value>
|
||||
</data>
|
||||
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>置顶</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Name" xml:space="preserve">
|
||||
<value>ChkTopMost</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>177, 15</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>327, 17</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Text" xml:space="preserve">
|
||||
<value>请选择Resources路径</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Name" xml:space="preserve">
|
||||
<value>LblResourcesPath</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>573, 41</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Text" xml:space="preserve">
|
||||
<value>搜索</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Name" xml:space="preserve">
|
||||
<value>BtnSearch</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<metadata name="ColumnHash.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnHash.HeaderText" xml:space="preserve">
|
||||
<value>Hash</value>
|
||||
</data>
|
||||
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnText.HeaderText" xml:space="preserve">
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="ColumnText.Width" type="System.Int32, mscorlib">
|
||||
<value>250</value>
|
||||
</data>
|
||||
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnID.HeaderText" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ColumnID.Width" type="System.Int32, mscorlib">
|
||||
<value>240</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 70</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>636, 379</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Name" xml:space="preserve">
|
||||
<value>DGVTextMap</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>545, 44</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>18</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 461</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 9pt</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 400</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>文本映射表浏览器</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Name" xml:space="preserve">
|
||||
<value>ColumnHash</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Name" xml:space="preserve">
|
||||
<value>ColumnText</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Name" xml:space="preserve">
|
||||
<value>ColumnID</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormTextMapBrowser</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -163,10 +163,20 @@ namespace GrasscutterTools.Game
|
||||
public static readonly Version V1_6_3 = new Version(1, 6, 3);
|
||||
|
||||
/// <summary>
|
||||
/// 2023/??
|
||||
/// 2023/9/1
|
||||
/// </summary>
|
||||
public static readonly Version V1_7_0 = new Version(1, 7, 0);
|
||||
|
||||
/// <summary>
|
||||
/// 2023/9/3
|
||||
/// </summary>
|
||||
public static readonly Version V1_7_1 = new Version(1, 7, 1);
|
||||
|
||||
/// <summary>
|
||||
/// 2023/10/1
|
||||
/// </summary>
|
||||
public static readonly Version V1_7_2 = new Version(1, 7, 2);
|
||||
|
||||
// More...
|
||||
/// <summary>
|
||||
/// Date
|
||||
@@ -190,6 +200,8 @@ namespace GrasscutterTools.Game
|
||||
V1_6_2,
|
||||
V1_6_3,
|
||||
V1_7_0,
|
||||
V1_7_1,
|
||||
V1_7_2,
|
||||
};
|
||||
|
||||
#endregion - 版本列表 Version List -
|
||||
|
||||
@@ -17,10 +17,12 @@
|
||||
*
|
||||
**/
|
||||
|
||||
using GrasscutterTools.Game.Data;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.Game.CutScene
|
||||
{
|
||||
[ResourceType("CutsceneExcelConfigData.json")]
|
||||
internal class CutSceneItem
|
||||
{
|
||||
[JsonProperty("id")]
|
||||
|
||||
39
Source/GrasscutterTools/Game/Data/Excels/SceneTagData.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2023 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.Game.Data.Excels
|
||||
{
|
||||
[ResourceType("SceneTagConfigData.json")]
|
||||
internal class SceneTagData
|
||||
{
|
||||
[JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[JsonProperty("sceneTagName")]
|
||||
public string SceneTagName { get; set; }
|
||||
|
||||
[JsonProperty("sceneId")]
|
||||
public int SceneId { get; set; }
|
||||
|
||||
[JsonProperty("isDefaultValid")]
|
||||
public bool IsDefaultValid { get; set; }
|
||||
}
|
||||
}
|
||||
42
Source/GrasscutterTools/Game/Data/Excels/WeatherData.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2023 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.Game.Data.Excels
|
||||
{
|
||||
[ResourceType("WeatherExcelConfigData.json")]
|
||||
internal class WeatherData
|
||||
{
|
||||
[JsonProperty("areaID")]
|
||||
public int AreaId { get; set; }
|
||||
|
||||
[JsonProperty("weatherAreaId")]
|
||||
public int WeatherAreaId { get; set; }
|
||||
|
||||
[JsonProperty("profileName")]
|
||||
public string ProfileName { get; set; }
|
||||
|
||||
[JsonProperty("defaultClimate")]
|
||||
public string DefaultClimate { get; set; }
|
||||
|
||||
[JsonProperty("sceneID")]
|
||||
public int SceneId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
using GrasscutterTools.Game.CutScene;
|
||||
using GrasscutterTools.Game.Data.Excels;
|
||||
using GrasscutterTools.Game.Inventory;
|
||||
using GrasscutterTools.Game.Props;
|
||||
@@ -63,10 +63,15 @@ namespace GrasscutterTools.Game.Data
|
||||
|
||||
public Dictionary<int, SceneData> SceneData { get; set; }
|
||||
|
||||
public List<SceneTagData> SceneTagData { get; set; }
|
||||
|
||||
public Dictionary<int, WeaponData> WeaponData { get; set; }
|
||||
|
||||
public TextMapData TextMapData { get; set; }
|
||||
|
||||
public List<WeatherData> WeatherData { get; set; }
|
||||
public List<CutSceneItem> CutSceneData { get; set; }
|
||||
|
||||
public GameResources(string resourcesDirPath, TextMapData textMapData)
|
||||
{
|
||||
TextMapData = textMapData;
|
||||
@@ -131,7 +136,10 @@ namespace GrasscutterTools.Game.Data
|
||||
var dicType = typeof(Dictionary<,>).MakeGenericType(typeof(int), type);
|
||||
var dic = (IDictionary)Activator.CreateInstance(dicType);
|
||||
foreach (GameResource gameResource in list)
|
||||
{
|
||||
if (gameResource.Id == 0) continue;
|
||||
dic.Add(gameResource.Id, gameResource);
|
||||
}
|
||||
return dic;
|
||||
}
|
||||
|
||||
@@ -191,12 +199,28 @@ namespace GrasscutterTools.Game.Data
|
||||
#endregion Avatar
|
||||
|
||||
#region Dungeon
|
||||
|
||||
|
||||
// Dungeon
|
||||
File.WriteAllLines(
|
||||
sb.Clear();
|
||||
foreach (var it in DungeonData.Values)
|
||||
{
|
||||
if (!TextMapData.TryGetText(it.NameTextMapHash.ToString(), out var name))
|
||||
{
|
||||
var temp = GameData.Dungeons[it.Id];
|
||||
if (temp != ItemMap.EmptyName)
|
||||
name = temp;
|
||||
}
|
||||
|
||||
sb.AppendFormat("{0}:{1}", it.Id, name).AppendLine();
|
||||
}
|
||||
File.WriteAllText(
|
||||
Path.Combine(dir, "Dungeon.txt"),
|
||||
DungeonData.Values.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
|
||||
sb.ToString(),
|
||||
Encoding.UTF8);
|
||||
//File.WriteAllLines(
|
||||
// Path.Combine(dir, "Dungeon.txt"),
|
||||
// DungeonData.Values.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
|
||||
// Encoding.UTF8);
|
||||
|
||||
#endregion Dungeon
|
||||
|
||||
@@ -286,11 +310,16 @@ namespace GrasscutterTools.Game.Data
|
||||
if (m.Key == MaterialType.MATERIAL_BGM)
|
||||
{
|
||||
foreach (var materialData in m)
|
||||
{
|
||||
var param = int.Parse(materialData.ItemUse[0].UseParam[0]);
|
||||
var name = HomeWorldBgmData.ContainsKey(param) ? TextMapData.GetText(
|
||||
HomeWorldBgmData[param].BgmNameTextMapHash.ToString()) : string.Empty;
|
||||
sb.AppendFormat("{0}:{1} - {2}",
|
||||
materialData.Id,
|
||||
TextMapData.GetText(materialData.NameTextMapHash.ToString()),
|
||||
TextMapData.GetText(HomeWorldBgmData[int.Parse(materialData.ItemUse[0].UseParam[0])].BgmNameTextMapHash.ToString())
|
||||
).AppendLine();
|
||||
name);
|
||||
sb.AppendLine();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -403,6 +432,21 @@ namespace GrasscutterTools.Game.Data
|
||||
|
||||
#endregion Scene
|
||||
|
||||
#region CutScene
|
||||
|
||||
// CutScene
|
||||
File.WriteAllLines(
|
||||
Path.Combine(dir, "Cutscene.txt"),
|
||||
CutSceneData.Select(it =>
|
||||
{
|
||||
var text = GameData.CutScenes[it.Id];
|
||||
return text == ItemMap.EmptyName
|
||||
? $"{it.Id}:{it.Path.Substring(it.Path.IndexOf('/') + 1)}"
|
||||
: $"{it.Id}:{text}";
|
||||
}), Encoding.UTF8);
|
||||
|
||||
#endregion CutScene
|
||||
|
||||
#region Weapon
|
||||
|
||||
// Weapon
|
||||
@@ -414,6 +458,56 @@ namespace GrasscutterTools.Game.Data
|
||||
#endregion Weapon
|
||||
}
|
||||
|
||||
#region SceneTag
|
||||
|
||||
// SceneTag
|
||||
|
||||
sb.Clear();
|
||||
|
||||
foreach (var scene in SceneTagData
|
||||
.GroupBy(it => it.SceneId))
|
||||
{
|
||||
sb.Append("// ").AppendLine(scene.Key.ToString());
|
||||
foreach (var sceneTag in scene)
|
||||
{
|
||||
sb.Append($"{sceneTag.Id}:{sceneTag.SceneTagName}");
|
||||
if (sceneTag.IsDefaultValid)
|
||||
sb.Append(" (Default)");
|
||||
sb.AppendLine();
|
||||
}
|
||||
}
|
||||
File.WriteAllText(
|
||||
Path.Combine(projectResourcesDir, "SceneTag.txt"),
|
||||
sb.ToString(),
|
||||
Encoding.UTF8);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Weather
|
||||
|
||||
// Weather
|
||||
|
||||
sb.Clear();
|
||||
|
||||
foreach (var scene in WeatherData
|
||||
.GroupBy(it => it.SceneId)
|
||||
.OrderBy(it => it.Key))
|
||||
{
|
||||
sb.Append("// ").AppendLine(scene.Key.ToString());
|
||||
foreach (var weather in scene)
|
||||
{
|
||||
var profileName = weather.ProfileName.Substring(weather.ProfileName.LastIndexOf('/') + 1)
|
||||
.Replace("ESP_", "");
|
||||
sb.AppendLine($"{weather.AreaId}:{profileName}");
|
||||
}
|
||||
}
|
||||
File.WriteAllText(
|
||||
Path.Combine(projectResourcesDir, "Weather.txt"),
|
||||
sb.ToString(),
|
||||
Encoding.UTF8);
|
||||
|
||||
#endregion
|
||||
|
||||
File.WriteAllLines(
|
||||
Path.Combine(projectResourcesDir, "AvatarColor.txt"),
|
||||
AvatarData.Values.Select(it => $"{it.Id % 1000 + 1000}:{(int)it.QualityType}"),
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*
|
||||
**/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
namespace GrasscutterTools.Game
|
||||
@@ -38,13 +39,30 @@ namespace GrasscutterTools.Game
|
||||
Monsters = new ItemMapGroup(Resources.Monsters);
|
||||
Gadgets = new ItemMapGroup(Resources.Gadget);
|
||||
Scenes = new ItemMap(Resources.Scene);
|
||||
SceneTags = new ItemMapGroup(Resources.SceneTag);
|
||||
Dungeons = new ItemMap(Resources.Dungeon);
|
||||
Weapons = new ItemMap(Resources.Weapon);
|
||||
WeaponColors = new ItemMap(Resources.WeaponColor);
|
||||
GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
|
||||
GachaBannerTitles = new ItemMap(Resources.GachaBannerTitle);
|
||||
GachaBannerPrefabs = ToDictionary(Resources.GachaBannerPrefab);
|
||||
GachaBannerTitles = ToDictionary(Resources.GachaBannerTitle);
|
||||
Quests = new ItemMap(Resources.Quest);
|
||||
ShopType = new ItemMap(Resources.ShopType);
|
||||
Weathers = new ItemMapGroup(Resources.Weather);
|
||||
}
|
||||
|
||||
private static List<KeyValuePair<string, string>> ToDictionary(string file)
|
||||
{
|
||||
var lines = file.Split('\n');
|
||||
var dic = new List<KeyValuePair<string, string>>(lines.Length);
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var i = line.IndexOf(':');
|
||||
if (i <= 0) continue;
|
||||
var key = line.Substring(0, i).Trim();
|
||||
var value = line.Substring(i + 1).Trim();
|
||||
dic.Add(new KeyValuePair<string, string>(key, value));
|
||||
}
|
||||
return dic;
|
||||
}
|
||||
|
||||
public static ItemMap Achievements { get; private set; }
|
||||
@@ -73,18 +91,22 @@ namespace GrasscutterTools.Game
|
||||
|
||||
public static ItemMap Scenes { get; private set; }
|
||||
|
||||
public static ItemMapGroup SceneTags { get; private set; }
|
||||
|
||||
public static ItemMap Dungeons { get; private set; }
|
||||
|
||||
public static ItemMap Weapons { get; private set; }
|
||||
|
||||
public static ItemMap WeaponColors { get; private set; }
|
||||
|
||||
public static ItemMap GachaBannerPrefabs { get; private set; }
|
||||
public static List<KeyValuePair<string, string>> GachaBannerPrefabs { get; private set; }
|
||||
|
||||
public static ItemMap GachaBannerTitles { get; private set; }
|
||||
public static List<KeyValuePair<string, string>> GachaBannerTitles { get; private set; }
|
||||
|
||||
public static ItemMap Quests { get; private set; }
|
||||
|
||||
public static ItemMap ShopType { get; private set; }
|
||||
|
||||
public static ItemMapGroup Weathers { get; private set; }
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@
|
||||
// ReSharper disable InconsistentNaming
|
||||
// ReSharper disable IdentifierTypo
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace GrasscutterTools.Game.Inventory
|
||||
@@ -60,6 +59,15 @@ namespace GrasscutterTools.Game.Inventory
|
||||
MATERIAL_RENAME_ITEM = 47,
|
||||
MATERIAL_GCG_EXCHANGE_ITEM = 48,
|
||||
MATERIAL_QUEST_EVENT_BOOK = 49,
|
||||
MATERIAL_PROFILE_PICTURE = 50,
|
||||
MATERIAL_RAINBOW_PRINCE_HAND_BOOK = 51,
|
||||
MATERIAL_PHOTO_DISPLAY_BOOK = 52,
|
||||
MATERIAL_REMUS_MUSIC_BOX = 53,
|
||||
MATERIAL_GREATEFESTIVALV2_INVITE = 54,
|
||||
MATERIAL_PHOTOGRAPH_POSE = 55,
|
||||
MATERIAL_FIRE_MASTER_AVATAR_TALENT_ITEM = 56,
|
||||
MATERIAL_PHOTOV5_HAND_BOOK = 57,
|
||||
MATERIAL_AVATAR_TRACE = 58,
|
||||
}
|
||||
|
||||
internal static class MaterialTypeExtension
|
||||
@@ -114,6 +122,15 @@ namespace GrasscutterTools.Game.Inventory
|
||||
[MaterialType.MATERIAL_RENAME_ITEM] = "改名卡",
|
||||
[MaterialType.MATERIAL_GCG_EXCHANGE_ITEM] = "七圣召唤-特殊卡",
|
||||
[MaterialType.MATERIAL_QUEST_EVENT_BOOK] = "案件记录册",
|
||||
[MaterialType.MATERIAL_PROFILE_PICTURE] = "头像道具",
|
||||
[MaterialType.MATERIAL_RAINBOW_PRINCE_HAND_BOOK] = "特尔克西的奇幻历险",
|
||||
[MaterialType.MATERIAL_PHOTO_DISPLAY_BOOK] = "纪念册",
|
||||
[MaterialType.MATERIAL_REMUS_MUSIC_BOX] = "音乐盒",
|
||||
[MaterialType.MATERIAL_GREATEFESTIVALV2_INVITE] = "邀请函",
|
||||
[MaterialType.MATERIAL_PHOTOGRAPH_POSE] = "照相姿势",
|
||||
[MaterialType.MATERIAL_FIRE_MASTER_AVATAR_TALENT_ITEM] = "燧原矿",
|
||||
[MaterialType.MATERIAL_PHOTOV5_HAND_BOOK] = "回忆相册",
|
||||
[MaterialType.MATERIAL_AVATAR_TRACE] = "游迹",
|
||||
};
|
||||
private static readonly Dictionary<MaterialType, string> TextMapEN = new Dictionary<MaterialType, string>
|
||||
{
|
||||
@@ -165,10 +182,21 @@ namespace GrasscutterTools.Game.Inventory
|
||||
[MaterialType.MATERIAL_RENAME_ITEM] = "Rename_item",
|
||||
[MaterialType.MATERIAL_GCG_EXCHANGE_ITEM] = "Gcg_exchange_item",
|
||||
[MaterialType.MATERIAL_QUEST_EVENT_BOOK] = "Quest_event_book",
|
||||
[MaterialType.MATERIAL_PROFILE_PICTURE] = "Profile_picture",
|
||||
[MaterialType.MATERIAL_RAINBOW_PRINCE_HAND_BOOK] = "Thelxie's Fantastic Adventures",
|
||||
[MaterialType.MATERIAL_PHOTO_DISPLAY_BOOK] = "Album",
|
||||
[MaterialType.MATERIAL_REMUS_MUSIC_BOX] = "MusicBox",
|
||||
[MaterialType.MATERIAL_GREATEFESTIVALV2_INVITE] = "Invitation",
|
||||
[MaterialType.MATERIAL_PHOTOGRAPH_POSE] = "Photograph_pose",
|
||||
[MaterialType.MATERIAL_FIRE_MASTER_AVATAR_TALENT_ITEM] = "Fire_master_avatar_talent_item",
|
||||
[MaterialType.MATERIAL_PHOTOV5_HAND_BOOK] = "Photov5_hand_book",
|
||||
[MaterialType.MATERIAL_AVATAR_TRACE] = "Avatar_trace",
|
||||
};
|
||||
|
||||
public static string ToTranslatedString(this MaterialType materialType, string language)
|
||||
{
|
||||
if (!TextMapCHS.ContainsKey(materialType))
|
||||
return materialType.ToString();
|
||||
return language.StartsWith("zh") ? TextMapCHS[materialType] : TextMapEN[materialType];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ namespace GrasscutterTools.Game
|
||||
public IEnumerable<int> AllIds => Values.SelectMany(it => it.Ids);
|
||||
|
||||
private string[] lines;
|
||||
public string[] Lines => lines ?? (lines = AllLines.ToArray());
|
||||
public string[] Lines => lines ??= AllLines.ToArray();
|
||||
|
||||
public string this[int id]
|
||||
{
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<LangVersion>11</LangVersion>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -49,6 +51,8 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<LangVersion>11</LangVersion>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\IconGrasscutter.ico</ApplicationIcon>
|
||||
@@ -87,6 +91,14 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="DispatchServer\DispatchServerAPI.cs" />
|
||||
<Compile Include="DispatchServer\Model\ServerStatus.cs" />
|
||||
<Compile Include="Eavesdrop\Certifier.cs" />
|
||||
<Compile Include="Eavesdrop\Eavesdropper.cs" />
|
||||
<Compile Include="Eavesdrop\Event Args\RequestInterceptedEventArgs.cs" />
|
||||
<Compile Include="Eavesdrop\Event Args\ResponseInterceptedEventArgs.cs" />
|
||||
<Compile Include="Eavesdrop\Interceptors.cs" />
|
||||
<Compile Include="Eavesdrop\Internals\INETOptions.cs" />
|
||||
<Compile Include="Eavesdrop\Internals\NativeMethods.cs" />
|
||||
<Compile Include="Eavesdrop\Network\EavesNode.cs" />
|
||||
<Compile Include="Forms\FormActivityEditor.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -152,6 +164,8 @@
|
||||
<Compile Include="Game\Data\Excels\ReliquaryData.cs" />
|
||||
<Compile Include="Game\Data\Excels\MonsterData.cs" />
|
||||
<Compile Include="Game\Data\Excels\SceneData.cs" />
|
||||
<Compile Include="Game\Data\Excels\SceneTagData.cs" />
|
||||
<Compile Include="Game\Data\Excels\WeatherData.cs" />
|
||||
<Compile Include="Game\Data\GameResource.cs" />
|
||||
<Compile Include="Game\Data\GameResources.cs" />
|
||||
<Compile Include="Game\Data\ResourceTypeAttribute.cs" />
|
||||
@@ -267,6 +281,12 @@
|
||||
<Compile Include="Pages\PageOpenCommand.Designer.cs">
|
||||
<DependentUpon>PageOpenCommand.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageProxy.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageProxy.Designer.cs">
|
||||
<DependentUpon>PageProxy.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageQuest.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
@@ -279,12 +299,24 @@
|
||||
<Compile Include="Pages\PageScene.Designer.cs">
|
||||
<DependentUpon>PageScene.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSceneTag.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSceneTag.Designer.cs">
|
||||
<DependentUpon>PageSceneTag.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSetProp.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSetProp.Designer.cs">
|
||||
<DependentUpon>PageSetProp.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSettings.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSettings.Designer.cs">
|
||||
<DependentUpon>PageSettings.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageSpawn.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
@@ -303,6 +335,12 @@
|
||||
<Compile Include="Pages\PageTools.Designer.cs">
|
||||
<DependentUpon>PageTools.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageWeather.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageWeather.Designer.cs">
|
||||
<DependentUpon>PageWeather.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Resources.zh-TW.Designer.cs">
|
||||
@@ -314,11 +352,13 @@
|
||||
<Compile Include="Utils\ArtifactUtils.cs" />
|
||||
<Compile Include="Utils\Common.cs" />
|
||||
<Compile Include="Utils\GuiRedirect.cs" />
|
||||
<Compile Include="Utils\HighDPIUtil.cs" />
|
||||
<Compile Include="Utils\KeyGo.cs" />
|
||||
<Compile Include="Utils\HotKeyItem.cs" />
|
||||
<Compile Include="Utils\HttpHelper.cs" />
|
||||
<Compile Include="Utils\Logger.cs" />
|
||||
<Compile Include="Utils\GithubHelper.cs" />
|
||||
<Compile Include="Utils\ProxyHelper.cs" />
|
||||
<Compile Include="Utils\SparseSet.cs" />
|
||||
<Compile Include="Utils\ToggleParser.cs" />
|
||||
<Compile Include="Utils\UIUtil.cs" />
|
||||
@@ -570,6 +610,18 @@
|
||||
<EmbeddedResource Include="Pages\PageOpenCommand.zh-TW.resx">
|
||||
<DependentUpon>PageOpenCommand.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageProxy.en-US.resx">
|
||||
<DependentUpon>PageProxy.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageProxy.resx">
|
||||
<DependentUpon>PageProxy.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageProxy.ru-RU.resx">
|
||||
<DependentUpon>PageProxy.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageProxy.zh-TW.resx">
|
||||
<DependentUpon>PageProxy.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageQuest.en-US.resx">
|
||||
<DependentUpon>PageQuest.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -594,6 +646,18 @@
|
||||
<EmbeddedResource Include="Pages\PageScene.zh-TW.resx">
|
||||
<DependentUpon>PageScene.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSceneTag.en-US.resx">
|
||||
<DependentUpon>PageSceneTag.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSceneTag.resx">
|
||||
<DependentUpon>PageSceneTag.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSceneTag.ru-RU.resx">
|
||||
<DependentUpon>PageSceneTag.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSceneTag.zh-TW.resx">
|
||||
<DependentUpon>PageSceneTag.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSetProp.en-US.resx">
|
||||
<DependentUpon>PageSetProp.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -606,6 +670,18 @@
|
||||
<EmbeddedResource Include="Pages\PageSetProp.zh-TW.resx">
|
||||
<DependentUpon>PageSetProp.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSettings.en-US.resx">
|
||||
<DependentUpon>PageSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSettings.resx">
|
||||
<DependentUpon>PageSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSettings.ru-RU.resx">
|
||||
<DependentUpon>PageSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSettings.zh-TW.resx">
|
||||
<DependentUpon>PageSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageSpawn.en-US.resx">
|
||||
<DependentUpon>PageSpawn.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -634,6 +710,18 @@
|
||||
<EmbeddedResource Include="Pages\PageTools.resx">
|
||||
<DependentUpon>PageTools.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageWeather.en-US.resx">
|
||||
<DependentUpon>PageWeather.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageWeather.resx">
|
||||
<DependentUpon>PageWeather.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageWeather.ru-RU.resx">
|
||||
<DependentUpon>PageWeather.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Pages\PageWeather.zh-TW.resx">
|
||||
<DependentUpon>PageWeather.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.zh-TW.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.zh-TW.Designer.cs</LastGenOutput>
|
||||
@@ -669,6 +757,7 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Eavesdrop\LICENSE.md" />
|
||||
<None Include="GrasscutterTools.licenseheader" />
|
||||
<None Include="GrasscutterTools.snk" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
@@ -699,8 +788,8 @@
|
||||
<Content Include="Resources\en-us\CustomCommands.txt" />
|
||||
<None Include="Resources\en-us\Dungeon.txt" />
|
||||
<Content Include="Resources\en-us\Cutscene.txt" />
|
||||
<Content Include="Resources\en-us\GachaBennerTitle.txt" />
|
||||
<Content Include="Resources\en-us\GachaBennerPrefab.txt" />
|
||||
<Content Include="Resources\en-us\GachaBannerTitle.txt" />
|
||||
<Content Include="Resources\en-us\GachaBannerPrefab.txt" />
|
||||
<Content Include="Resources\en-us\Gadget.txt" />
|
||||
<Content Include="Resources\en-us\Item.txt" />
|
||||
<Content Include="Resources\en-us\Monsters.txt" />
|
||||
@@ -710,6 +799,7 @@
|
||||
<Content Include="Resources\en-us\ShopType.txt" />
|
||||
<Content Include="Resources\en-us\Weapon.txt" />
|
||||
<None Include="Resources\Newtonsoft.Json.dll" />
|
||||
<Content Include="Resources\en-us\Weather.txt" />
|
||||
<Content Include="Resources\MyTools.java" />
|
||||
<Content Include="Resources\ru-ru\Achievement.txt" />
|
||||
<Content Include="Resources\ru-ru\Activity.txt" />
|
||||
@@ -721,8 +811,8 @@
|
||||
<Content Include="Resources\ru-ru\CustomCommands.txt" />
|
||||
<None Include="Resources\ru-ru\Dungeon.txt" />
|
||||
<Content Include="Resources\ru-ru\Cutscene.txt" />
|
||||
<Content Include="Resources\ru-ru\GachaBennerTitle.txt" />
|
||||
<Content Include="Resources\ru-ru\GachaBennerPrefab.txt" />
|
||||
<Content Include="Resources\ru-ru\GachaBannerTitle.txt" />
|
||||
<Content Include="Resources\ru-ru\GachaBannerPrefab.txt" />
|
||||
<Content Include="Resources\ru-ru\Gadget.txt" />
|
||||
<Content Include="Resources\ru-ru\Item.txt" />
|
||||
<Content Include="Resources\ru-ru\Monsters.txt" />
|
||||
@@ -735,7 +825,9 @@
|
||||
<Content Include="Resources\IconGrasscutter.png" />
|
||||
<None Include="Resources\ImgSupport.png" />
|
||||
<Content Include="Resources\Permissions.txt" />
|
||||
<Content Include="Resources\SceneTag.txt" />
|
||||
<Content Include="Resources\WeaponColor.txt" />
|
||||
<Content Include="Resources\zh-cn\Weather.txt" />
|
||||
<Content Include="Resources\zh-cn\Achievement.txt" />
|
||||
<Content Include="Resources\zh-cn\Activity.txt" />
|
||||
<Content Include="Resources\zh-cn\ArtifactCat.txt" />
|
||||
@@ -748,7 +840,7 @@
|
||||
<None Include="Resources\zh-cn\Dungeon.txt" />
|
||||
<Content Include="Resources\zh-cn\Cutscene.txt" />
|
||||
<Content Include="Resources\zh-cn\GachaBannerTitle.txt" />
|
||||
<Content Include="Resources\zh-cn\GachaBennerPrefab.txt" />
|
||||
<Content Include="Resources\zh-cn\GachaBannerPrefab.txt" />
|
||||
<Content Include="Resources\zh-cn\Gadget.txt" />
|
||||
<Content Include="Resources\zh-cn\Item.txt" />
|
||||
<Content Include="Resources\zh-cn\Monsters.txt" />
|
||||
@@ -767,8 +859,8 @@
|
||||
<Content Include="Resources\zh-tw\CustomCommands.txt" />
|
||||
<None Include="Resources\zh-tw\Dungeon.txt" />
|
||||
<Content Include="Resources\zh-tw\Cutscene.txt" />
|
||||
<Content Include="Resources\zh-tw\GachaBennerTitle.txt" />
|
||||
<Content Include="Resources\zh-tw\GachaBennerPrefab.txt" />
|
||||
<Content Include="Resources\zh-tw\GachaBannerTitle.txt" />
|
||||
<Content Include="Resources\zh-tw\GachaBannerPrefab.txt" />
|
||||
<None Include="Resources\zh-tw\Gadget.txt" />
|
||||
<Content Include="Resources\zh-tw\Item.txt" />
|
||||
<Content Include="Resources\zh-tw\Monsters.txt" />
|
||||
|
||||
@@ -44,11 +44,28 @@ namespace GrasscutterTools.OpenCommand
|
||||
|
||||
public bool CanInvoke { get; private set; }
|
||||
|
||||
private Version version = new Version(1, 6, 1);
|
||||
|
||||
public Version Version
|
||||
{
|
||||
get => version;
|
||||
private set
|
||||
{
|
||||
version = value;
|
||||
CanInvokeMultipleCmd = version >= new Version(1, 7);
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanInvokeMultipleCmd { get; private set; }
|
||||
|
||||
public async Task<bool> Ping()
|
||||
{
|
||||
//try
|
||||
//{
|
||||
var response = await DoRequest("ping");
|
||||
if (response.Data is string str && Version.TryParse(str, out var version))
|
||||
Version = version;
|
||||
|
||||
return response.RetCode == 200;
|
||||
//}
|
||||
//catch (Exception)
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
**/
|
||||
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageAbout : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageAboutTitle;
|
||||
|
||||
public PageAbout()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -126,10 +126,10 @@
|
||||
<data name=">>LblSupportDescription.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LnkGithub.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
<data name=">>LblSupportDescription.Name" xml:space="preserve">
|
||||
<value>LblSupportDescription</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LnkOpenChat.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
@@ -149,16 +149,10 @@
|
||||
<data name=">>LnkGithub.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LnkOpenChat.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name="LblSupportDescription.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="GrasscutterToolsSupport.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>498, 86</value>
|
||||
</data>
|
||||
@@ -194,13 +188,19 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.8.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsSupport.MaximumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>280, 280</value>
|
||||
</data>
|
||||
<data name=">>LnkOpenChat.Name" xml:space="preserve">
|
||||
<value>LnkOpenChat</value>
|
||||
</data>
|
||||
<data name=">>LblSupportDescription.Name" xml:space="preserve">
|
||||
<value>LblSupportDescription</value>
|
||||
<data name="GrasscutterToolsSupport.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 140</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name=">>LnkGithub.Name" xml:space="preserve">
|
||||
<value>LnkGithub</value>
|
||||
@@ -217,8 +217,8 @@
|
||||
<data name="LnkOpenChat.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsSupport.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 140</value>
|
||||
<data name="LnkGithub.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsSupport.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
@@ -226,8 +226,8 @@
|
||||
<data name=">>GrasscutterToolsSupport.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsSupport.MaximumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>280, 280</value>
|
||||
<data name="LnkOpenChat.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name="LnkGithub.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -265,7 +265,4 @@
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>ru-RU</value>
|
||||
</metadata>
|
||||
</root>
|
||||
</root>
|
||||
@@ -31,6 +31,7 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PageAchievement));
|
||||
this.ListAchievements = new System.Windows.Forms.ListBox();
|
||||
this.GrpAchievements = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.TxtAchievementFilter = new System.Windows.Forms.TextBox();
|
||||
this.LnkRevokeAll = new System.Windows.Forms.LinkLabel();
|
||||
this.LnkGrantAll = new System.Windows.Forms.LinkLabel();
|
||||
@@ -50,10 +51,12 @@
|
||||
this.ListAchievements.FormattingEnabled = true;
|
||||
this.ListAchievements.Name = "ListAchievements";
|
||||
this.ListAchievements.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
|
||||
this.ListAchievements.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListAchievements_MeasureItem);
|
||||
//
|
||||
// GrpAchievements
|
||||
//
|
||||
resources.ApplyResources(this.GrpAchievements, "GrpAchievements");
|
||||
this.GrpAchievements.Controls.Add(this.LblClearFilter);
|
||||
this.GrpAchievements.Controls.Add(this.TxtAchievementFilter);
|
||||
this.GrpAchievements.Controls.Add(this.LnkRevokeAll);
|
||||
this.GrpAchievements.Controls.Add(this.ListAchievements);
|
||||
@@ -61,6 +64,14 @@
|
||||
this.GrpAchievements.Name = "GrpAchievements";
|
||||
this.GrpAchievements.TabStop = false;
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// TxtAchievementFilter
|
||||
//
|
||||
resources.ApplyResources(this.TxtAchievementFilter, "TxtAchievementFilter");
|
||||
@@ -154,5 +165,6 @@
|
||||
private System.Windows.Forms.TextBox TxtAchievementFilter;
|
||||
private System.Windows.Forms.LinkLabel LnkRevokeAll;
|
||||
private System.Windows.Forms.LinkLabel LnkGrantAll;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageAchievement : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageAchievementTitle;
|
||||
|
||||
public PageAchievement()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -52,6 +54,15 @@ namespace GrasscutterTools.Pages
|
||||
private void TxtAchievementFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateList();
|
||||
LblClearFilter.Visible = TxtAchievementFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtAchievementFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -98,5 +109,10 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
GenSelected("/achievement progress", NUDProgress.Text);
|
||||
}
|
||||
|
||||
private void ListAchievements_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListAchievements.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -145,11 +145,47 @@
|
||||
<value>GrpAchievements</value>
|
||||
</data>
|
||||
<data name=">>ListAchievements.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="GrpAchievements.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>617, 25</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>18</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>GrpAchievements</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="TxtAchievementFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
@@ -172,7 +208,7 @@
|
||||
<value>GrpAchievements</value>
|
||||
</data>
|
||||
<data name=">>TxtAchievementFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LnkRevokeAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
@@ -202,7 +238,7 @@
|
||||
<value>GrpAchievements</value>
|
||||
</data>
|
||||
<data name=">>LnkRevokeAll.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LnkGrantAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
@@ -232,7 +268,7 @@
|
||||
<value>GrpAchievements</value>
|
||||
</data>
|
||||
<data name=">>LnkGrantAll.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="GrpAchievements.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
@@ -394,6 +430,6 @@
|
||||
<value>PageAchievement</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.9.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -22,12 +22,15 @@ using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageAvatar : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageAvatarTitle;
|
||||
|
||||
public PageAvatar()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
this.BtnSaveCustomCommand = new System.Windows.Forms.Button();
|
||||
this.TxtCustomName = new System.Windows.Forms.TextBox();
|
||||
this.BtnAddHotKey = new System.Windows.Forms.Button();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.GrpCustomCommands.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -99,6 +100,7 @@
|
||||
//
|
||||
resources.ApplyResources(this.TxtCustomName, "TxtCustomName");
|
||||
this.TxtCustomName.Name = "TxtCustomName";
|
||||
this.TxtCustomName.TextChanged += new System.EventHandler(this.TxtCustomName_TextChanged);
|
||||
this.TxtCustomName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtCustomName_KeyDown);
|
||||
//
|
||||
// BtnAddHotKey
|
||||
@@ -108,10 +110,19 @@
|
||||
this.BtnAddHotKey.UseVisualStyleBackColor = true;
|
||||
this.BtnAddHotKey.Click += new System.EventHandler(this.BtnAddHotKey_Click);
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// PageCustomCommands
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.BtnAddHotKey);
|
||||
this.Controls.Add(this.BtnExportCustomCommands);
|
||||
this.Controls.Add(this.BtnLoadCustomCommands);
|
||||
@@ -140,5 +151,6 @@
|
||||
private System.Windows.Forms.Button BtnSaveCustomCommand;
|
||||
private System.Windows.Forms.TextBox TxtCustomName;
|
||||
private System.Windows.Forms.Button BtnAddHotKey;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Forms;
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
using GrasscutterTools.Utils;
|
||||
@@ -30,6 +30,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageCustomCommands : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageCustomCommandsTitle;
|
||||
|
||||
public PageCustomCommands()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -249,8 +251,9 @@ namespace GrasscutterTools.Pages
|
||||
}
|
||||
}
|
||||
|
||||
public Action<string> OnAddHotKey;
|
||||
|
||||
/// <summary>
|
||||
/// 点击添加快捷键时触发
|
||||
/// </summary>
|
||||
private void BtnAddHotKey_Click(object sender, EventArgs e)
|
||||
{
|
||||
var name = TxtCustomName.Text.Trim();
|
||||
@@ -259,7 +262,27 @@ namespace GrasscutterTools.Pages
|
||||
MessageBox.Show(Resources.CommandTagCannotBeEmpty, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
OnAddHotKey?.Invoke(name);
|
||||
|
||||
// 跳转到快捷键界面
|
||||
FormMain.Instance.NavigateTo<PageHotKey>()?
|
||||
.AddNewHotKey(name); // 设置标签
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 标签栏文本改变时触发
|
||||
/// </summary>
|
||||
private void TxtCustomName_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LblClearFilter.Visible = TxtCustomName.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空标签栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtCustomName.Clear();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -148,7 +148,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnExportCustomCommands.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnLoadCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
@@ -178,7 +178,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnLoadCustomCommands.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -211,7 +211,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblCustomName.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="GrpCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
@@ -301,7 +301,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>GrpCustomCommands.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="BtnRemoveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
@@ -331,7 +331,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnRemoveCustomCommand.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="BtnSaveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
@@ -361,7 +361,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSaveCustomCommand.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="TxtCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
@@ -385,7 +385,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtCustomName.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="BtnAddHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
@@ -412,6 +412,42 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnAddHotKey.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>301, 213</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
@@ -424,6 +460,6 @@
|
||||
<value>PageCustomCommands</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.2.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -154,6 +154,7 @@
|
||||
resources.ApplyResources(this.ListSubAttributionChecked, "ListSubAttributionChecked");
|
||||
this.ListSubAttributionChecked.FormattingEnabled = true;
|
||||
this.ListSubAttributionChecked.Name = "ListSubAttributionChecked";
|
||||
this.ListSubAttributionChecked.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListSubAttributionChecked_MeasureItem);
|
||||
this.ListSubAttributionChecked.SelectedIndexChanged += new System.EventHandler(this.ListSubAttributionChecked_SelectedIndexChanged);
|
||||
//
|
||||
// LblArtifactLevel
|
||||
|
||||
@@ -30,6 +30,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageGiveArtifact : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageGetArtifactTitle;
|
||||
|
||||
public PageGiveArtifact()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -263,5 +265,10 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
UIUtil.OpenURL("https://github.com/Penelopeep/CharacterBuilder");
|
||||
}
|
||||
|
||||
private void ListSubAttributionChecked_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListSubAttributionChecked.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,7 @@
|
||||
this.LblGiveCommandDescription = new System.Windows.Forms.Label();
|
||||
this.CmbFilterItem = new System.Windows.Forms.ComboBox();
|
||||
this.MenuItemFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.GrpGiveItemRecord.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDGameItemAmout)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDGameItemLevel)).BeginInit();
|
||||
@@ -103,6 +104,7 @@
|
||||
resources.ApplyResources(this.ListGameItems, "ListGameItems");
|
||||
this.ListGameItems.FormattingEnabled = true;
|
||||
this.ListGameItems.Name = "ListGameItems";
|
||||
this.ListGameItems.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListGameItems_MeasureItem);
|
||||
this.ListGameItems.SelectedIndexChanged += new System.EventHandler(this.GiveItemsInputChanged);
|
||||
//
|
||||
// LblGameItemAmount
|
||||
@@ -171,13 +173,23 @@
|
||||
//
|
||||
// MenuItemFilter
|
||||
//
|
||||
this.MenuItemFilter.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.MenuItemFilter.Name = "MenuSpawnEntityFilter";
|
||||
resources.ApplyResources(this.MenuItemFilter, "MenuItemFilter");
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// PageGiveItem
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.CmbFilterItem);
|
||||
this.Controls.Add(this.LblClearGiveItemLogs);
|
||||
this.Controls.Add(this.BtnSaveGiveItemLog);
|
||||
@@ -217,5 +229,6 @@
|
||||
private System.Windows.Forms.Label LblGiveCommandDescription;
|
||||
private System.Windows.Forms.ComboBox CmbFilterItem;
|
||||
private System.Windows.Forms.ContextMenuStrip MenuItemFilter;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageGiveItem : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageGiveItemTitle;
|
||||
|
||||
public PageGiveItem()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -97,6 +99,15 @@ namespace GrasscutterTools.Pages
|
||||
private void TxtGameItemFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LoadItemList();
|
||||
LblClearFilter.Visible = TxtGameItemFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtGameItemFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -238,5 +249,10 @@ namespace GrasscutterTools.Pages
|
||||
}
|
||||
|
||||
#endregion -- 物品记录 --
|
||||
|
||||
private void ListGameItems_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListGameItems.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearGiveItemLogs.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnSaveGiveItemLog.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
@@ -178,7 +178,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSaveGiveItemLog.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="BtnRemoveGiveItemLog.Enabled" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
@@ -208,7 +208,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnRemoveGiveItemLog.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="GrpGiveItemRecord.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
@@ -262,7 +262,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>GrpGiveItemRecord.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="ChkDrop.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -295,7 +295,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkDrop.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="TxtGameItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
@@ -319,7 +319,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtGameItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="ListGameItems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
@@ -346,7 +346,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ListGameItems.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="LblGameItemAmount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -379,7 +379,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblGameItemAmount.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="LblGameItemLevel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -412,7 +412,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblGameItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="NUDGameItemAmout.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -436,7 +436,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>NUDGameItemAmout.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="NUDGameItemLevel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -460,7 +460,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>NUDGameItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>12</value>
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="LblGiveCommandDescription.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -491,7 +491,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblGiveCommandDescription.ZOrder" xml:space="preserve">
|
||||
<value>13</value>
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="CmbFilterItem.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
@@ -515,7 +515,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>CmbFilterItem.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<metadata name="MenuItemFilter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
@@ -529,6 +529,42 @@
|
||||
<data name=">>MenuItemFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>626, 6</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
@@ -539,6 +575,6 @@
|
||||
<value>PageGiveItem</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -39,6 +39,7 @@
|
||||
this.NUDWeaponAmout = new System.Windows.Forms.NumericUpDown();
|
||||
this.NUDWeaponLevel = new System.Windows.Forms.NumericUpDown();
|
||||
this.ListWeapons = new System.Windows.Forms.ListBox();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDWeaponRefinement)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDWeaponAmout)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDWeaponLevel)).BeginInit();
|
||||
@@ -140,12 +141,22 @@
|
||||
resources.ApplyResources(this.ListWeapons, "ListWeapons");
|
||||
this.ListWeapons.FormattingEnabled = true;
|
||||
this.ListWeapons.Name = "ListWeapons";
|
||||
this.ListWeapons.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListWeapons_MeasureItem);
|
||||
this.ListWeapons.SelectedIndexChanged += new System.EventHandler(this.WeaponValueChanged);
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// PageGiveWeapon
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.ListWeapons);
|
||||
this.Controls.Add(this.TxtWeaponFilter);
|
||||
this.Controls.Add(this.NUDWeaponRefinement);
|
||||
@@ -177,5 +188,6 @@
|
||||
private System.Windows.Forms.NumericUpDown NUDWeaponAmout;
|
||||
private System.Windows.Forms.NumericUpDown NUDWeaponLevel;
|
||||
private System.Windows.Forms.ListBox ListWeapons;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,15 @@
|
||||
using System;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageGiveWeapon : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageGiveWeaponTitle;
|
||||
|
||||
public PageGiveWeapon()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -45,6 +48,15 @@ namespace GrasscutterTools.Pages
|
||||
private void TxtWeaponFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListWeapons, GameData.Weapons.Lines, TxtWeaponFilter.Text);
|
||||
LblClearFilter.Visible = TxtWeaponFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtWeaponFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -70,5 +82,10 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
SetCommand("/give", $"weapons x{NUDWeaponAmout.Value} lv{NUDWeaponLevel.Value} r{NUDWeaponRefinement.Value}");
|
||||
}
|
||||
|
||||
private void ListWeapons_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListWeapons.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnGiveAllWeapons.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="TxtWeaponFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
@@ -175,7 +175,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtWeaponFilter.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblWeaponDescription.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
@@ -216,7 +216,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblWeaponDescription.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="LblWeaponRefinement.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -249,7 +249,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblWeaponRefinement.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="LblWeaponAmount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -282,7 +282,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblWeaponAmount.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="LblWeaponLevel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -315,7 +315,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblWeaponLevel.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="NUDWeaponRefinement.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -339,7 +339,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>NUDWeaponRefinement.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="NUDWeaponAmout.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -363,7 +363,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>NUDWeaponAmout.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="NUDWeaponLevel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -387,7 +387,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>NUDWeaponLevel.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="ListWeapons.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Right</value>
|
||||
@@ -414,6 +414,42 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ListWeapons.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>626, 6</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>20</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
@@ -426,6 +462,6 @@
|
||||
<value>PageGiveWeapon</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
132
Source/GrasscutterTools/Pages/PageHome.Designer.cs
generated
@@ -36,19 +36,15 @@
|
||||
this.BtnOpenTextMap = new System.Windows.Forms.Button();
|
||||
this.BtnOpenGachaBannerEditor = new System.Windows.Forms.Button();
|
||||
this.GrasscutterToolsIcon = new System.Windows.Forms.PictureBox();
|
||||
this.GrpSettings = new System.Windows.Forms.GroupBox();
|
||||
this.LblGCVersion = new System.Windows.Forms.Label();
|
||||
this.CmbGcVersions = new System.Windows.Forms.ComboBox();
|
||||
this.ChkTopMost = new System.Windows.Forms.CheckBox();
|
||||
this.BtnActivityEditor = new System.Windows.Forms.Button();
|
||||
this.LblTip1 = new System.Windows.Forms.Label();
|
||||
this.LblTip2 = new System.Windows.Forms.Label();
|
||||
this.LblTip3 = new System.Windows.Forms.Label();
|
||||
this.LblTip4 = new System.Windows.Forms.Label();
|
||||
this.LblTip5 = new System.Windows.Forms.Label();
|
||||
this.CmbLanguage = new System.Windows.Forms.ComboBox();
|
||||
this.LblLanguage = new System.Windows.Forms.Label();
|
||||
this.NUDUid = new System.Windows.Forms.NumericUpDown();
|
||||
this.ChkIncludeUID = new System.Windows.Forms.CheckBox();
|
||||
this.LblDefaultUid = new System.Windows.Forms.Label();
|
||||
this.BtnActivityEditor = new System.Windows.Forms.Button();
|
||||
((System.ComponentModel.ISupportInitialize)(this.GrasscutterToolsIcon)).BeginInit();
|
||||
this.GrpSettings.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDUid)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// BtnOpenShopEditor
|
||||
@@ -98,37 +94,42 @@
|
||||
this.GrasscutterToolsIcon.Name = "GrasscutterToolsIcon";
|
||||
this.GrasscutterToolsIcon.TabStop = false;
|
||||
//
|
||||
// GrpSettings
|
||||
// BtnActivityEditor
|
||||
//
|
||||
resources.ApplyResources(this.GrpSettings, "GrpSettings");
|
||||
this.GrpSettings.Controls.Add(this.LblGCVersion);
|
||||
this.GrpSettings.Controls.Add(this.CmbGcVersions);
|
||||
this.GrpSettings.Controls.Add(this.ChkTopMost);
|
||||
this.GrpSettings.Controls.Add(this.CmbLanguage);
|
||||
this.GrpSettings.Controls.Add(this.LblLanguage);
|
||||
this.GrpSettings.Controls.Add(this.NUDUid);
|
||||
this.GrpSettings.Controls.Add(this.ChkIncludeUID);
|
||||
this.GrpSettings.Controls.Add(this.LblDefaultUid);
|
||||
this.GrpSettings.Name = "GrpSettings";
|
||||
this.GrpSettings.TabStop = false;
|
||||
resources.ApplyResources(this.BtnActivityEditor, "BtnActivityEditor");
|
||||
this.BtnActivityEditor.Name = "BtnActivityEditor";
|
||||
this.BtnActivityEditor.UseVisualStyleBackColor = true;
|
||||
this.BtnActivityEditor.Click += new System.EventHandler(this.BtnActivityEditor_Click);
|
||||
//
|
||||
// LblGCVersion
|
||||
// LblTip1
|
||||
//
|
||||
resources.ApplyResources(this.LblGCVersion, "LblGCVersion");
|
||||
this.LblGCVersion.Name = "LblGCVersion";
|
||||
resources.ApplyResources(this.LblTip1, "LblTip1");
|
||||
this.LblTip1.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.LblTip1.Name = "LblTip1";
|
||||
//
|
||||
// CmbGcVersions
|
||||
// LblTip2
|
||||
//
|
||||
resources.ApplyResources(this.CmbGcVersions, "CmbGcVersions");
|
||||
this.CmbGcVersions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.CmbGcVersions.FormattingEnabled = true;
|
||||
this.CmbGcVersions.Name = "CmbGcVersions";
|
||||
resources.ApplyResources(this.LblTip2, "LblTip2");
|
||||
this.LblTip2.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.LblTip2.Name = "LblTip2";
|
||||
//
|
||||
// ChkTopMost
|
||||
// LblTip3
|
||||
//
|
||||
resources.ApplyResources(this.ChkTopMost, "ChkTopMost");
|
||||
this.ChkTopMost.Name = "ChkTopMost";
|
||||
this.ChkTopMost.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.LblTip3, "LblTip3");
|
||||
this.LblTip3.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.LblTip3.Name = "LblTip3";
|
||||
//
|
||||
// LblTip4
|
||||
//
|
||||
resources.ApplyResources(this.LblTip4, "LblTip4");
|
||||
this.LblTip4.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.LblTip4.Name = "LblTip4";
|
||||
//
|
||||
// LblTip5
|
||||
//
|
||||
resources.ApplyResources(this.LblTip5, "LblTip5");
|
||||
this.LblTip5.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.LblTip5.Name = "LblTip5";
|
||||
//
|
||||
// CmbLanguage
|
||||
//
|
||||
@@ -140,59 +141,30 @@
|
||||
// LblLanguage
|
||||
//
|
||||
resources.ApplyResources(this.LblLanguage, "LblLanguage");
|
||||
this.LblLanguage.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.LblLanguage.Name = "LblLanguage";
|
||||
//
|
||||
// NUDUid
|
||||
//
|
||||
resources.ApplyResources(this.NUDUid, "NUDUid");
|
||||
this.NUDUid.Maximum = new decimal(new int[] {
|
||||
2147483647,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDUid.Name = "NUDUid";
|
||||
this.NUDUid.Value = new decimal(new int[] {
|
||||
10001,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// ChkIncludeUID
|
||||
//
|
||||
resources.ApplyResources(this.ChkIncludeUID, "ChkIncludeUID");
|
||||
this.ChkIncludeUID.Name = "ChkIncludeUID";
|
||||
this.ChkIncludeUID.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// LblDefaultUid
|
||||
//
|
||||
resources.ApplyResources(this.LblDefaultUid, "LblDefaultUid");
|
||||
this.LblDefaultUid.Name = "LblDefaultUid";
|
||||
//
|
||||
// BtnActivityEditor
|
||||
//
|
||||
resources.ApplyResources(this.BtnActivityEditor, "BtnActivityEditor");
|
||||
this.BtnActivityEditor.Name = "BtnActivityEditor";
|
||||
this.BtnActivityEditor.UseVisualStyleBackColor = true;
|
||||
this.BtnActivityEditor.Click += new System.EventHandler(this.BtnActivityEditor_Click);
|
||||
//
|
||||
// PageHome
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.CmbLanguage);
|
||||
this.Controls.Add(this.LblLanguage);
|
||||
this.Controls.Add(this.LblTip5);
|
||||
this.Controls.Add(this.LblTip4);
|
||||
this.Controls.Add(this.LblTip3);
|
||||
this.Controls.Add(this.LblTip2);
|
||||
this.Controls.Add(this.LblTip1);
|
||||
this.Controls.Add(this.LnkNewVersion);
|
||||
this.Controls.Add(this.BtnActivityEditor);
|
||||
this.Controls.Add(this.LblAbout);
|
||||
this.Controls.Add(this.BtnOpenTextMap);
|
||||
this.Controls.Add(this.BtnOpenGachaBannerEditor);
|
||||
this.Controls.Add(this.BtnOpenDropEditor);
|
||||
this.Controls.Add(this.BtnOpenShopEditor);
|
||||
this.Controls.Add(this.GrasscutterToolsIcon);
|
||||
this.Controls.Add(this.GrpSettings);
|
||||
this.Controls.Add(this.LnkNewVersion);
|
||||
this.Controls.Add(this.LblAbout);
|
||||
this.Name = "PageHome";
|
||||
((System.ComponentModel.ISupportInitialize)(this.GrasscutterToolsIcon)).EndInit();
|
||||
this.GrpSettings.ResumeLayout(false);
|
||||
this.GrpSettings.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDUid)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -207,15 +179,13 @@
|
||||
private System.Windows.Forms.Button BtnOpenTextMap;
|
||||
private System.Windows.Forms.Button BtnOpenGachaBannerEditor;
|
||||
private System.Windows.Forms.PictureBox GrasscutterToolsIcon;
|
||||
private System.Windows.Forms.GroupBox GrpSettings;
|
||||
private System.Windows.Forms.Label LblGCVersion;
|
||||
private System.Windows.Forms.ComboBox CmbGcVersions;
|
||||
private System.Windows.Forms.CheckBox ChkTopMost;
|
||||
private System.Windows.Forms.Button BtnActivityEditor;
|
||||
private System.Windows.Forms.Label LblTip1;
|
||||
private System.Windows.Forms.Label LblTip2;
|
||||
private System.Windows.Forms.Label LblTip3;
|
||||
private System.Windows.Forms.Label LblTip4;
|
||||
private System.Windows.Forms.Label LblTip5;
|
||||
private System.Windows.Forms.ComboBox CmbLanguage;
|
||||
private System.Windows.Forms.Label LblLanguage;
|
||||
private System.Windows.Forms.NumericUpDown NUDUid;
|
||||
private System.Windows.Forms.CheckBox ChkIncludeUID;
|
||||
private System.Windows.Forms.Label LblDefaultUid;
|
||||
private System.Windows.Forms.Button BtnActivityEditor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,14 +19,11 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Forms;
|
||||
using GrasscutterTools.Game;
|
||||
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
@@ -34,6 +31,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageHome : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageHomeTitle;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化首页设置
|
||||
/// </summary>
|
||||
@@ -42,26 +41,6 @@ namespace GrasscutterTools.Pages
|
||||
InitializeComponent();
|
||||
if (DesignMode) return;
|
||||
|
||||
// 玩家UID
|
||||
NUDUid.Value = Settings.Default.Uid;
|
||||
NUDUid.ValueChanged += (o, e) => Settings.Default.Uid = NUDUid.Value;
|
||||
|
||||
// 是否包含UID
|
||||
ChkIncludeUID.Checked = Settings.Default.IsIncludeUID;
|
||||
ChkIncludeUID.CheckedChanged += (o, e) => Settings.Default.IsIncludeUID = ChkIncludeUID.Checked;
|
||||
|
||||
// 置顶
|
||||
ChkTopMost.Checked = Settings.Default.IsTopMost;
|
||||
ChkTopMost.CheckedChanged += (o, e) => Settings.Default.IsTopMost = ParentForm.TopMost = ChkTopMost.Checked;
|
||||
|
||||
// 命令版本初始化
|
||||
if (Version.TryParse(Settings.Default.CommandVersion, out Version current))
|
||||
CommandVersion.Current = current;
|
||||
CmbGcVersions.DataSource = CommandVersion.List.Select(it => it.ToString(3)).ToList();
|
||||
CmbGcVersions.SelectedIndex = Array.IndexOf(CommandVersion.List, CommandVersion.Current);
|
||||
CmbGcVersions.SelectedIndexChanged += (o, e) => CommandVersion.Current = CommandVersion.List[CmbGcVersions.SelectedIndex];
|
||||
CommandVersion.VersionChanged += (o, e) => Settings.Default.CommandVersion = CommandVersion.Current.ToString(3);
|
||||
|
||||
// 初始化多语言
|
||||
CmbLanguage.DataSource = MultiLanguage.LanguageNames;
|
||||
if (string.IsNullOrEmpty(Settings.Default.DefaultLanguage))
|
||||
@@ -76,7 +55,6 @@ namespace GrasscutterTools.Pages
|
||||
CmbLanguage.SelectedIndex = Array.IndexOf(MultiLanguage.Languages, Settings.Default.DefaultLanguage);
|
||||
}
|
||||
CmbLanguage.SelectedIndexChanged += CmbLanguage_SelectedIndexChanged;
|
||||
|
||||
#if !DEBUG // 仅正式版
|
||||
// 检查更新,但不要弹窗
|
||||
Task.Run(async () => { try { await LoadUpdate(); } catch { /* 启动时检查更新,忽略异常 */ }});
|
||||
@@ -115,7 +93,7 @@ namespace GrasscutterTools.Pages
|
||||
form.TopMost = false;
|
||||
}
|
||||
|
||||
private readonly Dictionary<string, Form> MyForms = new Dictionary<string, Form>();
|
||||
private readonly Dictionary<string, Form> MyForms = new();
|
||||
|
||||
private void ShowForm<T>(string tag) where T : Form, new()
|
||||
{
|
||||
@@ -157,12 +135,7 @@ namespace GrasscutterTools.Pages
|
||||
/// </summary>
|
||||
private void BtnActivityEditor_Click(object sender, EventArgs e)
|
||||
=> ShowForm<FormActivityEditor>("ActivityEditor");
|
||||
|
||||
/// <summary>
|
||||
/// 当选中语言改变时触发
|
||||
/// </summary>
|
||||
public Action OnLanguageChanged { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 语言选中项改变时触发
|
||||
/// </summary>
|
||||
@@ -173,8 +146,8 @@ namespace GrasscutterTools.Pages
|
||||
MultiLanguage.SetDefaultLanguage(MultiLanguage.Languages[CmbLanguage.SelectedIndex]);
|
||||
// 动态更改语言
|
||||
MultiLanguage.LoadLanguage(ParentForm, ParentForm.GetType());
|
||||
// 通知语言改变
|
||||
OnLanguageChanged?.Invoke();
|
||||
// 重载界面
|
||||
FormMain.Instance.Reload();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -127,33 +127,12 @@
|
||||
<value>Have a nice time!</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="BtnOpenTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 23</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Text" xml:space="preserve">
|
||||
<value>TextMapBrowser</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
|
||||
<value>Gacha Editor</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>109, 21</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>Always on top</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 21</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Text" xml:space="preserve">
|
||||
<value>Include UID</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Text" xml:space="preserve">
|
||||
<value>Settings</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>542, 213</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Text" xml:space="preserve">
|
||||
<value>Activity Editor</value>
|
||||
</data>
|
||||
|
||||
@@ -117,508 +117,475 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="BtnOpenShopEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblAbout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
<data name="BtnOpenShopEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 118</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Name" xml:space="preserve">
|
||||
<value>ChkTopMost</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.Name" xml:space="preserve">
|
||||
<value>GrasscutterToolsIcon</value>
|
||||
<data name="BtnOpenShopEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 25</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 23</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblGCVersion.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>LblGCVersion.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name=">>NUDUid.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenGachaBannerEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblDefaultUid.Text" xml:space="preserve">
|
||||
<value>UID</value>
|
||||
</data>
|
||||
<data name="LblGCVersion.Text" xml:space="preserve">
|
||||
<value>GC</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言/Language/язык</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>310, 213</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name="BtnOpenShopEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>333, 175</value>
|
||||
</data>
|
||||
<data name=">>ChkIncludeUID.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="CmbGcVersions.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="LblAbout.Text" xml:space="preserve">
|
||||
<value>祝你玩得愉快!</value>
|
||||
</data>
|
||||
<data name=">>LblDefaultUid.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="BtnOpenDropEditor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>320, 102</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>301, 111</value>
|
||||
</data>
|
||||
<data name="LblDefaultUid.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblAbout.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenShopEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblDefaultUid.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>310, 3</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Text" xml:space="preserve">
|
||||
<value>生成的命令包含UID</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PageHome</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>147, 23</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblDefaultUid.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>ChkIncludeUID.Name" xml:space="preserve">
|
||||
<value>ChkIncludeUID</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>CenterImage</value>
|
||||
<data name="BtnOpenShopEditor.Text" xml:space="preserve">
|
||||
<value>商店编辑器</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenShopEditor.Name" xml:space="preserve">
|
||||
<value>BtnOpenShopEditor</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>416, 213</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.Name" xml:space="preserve">
|
||||
<value>LblAbout</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>LblGCVersion.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>GrpSettings.Name" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name=">>CmbGcVersions.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 23</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenDropEditor.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenDropEditor.Name" xml:space="preserve">
|
||||
<value>BtnOpenDropEditor</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblDefaultUid.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenGachaBannerEditor.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblAbout.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft YaHei UI, 13pt</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>窗口置顶</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 125</value>
|
||||
<data name=">>BtnOpenShopEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenShopEditor.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<data name=">>BtnOpenShopEditor.ZOrder" xml:space="preserve">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name="NUDUid.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 23</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Text" xml:space="preserve">
|
||||
<value>设置</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>133, 21</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Text" xml:space="preserve">
|
||||
<value>文本浏览器</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<data name="BtnOpenDropEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>GrpSettings.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="NUDUid.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblDefaultUid.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 17</value>
|
||||
</data>
|
||||
<data name=">>LblDefaultUid.Name" xml:space="preserve">
|
||||
<value>LblDefaultUid</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.Name" xml:space="preserve">
|
||||
<value>BtnOpenTextMap</value>
|
||||
</data>
|
||||
<data name="LblAbout.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.9.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="BtnOpenDropEditor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Text" xml:space="preserve">
|
||||
<value>活动编辑器</value>
|
||||
<data name="BtnOpenDropEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 149</value>
|
||||
</data>
|
||||
<data name=">>LblGCVersion.Name" xml:space="preserve">
|
||||
<value>LblGCVersion</value>
|
||||
<data name="BtnOpenDropEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 25</value>
|
||||
</data>
|
||||
<data name=">>ChkIncludeUID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDUid.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="BtnOpenDropEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
|
||||
<value>掉落物编辑器</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
<data name=">>BtnOpenDropEditor.Name" xml:space="preserve">
|
||||
<value>BtnOpenDropEditor</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.Parent" xml:space="preserve">
|
||||
<data name=">>BtnOpenDropEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenDropEditor.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>BtnOpenDropEditor.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="LblAbout.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
<data name="LnkNewVersion.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblGCVersion.AutoSize" type="System.Boolean, mscorlib">
|
||||
<data name="LnkNewVersion.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblDefaultUid.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblGCVersion.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>25, 17</value>
|
||||
</data>
|
||||
<data name="LblGCVersion.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="LnkNewVersion.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="CmbGcVersions.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 80</value>
|
||||
<data name="LnkNewVersion.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 3</value>
|
||||
</data>
|
||||
<data name="CmbGcVersions.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
<data name="LnkNewVersion.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>104, 17</value>
|
||||
</data>
|
||||
<data name=">>GrpSettings.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 51</value>
|
||||
</data>
|
||||
<data name=">>CmbGcVersions.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name="NUDUid.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 22</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 21</value>
|
||||
</data>
|
||||
<data name=">>CmbGcVersions.Name" xml:space="preserve">
|
||||
<value>CmbGcVersions</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<data name="LnkNewVersion.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.Text" xml:space="preserve">
|
||||
<value>New Version Tip</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.Name" xml:space="preserve">
|
||||
<value>LnkNewVersion</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="LblAbout.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblAbout.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft YaHei UI, 13pt</value>
|
||||
</data>
|
||||
<data name="LblAbout.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblAbout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="LblAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>320, 102</value>
|
||||
</data>
|
||||
<data name="LblAbout.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="LblAbout.Text" xml:space="preserve">
|
||||
<value>祝你玩得愉快!</value>
|
||||
</data>
|
||||
<data name="LblAbout.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.Name" xml:space="preserve">
|
||||
<value>LblAbout</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.ZOrder" xml:space="preserve">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 211</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 25</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Text" xml:space="preserve">
|
||||
<value>文本浏览器</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.Name" xml:space="preserve">
|
||||
<value>BtnOpenTextMap</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 90</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 25</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
|
||||
<value>奖池编辑器</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenGachaBannerEditor.Name" xml:space="preserve">
|
||||
<value>BtnOpenGachaBannerEditor</value>
|
||||
</data>
|
||||
<data name="GrpSettings.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>147, 54</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 23</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name=">>ChkIncludeUID.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="LblLanguage.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 23</value>
|
||||
<data name=">>BtnOpenGachaBannerEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenGachaBannerEditor.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenDropEditor.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<data name=">>BtnOpenGachaBannerEditor.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.Type" xml:space="preserve">
|
||||
<data name="GrasscutterToolsIcon.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>310, 3</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>333, 202</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>CenterImage</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.Name" xml:space="preserve">
|
||||
<value>GrasscutterToolsIcon</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.ZOrder" xml:space="preserve">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 180</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 25</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Text" xml:space="preserve">
|
||||
<value>活动编辑器</value>
|
||||
</data>
|
||||
<data name=">>BtnActivityEditor.Name" xml:space="preserve">
|
||||
<value>BtnActivityEditor</value>
|
||||
</data>
|
||||
<data name=">>BtnActivityEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnActivityEditor.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<data name=">>BtnActivityEditor.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
<data name="LblTip1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>522, 213</value>
|
||||
<data name="LblTip1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 23</value>
|
||||
<data name="LblTip1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>159, 94</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>416, 184</value>
|
||||
<data name="LblTip1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>118, 17</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
<data name="LblTip1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>NUDUid.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<data name="LblTip1.Text" xml:space="preserve">
|
||||
<value>/data/Banners.json</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<data name=">>LblTip1.Name" xml:space="preserve">
|
||||
<value>LblTip1</value>
|
||||
</data>
|
||||
<data name=">>NUDUid.Name" xml:space="preserve">
|
||||
<value>NUDUid</value>
|
||||
<data name=">>LblTip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>104, 17</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>128, 17</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenTextMap.Parent" xml:space="preserve">
|
||||
<data name=">>LblTip1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>GrpSettings</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
|
||||
<value>奖池编辑器</value>
|
||||
</data>
|
||||
<data name="LblAbout.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>GrasscutterToolsIcon.ZOrder" xml:space="preserve">
|
||||
<data name=">>LblTip1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>LblAbout.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenDropEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<data name="LblTip2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<data name="LblTip2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>LnkNewVersion.Name" xml:space="preserve">
|
||||
<value>LnkNewVersion</value>
|
||||
<data name="LblTip2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>159, 122</value>
|
||||
</data>
|
||||
<data name="LblTip2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 17</value>
|
||||
</data>
|
||||
<data name="LblTip2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblTip2.Text" xml:space="preserve">
|
||||
<value>/data/Shop.json</value>
|
||||
</data>
|
||||
<data name=">>LblTip2.Name" xml:space="preserve">
|
||||
<value>LblTip2</value>
|
||||
</data>
|
||||
<data name=">>LblTip2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblTip2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblTip2.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblTip3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblTip3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblTip3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>159, 153</value>
|
||||
</data>
|
||||
<data name="LblTip3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 17</value>
|
||||
</data>
|
||||
<data name="LblTip3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="LblTip3.Text" xml:space="preserve">
|
||||
<value>/data/Drop.json</value>
|
||||
</data>
|
||||
<data name=">>LblTip3.Name" xml:space="preserve">
|
||||
<value>LblTip3</value>
|
||||
</data>
|
||||
<data name=">>LblTip3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblTip3.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblTip3.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="LblTip4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblTip4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblTip4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>159, 184</value>
|
||||
</data>
|
||||
<data name="LblTip4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>149, 17</value>
|
||||
</data>
|
||||
<data name="LblTip4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="LblTip4.Text" xml:space="preserve">
|
||||
<value>/data/ActivityConfig.json</value>
|
||||
</data>
|
||||
<data name=">>LblTip4.Name" xml:space="preserve">
|
||||
<value>LblTip4</value>
|
||||
</data>
|
||||
<data name=">>LblTip4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblTip4.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblTip4.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblTip5.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblTip5.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblTip5.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>159, 215</value>
|
||||
</data>
|
||||
<data name="LblTip5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 17</value>
|
||||
</data>
|
||||
<data name="LblTip5.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="LblTip5.Text" xml:space="preserve">
|
||||
<value>/Res/TextMaps</value>
|
||||
</data>
|
||||
<data name=">>LblTip5.Name" xml:space="preserve">
|
||||
<value>LblTip5</value>
|
||||
</data>
|
||||
<data name=">>LblTip5.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblTip5.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblTip5.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>543, 211</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.Text" xml:space="preserve">
|
||||
<value>商店编辑器</value>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>147, 82</value>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name=">>BtnOpenShopEditor.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<data name=">>CmbLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblGCVersion.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>BtnActivityEditor.ZOrder" xml:space="preserve">
|
||||
<data name=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>310, 184</value>
|
||||
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name=">>GrpSettings.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>CmbGcVersions.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>BtnActivityEditor.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnActivityEditor.Name" xml:space="preserve">
|
||||
<value>BtnActivityEditor</value>
|
||||
</data>
|
||||
<data name="LblGCVersion.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 83</value>
|
||||
</data>
|
||||
<data name="LnkNewVersion.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 105</value>
|
||||
</data>
|
||||
<data name="LblDefaultUid.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 24</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="LblLanguage.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>409, 215</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>128, 17</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>16</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言/Language/язык</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PageHome</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -117,84 +117,21 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="BtnOpenShopEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="BtnOpenShopEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="BtnOpenShopEditor.Text" xml:space="preserve">
|
||||
<value>Редактор магазина</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>456, 184</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 23</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
|
||||
<value>Редактор дропа</value>
|
||||
</data>
|
||||
<data name="LblAbout.Text" xml:space="preserve">
|
||||
<value>Желаем приятно провести время!</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>456, 213</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 23</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Text" xml:space="preserve">
|
||||
<value>Браузер карт</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 23</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
|
||||
<value>Редактор баннеров</value>
|
||||
</data>
|
||||
<data name="GrasscutterToolsIcon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>333, 146</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="GrasscutterToolsIcon.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>Zoom</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Text" xml:space="preserve">
|
||||
<value>Настройки</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 21</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>Последняя версия</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 21</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Text" xml:space="preserve">
|
||||
<value>Включить UID</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>310, 155</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 23</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Text" xml:space="preserve">
|
||||
<value>Редактор активности</value>
|
||||
</data>
|
||||
|
||||
@@ -129,12 +129,6 @@
|
||||
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
|
||||
<value>獎池編輯器</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Text" xml:space="preserve">
|
||||
<value>設置</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>窗口置頂</value>
|
||||
</data>
|
||||
<data name="BtnActivityEditor.Text" xml:space="preserve">
|
||||
<value>活動編輯器</value>
|
||||
</data>
|
||||
|
||||
25
Source/GrasscutterTools/Pages/PageHotKey.Designer.cs
generated
@@ -34,12 +34,14 @@
|
||||
this.ColHotKey = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.ColCommand = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.GrpHotKeyList = new System.Windows.Forms.GroupBox();
|
||||
this.ChkEnableGlobal = new System.Windows.Forms.CheckBox();
|
||||
this.BtnRemove = new System.Windows.Forms.Button();
|
||||
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
|
||||
this.TxtHotKey = new System.Windows.Forms.TextBox();
|
||||
this.LblHotKeyLabel = new System.Windows.Forms.Label();
|
||||
this.TxtTag = new System.Windows.Forms.TextBox();
|
||||
this.LblTagLabel = new System.Windows.Forms.Label();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.GrpHotKeyList.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -73,10 +75,20 @@
|
||||
// GrpHotKeyList
|
||||
//
|
||||
resources.ApplyResources(this.GrpHotKeyList, "GrpHotKeyList");
|
||||
this.GrpHotKeyList.Controls.Add(this.ChkEnableGlobal);
|
||||
this.GrpHotKeyList.Controls.Add(this.LvHotKeyList);
|
||||
this.GrpHotKeyList.Name = "GrpHotKeyList";
|
||||
this.GrpHotKeyList.TabStop = false;
|
||||
//
|
||||
// ChkEnableGlobal
|
||||
//
|
||||
resources.ApplyResources(this.ChkEnableGlobal, "ChkEnableGlobal");
|
||||
this.ChkEnableGlobal.Checked = true;
|
||||
this.ChkEnableGlobal.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.ChkEnableGlobal.Name = "ChkEnableGlobal";
|
||||
this.ChkEnableGlobal.UseVisualStyleBackColor = true;
|
||||
this.ChkEnableGlobal.CheckedChanged += new System.EventHandler(this.ChkEnableGlobal_CheckedChanged);
|
||||
//
|
||||
// BtnRemove
|
||||
//
|
||||
resources.ApplyResources(this.BtnRemove, "BtnRemove");
|
||||
@@ -108,16 +120,26 @@
|
||||
//
|
||||
resources.ApplyResources(this.TxtTag, "TxtTag");
|
||||
this.TxtTag.Name = "TxtTag";
|
||||
this.TxtTag.TextChanged += new System.EventHandler(this.TxtTag_TextChanged);
|
||||
//
|
||||
// LblTagLabel
|
||||
//
|
||||
resources.ApplyResources(this.LblTagLabel, "LblTagLabel");
|
||||
this.LblTagLabel.Name = "LblTagLabel";
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// PageHotKey
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.BtnRemove);
|
||||
this.Controls.Add(this.BtnAddOrUpdate);
|
||||
this.Controls.Add(this.GrpHotKeyList);
|
||||
@@ -127,6 +149,7 @@
|
||||
this.Controls.Add(this.LblTagLabel);
|
||||
this.Name = "PageHotKey";
|
||||
this.GrpHotKeyList.ResumeLayout(false);
|
||||
this.GrpHotKeyList.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -145,5 +168,7 @@
|
||||
private System.Windows.Forms.Label LblHotKeyLabel;
|
||||
private System.Windows.Forms.TextBox TxtTag;
|
||||
private System.Windows.Forms.Label LblTagLabel;
|
||||
private System.Windows.Forms.CheckBox ChkEnableGlobal;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageHotKey : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageHotKey;
|
||||
|
||||
private const string TAG = nameof(PageHotKey);
|
||||
|
||||
public PageHotKey()
|
||||
@@ -53,6 +55,38 @@ namespace GrasscutterTools.Pages
|
||||
/// </summary>
|
||||
private bool HotKeysChanged;
|
||||
|
||||
/// <summary>
|
||||
/// 加载用户热键列表
|
||||
/// </summary>
|
||||
private List<HotKeyItem> LoadKeyItems()
|
||||
{
|
||||
List<HotKeyItem> list = null;
|
||||
try
|
||||
{
|
||||
Logger.I(TAG, "Loading HotKey json file from: " + HotKeysFilePath);
|
||||
list = JsonConvert.DeserializeObject<List<HotKeyItem>>(File.ReadAllText(HotKeysFilePath));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.E(TAG, "Parsing HotKeys.json failed", ex);
|
||||
}
|
||||
|
||||
if (list == null || list.Count == 0)
|
||||
{
|
||||
// 默认把移动命令加到列表
|
||||
list = new List<HotKeyItem>
|
||||
{
|
||||
new("↑", "/tp ^ ^ ^10", "NumPad8", false),
|
||||
new("↓", "/tp ^ ^ ^-10", "NumPad5", false),
|
||||
new("←", "/tp ^-10 ^ ^", "NumPad4", false),
|
||||
new("→", "/tp ^10 ^ ^", "NumPad6", false),
|
||||
new("↑^↑", "/tp ~ ~10 ~", "NumPad0", false),
|
||||
};
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化快捷键
|
||||
/// </summary>
|
||||
@@ -62,15 +96,16 @@ namespace GrasscutterTools.Pages
|
||||
return;
|
||||
try
|
||||
{
|
||||
Logger.I(TAG, "Loading HotKey json file from: " + HotKeysFilePath);
|
||||
Common.KeyGo.Items = JsonConvert.DeserializeObject<List<HotKeyItem>>(File.ReadAllText(HotKeysFilePath));
|
||||
// 还原设置
|
||||
Common.KeyGo.IsEnabled = ChkEnableGlobal.Checked = Settings.Default.IsHotkeyEenabled;
|
||||
Common.KeyGo.Items = LoadKeyItems();
|
||||
LvHotKeyList.Items.AddRange(Common.KeyGo.Items.Select(HotKeyItemToViewItem).ToArray());
|
||||
Logger.I(TAG, "Start Register All HotKeys");
|
||||
Common.KeyGo.RegAllKey();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.W(TAG, "Parsing HotKeys.json failed.", ex);
|
||||
Logger.W(TAG, "Failed to InitHotKeys", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,6 +114,8 @@ namespace GrasscutterTools.Pages
|
||||
/// </summary>
|
||||
public override void OnClosed()
|
||||
{
|
||||
Settings.Default.IsHotkeyEenabled = Common.KeyGo.IsEnabled;
|
||||
|
||||
Logger.I(TAG, "Cancel all HotKeys");
|
||||
Common.KeyGo.UnRegAllKey();
|
||||
|
||||
@@ -90,7 +127,7 @@ namespace GrasscutterTools.Pages
|
||||
/// <summary>
|
||||
/// 将实体转为视图对象
|
||||
/// </summary>
|
||||
private static ListViewItem HotKeyItemToViewItem(HotKeyItem item) => new ListViewItem(new[]
|
||||
private static ListViewItem HotKeyItemToViewItem(HotKeyItem item) => new(new[]
|
||||
{
|
||||
item.Tag,
|
||||
item.HotKey,
|
||||
@@ -130,12 +167,7 @@ namespace GrasscutterTools.Pages
|
||||
var i = Common.KeyGo.Items.FindIndex(it => it.Tag == tag);
|
||||
if (i == -1)
|
||||
{
|
||||
var item = new HotKeyItem
|
||||
{
|
||||
Tag = tag,
|
||||
Commands = commands,
|
||||
HotKey = hotKey
|
||||
};
|
||||
var item = new HotKeyItem(tag, commands, hotKey);
|
||||
Logger.I(TAG, $"New HotKey item [{hotKey}]");
|
||||
Common.KeyGo.AddHotKey(item);
|
||||
LvHotKeyList.Items.Add(HotKeyItemToViewItem(item));
|
||||
@@ -260,5 +292,38 @@ namespace GrasscutterTools.Pages
|
||||
TxtHotKey.Tag = "";
|
||||
TxtTag.Text = tag;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换启用全局快捷键时触发
|
||||
/// </summary>
|
||||
private void ChkEnableGlobal_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Common.KeyGo.IsEnabled = ChkEnableGlobal.Checked;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.E(TAG, "Failed to switch global hotkeys", ex);
|
||||
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 标签输入栏改变时触发
|
||||
/// </summary>
|
||||
private void TxtTag_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LblClearFilter.Visible = TxtTag.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空标签输入栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtTag.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,6 +126,16 @@
|
||||
<data name="ColCommand.Text" xml:space="preserve">
|
||||
<value>Commands</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="ChkEnableGlobal.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>523, -2</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>111, 21</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Text" xml:space="preserve">
|
||||
<value>Global HotKey</value>
|
||||
</data>
|
||||
<data name="GrpHotKeyList.Text" xml:space="preserve">
|
||||
<value>HotKeys</value>
|
||||
</data>
|
||||
@@ -135,7 +145,6 @@
|
||||
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
|
||||
<value>√ AddOrUpdate</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 17</value>
|
||||
</data>
|
||||
|
||||
@@ -160,11 +160,41 @@
|
||||
<value>GrpHotKeyList</value>
|
||||
</data>
|
||||
<data name=">>LvHotKeyList.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="GrpHotKeyList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>547, -2</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>87, 21</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Text" xml:space="preserve">
|
||||
<value>全局快捷键</value>
|
||||
</data>
|
||||
<data name=">>ChkEnableGlobal.Name" xml:space="preserve">
|
||||
<value>ChkEnableGlobal</value>
|
||||
</data>
|
||||
<data name=">>ChkEnableGlobal.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkEnableGlobal.Parent" xml:space="preserve">
|
||||
<value>GrpHotKeyList</value>
|
||||
</data>
|
||||
<data name=">>ChkEnableGlobal.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="GrpHotKeyList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
@@ -187,7 +217,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>GrpHotKeyList.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnRemove.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
@@ -214,7 +244,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnRemove.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="BtnAddOrUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
@@ -241,10 +271,10 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnAddOrUpdate.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TxtHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="TxtHotKey.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>262, 210</value>
|
||||
@@ -268,10 +298,10 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtHotKey.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="LblHotKeyLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="LblHotKeyLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -298,7 +328,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblHotKeyLabel.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="TxtTag.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
@@ -322,7 +352,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtTag.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblTagLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
@@ -352,7 +382,43 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblTagLabel.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>189, 213</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>21</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
@@ -382,6 +448,6 @@
|
||||
<value>PageHotKey</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.11.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -126,6 +126,16 @@
|
||||
<data name="ColCommand.Text" xml:space="preserve">
|
||||
<value>Commands</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="ChkEnableGlobal.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>523, -2</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>111, 21</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Text" xml:space="preserve">
|
||||
<value>Global HotKey</value>
|
||||
</data>
|
||||
<data name="GrpHotKeyList.Text" xml:space="preserve">
|
||||
<value>HotKeys</value>
|
||||
</data>
|
||||
@@ -135,7 +145,6 @@
|
||||
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
|
||||
<value>√ AddOrUpdate</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 17</value>
|
||||
</data>
|
||||
|
||||
@@ -123,6 +123,9 @@
|
||||
<data name="ColHotKey.Text" xml:space="preserve">
|
||||
<value>快捷鍵</value>
|
||||
</data>
|
||||
<data name="ChkEnableGlobal.Text" xml:space="preserve">
|
||||
<value>全域快速鍵</value>
|
||||
</data>
|
||||
<data name="GrpHotKeyList.Text" xml:space="preserve">
|
||||
<value>快捷執行列表</value>
|
||||
</data>
|
||||
|
||||
12
Source/GrasscutterTools/Pages/PageMail.Designer.cs
generated
@@ -34,6 +34,7 @@
|
||||
this.BtnDeleteMailItem = new System.Windows.Forms.Button();
|
||||
this.TCMailRight = new System.Windows.Forms.TabControl();
|
||||
this.TPMailSelectableItemList = new System.Windows.Forms.TabPage();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.ListMailSelectableItems = new System.Windows.Forms.ListBox();
|
||||
this.TxtMailSelectableItemFilter = new System.Windows.Forms.TextBox();
|
||||
this.PanelMailItemArgs = new System.Windows.Forms.Panel();
|
||||
@@ -100,6 +101,7 @@
|
||||
//
|
||||
// TPMailSelectableItemList
|
||||
//
|
||||
this.TPMailSelectableItemList.Controls.Add(this.LblClearFilter);
|
||||
this.TPMailSelectableItemList.Controls.Add(this.ListMailSelectableItems);
|
||||
this.TPMailSelectableItemList.Controls.Add(this.TxtMailSelectableItemFilter);
|
||||
this.TPMailSelectableItemList.Controls.Add(this.PanelMailItemArgs);
|
||||
@@ -107,6 +109,14 @@
|
||||
this.TPMailSelectableItemList.Name = "TPMailSelectableItemList";
|
||||
this.TPMailSelectableItemList.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// ListMailSelectableItems
|
||||
//
|
||||
resources.ApplyResources(this.ListMailSelectableItems, "ListMailSelectableItems");
|
||||
@@ -226,6 +236,7 @@
|
||||
resources.ApplyResources(this.ListMailItems, "ListMailItems");
|
||||
this.ListMailItems.FormattingEnabled = true;
|
||||
this.ListMailItems.Name = "ListMailItems";
|
||||
this.ListMailItems.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListMailItems_MeasureItem);
|
||||
//
|
||||
// LblMailItemsLabel
|
||||
//
|
||||
@@ -365,5 +376,6 @@
|
||||
private System.Windows.Forms.Label LblMailTitleLabel;
|
||||
private System.Windows.Forms.TextBox TxtMailSender;
|
||||
private System.Windows.Forms.Label LblMailSenderLabel;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageMail : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageMailTitle;
|
||||
|
||||
public PageMail()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -199,6 +201,15 @@ namespace GrasscutterTools.Pages
|
||||
private void TxtMailSelectableItemFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListMailSelectableItems, MailSelectableItems, TxtMailSelectableItemFilter.Text);
|
||||
LblClearFilter.Visible = TxtMailSelectableItemFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空过滤栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtMailSelectableItemFilter.Clear();
|
||||
}
|
||||
|
||||
#endregion -- 邮件附件可选列表 Mail item selectable list --
|
||||
@@ -287,5 +298,10 @@ namespace GrasscutterTools.Pages
|
||||
}
|
||||
|
||||
#endregion -- 邮件列表 Mail list --
|
||||
|
||||
private void ListMailItems_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListMailItems.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -213,6 +213,60 @@
|
||||
<data name="TCMailRight.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>206, 6</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.ItemHeight" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 26</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 141</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>ListMailSelectableItems.Name" xml:space="preserve">
|
||||
<value>ListMailSelectableItems</value>
|
||||
</data>
|
||||
@@ -223,6 +277,18 @@
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>ListMailSelectableItems.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 23</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>TxtMailSelectableItemFilter.Name" xml:space="preserve">
|
||||
@@ -235,8 +301,122 @@
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>TxtMailSelectableItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>171, 5</value>
|
||||
</data>
|
||||
<data name="NUDMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 23</value>
|
||||
</data>
|
||||
<data name="NUDMailItemLevel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Name" xml:space="preserve">
|
||||
<value>NUDMailItemLevel</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>47, 5</value>
|
||||
</data>
|
||||
<data name="NUDMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 23</value>
|
||||
</data>
|
||||
<data name="NUDMailItemCount.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Name" xml:space="preserve">
|
||||
<value>NUDMailItemCount</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>-3, 7</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>44, 17</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.Text" xml:space="preserve">
|
||||
<value>数量:</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Name" xml:space="preserve">
|
||||
<value>LblMailItemCount</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>123, 7</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>44, 17</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.Text" xml:space="preserve">
|
||||
<value>等级:</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Name" xml:space="preserve">
|
||||
<value>LblMailItemLevel</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 167</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 30</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>PanelMailItemArgs.Name" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
@@ -247,7 +427,7 @@
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>PanelMailItemArgs.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="TPMailSelectableItemList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
@@ -432,234 +612,6 @@
|
||||
<data name=">>TCMailRight.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.ItemHeight" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 26</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 141</value>
|
||||
</data>
|
||||
<data name="ListMailSelectableItems.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>ListMailSelectableItems.Name" xml:space="preserve">
|
||||
<value>ListMailSelectableItems</value>
|
||||
</data>
|
||||
<data name=">>ListMailSelectableItems.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ListMailSelectableItems.Parent" xml:space="preserve">
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>ListMailSelectableItems.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 23</value>
|
||||
</data>
|
||||
<data name="TxtMailSelectableItemFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>TxtMailSelectableItemFilter.Name" xml:space="preserve">
|
||||
<value>TxtMailSelectableItemFilter</value>
|
||||
</data>
|
||||
<data name=">>TxtMailSelectableItemFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtMailSelectableItemFilter.Parent" xml:space="preserve">
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>TxtMailSelectableItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Name" xml:space="preserve">
|
||||
<value>NUDMailItemLevel</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Name" xml:space="preserve">
|
||||
<value>NUDMailItemCount</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Name" xml:space="preserve">
|
||||
<value>LblMailItemCount</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Name" xml:space="preserve">
|
||||
<value>LblMailItemLevel</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 167</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 30</value>
|
||||
</data>
|
||||
<data name="PanelMailItemArgs.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>PanelMailItemArgs.Name" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>PanelMailItemArgs.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>PanelMailItemArgs.Parent" xml:space="preserve">
|
||||
<value>TPMailSelectableItemList</value>
|
||||
</data>
|
||||
<data name=">>PanelMailItemArgs.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>171, 5</value>
|
||||
</data>
|
||||
<data name="NUDMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 23</value>
|
||||
</data>
|
||||
<data name="NUDMailItemLevel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Name" xml:space="preserve">
|
||||
<value>NUDMailItemLevel</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>47, 5</value>
|
||||
</data>
|
||||
<data name="NUDMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 23</value>
|
||||
</data>
|
||||
<data name="NUDMailItemCount.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Name" xml:space="preserve">
|
||||
<value>NUDMailItemCount</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>NUDMailItemCount.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>-3, 7</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>44, 17</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="LblMailItemCount.Text" xml:space="preserve">
|
||||
<value>数量:</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Name" xml:space="preserve">
|
||||
<value>LblMailItemCount</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemCount.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>123, 7</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>44, 17</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblMailItemLevel.Text" xml:space="preserve">
|
||||
<value>等级:</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Name" xml:space="preserve">
|
||||
<value>LblMailItemLevel</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.Parent" xml:space="preserve">
|
||||
<value>PanelMailItemArgs</value>
|
||||
</data>
|
||||
<data name=">>LblMailItemLevel.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnSendMail.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
@@ -1033,6 +985,6 @@
|
||||
<value>PageMail</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -28,6 +28,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageManagement : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageManagementTitle;
|
||||
|
||||
public PageManagement()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -286,8 +286,8 @@
|
||||
//
|
||||
resources.ApplyResources(this.TxtHost, "TxtHost");
|
||||
this.TxtHost.Name = "TxtHost";
|
||||
this.TxtHost.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtHost_KeyDown);
|
||||
this.TxtHost.SelectedIndexChanged += new System.EventHandler(this.TxtHost_SelectedIndexChanged);
|
||||
this.TxtHost.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtHost_KeyDown);
|
||||
//
|
||||
// BtnQueryServerStatus
|
||||
//
|
||||
|
||||
@@ -24,7 +24,6 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.DispatchServer;
|
||||
using GrasscutterTools.DispatchServer.Model;
|
||||
using GrasscutterTools.Game;
|
||||
@@ -39,6 +38,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageOpenCommand : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageOpenCommandTitle;
|
||||
|
||||
private const string TAG = nameof(PageOpenCommand);
|
||||
|
||||
public PageOpenCommand()
|
||||
@@ -47,6 +48,8 @@ namespace GrasscutterTools.Pages
|
||||
if (DesignMode) return;
|
||||
|
||||
InitServerRecords();
|
||||
if (!string.IsNullOrEmpty(Settings.Default.Host))
|
||||
TxtHost.Items.Add(Settings.Default.Host);
|
||||
TxtHost.Items.AddRange(ServerRecords.Select(it => it.Host).ToArray());
|
||||
|
||||
NUDRemotePlayerId.Value = Settings.Default.RemoteUid;
|
||||
@@ -57,6 +60,12 @@ namespace GrasscutterTools.Pages
|
||||
TxtToken.Text = Settings.Default.TokenCache;
|
||||
Task.Delay(1000).ContinueWith(_ => ShowTipInRunButton?.Invoke(Resources.TokenRestoredFromCache));
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(TxtHost.Text))
|
||||
{
|
||||
TxtHost.Items.Add("http://127.0.0.1:443");
|
||||
TxtHost.SelectedIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#region - 服务器记录 -
|
||||
@@ -226,6 +235,8 @@ namespace GrasscutterTools.Pages
|
||||
return;
|
||||
}
|
||||
|
||||
Settings.Default.Host = host;
|
||||
|
||||
var isOcEnabled = false;
|
||||
try
|
||||
{
|
||||
@@ -240,6 +251,7 @@ namespace GrasscutterTools.Pages
|
||||
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (isOcEnabled)
|
||||
{
|
||||
LblOpenCommandSupport.Text = "√";
|
||||
|
||||
@@ -932,7 +932,7 @@
|
||||
<value>136, 34</value>
|
||||
</data>
|
||||
<data name="TxtHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>182, 23</value>
|
||||
<value>182, 25</value>
|
||||
</data>
|
||||
<data name="TxtHost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
@@ -941,7 +941,7 @@
|
||||
<value>TxtHost</value>
|
||||
</data>
|
||||
<data name=">>TxtHost.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtHost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
@@ -959,7 +959,7 @@
|
||||
<value>324, 34</value>
|
||||
</data>
|
||||
<data name="BtnQueryServerStatus.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 23</value>
|
||||
<value>50, 25</value>
|
||||
</data>
|
||||
<data name="BtnQueryServerStatus.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
@@ -1022,6 +1022,6 @@
|
||||
<value>PageOpenCommand</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
148
Source/GrasscutterTools/Pages/PageProxy.Designer.cs
generated
Normal file
@@ -0,0 +1,148 @@
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
partial class PageProxy
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PageProxy));
|
||||
this.TxtHost = new System.Windows.Forms.TextBox();
|
||||
this.LblServerAddress = new System.Windows.Forms.Label();
|
||||
this.BtnStartProxy = new System.Windows.Forms.Button();
|
||||
this.ChkAutoStart = new System.Windows.Forms.CheckBox();
|
||||
this.LblProxyIntroduction = new System.Windows.Forms.TextBox();
|
||||
this.BtnDestroyCert = new System.Windows.Forms.Button();
|
||||
this.LnkEavesdrop = new System.Windows.Forms.LinkLabel();
|
||||
this.LnkAbout = new System.Windows.Forms.LinkLabel();
|
||||
this.LblGcJarPath = new System.Windows.Forms.Label();
|
||||
this.TxtGcJarPath = new System.Windows.Forms.TextBox();
|
||||
this.BtnStartGc = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// TxtHost
|
||||
//
|
||||
resources.ApplyResources(this.TxtHost, "TxtHost");
|
||||
this.TxtHost.Name = "TxtHost";
|
||||
//
|
||||
// LblServerAddress
|
||||
//
|
||||
resources.ApplyResources(this.LblServerAddress, "LblServerAddress");
|
||||
this.LblServerAddress.Name = "LblServerAddress";
|
||||
//
|
||||
// BtnStartProxy
|
||||
//
|
||||
resources.ApplyResources(this.BtnStartProxy, "BtnStartProxy");
|
||||
this.BtnStartProxy.Name = "BtnStartProxy";
|
||||
this.BtnStartProxy.UseVisualStyleBackColor = true;
|
||||
this.BtnStartProxy.Click += new System.EventHandler(this.BtnStartProxy_Click);
|
||||
//
|
||||
// ChkAutoStart
|
||||
//
|
||||
resources.ApplyResources(this.ChkAutoStart, "ChkAutoStart");
|
||||
this.ChkAutoStart.Name = "ChkAutoStart";
|
||||
this.ChkAutoStart.UseVisualStyleBackColor = true;
|
||||
this.ChkAutoStart.CheckedChanged += new System.EventHandler(this.ChkAutoStart_CheckedChanged);
|
||||
//
|
||||
// LblProxyIntroduction
|
||||
//
|
||||
resources.ApplyResources(this.LblProxyIntroduction, "LblProxyIntroduction");
|
||||
this.LblProxyIntroduction.Name = "LblProxyIntroduction";
|
||||
this.LblProxyIntroduction.ReadOnly = true;
|
||||
//
|
||||
// BtnDestroyCert
|
||||
//
|
||||
resources.ApplyResources(this.BtnDestroyCert, "BtnDestroyCert");
|
||||
this.BtnDestroyCert.Name = "BtnDestroyCert";
|
||||
this.BtnDestroyCert.UseVisualStyleBackColor = true;
|
||||
this.BtnDestroyCert.Click += new System.EventHandler(this.BtnDestroyCert_Click);
|
||||
//
|
||||
// LnkEavesdrop
|
||||
//
|
||||
resources.ApplyResources(this.LnkEavesdrop, "LnkEavesdrop");
|
||||
this.LnkEavesdrop.Name = "LnkEavesdrop";
|
||||
this.LnkEavesdrop.TabStop = true;
|
||||
this.LnkEavesdrop.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkEavesdrop_LinkClicked);
|
||||
//
|
||||
// LnkAbout
|
||||
//
|
||||
resources.ApplyResources(this.LnkAbout, "LnkAbout");
|
||||
this.LnkAbout.Name = "LnkAbout";
|
||||
this.LnkAbout.TabStop = true;
|
||||
this.LnkAbout.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkAbout_LinkClicked);
|
||||
//
|
||||
// LblGcJarPath
|
||||
//
|
||||
resources.ApplyResources(this.LblGcJarPath, "LblGcJarPath");
|
||||
this.LblGcJarPath.Name = "LblGcJarPath";
|
||||
//
|
||||
// TxtGcJarPath
|
||||
//
|
||||
resources.ApplyResources(this.TxtGcJarPath, "TxtGcJarPath");
|
||||
this.TxtGcJarPath.Name = "TxtGcJarPath";
|
||||
//
|
||||
// BtnStartGc
|
||||
//
|
||||
resources.ApplyResources(this.BtnStartGc, "BtnStartGc");
|
||||
this.BtnStartGc.Name = "BtnStartGc";
|
||||
this.BtnStartGc.UseVisualStyleBackColor = true;
|
||||
this.BtnStartGc.Click += new System.EventHandler(this.BtnStartGc_Click);
|
||||
//
|
||||
// PageProxy
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.BtnStartGc);
|
||||
this.Controls.Add(this.TxtGcJarPath);
|
||||
this.Controls.Add(this.LblGcJarPath);
|
||||
this.Controls.Add(this.LnkAbout);
|
||||
this.Controls.Add(this.LnkEavesdrop);
|
||||
this.Controls.Add(this.BtnDestroyCert);
|
||||
this.Controls.Add(this.LblProxyIntroduction);
|
||||
this.Controls.Add(this.ChkAutoStart);
|
||||
this.Controls.Add(this.BtnStartProxy);
|
||||
this.Controls.Add(this.LblServerAddress);
|
||||
this.Controls.Add(this.TxtHost);
|
||||
this.Name = "PageProxy";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox TxtHost;
|
||||
private System.Windows.Forms.Label LblServerAddress;
|
||||
private System.Windows.Forms.Button BtnStartProxy;
|
||||
private System.Windows.Forms.CheckBox ChkAutoStart;
|
||||
private System.Windows.Forms.TextBox LblProxyIntroduction;
|
||||
private System.Windows.Forms.Button BtnDestroyCert;
|
||||
private System.Windows.Forms.LinkLabel LnkEavesdrop;
|
||||
private System.Windows.Forms.LinkLabel LnkAbout;
|
||||
private System.Windows.Forms.Label LblGcJarPath;
|
||||
private System.Windows.Forms.TextBox TxtGcJarPath;
|
||||
private System.Windows.Forms.Button BtnStartGc;
|
||||
}
|
||||
}
|
||||
171
Source/GrasscutterTools/Pages/PageProxy.cs
Normal file
@@ -0,0 +1,171 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2023 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using GrasscutterTools.Forms;
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageProxy : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageProxyTitle;
|
||||
|
||||
public PageProxy()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public override void OnLoad()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Settings.Default.Host))
|
||||
TxtHost.Text = Settings.Default.Host;
|
||||
ChkAutoStart.Checked = Settings.Default.AutoStartProxy;
|
||||
|
||||
Application.ApplicationExit += OnApplicationExit;
|
||||
|
||||
if (Settings.Default.AutoStartProxy && !ProxyHelper.IsRunning)
|
||||
{
|
||||
Logger.I(Name, "Auto start proxy!");
|
||||
BtnStartProxy_Click(BtnStartProxy, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当应用程序退出时触发
|
||||
/// </summary>
|
||||
private void OnApplicationExit(object sender, EventArgs e)
|
||||
{
|
||||
if (!ProxyHelper.IsRunning) return;
|
||||
Logger.I(Name, "OnApplicationExit: StopProxy...");
|
||||
// 停止代理
|
||||
StopProxy();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当页面被关闭时触发
|
||||
/// </summary>
|
||||
public override void OnClosed()
|
||||
{
|
||||
if (!ProxyHelper.IsRunning) return;
|
||||
Logger.I(Name, "OnPageClosed: StopProxy...");
|
||||
// 停止代理
|
||||
StopProxy();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 停止代理
|
||||
/// </summary>
|
||||
private static void StopProxy()
|
||||
{
|
||||
try
|
||||
{
|
||||
Logger.I("PageProxy", "Stop Proxy");
|
||||
ProxyHelper.StopProxy();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
#if DEBUG
|
||||
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
#endif
|
||||
Logger.E("PageProxy", "Stop Proxy Failed.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击启动GC服务器时触发
|
||||
/// </summary>
|
||||
private void BtnStartGc_Click(object sender, EventArgs e)
|
||||
{
|
||||
// TODO Run java -jar grasscutter.jar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击代理按钮时触发
|
||||
/// </summary>
|
||||
private void BtnStartProxy_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 正在运行则关闭
|
||||
if (ProxyHelper.IsRunning)
|
||||
{
|
||||
ProxyHelper.StopProxy();
|
||||
BtnStartProxy.Text = Resources.StartProxy;
|
||||
TxtHost.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 创建根证书并检查信任
|
||||
if (!ProxyHelper.CheckAndCreateCertificate())
|
||||
{
|
||||
MessageBox.Show(Resources.TrustedBeforeContinuing, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
// 启动代理
|
||||
ProxyHelper.StartProxy(TxtHost.Text);
|
||||
BtnStartProxy.Text = Resources.StopProxy;
|
||||
TxtHost.Enabled = false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.E(Name, "Start Proxy failed.", ex);
|
||||
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击 Eavesdrop 标签时触发
|
||||
/// </summary>
|
||||
private void LnkEavesdrop_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
UIUtil.OpenURL("https://github.com/ArachisH/Eavesdrop");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击关于标签时触发
|
||||
/// </summary>
|
||||
private void LnkAbout_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
FormMain.Instance.NavigateTo<PageAbout>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击卸载证书时触发
|
||||
/// </summary>
|
||||
private void BtnDestroyCert_Click(object sender, EventArgs e)
|
||||
{
|
||||
Logger.I(Name, "DestroyCertificate");
|
||||
ProxyHelper.DestroyCertificate();
|
||||
MessageBox.Show("OK", Resources.Tips);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自动启动代理选项更改时触发
|
||||
/// </summary>
|
||||
private void ChkAutoStart_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Settings.Default.AutoStartProxy = ChkAutoStart.Checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
160
Source/GrasscutterTools/Pages/PageProxy.en-US.resx
Normal file
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblServerAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>138, 17</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.Text" xml:space="preserve">
|
||||
<value>Target HTTP (s) server</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Text" xml:space="preserve">
|
||||
<value>Start proxy</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>84, 21</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Text" xml:space="preserve">
|
||||
<value>Auto start</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Text" xml:space="preserve">
|
||||
<value> To start the proxy, you need to trust the temporary root certificate of this application, which is only used for proxying requests related to anime games. The certificate is valid for one month, and you can uninstall it by clicking the lower right corner at any time.
|
||||
The proxy functionality code comes from the open-source project Eavesdrop, following the MIT open-source license and has been modified to match the application's requirements.
|
||||
This proxy bypasses non-anime game requests through a large number of filtering rules, reducing the impact. Feel free to give it a try!
|
||||
The proxy will automatically close when the program exits, so you can use it with peace of mind :)</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Text" xml:space="preserve">
|
||||
<value>Uninstall cert</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>43, 17</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 17</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Text" xml:space="preserve">
|
||||
<value>GrasscutterJar Path</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Text" xml:space="preserve">
|
||||
<value>Start Grasscutter</value>
|
||||
</data>
|
||||
</root>
|
||||
459
Source/GrasscutterTools/Pages/PageProxy.resx
Normal file
@@ -0,0 +1,459 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtHost.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="TxtHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>227, 40</value>
|
||||
</data>
|
||||
<data name="TxtHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>160, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtHost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="TxtHost.Text" xml:space="preserve">
|
||||
<value>http://127.0.0.1:443</value>
|
||||
</data>
|
||||
<data name=">>TxtHost.Name" xml:space="preserve">
|
||||
<value>TxtHost</value>
|
||||
</data>
|
||||
<data name=">>TxtHost.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtHost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtHost.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>84, 43</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>137, 17</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.Text" xml:space="preserve">
|
||||
<value>目标 http(s) 服务器地址</value>
|
||||
</data>
|
||||
<data name=">>LblServerAddress.Name" xml:space="preserve">
|
||||
<value>LblServerAddress</value>
|
||||
</data>
|
||||
<data name=">>LblServerAddress.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblServerAddress.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblServerAddress.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>393, 40</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 25</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Text" xml:space="preserve">
|
||||
<value>启动代理</value>
|
||||
</data>
|
||||
<data name=">>BtnStartProxy.Name" xml:space="preserve">
|
||||
<value>BtnStartProxy</value>
|
||||
</data>
|
||||
<data name=">>BtnStartProxy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnStartProxy.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnStartProxy.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>519, 42</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 21</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Text" xml:space="preserve">
|
||||
<value>自动开启</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoStart.Name" xml:space="preserve">
|
||||
<value>ChkAutoStart</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoStart.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoStart.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoStart.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>48, 72</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>550, 120</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Text" xml:space="preserve">
|
||||
<value> 启动代理需要信任本应用的临时根证书,该证书仅用于代理动漫游戏相关请求,有效期1月,你可以随时点击右下角卸载证书。
|
||||
代理功能代码来自开源项目 Eavesdrop,遵循MIT开源协议,经过魔改以匹配应用需求。
|
||||
本代理通过大量过滤规则来规避非动漫游戏的请求经过应用,减小影响,欢迎体验!
|
||||
程序退出时会自动关闭代理,放心使用 :)</value>
|
||||
</data>
|
||||
<data name=">>LblProxyIntroduction.Name" xml:space="preserve">
|
||||
<value>LblProxyIntroduction</value>
|
||||
</data>
|
||||
<data name=">>LblProxyIntroduction.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblProxyIntroduction.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblProxyIntroduction.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>529, 207</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Text" xml:space="preserve">
|
||||
<value>卸载证书</value>
|
||||
</data>
|
||||
<data name=">>BtnDestroyCert.Name" xml:space="preserve">
|
||||
<value>BtnDestroyCert</value>
|
||||
</data>
|
||||
<data name=">>BtnDestroyCert.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnDestroyCert.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnDestroyCert.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LnkEavesdrop.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LnkEavesdrop.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LnkEavesdrop.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>15, 211</value>
|
||||
</data>
|
||||
<data name="LnkEavesdrop.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>70, 17</value>
|
||||
</data>
|
||||
<data name="LnkEavesdrop.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="LnkEavesdrop.Text" xml:space="preserve">
|
||||
<value>Eavesdrop</value>
|
||||
</data>
|
||||
<data name=">>LnkEavesdrop.Name" xml:space="preserve">
|
||||
<value>LnkEavesdrop</value>
|
||||
</data>
|
||||
<data name=">>LnkEavesdrop.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LnkEavesdrop.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LnkEavesdrop.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="LnkAbout.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>482, 211</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 17</value>
|
||||
</data>
|
||||
<data name="LnkAbout.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Text" xml:space="preserve">
|
||||
<value>关于</value>
|
||||
</data>
|
||||
<data name=">>LnkAbout.Name" xml:space="preserve">
|
||||
<value>LnkAbout</value>
|
||||
</data>
|
||||
<data name=">>LnkAbout.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LnkAbout.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LnkAbout.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>102, 14</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>119, 17</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Text" xml:space="preserve">
|
||||
<value>GrasscutterJar 路径</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblGcJarPath.Name" xml:space="preserve">
|
||||
<value>LblGcJarPath</value>
|
||||
</data>
|
||||
<data name=">>LblGcJarPath.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblGcJarPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblGcJarPath.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TxtGcJarPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="TxtGcJarPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>227, 11</value>
|
||||
</data>
|
||||
<data name="TxtGcJarPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>160, 23</value>
|
||||
</data>
|
||||
<data name="TxtGcJarPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TxtGcJarPath.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>TxtGcJarPath.Name" xml:space="preserve">
|
||||
<value>TxtGcJarPath</value>
|
||||
</data>
|
||||
<data name=">>TxtGcJarPath.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtGcJarPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtGcJarPath.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>393, 11</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 25</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Text" xml:space="preserve">
|
||||
<value>启动服务器</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>BtnStartGc.Name" xml:space="preserve">
|
||||
<value>BtnStartGc</value>
|
||||
</data>
|
||||
<data name=">>BtnStartGc.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnStartGc.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnStartGc.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name="$this.AutoScroll" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PageProxy</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
</root>
|
||||
173
Source/GrasscutterTools/Pages/PageProxy.ru-RU.resx
Normal file
@@ -0,0 +1,173 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblServerAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>72, 44</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 17</value>
|
||||
</data>
|
||||
<data name="LblServerAddress.Text" xml:space="preserve">
|
||||
<value>Целевой сервер http(s)</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>130, 25</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Text" xml:space="preserve">
|
||||
<value>Запустить прокси</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>529, 34</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>126, 38</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Text" xml:space="preserve">
|
||||
<value>Автоматическое
|
||||
открытие </value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Text" xml:space="preserve">
|
||||
<value> Для запуска прокси необходимо доверять временному корневому сертификату этого приложения, который используется только для проксирования запросов, связанных с аниме-играми. Срок действия сертификата составляет один месяц, и вы можете удалить его в любое время, нажав правый нижний угол.
|
||||
Код функционала прокси взят из открытого проекта Eavesdrop и выпущен под лицензией MIT с изменениями в соответствии с требованиями приложения.
|
||||
Этот прокси обходит запросы, не относящиеся к аниме-играм, с помощью большого количества фильтрующих правил, что уменьшает воздействие на систему. Приглашаем вас попробовать!
|
||||
Прокси автоматически закроется при выходе из программы, так что можете использовать его спокойно :)</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Text" xml:space="preserve">
|
||||
<value>Удалить сертификат </value>
|
||||
</data>
|
||||
<data name="LnkAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>18, 17</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Text" xml:space="preserve">
|
||||
<value>О</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 17</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Text" xml:space="preserve">
|
||||
<value>GrasscutterJar Path</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>130, 25</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Text" xml:space="preserve">
|
||||
<value> Запустить сервер </value>
|
||||
</data>
|
||||
</root>
|
||||
147
Source/GrasscutterTools/Pages/PageProxy.zh-TW.resx
Normal file
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="LblServerAddress.Text" xml:space="preserve">
|
||||
<value>目標 http(s) 伺服器地址</value>
|
||||
</data>
|
||||
<data name="BtnStartProxy.Text" xml:space="preserve">
|
||||
<value>啟動代理</value>
|
||||
</data>
|
||||
<data name="ChkAutoStart.Text" xml:space="preserve">
|
||||
<value>自動開啟</value>
|
||||
</data>
|
||||
<data name="LblProxyIntroduction.Text" xml:space="preserve">
|
||||
<value> 啟動代理需要信任本應用的臨時根證書,該證書僅用於代理動漫遊戲相關請求,有效期1月,你可以隨時點擊右下角卸載證書。
|
||||
代理功能程式碼來自開源項目 Eavesdrop,遵循MIT開源協議,經過魔改以匹配應用需求。
|
||||
本代理通過大量過濾規則來規避非動漫遊戲的請求經過應用,減小影響,歡迎體驗!
|
||||
程式退出時會自動關閉代理,放心使用 :)</value>
|
||||
</data>
|
||||
<data name="BtnDestroyCert.Text" xml:space="preserve">
|
||||
<value>卸載證書</value>
|
||||
</data>
|
||||
<data name="LnkAbout.Text" xml:space="preserve">
|
||||
<value>關於</value>
|
||||
</data>
|
||||
<data name="LblGcJarPath.Text" xml:space="preserve">
|
||||
<value>GrasscutterJar 路徑</value>
|
||||
</data>
|
||||
<data name="BtnStartGc.Text" xml:space="preserve">
|
||||
<value>啟動伺服器</value>
|
||||
</data>
|
||||
</root>
|
||||
22
Source/GrasscutterTools/Pages/PageQuest.Designer.cs
generated
@@ -38,6 +38,8 @@
|
||||
this.LblQuestDescription = new System.Windows.Forms.Label();
|
||||
this.TxtQuestFilter = new System.Windows.Forms.TextBox();
|
||||
this.ListQuest = new System.Windows.Forms.ListBox();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.ChkAddAndFinishQuest = new System.Windows.Forms.CheckBox();
|
||||
this.GrpQuestFilters.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -106,11 +108,29 @@
|
||||
resources.ApplyResources(this.ListQuest, "ListQuest");
|
||||
this.ListQuest.FormattingEnabled = true;
|
||||
this.ListQuest.Name = "ListQuest";
|
||||
this.ListQuest.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListQuest_MeasureItem);
|
||||
this.ListQuest.SelectedIndexChanged += new System.EventHandler(this.ListQuest_SelectedIndexChanged);
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// ChkAddAndFinishQuest
|
||||
//
|
||||
resources.ApplyResources(this.ChkAddAndFinishQuest, "ChkAddAndFinishQuest");
|
||||
this.ChkAddAndFinishQuest.Name = "ChkAddAndFinishQuest";
|
||||
this.ChkAddAndFinishQuest.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// PageQuest
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.ChkAddAndFinishQuest);
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.GrpQuestFilters);
|
||||
this.Controls.Add(this.BtnFinishQuest);
|
||||
this.Controls.Add(this.BtnAddQuest);
|
||||
@@ -136,5 +156,7 @@
|
||||
private System.Windows.Forms.Label LblQuestDescription;
|
||||
private System.Windows.Forms.TextBox TxtQuestFilter;
|
||||
private System.Windows.Forms.ListBox ListQuest;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
private System.Windows.Forms.CheckBox ChkAddAndFinishQuest;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,11 +22,14 @@ using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageQuest : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageQuestTitle;
|
||||
|
||||
public PageQuest()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -60,6 +63,16 @@ namespace GrasscutterTools.Pages
|
||||
return true;
|
||||
}).ToArray());
|
||||
ListQuest.EndUpdate();
|
||||
|
||||
LblClearFilter.Visible = TxtQuestFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空过滤栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtQuestFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -71,7 +84,24 @@ namespace GrasscutterTools.Pages
|
||||
return;
|
||||
var item = ListQuest.SelectedItem as string;
|
||||
var id = ItemMap.ToId(item);
|
||||
SetCommand("/quest", $"{(sender as Button).Tag} {id}");
|
||||
SetCommand("/quest", $"{(sender == BtnAddQuest ? "add" : "finish")} {id}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表选中项改变时触发
|
||||
/// </summary>
|
||||
private void ListQuest_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!ChkAddAndFinishQuest.Checked || ListQuest.SelectedIndex == -1) return;
|
||||
|
||||
var item = ListQuest.SelectedItem as string;
|
||||
var id = ItemMap.ToId(item);
|
||||
SetCommand($"/quest add {id} | /quest finish {id}");
|
||||
}
|
||||
|
||||
private void ListQuest_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListQuest.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,4 +151,10 @@ Tip: Many quest require server-side scripting support
|
||||
Therefore, the quest can be added and finished, but not necessarily work.
|
||||
</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>187, 21</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Text" xml:space="preserve">
|
||||
<value>Add && Finish when selected</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -117,279 +117,345 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="GrpQuestFilters.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="ChkQuestFilterTEST.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="ChkQuestFilterTEST.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>26, 82</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 21</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
|
||||
<value>测试任务</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.Name" xml:space="preserve">
|
||||
<value>ChkQuestFilterTEST</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.Parent" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>26, 55</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>99, 21</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.TabIndex" type="System.Int32, mscorlib">
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtQuestFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
|
||||
<value>未发布的任务</value>
|
||||
<data name=">>BtnAddQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Text" xml:space="preserve">
|
||||
<value>添加任务</value>
|
||||
</data>
|
||||
<data name="TxtQuestFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>288, 23</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.15.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.Name" xml:space="preserve">
|
||||
<value>ChkQuestFilterUNRELEASED</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.Parent" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<data name="ChkQuestFilterUNRELEASED.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>99, 21</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>26, 28</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>87, 21</value>
|
||||
<data name=">>TxtQuestFilter.Name" xml:space="preserve">
|
||||
<value>TxtQuestFilter</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
|
||||
<value>隐藏的任务</value>
|
||||
<data name="LblQuestDescription.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.Name" xml:space="preserve">
|
||||
<value>ChkQuestFilterHIDDEN</value>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>626, 5</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.Type" xml:space="preserve">
|
||||
<data name=">>ChkQuestFilterTEST.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ListQuest.ItemHeight" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>90, 23</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblQuestDescription.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>26, 82</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 21</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.Parent" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.ZOrder" xml:space="preserve">
|
||||
<data name="BtnAddQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.Name" xml:space="preserve">
|
||||
<value>ListQuest</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.Parent" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.Name" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Text" xml:space="preserve">
|
||||
<value>完成任务</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Text" xml:space="preserve">
|
||||
<value>列表过滤</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>ChkAddAndFinishQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Text" xml:space="preserve">
|
||||
<value>选中时添加并完成</value>
|
||||
</data>
|
||||
<data name="ListQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>199, 106</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 130</value>
|
||||
<data name="ChkQuestFilterHIDDEN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>87, 21</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<data name="ChkAddAndFinishQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Text" xml:space="preserve">
|
||||
<value>列表过滤</value>
|
||||
<data name=">>ChkAddAndFinishQuest.Name" xml:space="preserve">
|
||||
<value>ChkAddAndFinishQuest</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.Name" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
<data name="ChkAddAndFinishQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>123, 21</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.Name" xml:space="preserve">
|
||||
<value>ChkQuestFilterTEST</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>GrpQuestFilters.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>99, 213</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>90, 23</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Text" xml:space="preserve">
|
||||
<value>完成任务</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.Name" xml:space="preserve">
|
||||
<value>BtnFinishQuest</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 213</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>90, 23</value>
|
||||
<data name="ChkQuestFilterHIDDEN.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Text" xml:space="preserve">
|
||||
<value>添加任务</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.Name" xml:space="preserve">
|
||||
<value>BtnAddQuest</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
<data name="ListQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
<data name=">>LblQuestDescription.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>346, 100</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
|
||||
<value>测试任务</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 186</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ListQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>288, 208</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 130</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.Name" xml:space="preserve">
|
||||
<value>BtnFinishQuest</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>99, 213</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name=">>BtnAddQuest.Name" xml:space="preserve">
|
||||
<value>BtnAddQuest</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.Name" xml:space="preserve">
|
||||
<value>ChkQuestFilterHIDDEN</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 213</value>
|
||||
</data>
|
||||
<data name=">>BtnFinishQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkAddAndFinishQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.Text" xml:space="preserve">
|
||||
<value>添加或完成任务
|
||||
提示:许多任务需要服务端脚本支持
|
||||
因此任务可以接,可以完成,但是不一定可以做</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.Name" xml:space="preserve">
|
||||
<value>LblQuestDescription</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="TxtQuestFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="TxtQuestFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>355, 2</value>
|
||||
</data>
|
||||
<data name="TxtQuestFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>288, 23</value>
|
||||
</data>
|
||||
<data name="TxtQuestFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.Name" xml:space="preserve">
|
||||
<value>TxtQuestFilter</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="ListQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="ListQuest.ItemHeight" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="ListQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>355, 28</value>
|
||||
</data>
|
||||
<data name="ListQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>288, 208</value>
|
||||
</data>
|
||||
<data name="ListQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.Name" xml:space="preserve">
|
||||
<value>ListQuest</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PageQuest</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtQuestFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterUNRELEASED.Parent" xml:space="preserve">
|
||||
<value>GrpQuestFilters</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="TxtQuestFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>355, 2</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
|
||||
<value>隐藏的任务</value>
|
||||
</data>
|
||||
<data name="ListQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>355, 28</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>90, 23</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterTEST.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>ChkQuestFilterHIDDEN.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>ListQuest.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
|
||||
<value>未发布的任务</value>
|
||||
</data>
|
||||
<data name=">>LblQuestDescription.Name" xml:space="preserve">
|
||||
<value>LblQuestDescription</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>ChkAddAndFinishQuest.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -151,4 +151,10 @@
|
||||
Поэтому квест может быть добавлен или отозван через консоль, но завершён игроком - вряд ли.
|
||||
</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>167, 21</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Text" xml:space="preserve">
|
||||
<value>Добавить и завершить</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -141,4 +141,7 @@
|
||||
囙此任務可以接,可以完成,但是不一定可以做
|
||||
</value>
|
||||
</data>
|
||||
<data name="ChkAddAndFinishQuest.Text" xml:space="preserve">
|
||||
<value>選中時添加並完成</value>
|
||||
</data>
|
||||
</root>
|
||||
41
Source/GrasscutterTools/Pages/PageScene.Designer.cs
generated
@@ -40,14 +40,12 @@
|
||||
this.NUDTpZ = new System.Windows.Forms.NumericUpDown();
|
||||
this.NUDTpY = new System.Windows.Forms.NumericUpDown();
|
||||
this.NUDTpX = new System.Windows.Forms.NumericUpDown();
|
||||
this.CmbClimateType = new System.Windows.Forms.ComboBox();
|
||||
this.LblClimateType = new System.Windows.Forms.Label();
|
||||
this.LblSceneDescription = new System.Windows.Forms.Label();
|
||||
this.ListScenes = new System.Windows.Forms.ListBox();
|
||||
this.LblTp = new System.Windows.Forms.Label();
|
||||
this.RbListCutScene = new System.Windows.Forms.RadioButton();
|
||||
this.ChkLockClimate = new System.Windows.Forms.CheckBox();
|
||||
this.BtnFreezeTime = new System.Windows.Forms.Button();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDTpZ)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDTpY)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDTpX)).BeginInit();
|
||||
@@ -168,19 +166,6 @@
|
||||
-2147483648});
|
||||
this.NUDTpX.Name = "NUDTpX";
|
||||
//
|
||||
// CmbClimateType
|
||||
//
|
||||
resources.ApplyResources(this.CmbClimateType, "CmbClimateType");
|
||||
this.CmbClimateType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.CmbClimateType.FormattingEnabled = true;
|
||||
this.CmbClimateType.Name = "CmbClimateType";
|
||||
this.CmbClimateType.SelectedIndexChanged += new System.EventHandler(this.CmbClimateType_SelectedIndexChanged);
|
||||
//
|
||||
// LblClimateType
|
||||
//
|
||||
resources.ApplyResources(this.LblClimateType, "LblClimateType");
|
||||
this.LblClimateType.Name = "LblClimateType";
|
||||
//
|
||||
// LblSceneDescription
|
||||
//
|
||||
resources.ApplyResources(this.LblSceneDescription, "LblSceneDescription");
|
||||
@@ -191,6 +176,7 @@
|
||||
resources.ApplyResources(this.ListScenes, "ListScenes");
|
||||
this.ListScenes.FormattingEnabled = true;
|
||||
this.ListScenes.Name = "ListScenes";
|
||||
this.ListScenes.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListScenes_MeasureItem);
|
||||
this.ListScenes.SelectedIndexChanged += new System.EventHandler(this.ListScenes_SelectedIndexChanged);
|
||||
//
|
||||
// LblTp
|
||||
@@ -205,13 +191,6 @@
|
||||
this.RbListCutScene.UseVisualStyleBackColor = true;
|
||||
this.RbListCutScene.CheckedChanged += new System.EventHandler(this.RbListCutScene_CheckedChanged);
|
||||
//
|
||||
// ChkLockClimate
|
||||
//
|
||||
resources.ApplyResources(this.ChkLockClimate, "ChkLockClimate");
|
||||
this.ChkLockClimate.Name = "ChkLockClimate";
|
||||
this.ChkLockClimate.UseVisualStyleBackColor = true;
|
||||
this.ChkLockClimate.CheckedChanged += new System.EventHandler(this.ChkLockClimate_CheckedChanged);
|
||||
//
|
||||
// BtnFreezeTime
|
||||
//
|
||||
resources.ApplyResources(this.BtnFreezeTime, "BtnFreezeTime");
|
||||
@@ -219,12 +198,20 @@
|
||||
this.BtnFreezeTime.UseVisualStyleBackColor = true;
|
||||
this.BtnFreezeTime.Click += new System.EventHandler(this.BtnFreezeTime_Click);
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// PageScene
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.BtnFreezeTime);
|
||||
this.Controls.Add(this.ChkLockClimate);
|
||||
this.Controls.Add(this.RbListCutScene);
|
||||
this.Controls.Add(this.RbListDungeons);
|
||||
this.Controls.Add(this.RbListScene);
|
||||
@@ -237,8 +224,6 @@
|
||||
this.Controls.Add(this.NUDTpZ);
|
||||
this.Controls.Add(this.NUDTpY);
|
||||
this.Controls.Add(this.NUDTpX);
|
||||
this.Controls.Add(this.CmbClimateType);
|
||||
this.Controls.Add(this.LblClimateType);
|
||||
this.Controls.Add(this.LblSceneDescription);
|
||||
this.Controls.Add(this.ListScenes);
|
||||
this.Controls.Add(this.LblTp);
|
||||
@@ -264,13 +249,11 @@
|
||||
private System.Windows.Forms.NumericUpDown NUDTpZ;
|
||||
private System.Windows.Forms.NumericUpDown NUDTpY;
|
||||
private System.Windows.Forms.NumericUpDown NUDTpX;
|
||||
private System.Windows.Forms.ComboBox CmbClimateType;
|
||||
private System.Windows.Forms.Label LblClimateType;
|
||||
private System.Windows.Forms.Label LblSceneDescription;
|
||||
private System.Windows.Forms.ListBox ListScenes;
|
||||
private System.Windows.Forms.Label LblTp;
|
||||
private System.Windows.Forms.RadioButton RbListCutScene;
|
||||
private System.Windows.Forms.CheckBox ChkLockClimate;
|
||||
private System.Windows.Forms.Button BtnFreezeTime;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageScene : BasePage
|
||||
{
|
||||
public override string Text => Resources.PageSceneTitle;
|
||||
|
||||
public PageScene()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -53,8 +55,6 @@ namespace GrasscutterTools.Pages
|
||||
public override void OnLoad()
|
||||
{
|
||||
Scenes = GameData.Scenes.Lines;
|
||||
CmbClimateType.Items.Clear();
|
||||
CmbClimateType.Items.AddRange(Resources.ClimateType.Split(','));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -90,6 +90,15 @@ namespace GrasscutterTools.Pages
|
||||
private void TxtSceneFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListScenes, Scenes, TxtSceneFilter.Text);
|
||||
LblClearFilter.Visible = TxtSceneFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空过滤栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtSceneFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -128,24 +137,6 @@ namespace GrasscutterTools.Pages
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 气候类型列表
|
||||
/// </summary>
|
||||
private static readonly string[] climateTypes = { "none", "sunny", "cloudy", "rain", "thunderstorm", "snow", "mist" };
|
||||
|
||||
/// <summary>
|
||||
/// 气候类型下拉框选中项改变时触发
|
||||
/// </summary>
|
||||
private void CmbClimateType_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (CmbClimateType.SelectedIndex < 0)
|
||||
return;
|
||||
if (CommandVersion.Check(CommandVersion.V1_2_2))
|
||||
SetCommand("/weather", CmbClimateType.SelectedIndex < climateTypes.Length ? climateTypes[CmbClimateType.SelectedIndex] : "none");
|
||||
else
|
||||
SetCommand("/weather", $"0 {CmbClimateType.SelectedIndex}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击传送按钮时触发
|
||||
/// </summary>
|
||||
@@ -157,14 +148,6 @@ namespace GrasscutterTools.Pages
|
||||
SetCommand("/tp", args);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 锁定天气
|
||||
/// </summary>
|
||||
private void ChkLockClimate_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
SetCommand("/prop", $"is_weather_locked {(ChkLockClimate.Checked ? "on" : "off")}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 冻结游戏时间
|
||||
/// </summary>
|
||||
@@ -172,5 +155,10 @@ namespace GrasscutterTools.Pages
|
||||
{
|
||||
SetCommand("/prop", "is_game_time_locked on");
|
||||
}
|
||||
|
||||
private void ListScenes_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
|
||||
{
|
||||
e.ItemHeight = ListScenes.Font.Height * 3 / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||