// PacketHandler -> with Callback?
public void AskRevive(long characterId)
{
ClientSession Session = GetSessionByCharacterId(characterId);
if (Session != null && Session.HasSelectedCharacter)
{
if (Session.Character.IsVehicled)
{
Session.Character.RemoveVehicle();
}
Session.SendPacket(Session.Character.GenerateStat());
Session.SendPacket(Session.Character.GenerateCond());
Session.SendPackets(Session.Character.GenerateVb());
if (Session.Character.Level > 20)
{
Session.Character.Dignity -= (short)(Session.Character.Level < 50 ? Session.Character.Level : 50);
if (Session.Character.Dignity < -1000)
{
Session.Character.Dignity = -1000;
}
Session.SendPacket(Session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("LOSE_DIGNITY"), (short)(Session.Character.Level < 50 ? Session.Character.Level : 50)), 11));
Session.SendPacket(Session.Character.GenerateFd());
Session.CurrentMap?.Broadcast(Session, Session.Character.GenerateIn(), ReceiverType.AllExceptMe);
}
Session.SendPacket("eff_ob -1 -1 0 4269");
Session.SendPacket(Session.Character.GenerateDialog($"#revival^0 #revival^1 {(Session.Character.Level > 20 ? Language.Instance.GetMessageFromKey("ASK_REVIVE") : Language.Instance.GetMessageFromKey("ASK_REVIVE_FREE"))}"));
Task.Factory.StartNew(async() =>
{
bool revive = true;
for (int i = 1; i <= 30; i++)
{
await Task.Delay(1000);
if (Session.Character.Hp > 0)
{
revive = false;
break;
}
}
if (revive)
{
Instance.ReviveFirstPosition(Session.Character.CharacterId);
}
});
}
}