server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Guri/ResetSpGuriHandler.cs
2026-02-10 18:21:30 +01:00

83 lines
No EOL
3.1 KiB
C#

using System.Threading.Tasks;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsAPI.Game.Extensions.ItemExtension.Item;
using WingsEmu.Game._enum;
using WingsEmu.Game._Guri;
using WingsEmu.Game._Guri.Event;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Algorithm;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Items;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Managers.StaticData;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.BasicImplementations.Guri;
public class ResetSpGuriHandler : IGuriHandler
{
private readonly ICharacterAlgorithm _characterAlgorithm;
private readonly IGameLanguageService _gameLanguageService;
private readonly IItemsManager _itemsManager;
private readonly ISessionManager _sessionManager;
public ResetSpGuriHandler(IGameLanguageService gameLanguageService, ISessionManager sessionManager, ICharacterAlgorithm characterAlgorithm, IItemsManager itemsManager)
{
_gameLanguageService = gameLanguageService;
_sessionManager = sessionManager;
_characterAlgorithm = characterAlgorithm;
_itemsManager = itemsManager;
}
public long GuriEffectId => 203;
public async Task ExecuteAsync(IClientSession session, GuriEvent guriPacket)
{
if (guriPacket.Data != 0)
{
return;
}
if (session.PlayerEntity.IsSeal)
{
return;
}
bool hasPotion = session.PlayerEntity.HasItem((short)ItemVnums.RESET_SP_POINT);
if (!hasPotion)
{
string itemName = _itemsManager.GetItem((short)ItemVnums.RESET_SP_POINT).GetItemName(_gameLanguageService, session.UserLanguage);
session.SendChatMessage(_gameLanguageService.GetLanguageFormat(GameDialogKey.INVENTORY_SHOUTMESSAGE_NOT_ENOUGH_ITEMS, session.UserLanguage, 1, itemName), ChatMessageColorType.Yellow);
return;
}
if (!session.PlayerEntity.UseSp)
{
session.SendChatMessage(_gameLanguageService.GetLanguage(GameDialogKey.SPECIALIST_CHATMESSAGE_TRANSFORMATION_NEEDED, session.UserLanguage), ChatMessageColorType.Yellow);
return;
}
GameItemInstance specialistInstance = session.PlayerEntity.Specialist;
if (specialistInstance == null || !session.PlayerEntity.UseSp)
{
await session.NotifyStrangeBehavior(StrangeBehaviorSeverity.NORMAL, "tried to reset SP points without SP.");
return;
}
specialistInstance.SlDamage = 0;
specialistInstance.SlDefence = 0;
specialistInstance.SlElement = 0;
specialistInstance.SlHP = 0;
await session.RemoveItemFromInventory((short)ItemVnums.RESET_SP_POINT);
session.SendCondPacket();
session.SendSpecialistCardInfo(specialistInstance, _characterAlgorithm);
session.RefreshLevel(_characterAlgorithm);
session.RefreshStatChar();
session.SendMsg(_gameLanguageService.GetLanguage(GameDialogKey.SPECIALIST_SHOUTMESSAGE_POINTS_RESET, session.UserLanguage), MsgMessageType.Middle);
}
}