sync: main repo 33a31be

This commit is contained in:
StopWuyu
2024-11-16 11:39:08 +08:00
parent 6a68506bf0
commit 46b8d8a240
29 changed files with 371 additions and 211 deletions

96
.github/workflows/dotnet-release.yml vendored Normal file
View File

@@ -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

View File

@@ -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<int> swarmList = [8013101, 8013102, 8013103, 8013104, 8013105, 8013106, 8013107, 8013108, 8013109, 8013110];
List<int> ggList = [8016101, 8016102, 8016103, 8016104, 8016105, 8016106];
List<int> duList = [8023401, 8023501, 8023601];
List<int> udList = [8026401, 8026402];
List<int> 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();
}

View File

@@ -20,7 +20,6 @@ public class TaskInfo
public List<TaskInfo> OnProjectileHit { get; set; } = [];
public List<TaskInfo> 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()

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -306,6 +306,13 @@ public static class GameData
#endregion
#region Tutorial
public static Dictionary<int, TutorialDataExcel> TutorialDataData { get; private set; } = [];
public static Dictionary<int, TutorialGuideDataExcel> TutorialGuideDataData { get; private set; } = [];
#endregion
#region Actions
public static void GetFloorInfo(int planeId, int floorId, out FloorInfo outer)

View File

@@ -8,6 +8,5 @@ public enum DamageTypeEnum
Thunder = 1000114,
Wind = 1000115,
Quantum = 1000116,
Imaginary = 1000117,
All = 1000119 // Modified for AddAdventureModifier
Imaginary = 1000117
}

View File

@@ -12,6 +12,5 @@ public enum TaskTypeEnum
SuccessTaskList = 7,
AdventureTriggerAttack = 8,
AdventureFireProjectile = 9,
DestroySummonUnit = 10,
AddAdventureModifier = 11
DestroySummonUnit = 10
}

View File

@@ -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}!";
}
/// <summary>

View File

@@ -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
/// </summary>
public class WebTextCHT
{
public string Maintain => "服器正在修,请稍后尝试。";
public string Maintain => "服器正在修,請稍後嘗試。";
}
/// <summary>
@@ -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}!";
}
/// <summary>
@@ -226,7 +230,7 @@ public class UnlockAllTextCHT
/// </summary>
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 => "成功治當前隊伍中的所有角色";
}
/// <summary>
@@ -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 => "命令名:";
}
/// <summary>
@@ -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
/// </summary>
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 <floorId> 來解決問題\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 <floorId>";
@@ -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}";
}
/// <summary>
@@ -424,7 +428,7 @@ public class RaidTextCHT
/// </summary>
public class AccountTextCHT
{
public string Desc => "創建賬號\n意:此命令未經測試,請謹慎使用!";
public string Desc => "創建賬號\n意:此命令未經測試,請謹慎使用!";
public string Usage => "用法:/account create <用戶名>";
public string InvalidUid => "無效UID參數";
public string CreateError => "出現內部錯誤 {0} ";

View File

@@ -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}!";
}
/// <summary>

View File

@@ -232,13 +232,16 @@ public class BattleInstance(PlayerInstance player, LineupInfo lineup, List<Stage
proto.BattleAvatarList.Add(avatar.Key.ToBattleProto(Player.LineupManager!.GetCurLineup()!,
Player.InventoryManager!.Data, avatar.Value));
foreach (var monster in EntityMonsters) monster.ApplyBuff(this);
System.Threading.Tasks.Task.Run(async () =>
{
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<Stage
proto.BattleTargetInfo.Add((uint)i, battleTargetEntry);
}
// TODO: Confirm WaveFlag logic
foreach (var buff in Buffs)
{
if (buff.WaveFlag != null) continue;
// Single buff
var buffs = Buffs.FindAll(x => 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)

View File

@@ -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<AvatarSceneInfo>());
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)

View File

@@ -28,7 +28,6 @@ public class MazeSkill
}
public List<IMazeSkillAction> Actions { get; } = [];
public HashSet<string> 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:

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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()
{

View File

@@ -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()
{

View File

@@ -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()
{

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -7,34 +7,33 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
public class PacketSyncEntityBuffChangeListScNotify : BasePacket
{
public PacketSyncEntityBuffChangeListScNotify(
IGameEntity entity, List<SceneBuff> addBuffs, List<SceneBuff> 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<SceneBuff> 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);

View File

@@ -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)
}));

View File

@@ -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)
}));

View File

@@ -1,8 +1,7 @@
# Danheng Server-Beta
# Danheng Server
**__This project is under development! Some game technique might not correctly!__**
<p align="center">
<a href="https://visualstudio.com"><img src="https://img.shields.io/badge/Visual%20Studio-000000.svg?style=for-the-badge&logo=visual-studio&logoColor=white" /></a>
<a href="https://dotnet.microsoft.com/"><img src="https://img.shields.io/badge/.NET-000000.svg?style=for-the-badge&logo=.NET&logoColor=white" /></a>
@@ -12,18 +11,7 @@
<a href="https://discord.gg/xRtZsmHBVj"><img src="https://img.shields.io/badge/Discord%20Server-000000.svg?style=for-the-badge&logo=Discord&logoColor=white" /></a>
</p>
<div align="center">
<table>
<td valign="center"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1fa-1f1f8.png" width="16"/> English</td>
<td valign="center"><a href="docs/README_zh-CN.md"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 简中</td>
<td valign="center"><a href="docs/README_zh-TW.md"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 繁中</td>
<td valign="center"><a href="docs/README_ja-JP.md"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1ef-1f1f5.png" width="16"/> 日本語</td>
</td>
</table>
</div>
[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

View File

@@ -1,4 +1,4 @@
# Danheng Server-Beta
# Danheng Server
**__このプロジェクトは開発中です__**
@@ -11,18 +11,7 @@
<a href="https://discord.gg/xRtZsmHBVj"><img src="https://img.shields.io/badge/Discord%20Server-000000.svg?style=for-the-badge&logo=Discord&logoColor=white" /></a>
</p>
<div align="center">
<table>
<td valign="center"><a href="../README.md"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1fa-1f1f8.png" width="16"/> English</td>
<td valign="center"><a href="README_zh-CN.md"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 简中</td>
<td valign="center"><a href="README_zh-TW.md"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 繁中</td>
<td valign="center"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1ef-1f1f5.png" width="16"/> 日本語</td>
</td>
</table>
</div>
[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
```

View File

@@ -1,4 +1,4 @@
# Danheng Server-Beta
# Danheng Server
**__此项目正在开发中__**
@@ -11,18 +11,7 @@
<a href="https://discord.gg/xRtZsmHBVj"><img src="https://img.shields.io/badge/Discord%20Server-000000.svg?style=for-the-badge&logo=Discord&logoColor=white" /></a>
</p>
<div align="center">
<table>
<td valign="center"><a href="../README.md"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1fa-1f1f8.png" width="16"/> English</td>
<td valign="center"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 简中</td>
<td valign="center"><a href="README_zh-TW.md"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 繁中</td>
<td valign="center"><a href="README_ja-JP.md"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1ef-1f1f5.png" width="16"/> 日本語</td>
</td>
</table>
</div>
[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
```

View File

@@ -1,4 +1,4 @@
# Danheng Server-Beta
# Danheng S# Danheng Server
**__此專案目前尚在開發中__**
@@ -11,18 +11,7 @@
<a href="https://discord.gg/xRtZsmHBVj"><img src="https://img.shields.io/badge/Discord%20Server-000000.svg?style=for-the-badge&logo=Discord&logoColor=white" /></a>
</p>
<div align="center">
<table>
<td valign="center"><a href="../README.md"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1fa-1f1f8.png" width="16"/> English</td>
<td valign="center"><a href="README_zh-CN.md"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 简中</td>
<td valign="center"><img src="https://em-content.zobj.net/thumbs/120/twitter/351/flag-china_1f1e8-1f1f3.png" width="16"/> 繁中</td>
<td valign="center"><a href="README_ja-JP.md"><img src="https://github.com/twitter/twemoji/blob/master/assets/72x72/1f1ef-1f1f5.png" width="16"/> 日本語</td>
</td>
</table>
</div>
[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
```