83 lines
No EOL
3.1 KiB
C#
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);
|
|
}
|
|
} |