diff --git a/Common/Internationalization/Message/LanguageCHS.cs b/Common/Internationalization/Message/LanguageCHS.cs index 10b9c6d..5f2205a 100644 --- a/Common/Internationalization/Message/LanguageCHS.cs +++ b/Common/Internationalization/Message/LanguageCHS.cs @@ -118,28 +118,8 @@ public class WordTextCHS public class CommandTextCHS { 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 KickTextCHS Kick { 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(); + public GirlTextCHS Girl { get; } = new(); } #endregion @@ -212,90 +192,6 @@ public class NoticeTextCHS public string InternalError => "在处理命令时发生了内部错误: {0}!"; } -/// -/// path: Game.Command.Gender -/// -public class GenderTextCHS -{ - public string Desc => "切换主角的性别"; - public string Usage => "用法: /gender [man/woman]"; - public string GenderNotSpecified => "性别不存在!"; - public string GenderChanged => "性别已更改!"; -} - -/// -/// path: Game.Command.UnlockAll -/// -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}!"; -} - -/// -/// path: Game.Command.Avatar -/// -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 => "角色不存在!"; -} - -/// -/// path: Game.Command.Give -/// -public class GiveTextCHS -{ - public string Desc => "给予玩家物品"; - public string Usage => "用法: /give [物品ID] l[等级] x[数量] r[叠影]"; - public string ItemNotFound => "未找到物品!"; - public string GiveItem => "已给予 {0} {1} 个物品 {2}."; -} - -/// -/// path: Game.Command.GiveAll -/// -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} 个."; -} - -/// -/// path: Game.Command.Lineup -/// -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 => "成功治愈当前队伍中的所有角色!"; -} - /// /// path: Game.Command.Help /// @@ -311,215 +207,21 @@ public class HelpTextCHS } /// -/// path: Game.Command.Kick +/// path: Game.Command.Girl /// -public class KickTextCHS +public class GirlTextCHS { - public string Desc => "踢出玩家"; - public string Usage => "用法: /kick"; - public string PlayerKicked => "玩家 {0} 已被踢出!"; -} + public string Desc => "添加角色到玩家\n" + + "detail 和 particular 可在 Resources/ExcelOutput/card.json 中查看\n\n" + + "注意:-1 表示所有角色\n"; -/// -/// path: Game.Command.Mission -/// -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 => - "用法: /mission pass\n" + - "用法: /mission finish [子任务ID]\n" + - "用法: /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}."; -} + "用法: /girl add -p -l -s\n" + + "用法: /girl level "; -/// -/// path: Game.Command.Relic -/// -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}."; -} - -/// -/// path: Game.Command.Reload -/// -public class ReloadTextCHS -{ - public string Desc => "重新加载指定的配置"; - public string Usage => "用法: /reload [banner/activity]"; - public string ConfigReloaded => "配置 {0} 已重新加载!"; -} - -/// -/// path: Game.Command.Rogue -/// -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 => "玩家不在模拟宇宙中!"; -} - -/// -/// path: Game.Command.Scene -/// -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}."; -} - -/// -/// path: Game.Command.Mail -/// -public class MailTextCHS -{ - public string Desc => "发送邮件"; - public string Usage => "用法: /mail [发送名称] [标题] [内容] [ID1:数量,ID2:数量]"; - public string MailSent => "邮件已发送!"; -} - -/// -/// path: Game.Command.Raid -/// -public class RaidTextCHS -{ - public string Desc => "管理玩家的任务临时场景"; - public string Usage => "用法: /raid leave"; - public string Leaved => "已离开临时场景!"; -} - -/// -/// path: Game.Command.Account -/// -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} 删除成功!"; -} - -/// -/// path: Game.Command.Announce -/// -public class AnnounceTextCHS -{ - public string Desc => "发送弹窗公告"; - public string Usage => "用法: /announce [Text] [Color]"; - public string SendSuccess => "发送成功!"; -} - -/// -/// path: Game.Command.Ban -/// -public class BanTextCHS -{ - public string Desc => "封禁或解封用户"; - public string Usage => "用法: /ban [add/delete]"; - public string BanSuccess => "账号已封禁!"; - public string UnBanSuccess => "账号已解封!"; -} - -/// -/// path: Game.Command.Unstuck -/// -public class UnstuckTextCHS -{ - public string Desc => "将玩家传送回默认场景"; - public string Usage => "用法: /unstuck [UID]"; - public string UnstuckSuccess => "已成功将该玩家传送回默认场景."; - public string UidNotExist => "该UID不存在!"; - public string PlayerIsOnline => "该玩家目前在线上!"; -} - -/// -/// path: Game.Command.Setlevel -/// -public class SetlevelTextCHS -{ - public string Desc => "设定玩家等级"; - public string Usage => "用法: /setlevel [等级]"; - public string SetlevelSuccess => "等级设定成功!"; -} - -/// -/// path: Game.Command.Permission -/// -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} 的所有权限!"; + public string NotFound => "角色不存在!"; + public string Added => "已为玩家添加 {0} 个角色!"; + public string UpdateLevel => "已将 {1} 个角色等级设置为 {0}!"; } #endregion diff --git a/Common/Internationalization/Message/LanguageCHT.cs b/Common/Internationalization/Message/LanguageCHT.cs index 18617f9..2723cf6 100644 --- a/Common/Internationalization/Message/LanguageCHT.cs +++ b/Common/Internationalization/Message/LanguageCHT.cs @@ -118,28 +118,8 @@ public class WordTextCHT public class CommandTextCHT { 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 KickTextCHT Kick { 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(); + public GirlTextCHT Girl { get; } = new(); } #endregion @@ -212,92 +192,6 @@ public class NoticeTextCHT public string InternalError => "在處理命令時發生了內部錯誤: {0}!"; } -/// -/// path: Game.Command.Gender -/// -public class GenderTextCHT -{ - public string Desc => "切換主角的性別"; - public string Usage => "用法: /gender [man/woman]"; - public string GenderNotSpecified => "性別不存在!"; - public string GenderChanged => "性別已更改!"; -} - -/// -/// path: Game.Command.UnlockAll -/// -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}!"; -} - -/// -/// path: Game.Command.Avatar -/// -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 => "角色不存在!"; -} - -/// -/// path: Game.Command.Give -/// -public class GiveTextCHT -{ - public string Desc => "給予玩家物品"; - public string Usage => "用法: /give [物品ID] l[等級] x[數量] r[疊影]"; - public string ItemNotFound => "未找到物品!"; - public string GiveItem => "給予 @{0} {1} 個物品 {2}."; -} - -/// -/// path: Game.Command.GiveAll -/// -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} 個."; -} - -/// -/// path: Game.Command.Lineup -/// -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 => "成功治愈當前隊伍中的所有角色!"; -} - /// /// path: Game.Command.Help /// @@ -313,216 +207,21 @@ public class HelpTextCHT } /// -/// path: Game.Command.Kick +/// path: Game.Command.Girl /// -public class KickTextCHT +public class GirlTextCHT { - public string Desc => "踢出玩家"; - public string Usage => "用法: /kick"; - public string PlayerKicked => "玩家 {0} 已被踢出!"; -} - -/// -/// path: Game.Command.Mission -/// -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 Desc => "新增角色到玩家\n" + + "detail 和 particular 可在 Resources/ExcelOutput/card.json 中查看\n\n" + + "注意:-1 表示所有角色\n"; public string Usage => - "用法: /mission pass\n" + - "用法: /mission finish [子任務]\n" + - "用法: /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}."; -} + "用法: /girl add -p -l -s\n" + + "用法: /girl level "; -/// -/// path: Game.Command.Relic -/// -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}."; -} - -/// -/// path: Game.Command.Reload -/// -public class ReloadTextCHT -{ - public string Desc => "重新加載指定的配置"; - public string Usage => "用法: /reload [banner/activity]"; - public string ConfigReloaded => "配置 {0} 已重新加載!"; -} - -/// -/// path: Game.Command.Rogue -/// -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 => "玩家不在模擬宇宙中!"; -} - -/// -/// path: Game.Command.Scene -/// -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}."; -} - -/// -/// path: Game.Command.Mail -/// -public class MailTextCHT -{ - public string Desc => "發送郵件"; - public string Usage => "用法: /mail [發送名稱] [標題] [內容] [ID1:數量,ID2:數量]"; - public string MailSent => "郵件已發送!"; -} - -/// -/// path: Game.Command.Raid -/// -public class RaidTextCHT -{ - public string Desc => "管理玩家的任務臨時場景"; - public string Usage => "用法: /raid leave"; - public string Leaved => "已離開臨時場景!"; -} - -/// -/// path: Game.Command.Account -/// -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} 刪除成功!"; -} - -/// -/// path: Game.Command.Announce -/// -public class AnnounceTextCHT -{ - public string Desc => "發送彈窗公告"; - public string Usage => "用法: /announce [Text] [Color]"; - public string SendSuccess => "發送成功!"; -} - -/// -/// path: Game.Command.Ban -/// -public class BanTextCHT -{ - public string Desc => "封禁或解封用户"; - public string Usage => "用法: /ban [add/delete]"; - public string BanSuccess => "帳號已封禁!"; - public string UnBanSuccess => "帳號已解封!"; -} - -/// -/// path: Game.Command.Unstuck -/// -public class UnstuckTextCHT -{ - public string Desc => "將玩家傳送回默認場景"; - public string Usage => "用法: /unstuck [UID]"; - public string UnstuckSuccess => "已成功將該玩家傳送回默認場景"; - public string UidNotExist => "該UID不存在!"; - public string PlayerIsOnline => "該玩家目前在線上!"; -} - -/// -/// path: Game.Command.Setlevel -/// -public class SetlevelTextCHT -{ - public string Desc => "設定玩家等級"; - public string Usage => "用法: /setlevel [等級]"; - public string SetlevelSuccess => "等級設定成功!"; -} - -/// -/// path: Game.Command.Permission -/// -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} 的所有權限!"; + public string NotFound => "角色不存在!"; + public string Added => "已為玩家新增 {0} 個角色!"; + public string UpdateLevel => "已將 {1} 個角色等級設為 {0}!"; } #endregion diff --git a/Common/Internationalization/Message/LanguageEN.cs b/Common/Internationalization/Message/LanguageEN.cs index 38087f6..25e3c7a 100644 --- a/Common/Internationalization/Message/LanguageEN.cs +++ b/Common/Internationalization/Message/LanguageEN.cs @@ -81,11 +81,7 @@ public class CommandTextEN { public NoticeTextEN Notice { get; } = new(); public HelpTextEN Help { get; } = new(); - public ValkTextEN Valk { get; } = new(); - public GiveAllTextEN GiveAll { get; } = new(); - public ElfTextEN Elf { get; } = new(); - public AbyssTextEN Abyss { get; } = new(); - public EndlessTextEN Endless { get; } = new(); + public GirlTextEN Girl { get; } = new(); } #endregion @@ -180,96 +176,21 @@ public class HelpTextEN } /// -/// path: Game.Command.Valk +/// path: Game.Command.Girl /// -public class ValkTextEN +public class GirlTextEN { - public string Desc => "Set attributes for owned characters\n" + - "Note: -1 means all owned characters\n"; + public string Desc => "Add characters to player\n" + + "detail and particular can be found in Resources/ExcelOutput/card.json\n\n" + + "Note: -1 means all characters\n"; public string Usage => - "Usage: /valk add [ValkID/-1] l s\n\n" + - "Usage: /valk level [ValkID/-1] [Level]\n\n" + - "Usage: /valk star [ValkID/-1] [Star]\n\n" + - "Usage: /valk skill [ValkID/-1] for max skill level"; + "Usage: /girl add -p -l -s\n" + + "Usage: /girl level "; - public string ValkNotFound => "Character does not exist!"; - public string ValkAddedAll => "Granted all characters to player!"; - public string ValkAdded => "Granted character {0} to player!"; - 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!"; -} - -/// -/// path: Game.Command.GiveAll -/// -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}"; -} - -/// -/// path: Game.Command.Elf -/// -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 s\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}!"; -} - -/// -/// path: Game.Command.Abyss -/// -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"; -} - -/// -/// path: Game.Command.Endless -/// -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"; + public string NotFound => "Character not found!"; + public string Added => "Granted {0} character(s) to player!"; + public string UpdateLevel => "Set {1} character(s) to level {0}!"; } #endregion diff --git a/GameServer/Command/Commands/CommandGirl.cs b/GameServer/Command/Commands/CommandGirl.cs new file mode 100644 index 0000000..32b719c --- /dev/null +++ b/GameServer/Command/Commands/CommandGirl.cs @@ -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 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 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())); + } +} \ No newline at end of file diff --git a/GameServer/Game/Character/CharacterManager.cs b/GameServer/Game/Character/CharacterManager.cs index 7e332b0..6e40055 100644 --- a/GameServer/Game/Character/CharacterManager.cs +++ b/GameServer/Game/Character/CharacterManager.cs @@ -4,6 +4,8 @@ using MikuSB.Database; using MikuSB.Database.Character; using MikuSB.Enums.Item; using MikuSB.GameServer.Game.Player; +using MikuSB.GameServer.Server.Packet.Send.Login; +using MikuSB.Proto; using MikuSB.Util.Extensions; namespace MikuSB.GameServer.Game.Character; @@ -11,9 +13,9 @@ namespace MikuSB.GameServer.Game.Character; public class CharacterManager(PlayerInstance player) : BasePlayerManager(player) { public CharacterData CharacterData { get; } = DatabaseHelper.GetInstanceOrCreateNew(player.Uid); - public async ValueTask AddCharacter(ItemTypeEnum genre, uint detail, uint particular, uint level = 1) + public async ValueTask 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; var CharacterExcel = GameData.CardData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular); if (CharacterExcel == null) return null; @@ -23,7 +25,7 @@ public class CharacterManager(PlayerInstance player) : BasePlayerManager(player) Guid = CharacterData.NextCharacterGuid++, TemplateId = characterId, Level = level, - Break = CharacterExcel.InitBreak, + Break = star, Timestamp = Extensions.GetUnixSec(), 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]); 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); - if (skinInfo != null) - { - character.SkinId = skinInfo.UniqueId; - character.UnlockedSkin.Add(skinInfo.UniqueId); - } + 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) character.SkinId = skinInfo.UniqueId; + + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([character])); CharacterData.Characters.Add(character); - return CharacterExcel; + return character; } public CharacterInfo? GetCharacter(ulong TemplateId) diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index cd03588..2964cf0 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -68,7 +68,7 @@ public class PlayerInstance(PlayerGameData data) } 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) { diff --git a/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs b/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs new file mode 100644 index 0000000..52fac28 --- /dev/null +++ b/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs @@ -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 Characters) : base(CmdIds.NtfScript) + { + var proto = new NtfCallScript + { + Api = "", + Arg = "{}", + ExtraSync = new NtfSyncPlayer + { + Items = { Characters.Select(x => x.ToProto()) } + } + }; + + SetData(proto); + } +}