.NET 6 開發(fā)一個英雄聯(lián)盟游戲助手
前言
看了網(wǎng)上很多自己開發(fā)的英雄聯(lián)盟的小助手工具,當時苦于沒有API,自己也想做一個。
后來發(fā)現(xiàn)了其實拳頭本身就提供了LCU API在客戶端運行的時候會暴露出來。
現(xiàn)在我們就來了解下工具的實現(xiàn)。
正文
查詢數(shù)據(jù):http協(xié)議訪問resuful接口,查詢一些靜態(tài)數(shù)據(jù),如賬號信息,排位信息,戰(zhàn)績等。
websocket綁定接口,獲取服務(wù)端發(fā)送過來的動態(tài)信息,如游戲進程,選英雄實時數(shù)據(jù)。
從上面我們得知,英雄聯(lián)盟客戶端在啟動的時候一定會起來一個Web服務(wù),并且會有一些Resuful接口和Websocket信息的發(fā)送。
那我們?nèi)绾潍@取到呢?只要我們打開英雄聯(lián)盟客戶端并且用管理員啟動cmd,輸入:
wmic PROCESS WHERE name='LeagueClientUx.exe' GET commandline
就能看到一些英雄聯(lián)盟客戶端啟動的命令行信息。
主要是獲取其中的服務(wù)端口和token.

接下來我們只要解析其中的信息。獲取字符串中的端口,token,進程號等信息。
using (Process p = new Process())
{
p.StartInfo.FileName = _cmdPath;
p.StartInfo.UseShellExecute = false; //是否使用操作系統(tǒng)shell啟動
p.StartInfo.RedirectStandardInput = true; //接受來自調(diào)用程序的輸入信息
p.StartInfo.RedirectStandardOutput = true; //由調(diào)用程序獲取輸出信息
p.StartInfo.RedirectStandardError = true; //重定向標準錯誤輸出
p.StartInfo.CreateNoWindow = true; //不顯示程序窗口
p.Start();
p.StandardInput.WriteLine(_excuteShell.TrimEnd('&') + "&exit");
p.StandardInput.AutoFlush = true;
string authenticate = await p.StandardOutput.ReadToEndAsync();
p.WaitForExit();
p.Close();
var authenticate = await GetAuthenticate();
if (!string.IsNullOrEmpty(authenticate) && authenticate.Contains("--remoting-auth-token="))
{
var tokenResults = authenticate.Split("--remoting-auth-token=");
var portResults = authenticate.Split("--app-port=");
var PidResults = authenticate.Split("--app-pid=");
var installLocations = authenticate.Split("--install-directory=");
Constant.Token = tokenResults[1].Substring(0, tokenResults[1].IndexOf("\""));
Constant.Port = int.TryParse(portResults[1].Substring(0, portResults[1].IndexOf("\"")), out var temp) ? temp : 0;
Constant.Pid = int.TryParse(PidResults[1].Substring(0, PidResults[1].IndexOf("\"")), out var temp1) ? temp1 : 0;
}}
接下來我們需要啟動http服務(wù)和websocket監(jiān)聽服務(wù)。
httpclient初始化:
public Task Initialize(int port, string token)
{
Port = port;
Token = token;
CreateHttpClient();
var authTokenBytes = Encoding.ASCII.GetBytes($"riot:{token}");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authTokenBytes));
_httpClient.BaseAddress = new Uri($"https://127.0.0.1:{port}/");
return Task.CompletedTask;
}
websocket初始化:
public Task Initialize(int port, string token)
{
_webSocket = new WebSocket($"wss://127.0.0.1:{port}/", "wamp");
_webSocket.SetCredentials("riot", token, true);
_webSocket.SslConfiguration.EnabledSslProtocols = SslProtocols.Tls12;
_webSocket.SslConfiguration.ServerCertificateValidationCallback = (response, cert, chain, errors) => true;
_webSocket.OnMessage += WssOnOnMessage;
return Task.CompletedTask;
}
private void WssOnOnMessage(object sender, MessageEventArgs e)
{
if (!e.IsText) return;
var eventArray = JArray.Parse(e.Data);
var eventNumber = eventArray[0].ToObject<int>();
if (eventNumber != ClientEventNumber) return;
var leagueEvent = eventArray[ClientEventData].ToObject<EventArgument>();
if (string.IsNullOrWhiteSpace(leagueEvent?.Uri))
return;
MessageReceived?.Invoke(this, leagueEvent);
if (!_subscribers.TryGetValue(leagueEvent.Uri, out List<EventHandler<EventArgument>> eventHandlers))
{
return;
}
eventHandlers.ForEach(eventHandler => eventHandler?.Invoke(this, leagueEvent));
}
接下來我們只要啟動這些服務(wù),然后根據(jù)拳頭官方的LCU API就能夠訪問到本地的一些數(shù)據(jù)了。
LCU API : https://lcu.vivide.re/
我這邊用.NET 6 +WPF+VS2022制作了一個LOL工具,大家可以作為參考,開源免費,如果覺得還可以打個星球球了。
github地址:BruceQiu1996/NPhoenix: 英雄聯(lián)盟插件,支持修改段位,修改生涯背景,自動接受對局,設(shè)置符文,查看隊友戰(zhàn)績,上等馬分析等等 (https://github.com/BruceQiu1996/NPhoenix)
工具支持:
?? | 秒選英雄| 自動接受對局| 國服數(shù)據(jù)排行榜
?? 查看英雄對位壓制| 查看英雄優(yōu)勢對線| 5v5符文配置| 修改段位| 修改生涯背景
?? 發(fā)送匹馬信息到聊天界面| 查看召喚師戰(zhàn)績| 查看召喚師絕活英雄| 查看召喚師戰(zhàn)績詳情
?? 大亂斗秒選自己喜歡的英雄| 大亂斗符文推薦
下面是工具的一些截圖:



轉(zhuǎn)自:.NET有點帥
鏈接:cnblogs.com/qwqwQAQ/p/16520511.html
