mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2025-12-13 10:24:34 +01:00
Merge branch 'master' of https://github.com/rafi1212122/PemukulPaku
This commit is contained in:
@@ -2,19 +2,19 @@
|
|||||||
<div align="center"><a href="https://discord.gg/fbsRYc7bBA"><img alt="Discord - Server for Lesser Konwn Anime Games" src="https://i.imgtg.com/2023/06/08/O5Lt2S.jpg"></a></div>
|
<div align="center"><a href="https://discord.gg/fbsRYc7bBA"><img alt="Discord - Server for Lesser Konwn Anime Games" src="https://i.imgtg.com/2023/06/08/O5Lt2S.jpg"></a></div>
|
||||||
|
|
||||||
|
|
||||||
[EN](../README.md) [简中](Docs/README_zh-CN.md) [繁中](README_zh-TW.md)
|
[EN](../README.md) | [简中](Docs/README_zh-CN.md) | [繁中](README_zh-TW.md)
|
||||||
# PemukulPaku
|
# PemukulPaku
|
||||||
A private server implementation for a third impact game but made in see sharp
|
A private server implementation for a third impact game but made in see sharp
|
||||||
## 快速开始
|
## 快速开始
|
||||||
**先决条件*
|
**前提条件*
|
||||||
阅读文章的能力
|
* 阅读文章的能力
|
||||||
GitHub 账户
|
* GitHub 账户
|
||||||
[.NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
* [.NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
||||||
在命令行运行如下命令
|
在命令行运行如下命令
|
||||||
```
|
```
|
||||||
dotnet dev-certs https
|
dotnet dev-certs https --trust
|
||||||
```
|
```
|
||||||
[MongoDB](https://www.mongodb.com/try/download/community)
|
* [MongoDB](https://www.mongodb.com/try/download/community)
|
||||||
**快速开始*
|
**快速开始*
|
||||||
克隆存储库
|
克隆存储库
|
||||||
```
|
```
|
||||||
@@ -34,12 +34,38 @@ git clone https://github.com/rafi1212122/PemukulPaku.git
|
|||||||
```
|
```
|
||||||
**运行服务*
|
**运行服务*
|
||||||
1.运行 PemukulPaku.exe
|
1.运行 PemukulPaku.exe
|
||||||
**连结至服务器*
|
**在运行前请确保MongoDB服务已经正确启动**
|
||||||
|
**连接至服务器*
|
||||||
选择你想要的代理工具 (mitmproxy/Fiddler reccomended)
|
选择你想要的代理工具 (mitmproxy/Fiddler reccomended)
|
||||||
使用以下脚本之一进行代理配置::
|
使用以下工具之一进行代理配置::
|
||||||
[mitmproxy](https://gist.github.com/rafi1212122/5cc76297d6cf6396de5fc572d1e55812#file-proxy-py)
|
[mitmproxy](https://mitmproxy.org/)
|
||||||
[Fiddler](https://github.com/rafi1212122/PemukulPaku/wiki/Starting#connecting-to-the-server)
|
[Fiddler](https://github.com/rafi1212122/PemukulPaku/wiki/Starting#connecting-to-the-server)
|
||||||
|
若出现 ``为了账号安全,请重新输入密码``,可尝试使用mitmproxy
|
||||||
|
## 使用Fiddler
|
||||||
|
1.运行 Fiddler Classic, 开启解密http通信 ``Tools-options-Https-勾选Decrypt HTTPS traffic``并将端口设为任意未占用端口``Tools-options-Https-Connections``
|
||||||
|
2.点击Fiddler Script,并填入以下内容
|
||||||
|
```
|
||||||
|
import System;
|
||||||
|
import System.Windows.Forms;
|
||||||
|
import Fiddler;
|
||||||
|
import System.Text.RegularExpressions;
|
||||||
|
class Handlers
|
||||||
|
{
|
||||||
|
static function OnBeforeRequest(oS: Session) {
|
||||||
|
if(oS.host.EndsWith(".yuanshen.com") || oS.host.EndsWith(".hoyoverse.com") || oS.host.EndsWith(".starrails.com") || oS.host.EndsWith(".bhsr.com") || oS.host.EndsWith(".kurogame.com") || oS.host.EndsWith(".zenlesszonezero.com") || oS.host.EndsWith(".g3.proletariat.com") || oS.host.EndsWith("west.honkaiimpact3.com") || oS.host.EndsWith("westglobal01.honkaiimpact3.com") || oS.host.EndsWith(".os.honkaiimpact3.com") || oS.host.EndsWith("overseas01-appsflyer-report.honkaiimpact3.com") || oS.host.EndsWith(".mihoyo.com") || (oS.host.EndsWith("bh3.com") && !oS.host.Contains("bundle"))) {
|
||||||
|
oS.host = "localhost";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## 使用mitmproxy
|
||||||
|
|
||||||
|
1.从[这里](https://gist.github.com/rafi1212122/5cc76297d6cf6396de5fc572d1e55812#file-proxy-py)获取proxy.py
|
||||||
|
2.在proxy.py所在目录运行 `mitmdump -s proxy.py -k`命令
|
||||||
|
3.设置系统代理为你所设置的端口,默认为 ``127.0.0.1:8080``
|
||||||
|
4.信任CA证书
|
||||||
|
* mitmproxy 的 CA 证书通常存放在 `%USERPROFILE%\ .mitmproxy` 或者浏览器访问 ``http://mitm.it``下载证书,如果你访问该地址后看到了 ``If you can see this, traffic is not passing through mitmproxy.``说明mitmproxy配置有误,请重新配置
|
||||||
|
* 双击安装证书,或者运行 ``certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.p12``命令
|
||||||
|
|
||||||
了解更多[GitHub wiki](https://github.com/rafi1212122/PemukulPaku/wiki)
|
了解更多[GitHub wiki](https://github.com/rafi1212122/PemukulPaku/wiki)
|
||||||
|
|
||||||
@@ -65,4 +91,4 @@ git clone https://github.com/rafi1212122/PemukulPaku.git
|
|||||||
了解更多[development](https://github.com/rafi1212122/PemukulPaku/wiki/Development)
|
了解更多[development](https://github.com/rafi1212122/PemukulPaku/wiki/Development)
|
||||||
|
|
||||||
## 支持
|
## 支持
|
||||||
[Discord server](https://discord.gg/fbsRYc7bBA) or GitHub issue
|
加入[Discord server](https://discord.gg/fbsRYc7bBA) or 提交GitHub issue
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
[EN](../README.md)|[簡中](README_zh-CN.md)|[繁中](Docs/README_zh-TW.md)
|
[EN](../README.md)|[簡中](README_zh-CN.md)|[繁中](README_zh-TW.md)
|
||||||
|
|
||||||
|
|
||||||
# PemukulPaku
|
# PemukulPaku
|
||||||
|
|
||||||
@@ -11,23 +12,23 @@ A private server implementation for a third impact game but made in see sharp
|
|||||||
|
|
||||||
##快速開始
|
##快速開始
|
||||||
|
|
||||||
**先決條件*
|
**前提條件*
|
||||||
|
|
||||||
閱讀文章的能力
|
*閱讀文章的能力
|
||||||
|
|
||||||
GitHub帳戶
|
* GitHub帳戶
|
||||||
|
|
||||||
[.NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
* [.NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
||||||
|
|
||||||
在命令列運行如下命令
|
在命令列運行如下命令
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
dotnet dev-certs https
|
dotnet dev-certs https --trust
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[MongoDB](https://www.mongodb.com/try/download/community )
|
* [MongoDB](https://www.mongodb.com/try/download/community)
|
||||||
|
|
||||||
**快速開始*
|
**快速開始*
|
||||||
|
|
||||||
@@ -41,7 +42,7 @@ git clone https://github.com/rafi1212122/PemukulPaku.git
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
從[這裡]下載最新action(https://github.com/rafi1212122/PemukulPaku/actions)下載最新action.
|
從[這裡](https://github.com/rafi1212122/PemukulPaku/actions)下載最新action.
|
||||||
|
|
||||||
進入PemukulPaku資料夾,將下載的action解壓到該資料夾下
|
進入PemukulPaku資料夾,將下載的action解壓到該資料夾下
|
||||||
|
|
||||||
@@ -66,16 +67,69 @@ git clone https://github.com/rafi1212122/PemukulPaku.git
|
|||||||
|
|
||||||
1.運行PemukulPaku.exe
|
1.運行PemukulPaku.exe
|
||||||
|
|
||||||
**連結至服務器*
|
**在運行前請確保MongoDB服務已經正確啟動**
|
||||||
|
|
||||||
|
**連接至服務器*
|
||||||
|
|
||||||
選擇你想要的代理工具(mitmproxy/Fiddler reccomended)
|
選擇你想要的代理工具(mitmproxy/Fiddler reccomended)
|
||||||
|
|
||||||
使用以下腳本之一進行代理配寘::
|
使用以下工具之一進行代理配寘::
|
||||||
|
|
||||||
[mitmproxy](https://gist.github.com/rafi1212122/5cc76297d6cf6396de5fc572d1e55812#file -proxy-py)
|
[mitmproxy](https://mitmproxy.org/)
|
||||||
|
|
||||||
[Fiddler](https://github.com/rafi1212122/PemukulPaku/wiki/Starting#connecting-to-the-server)
|
[Fiddler](https://github.com/rafi1212122/PemukulPaku/wiki/Starting#connecting-to-the-server)
|
||||||
|
|
||||||
|
若出現``為了帳號安全,請重新輸入密碼``,可嘗試使用mitmproxy
|
||||||
|
|
||||||
|
##使用Fiddler
|
||||||
|
|
||||||
|
1.運行Fiddler Classic,開啟解密http通信``Tools-options-Https-勾選Decrypt HTTPS traffic``並將埠設為任意未佔用埠``Tools-options-Https-Connections``
|
||||||
|
|
||||||
|
2.點擊Fiddler Script,並填入以下內容
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
import System;
|
||||||
|
|
||||||
|
import System.Windows.Forms;
|
||||||
|
|
||||||
|
import Fiddler;
|
||||||
|
|
||||||
|
import System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
class Handlers
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
static function OnBeforeRequest(oS: Session){
|
||||||
|
|
||||||
|
if(oS.host.EndsWith(".yuanshen.com")|| oS.host.EndsWith(".hoyoverse.com")|| oS.host.EndsWith(".starrails.com")|| oS.host.EndsWith(".bhsr.com")|| oS.host.EndsWith(".kurogame.com")|| oS.host.EndsWith(".zenlesszonezero.com")|| oS.host.EndsWith(".g3.proletariat.com")|| oS.host.EndsWith("west.honkaiimpact3.com")|| oS.host.EndsWith("westglobal01.honkaiimpact3.com")|| oS.host.EndsWith( ".os.honkaiimpact3.com")|| oS.host.EndsWith("overseas01-appsflyer-report.honkaiimpact3.com")|| oS.host.EndsWith(".mihoyo.com")||(oS.host.EndsWith("bh3.com")&&! oS.host.Contains("bundle"))){
|
||||||
|
|
||||||
|
oS.host ="localhost";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
##使用mitmproxy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1.從[這裡](https://gist.github.com/rafi1212122/5cc76297d6cf6396de5fc572d1e55812#file-proxy-py)獲取proxy.py
|
||||||
|
|
||||||
|
2.在proxy.py所在目錄運行`mitmdump -s proxy.py -k`命令
|
||||||
|
|
||||||
|
3.設定系統代理為你所設定的埠,默認為``127.0.0.1:8080``
|
||||||
|
|
||||||
|
4.信任CA證書
|
||||||
|
|
||||||
|
* mitmproxy的CA證書通常存放在`%USERPROFILE%\ .mitmproxy`或者瀏覽器訪問`` http://mitm.it ``下載證書,如果你訪問該地址後看到了``If you can see this,traffic is not passing through mitmproxy.`` 說明mitmproxy配寘有誤,請重新配寘
|
||||||
|
|
||||||
|
*按兩下安裝證書,或者運行``certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.p12``命令
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -127,4 +181,4 @@ git clone https://github.com/rafi1212122/PemukulPaku.git
|
|||||||
|
|
||||||
##支持
|
##支持
|
||||||
|
|
||||||
[Discord server]( https://discord.gg/fbsRYc7bBA)or GitHub issue
|
加入[Discord server](https://discord.gg/fbsRYc7bBA)or提交GitHub issue
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
public override void Run(Player player, string[] args)
|
public override void Run(Player player, string[] args)
|
||||||
{
|
{
|
||||||
string action = args[0];
|
string action = args[0];
|
||||||
int value = (args.Length > 1 && args[1] is not null) ? int.Parse(args[1]) : -1;
|
int? value = (args.Length >= 2 && args[1] is not null) ? int.Parse(args[1]) : null;
|
||||||
|
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
@@ -56,7 +56,7 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
if (weaponData.EvoId == 0)
|
if (weaponData.EvoId == 0)
|
||||||
{
|
{
|
||||||
Weapon weapon = player.Equipment.AddWeapon(weaponData.Id);
|
Weapon weapon = player.Equipment.AddWeapon(weaponData.Id);
|
||||||
weapon.Level = value <= 0 ? (uint)weaponData.MaxLv : (uint)value;
|
weapon.Level = value is not null && value <= 0 ? (uint)weaponData.MaxLv : value is not null ? (uint)value : (uint)weaponData.MaxLv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -65,7 +65,7 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
foreach (WeaponDataExcel weaponData in WeaponData.GetInstance().All)
|
foreach (WeaponDataExcel weaponData in WeaponData.GetInstance().All)
|
||||||
{
|
{
|
||||||
Weapon weapon = player.Equipment.AddWeapon(weaponData.Id);
|
Weapon weapon = player.Equipment.AddWeapon(weaponData.Id);
|
||||||
weapon.Level = value <= 0 ? (uint)weaponData.MaxLv : (uint)value;
|
weapon.Level = value is not null && value <= 0 ? (uint)weaponData.MaxLv : value is not null ? (uint)value : (uint)weaponData.MaxLv;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "stigmata":
|
case "stigmata":
|
||||||
@@ -75,7 +75,7 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
if (stigmataData.EvoId == 0)
|
if (stigmataData.EvoId == 0)
|
||||||
{
|
{
|
||||||
Stigmata stigmata = player.Equipment.AddStigmata(stigmataData.Id);
|
Stigmata stigmata = player.Equipment.AddStigmata(stigmataData.Id);
|
||||||
stigmata.Level = value <= 0 ? (uint)stigmataData.MaxLv : (uint)value;
|
stigmata.Level = value is not null && value <= 0 ? (uint)stigmataData.MaxLv : value is not null ? (uint)value : (uint)stigmataData.MaxLv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -84,7 +84,7 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
foreach (StigmataDataExcel stigmataData in StigmataData.GetInstance().All)
|
foreach (StigmataDataExcel stigmataData in StigmataData.GetInstance().All)
|
||||||
{
|
{
|
||||||
Stigmata stigmata = player.Equipment.AddStigmata(stigmataData.Id);
|
Stigmata stigmata = player.Equipment.AddStigmata(stigmataData.Id);
|
||||||
stigmata.Level = value <= 0 ? (uint)stigmataData.MaxLv : (uint)value;
|
stigmata.Level = value is not null && value <= 0 ? (uint)stigmataData.MaxLv : value is not null ? (uint)value : (uint)stigmataData.MaxLv;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "materials":
|
case "materials":
|
||||||
@@ -92,13 +92,17 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
case "matz":
|
case "matz":
|
||||||
foreach (MaterialDataExcel materialData in MaterialData.GetInstance().All)
|
foreach (MaterialDataExcel materialData in MaterialData.GetInstance().All)
|
||||||
{
|
{
|
||||||
player.Equipment.AddMaterial(materialData.Id, value > 0 || value < -1 ? value : 9999);
|
player.Equipment.AddMaterial(materialData.Id, value is not null && value != 0 ? (int)value : materialData.QuantityLimit);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "material-id":
|
case "material-id":
|
||||||
case "gold":
|
case "gold":
|
||||||
int materialId = args[2] is not null ? int.Parse(args[2]) : 100;
|
int materialId = args.Length >= 3 && args[2] is not null ? int.Parse(args[2]) : 100;
|
||||||
player.Equipment.AddMaterial(materialId, value > 0 || value < -1 ? value : 9999);
|
int? quantityLimit = MaterialData.GetInstance().All.FirstOrDefault(m => m.Id == materialId)?.QuantityLimit;
|
||||||
|
if (quantityLimit is not null)
|
||||||
|
{
|
||||||
|
player.Equipment.AddMaterial(materialId, value is not null && value != 0 ? (int)value : (int)quantityLimit);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "dress":
|
case "dress":
|
||||||
case "outfits":
|
case "outfits":
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Common.Resources.Proto;
|
using Common.Resources.Proto;
|
||||||
using Common;
|
using Common;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace PemukulPaku.GameServer.Commands
|
namespace PemukulPaku.GameServer.Commands
|
||||||
{
|
{
|
||||||
@@ -9,26 +10,26 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
{
|
{
|
||||||
public override void Run(Session session, string[] args)
|
public override void Run(Session session, string[] args)
|
||||||
{
|
{
|
||||||
RecvChatMsgNotify notify = new() { };
|
RecvChatMsgNotify notify = new();
|
||||||
//hardcoding values is fun AND easy!
|
//hardcoding values is fun AND easy!
|
||||||
string msg = "<color=#B00B><size=26>Commands</size></color><size=16><color=#555>\n";
|
StringBuilder msg = new("<color=#B00B><size=26>Commands</size></color><size=16><color=#555>\n");
|
||||||
msg += "command <required> [optional]\n";
|
msg.Append("command <required> [optional]\n");
|
||||||
//msg += "┌\n";
|
//msg.Append("┌\n");
|
||||||
foreach (Command Cmd in CommandFactory.Commands)
|
foreach (Command Cmd in CommandFactory.Commands)
|
||||||
{
|
{
|
||||||
if (Cmd.CmdType == CommandType.All || Cmd.CmdType == CommandType.Player)
|
if (Cmd.CmdType == CommandType.All || Cmd.CmdType == CommandType.Player)
|
||||||
{
|
{
|
||||||
msg += "┝<size=22>" + Cmd.Name + " " + Cmd.Description + "</size>\n";
|
msg.Append("┝<size=22>" + Cmd.Name + " " + Cmd.Description + "</size>\n");
|
||||||
if (Cmd.Examples is not null)
|
if (Cmd.Examples is not null)
|
||||||
{
|
{
|
||||||
foreach (string Example in Cmd.Examples)
|
foreach (string Example in Cmd.Examples)
|
||||||
{
|
{
|
||||||
msg += "│┕" + Example + "\n";
|
msg.Append("│┕" + Example + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg += "</color></size>";
|
msg.Append("</color></size>");
|
||||||
|
|
||||||
//I really want to figure out how to grab from Chatroom.cs instead, but oh well.
|
//I really want to figure out how to grab from Chatroom.cs instead, but oh well.
|
||||||
ChatMsg AiMsg = new()
|
ChatMsg AiMsg = new()
|
||||||
@@ -36,16 +37,16 @@ namespace PemukulPaku.GameServer.Commands
|
|||||||
Uid = 0,
|
Uid = 0,
|
||||||
Nickname = "Ai-chan",
|
Nickname = "Ai-chan",
|
||||||
Time = (uint)Global.GetUnixInSeconds(),
|
Time = (uint)Global.GetUnixInSeconds(),
|
||||||
Msg = msg,
|
Msg = msg.ToString(),
|
||||||
Content = new() { },
|
Content = new(),
|
||||||
Channel = ChatMsg.MsgChannel.World,
|
Channel = ChatMsg.MsgChannel.World,
|
||||||
AvatarId = 3201,
|
AvatarId = 3201,
|
||||||
DressId = 593201,
|
DressId = 593201,
|
||||||
FrameId = 200001,
|
FrameId = 200001,
|
||||||
CustomHeadId = 161080,
|
CustomHeadId = 161080,
|
||||||
CheckResult = new() { NumberCheck = 0, ShieldType = 0, RewriteText = msg }
|
CheckResult = new() { NumberCheck = 0, ShieldType = 0, RewriteText = msg.ToString() }
|
||||||
};
|
};
|
||||||
AiMsg.Content.Items.Add(new() { MsgStr = msg });
|
AiMsg.Content.Items.Add(new() { MsgStr = msg.ToString() });
|
||||||
notify.ChatMsgLists.Add(AiMsg);
|
notify.ChatMsgLists.Add(AiMsg);
|
||||||
session.Send(Packet.FromProto(notify, CmdId.RecvChatMsgNotify));
|
session.Send(Packet.FromProto(notify, CmdId.RecvChatMsgNotify));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user