From 46b8d8a240b29251b5fb3615fdd89dab69d5c579 Mon Sep 17 00:00:00 2001 From: StopWuyu Date: Sat, 16 Nov 2024 11:39:08 +0800 Subject: [PATCH] sync: main repo 33a31be --- .github/workflows/dotnet-release.yml | 96 +++++++++++++++++++ Command/Command/Cmd/CommandUnlockAll.cs | 57 ++++++++++- Common/Data/Config/TaskInfo.cs | 6 +- Common/Data/Excel/TutorialDataExcel.cs | 18 ++++ Common/Data/Excel/TutorialGuideDataExcel.cs | 17 ++++ Common/Data/GameData.cs | 7 ++ Common/Enums/Avatar/DamageTypeEnum.cs | 3 +- Common/Enums/Avatar/TaskTypeEnum.cs | 3 +- .../Message/LanguageCHS.cs | 10 +- .../Message/LanguageCHT.cs | 42 ++++---- .../Message/LanguageEN.cs | 10 +- GameServer/Game/Battle/BattleInstance.cs | 26 ++--- GameServer/Game/Battle/BattleManager.cs | 22 ++--- GameServer/Game/Battle/Skill/MazeSkill.cs | 4 - GameServer/Game/Mission/MissionManager.cs | 3 + GameServer/Game/Scene/Entity/EntityMonster.cs | 25 ++--- GameServer/Game/Scene/Entity/EntityNpc.cs | 5 +- GameServer/Game/Scene/Entity/EntityProp.cs | 5 +- .../Game/Scene/Entity/EntitySummonUnit.cs | 5 +- GameServer/Game/Scene/Entity/IGameEntity.cs | 3 +- GameServer/Game/Scene/SceneInstance.cs | 32 ++++--- .../HandlerSubmitEmotionItemCsReq.cs | 2 +- .../PacketSyncEntityBuffChangeListScNotify.cs | 43 ++++----- Proto/EnterRogueEndlessActivityStageScRsp.cs | 6 +- Proto/GetChallengeGroupStatisticsScRsp.cs | 6 +- README.md | 34 +++---- docs/README_ja-JP.md | 29 ++---- docs/README_zh-CN.md | 31 ++---- docs/README_zh-TW.md | 32 +++---- 29 files changed, 371 insertions(+), 211 deletions(-) create mode 100644 .github/workflows/dotnet-release.yml create mode 100644 Common/Data/Excel/TutorialDataExcel.cs create mode 100644 Common/Data/Excel/TutorialGuideDataExcel.cs 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 @@

-
- - - - - - - - - -
English 简中 繁中 日本語
-
+[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 @@

-
- - - - - - - - - -
English 简中 繁中 日本語
-
+[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 @@

-
- - - - - - - - - -
English 简中 繁中 日本語
-
+[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 @@

-
- - - - - - - - - -
English 简中 繁中 日本語
-
+[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 ```