feat: add valk command

This commit is contained in:
Naruse
2025-06-14 16:51:41 +08:00
parent 07ec2f9abf
commit 969adeca34
10 changed files with 98 additions and 371 deletions

View File

@@ -9,6 +9,8 @@ public class AvatarDataExcel : ExcelResource
[JsonPropertyName("unlockStar")] public int UnlockStar { get; set; }
[JsonPropertyName("initialWeapon")] public int InitialWeapon { get; set; }
[JsonPropertyName("skillList")] public List<int> SkillList { get; set; } = [];
public string FaceAnimationGroupName { get; set; } = "";
public int DefaultDressId { get; set; }
public override int GetId()

View File

@@ -164,8 +164,6 @@ public class DatabaseHelper
}
return null;
return null;
}
catch (Exception e)
{

View File

@@ -15,9 +15,9 @@ public class PlayerData : BaseDatabaseDataHelper
public int Exp { get; set; } = 0;
public int HCoin { get; set; } = 0;
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 WarshipId { get; set; } = 400004;
public int WarshipId { get; set; } = 0;
public int PhonePendantId { get; set; } = 350005;
public int AssistantAvatarId { get; set; } = 101;
public int BirthDay { get; set; } = 0;

View File

@@ -118,30 +118,8 @@ public class WordTextEN
public class CommandTextEN
{
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 KickTextEN Kick { 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();
public ValkTextEN Valk { get; } = new();
}
#endregion
@@ -210,98 +188,14 @@ public class ServerInfoTextEN
/// </summary>
public class NoticeTextEN
{
public string PlayerNotFound => "Player tidak ditemukan!";
public string InvalidArguments => "Argumen command ngawur!";
public string NoPermission => "Ga ada akses buat make command ini!";
public string CommandNotFound => "Ga ketemu itu command. Ketik '/help' untuk cek command yang ada.";
public string TargetNotFound => "Target {0} tidak ditemukan!";
public string TargetOffline => "Target {0}({1}) lagi offline! Target akan di clear.";
public string TargetFound => "Online player {0}({1}) ditemukan, command selanjutnya bakal target dia secara default.";
public string InternalError => "Error menjalankan command! {0}";
}
/// <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!";
public string PlayerNotFound => "Player not found!";
public string InvalidArguments => "Invalid arguments!";
public string NoPermission => "You don't have permission!";
public string CommandNotFound => "Command not found! Type '/help' for assistance";
public string TargetOffline => "Target {0}({1}) is offline! Clearing current target";
public string TargetFound => "Target {0}({1}) found. Next command will default to this target";
public string TargetNotFound => "Target {0} not found!";
public string InternalError => "Internal error occurred while processing command!";
}
/// <summary>
@@ -311,257 +205,28 @@ public class HelpTextEN
{
public string Desc => "Show help information";
public string Usage =>
"Penggunaan: /help\n" +
"Penggunaan: /help [cmd]";
"Usage: /help\n" +
"Usage: /help [cmd]";
public string Commands => "Commands: ";
public string CommandUsage => "Penggunaan: ";
public string CommandPermission => "Level Permission Untuk Akses: ";
public string CommandUsage => "Usage: ";
public string CommandPermission => "Level Permission Untuk Access: ";
public string CommandAlias => "Command Alias";
}
/// <summary>
/// path: Game.Command.Kick
/// path: Game.Command.Valk
/// </summary>
public class KickTextEN
public class ValkTextEN
{
public string Desc => "Kick out player";
public string Usage => "Penggunaan: /kick";
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 =>
"Penggunaan: /mission pass\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 AllRunningMissionsFinished => "Sebanyak {0} tugas yang sedang berjalan telah diselesaikan!";
public string MissionFinished => "Tugas {0} telah diselesaikan!";
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 Desc => "Set attributes for owned characters\n" +
"Note: -1 means all owned characters";
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}.";
}
"Usage: /valk add [AvatarID/-1] l<Level> s<Star>\n\n";
/// <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}!";
public string ValkNotFound => "Character does not exist!";
public string ValkAddedAll => "Granted all characters to player!";
public string ValkAdded => "Granted character {0} to player!";
}

View 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()));
}
}
}

View File

@@ -13,16 +13,17 @@ namespace KianaBH.GameServer.Game.Avatar;
public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
{
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);
if (avatarExcel == null) return null;
var avatar = new AvatarInfo
{
Level = 1,
Level = level,
Timestamp = Extensions.GetUnixSec(),
Star = avatarExcel.UnlockStar,
Star = star ?? avatarExcel.UnlockStar,
DressId = avatarExcel.DefaultDressId,
DressList = {avatarExcel.DefaultDressId},
AvatarId = avatarExcel.AvatarID,
@@ -39,15 +40,13 @@ public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
var weapon = GameData.WeaponData.TryGetValue(avatarExcel.InitialWeapon, out var weaponConfig);
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)
{
avatar.WeaponUniqueId = item!.UniqueId;
};
};
AvatarData.Avatars.Add(avatar);
if (sync) await Player.SendPacket(new PacketGetAvatarDataRsp(new List<AvatarInfo> { avatar }, false));

View File

@@ -3,6 +3,7 @@ using KianaBH.Database;
using KianaBH.Database.Inventory;
using KianaBH.Enums.Item;
using KianaBH.GameServer.Game.Player;
using KianaBH.GameServer.Server.Packet.Send.Item;
using KianaBH.Proto;
using KianaBH.Util;
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 async ValueTask<ItemData?> AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool notify = true,
bool sync = true)
public async ValueTask<ItemData?> AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool sync = true)
{
ItemData? itemData = null;
@@ -34,6 +34,8 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
break;
}
if (sync) await Player.SendPacket(new PacketGetEquipmentDataRsp(Player));
return itemData;
}

View File

@@ -7,6 +7,8 @@ using KianaBH.GameServer.Game.Avatar;
using KianaBH.GameServer.Game.Battle;
using KianaBH.GameServer.Game.Inventory;
using KianaBH.GameServer.Server;
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.GameServer.Server.Packet.Send.Item;
using KianaBH.KcpSharp;
using KianaBH.Util.Extensions;
@@ -109,5 +111,11 @@ public class PlayerInstance(PlayerData data)
return Data.ToProto();
}
public async ValueTask SyncAll()
{
await SendPacket(new PacketGetEquipmentDataRsp(this));
await SendPacket(new PacketGetAvatarDataRsp(AvatarManager!.AvatarData!.Avatars!.ToList(), true));
}
#endregion
}

View File

@@ -8,7 +8,7 @@ public class PacketGetEquipmentDataRsp : BasePacket
{
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()) }
};

View File

@@ -1,5 +1,6 @@
using KianaBH.Data.Models.Sdk;
using KianaBH.Database.Account;
using KianaBH.Util;
using Microsoft.AspNetCore.Mvc;
namespace KianaBH.SdkServer.Models.Sdk;
@@ -12,13 +13,23 @@ public class MdkController : Controller
{
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
if (account == null)
if (account == null && ConfigManager.Config.ServerOption.AutoCreateUser)
{
AccountData.CreateAccount(request.Account!, 0, request.Password!);
account = AccountData.GetAccountByUserName(request.Account!)!;
}
};
return Ok(new MdkShieldResponse
{