logistic index

This commit is contained in:
Naruse
2026-04-29 13:04:17 +08:00
parent 5f173ce8d2
commit e8bb77e90e
3 changed files with 49 additions and 1 deletions

View File

@@ -24,6 +24,7 @@ public class CharacterInfo
public uint WeaponUniqueId { get; set; } public uint WeaponUniqueId { get; set; }
public uint SkinId { get; set; } public uint SkinId { get; set; }
public uint WeaponSkinId { get; set; } public uint WeaponSkinId { get; set; }
public uint SupportTeamIndex { get; set; } = 1;
public ItemFlagEnum Flag { get; set; } = ItemFlagEnum.FLAG_READED; public ItemFlagEnum Flag { get; set; } = ItemFlagEnum.FLAG_READED;
public uint Expiration { get; set; } public uint Expiration { get; set; }
[SugarColumn(IsJson = true)] public List<uint> UnlockedSkin { get; set; } = []; [SugarColumn(IsJson = true)] public List<uint> UnlockedSkin { get; set; } = [];
@@ -58,6 +59,7 @@ public class CharacterInfo
proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_WEAPON] = WeaponUniqueId; proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_WEAPON] = WeaponUniqueId;
proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_SKIN] = SkinId; proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_SKIN] = SkinId;
proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_WEAPON_SKIN] = WeaponSkinId; proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_WEAPON_SKIN] = WeaponSkinId;
proto.Slots[(uint)ItemCardSlotTypeEnum.SLOT_SUPPORTERINDEX] = SupportTeamIndex;
foreach (var (slot, uid) in SupportSlots) foreach (var (slot, uid) in SupportSlots)
proto.Slots[slot] = uid; proto.Slots[slot] = uid;

View File

@@ -0,0 +1,37 @@
using MikuSB.Proto;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
namespace MikuSB.GameServer.Server.CallGS.Handlers.Girl;
[CallGSApi("RoleCard_SetSupporterTeamIndex")]
public class RoleCard_SetSupporterTeamIndex : ICallGSHandler
{
public async Task Handle(Connection connection, string param, ushort seqNo)
{
var req = JsonSerializer.Deserialize<SetSupporterTeamIndexParam>(param);
if (req == null)
{
await CallGSRouter.SendScript(connection, "RoleCard_SetSupporterTeamIndex", "{\"err\":\"error.BadParam\"}");
return;
}
var player = connection.Player!;
var cardData = player.CharacterManager.GetCharacterByGUID(req.CardId);
if (cardData == null) return;
cardData.SupportTeamIndex = req.Index;
var sync = new NtfSyncPlayer
{
Items = { cardData.ToProto() }
};
await CallGSRouter.SendScript(connection, "RoleCard_SetSupporterTeamIndex", "null", sync);
}
}
internal sealed class SetSupporterTeamIndexParam
{
[JsonPropertyName("Id")]
public uint CardId { get; set; }
public uint Index { get; set; }
}

View File

@@ -25,7 +25,8 @@ public class SupporterCard_Equip : ICallGSHandler
return; return;
} }
var slot = (uint)req.EqSlot; var teamIndex = card.SupportTeamIndex;
var slot = GetTeamIndex((uint)req.EqSlot, teamIndex);
// If an existing card is equipped in this slot and bForce is false, ask for confirmation // If an existing card is equipped in this slot and bForce is false, ask for confirmation
if (!req.Force && req.CurrentEquippedUid != 0 && card.SupportSlots.TryGetValue(slot, out var existing) && existing != 0) if (!req.Force && req.CurrentEquippedUid != 0 && card.SupportSlots.TryGetValue(slot, out var existing) && existing != 0)
@@ -46,6 +47,14 @@ public class SupporterCard_Equip : ICallGSHandler
var responseApi = string.IsNullOrEmpty(req.Model) ? "Logistics_Change" : "Logistics_Equip"; var responseApi = string.IsNullOrEmpty(req.Model) ? "Logistics_Change" : "Logistics_Equip";
await CallGSRouter.SendScript(connection, responseApi, "{}", sync); await CallGSRouter.SendScript(connection, responseApi, "{}", sync);
} }
private uint GetTeamIndex(uint slot, uint teamIndex)
{
if (teamIndex == 1) return slot;
if (teamIndex == 2) return slot + 7;
if (teamIndex == 3) return slot + 10;
return slot;
}
} }
internal sealed class SupporterCardEquipParam internal sealed class SupporterCardEquipParam