server-master/srcs/_plugins/WingsEmu.Plugins.PacketHandling/Game/Basic/ReqInfoPacketHandler.cs
2026-02-10 18:21:30 +01:00

137 lines
No EOL
4.8 KiB
C#

using System.Threading.Tasks;
using WingsEmu.DTOs.Items;
using WingsEmu.DTOs.Maps;
using WingsEmu.Game._i18n;
using WingsEmu.Game._ItemUsage.Configuration;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Configurations;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Extensions.Mates;
using WingsEmu.Game.Inventory;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Managers.StaticData;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.ClientPackets;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.PacketHandling.Game.Basic;
public class ReqInfoPacketHandler : GenericGamePacketHandlerBase<ReqInfoPacket>
{
private readonly IGameLanguageService _gameLanguage;
private readonly INpcMonsterManager _npcMonsterManager;
private readonly IRankingManager _rankingManager;
private readonly IReputationConfiguration _reputationConfiguration;
private readonly ISpPartnerConfiguration _spPartnerConfiguration;
public ReqInfoPacketHandler(INpcMonsterManager npcMonsterManager, IGameLanguageService gameLanguage,
IReputationConfiguration reputationConfiguration, ISpPartnerConfiguration spPartnerConfiguration, IRankingManager rankingManager)
{
_npcMonsterManager = npcMonsterManager;
_gameLanguage = gameLanguage;
_reputationConfiguration = reputationConfiguration;
_spPartnerConfiguration = spPartnerConfiguration;
_rankingManager = rankingManager;
}
protected override async Task HandlePacketAsync(IClientSession session, ReqInfoPacket packet)
{
switch (packet.Type)
{
case 12:
InventoryItem item = session.PlayerEntity.GetItemBySlotAndType((short)packet.TargetVNum, InventoryType.Equipment);
if (item == null)
{
return;
}
if (item.ItemInstance.Type != ItemInstanceType.WearableInstance)
{
return;
}
if (item.ItemInstance.Rarity <= 0)
{
session.SendPacket($"r_info {item.ItemInstance.ItemVNum} 0");
return;
}
if (item.ItemInstance.BoundCharacterId == session.PlayerEntity.Id)
{
session.SendPacket($"r_info {item.ItemInstance.ItemVNum} 1");
return;
}
session.SendPacket($"r_info {item.ItemInstance.ItemVNum} 2");
break;
case 6:
if (!packet.MateVNum.HasValue)
{
return;
}
IMonsterData npcPartner = session.CurrentMapInstance.GetNpcById(packet.MateVNum.Value);
if (npcPartner != null)
{
session.SendNpcInfo(npcPartner, _gameLanguage);
return;
}
IMateEntity targetMate = session.CurrentMapInstance.GetMateById(packet.MateVNum.Value);
if (targetMate == null)
{
return;
}
if (session.CurrentMapInstance.HasMapFlag(MapFlags.ACT_4))
{
if (session.PlayerEntity.Faction != targetMate.Faction)
{
return;
}
}
session.SendPacket(targetMate.GenerateEInfo(_gameLanguage, session.UserLanguage, _spPartnerConfiguration));
break;
case 5:
IMonsterData npc = _npcMonsterManager.GetNpc((short)packet.TargetVNum);
if (npc == null)
{
return;
}
session.SendNpcInfo(npc, _gameLanguage);
break;
default:
IPlayerEntity target = session.CurrentMapInstance.GetCharacterById(packet.TargetVNum);
if (target == null)
{
return;
}
if (session.CurrentMapInstance.HasMapFlag(MapFlags.ACT_4))
{
if (session.PlayerEntity.Faction != target.Faction)
{
return;
}
}
if (session.PlayerEntity.RainbowBattleComponent.IsInRainbowBattle && target.RainbowBattleComponent.IsInRainbowBattle)
{
if (session.PlayerEntity.RainbowBattleComponent.Team != target.RainbowBattleComponent.Team)
{
return;
}
}
session.SendPacket(target.Session.GenerateReqInfo(_reputationConfiguration, _rankingManager.TopReputation));
break;
}
}
}