mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 11:03:59 +00:00
add girl command
This commit is contained in:
@@ -118,28 +118,8 @@ public class WordTextCHS
|
|||||||
public class CommandTextCHS
|
public class CommandTextCHS
|
||||||
{
|
{
|
||||||
public NoticeTextCHS Notice { get; } = new();
|
public NoticeTextCHS Notice { get; } = new();
|
||||||
|
|
||||||
public GenderTextCHS Gender { get; } = new();
|
|
||||||
public AvatarTextCHS Avatar { get; } = new();
|
|
||||||
public AnnounceTextCHS Announce { get; } = new();
|
|
||||||
public BanTextCHS Ban { get; } = new();
|
|
||||||
public GiveTextCHS Give { get; } = new();
|
|
||||||
public GiveAllTextCHS GiveAll { get; } = new();
|
|
||||||
public LineupTextCHS Lineup { get; } = new();
|
|
||||||
public HelpTextCHS Help { get; } = new();
|
public HelpTextCHS Help { get; } = new();
|
||||||
public KickTextCHS Kick { get; } = new();
|
public GirlTextCHS Girl { get; } = new();
|
||||||
public MissionTextCHS Mission { get; } = new();
|
|
||||||
public RelicTextCHS Relic { get; } = new();
|
|
||||||
public ReloadTextCHS Reload { get; } = new();
|
|
||||||
public RogueTextCHS Rogue { get; } = new();
|
|
||||||
public SceneTextCHS Scene { get; } = new();
|
|
||||||
public UnlockAllTextCHS UnlockAll { get; } = new();
|
|
||||||
public MailTextCHS Mail { get; } = new();
|
|
||||||
public RaidTextCHS Raid { get; } = new();
|
|
||||||
public AccountTextCHS Account { get; } = new();
|
|
||||||
public UnstuckTextCHS Unstuck { get; } = new();
|
|
||||||
public SetlevelTextCHS Setlevel { get; } = new();
|
|
||||||
public PermissionTextCHS Permission { get; } = new();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -212,90 +192,6 @@ public class NoticeTextCHS
|
|||||||
public string InternalError => "在处理命令时发生了内部错误: {0}!";
|
public string InternalError => "在处理命令时发生了内部错误: {0}!";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Gender
|
|
||||||
/// </summary>
|
|
||||||
public class GenderTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "切换主角的性别";
|
|
||||||
public string Usage => "用法: /gender [man/woman]";
|
|
||||||
public string GenderNotSpecified => "性别不存在!";
|
|
||||||
public string GenderChanged => "性别已更改!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.UnlockAll
|
|
||||||
/// </summary>
|
|
||||||
public class UnlockAllTextCHS
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"解锁所有在类别内的对象\n" +
|
|
||||||
"使用 /unlockall mission 以完成所有任务, 使用后会被踢出, 重新登录后可能会被教程卡住, 请谨慎使用\n" +
|
|
||||||
"使用 /unlockall tutorial 以解锁所有教程, 使用后会被踢出, 用于部分界面卡住无法行动的情况\n" +
|
|
||||||
"使用 /unlockall rogue 以解锁所有类型模拟宇宙, 使用后会被踢出, 建议与 /unlockall tutorial 搭配使用以获取更好效果";
|
|
||||||
public string Usage => "用法: /unlockall [mission/tutorial/rogue]";
|
|
||||||
public string UnlockedAll => "已解锁/完成所有{0}!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Avatar
|
|
||||||
/// </summary>
|
|
||||||
public class AvatarTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "设定玩家已有角色的属性, -1为所有已拥有角色";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /avatar talent [角色ID/-1] [行迹等级]\n" +
|
|
||||||
"用法: /avatar rank [角色ID/-1] [星魂]\n" +
|
|
||||||
"用法: /avatar level [角色ID/-1] [角色等级]";
|
|
||||||
public string InvalidLevel => "{0} 等级无效!";
|
|
||||||
public string AllAvatarsLevelSet => "已将全部角色 {0} 等级设置为 {1}.";
|
|
||||||
public string AvatarLevelSet => "已将 {0} 角色 {1} 等级设置为 {2}.";
|
|
||||||
public string AvatarNotFound => "角色不存在!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Give
|
|
||||||
/// </summary>
|
|
||||||
public class GiveTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "给予玩家物品";
|
|
||||||
public string Usage => "用法: /give [物品ID] l[等级] x[数量] r[叠影]";
|
|
||||||
public string ItemNotFound => "未找到物品!";
|
|
||||||
public string GiveItem => "已给予 {0} {1} 个物品 {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.GiveAll
|
|
||||||
/// </summary>
|
|
||||||
public class GiveAllTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "给予玩家全部指定类型的物品";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /giveall avatar r[星魂] l[等级]\n" +
|
|
||||||
"用法: /giveall material x[数量]\n" +
|
|
||||||
"用法: /giveall equipment r[叠影] l[等级] x[数量]\n" +
|
|
||||||
"用法: /giveall relic x[数量]\n" +
|
|
||||||
"用法: /giveall unlock\n" +
|
|
||||||
"用法: /giveall train\n" +
|
|
||||||
"用法: /giveall path";
|
|
||||||
public string GiveAllItems => "已给予所有 {0}, 各 {1} 个.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Lineup
|
|
||||||
/// </summary>
|
|
||||||
public class LineupTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家的队伍信息";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /lineup mp\n" +
|
|
||||||
"用法: /lineup sp\n" +
|
|
||||||
"用法: /lineup heal";
|
|
||||||
public string GainedMp => "成功恢复秘技点!";
|
|
||||||
public string GainedSp => "成功恢复能量!";
|
|
||||||
public string HealedAllAvatars => "成功治愈当前队伍中的所有角色!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// path: Game.Command.Help
|
/// path: Game.Command.Help
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -311,215 +207,21 @@ public class HelpTextCHS
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// path: Game.Command.Kick
|
/// path: Game.Command.Girl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class KickTextCHS
|
public class GirlTextCHS
|
||||||
{
|
{
|
||||||
public string Desc => "踢出玩家";
|
public string Desc => "添加角色到玩家\n" +
|
||||||
public string Usage => "用法: /kick";
|
"detail 和 particular 可在 Resources/ExcelOutput/card.json 中查看\n\n" +
|
||||||
public string PlayerKicked => "玩家 {0} 已被踢出!";
|
"注意:-1 表示所有角色\n";
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Mission
|
|
||||||
/// </summary>
|
|
||||||
public class MissionTextCHS
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"管理玩家的任务\n" +
|
|
||||||
"使用 pass 完成当前正在进行的所有任务, 此命令易造成严重卡顿, 请尽量使用 /mission finish 替代\n" +
|
|
||||||
"使用 finish [子任务ID] 完成指定子任务, 请浏览 handbook 来获取子任务ID\n" +
|
|
||||||
"使用 finishmain [主任务ID] 完成指定主任务, 请浏览 handbook 来获取主任务ID\n" +
|
|
||||||
"使用 running [-all] 获取正在追踪的任务, 增加'-all'则显示所有正在进行的任务以及可能卡住的任务, 使用后可能会出现较长任务列表, 请注意甄别\n" +
|
|
||||||
"使用 reaccept [主任务ID] 可重新进行指定主任务, 请浏览 handbook 来获取主任务ID";
|
|
||||||
public string Usage =>
|
public string Usage =>
|
||||||
"用法: /mission pass\n" +
|
"用法: /girl add <detail/-1> -p<particular> -l<level> -s<star>\n" +
|
||||||
"用法: /mission finish [子任务ID]\n" +
|
"用法: /girl level <guid/-1> <level>";
|
||||||
"用法: /mission running [-all]\n" +
|
|
||||||
"用法: /mission reaccept [主任务ID]\n" +
|
|
||||||
"用法: /mission finishmain [主任务ID]";
|
|
||||||
public string AllMissionsFinished => "所有任务已完成!";
|
|
||||||
public string AllRunningMissionsFinished => "共 {0} 个进行中的任务已完成!";
|
|
||||||
public string MissionFinished => "任务 {0} 已完成!";
|
|
||||||
public string InvalidMissionId => "无效的任务ID!";
|
|
||||||
public string NoRunningMissions => "没有正在进行的任务!";
|
|
||||||
public string RunningMissions => "正在进行的任务: ";
|
|
||||||
public string PossibleStuckMissions => "可能卡住的任务: ";
|
|
||||||
public string MainMission => "主任务";
|
|
||||||
public string MissionReAccepted => "重新接受任务 {0}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
public string NotFound => "角色不存在!";
|
||||||
/// path: Game.Command.Relic
|
public string Added => "已为玩家添加 {0} 个角色!";
|
||||||
/// </summary>
|
public string UpdateLevel => "已将 {1} 个角色等级设置为 {0}!";
|
||||||
public class RelicTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家的遗器, 等级限制: 1 ≤ 等级 ≤ 9999";
|
|
||||||
public string Usage => "用法: /relic [遗器ID] [主词条ID] [ID1:等级] [ID2:等级] l[等级] x[数量]";
|
|
||||||
public string RelicNotFound => "遗器不存在!";
|
|
||||||
public string InvalidMainAffixId => "主词条ID无效!";
|
|
||||||
public string InvalidSubAffixId => "副词条ID无效!";
|
|
||||||
public string RelicGiven => "给予玩家 {0} {1} 个遗器 {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Reload
|
|
||||||
/// </summary>
|
|
||||||
public class ReloadTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "重新加载指定的配置";
|
|
||||||
public string Usage => "用法: /reload [banner/activity]";
|
|
||||||
public string ConfigReloaded => "配置 {0} 已重新加载!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Rogue
|
|
||||||
/// </summary>
|
|
||||||
public class RogueTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "管理模拟宇宙数据, -1意为所有已拥有祝福, buff获取祝福, enhance强化祝福";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /rogue money [宇宙碎片数量]\n" +
|
|
||||||
"用法: /rogue buff [祝福ID/-1]\n" +
|
|
||||||
"用法: /rogue miracle [奇物ID]\n" +
|
|
||||||
"用法: /rogue enhance [祝福ID/-1]\n" +
|
|
||||||
"用法: /rogue unstuck - 脱离事件";
|
|
||||||
public string PlayerGainedMoney => "已获得 {0} 宇宙碎片.";
|
|
||||||
public string PlayerGainedAllItems => "已获得所有{0}.";
|
|
||||||
public string PlayerGainedItem => "已获得{0} {1}.";
|
|
||||||
public string PlayerEnhancedBuff => "已强化祝福 {0}.";
|
|
||||||
public string PlayerEnhancedAllBuffs => "已强化所有祝福.";
|
|
||||||
public string PlayerUnstuck => "已脱离事件.";
|
|
||||||
public string NotFoundItem => "未找到 {0}!";
|
|
||||||
public string PlayerNotInRogue => "玩家不在模拟宇宙中!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Scene
|
|
||||||
/// </summary>
|
|
||||||
public class SceneTextCHS
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"管理玩家场景\n" +
|
|
||||||
"使用 PlaneId 默认进入指定场景\n" +
|
|
||||||
"使用 group 来获取组, 使用 prop 来设置道具状态, 在 PropStateEnum 获取状态列表\n" +
|
|
||||||
"使用 unlockall 来解锁场景内所有道具(open状态), 可能导致游戏加载卡条, 使用 /scene reset 解决\n" +
|
|
||||||
"使用 reload 来重新加载当前场景, 并回到初始位置\n" +
|
|
||||||
"使用 reset 来重置指定场景所有道具状态";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /scene [PlaneId]\n" +
|
|
||||||
"用法: /scene cur\n" +
|
|
||||||
"用法: /scene reload\n" +
|
|
||||||
"用法: /scene group\n" +
|
|
||||||
"用法: /scene unlockall\n" +
|
|
||||||
"用法: /scene reset [PlaneId]" +
|
|
||||||
"用法: /scene prop [组ID] [道具ID] [状态]\n" +
|
|
||||||
"用法: /scene remove [实体ID]\n";
|
|
||||||
|
|
||||||
public string LoadedGroups => "已加载组: {0}.";
|
|
||||||
public string PropStateChanged => "道具: {0} 的状态已设置为 {1}.";
|
|
||||||
public string PropNotFound => "未找到道具!";
|
|
||||||
public string EntityRemoved => "实体 {0} 已被移除.";
|
|
||||||
public string EntityNotFound => "未找到实体!";
|
|
||||||
public string AllPropsUnlocked => "所有道具已解锁!";
|
|
||||||
public string SceneChanged => "已进入场景 {0}.";
|
|
||||||
public string SceneReloaded => "场景已重新加载!";
|
|
||||||
public string SceneReset => "已重置场景 {0} 中所有道具状态!";
|
|
||||||
public string CurrentScene => "当前场景 EntryId: {0}, PlaneId: {1}, FloorId: {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Mail
|
|
||||||
/// </summary>
|
|
||||||
public class MailTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "发送邮件";
|
|
||||||
public string Usage => "用法: /mail [发送名称] [标题] [内容] [ID1:数量,ID2:数量]";
|
|
||||||
public string MailSent => "邮件已发送!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Raid
|
|
||||||
/// </summary>
|
|
||||||
public class RaidTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家的任务临时场景";
|
|
||||||
public string Usage => "用法: /raid leave";
|
|
||||||
public string Leaved => "已离开临时场景!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Account
|
|
||||||
/// </summary>
|
|
||||||
public class AccountTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "管理数据库账号";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /account create [用户名] [UID] [密码]\n" +
|
|
||||||
"用法: /account delete [UID]";
|
|
||||||
public string InvalidUid => "UID无效!";
|
|
||||||
public string InvalidAccount => "账号 {0} 无效!";
|
|
||||||
public string CreateSuccess => "账号 {0} 创建成功!";
|
|
||||||
public string DeleteSuccess => "账号 {0} 删除成功!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Announce
|
|
||||||
/// </summary>
|
|
||||||
public class AnnounceTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "发送弹窗公告";
|
|
||||||
public string Usage => "用法: /announce [Text] [Color]";
|
|
||||||
public string SendSuccess => "发送成功!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Ban
|
|
||||||
/// </summary>
|
|
||||||
public class BanTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "封禁或解封用户";
|
|
||||||
public string Usage => "用法: /ban [add/delete]";
|
|
||||||
public string BanSuccess => "账号已封禁!";
|
|
||||||
public string UnBanSuccess => "账号已解封!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Unstuck
|
|
||||||
/// </summary>
|
|
||||||
public class UnstuckTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "将玩家传送回默认场景";
|
|
||||||
public string Usage => "用法: /unstuck [UID]";
|
|
||||||
public string UnstuckSuccess => "已成功将该玩家传送回默认场景.";
|
|
||||||
public string UidNotExist => "该UID不存在!";
|
|
||||||
public string PlayerIsOnline => "该玩家目前在线上!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Setlevel
|
|
||||||
/// </summary>
|
|
||||||
public class SetlevelTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "设定玩家等级";
|
|
||||||
public string Usage => "用法: /setlevel [等级]";
|
|
||||||
public string SetlevelSuccess => "等级设定成功!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Permission
|
|
||||||
/// </summary>
|
|
||||||
public class PermissionTextCHS
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家权限";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /permission add [权限]\n" +
|
|
||||||
"用法: /permission remove [权限]\n" +
|
|
||||||
"用法: /permission clean [权限]";
|
|
||||||
public string InvalidPerm => "权限 {0} 不存在!";
|
|
||||||
public string Added => "已添加权限 {0} 到玩家 {1}!";
|
|
||||||
public string Removed => "已移除玩家 {0} 的权限 {1}!";
|
|
||||||
public string Cleaned => "已清除玩家 {0} 的所有权限!";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -118,28 +118,8 @@ public class WordTextCHT
|
|||||||
public class CommandTextCHT
|
public class CommandTextCHT
|
||||||
{
|
{
|
||||||
public NoticeTextCHT Notice { get; } = new();
|
public NoticeTextCHT Notice { get; } = new();
|
||||||
|
|
||||||
public GenderTextCHT Gender { get; } = new();
|
|
||||||
public AvatarTextCHT Avatar { get; } = new();
|
|
||||||
public AnnounceTextCHT Announce { get; } = new();
|
|
||||||
public BanTextCHT Ban { get; } = new();
|
|
||||||
public GiveTextCHT Give { get; } = new();
|
|
||||||
public GiveAllTextCHT GiveAll { get; } = new();
|
|
||||||
public LineupTextCHT Lineup { get; } = new();
|
|
||||||
public HelpTextCHT Help { get; } = new();
|
public HelpTextCHT Help { get; } = new();
|
||||||
public KickTextCHT Kick { get; } = new();
|
public GirlTextCHT Girl { get; } = new();
|
||||||
public MissionTextCHT Mission { get; } = new();
|
|
||||||
public RelicTextCHT Relic { get; } = new();
|
|
||||||
public ReloadTextCHT Reload { get; } = new();
|
|
||||||
public RogueTextCHT Rogue { get; } = new();
|
|
||||||
public SceneTextCHT Scene { get; } = new();
|
|
||||||
public UnlockAllTextCHT UnlockAll { get; } = new();
|
|
||||||
public MailTextCHT Mail { get; } = new();
|
|
||||||
public RaidTextCHT Raid { get; } = new();
|
|
||||||
public AccountTextCHT Account { get; } = new();
|
|
||||||
public UnstuckTextCHT Unstuck { get; } = new();
|
|
||||||
public SetlevelTextCHT Setlevel { get; } = new();
|
|
||||||
public PermissionTextCHT Permission { get; } = new();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -212,92 +192,6 @@ public class NoticeTextCHT
|
|||||||
public string InternalError => "在處理命令時發生了內部錯誤: {0}!";
|
public string InternalError => "在處理命令時發生了內部錯誤: {0}!";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Gender
|
|
||||||
/// </summary>
|
|
||||||
public class GenderTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "切換主角的性別";
|
|
||||||
public string Usage => "用法: /gender [man/woman]";
|
|
||||||
public string GenderNotSpecified => "性別不存在!";
|
|
||||||
public string GenderChanged => "性別已更改!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.UnlockAll
|
|
||||||
/// </summary>
|
|
||||||
public class UnlockAllTextCHT
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"解鎖所有在類別內的對象\n" +
|
|
||||||
"使用 /unlockall mission 以完成所有任務, 使用後會被踢出, 重新登錄後可能會被教程卡住, 請謹慎使用\n" +
|
|
||||||
"使用 /unlockall tutorial 以解鎖所有教程, 使用後會被踢出, 用於部分界面卡住無法行動的情況\n" +
|
|
||||||
"使用 /unlockall rogue 以解鎖所有類型模擬宇宙, 使用後會被踢出, 建議與 /unlockall tutorial 搭配使用以獲取更好效果";
|
|
||||||
|
|
||||||
public string Usage => "用法: /unlockall [mission/tutorial/rogue]";
|
|
||||||
public string UnlockedAll => "已解鎖/完成所有{0}!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Avatar
|
|
||||||
/// </summary>
|
|
||||||
public class AvatarTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "設定玩家已有角色的屬性, -1意為所有已擁有角色";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /avatar talent [角色ID/-1] [行跡等級]\n" +
|
|
||||||
"用法: /avatar rank [角色ID/-1] [星魂]\n" +
|
|
||||||
"用法: /avatar level [角色ID/-1] [角色等級]";
|
|
||||||
public string InvalidLevel => "{0}等級無效!";
|
|
||||||
public string AllAvatarsLevelSet => "已將全部角色 {0}等級設置為 {1}.";
|
|
||||||
public string AvatarLevelSet => "已將 {0} 角色 {1}等級設置為 {2}.";
|
|
||||||
public string AvatarNotFound => "角色不存在!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Give
|
|
||||||
/// </summary>
|
|
||||||
public class GiveTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "給予玩家物品";
|
|
||||||
public string Usage => "用法: /give [物品ID] l[等級] x[數量] r[疊影]";
|
|
||||||
public string ItemNotFound => "未找到物品!";
|
|
||||||
public string GiveItem => "給予 @{0} {1} 個物品 {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.GiveAll
|
|
||||||
/// </summary>
|
|
||||||
public class GiveAllTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "給予玩家全部指定類型的物品";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /giveall avatar r[星魂] l[等級]\n" +
|
|
||||||
"用法: /giveall material x[數量]\n" +
|
|
||||||
"用法: /giveall equipment r[叠影] l[等級] x[數量]\n" +
|
|
||||||
"用法: /giveall relic l<等級> x<數量>\n" +
|
|
||||||
"用法: /giveall unlock\n" +
|
|
||||||
"用法: /giveall train\n" +
|
|
||||||
"用法: /giveall path";
|
|
||||||
public string GiveAllItems => "已給予所有 {0}, 各 {1} 個.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Lineup
|
|
||||||
/// </summary>
|
|
||||||
public class LineupTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家的隊伍資訊";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /lineup mp\n" +
|
|
||||||
"用法: /lineup sp\n" +
|
|
||||||
"用法: /lineup heal";
|
|
||||||
public string GainedMp => "成功恢復秘技點!";
|
|
||||||
public string GainedSp => "成功恢復能量!";
|
|
||||||
public string HealedAllAvatars => "成功治愈當前隊伍中的所有角色!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// path: Game.Command.Help
|
/// path: Game.Command.Help
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -313,216 +207,21 @@ public class HelpTextCHT
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// path: Game.Command.Kick
|
/// path: Game.Command.Girl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class KickTextCHT
|
public class GirlTextCHT
|
||||||
{
|
{
|
||||||
public string Desc => "踢出玩家";
|
public string Desc => "新增角色到玩家\n" +
|
||||||
public string Usage => "用法: /kick";
|
"detail 和 particular 可在 Resources/ExcelOutput/card.json 中查看\n\n" +
|
||||||
public string PlayerKicked => "玩家 {0} 已被踢出!";
|
"注意:-1 表示所有角色\n";
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Mission
|
|
||||||
/// </summary>
|
|
||||||
public class MissionTextCHT
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"管理玩家的任務\n" +
|
|
||||||
"使用 pass 完成當前正在進行的所有任務, 此命令易造成嚴重卡頓, 請盡量使用 /mission finish 替代\n" +
|
|
||||||
"使用 finish [子任務ID] 完成指定子任務, 請流覽 handbook 來獲取子任務ID\n" +
|
|
||||||
"使用 finishmain [主任務ID] 完成指定主任務, 請流覽 handbook 來獲取主任務ID\n" +
|
|
||||||
"使用 running [-all] 獲取正在追蹤的任務, 增加'-all'則顯示所有正在進行的任務以及可能卡住的任務, 使用後可能會出現較長任務清單, 請注意甄別\n" +
|
|
||||||
"使用 reaccept [主任務ID] 可重新進行指定主任務, 請流覽 handbook 來獲取主任務ID";
|
|
||||||
|
|
||||||
public string Usage =>
|
public string Usage =>
|
||||||
"用法: /mission pass\n" +
|
"用法: /girl add <detail/-1> -p<particular> -l<level> -s<star>\n" +
|
||||||
"用法: /mission finish [子任務]\n" +
|
"用法: /girl level <guid/-1> <level>";
|
||||||
"用法: /mission running [-all]\n" +
|
|
||||||
"用法: /mission reaccept [主任務ID]\n" +
|
|
||||||
"用法: /mission finishmain [主任務ID]";
|
|
||||||
public string AllMissionsFinished => "所有任務已完成!";
|
|
||||||
public string AllRunningMissionsFinished => "共 {0} 個進行中的任務已完成!";
|
|
||||||
public string MissionFinished => "任務 {0} 已完成!";
|
|
||||||
public string InvalidMissionId => "無效的任務ID!";
|
|
||||||
public string NoRunningMissions => "沒有正在進行的任務!";
|
|
||||||
public string RunningMissions => "正在進行的任務: ";
|
|
||||||
public string PossibleStuckMissions => "可能卡住的任務: ";
|
|
||||||
public string MainMission => "主任務";
|
|
||||||
public string MissionReAccepted => "重新接受任務 {0}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
public string NotFound => "角色不存在!";
|
||||||
/// path: Game.Command.Relic
|
public string Added => "已為玩家新增 {0} 個角色!";
|
||||||
/// </summary>
|
public string UpdateLevel => "已將 {1} 個角色等級設為 {0}!";
|
||||||
public class RelicTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家的遺器, 等級限製: 1 ≤ 等級 ≤ 9999";
|
|
||||||
public string Usage => "用法: /relic [遺器ID] [主詞條ID] [ID1:等級] [ID2:等級] l[等級] x[數量]";
|
|
||||||
public string RelicNotFound => "遺器不存在!";
|
|
||||||
public string InvalidMainAffixId => "主詞條ID無效!";
|
|
||||||
public string InvalidSubAffixId => "副詞條ID無效!";
|
|
||||||
public string RelicGiven => "給予玩家 @{0} {1} 個遺器 {2}, 主詞條 {3}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Reload
|
|
||||||
/// </summary>
|
|
||||||
public class ReloadTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "重新加載指定的配置";
|
|
||||||
public string Usage => "用法: /reload [banner/activity]";
|
|
||||||
public string ConfigReloaded => "配置 {0} 已重新加載!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Rogue
|
|
||||||
/// </summary>
|
|
||||||
public class RogueTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "管理模擬宇宙數據, -1意為所有已擁有祝福, buff來獲取祝福, enhance強化祝福";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /rogue money [宇宙碎片數量]\n" +
|
|
||||||
"用法: /rogue buff [祝福ID/-1]\n" +
|
|
||||||
"用法: /rogue miracle [奇物ID]\n" +
|
|
||||||
"用法: /rogue enhance [祝福ID/-1]\n" +
|
|
||||||
"用法: /rogue unstuck - 脫離事件";
|
|
||||||
public string PlayerGainedMoney => "已獲得 {0} 宇宙碎片.";
|
|
||||||
public string PlayerGainedAllItems => "已獲得所有{0}.";
|
|
||||||
public string PlayerGainedItem => "已獲得{0} {1}.";
|
|
||||||
public string PlayerEnhancedBuff => "已強化祝福 {0}.";
|
|
||||||
public string PlayerEnhancedAllBuffs => "已強化所有祝福.";
|
|
||||||
public string PlayerUnstuck => "已脫離事件.";
|
|
||||||
public string NotFoundItem => "未找到 {0}!";
|
|
||||||
public string PlayerNotInRogue => "玩家不在模擬宇宙中!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Scene
|
|
||||||
/// </summary>
|
|
||||||
public class SceneTextCHT
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"管理玩家場景\n" +
|
|
||||||
"使用 PlaneId 預設進入指定場景\n" +
|
|
||||||
"使用 group 來獲取組, 使用 prop 來設置道具狀態, 在 PropStateEnum 獲取狀態列表\n" +
|
|
||||||
"使用 unlockall 來解鎖場景內所有道具(open狀態), 可能導致遊戲加載卡條, 使用 /scene reset 解決\n" +
|
|
||||||
"使用 reload 來重新加載當前場景, 並回到初始位置\n" +
|
|
||||||
"使用 reset 來重置指定場景所有道具狀態";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /scene [entryId]\n" +
|
|
||||||
"用法: /scene cur\n" +
|
|
||||||
"用法: /scene reload\n" +
|
|
||||||
"用法: /scene group\n" +
|
|
||||||
"用法: /scene unlockall\n" +
|
|
||||||
"用法: /scene reset [floorId]" +
|
|
||||||
"用法: /scene prop [組ID] [道具ID] [狀態]\n" +
|
|
||||||
"用法: /scene remove [實體ID]\n";
|
|
||||||
public string LoadedGroups => "已加載組: {0}.";
|
|
||||||
public string PropStateChanged => "道具: {0} 的狀態已設置為 {1}.";
|
|
||||||
public string PropNotFound => "未找到道具!";
|
|
||||||
public string EntityRemoved => "實體 {0} 已被移除.";
|
|
||||||
public string EntityNotFound => "未找到實體!";
|
|
||||||
public string AllPropsUnlocked => "所有道具已解鎖!";
|
|
||||||
public string SceneChanged => "已進入場景 {0}.";
|
|
||||||
public string SceneReloaded => "場景已重新加載!";
|
|
||||||
public string SceneReset => "已重置場景 {0} 中所有道具狀態!";
|
|
||||||
public string CurrentScene => "當前場景Entry Id: {0}, Plane Id: {1}, Floor Id: {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Mail
|
|
||||||
/// </summary>
|
|
||||||
public class MailTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "發送郵件";
|
|
||||||
public string Usage => "用法: /mail [發送名稱] [標題] [內容] [ID1:數量,ID2:數量]";
|
|
||||||
public string MailSent => "郵件已發送!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Raid
|
|
||||||
/// </summary>
|
|
||||||
public class RaidTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家的任務臨時場景";
|
|
||||||
public string Usage => "用法: /raid leave";
|
|
||||||
public string Leaved => "已離開臨時場景!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Account
|
|
||||||
/// </summary>
|
|
||||||
public class AccountTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "管理資料庫帳號";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /account create [用户名] [UID] [密碼]\n" +
|
|
||||||
"用法: /account delete [UID]";
|
|
||||||
public string InvalidUid => "UID無效!";
|
|
||||||
public string InvalidAccount => "帳號 {0} 無效!";
|
|
||||||
public string CreateSuccess => "賬號 {0} 創建成功!";
|
|
||||||
public string DeleteSuccess => "賬號 {0} 刪除成功!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Announce
|
|
||||||
/// </summary>
|
|
||||||
public class AnnounceTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "發送彈窗公告";
|
|
||||||
public string Usage => "用法: /announce [Text] [Color]";
|
|
||||||
public string SendSuccess => "發送成功!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Ban
|
|
||||||
/// </summary>
|
|
||||||
public class BanTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "封禁或解封用户";
|
|
||||||
public string Usage => "用法: /ban [add/delete]";
|
|
||||||
public string BanSuccess => "帳號已封禁!";
|
|
||||||
public string UnBanSuccess => "帳號已解封!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Unstuck
|
|
||||||
/// </summary>
|
|
||||||
public class UnstuckTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "將玩家傳送回默認場景";
|
|
||||||
public string Usage => "用法: /unstuck [UID]";
|
|
||||||
public string UnstuckSuccess => "已成功將該玩家傳送回默認場景";
|
|
||||||
public string UidNotExist => "該UID不存在!";
|
|
||||||
public string PlayerIsOnline => "該玩家目前在線上!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Setlevel
|
|
||||||
/// </summary>
|
|
||||||
public class SetlevelTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "設定玩家等級";
|
|
||||||
public string Usage => "用法: /setlevel [等級]";
|
|
||||||
public string SetlevelSuccess => "等級設定成功!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Permission
|
|
||||||
/// </summary>
|
|
||||||
public class PermissionTextCHT
|
|
||||||
{
|
|
||||||
public string Desc => "管理玩家權限";
|
|
||||||
public string Usage =>
|
|
||||||
"用法: /permission add [權限]\n" +
|
|
||||||
"用法: /permission remove [權限]\n" +
|
|
||||||
"用法: /permission clean [權限]";
|
|
||||||
public string InvalidPerm => "權限 {0} 不存在!";
|
|
||||||
public string Added => "已添加權限 {0} 到玩家 {1}!";
|
|
||||||
public string Removed => "已移除玩家 {0} 的權限 {1}!";
|
|
||||||
public string Cleaned => "已清除玩家 {0} 的所有權限!";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -81,11 +81,7 @@ public class CommandTextEN
|
|||||||
{
|
{
|
||||||
public NoticeTextEN Notice { get; } = new();
|
public NoticeTextEN Notice { get; } = new();
|
||||||
public HelpTextEN Help { get; } = new();
|
public HelpTextEN Help { get; } = new();
|
||||||
public ValkTextEN Valk { get; } = new();
|
public GirlTextEN Girl { get; } = new();
|
||||||
public GiveAllTextEN GiveAll { get; } = new();
|
|
||||||
public ElfTextEN Elf { get; } = new();
|
|
||||||
public AbyssTextEN Abyss { get; } = new();
|
|
||||||
public EndlessTextEN Endless { get; } = new();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -180,96 +176,21 @@ public class HelpTextEN
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// path: Game.Command.Valk
|
/// path: Game.Command.Girl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ValkTextEN
|
public class GirlTextEN
|
||||||
{
|
{
|
||||||
public string Desc => "Set attributes for owned characters\n" +
|
public string Desc => "Add characters to player\n" +
|
||||||
"Note: -1 means all owned characters\n";
|
"detail and particular can be found in Resources/ExcelOutput/card.json\n\n" +
|
||||||
|
"Note: -1 means all characters\n";
|
||||||
|
|
||||||
public string Usage =>
|
public string Usage =>
|
||||||
"Usage: /valk add [ValkID/-1] l<Level> s<Star>\n\n" +
|
"Usage: /girl add <detail/-1> -p<particular> -l<level> -s<star>\n" +
|
||||||
"Usage: /valk level [ValkID/-1] [Level]\n\n" +
|
"Usage: /girl level <guid/-1> <level>";
|
||||||
"Usage: /valk star [ValkID/-1] [Star]\n\n" +
|
|
||||||
"Usage: /valk skill [ValkID/-1] for max skill level";
|
|
||||||
|
|
||||||
public string ValkNotFound => "Character does not exist!";
|
public string NotFound => "Character not found!";
|
||||||
public string ValkAddedAll => "Granted all characters to player!";
|
public string Added => "Granted {0} character(s) to player!";
|
||||||
public string ValkAdded => "Granted character {0} to player!";
|
public string UpdateLevel => "Set {1} character(s) to level {0}!";
|
||||||
public string ValkSetLevelAll => "Set all characters to level {0}!";
|
|
||||||
public string ValkSetLevel => "Set character {0} to level {1}!";
|
|
||||||
public string ValkSetStarAll => "Set all characters' Resonance to {0}!";
|
|
||||||
public string ValkSetStar => "Set character {0}'s Resonance to {1}!";
|
|
||||||
public string ValkSetSkillLevelAll => "Set all characters' skill levels to max!";
|
|
||||||
public string ValkSetSkillLevel => "Set character {0}'s skill levels to max!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.GiveAll
|
|
||||||
/// </summary>
|
|
||||||
public class GiveAllTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Give all items of specified type\n" +
|
|
||||||
"weapon,stigmata";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"Usage: /giveall weapon\n\n" +
|
|
||||||
"Usage: /giveall stigmata\n\n" +
|
|
||||||
"Usage: /giveall material\n\n" +
|
|
||||||
"Usage: /giveall dress\n";
|
|
||||||
|
|
||||||
public string GiveAllItems => "Granted all {0}";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Elf
|
|
||||||
/// </summary>
|
|
||||||
public class ElfTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Set attributes for owned elfs\n" +
|
|
||||||
"Note: -1 means all owned elfs\n";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"Usage: /elf add [ElfID/-1] l<Level> s<Star>\n\n";
|
|
||||||
|
|
||||||
public string ElfNotFound => "Elf does not exist!";
|
|
||||||
public string ElfAddedAll => "Granted all Elfs to player!";
|
|
||||||
public string ElfAdded => "Granted Elf {0} to player!";
|
|
||||||
public string ElfSetLevelAll => "Set all Elfs to level {0}!";
|
|
||||||
public string ElfSetLevel => "Set Elf {0} to level {1}!";
|
|
||||||
public string ElfSetStarAll => "Set all Elf's Resonance to {0}!";
|
|
||||||
public string ElfSetStar => "Set Elf {0}'s Resonance to {1}!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Abyss
|
|
||||||
/// </summary>
|
|
||||||
public class AbyssTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Set abyss disturbance,bracket,site \n";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"Usage: /abyss bracket [1-9]\n\n" +
|
|
||||||
"Usage: /abyss temp [value]\n\n" +
|
|
||||||
"Usage: /abyss site [siteId]\n";
|
|
||||||
|
|
||||||
public string Success => "Success set {0}";
|
|
||||||
public string AreaNotFound => "SiteId Not Found";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Endless
|
|
||||||
/// </summary>
|
|
||||||
public class EndlessTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Set Memorial Arena boss \n";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"Usage: /endless [bossid1] [bossid2] [bossid3]\n\n" +
|
|
||||||
"/endless 1001 1002 1003";
|
|
||||||
|
|
||||||
public string Success => "Success set Memorial Arena Boss";
|
|
||||||
public string NotFound => "BossId Not Found";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
88
GameServer/Command/Commands/CommandGirl.cs
Normal file
88
GameServer/Command/Commands/CommandGirl.cs
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
using MikuSB.Data;
|
||||||
|
using MikuSB.Database.Character;
|
||||||
|
using MikuSB.Enums.Item;
|
||||||
|
using MikuSB.Enums.Player;
|
||||||
|
using MikuSB.GameServer.Server.Packet.Send.Misc;
|
||||||
|
using MikuSB.Internationalization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Command.Commands;
|
||||||
|
|
||||||
|
[CommandInfo("girl", "Game.Command.Girl.Desc", "Game.Command.Girl.Usage", ["g"], [PermEnum.Admin, PermEnum.Support])]
|
||||||
|
public class CommandGirl : ICommands
|
||||||
|
{
|
||||||
|
[CommandMethod("add")]
|
||||||
|
public async ValueTask AddGirl(CommandArg arg)
|
||||||
|
{
|
||||||
|
if (!await arg.CheckOnlineTarget()) return;
|
||||||
|
if (!await arg.CheckArgCnt(1)) return;
|
||||||
|
if (await arg.GetOption('p') is not int particular) return;
|
||||||
|
if (await arg.GetOption('l') is not int level) return;
|
||||||
|
if (await arg.GetOption('s') is not int star) return;
|
||||||
|
|
||||||
|
var detail = arg.GetInt(0);
|
||||||
|
level = Math.Clamp(level, 1, 80);
|
||||||
|
star = Math.Clamp(star, 1, 9);
|
||||||
|
var player = arg.Target!.Player!;
|
||||||
|
List<CharacterInfo> girls = [];
|
||||||
|
if (detail == -1)
|
||||||
|
{
|
||||||
|
// add all
|
||||||
|
foreach (var config in GameData.CardData.Values)
|
||||||
|
{
|
||||||
|
var character = await arg.Target!.Player!.CharacterManager!
|
||||||
|
.AddCharacter((ItemTypeEnum)config.Genre, config.Detail, config.Particular, config.Level,(uint)star,false);
|
||||||
|
if (character != null) girls.Add(character);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var girl = await player.CharacterManager!.AddCharacter(ItemTypeEnum.TYPE_CARD,(uint)detail,(uint)particular,1,(uint)star, false);
|
||||||
|
if (girl == null)
|
||||||
|
{
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Girl.NotFound"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
girls.Add(girl);
|
||||||
|
}
|
||||||
|
if (girls.Count > 0) await player.SendPacket(new PacketNtfCallScript(girls));
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Girl.Added", girls.Count.ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
[CommandMethod("level")]
|
||||||
|
public async ValueTask UpdateGirlLevel(CommandArg arg)
|
||||||
|
{
|
||||||
|
if (!await arg.CheckOnlineTarget()) return;
|
||||||
|
if (!await arg.CheckArgCnt(2)) return;
|
||||||
|
|
||||||
|
var guid = arg.GetInt(0);
|
||||||
|
var level = arg.GetInt(1);
|
||||||
|
level = Math.Clamp(level, 1, 80);
|
||||||
|
|
||||||
|
var player = arg.Target!.Player!;
|
||||||
|
List<CharacterInfo> girls = [];
|
||||||
|
if (guid == -1)
|
||||||
|
{
|
||||||
|
// update all
|
||||||
|
foreach(var girl in player.CharacterManager.CharacterData.Characters)
|
||||||
|
{
|
||||||
|
girl.Level = (uint)level;
|
||||||
|
girls.Add(girl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var girl = player.CharacterManager!.GetCharacterByGUID((uint)guid);
|
||||||
|
if (girl == null)
|
||||||
|
{
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Girl.NotFound"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
girl.Level = (uint)level;
|
||||||
|
girls.Add(girl);
|
||||||
|
}
|
||||||
|
if (girls.Count > 0) await player.SendPacket(new PacketNtfCallScript(girls));
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Girl.UpdateLevel",
|
||||||
|
level.ToString(),
|
||||||
|
girls.Count.ToString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,8 @@ using MikuSB.Database;
|
|||||||
using MikuSB.Database.Character;
|
using MikuSB.Database.Character;
|
||||||
using MikuSB.Enums.Item;
|
using MikuSB.Enums.Item;
|
||||||
using MikuSB.GameServer.Game.Player;
|
using MikuSB.GameServer.Game.Player;
|
||||||
|
using MikuSB.GameServer.Server.Packet.Send.Login;
|
||||||
|
using MikuSB.Proto;
|
||||||
using MikuSB.Util.Extensions;
|
using MikuSB.Util.Extensions;
|
||||||
|
|
||||||
namespace MikuSB.GameServer.Game.Character;
|
namespace MikuSB.GameServer.Game.Character;
|
||||||
@@ -11,9 +13,9 @@ namespace MikuSB.GameServer.Game.Character;
|
|||||||
public class CharacterManager(PlayerInstance player) : BasePlayerManager(player)
|
public class CharacterManager(PlayerInstance player) : BasePlayerManager(player)
|
||||||
{
|
{
|
||||||
public CharacterData CharacterData { get; } = DatabaseHelper.GetInstanceOrCreateNew<CharacterData>(player.Uid);
|
public CharacterData CharacterData { get; } = DatabaseHelper.GetInstanceOrCreateNew<CharacterData>(player.Uid);
|
||||||
public async ValueTask<CardExcel?> AddCharacter(ItemTypeEnum genre, uint detail, uint particular, uint level = 1)
|
public async ValueTask<CharacterInfo?> AddCharacter(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, uint star = 1, bool sendPacket = true)
|
||||||
{
|
{
|
||||||
var characterId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level);
|
var characterId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,1);
|
||||||
if (CharacterData.Characters.Any(a => a.TemplateId == characterId)) return null;
|
if (CharacterData.Characters.Any(a => a.TemplateId == characterId)) return null;
|
||||||
var CharacterExcel = GameData.CardData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular);
|
var CharacterExcel = GameData.CardData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular);
|
||||||
if (CharacterExcel == null) return null;
|
if (CharacterExcel == null) return null;
|
||||||
@@ -23,7 +25,7 @@ public class CharacterManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
Guid = CharacterData.NextCharacterGuid++,
|
Guid = CharacterData.NextCharacterGuid++,
|
||||||
TemplateId = characterId,
|
TemplateId = characterId,
|
||||||
Level = level,
|
Level = level,
|
||||||
Break = CharacterExcel.InitBreak,
|
Break = star,
|
||||||
Timestamp = Extensions.GetUnixSec(),
|
Timestamp = Extensions.GetUnixSec(),
|
||||||
Flag = ItemFlagEnum.FLAG_READED
|
Flag = ItemFlagEnum.FLAG_READED
|
||||||
};
|
};
|
||||||
@@ -31,16 +33,14 @@ public class CharacterManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
var weaponInfo = await Player.InventoryManager!.AddWeaponItem((ItemTypeEnum)CharacterExcel.DefaultWeaponGPDL[0], CharacterExcel.DefaultWeaponGPDL[1], CharacterExcel.DefaultWeaponGPDL[2], (uint)CharacterExcel.DefaultWeaponGPDL[3]);
|
var weaponInfo = await Player.InventoryManager!.AddWeaponItem((ItemTypeEnum)CharacterExcel.DefaultWeaponGPDL[0], CharacterExcel.DefaultWeaponGPDL[1], CharacterExcel.DefaultWeaponGPDL[2], (uint)CharacterExcel.DefaultWeaponGPDL[3]);
|
||||||
if (weaponInfo != null) character.WeaponUniqueId = weaponInfo.UniqueId;
|
if (weaponInfo != null) character.WeaponUniqueId = weaponInfo.UniqueId;
|
||||||
|
|
||||||
//var skinInfo = await Player.InventoryManager!.AddSkinItem(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level);
|
var skinInfo = Player.InventoryManager!.GetSkinItemGDPL(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level)
|
||||||
var skinInfo = Player.InventoryManager!.GetSkinItemGDPL(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level);
|
?? await Player.InventoryManager!.AddSkinItem(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level);
|
||||||
if (skinInfo != null)
|
if (skinInfo != null) character.SkinId = skinInfo.UniqueId;
|
||||||
{
|
|
||||||
character.SkinId = skinInfo.UniqueId;
|
if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([character]));
|
||||||
character.UnlockedSkin.Add(skinInfo.UniqueId);
|
|
||||||
}
|
|
||||||
|
|
||||||
CharacterData.Characters.Add(character);
|
CharacterData.Characters.Add(character);
|
||||||
return CharacterExcel;
|
return character;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharacterInfo? GetCharacter(ulong TemplateId)
|
public CharacterInfo? GetCharacter(ulong TemplateId)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
}
|
}
|
||||||
foreach (var card in GameData.CardData.Values)
|
foreach (var card in GameData.CardData.Values)
|
||||||
{
|
{
|
||||||
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level);
|
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level, sendPacket:false);
|
||||||
}
|
}
|
||||||
foreach (var supplies in GameData.AllSuppliesData)
|
foreach (var supplies in GameData.AllSuppliesData)
|
||||||
{
|
{
|
||||||
|
|||||||
23
GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs
Normal file
23
GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using MikuSB.Database.Character;
|
||||||
|
using MikuSB.Proto;
|
||||||
|
using MikuSB.TcpSharp;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.Packet.Send.Misc;
|
||||||
|
|
||||||
|
public class PacketNtfCallScript : BasePacket
|
||||||
|
{
|
||||||
|
public PacketNtfCallScript(List<CharacterInfo> Characters) : base(CmdIds.NtfScript)
|
||||||
|
{
|
||||||
|
var proto = new NtfCallScript
|
||||||
|
{
|
||||||
|
Api = "",
|
||||||
|
Arg = "{}",
|
||||||
|
ExtraSync = new NtfSyncPlayer
|
||||||
|
{
|
||||||
|
Items = { Characters.Select(x => x.ToProto()) }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SetData(proto);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user