mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 13:54:43 +01:00
feat: add equip weapon & stigmata
This commit is contained in:
@@ -4,9 +4,7 @@ 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;
|
||||
|
||||
namespace KianaBH.GameServer.Game.Inventory;
|
||||
|
||||
@@ -87,4 +85,119 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public async ValueTask EquipAvatar(int avatarId, int uniqueId)
|
||||
{
|
||||
var itemData = Data.WeaponItems.Find(x => x.UniqueId == uniqueId);
|
||||
var avatarData = Player.AvatarManager!.GetAvatar(avatarId);
|
||||
if (itemData == null || avatarData == null) return;
|
||||
var oldItem = Data.WeaponItems.Find(x => x.UniqueId == avatarData.WeaponUniqueId);
|
||||
if (itemData.EquipAvatar > 0) // already be dressed
|
||||
{
|
||||
var equipAvatarId = itemData.EquipAvatar;
|
||||
var equipAvatar = Player.AvatarManager.GetAvatar(equipAvatarId);
|
||||
if (equipAvatar != null && oldItem != null)
|
||||
{
|
||||
// switch
|
||||
equipAvatar.WeaponUniqueId = oldItem.UniqueId;
|
||||
oldItem.EquipAvatar = equipAvatar.AvatarId;
|
||||
}
|
||||
else if (equipAvatar != null && oldItem == null)
|
||||
{
|
||||
equipAvatar.WeaponUniqueId = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (oldItem != null)
|
||||
{
|
||||
oldItem.EquipAvatar = 0;
|
||||
}
|
||||
}
|
||||
|
||||
itemData.EquipAvatar = avatarData.AvatarId;
|
||||
avatarData.WeaponUniqueId = itemData.UniqueId;
|
||||
await Player.SyncValk();
|
||||
}
|
||||
|
||||
public async ValueTask ExchangeAvatar(int avatarId1, int avatarId2)
|
||||
{
|
||||
var avatarData1 = Player.AvatarManager!.GetAvatar(avatarId1);
|
||||
var avatarData2 = Player.AvatarManager!.GetAvatar(avatarId2);
|
||||
if (avatarData1 == null || avatarData2 == null) return;
|
||||
|
||||
var item1 = Data.WeaponItems.Find(x => x.UniqueId == avatarData1.WeaponUniqueId);
|
||||
var item2 = Data.WeaponItems.Find(x => x.UniqueId == avatarData2.WeaponUniqueId);
|
||||
if (item1 == null || item2 == null) return;
|
||||
|
||||
var tempWeaponId = avatarData1.WeaponUniqueId;
|
||||
|
||||
avatarData1.WeaponUniqueId = avatarData2.WeaponUniqueId;
|
||||
avatarData2.WeaponUniqueId = tempWeaponId;
|
||||
|
||||
item1.EquipAvatar = avatarData2.AvatarId;
|
||||
item2.EquipAvatar = avatarData1.AvatarId;
|
||||
|
||||
await Player.SyncValk();
|
||||
}
|
||||
|
||||
public async ValueTask EquipStigmata(int avatarId, int uniqueId, int slot)
|
||||
{
|
||||
var itemData = Data.StigmataItems.Find(x => x.UniqueId == uniqueId);
|
||||
var avatarData = Player.AvatarManager!.GetAvatar(avatarId);
|
||||
if (itemData == null || avatarData == null) return;
|
||||
avatarData.Stigmata.TryGetValue(slot, out var id);
|
||||
var oldItem = Data.StigmataItems.Find(x => x.UniqueId == id);
|
||||
|
||||
if (itemData.EquipAvatar > 0) // already be dressed
|
||||
{
|
||||
var equipAvatarId = itemData.EquipAvatar;
|
||||
var equipAvatar = Player.AvatarManager!.GetAvatar(equipAvatarId);
|
||||
if (equipAvatar != null && oldItem != null)
|
||||
{
|
||||
// switch
|
||||
equipAvatar.Stigmata[slot] = oldItem.UniqueId;
|
||||
oldItem.EquipAvatar = equipAvatar.AvatarId;
|
||||
}
|
||||
else if (equipAvatar != null && oldItem == null)
|
||||
{
|
||||
equipAvatar.Stigmata[slot] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (oldItem != null)
|
||||
{
|
||||
oldItem.EquipAvatar = 0;
|
||||
}
|
||||
}
|
||||
|
||||
itemData.EquipAvatar = avatarData.AvatarId;
|
||||
avatarData.Stigmata[slot] = itemData.UniqueId;
|
||||
await Player.SyncValk();
|
||||
}
|
||||
|
||||
public async ValueTask ExchangeStigmata(int avatarId1, int avatarId2, int slot)
|
||||
{
|
||||
var avatarData1 = Player.AvatarManager!.GetAvatar(avatarId1);
|
||||
var avatarData2 = Player.AvatarManager!.GetAvatar(avatarId2);
|
||||
if (avatarData1 == null || avatarData2 == null) return;
|
||||
|
||||
var has1 = avatarData1.Stigmata.TryGetValue(slot, out var id1);
|
||||
var has2 = avatarData2.Stigmata.TryGetValue(slot, out var id2);
|
||||
|
||||
var item1 = Data.StigmataItems.Find(x => x.UniqueId == id1);
|
||||
var item2 = Data.StigmataItems.Find(x => x.UniqueId == id2);
|
||||
if (item1 == null || item2 == null) return;
|
||||
|
||||
var tempStigmataId = avatarData1.Stigmata[slot];
|
||||
|
||||
avatarData1.Stigmata[slot] = avatarData2.Stigmata[slot];
|
||||
avatarData2.Stigmata[slot] = tempStigmataId;
|
||||
|
||||
item1.EquipAvatar = avatarData2.AvatarId;
|
||||
item2.EquipAvatar = avatarData1.AvatarId;
|
||||
|
||||
await Player.SyncValk();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user