diff --git a/.github/workflows/dotnet-release.yml b/.github/workflows/dotnet-release.yml
new file mode 100644
index 00000000..00693d88
--- /dev/null
+++ b/.github/workflows/dotnet-release.yml
@@ -0,0 +1,96 @@
+# This workflow will build a .NET project
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
+
+name: .NET Release
+
+on:
+ workflow_dispatch:
+ inputs:
+ name:
+ description: 'Release Name'
+ required: true
+ default: ''
+ body:
+ description: 'Release Body'
+ required: true
+ default: ''
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: write
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+
+ - name: Restore dependencies
+ run: dotnet restore
+
+ - name: Publish win-x64
+ run: dotnet publish Program/Program.csproj -o Release/win-x64 -r win-x64 --self-contained false --framework net8.0 -p:PublishSingleFile=true
+
+ - name: Publish linux-x64
+ run: dotnet publish Program/Program.csproj -o Release/linux-x64 -r linux-x64 --self-contained false --framework net8.0 -p:PublishSingleFile=true
+
+ - name: Publish linux-arm64
+ run: dotnet publish Program/Program.csproj -o Release/linux-arm64 -r linux-arm64 --self-contained false --framework net8.0 -p:PublishSingleFile=true
+
+ - name: Publish win-x64-self-contained
+ run: dotnet publish Program/Program.csproj -o Release/win-x64-self-contained -r win-x64 --self-contained true --framework net8.0 -p:PublishSingleFile=true
+
+ - name: Publish linux-x64-self-contained
+ run: dotnet publish Program/Program.csproj -o Release/linux-x64-self-contained -r linux-x64 --self-contained true --framework net8.0 -p:PublishSingleFile=true
+
+ - name: Publish linux-arm64-self-contained
+ run: dotnet publish Program/Program.csproj -o Release/linux-arm64-self-contained -r linux-arm64 --self-contained true --framework net8.0 -p:PublishSingleFile=true
+
+ - name: Remove PDB File
+ run: |
+ rm -rf Release/win-x64/*.pdb
+ rm -rf Release/linux-x64/*.pdb
+ rm -rf Release/linux-arm64/*.pdb
+ rm -rf Release/win-x64-self-contained/*.pdb
+ rm -rf Release/linux-x64-self-contained/*.pdb
+ rm -rf Release/linux-arm64-self-contained/*.pdb
+
+ - name: Zip File
+ run: |
+ mkdir z
+ cd Release
+ zip -r ../z/win-x64.zip win-x64/
+ zip -r ../z/linux-x64.zip linux-x64/
+ zip -r ../z/linux-arm64.zip linux-arm64/
+ zip -r ../z/win-x64-self-contained.zip win-x64-self-contained/
+ zip -r ../z/linux-x64-self-contained.zip linux-x64-self-contained/
+ zip -r ../z/linux-arm64-self-contained linux-arm64-self-contained/
+ cd ..
+
+ - name: Body
+ run: |
+ echo -e "${{ inputs.body }}" > z/body.txt
+
+ - name: Release
+ uses: softprops/action-gh-release@v2
+ with:
+ body_path: z/body.txt
+ name: ${{ inputs.name }}
+ tag_name: Release-${{ github.sha }}
+ repository: EggLinks/DanhengServer-Public
+ # note you'll typically need to create a personal access token
+ # with permissions to create releases in the other repo
+ token: ${{ secrets.GITHUB_TOKEN }}
+ # upload except pdb file
+ files: |
+ z/win-x64.zip
+ z/linux-x64.zip
+ z/linux-arm64.zip
+ z/win-x64-self-contained.zip
+ z/linux-x64-self-contained.zip
+ z/linux-arm64-self-contained.zip
diff --git a/Command/Command/Cmd/CommandUnlockAll.cs b/Command/Command/Cmd/CommandUnlockAll.cs
index a6cb0b00..a459a098 100644
--- a/Command/Command/Cmd/CommandUnlockAll.cs
+++ b/Command/Command/Cmd/CommandUnlockAll.cs
@@ -39,7 +39,62 @@ public class CommandUnlockAll : ICommand
player.AvatarManager!.GetHero()!.PathId = 8002;
}
- await arg.SendMsg(I18NManager.Translate("Game.Command.UnlockAll.AllMissionsUnlocked"));
+ await arg.SendMsg(I18NManager.Translate("Game.Command.UnlockAll.UnlockedAll", I18NManager.Translate("Word.Mission")));
+ await arg.Target!.Player!.SendPacket(new PacketPlayerKickOutScNotify());
+ arg.Target!.Stop();
+ }
+
+ [CommandMethod("0 tutorial")]
+ public async ValueTask UnlockAllTutorial(CommandArg arg)
+ {
+ if (arg.Target == null)
+ {
+ await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
+ return;
+ }
+
+ var player = arg.Target!.Player!;
+
+ foreach (var data in GameData.TutorialDataData)
+ {
+ player.TutorialData!.Tutorials[data.Key] = TutorialStatus.TutorialFinish;
+ }
+
+ foreach (var data in GameData.TutorialGuideDataData)
+ {
+ player.TutorialGuideData!.Tutorials[data.Key] = TutorialStatus.TutorialFinish;
+ }
+
+ await arg.SendMsg(I18NManager.Translate("Game.Command.UnlockAll.UnlockedAll", I18NManager.Translate("Word.Tutorial")));
+ await arg.Target!.Player!.SendPacket(new PacketPlayerKickOutScNotify());
+ arg.Target!.Stop();
+ }
+
+ [CommandMethod("0 rogue")]
+ public async ValueTask UnlockAllRogue(CommandArg arg)
+ {
+ if (arg.Target == null)
+ {
+ await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
+ return;
+ }
+
+ var player = arg.Target!.Player!;
+ List swarmList = [8013101, 8013102, 8013103, 8013104, 8013105, 8013106, 8013107, 8013108, 8013109, 8013110];
+ List ggList = [8016101, 8016102, 8016103, 8016104, 8016105, 8016106];
+ List duList = [8023401, 8023501, 8023601];
+ List udList = [8026401, 8026402];
+
+ List allList = [.. swarmList, .. ggList, .. duList, .. udList];
+
+ foreach (var id in allList)
+ {
+ // finish mission
+ await player.MissionManager!.AcceptMainMission(id);
+ await player.MissionManager!.FinishMainMission(id);
+ }
+
+ await arg.SendMsg(I18NManager.Translate("Game.Command.UnlockAll.UnlockedAll", I18NManager.Translate("Word.TypesOfRogue")));
await arg.Target!.Player!.SendPacket(new PacketPlayerKickOutScNotify());
arg.Target!.Stop();
}
diff --git a/Common/Data/Config/TaskInfo.cs b/Common/Data/Config/TaskInfo.cs
index 4dcf3793..5bf8ed15 100644
--- a/Common/Data/Config/TaskInfo.cs
+++ b/Common/Data/Config/TaskInfo.cs
@@ -20,7 +20,6 @@ public class TaskInfo
public List OnProjectileHit { get; set; } = [];
public List OnProjectileLifetimeFinish { get; set; } = [];
- public string ModifierName { get; set; } = "";
public LifeTimeInfo LifeTime { get; set; } = new();
[JsonIgnore] public TaskTypeEnum TaskType { get; set; } = TaskTypeEnum.None;
@@ -36,8 +35,6 @@ public class TaskInfo
TaskType = TaskTypeEnum.AddMazeBuff;
else if (Type.Contains("RemoveMazeBuff"))
TaskType = TaskTypeEnum.RemoveMazeBuff;
- else if (Type.Contains("AddAdventureModifier"))
- TaskType = TaskTypeEnum.AddAdventureModifier;
else if (Type.Contains("AdventureModifyTeamPlayerHP"))
TaskType = TaskTypeEnum.AdventureModifyTeamPlayerHP;
else if (Type.Contains("AdventureModifyTeamPlayerSP"))
@@ -52,8 +49,7 @@ public class TaskInfo
TaskType = TaskTypeEnum.SuccessTaskList;
else if (Type.Contains("AdventureTriggerAttack"))
TaskType = TaskTypeEnum.AdventureTriggerAttack;
- else if (Type.Contains("AdventureFireProjectile"))
- TaskType = TaskTypeEnum.AdventureFireProjectile;
+ else if (Type.Contains("AdventureFireProjectile")) TaskType = TaskTypeEnum.AdventureFireProjectile;
}
public int GetID()
diff --git a/Common/Data/Excel/TutorialDataExcel.cs b/Common/Data/Excel/TutorialDataExcel.cs
new file mode 100644
index 00000000..7690c75e
--- /dev/null
+++ b/Common/Data/Excel/TutorialDataExcel.cs
@@ -0,0 +1,18 @@
+namespace EggLink.DanhengServer.Data.Excel;
+
+[ResourceEntity("TutorialData.json")]
+public class TutorialDataExcel : ExcelResource
+{
+ public int TutorialID { get; set; }
+ public int Priority { get; set; }
+
+ public override int GetId()
+ {
+ return TutorialID;
+ }
+
+ public override void Loaded()
+ {
+ GameData.TutorialDataData.Add(TutorialID, this);
+ }
+}
\ No newline at end of file
diff --git a/Common/Data/Excel/TutorialGuideDataExcel.cs b/Common/Data/Excel/TutorialGuideDataExcel.cs
new file mode 100644
index 00000000..91d69450
--- /dev/null
+++ b/Common/Data/Excel/TutorialGuideDataExcel.cs
@@ -0,0 +1,17 @@
+namespace EggLink.DanhengServer.Data.Excel;
+
+[ResourceEntity("TutorialGuideData.json")]
+public class TutorialGuideDataExcel : ExcelResource
+{
+ public int ID { get; set; }
+
+ public override int GetId()
+ {
+ return ID;
+ }
+
+ public override void Loaded()
+ {
+ GameData.TutorialGuideDataData.Add(ID, this);
+ }
+}
\ No newline at end of file
diff --git a/Common/Data/GameData.cs b/Common/Data/GameData.cs
index 4623c55c..5d861d02 100644
--- a/Common/Data/GameData.cs
+++ b/Common/Data/GameData.cs
@@ -306,6 +306,13 @@ public static class GameData
#endregion
+ #region Tutorial
+
+ public static Dictionary TutorialDataData { get; private set; } = [];
+ public static Dictionary TutorialGuideDataData { get; private set; } = [];
+
+ #endregion
+
#region Actions
public static void GetFloorInfo(int planeId, int floorId, out FloorInfo outer)
diff --git a/Common/Enums/Avatar/DamageTypeEnum.cs b/Common/Enums/Avatar/DamageTypeEnum.cs
index c8bd9a2d..0ef2bcf6 100644
--- a/Common/Enums/Avatar/DamageTypeEnum.cs
+++ b/Common/Enums/Avatar/DamageTypeEnum.cs
@@ -8,6 +8,5 @@ public enum DamageTypeEnum
Thunder = 1000114,
Wind = 1000115,
Quantum = 1000116,
- Imaginary = 1000117,
- All = 1000119 // Modified for AddAdventureModifier
+ Imaginary = 1000117
}
\ No newline at end of file
diff --git a/Common/Enums/Avatar/TaskTypeEnum.cs b/Common/Enums/Avatar/TaskTypeEnum.cs
index f1357236..3ead1233 100644
--- a/Common/Enums/Avatar/TaskTypeEnum.cs
+++ b/Common/Enums/Avatar/TaskTypeEnum.cs
@@ -12,6 +12,5 @@ public enum TaskTypeEnum
SuccessTaskList = 7,
AdventureTriggerAttack = 8,
AdventureFireProjectile = 9,
- DestroySummonUnit = 10,
- AddAdventureModifier = 11
+ DestroySummonUnit = 10
}
\ No newline at end of file
diff --git a/Common/Internationalization/Message/LanguageCHS.cs b/Common/Internationalization/Message/LanguageCHS.cs
index 41f4c78e..48dee1b8 100644
--- a/Common/Internationalization/Message/LanguageCHS.cs
+++ b/Common/Internationalization/Message/LanguageCHS.cs
@@ -86,6 +86,7 @@ public class WordTextCHS
public string SummonUnitInfo => "秘技生成文件";
public string RogueTournRoom => "差分宇宙";
public string RogueTournRoomInfo => "差分宇宙房间文件";
+ public string TypesOfRogue => "类型的模拟宇宙";
public string RogueMagicRoom => "不可知域";
public string RogueMagicRoomInfo => "不可知域房间文件";
public string RogueDiceSurface => "骰面效果";
@@ -94,6 +95,7 @@ public class WordTextCHS
public string AdventureModifierInfo => "AdventureModifier文件";
public string DatabaseAccount => "数据库账号";
+ public string Tutorial => "教程";
}
#endregion
@@ -215,10 +217,12 @@ public class UnlockAllTextCHS
{
public string Desc =>
"解锁所有在类别内的对象\n" +
- "使用 /unlockall mission 以完成所有任务,使用后会被踢出,重新登录后可能会被教程卡住,请谨慎使用";
+ "使用 /unlockall mission 以完成所有任务,使用后会被踢出,重新登录后可能会被教程卡住,请谨慎使用\n" +
+ "使用 /unlockall tutorial 以解锁所有教程,使用后会被踢出,用于部分界面卡住无法行动的情况\n" +
+ "使用 /unlockall rogue 以解锁所有类型模拟宇宙,使用后会被踢出,建议与 /unlockall tutorial 搭配使用以获取更好效果";
- public string Usage => "用法:/unlockall mission";
- public string AllMissionsUnlocked => "所有任务已解锁!";
+ public string Usage => "用法:/unlockall [mission/tutorial/rogue]";
+ public string UnlockedAll => "已解锁/完成所有{0}!";
}
///
diff --git a/Common/Internationalization/Message/LanguageCHT.cs b/Common/Internationalization/Message/LanguageCHT.cs
index edc02507..7fa44bdb 100644
--- a/Common/Internationalization/Message/LanguageCHT.cs
+++ b/Common/Internationalization/Message/LanguageCHT.cs
@@ -43,7 +43,7 @@ public class WordTextCHT
public string Equipment => "光錐";
public string Talent => "行跡";
public string Banner => "卡池";
- public string VideoKeys => "游戲CGKey";
+ public string VideoKeys => "遊戲CG密鑰";
public string Activity => "活動";
public string Buff => "祝福";
public string Miracle => "奇物";
@@ -86,6 +86,7 @@ public class WordTextCHT
public string SummonUnitInfo => "秘技生成文件";
public string RogueTournRoom => "差分宇宙";
public string RogueTournRoomInfo => "差分宇宙房間文件";
+ public string TypesOfRogue => "類型的模擬宇宙";
public string RogueMagicRoom => "不可知域";
public string RogueMagicRoomInfo => "不可知域房間文件";
public string RogueDiceSurface => "骰面效果";
@@ -94,6 +95,7 @@ public class WordTextCHT
public string AdventureModifierInfo => "AdventureModifier文件";
public string DatabaseAccount => "數據庫賬號";
+ public string Tutorial => "教程";
}
#endregion
@@ -138,7 +140,7 @@ public class CommandTextCHT
///
public class WebTextCHT
{
- public string Maintain => "服务器正在维修,请稍后尝试。";
+ public string Maintain => "服務器正在維修,請稍後嘗試。";
}
///
@@ -152,7 +154,7 @@ public class ServerInfoTextCHT
public string LoadingItem => "正在加載 {0}…";
public string RegisterItem => "註冊了 {0} 個 {1}。";
public string FailedToLoadItem => "加載 {0} 失敗。";
- public string NewClientSecretKey => "客戶端密鑰不存在,正在產生新的客戶端密鑰。";
+ public string NewClientSecretKey => "客戶端密鑰不存在,正在生成新的客戶端密鑰。";
public string FailedToInitializeItem => "初始化 {0} 失敗。";
public string FailedToReadItem => "讀取 {0} 失敗,文件{1}";
public string GeneratedItem => "已生成 {0}。";
@@ -167,7 +169,7 @@ public class ServerInfoTextCHT
public string SaveDatabase => "已保存數據庫,用時 {0}s";
public string WaitForAllDone => "現在還不可以進入遊戲,請等待所有項目加載完成後再試";
- public string UnhandledException => "未處理的異常:{0}";
+ public string UnhandledException => "發生未經處理的異常:{0}";
}
#endregion
@@ -185,7 +187,7 @@ public class NoticeTextCHT
{
public string PlayerNotFound => "未找到玩家!";
public string InvalidArguments => "無效的參數!";
- public string NoPermission => "你沒有權限這麼做!";
+ public string NoPermission => "你沒有權限這麽做!";
public string CommandNotFound => "未找到命令! 輸入 '/help' 來獲取幫助";
public string TargetOffline => "目標 {0}({1}) 離線了!清除當前目標";
public string TargetFound => "找到目標 {0}({1}),下一次命令將默認對其執行";
@@ -199,7 +201,7 @@ public class NoticeTextCHT
public class HeroTextCHT
{
public string Desc =>
- "切換主角的性別/形態\n當切換性別時,genderId為1代表男性,2代表女性\n當切換形態時,8001代表毀滅命途,8003代表存護命途,8005代表同諧命途。\n注意,切換性別時會清空所有可選命途以及行跡,為不可逆操作!";
+ "切換主角的性別/形態\n當切換性別時,genderId為1代表男性,2代表女性\n當切換形態時,8001代表毀滅命途,8003代表存護命途,8005代表同諧命途。\n註意,切換性別時會清空所有可選命途以及行跡,為不可逆操作!";
public string Usage => "用法:/hero gender [genderId]\n\n用法:/hero type [typeId]";
public string GenderNotSpecified => "性別不存在!";
@@ -215,10 +217,12 @@ public class UnlockAllTextCHT
{
public string Desc =>
"解鎖所有在類別內的對象\n" +
- "使用 /unlockall mission 以完成所有任務,使用後會被踢出,重新登錄後可能會被教程卡住,請謹慎使用";
+ "使用 /unlockall mission 以完成所有任務,使用後會被踢出,重新登錄後可能會被教程卡住,請謹慎使用\n" +
+ "使用 /unlockall tutorial 以解鎖所有教程,使用後會被踢出,用於部分界面卡住無法行動的情況\n" +
+ "使用 /unlockall rogue 以解鎖所有類型模擬宇宙,使用後會被踢出,建議與 /unlockall tutorial 搭配使用以獲取更好效果";
- public string Usage => "用法:/unlockall mission";
- public string AllMissionsUnlocked => "所有任務已解鎖!";
+ public string Usage => "用法:/unlockall [mission/tutorial/rogue]";
+ public string UnlockedAll => "已解鎖/完成所有{0}!";
}
///
@@ -226,7 +230,7 @@ public class UnlockAllTextCHT
///
public class AvatarTextCHT
{
- public string Desc => "設定玩家已有角色的屬性\n設置行跡等級時,設置X級即設置所有行跡節點至X級,若大於此節點允許的最高等級,設置為最高等級\n注意:-1意為所有已擁有角色";
+ public string Desc => "設定玩家已有角色的屬性\n設置行跡等級時,設置X級即設置所有行跡節點至X級,若大於此節點允許的最高等級,設置為最高等級\n註意:-1意為所有已擁有角色";
public string Usage =>
"用法:/avatar talent [角色ID/-1] [行跡等級]\n\n用法:/avatar get [角色ID]\n\n用法:/avatar rank [角色ID/-1] [星魂]\n\n用法:/avatar level [角色ID/-1] [角色等級]";
@@ -271,7 +275,7 @@ public class LineupTextCHT
public string Desc => "管理玩家的隊伍\n秘技點一次性只能獲得兩個";
public string Usage => "用法:/lineup mp [秘技點數量]\n\n用法:/lineup heal";
public string PlayerGainedMp => "玩家已獲得 {0} 秘技點";
- public string HealedAllAvatars => "成功治癒當前隊伍中的所有角色";
+ public string HealedAllAvatars => "成功治愈當前隊伍中的所有角色";
}
///
@@ -283,7 +287,7 @@ public class HelpTextCHT
public string Usage => "用法:/help\n\n用法:/help [命令]";
public string Commands => "命令:";
public string CommandPermission => "所需權限: ";
- public string CommandAlias => "命令彆名:";
+ public string CommandAlias => "命令別名:";
}
///
@@ -303,8 +307,8 @@ public class MissionTextCHT
{
public string Desc =>
"管理玩家的任務\n" +
- "使用 pass 完成當前正在進行的所有任務,此命令易造成嚴重卡頓,請儘量使用 /mission finish 替代\n" +
- "使用 running 獲取正在進行的任務以及可能卡住的任務,使用後可能會出現較長任務列表,請注意甄別\n" +
+ "使用 pass 完成當前正在進行的所有任務,此命令易造成嚴重卡頓,請盡量使用 /mission finish 替代\n" +
+ "使用 running 獲取正在進行的任務以及可能卡住的任務,使用後可能會出現較長任務列表,請註意甄別\n" +
"使用 reaccept 可重新進行指定主任務,請瀏覽 handbook 來獲取主任務ID";
public string Usage =>
@@ -328,7 +332,7 @@ public class MissionTextCHT
///
public class RelicTextCHT
{
- public string Desc => "管理玩家的遺器\n主詞條可選,副詞條可選,但至少存在其中之一\n等級限制:1≤等級≤9999";
+ public string Desc => "管理玩家的遺器\n主詞條可選,副詞條可選,但至少存在其中之一\n等級限製:1≤等級≤9999";
public string Usage =>
"用法:/relic <遺器ID> <主詞條ID> <小詞條ID1:小詞條等級> <小詞條ID2:小詞條等級> <小詞條ID3:小詞條等級> <小詞條ID4:小詞條等級> l<等級> x<數量>";
@@ -376,12 +380,12 @@ public class SceneTextCHT
{
public string Desc =>
"管理玩家場景\n" +
- "提示:此組大多為調試使用,使用命令前,請確保你清楚你在做什麼!\n" +
+ "提示:此組大多為調試使用,使用命令前,請確保你清楚你在做什麽!\n" +
"使用 prop 來設置道具狀態,在Common/Enums/Scene/PropStateEnum.cs獲取狀態列表\n" +
"使用 unlockall 來解鎖場景內所有道具(即將所有能設置為open狀態的道具設置為open狀態),此命令有較大可能會導致遊戲加載卡條約90%,使用 /scene reset 來解決問題\n" +
"使用 change 來進入指定場景,要獲取EntryId,請訪問 Resources/MapEntrance.json\n" +
"使用 reload 來重新加載當前場景,並回到初始位置\n" +
- "使用 reset 來重置指定塲景所有道具狀態,要穫取噹前FloorId,請使用 /scene cur";
+ "使用 reset 來重置指定場景所有道具狀態,要獲取當前FloorId,請使用 /scene cur";
public string Usage =>
"用法:/scene prop [組ID] [道具ID] [狀態]\n\n用法:/scene remove [實體ID]\n\n用法:/scene unlockall\n\n用法:/scene change [entryId]\n\n用法:/scene reload\n\n用法:/scene reset ";
@@ -395,7 +399,7 @@ public class SceneTextCHT
public string SceneChanged => "已進入場景 {0}";
public string SceneReloaded => "場景已重新加載!";
public string SceneReset => "已重置場景 {0} 中所有道具狀態!";
- public string CurrentScene => "噹前塲景Entry Id: {0}, Plane Id: {1}, Floor Id: {2}";
+ public string CurrentScene => "當前場景Entry Id: {0}, Plane Id: {1}, Floor Id: {2}";
}
///
@@ -424,7 +428,7 @@ public class RaidTextCHT
///
public class AccountTextCHT
{
- public string Desc => "創建賬號\n注意:此命令未經測試,請謹慎使用!";
+ public string Desc => "創建賬號\n註意:此命令未經測試,請謹慎使用!";
public string Usage => "用法:/account create <用戶名>";
public string InvalidUid => "無效UID參數!";
public string CreateError => "出現內部錯誤 {0} ";
diff --git a/Common/Internationalization/Message/LanguageEN.cs b/Common/Internationalization/Message/LanguageEN.cs
index 74afaa9a..dafd7207 100644
--- a/Common/Internationalization/Message/LanguageEN.cs
+++ b/Common/Internationalization/Message/LanguageEN.cs
@@ -86,6 +86,7 @@ public class WordTextEN
public string SummonUnitInfo => "Summon Unit File";
public string RogueTournRoom => "Divergent Rogue Room";
public string RogueTournRoomInfo => "Divergent Rogue Room File";
+ public string TypesOfRogue => "types of rogue";
public string RogueMagicRoom => "Unknowable Domain Room";
public string RogueMagicRoomInfo => "Unknowable Domain Room File";
public string RogueDiceSurface => "Dice Surface Effect";
@@ -94,6 +95,7 @@ public class WordTextEN
public string AdventureModifierInfo => "AdventureModifier File";
public string DatabaseAccount => "Database Account";
+ public string Tutorial => "Tutorial";
}
#endregion
@@ -225,10 +227,12 @@ public class UnlockAllTextEN
{
public string Desc =>
"Unlock the objects in given category\n" +
- "Use '/unlockall mission' to finish all missions, and the target player will be kicked, after re-login, the player may be stuck in tutorial, please use with caution";
+ "Use '/unlockall mission' to finish all missions, and the target player will be kicked, after re-login, the player may be stuck in tutorial, please use with caution" +
+ "Use '/unlockall tutorial' to unlock all tutorials, and the target player will be kicked, used for being stuck in some pages\n" +
+ "Use '/unlockall rogue' to unlock all types of rogue, and the target player will be kicked, used with '/unlockall tutorial' to get better performance";
- public string Usage => "Usage: /unlockall mission";
- public string AllMissionsUnlocked => "All missions have been unlocked!";
+ public string Usage => "Usage:/unlockall [mission/tutorial/rogue]";
+ public string UnlockedAll => "Unlocked/Finished All {0}!";
}
///
diff --git a/GameServer/Game/Battle/BattleInstance.cs b/GameServer/Game/Battle/BattleInstance.cs
index eadd5ed0..ffe7e9c3 100644
--- a/GameServer/Game/Battle/BattleInstance.cs
+++ b/GameServer/Game/Battle/BattleInstance.cs
@@ -232,13 +232,16 @@ public class BattleInstance(PlayerInstance player, LineupInfo lineup, List
+ {
+ foreach (var monster in EntityMonsters) await monster.ApplyBuff(this);
- foreach (var avatar in AvatarInfo)
- if (avatars.Keys.FirstOrDefault(x =>
- x.GetSpecialAvatarId() == avatar.AvatarInfo.GetSpecialAvatarId()) !=
- null) // if avatar is in lineup
- avatar.ApplyBuff(this);
+ foreach (var avatar in AvatarInfo)
+ if (avatars.Keys.FirstOrDefault(x =>
+ x.GetSpecialAvatarId() == avatar.AvatarInfo.GetSpecialAvatarId()) !=
+ null) // if avatar is in lineup
+ await avatar.ApplyBuff(this);
+ }).Wait();
foreach (var eventInstance in BattleEvents.Values) proto.BattleEvent.Add(eventInstance.ToProto());
@@ -252,22 +255,19 @@ public class BattleInstance(PlayerInstance player, LineupInfo lineup, List x.BuffID == buff.BuffID);
- if (buffs.Count > 1) continue;
+ if (buffs.Count < 2) continue;
+ var count = 0;
foreach (var mazeBuff in buffs)
{
- mazeBuff.WaveFlag = 3;
+ mazeBuff.WaveFlag = (int)Math.Pow(2, count);
+ count++;
}
}
- foreach (var buff in Buffs) buff.WaveFlag ??= -1;
-
foreach (var buff in Buffs.Clone())
if (buff.BuffID == 122003) // Fei Xiao Maze Buff
Buffs.Add(new MazeBuff(122002, buff.BuffLevel, 0)
diff --git a/GameServer/Game/Battle/BattleManager.cs b/GameServer/Game/Battle/BattleManager.cs
index 77b348a7..ba54d12d 100644
--- a/GameServer/Game/Battle/BattleManager.cs
+++ b/GameServer/Game/Battle/BattleManager.cs
@@ -1,7 +1,6 @@
using EggLink.DanhengServer.Data;
using EggLink.DanhengServer.Data.Excel;
using EggLink.DanhengServer.Database.Inventory;
-using EggLink.DanhengServer.Enums.Avatar;
using EggLink.DanhengServer.GameServer.Game.Battle.Skill;
using EggLink.DanhengServer.GameServer.Game.Player;
using EggLink.DanhengServer.GameServer.Game.RogueMagic;
@@ -89,8 +88,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
Player.InventoryManager!.HandlePlaneEvent(prop.PropInfo.EventID);
}
- if (Player.RogueManager!.GetRogueInstance() != null)
- await Player.RogueManager!.GetRogueInstance()!.OnPropDestruct(prop);
+ Player.RogueManager!.GetRogueInstance()?.OnPropDestruct(prop);
}
if (targetList.Count > 0)
@@ -153,21 +151,15 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
.OfType());
MazeBuff? mazeBuff = null;
- if (castAvatar != null && skill != null)
+ if (castAvatar != null)
{
var index = battleInstance.Lineup.BaseAvatars!.FindIndex(x =>
x.BaseAvatarId == castAvatar.AvatarInfo.AvatarId);
-
GameData.AvatarConfigData.TryGetValue(castAvatar.AvatarInfo.GetAvatarId(), out var avatarExcel);
if (avatarExcel != null)
{
- var buffType = avatarExcel.DamageType;
- if (skill.AdventureModifiers.Contains("ADV_StageAbility_Maze_IgnoreWeakness_MazeSkillMark"))
- buffType = DamageTypeEnum.All;
-
- mazeBuff = new MazeBuff((int)buffType, 1, index);
- // TODO: Confirm SkillIndex value
- mazeBuff.DynamicValues.Add("SkillIndex", 0);
+ mazeBuff = new MazeBuff((int)avatarExcel.DamageType, 1, index);
+ mazeBuff.DynamicValues.Add("SkillIndex", skill.IsMazeSkill ? 2 : 1);
}
}
else
@@ -201,7 +193,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
await Player.SendPacket(new PacketSceneCastSkillScRsp(req.CastEntityId, battleInstance,
hitMonsterInstance));
- if (Player.SceneInstance != null) await Player.SceneInstance!.ClearSummonUnit();
+ Player.SceneInstance?.ClearSummonUnit();
}
else
{
@@ -250,7 +242,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
InvokeOnPlayerEnterBattle(player, battleInstance);
await Player.SendPacket(new PacketSceneEnterStageScRsp(battleInstance));
- if (Player.SceneInstance != null) await Player.SceneInstance!.ClearSummonUnit();
+ Player.SceneInstance?.ClearSummonUnit();
}
public async ValueTask StartCocoonStage(int cocoonId, int wave, int worldLevel)
@@ -309,7 +301,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
InvokeOnPlayerEnterBattle(player, battleInstance);
await Player.SendPacket(new PacketStartCocoonStageScRsp(battleInstance, cocoonId, wave));
- if (Player.SceneInstance != null) await Player.SceneInstance!.ClearSummonUnit();
+ Player.SceneInstance?.ClearSummonUnit();
}
public (Retcode, BattleInstance?) StartBattleCollege(int collegeId)
diff --git a/GameServer/Game/Battle/Skill/MazeSkill.cs b/GameServer/Game/Battle/Skill/MazeSkill.cs
index 5b875aa9..0a3d8916 100644
--- a/GameServer/Game/Battle/Skill/MazeSkill.cs
+++ b/GameServer/Game/Battle/Skill/MazeSkill.cs
@@ -28,7 +28,6 @@ public class MazeSkill
}
public List Actions { get; } = [];
- public HashSet AdventureModifiers { get; } = [];
public bool TriggerBattle { get; private set; } = true;
public bool IsMazeSkill { get; } = true;
public AvatarConfigExcel? Excel { get; private set; }
@@ -45,9 +44,6 @@ public class MazeSkill
case TaskTypeEnum.RemoveMazeBuff:
Actions.Add(new MazeRemoveMazeBuff(task.ID));
break;
- case TaskTypeEnum.AddAdventureModifier:
- AdventureModifiers.Add(task.ModifierName);
- break;
case TaskTypeEnum.AdventureModifyTeamPlayerHP:
break;
case TaskTypeEnum.AdventureModifyTeamPlayerSP:
diff --git a/GameServer/Game/Mission/MissionManager.cs b/GameServer/Game/Mission/MissionManager.cs
index cc3ce203..d369bf69 100644
--- a/GameServer/Game/Mission/MissionManager.cs
+++ b/GameServer/Game/Mission/MissionManager.cs
@@ -86,6 +86,9 @@ public class MissionManager : BasePlayerManager
x.MainMissionLink == missionId))
await Player.MessageManager!.AddMessageSection(sectionConfigExcel.ID);
+ foreach (var info in mission.MissionInfo!.SubMissionList.Where(x => x.FinishType is MissionFinishTypeEnum.MessagePerformSectionFinish or MissionFinishTypeEnum.MessageSectionFinish))
+ await Player.MessageManager!.AddMessageSection(info.ParamInt1);
+
return list;
}
diff --git a/GameServer/Game/Scene/Entity/EntityMonster.cs b/GameServer/Game/Scene/Entity/EntityMonster.cs
index da5af110..149135f3 100644
--- a/GameServer/Game/Scene/Entity/EntityMonster.cs
+++ b/GameServer/Game/Scene/Entity/EntityMonster.cs
@@ -42,21 +42,11 @@ public class EntityMonster(
{
var oldBuff = BuffList.Find(x => x.BuffId == buff.BuffId);
if (oldBuff != null) BuffList.Remove(oldBuff);
-
BuffList.Add(buff);
- await Scene.Player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [buff], []));
+ await Scene.Player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, buff));
}
- public async ValueTask RemoveBuff(int buffId)
- {
- var buff = BuffList.Find(x => x.BuffId == buffId);
- if (buff == null) return;
-
- BuffList.Remove(buff);
- await Scene.Player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [], [buff]));
- }
-
- public void ApplyBuff(BattleInstance instance)
+ public async ValueTask ApplyBuff(BattleInstance instance)
{
if (TempBuff != null)
{
@@ -72,6 +62,8 @@ public class EntityMonster(
instance.Buffs.Add(new MazeBuff(buff));
}
+ await Scene.Player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, BuffList));
+
BuffList.Clear();
}
@@ -108,6 +100,15 @@ public class EntityMonster(
return proto;
}
+ public async ValueTask RemoveBuff(int buffId)
+ {
+ var buff = BuffList.Find(x => x.BuffId == buffId);
+ if (buff == null) return;
+
+ BuffList.Remove(buff);
+ await Scene.Player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [buff]));
+ }
+
public int GetStageId()
{
if (CustomStageID > 0) return CustomStageID;
diff --git a/GameServer/Game/Scene/Entity/EntityNpc.cs b/GameServer/Game/Scene/Entity/EntityNpc.cs
index 17058c74..6c19c81b 100644
--- a/GameServer/Game/Scene/Entity/EntityNpc.cs
+++ b/GameServer/Game/Scene/Entity/EntityNpc.cs
@@ -20,7 +20,10 @@ public class EntityNpc(SceneInstance scene, GroupInfo group, NpcInfo npcInfo) :
await System.Threading.Tasks.Task.CompletedTask;
}
- public void ApplyBuff(BattleInstance instance) { }
+ public async ValueTask ApplyBuff(BattleInstance instance)
+ {
+ await System.Threading.Tasks.Task.CompletedTask;
+ }
public virtual SceneEntityInfo ToProto()
{
diff --git a/GameServer/Game/Scene/Entity/EntityProp.cs b/GameServer/Game/Scene/Entity/EntityProp.cs
index 5a51b920..fb946ab4 100644
--- a/GameServer/Game/Scene/Entity/EntityProp.cs
+++ b/GameServer/Game/Scene/Entity/EntityProp.cs
@@ -26,7 +26,10 @@ public class EntityProp(SceneInstance scene, MazePropExcel excel, GroupInfo grou
await System.Threading.Tasks.Task.CompletedTask;
}
- public void ApplyBuff(BattleInstance instance) { }
+ public async ValueTask ApplyBuff(BattleInstance instance)
+ {
+ await System.Threading.Tasks.Task.CompletedTask;
+ }
public virtual SceneEntityInfo ToProto()
{
diff --git a/GameServer/Game/Scene/Entity/EntitySummonUnit.cs b/GameServer/Game/Scene/Entity/EntitySummonUnit.cs
index b874fe8d..8491c9db 100644
--- a/GameServer/Game/Scene/Entity/EntitySummonUnit.cs
+++ b/GameServer/Game/Scene/Entity/EntitySummonUnit.cs
@@ -24,7 +24,10 @@ public class EntitySummonUnit : IGameEntity
await ValueTask.CompletedTask;
}
- public void ApplyBuff(BattleInstance instance) { }
+ public async ValueTask ApplyBuff(BattleInstance instance)
+ {
+ await ValueTask.CompletedTask;
+ }
public SceneEntityInfo ToProto()
{
diff --git a/GameServer/Game/Scene/Entity/IGameEntity.cs b/GameServer/Game/Scene/Entity/IGameEntity.cs
index 75afe6dd..f2b295cf 100644
--- a/GameServer/Game/Scene/Entity/IGameEntity.cs
+++ b/GameServer/Game/Scene/Entity/IGameEntity.cs
@@ -9,7 +9,8 @@ public interface IGameEntity
public int GroupID { get; set; }
public ValueTask AddBuff(SceneBuff buff);
- public void ApplyBuff(BattleInstance instance);
+ public ValueTask ApplyBuff(BattleInstance instance);
+
public SceneEntityInfo ToProto();
}
\ No newline at end of file
diff --git a/GameServer/Game/Scene/SceneInstance.cs b/GameServer/Game/Scene/SceneInstance.cs
index 073580f1..f097ca2e 100644
--- a/GameServer/Game/Scene/SceneInstance.cs
+++ b/GameServer/Game/Scene/SceneInstance.cs
@@ -502,17 +502,31 @@ public class AvatarSceneInfo(AvatarInfo avatarInfo, AvatarType avatarType, Playe
}
else
{
- // Update old buff's duration
oldBuff.CreatedTime = Extensions.GetUnixMs();
oldBuff.Duration = buff.Duration;
- await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [buff], []));
+ await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, oldBuff));
return;
}
}
BuffList.Add(buff);
- await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [buff], []));
+ await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, buff));
+ }
+
+ public async ValueTask ApplyBuff(BattleInstance instance)
+ {
+ if (BuffList.Count == 0) return;
+ foreach (var buff in BuffList.Where(buff => !buff.IsExpired())) instance.Buffs.Add(new MazeBuff(buff));
+
+ await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, BuffList));
+
+ BuffList.Clear();
+ }
+
+ public SceneEntityInfo ToProto()
+ {
+ return AvatarInfo.ToSceneEntityInfo(AvatarType);
}
public async ValueTask RemoveBuff(int buffId)
@@ -521,16 +535,6 @@ public class AvatarSceneInfo(AvatarInfo avatarInfo, AvatarType avatarType, Playe
if (buff == null) return;
BuffList.Remove(buff);
- await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [], [buff]));
+ await player.SendPacket(new PacketSyncEntityBuffChangeListScNotify(this, [buff]));
}
-
- public void ApplyBuff(BattleInstance instance)
- {
- if (BuffList.Count == 0) return;
-
- foreach (var buff in BuffList.Where(buff => !buff.IsExpired())) instance.Buffs.Add(new MazeBuff(buff));
- BuffList.Clear();
- }
-
- public SceneEntityInfo ToProto() => AvatarInfo.ToSceneEntityInfo(AvatarType);
}
\ No newline at end of file
diff --git a/GameServer/Server/Packet/Recv/HeartDial/HandlerSubmitEmotionItemCsReq.cs b/GameServer/Server/Packet/Recv/HeartDial/HandlerSubmitEmotionItemCsReq.cs
index a666b0a5..78e178c5 100644
--- a/GameServer/Server/Packet/Recv/HeartDial/HandlerSubmitEmotionItemCsReq.cs
+++ b/GameServer/Server/Packet/Recv/HeartDial/HandlerSubmitEmotionItemCsReq.cs
@@ -17,7 +17,7 @@ public class HandlerSubmitEmotionItemCsReq : Handler
if (scriptData != null)
{
var info = connection.Player!.HeartDialData!.ChangeScriptEmotion((int)req.ScriptId,
- scriptData.MissingEmoList[0], HeartDialStepTypeEnum.Normal);
+ scriptData.DefaultEmoType, HeartDialStepTypeEnum.UnLock);
await connection.Player!.SendPacket(
new PacketHeartDialScriptChangeScNotify(HeartDialUnlockStatus.UnlockAll, info));
await connection.Player!.MissionManager!.HandleFinishType(MissionFinishTypeEnum.HeartDialScriptListStep);
diff --git a/GameServer/Server/Packet/Send/Scene/PacketSyncEntityBuffChangeListScNotify.cs b/GameServer/Server/Packet/Send/Scene/PacketSyncEntityBuffChangeListScNotify.cs
index eaa18434..50785ebf 100644
--- a/GameServer/Server/Packet/Send/Scene/PacketSyncEntityBuffChangeListScNotify.cs
+++ b/GameServer/Server/Packet/Send/Scene/PacketSyncEntityBuffChangeListScNotify.cs
@@ -7,34 +7,33 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
public class PacketSyncEntityBuffChangeListScNotify : BasePacket
{
- public PacketSyncEntityBuffChangeListScNotify(
- IGameEntity entity, List addBuffs, List removeBuffs) : base(
+ public PacketSyncEntityBuffChangeListScNotify(IGameEntity entity, SceneBuff buff) : base(
CmdIds.SyncEntityBuffChangeListScNotify)
{
var proto = new SyncEntityBuffChangeListScNotify();
- if (addBuffs!= null)
+ var change = new EntityBuffChangeInfo
{
- foreach (var buff in addBuffs)
- {
- var add = new EntityBuffChangeInfo
- {
- EntityId = (uint)entity.EntityID,
- BuffChangeInfo = buff.ToProto()
- };
- proto.EntityBuffChangeList.Add(add);
- }
- }
- if (removeBuffs!= null)
+ EntityId = (uint)entity.EntityID,
+ BuffChangeInfo = buff.ToProto()
+ };
+ proto.EntityBuffChangeList.Add(change);
+
+ SetData(proto);
+ }
+
+ public PacketSyncEntityBuffChangeListScNotify(IGameEntity entity, List buffs) : base(
+ CmdIds.SyncEntityBuffChangeListScNotify)
+ {
+ var proto = new SyncEntityBuffChangeListScNotify();
+
+ foreach (var buff in buffs)
{
- foreach (var buff in removeBuffs)
+ var change = new EntityBuffChangeInfo
{
- var remove = new EntityBuffChangeInfo
- {
- EntityId = (uint)entity.EntityID,
- RemoveBuffId = (uint)buff.BuffId
- };
- proto.EntityBuffChangeList.Add(remove);
- }
+ EntityId = (uint)entity.EntityID,
+ RemoveBuffId = (uint)buff.BuffId
+ };
+ proto.EntityBuffChangeList.Add(change);
}
SetData(proto);
diff --git a/Proto/EnterRogueEndlessActivityStageScRsp.cs b/Proto/EnterRogueEndlessActivityStageScRsp.cs
index c74a253e..83e5ba28 100644
--- a/Proto/EnterRogueEndlessActivityStageScRsp.cs
+++ b/Proto/EnterRogueEndlessActivityStageScRsp.cs
@@ -24,15 +24,15 @@ namespace EggLink.DanhengServer.Proto {
static EnterRogueEndlessActivityStageScRspReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "CilFbnRlclJvZ3VlRW5kbGVzc0FjdGl2aXR5U3RhZ2VTY1JzcC5wcm90bxoV",
- "U2NlbmVCYXR0bGVJbmZvLnByb3RvGhtSb2d1ZUVuZGxlc3NMYXllckluZm8u",
+ "CilFbnRlclJvZ3VlRW5kbGVzc0FjdGl2aXR5U3RhZ2VTY1JzcC5wcm90bxob",
+ "Um9ndWVFbmRsZXNzTGF5ZXJJbmZvLnByb3RvGhVTY2VuZUJhdHRsZUluZm8u",
"cHJvdG8iigEKI0VudGVyUm9ndWVFbmRsZXNzQWN0aXZpdHlTdGFnZVNjUnNw",
"EisKC0tGSU1MSEhQTUxJGA4gASgLMhYuUm9ndWVFbmRsZXNzTGF5ZXJJbmZv",
"EiUKC2JhdHRsZV9pbmZvGAIgASgLMhAuU2NlbmVCYXR0bGVJbmZvEg8KB3Jl",
"dGNvZGUYDCABKA1CHqoCG0VnZ0xpbmsuRGFuaGVuZ1NlcnZlci5Qcm90b2IG",
"cHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
- new pbr::FileDescriptor[] { global::EggLink.DanhengServer.Proto.SceneBattleInfoReflection.Descriptor, global::EggLink.DanhengServer.Proto.RogueEndlessLayerInfoReflection.Descriptor, },
+ new pbr::FileDescriptor[] { global::EggLink.DanhengServer.Proto.RogueEndlessLayerInfoReflection.Descriptor, global::EggLink.DanhengServer.Proto.SceneBattleInfoReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.EnterRogueEndlessActivityStageScRsp), global::EggLink.DanhengServer.Proto.EnterRogueEndlessActivityStageScRsp.Parser, new[]{ "KFIMLHHPMLI", "BattleInfo", "Retcode" }, null, null, null, null)
}));
diff --git a/Proto/GetChallengeGroupStatisticsScRsp.cs b/Proto/GetChallengeGroupStatisticsScRsp.cs
index 3978f439..8727bb52 100644
--- a/Proto/GetChallengeGroupStatisticsScRsp.cs
+++ b/Proto/GetChallengeGroupStatisticsScRsp.cs
@@ -24,8 +24,8 @@ namespace EggLink.DanhengServer.Proto {
static GetChallengeGroupStatisticsScRspReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "CiZHZXRDaGFsbGVuZ2VHcm91cFN0YXRpc3RpY3NTY1JzcC5wcm90bxoeQ2hh",
- "bGxlbmdlU3RvcnlTdGF0aXN0aWNzLnByb3RvGhlDaGFsbGVuZ2VTdGF0aXN0",
+ "CiZHZXRDaGFsbGVuZ2VHcm91cFN0YXRpc3RpY3NTY1JzcC5wcm90bxoZQ2hh",
+ "bGxlbmdlU3RhdGlzdGljcy5wcm90bxoeQ2hhbGxlbmdlU3RvcnlTdGF0aXN0",
"aWNzLnByb3RvGh1DaGFsbGVuZ2VCb3NzU3RhdGlzdGljcy5wcm90byLvAQog",
"R2V0Q2hhbGxlbmdlR3JvdXBTdGF0aXN0aWNzU2NSc3ASEAoIZ3JvdXBfaWQY",
"DyABKA0SDwoHcmV0Y29kZRgHIAEoDRIxChFjaGFsbGVuZ2VfZGVmYXVsdBgC",
@@ -35,7 +35,7 @@ namespace EggLink.DanhengServer.Proto {
"CwoJY2hhbGxlbmdlQh6qAhtFZ2dMaW5rLkRhbmhlbmdTZXJ2ZXIuUHJvdG9i",
"BnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
- new pbr::FileDescriptor[] { global::EggLink.DanhengServer.Proto.ChallengeStoryStatisticsReflection.Descriptor, global::EggLink.DanhengServer.Proto.ChallengeStatisticsReflection.Descriptor, global::EggLink.DanhengServer.Proto.ChallengeBossStatisticsReflection.Descriptor, },
+ new pbr::FileDescriptor[] { global::EggLink.DanhengServer.Proto.ChallengeStatisticsReflection.Descriptor, global::EggLink.DanhengServer.Proto.ChallengeStoryStatisticsReflection.Descriptor, global::EggLink.DanhengServer.Proto.ChallengeBossStatisticsReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.GetChallengeGroupStatisticsScRsp), global::EggLink.DanhengServer.Proto.GetChallengeGroupStatisticsScRsp.Parser, new[]{ "GroupId", "Retcode", "ChallengeDefault", "ChallengeStory", "ChallengeBoss" }, new[]{ "Challenge" }, null, null, null)
}));
diff --git a/README.md b/README.md
index 0d88557d..12246b2d 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,7 @@
-# Danheng Server-Beta
+# Danheng Server
**__This project is under development! Some game technique might not correctly!__**
-
@@ -12,18 +11,7 @@
-
+[EN](README.md) | [簡中](docs/README_zh-CN.md) | [繁中](docs/README_zh-CN.md) | [JP](docs/README_ja-JP.md)
## 💡 Function
@@ -36,7 +24,7 @@
- [√] **Quests** - There may be some bugs in some missions, the main story before Penacony is basically playable, and most of the story after Penacony has bugs
- [√] **Friends**
- [√] **Forgotten Hall & Pure Fiction & Apocalyptic Shadow**
-- [√] **Simulated Universe & Gold and Gears & Divergent Universe**
+- [√] **Simulated Universe & Gold and Gears**
- [√] **Achievements** - Most achievements can be completed.
- [ ] **More** - Coming soon
@@ -47,8 +35,8 @@ Some functions for the game might not support at the first time when new "Anime
### Quick Start
-1. Download the executable file from [Action](https://github.com/StopWuyu/DanhengServer-Beta/actions)
-2. Open the downloaded `DanhengServer-Beta.zip` and extract it to any folder __preferably an English path__
+1. Download the executable file from [Action](https://github.com/EggLinks/DanhengServer/actions)
+2. Open the downloaded `DanhengServer.zip` and extract it to any folder __*preferably an English path__
(Optional) Download the `certificate.p12` from the WebServer folder of the source code to enable HTTPS mode, ensuring a more secure traffic
3. Run GameServer.exe
4. Run proxy, start the game, and enjoy!
@@ -57,7 +45,7 @@ Some functions for the game might not support at the first time when new "Anime
DanhengServer is built using .NET Framework
-**Requirement:**
+**Requirement: **
- [.NET](https://dotnet.microsoft.com/)
- [Git](https://git-scm.com/downloads)
@@ -65,8 +53,8 @@ DanhengServer is built using .NET Framework
##### Windows
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/EggLinks/DanhengServer.git
+cd DanhengServer
dotnet build # compile
```
##### Linux (Ubuntu 20.04)
@@ -82,8 +70,8 @@ sudo apt-get update && \
- Compile and run environment
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/EggLinks/DanhengServer.git
+cd DanhengServer
.\dotnet build # compile
./Gameserver
```
@@ -95,7 +83,7 @@ cd DanhengServer-Beta
## ❕️ Troubleshooting
-For solutions to common problems or assistance, please join our Discord server at [Discord](https://discord.gg/xRtZsmHBVj)
+For solutions to common problems or assistance, please join our Discord server at [https://discord.gg/xRtZsmHBVj](https://discord.gg/xRtZsmHBVj)
## 🙌 Acknowledgements
diff --git a/docs/README_ja-JP.md b/docs/README_ja-JP.md
index 03391b8e..2e83cfbf 100644
--- a/docs/README_ja-JP.md
+++ b/docs/README_ja-JP.md
@@ -1,4 +1,4 @@
-# Danheng Server-Beta
+# Danheng Server
**__このプロジェクトは開発中です!__**
@@ -11,18 +11,7 @@
-
+[EN](../README.md) | [簡中](README_zh-CN.md) | [繁中](README_zh-CN.md) | [JP](README_ja-JP.md)
## 💡機能
@@ -34,8 +23,8 @@
- [√] **基本的な役割育成** - ちょっとバグがありますが、影響はあまりありません
- [√] **タスク#タスク#** - 一部のタスクにはエラーがある可能性があります。ベロブルグの主要なタスクはすべて完了しています。男性主人公と女性主人公にはまだテストされていません
- [-] **交友機能**
-- [-] **忘却の庭 & 虚構叙事 &終末の幻影**
-- [-] **模擬宇宙 & 黄金機械 & 差分宇宙**
+- [-] **忘却の庭 & 虚構叙事**
+- [-] **模擬宇宙**
- [ ] **詳細** - Coming soon...
@@ -45,8 +34,8 @@
### クイックスタート
-1. [Action](https://github.com/StopWuyu/DanhengServer-Beta/actions) で実行可能ファイルをダウンロードする
-2. ダウンロードが完了した` DanhengServer-Beta.zip `を開いて任意のフォルダに解凍します __*英文パスが望ましい*__
+1. [Action](https://github.com/StopWuyu/DanhengServer/actions) で実行可能ファイルをダウンロードする
+2. ダウンロードが完了した` DanhengServer.zip `を開いて任意のフォルダに解凍します __*英文パスが望ましい*__
> (オプション) ソースコードのWebServerフォルダに` certificate.p 12 `をダウンロードすることで、HTTPSモードで起動して転送をより安全にすることができます: )
@@ -65,7 +54,7 @@ Danhengserver Dotnetを使用した構築
##### Windows
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
+git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer.git
cd DanhengServer
.\dotnet build # コンパイル
```
@@ -85,8 +74,8 @@ sudo apt-get update && \
- 環境をコンパイルして実行する
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer.git
+cd DanhengServer
.\dotnet build # コンパイル
./Gameserver
```
diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md
index 34e3c855..e8fa38ff 100644
--- a/docs/README_zh-CN.md
+++ b/docs/README_zh-CN.md
@@ -1,4 +1,4 @@
-# Danheng Server-Beta
+# Danheng Server
**__此项目正在开发中!__**
@@ -11,18 +11,7 @@
-
+[EN](../README.md) | [簡中](README_zh-CN.md) | [繁中](README_zh-CN.md) | [JP](README_ja-JP.md)
## 💡功能
@@ -33,9 +22,9 @@
- [√] **场景** - 行走模拟器、交互、正确加载实体
- [√] **基本的角色培养** - 一些小bug,影响体验不大
- [√] **任务** - 某些任务中可能存在一些错误,匹诺康尼前的主线剧情基本能正常游玩,匹诺康尼后大部分剧情存在大量bug
-- [√] **好友**
+- [√] **朋友**
- [√] **忘却之庭 & 虚构叙事 & 末日幻影**
-- [√] **模拟宇宙 & 黄金机械 & 差分宇宙 & 不可知域** -不可知域有着大量bug等待修复
+- [√] **模拟宇宙 & 黄金机械**
- [√] **成就** - 大多数成就均可完成
- [ ] **更多** - Coming soon...
@@ -46,8 +35,8 @@
### 快速启动
-1. 在 [Action](https://github.com/StopWuyu/DanhengServer-Beta/actions) 下载可执行文件
-2. 打开下载完成的 `DanhengServer-Beta.zip` 解压至任意文件夹 __*最好是英文路径*__
+1. 在 [Action](https://github.com/StopWuyu/DanhengServer/actions) 下载可执行文件
+2. 打开下载完成的 `DanhengServer.zip` 解压至任意文件夹 __*最好是英文路径*__
> (可选) 在源代码的WebServer文件夹中下载 `certificate.p12` 使得以HTTPS模式启动 让你的传输更安全: )
@@ -66,8 +55,8 @@ DanhengServer 使用 .NET Framework 构建
##### Windows
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer.git
+cd DanhengServer
.\dotnet build # 编译
```
##### Linux (Ubuntu 20.04)
@@ -84,8 +73,8 @@ sudo apt-get update && \
- 编译并运行环境
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer.git
+cd DanhengServer
.\dotnet build # 编译
./Gameserver
```
diff --git a/docs/README_zh-TW.md b/docs/README_zh-TW.md
index 356601bb..d604b31e 100644
--- a/docs/README_zh-TW.md
+++ b/docs/README_zh-TW.md
@@ -1,4 +1,4 @@
-# Danheng Server-Beta
+# Danheng S# Danheng Server
**__此專案目前尚在開發中!__**
@@ -11,18 +11,7 @@
-
+[EN](../README.md) | [簡中](README_zh-CN.md) | [繁中](README_zh-CN.md) | [JP](README_ja-JP.md)
## 💡功能
@@ -34,8 +23,9 @@
- [√] **基本的角色培養** - 一些小bug,影響體驗不大
- [√] **任務** - 某些任務中可能存在一些錯誤,貝洛伯格主線任務已全數完成,剩餘內容正在製作中或是尚未測試,適用於星與穹
- [√] **好友**
-- [√] **忘卻之庭 & 虛構敘事 & 末日幻影**
-- [√] **類比宇宙&黃金機械&差分宇宙**
+- [√] **忘卻之庭 & 虛構敘事**
+- [√] **模擬宇宙**
+
- [ ] **更多** - Coming soon...
當新版本之「某動漫遊戲」發佈時,某些功能將不會在第一時間支援,請持續關注我們的提交內容。自從2.3版本起,我們建立了適用於Beta版本的私人分支,將在準備完成後第一時間合併至主倉庫。
@@ -44,8 +34,8 @@
### 快速啟動
-1. 在 [Action](https://github.com/StopWuyu/DanhengServer-Beta/actions) 下載可執行文件
-2. 打開下載完成的 `DanhengServer-Beta.zip` 解解壓至任意資料夹 __*最好是英文路徑*__
+1. 在 [Action](https://github.com/StopWuyu/DanhengServer/actions) 下載可執行文件
+2. 打開下載完成的 `DanhengServer.zip` 解解壓至任意資料夹 __*最好是英文路徑*__
> (可選) 在原始碼的WebServer資料夾中下載 `certificate.p12` 使其以HTTPS模式啟動 讓你的傳輸更加安全: )
@@ -64,8 +54,8 @@ DanhengServer 使用 .NET Framework 構建
##### Windows
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/EggLinks/DanhengServer.git
+cd DanhengServer
.\dotnet build # 編譯
```
##### Linux (Ubuntu 20.04)
@@ -82,8 +72,8 @@ sudo apt-get update && \
- 編譯並運行環境
```shell
-git clone --recurse-submodules https://github.com/StopWuyu/DanhengServer-Beta.git
-cd DanhengServer-Beta
+git clone --recurse-submodules https://github.com/EggLinks/DanhengServer.git
+cd DanhengServer
.\dotnet build # 編譯
./Gameserver
```