mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-03 04:36:03 +08:00
223 lines
7.2 KiB
C#
223 lines
7.2 KiB
C#
using EggLink.DanhengServer.Data;
|
|
using EggLink.DanhengServer.Database;
|
|
using EggLink.DanhengServer.Server.Packet.Send.Player;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Numerics;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace EggLink.DanhengServer.Command.Cmd
|
|
{
|
|
[CommandInfo("avatar", "设定玩家已有角色的属性", "/avatar <talent [id/-1] [level]>/<get [id]>/<rank [id/-1] [rank]>/level [id/-1] [level]")]
|
|
public class CommandAvatar : ICommand
|
|
{
|
|
[CommandMethod("talent")]
|
|
public void SetTalent(CommandArg arg)
|
|
{
|
|
if (arg.Target == null)
|
|
{
|
|
arg.SendMsg("玩家不存在");
|
|
return;
|
|
}
|
|
if (arg.BasicArgs.Count < 2)
|
|
{
|
|
arg.SendMsg("参数无效");
|
|
return;
|
|
}
|
|
var Player = arg.Target.Player!;
|
|
// change basic type
|
|
var avatarId = arg.GetInt(0);
|
|
var level = arg.GetInt(1);
|
|
if (level < 0 || level > 10)
|
|
{
|
|
arg.SendMsg("无效行迹等级");
|
|
return;
|
|
}
|
|
var player = arg.Target.Player!;
|
|
if (avatarId == -1)
|
|
{
|
|
player.AvatarManager!.AvatarData.Avatars.ForEach(avatar =>
|
|
{
|
|
if (avatar.HeroId > 0)
|
|
{
|
|
avatar.SkillTreeExtra.TryGetValue(avatar.HeroId, out var hero);
|
|
hero ??= [];
|
|
var excel = GameData.AvatarConfigData[avatar.HeroId];
|
|
excel.SkillTree.ForEach(talent =>
|
|
{
|
|
hero[talent.PointID] = Math.Min(level, talent.MaxLevel);
|
|
});
|
|
} else
|
|
{
|
|
avatar.Excel?.SkillTree.ForEach(talent =>
|
|
{
|
|
avatar.SkillTree![talent.PointID] = Math.Min(level, talent.MaxLevel);
|
|
});
|
|
}
|
|
});
|
|
arg.SendMsg($"已将全部角色行迹等级设置为 {level}");
|
|
|
|
// save
|
|
DatabaseHelper.Instance?.UpdateInstance(player.AvatarManager.AvatarData);
|
|
|
|
// sync
|
|
player.SendPacket(new PacketPlayerSyncScNotify(player.AvatarManager.AvatarData.Avatars));
|
|
|
|
return;
|
|
}
|
|
var avatar = player.AvatarManager!.GetAvatar(avatarId);
|
|
if (avatar == null)
|
|
{
|
|
arg.SendMsg("角色不存在");
|
|
return;
|
|
}
|
|
avatar.Excel?.SkillTree.ForEach(talent =>
|
|
{
|
|
avatar.SkillTree![talent.PointID] = Math.Min(level, talent.MaxLevel);
|
|
});
|
|
|
|
// save
|
|
DatabaseHelper.Instance?.UpdateInstance(player.AvatarManager.AvatarData);
|
|
|
|
// sync
|
|
player.SendPacket(new PacketPlayerSyncScNotify(avatar));
|
|
|
|
arg.SendMsg($"已将 {avatarId} 的行迹等级设置为 {level}");
|
|
}
|
|
|
|
[CommandMethod("get")]
|
|
public void GetAvatar(CommandArg arg)
|
|
{
|
|
if (arg.Target == null)
|
|
{
|
|
arg.SendMsg("玩家不存在");
|
|
return;
|
|
}
|
|
|
|
if (arg.BasicArgs.Count < 1)
|
|
{
|
|
arg.SendMsg("参数无效");
|
|
}
|
|
|
|
var id = arg.GetInt(0);
|
|
arg.Target.Player!.AvatarManager!.AddAvatar(id);
|
|
arg.SendMsg($"已给予角色 {id}");
|
|
}
|
|
|
|
[CommandMethod("rank")]
|
|
public void SetRank(CommandArg arg)
|
|
{
|
|
if (arg.Target == null)
|
|
{
|
|
arg.SendMsg("玩家不存在");
|
|
return;
|
|
}
|
|
|
|
if (arg.BasicArgs.Count < 2)
|
|
{
|
|
arg.SendMsg("参数无效");
|
|
}
|
|
|
|
var id = arg.GetInt(0);
|
|
var rank = arg.GetInt(1);
|
|
if (rank < 0 || rank > 6)
|
|
{
|
|
arg.SendMsg("无效命座");
|
|
return;
|
|
}
|
|
if (id == -1)
|
|
{
|
|
arg.Target.Player!.AvatarManager!.AvatarData.Avatars.ForEach(avatar =>
|
|
{
|
|
avatar.Rank = Math.Min(rank, 6);
|
|
});
|
|
arg.SendMsg($"已将全部角色命座设置为 {rank}");
|
|
|
|
// save
|
|
DatabaseHelper.Instance?.UpdateInstance(arg.Target.Player!.AvatarManager.AvatarData);
|
|
|
|
// sync
|
|
arg.Target.SendPacket(new PacketPlayerSyncScNotify(arg.Target.Player!.AvatarManager.AvatarData.Avatars));
|
|
}
|
|
else
|
|
{
|
|
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(id);
|
|
if (avatar == null)
|
|
{
|
|
arg.SendMsg("角色不存在");
|
|
return;
|
|
}
|
|
avatar.Rank = Math.Min(rank, 6);
|
|
|
|
// save
|
|
DatabaseHelper.Instance?.UpdateInstance(arg.Target.Player!.AvatarManager.AvatarData);
|
|
|
|
// sync
|
|
arg.Target.SendPacket(new PacketPlayerSyncScNotify(avatar));
|
|
|
|
arg.SendMsg($"已将角色 {id} 命座设置为 {rank}");
|
|
}
|
|
}
|
|
|
|
[CommandMethod("level")]
|
|
public void SetLevel(CommandArg arg)
|
|
{
|
|
if (arg.Target == null)
|
|
{
|
|
arg.SendMsg("玩家不存在");
|
|
return;
|
|
}
|
|
|
|
if (arg.BasicArgs.Count < 2)
|
|
{
|
|
arg.SendMsg("参数无效");
|
|
}
|
|
|
|
var id = arg.GetInt(0);
|
|
var level = arg.GetInt(1);
|
|
if (level < 1 || level > 80)
|
|
{
|
|
arg.SendMsg("无效角色等级");
|
|
return;
|
|
}
|
|
|
|
if (id == -1)
|
|
{
|
|
arg.Target.Player!.AvatarManager!.AvatarData.Avatars.ForEach(avatar =>
|
|
{
|
|
avatar.Level = Math.Min(level, 80);
|
|
avatar.Promotion = GameData.GetMinPromotionForLevel(avatar.Level);
|
|
});
|
|
arg.SendMsg($"已将全部角色等级设置为 {level}");
|
|
|
|
// save
|
|
DatabaseHelper.Instance?.UpdateInstance(arg.Target.Player!.AvatarManager.AvatarData);
|
|
|
|
// sync
|
|
arg.Target.SendPacket(new PacketPlayerSyncScNotify(arg.Target.Player!.AvatarManager.AvatarData.Avatars));
|
|
}
|
|
else
|
|
{
|
|
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(id);
|
|
if (avatar == null)
|
|
{
|
|
arg.SendMsg("角色不存在");
|
|
return;
|
|
}
|
|
avatar.Level = Math.Min(level, 80);
|
|
avatar.Promotion = GameData.GetMinPromotionForLevel(avatar.Level);
|
|
|
|
// save
|
|
DatabaseHelper.Instance?.UpdateInstance(arg.Target.Player!.AvatarManager.AvatarData);
|
|
|
|
// sync
|
|
arg.Target.SendPacket(new PacketPlayerSyncScNotify(avatar));
|
|
|
|
arg.SendMsg($"已将 {id} 等级设置为 {level}");
|
|
}
|
|
}
|
|
}
|
|
}
|