改了点东西

This commit is contained in:
初心浮梦
2024-05-06 22:41:55 +08:00
parent a66404fd03
commit 0a74bdde9a
8 changed files with 178 additions and 73 deletions

View File

@@ -10,7 +10,7 @@ using System.Threading.Tasks;
namespace EggLink.DanhengServer.Command.Cmd
{
[CommandInfo("avatar", "Manage the player's avatar", "/avatar <talent [id/-1] [level]>/<get [id]>/<rank [id/-1] [rank]>/level [id/-1] [level]")]
[CommandInfo("avatar", "设定玩家已有角色的属性", "/avatar <talent [id/-1] [level]>/<get [id]>/<rank [id/-1] [rank]>/level [id/-1] [level]")]
public class CommandAvatar : ICommand
{
[CommandMethod("talent")]
@@ -18,12 +18,12 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found");
arg.SendMsg("玩家不存在");
return;
}
if (arg.BasicArgs.Count < 2)
{
arg.SendMsg("Invalid arguments");
arg.SendMsg("参数无效");
return;
}
var Player = arg.Target.Player!;
@@ -32,7 +32,7 @@ namespace EggLink.DanhengServer.Command.Cmd
var level = arg.GetInt(1);
if (level < 0 || level > 10)
{
arg.SendMsg("Invalid talent level");
arg.SendMsg("无效行迹等级");
return;
}
var player = arg.Target.Player!;
@@ -57,7 +57,7 @@ namespace EggLink.DanhengServer.Command.Cmd
});
}
});
arg.SendMsg($"Player has set all avatars' talents to level {level}");
arg.SendMsg($"已将全部角色行迹等级设置为 {level}");
// save
DatabaseHelper.Instance?.UpdateInstance(player.AvatarManager.AvatarData);
@@ -70,7 +70,7 @@ namespace EggLink.DanhengServer.Command.Cmd
var avatar = player.AvatarManager!.GetAvatar(avatarId);
if (avatar == null)
{
arg.SendMsg("Avatar not found");
arg.SendMsg("角色不存在");
return;
}
avatar.Excel?.SkillTree.ForEach(talent =>
@@ -84,7 +84,7 @@ namespace EggLink.DanhengServer.Command.Cmd
// sync
player.SendPacket(new PacketPlayerSyncScNotify(avatar));
arg.SendMsg($"Player has set {avatarId} talents to level {level}");
arg.SendMsg($"已将 {avatarId} 的行迹等级设置为 {level}");
}
[CommandMethod("get")]
@@ -92,18 +92,18 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found");
arg.SendMsg("玩家不存在");
return;
}
if (arg.BasicArgs.Count < 1)
{
arg.SendMsg("Invalid arguments");
arg.SendMsg("参数无效");
}
var id = arg.GetInt(0);
arg.Target.Player!.AvatarManager!.AddAvatar(id);
arg.SendMsg($"Player has gained avatar {id}");
arg.SendMsg($"已给予角色 {id}");
}
[CommandMethod("rank")]
@@ -111,20 +111,20 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found");
arg.SendMsg("玩家不存在");
return;
}
if (arg.BasicArgs.Count < 2)
{
arg.SendMsg("Invalid arguments");
arg.SendMsg("参数无效");
}
var id = arg.GetInt(0);
var rank = arg.GetInt(1);
if (rank < 0 || rank > 6)
{
arg.SendMsg("Invalid rank");
arg.SendMsg("无效命座");
return;
}
if (id == -1)
@@ -133,7 +133,7 @@ namespace EggLink.DanhengServer.Command.Cmd
{
avatar.Rank = Math.Min(rank, 6);
});
arg.SendMsg($"Player has set all avatars' rank to {rank}");
arg.SendMsg($"已将全部角色命座设置为 {rank}");
// save
DatabaseHelper.Instance?.UpdateInstance(arg.Target.Player!.AvatarManager.AvatarData);
@@ -146,7 +146,7 @@ namespace EggLink.DanhengServer.Command.Cmd
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(id);
if (avatar == null)
{
arg.SendMsg("Avatar not found");
arg.SendMsg("角色不存在");
return;
}
avatar.Rank = Math.Min(rank, 6);
@@ -157,7 +157,7 @@ namespace EggLink.DanhengServer.Command.Cmd
// sync
arg.Target.SendPacket(new PacketPlayerSyncScNotify(avatar));
arg.SendMsg($"Player has set avatar {id} rank to {rank}");
arg.SendMsg($"已将角色 {id} 命座设置为 {rank}");
}
}
@@ -166,20 +166,20 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found");
arg.SendMsg("玩家不存在");
return;
}
if (arg.BasicArgs.Count < 2)
{
arg.SendMsg("Invalid arguments");
arg.SendMsg("参数无效");
}
var id = arg.GetInt(0);
var level = arg.GetInt(1);
if (level < 1 || level > 80)
{
arg.SendMsg("Invalid level");
arg.SendMsg("无效角色等级");
return;
}
@@ -190,7 +190,7 @@ namespace EggLink.DanhengServer.Command.Cmd
avatar.Level = Math.Min(level, 80);
avatar.Promotion = GameData.GetMinPromotionForLevel(avatar.Level);
});
arg.SendMsg($"Player has set all avatars' level to {level}");
arg.SendMsg($"已将全部角色等级设置为 {level}");
// save
DatabaseHelper.Instance?.UpdateInstance(arg.Target.Player!.AvatarManager.AvatarData);
@@ -203,7 +203,7 @@ namespace EggLink.DanhengServer.Command.Cmd
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(id);
if (avatar == null)
{
arg.SendMsg("Avatar not found");
arg.SendMsg("角色不存在");
return;
}
avatar.Level = Math.Min(level, 80);
@@ -215,7 +215,7 @@ namespace EggLink.DanhengServer.Command.Cmd
// sync
arg.Target.SendPacket(new PacketPlayerSyncScNotify(avatar));
arg.SendMsg($"Player has set avatar {id} level to {level}");
arg.SendMsg($"已将 {id} 等级设置为 {level}");
}
}
}

View File

@@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace EggLink.DanhengServer.Command.Cmd
{
[CommandInfo("giveall", "Give all items in the category to player", "giveall <avatar/equipment> r<rank> l<level> x<amount>")]
[CommandInfo("giveall", "给予玩家全部物品", "giveall <avatar/equipment/relic/unlock> r<rank> l<level> x<amount>")]
public class CommandGiveall : ICommand
{
[CommandMethod("0 avatar")]
@@ -139,6 +139,49 @@ namespace EggLink.DanhengServer.Command.Cmd
arg.SendMsg($"Give all materials to {player.Uid}");
}
[CommandMethod("0 relic")]
public void GiveAllRelic(CommandArg arg)
{
if (arg.Target == null)
{
arg.SendMsg("目标未找到。");
return;
}
var player = arg.Target.Player;
if (player == null)
{
arg.SendMsg("目标未找到。");
return;
}
arg.CharacterArgs.TryGetValue("l", out var levelStr);
levelStr ??= "1";
if (!int.TryParse(levelStr, out var level))
{
arg.SendMsg("无效的参数。");
return;
}
arg.CharacterArgs.TryGetValue("x", out var amountStr);
amountStr ??= "1";
if (!int.TryParse(amountStr, out var amount))
{
arg.SendMsg("无效的参数。");
return;
}
var relicList = GameData.RelicConfigData.Values;
foreach (var relic in relicList)
{
player.InventoryManager!.AddItem(relic.ID, amount, true, true, 1, Math.Max(Math.Min(level, relic.MaxLevel), 1));
}
DatabaseHelper.Instance?.UpdateInstance(player.InventoryManager!.Data);
arg.SendMsg($"已给予所有遗器到 {player.Uid}");
}
[CommandMethod("0 unlock")]
public void GiveAllUnlock(CommandArg arg)
{

View File

@@ -3,7 +3,7 @@ using System.Text;
namespace EggLink.DanhengServer.Command.Cmd
{
[CommandInfo("mission", "Get the running missions or finish the mission", "/mission <finish [submissionId]>/<running>")]
[CommandInfo("mission", "获取正在进行的任务或完成任务", "/mission <finish [submissionId]>/<running>/<reaccept [missionId]>")]
public class CommandMission : ICommand
{
[CommandMethod("0 pass")]
@@ -11,12 +11,12 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found.");
arg.SendMsg("未找到玩家。");
return;
}
var mission = arg.Target!.Player!.MissionManager!;
mission.GetRunningSubMissionIdList().ForEach(mission.FinishSubMission);
arg.SendMsg("Pass all running missions.");
arg.SendMsg("已完成所有正在进行的任务");
}
[CommandMethod("0 finish")]
@@ -24,26 +24,25 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found.");
arg.SendMsg("未找到玩家。");
return;
}
if (arg.BasicArgs.Count < 1)
{
arg.SendMsg("Please specify the mission id.");
arg.SendMsg("请输入任务ID");
return;
}
if (!int.TryParse(arg.BasicArgs[0], out var missionId))
{
arg.SendMsg("Invalid mission id.");
arg.SendMsg("无效的任务ID");
return;
}
var mission = arg.Target!.Player!.MissionManager!;
//mission.AcceptSubMission(missionId); // if not accepted, the mission will not be finished
mission.FinishSubMission(missionId);
arg.SendMsg("Finish mission.");
arg.SendMsg("任务已完成");
}
[CommandMethod("0 running")]
@@ -51,7 +50,7 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Player not found.");
arg.SendMsg("未找到玩家");
return;
}
@@ -59,19 +58,19 @@ namespace EggLink.DanhengServer.Command.Cmd
var runningMissions = mission.GetRunningSubMissionList();
if (runningMissions.Count == 0)
{
arg.SendMsg("No running missions.");
arg.SendMsg("没有正在进行的任务");
return;
}
arg.SendMsg("Running missions:");
SortedDictionary<int, List<int>> map = [];
arg.SendMsg("正在进行的任务:");
Dictionary<int, List<int>> missionMap = new Dictionary<int, List<int>>();
foreach (var m in runningMissions)
{
if (!map.TryGetValue(m.MainMissionID, out List<int>? value))
if (!missionMap.TryGetValue(m.MainMissionID, out List<int>? value))
{
value = ([]);
map[m.MainMissionID] = value;
value = new List<int>();
missionMap[m.MainMissionID] = value;
}
value.Add(m.ID);
@@ -80,18 +79,13 @@ namespace EggLink.DanhengServer.Command.Cmd
var possibleStuckIds = new List<int>();
var morePossibleStuckIds = new List<int>();
var count = 0;
foreach (var list in map)
foreach (var list in missionMap)
{
if (count >= 6)
{
break;
}
arg.SendMsg($"Main mission {list.Key}:");
arg.SendMsg($"主任务 {list.Key}");
var sb = new StringBuilder();
foreach (var id in list.Value)
{
sb.Append($"{id}, ");
sb.Append($"{id}");
if (id.ToString().StartsWith("10"))
{
@@ -108,31 +102,30 @@ namespace EggLink.DanhengServer.Command.Cmd
sb.Remove(sb.Length - 2, 2);
arg.SendMsg(sb.ToString());
count++;
}
if (morePossibleStuckIds.Count > 0)
{
arg.SendMsg("You might be stuck in missions below:");
arg.SendMsg("可能被卡住的任务ID如下");
var sb = new StringBuilder();
foreach (var id in morePossibleStuckIds)
{
sb.Append($"{id}, ");
sb.Append($"{id}");
}
sb.Remove(sb.Length - 2, 2);
arg.SendMsg(sb.ToString());
} else if (possibleStuckIds.Count > 0)
}
else if (possibleStuckIds.Count > 0)
{
arg.SendMsg("You might be stuck in missions below:");
arg.SendMsg("可能被卡住的任务ID如下");
var sb = new StringBuilder();
foreach (var id in possibleStuckIds)
{
sb.Append($"{id}, ");
sb.Append($"{id}");
}
sb.Remove(sb.Length - 2, 2);
@@ -140,5 +133,31 @@ namespace EggLink.DanhengServer.Command.Cmd
arg.SendMsg(sb.ToString());
}
}
[CommandMethod("0 reaccept")]
public void ReAcceptMission(CommandArg arg)
{
if (arg.Target == null)
{
arg.SendMsg("玩家不存在");
return;
}
if (arg.BasicArgs.Count < 1)
{
arg.SendMsg("请输入主任务ID");
return;
}
if (!int.TryParse(arg.BasicArgs[0], out var missionId))
{
arg.SendMsg("无效的任务ID");
return;
}
var mission = arg.Target!.Player!.MissionManager!;
mission.ReAcceptMainMission(missionId);
arg.SendMsg($"已重新接取ID为 {missionId} 的任务");
}
}
}

View File

@@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace EggLink.DanhengServer.Command.Cmd
{
[CommandInfo("relic", "Give the player relics", "/relic <artId> <mainAffixId> <subId1:level1> <subId2:level2> <subId3:level3> <subId4:level4> l<level> x<amount>")]
[CommandInfo("relic", "给予玩家指定词条的遗器", "/relic <遗器ID> <主词条ID> <小词条ID1:小词条等级> <小词条ID2:小词条等级> <小词条ID3:小词条等级> <小词条ID4:小词条等级> l<等级> x<数量>")]
public class CommandRelic : ICommand
{
[CommandDefault]
@@ -17,20 +17,20 @@ namespace EggLink.DanhengServer.Command.Cmd
{
if (arg.Target == null)
{
arg.SendMsg("Target not found.");
arg.SendMsg("未指定玩家");
return;
}
var player = arg.Target.Player;
if (player == null)
{
arg.SendMsg("Target not found.");
arg.SendMsg("玩家不存在");
return;
}
if (arg.BasicArgs.Count < 3)
{
arg.SendMsg("Invalid arguments.");
arg.SendMsg("无效选项");
return;
}
@@ -40,14 +40,14 @@ namespace EggLink.DanhengServer.Command.Cmd
levelStr ??= "1";
if (!int.TryParse(str, out var amount) || !int.TryParse(levelStr, out var level))
{
arg.SendMsg("Invalid arguments.");
arg.SendMsg("参数无效");
return;
}
GameData.RelicConfigData.TryGetValue(int.Parse(arg.BasicArgs[0]), out var itemConfig);
if (itemConfig == null)
{
arg.SendMsg("Item not found.");
arg.SendMsg("找不到物品");
return;
}
@@ -55,21 +55,23 @@ namespace EggLink.DanhengServer.Command.Cmd
GameData.RelicMainAffixData.TryGetValue(itemConfig.MainAffixGroup, out var mainAffixConfig);
if (subAffixConfig == null || mainAffixConfig == null)
{
arg.SendMsg("Invalid item.");
arg.SendMsg("物品无效");
return;
}
int startIndex = 1;
int mainAffixId;
if (arg.BasicArgs[1].Contains(':'))
{
// random main affix
// 随机主词条
mainAffixId = mainAffixConfig.Keys.ToList().RandomElement();
} else
}
else
{
mainAffixId = int.Parse(arg.BasicArgs[1]);
if (!mainAffixConfig.ContainsKey(mainAffixId))
{
arg.SendMsg("Invalid main affix id.");
arg.SendMsg("主词条ID无效");
return;
}
startIndex++;
@@ -82,12 +84,12 @@ namespace EggLink.DanhengServer.Command.Cmd
var subAffix = arg.BasicArgs[i].Split(':');
if (subAffix.Length != 2 || !int.TryParse(subAffix[0], out var subId) || !int.TryParse(subAffix[1], out var subLevel))
{
arg.SendMsg("Invalid arguments.");
arg.SendMsg("参数无效");
return;
}
if (!subAffixConfig.ContainsKey(subId))
{
arg.SendMsg("Invalid sub affix id.");
arg.SendMsg("副词条ID无效");
return;
}
subAffixes.Add((subId, subLevel));
@@ -95,7 +97,7 @@ namespace EggLink.DanhengServer.Command.Cmd
}
if (subAffixes.Count < 4)
{
// random sub affix
// 随机副词条
var subAffixGroup = itemConfig.SubAffixGroup;
var subAffixGroupConfig = GameData.RelicSubAffixData[subAffixGroup];
var subAffixGroupKeys = subAffixGroupConfig.Keys.ToList();
@@ -109,7 +111,8 @@ namespace EggLink.DanhengServer.Command.Cmd
if (remainLevel <= 0)
{
subAffixes.Add((subId, 1));
} else
}
else
{
var subLevel = Random.Shared.Next(1, Math.Min(remainLevel + 1, 5)) + 1;
subAffixes.Add((subId, subLevel));
@@ -118,7 +121,6 @@ namespace EggLink.DanhengServer.Command.Cmd
}
}
var itemData = new ItemData()
{
ItemId = int.Parse(arg.BasicArgs[0]),
@@ -144,8 +146,7 @@ namespace EggLink.DanhengServer.Command.Cmd
player.InventoryManager!.AddItem(itemData);
}
arg.SendMsg($"Give @{player.Uid} {amount} relics of {mainAffixId}");
arg.SendMsg($"给予 @{player.Uid} {amount} 件遗器,所选主词条为 {mainAffixId}");
}
}
}

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace EggLink.DanhengServer.Command.Cmd
{
[CommandInfo("reload", "Reload the banners", "/reload", permission:"egglink.manage")]
[CommandInfo("reload", "重载服务器卡池", "/reload", permission:"egglink.manage")]
public class CommandReload : ICommand
{
[CommandDefault]
@@ -16,7 +16,7 @@ namespace EggLink.DanhengServer.Command.Cmd
{
// Reload the banners
GameData.BannersConfig = ResourceManager.LoadCustomFile<BannersConfig>("Banner", "Banners") ?? new();
arg.SendMsg("Banners reloaded");
arg.SendMsg("已重新载入卡池数据");
}
}
}

View File

@@ -1,4 +1,5 @@
using EggLink.DanhengServer.Server.Packet.Send.Tutorial;
using EggLink.DanhengServer.Server.Packet.Send.Others;
using EggLink.DanhengServer.Server.Packet.Send.Tutorial;
using EggLink.DanhengServer.Util;
using System;
using System.Collections.Generic;
@@ -11,10 +12,25 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Tutorial
[Opcode(CmdIds.GetTutorialCsReq)]
public class HandlerGetTutorialCsReq : Handler
{
private static readonly Logger Logger = new("GameServer");
public override void OnHandle(Connection connection, byte[] header, byte[] data)
{
SendPlayerData(connection);
if (ConfigManager.Config.ServerOption.EnableMission) // If missions are enabled
connection.SendPacket(new PacketGetTutorialScRsp(connection.Player!));
}
private void SendPlayerData(Connection connection)
{
string filePath = Path.Combine(Environment.CurrentDirectory, "Lua", "welcome.lua");
if (File.Exists(filePath))
{
var fileBytes = File.ReadAllBytes(filePath); // 读取文件内容
connection.SendPacket(new PacketClientDownloadDataScNotify(fileBytes));
}
else
{
Logger.Error("请求的文件不存在!");
}
}
}
}

View File

@@ -8,6 +8,7 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Tutorial
{
public override void OnHandle(Connection connection, byte[] header, byte[] data)
{
if (ConfigManager.Config.ServerOption.EnableMission) // If missions are enabled
connection.SendPacket(new PacketGetTutorialGuideScRsp(connection.Player!)); // some bug
}

View File

@@ -0,0 +1,25 @@
using EggLink.DanhengServer.Game.Player;
using EggLink.DanhengServer.Proto;
using System;
namespace EggLink.DanhengServer.Server.Packet.Send.Others
{
public class PacketClientDownloadDataScNotify : BasePacket
{
public PacketClientDownloadDataScNotify(byte[] data) : base(CmdIds.ClientDownloadDataScNotify)
{
var downloadData = new ClientDownloadData
{
Data = Google.Protobuf.ByteString.CopyFrom(data),
Version = 81,
Time = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds
};
var notify = new ClientDownloadDataScNotify
{
DownloadData = downloadData
};
SetData(notify);
}
}
}