mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-15 14:24:34 +01:00
feat: add valk command
This commit is contained in:
@@ -9,6 +9,8 @@ public class AvatarDataExcel : ExcelResource
|
|||||||
[JsonPropertyName("unlockStar")] public int UnlockStar { get; set; }
|
[JsonPropertyName("unlockStar")] public int UnlockStar { get; set; }
|
||||||
[JsonPropertyName("initialWeapon")] public int InitialWeapon { get; set; }
|
[JsonPropertyName("initialWeapon")] public int InitialWeapon { get; set; }
|
||||||
[JsonPropertyName("skillList")] public List<int> SkillList { get; set; } = [];
|
[JsonPropertyName("skillList")] public List<int> SkillList { get; set; } = [];
|
||||||
|
public string FaceAnimationGroupName { get; set; } = "";
|
||||||
|
|
||||||
public int DefaultDressId { get; set; }
|
public int DefaultDressId { get; set; }
|
||||||
|
|
||||||
public override int GetId()
|
public override int GetId()
|
||||||
|
|||||||
@@ -164,8 +164,6 @@ public class DatabaseHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ public class PlayerData : BaseDatabaseDataHelper
|
|||||||
public int Exp { get; set; } = 0;
|
public int Exp { get; set; } = 0;
|
||||||
public int HCoin { get; set; } = 0;
|
public int HCoin { get; set; } = 0;
|
||||||
public int Stamina { get; set; } = 240;
|
public int Stamina { get; set; } = 240;
|
||||||
public int HeadIcon { get; set; } = 161090;
|
public int HeadIcon { get; set; } = 161001;
|
||||||
public int HeadFrame { get; set; } = 200001;
|
public int HeadFrame { get; set; } = 200001;
|
||||||
public int WarshipId { get; set; } = 400004;
|
public int WarshipId { get; set; } = 0;
|
||||||
public int PhonePendantId { get; set; } = 350005;
|
public int PhonePendantId { get; set; } = 350005;
|
||||||
public int AssistantAvatarId { get; set; } = 101;
|
public int AssistantAvatarId { get; set; } = 101;
|
||||||
public int BirthDay { get; set; } = 0;
|
public int BirthDay { get; set; } = 0;
|
||||||
|
|||||||
@@ -118,30 +118,8 @@ public class WordTextEN
|
|||||||
public class CommandTextEN
|
public class CommandTextEN
|
||||||
{
|
{
|
||||||
public NoticeTextEN Notice { get; } = new();
|
public NoticeTextEN Notice { get; } = new();
|
||||||
|
|
||||||
public GenderTextEN Gender { get; } = new();
|
|
||||||
public AvatarTextEN Avatar { get; } = new();
|
|
||||||
public AnnounceTextEN Announce { get; } = new();
|
|
||||||
public BanTextEN Ban { get; } = new();
|
|
||||||
public GiveTextEN Give { get; } = new();
|
|
||||||
public GiveAllTextEN GiveAll { get; } = new();
|
|
||||||
public LineupTextEN Lineup { get; } = new();
|
|
||||||
public HelpTextEN Help { get; } = new();
|
public HelpTextEN Help { get; } = new();
|
||||||
public KickTextEN Kick { get; } = new();
|
public ValkTextEN Valk { get; } = new();
|
||||||
public MissionTextEN Mission { get; } = new();
|
|
||||||
public RelicTextEN Relic { get; } = new();
|
|
||||||
public ReloadTextEN Reload { get; } = new();
|
|
||||||
public RogueTextEN Rogue { get; } = new();
|
|
||||||
public SceneTextEN Scene { get; } = new();
|
|
||||||
public UnlockAllTextEN UnlockAll { get; } = new();
|
|
||||||
public MailTextEN Mail { get; } = new();
|
|
||||||
public RaidTextEN Raid { get; } = new();
|
|
||||||
public AccountTextEN Account { get; } = new();
|
|
||||||
public UnstuckTextEN Unstuck { get; } = new();
|
|
||||||
public SetlevelTextEN Setlevel { get; } = new();
|
|
||||||
public PermissionTextEN Permission { get; } = new();
|
|
||||||
public RemoveItemTextEN RemoveItem { get; } = new();
|
|
||||||
public SkipTextEN Skip { get; } = new();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -210,98 +188,14 @@ public class ServerInfoTextEN
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class NoticeTextEN
|
public class NoticeTextEN
|
||||||
{
|
{
|
||||||
public string PlayerNotFound => "Player tidak ditemukan!";
|
public string PlayerNotFound => "Player not found!";
|
||||||
public string InvalidArguments => "Argumen command ngawur!";
|
public string InvalidArguments => "Invalid arguments!";
|
||||||
public string NoPermission => "Ga ada akses buat make command ini!";
|
public string NoPermission => "You don't have permission!";
|
||||||
public string CommandNotFound => "Ga ketemu itu command. Ketik '/help' untuk cek command yang ada.";
|
public string CommandNotFound => "Command not found! Type '/help' for assistance";
|
||||||
public string TargetNotFound => "Target {0} tidak ditemukan!";
|
public string TargetOffline => "Target {0}({1}) is offline! Clearing current target";
|
||||||
public string TargetOffline => "Target {0}({1}) lagi offline! Target akan di clear.";
|
public string TargetFound => "Target {0}({1}) found. Next command will default to this target";
|
||||||
public string TargetFound => "Online player {0}({1}) ditemukan, command selanjutnya bakal target dia secara default.";
|
public string TargetNotFound => "Target {0} not found!";
|
||||||
public string InternalError => "Error menjalankan command! {0}";
|
public string InternalError => "Internal error occurred while processing command!";
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Gender
|
|
||||||
/// </summary>
|
|
||||||
public class GenderTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Ganti gender & path";
|
|
||||||
public string Usage => "Pengunaan: /gender [man/woman] [id path]";
|
|
||||||
public string GenderNotSpecified => "Gender tidak ditemukan!";
|
|
||||||
public string GenderChanged => "Gender telah diganti!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.UnlockAll
|
|
||||||
/// </summary>
|
|
||||||
public class UnlockAllTextEN
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"Sesuai nama, unlock semuanya." +
|
|
||||||
"'/unlockall mission' buat finish all missions. Nanti bakal di kick setelah jalanin. Ada kemungkinan bakal stuck di tutorial, gunakan dengan hati-hati" +
|
|
||||||
"'/unlockall tutorial' buat unlock all tutorials. Nanti bakal di kick setelah jalanin. Dipakai untuk ketika stuck in some pages\n" +
|
|
||||||
"'/unlockall rogue' buat unlock all rogue types. Nanti bakal di kick setelah jalanin. Pakai bersamaan dengan '/unlockall tutorial' untuk dapatkan performance yg lebih baik";
|
|
||||||
public string Usage => "Penggunaan: /unlockall [mission/tutorial/rogue]";
|
|
||||||
public string UnlockedAll => "Unlocked All {0}!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Avatar
|
|
||||||
/// </summary>
|
|
||||||
public class AvatarTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Set properti untuk karakter yang dimiliki. Untuk target semua karakter, set Avatar ID ke -1 ya!";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /avatar talent [Avatar ID/-1] [Talent Level]\n" +
|
|
||||||
"Penggunaan: /avatar rank [Avatar ID/-1] [Rank]\n" +
|
|
||||||
"Penggunaan: /avatar level [Avatar ID/-1] [Avatar Level]";
|
|
||||||
public string InvalidLevel => "Invalid {0} level!";
|
|
||||||
public string AllAvatarsLevelSet => "Semua karakter {0}nya telah di set ke level {1}.";
|
|
||||||
public string AvatarLevelSet => "Karakter {0} {1}nya telah di set ke level {2}";
|
|
||||||
public string AvatarNotFound => "Karakter tidak ditemukan!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Give
|
|
||||||
/// </summary>
|
|
||||||
public class GiveTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Untuk memberi item ke player. Jangan pakai ini untuk relic.";
|
|
||||||
public string Usage => "Penggunaan: /give [item ID] l[level] x[jumlah] r[rank]";
|
|
||||||
public string ItemNotFound => "Item tidak ditemukan!";
|
|
||||||
public string GiveItem => "Telah diberi {0} {1} item {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.GiveAll
|
|
||||||
/// </summary>
|
|
||||||
public class GiveAllTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Untuk memberi player semua jenis item.";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /giveall avatar r[rank] l[level]\n" +
|
|
||||||
"Penggunaan: /giveall material x[jumlah]\n" +
|
|
||||||
"Penggunaan: /giveall equipment r[rank] l[level] x[jumlah]\n" +
|
|
||||||
"Penggunaan: /giveall relic x[jumlah]\n" +
|
|
||||||
"Penggunaan: /giveall unlock\n" +
|
|
||||||
"Penggunaan: /giveall train\n" +
|
|
||||||
"Penggunaan: /giveall path";
|
|
||||||
public string GiveAllItems => "Telah diberikan semua {0}, masing-masing berjumlah {1}";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Lineup
|
|
||||||
/// </summary>
|
|
||||||
public class LineupTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Atur properti overworld lineup. Mp = tech point, Sp = energy, heal ya heal.";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /lineup mp\n" +
|
|
||||||
"Penggunaan: /lineup sp\n" +
|
|
||||||
"Penggunaan: /lineup heal";
|
|
||||||
public string GainedMp => "Player telah diberikan tech points!";
|
|
||||||
public string GainedSp => "Player telah diberikan energy!";
|
|
||||||
public string HealedAllAvatars => "Satu lineup telah di heal!";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -311,257 +205,28 @@ public class HelpTextEN
|
|||||||
{
|
{
|
||||||
public string Desc => "Show help information";
|
public string Desc => "Show help information";
|
||||||
public string Usage =>
|
public string Usage =>
|
||||||
"Penggunaan: /help\n" +
|
"Usage: /help\n" +
|
||||||
"Penggunaan: /help [cmd]";
|
"Usage: /help [cmd]";
|
||||||
public string Commands => "Commands: ";
|
public string Commands => "Commands: ";
|
||||||
public string CommandUsage => "Penggunaan: ";
|
public string CommandUsage => "Usage: ";
|
||||||
public string CommandPermission => "Level Permission Untuk Akses: ";
|
public string CommandPermission => "Level Permission Untuk Access: ";
|
||||||
public string CommandAlias => "Command Alias:";
|
public string CommandAlias => "Command Alias:";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// path: Game.Command.Kick
|
/// path: Game.Command.Valk
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class KickTextEN
|
public class ValkTextEN
|
||||||
{
|
{
|
||||||
public string Desc => "Kick out player";
|
public string Desc => "Set attributes for owned characters\n" +
|
||||||
public string Usage => "Penggunaan: /kick";
|
"Note: -1 means all owned characters";
|
||||||
public string PlayerKicked => "Player {0} telah di kick!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Mission
|
|
||||||
/// </summary>
|
|
||||||
public class MissionTextEN
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"Mengelola misi pemain\n" +
|
|
||||||
"Gunakan 'pass' untuk menyelesaikan semua misi yang sedang berjalan, perintah ini dapat menyebabkan lag yang parah, harap gunakan '/mission finish' sebagai gantinya\n" +
|
|
||||||
"Gunakan 'finish [SubMissionID]' untuk menyelesaikan sub-misi tertentu, silakan cari ID sub-misi di buku panduan\n" +
|
|
||||||
"Gunakan 'finishmain [MainMissionID]' untuk menyelesaikan misi utama tertentu, silakan cari ID misi utama di buku panduan\n" +
|
|
||||||
"Gunakan 'running <-all>' untuk melihat misi yang sedang dilacak, menambahkan '-all' akan menampilkan semua misi yang sedang berjalan dan kemungkinan misi yang macet, setelah digunakan, daftar misi yang lebih panjang mungkin muncul, harap diperhatikan\n" +
|
|
||||||
"Gunakan 'reaccept' untuk menerima kembali misi utama tertentu, silakan cari ID misi utama di buku panduan";
|
|
||||||
|
|
||||||
public string Usage =>
|
public string Usage =>
|
||||||
"Penggunaan: /mission pass\n" +
|
"Usage: /valk add [AvatarID/-1] l<Level> s<Star>\n\n";
|
||||||
"Penggunaan: /mission finish [ID Sub Misi]\n" +
|
|
||||||
"Penggunaan: /mission running\n" +
|
|
||||||
"Penggunaan: /mission reaccept [ID Misi Utama]\n" +
|
|
||||||
"Penggunaan: /mission finishmain [ID Misi Utama]";
|
|
||||||
|
|
||||||
public string AllMissionsFinished => "Semua tugas telah diselesaikan!";
|
public string ValkNotFound => "Character does not exist!";
|
||||||
public string AllRunningMissionsFinished => "Sebanyak {0} tugas yang sedang berjalan telah diselesaikan!";
|
public string ValkAddedAll => "Granted all characters to player!";
|
||||||
public string MissionFinished => "Tugas {0} telah diselesaikan!";
|
public string ValkAdded => "Granted character {0} to player!";
|
||||||
public string InvalidMissionId => "ID tugas tidak valid!";
|
|
||||||
public string NoRunningMissions => "Tidak ada tugas yang sedang berjalan!";
|
|
||||||
public string RunningMissions => "Tugas yang sedang berjalan: ";
|
|
||||||
public string PossibleStuckMissions => "Tugas yang kemungkinan macet: ";
|
|
||||||
public string MainMission => "Tugas utama";
|
|
||||||
public string MissionReAccepted => "Tugas {0} telah diterima kembali!";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Relic
|
|
||||||
/// </summary>
|
|
||||||
public class RelicTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengelola relic pemain, Batas level: 1 ≤ Level ≤ 9999";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /relic [ID relic] [ID main affix] [ID sub affix:jumlah roll] l[level] x[jumlah]\n" +
|
|
||||||
"Catatan:\n" +
|
|
||||||
"- 'ID sub affix:jumlah roll' dapat diulang hingga 4 kali.\n" +
|
|
||||||
"- Jika tidak diberikan, sub affix akan dipilih secara acak.";
|
|
||||||
public string RelicNotFound => "Relic tidak ditemukan!";
|
|
||||||
public string InvalidMainAffixId => "ID main affix tidak valid!";
|
|
||||||
public string InvalidSubAffixId => "ID sub affix tidak valid!";
|
|
||||||
public string RelicGiven => "Memberikan kepada pemain @{0} {1} relic {2}, main affix {3}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Reload
|
|
||||||
/// </summary>
|
|
||||||
public class ReloadTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Muat ulang konfigurasi yang ditentukan";
|
|
||||||
public string Usage => "Penggunaan: /reload [banner/activity]";
|
|
||||||
public string ConfigReloaded => "Konfigurasi {0} telah dimuat ulang!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Rogue
|
|
||||||
/// </summary>
|
|
||||||
public class RogueTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Command ini tidak work. Digunakan untuk mengelola data pemain dalam simulated universe, -1 berarti semua blessing, 'buff' untuk mendapatkan blessing, 'enhance' untuk meningkatkan blessing";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /rogue money [Jumlah Universe Debris]\n" +
|
|
||||||
"Penggunaan: /rogue buff [ID blessing/-1]\n" +
|
|
||||||
"Penggunaan: /rogue miracle [ID miracle]\n" +
|
|
||||||
"Penggunaan: /rogue enhance [ID blessing/-1]\n" +
|
|
||||||
"Penggunaan: /rogue unstuck - Keluar dari event";
|
|
||||||
public string PlayerGainedMoney => "Pemain mendapatkan {0} universe debris.";
|
|
||||||
public string PlayerGainedAllItems => "Pemain mendapatkan semua {0}.";
|
|
||||||
public string PlayerGainedItem => "Pemain mendapatkan {0} {1}.";
|
|
||||||
public string PlayerEnhancedBuff => "Pemain meningkatkan blessing {0}.";
|
|
||||||
public string PlayerEnhancedAllBuffs => "Pemain meningkatkan semua blessing.";
|
|
||||||
public string PlayerUnstuck => "Pemain keluar dari event.";
|
|
||||||
public string NotFoundItem => "{0} tidak ditemukan!";
|
|
||||||
public string PlayerNotInRogue => "Pemain tidak berada dalam simulated universe!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Scene
|
|
||||||
/// </summary>
|
|
||||||
public class SceneTextEN
|
|
||||||
{
|
|
||||||
public string Desc =>
|
|
||||||
"Mengelola scene pemain\n" +
|
|
||||||
"Catatan: Sebagian besar perintah dalam grup ini digunakan untuk debugging. Pastikan Anda memahami apa yang Anda lakukan sebelum menggunakan perintah apa pun.\n" +
|
|
||||||
"Gunakan 'prop' untuk mengatur status sebuah prop. Untuk daftar status, lihat Common/Enums/Scene/PropStateEnum.cs\n" +
|
|
||||||
"Gunakan 'unlockall' untuk membuka semua prop dalam scene (misalnya, mengatur semua prop yang dapat dibuka ke status 'open'). Perintah ini dapat menyebabkan game terhenti di 90% saat memuat. Gunakan '/scene reset <floorId>' untuk mengatasi masalah ini.\n" +
|
|
||||||
"Gunakan 'change' untuk memasuki scene tertentu. Untuk EntryId, lihat Resources/MapEntrance.json\n" +
|
|
||||||
"Gunakan 'reload' untuk memuat ulang scene saat ini dan kembali ke posisi awal.\n" +
|
|
||||||
"Gunakan 'reset' untuk mengatur ulang status semua prop dalam scene yang ditentukan. Untuk mengetahui FloorId saat ini, gunakan '/scene cur'.";
|
|
||||||
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /scene [entry id]\n" +
|
|
||||||
"Penggunaan: /scene cur\n" +
|
|
||||||
"Penggunaan: /scene reload\n" +
|
|
||||||
"Penggunaan: /scene group\n" +
|
|
||||||
"Penggunaan: /scene unlockall\n" +
|
|
||||||
"Penggunaan: /scene reset [floor id]\n" +
|
|
||||||
"Penggunaan: /scene prop [group id] [prop id] [state]\n" +
|
|
||||||
"Penggunaan: /scene remove [entity id]\n";
|
|
||||||
public string LoadedGroups => "Grup yang dimuat: {0}.";
|
|
||||||
public string PropStateChanged => "Prop: {0} diatur ke status {1}.";
|
|
||||||
public string PropNotFound => "Prop tidak ditemukan!";
|
|
||||||
public string EntityRemoved => "Entity {0} telah dihapus.";
|
|
||||||
public string EntityNotFound => "Entity tidak ditemukan!";
|
|
||||||
public string AllPropsUnlocked => "Semua prop telah dibuka!";
|
|
||||||
public string SceneChanged => "Memasuki scene {0}.";
|
|
||||||
public string SceneReloaded => "Scene telah dimuat ulang!";
|
|
||||||
public string SceneReset => "Status prop di floor {0} telah direset!";
|
|
||||||
public string CurrentScene => "Scene saat ini Entry Id: {0}, Plane Id: {1}, Floor Id: {2}.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Mail
|
|
||||||
/// </summary>
|
|
||||||
public class MailTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengelola mail pemain";
|
|
||||||
public string Usage => "Penggunaan: /mail [namaPengirim] [judul] [isi] [ID1:jumlah,ID2:jumlah]";
|
|
||||||
public string MailSent => "Surat telah dikirim!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Raid
|
|
||||||
/// </summary>
|
|
||||||
public class RaidTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengelola scene sementara pemain";
|
|
||||||
public string Usage => "Penggunaan: /raid leave";
|
|
||||||
public string Leaved => "Keluar dari scene sementara!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Account
|
|
||||||
/// </summary>
|
|
||||||
public class AccountTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengelola akun database";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /account create [username] [UID] [password]\n" +
|
|
||||||
"Penggunaan: /account delete [UID]";
|
|
||||||
public string InvalidUid => "Argumen UID tidak valid!";
|
|
||||||
public string InvalidAccount => "Akun {0} tidak valid!";
|
|
||||||
public string CreateSuccess => "Akun {0} berhasil dibuat!";
|
|
||||||
public string DeleteSuccess => "Akun {0} berhasil dihapus!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Announce
|
|
||||||
/// </summary>
|
|
||||||
public class AnnounceTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengirim pengumuman sistem pusat";
|
|
||||||
public string Usage => "Penggunaan: /announce [Teks] [Warna]";
|
|
||||||
public string SendSuccess => "Pengumuman berhasil dikirim!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Ban
|
|
||||||
/// </summary>
|
|
||||||
public class BanTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Blokir atau buka blokir pengguna";
|
|
||||||
public string Usage => "Penggunaan: /ban [add/delete]";
|
|
||||||
public string BanSuccess => "Akun telah diblokir!";
|
|
||||||
public string UnBanSuccess => "Akun telah dibuka blokirnya!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Unstuck
|
|
||||||
/// </summary>
|
|
||||||
public class UnstuckTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Teleport pemain kembali ke lokasi default";
|
|
||||||
public string Usage => "Penggunaan: /unstuck [UID]";
|
|
||||||
public string UnstuckSuccess => "Berhasil memindahkan pemain kembali ke lokasi default.";
|
|
||||||
public string UidNotExist => "UID tidak ditemukan!";
|
|
||||||
public string PlayerIsOnline => "Pemain sedang online!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Setlevel
|
|
||||||
/// </summary>
|
|
||||||
public class SetlevelTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengatur level pemain";
|
|
||||||
public string Usage => "Penggunaan: /setlevel [Level]";
|
|
||||||
public string SetlevelSuccess => "Berhasil mengatur level pemain!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Permission
|
|
||||||
/// </summary>
|
|
||||||
public class PermissionTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Mengelola permission pemain";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /permission add [permission]\n" +
|
|
||||||
"Penggunaan: /permission remove [permission]\n" +
|
|
||||||
"Penggunaan: /permission clean [permission]";
|
|
||||||
public string InvalidPerm => "Permission {0} tidak ditemukan!";
|
|
||||||
public string Added => "Menambahkan permission {0} ke pemain {1}!";
|
|
||||||
public string Removed => "Menghapus permission {1} dari pemain {0}!";
|
|
||||||
public string Cleaned => "Menghapus semua permission dari pemain {0}!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.RemoveItem
|
|
||||||
/// </summary>
|
|
||||||
public class RemoveItemTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Menghapus Relic atau Lightcone";
|
|
||||||
public string Usage =>
|
|
||||||
"Penggunaan: /remove relic\n" +
|
|
||||||
"Penggunaan: /remove lightcone";
|
|
||||||
public string InvalidPerm => "Permission {0} tidak ditemukan!";
|
|
||||||
public string RemovedRelics => "Relic telah dihapus dari pemain {0}!";
|
|
||||||
public string RemovedLightcones => "Lightcone telah dihapus dari pemain {0}!";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// path: Game.Command.Skip
|
|
||||||
/// </summary>
|
|
||||||
public class SkipTextEN
|
|
||||||
{
|
|
||||||
public string Desc => "Skip 1st half MOC / PF / AS dan langsung ke 2nd half";
|
|
||||||
public string Usage => "Penggunaan: /skip" ;
|
|
||||||
public string Success => "Berhasil menyetel skip 1st half ke {0}!";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
42
GameServer/Command/Commands/CommandValk.cs
Normal file
42
GameServer/Command/Commands/CommandValk.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using KianaBH.Data;
|
||||||
|
using KianaBH.Enums.Player;
|
||||||
|
using KianaBH.Internationalization;
|
||||||
|
|
||||||
|
namespace KianaBH.GameServer.Command.Commands;
|
||||||
|
|
||||||
|
[CommandInfo("valk", "Game.Command.Valk.Desc", "Game.Command.Valk.Usage", ["v"], [PermEnum.Admin, PermEnum.Support])]
|
||||||
|
public class CommandValk : ICommands
|
||||||
|
{
|
||||||
|
[CommandMethod("add")]
|
||||||
|
public async ValueTask GetRole(CommandArg arg)
|
||||||
|
{
|
||||||
|
if (!await arg.CheckOnlineTarget()) return;
|
||||||
|
|
||||||
|
var valkId = arg.GetInt(0);
|
||||||
|
if (await arg.GetOption('l') is not int level) return;
|
||||||
|
if (await arg.GetOption('s') is not int star) return;
|
||||||
|
|
||||||
|
level = Math.Clamp(level, 1, 80);
|
||||||
|
star = Math.Clamp(star, 1, 5);
|
||||||
|
|
||||||
|
if (valkId == -1)
|
||||||
|
{
|
||||||
|
// add all
|
||||||
|
foreach (var config in GameData.AvatarData.Values)
|
||||||
|
await arg.Target!.Player!.AvatarManager!.AddAvatar(config.AvatarID, level, star,false);
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Valk.ValkAddedAll"));
|
||||||
|
await arg.Target!.Player!.SyncAll();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var valk = await arg.Target!.Player!.AvatarManager!.AddAvatar(valkId, level, star);
|
||||||
|
if (valk == null)
|
||||||
|
{
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Valk.ValkNotFound"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.Valk.ValkAdded",
|
||||||
|
valk!.FaceAnimationGroupName ?? valkId.ToString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,16 +13,17 @@ namespace KianaBH.GameServer.Game.Avatar;
|
|||||||
public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
|
public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
|
||||||
{
|
{
|
||||||
public AvatarData AvatarData { get; } = DatabaseHelper.GetInstanceOrCreateNew<AvatarData>(player.Uid);
|
public AvatarData AvatarData { get; } = DatabaseHelper.GetInstanceOrCreateNew<AvatarData>(player.Uid);
|
||||||
public async ValueTask<AvatarDataExcel?> AddAvatar(int avatarId, bool sync = true)
|
public async ValueTask<AvatarDataExcel?> AddAvatar(int avatarId, int level = 1, int? star = null, bool sync = true)
|
||||||
{
|
{
|
||||||
|
if (AvatarData.Avatars.Any(a => a.AvatarId == avatarId)) return null;
|
||||||
GameData.AvatarData.TryGetValue(avatarId, out var avatarExcel);
|
GameData.AvatarData.TryGetValue(avatarId, out var avatarExcel);
|
||||||
if (avatarExcel == null) return null;
|
if (avatarExcel == null) return null;
|
||||||
|
|
||||||
var avatar = new AvatarInfo
|
var avatar = new AvatarInfo
|
||||||
{
|
{
|
||||||
Level = 1,
|
Level = level,
|
||||||
Timestamp = Extensions.GetUnixSec(),
|
Timestamp = Extensions.GetUnixSec(),
|
||||||
Star = avatarExcel.UnlockStar,
|
Star = star ?? avatarExcel.UnlockStar,
|
||||||
DressId = avatarExcel.DefaultDressId,
|
DressId = avatarExcel.DefaultDressId,
|
||||||
DressList = {avatarExcel.DefaultDressId},
|
DressList = {avatarExcel.DefaultDressId},
|
||||||
AvatarId = avatarExcel.AvatarID,
|
AvatarId = avatarExcel.AvatarID,
|
||||||
@@ -39,15 +40,13 @@ public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
var weapon = GameData.WeaponData.TryGetValue(avatarExcel.InitialWeapon, out var weaponConfig);
|
var weapon = GameData.WeaponData.TryGetValue(avatarExcel.InitialWeapon, out var weaponConfig);
|
||||||
if (weaponConfig != null)
|
if (weaponConfig != null)
|
||||||
{
|
{
|
||||||
var item = await Player.InventoryManager!.AddItem(avatarExcel.InitialWeapon, 1, ItemMainTypeEnum.Weapon, weaponConfig.MaxLv, avatarId);
|
var item = await Player.InventoryManager!.AddItem(avatarExcel.InitialWeapon, 1, ItemMainTypeEnum.Weapon, weaponConfig.MaxLv, avatarId, sync: sync);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
avatar.WeaponUniqueId = item!.UniqueId;
|
avatar.WeaponUniqueId = item!.UniqueId;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AvatarData.Avatars.Add(avatar);
|
AvatarData.Avatars.Add(avatar);
|
||||||
|
|
||||||
if (sync) await Player.SendPacket(new PacketGetAvatarDataRsp(new List<AvatarInfo> { avatar }, false));
|
if (sync) await Player.SendPacket(new PacketGetAvatarDataRsp(new List<AvatarInfo> { avatar }, false));
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using KianaBH.Database;
|
|||||||
using KianaBH.Database.Inventory;
|
using KianaBH.Database.Inventory;
|
||||||
using KianaBH.Enums.Item;
|
using KianaBH.Enums.Item;
|
||||||
using KianaBH.GameServer.Game.Player;
|
using KianaBH.GameServer.Game.Player;
|
||||||
|
using KianaBH.GameServer.Server.Packet.Send.Item;
|
||||||
using KianaBH.Proto;
|
using KianaBH.Proto;
|
||||||
using KianaBH.Util;
|
using KianaBH.Util;
|
||||||
using static KianaBH.Proto.MasterPupilRetcode.Types;
|
using static KianaBH.Proto.MasterPupilRetcode.Types;
|
||||||
@@ -13,8 +14,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
{
|
{
|
||||||
public InventoryData Data = DatabaseHelper.GetInstanceOrCreateNew<InventoryData>(player.Uid);
|
public InventoryData Data = DatabaseHelper.GetInstanceOrCreateNew<InventoryData>(player.Uid);
|
||||||
|
|
||||||
public async ValueTask<ItemData?> AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool notify = true,
|
public async ValueTask<ItemData?> AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool sync = true)
|
||||||
bool sync = true)
|
|
||||||
{
|
{
|
||||||
ItemData? itemData = null;
|
ItemData? itemData = null;
|
||||||
|
|
||||||
@@ -34,6 +34,8 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sync) await Player.SendPacket(new PacketGetEquipmentDataRsp(Player));
|
||||||
|
|
||||||
return itemData;
|
return itemData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ using KianaBH.GameServer.Game.Avatar;
|
|||||||
using KianaBH.GameServer.Game.Battle;
|
using KianaBH.GameServer.Game.Battle;
|
||||||
using KianaBH.GameServer.Game.Inventory;
|
using KianaBH.GameServer.Game.Inventory;
|
||||||
using KianaBH.GameServer.Server;
|
using KianaBH.GameServer.Server;
|
||||||
|
using KianaBH.GameServer.Server.Packet.Send.Avatar;
|
||||||
|
using KianaBH.GameServer.Server.Packet.Send.Item;
|
||||||
using KianaBH.KcpSharp;
|
using KianaBH.KcpSharp;
|
||||||
using KianaBH.Util.Extensions;
|
using KianaBH.Util.Extensions;
|
||||||
|
|
||||||
@@ -109,5 +111,11 @@ public class PlayerInstance(PlayerData data)
|
|||||||
return Data.ToProto();
|
return Data.ToProto();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async ValueTask SyncAll()
|
||||||
|
{
|
||||||
|
await SendPacket(new PacketGetEquipmentDataRsp(this));
|
||||||
|
await SendPacket(new PacketGetAvatarDataRsp(AvatarManager!.AvatarData!.Avatars!.ToList(), true));
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ public class PacketGetEquipmentDataRsp : BasePacket
|
|||||||
{
|
{
|
||||||
public PacketGetEquipmentDataRsp(PlayerInstance player) : base(CmdIds.GetEquipmentDataRsp)
|
public PacketGetEquipmentDataRsp(PlayerInstance player) : base(CmdIds.GetEquipmentDataRsp)
|
||||||
{
|
{
|
||||||
var proto = new GetEquipmentDataRsp // TODO
|
var proto = new GetEquipmentDataRsp
|
||||||
{
|
{
|
||||||
WeaponList = { player.InventoryManager!.Data.WeaponItems.Select(weapon => weapon.ToWeaponProto()) }
|
WeaponList = { player.InventoryManager!.Data.WeaponItems.Select(weapon => weapon.ToWeaponProto()) }
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using KianaBH.Data.Models.Sdk;
|
using KianaBH.Data.Models.Sdk;
|
||||||
using KianaBH.Database.Account;
|
using KianaBH.Database.Account;
|
||||||
|
using KianaBH.Util;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace KianaBH.SdkServer.Models.Sdk;
|
namespace KianaBH.SdkServer.Models.Sdk;
|
||||||
@@ -12,13 +13,23 @@ public class MdkController : Controller
|
|||||||
{
|
{
|
||||||
var account = AccountData.GetAccountByUserName(request.Account!);
|
var account = AccountData.GetAccountByUserName(request.Account!);
|
||||||
|
|
||||||
|
if (account == null && !ConfigManager.Config.ServerOption.AutoCreateUser)
|
||||||
|
{
|
||||||
|
return Ok(new ResponseBase
|
||||||
|
{
|
||||||
|
Retcode = -101,
|
||||||
|
Success = false,
|
||||||
|
Message = "Account not found"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// Make new account
|
// Make new account
|
||||||
if (account == null)
|
if (account == null && ConfigManager.Config.ServerOption.AutoCreateUser)
|
||||||
{
|
{
|
||||||
AccountData.CreateAccount(request.Account!, 0, request.Password!);
|
AccountData.CreateAccount(request.Account!, 0, request.Password!);
|
||||||
|
|
||||||
account = AccountData.GetAccountByUserName(request.Account!)!;
|
account = AccountData.GetAccountByUserName(request.Account!)!;
|
||||||
}
|
};
|
||||||
|
|
||||||
return Ok(new MdkShieldResponse
|
return Ok(new MdkShieldResponse
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user