Can I set the number of raids/TS per day?
For example: Witch Laurena can only start raids 3 times a day
For example: Witch Laurena can only start raids 3 times a day
/// <summary>
/// wreq packet
/// </summary>
/// <param name="packet"></param>
public void GetWreq(WreqPacket packet)
{
short CharPositionX = Session.Character.PositionX;
short CharPositionY = Session.Character.PositionY;
foreach (ScriptedInstance portal in Session.CurrentMapInstance.ScriptedInstances)
{
if (CharPositionY >= portal.PositionY - 1 && CharPositionY
<= portal.PositionY + 1
&& CharPositionX
>= portal.PositionX - 1
&& CharPositionX
<= portal.PositionX + 1)
{
switch (packet.Value)
{
case 0:
if (packet.Param != 1
&& Session.Character.Group?.Sessions.Find(s =>
s.CurrentMapInstance.InstanceBag?.Lock == false
&& s.CurrentMapInstance.MapInstanceType == MapInstanceType.TimeSpaceInstance
&& s.Character.CharacterId != Session.Character.CharacterId
&& s.Character.Timespace?.Id == portal.Id
&& !s.Character.Timespace.IsIndividual) is ClientSession TeamMemberInInstance)
{
if (portal.DailyEntries > 0)
{
var entries = portal.DailyEntries - Session.Character.GeneralLogs.CountLinq(s => s.LogType == "InstanceEntry" && short.Parse(s.LogData) == portal.Id && s.Timestamp.Date == DateTime.Today);
Session.SendPacket(Session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("INSTANCE_ENTRIES"), entries), 10));
}
Session.SendPacket(UserInterfaceHelper.GenerateDialog(
$"#wreq^3^{TeamMemberInInstance.Character.CharacterId} #wreq^0^1 {Language.Instance.GetMessageFromKey("ASK_JOIN_TEAM_TS")}"));
}
else
{
if (portal.DailyEntries > 0)
{
var entries = portal.DailyEntries - Session.Character.GeneralLogs.CountLinq(s => s.LogType == "InstanceEntry" && short.Parse(s.LogData) == portal.Id && s.Timestamp.Date == DateTime.Today);
Session.SendPacket(Session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("INSTANCE_ENTRIES"), entries), 10));
}
Session.SendPacket(portal.GenerateRbr());
}
break;
case 1:
if (!packet.Param.HasValue)
{
Session.Character.EnterInstance(portal);
}
break;
case 3:
ClientSession clientSession =
Session.Character.Group?.Sessions.Find(s => s.Character.CharacterId == packet.Param);
if (clientSession != null && clientSession.CurrentMapInstance.InstanceBag?.Lock == false && clientSession.Character?.Timespace is ScriptedInstance TeamTimeSpace && !TeamTimeSpace.IsIndividual)
{
if (portal.Id == TeamTimeSpace.Id)
{
if (Session.Character.Level < TeamTimeSpace.LevelMinimum)
{
Session.SendPacket(
UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("TOO_LOW_LVL"), 0));
return;
}
if (Session.Character.Level > TeamTimeSpace.LevelMaximum)
{
Session.SendPacket(
UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("TOO_HIGH_LVL"), 0));
return;
}
var entries = TeamTimeSpace.DailyEntries - Session.Character.GeneralLogs.CountLinq(s => s.LogType == "InstanceEntry" && short.Parse(s.LogData) == TeamTimeSpace.Id && s.Timestamp.Date == DateTime.Today);
if (TeamTimeSpace.DailyEntries == 0 || entries > 0)
{
foreach (Gift gift in TeamTimeSpace.RequiredItems)
{
if (Session.Character.Inventory.CountItem(gift.VNum) < gift.Amount)
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg(
string.Format(Language.Instance.GetMessageFromKey("NO_ITEM_REQUIRED"),
ServerManager.GetItem(gift.VNum).Name), 0));
return;
}
Session.Character.Inventory.RemoveItemAmount(gift.VNum, gift.Amount);
}
Session?.SendPackets(TeamTimeSpace.GenerateMinimap());
Session?.SendPacket(TeamTimeSpace.GenerateMainInfo());
Session?.SendPacket(TeamTimeSpace.FirstMap.InstanceBag.GenerateScore());
if (TeamTimeSpace.StartX != 0 || TeamTimeSpace.StartY != 0)
{
ServerManager.Instance.ChangeMapInstance(Session.Character.CharacterId,
clientSession.CurrentMapInstance.MapInstanceId, TeamTimeSpace.StartX, TeamTimeSpace.StartY);
}
else
{
ServerManager.Instance.TeleportOnRandomPlaceInMap(Session, clientSession.CurrentMapInstance.MapInstanceId);
}
Session.Character.Timespace = TeamTimeSpace;
}
else
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("INSTANCE_NO_MORE_ENTRIES"), 0));
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("INSTANCE_NO_MORE_ENTRIES"), 10));
}
}
}
else
{
GetWreq(new WreqPacket { Value = 0, Param = 1 });
}
// TODO: Implement
break;
}
}
}
}
/// <summary>
/// mkraid packet
/// </summary>
/// <param name="mkRaidPacket"></param>
public void GenerateRaid(MkRaidPacket mkRaidPacket)
{
if (Session.Character.Group?.Raid != null && Session.Character.Group.IsLeader(Session))
{
if (Session.Character.MapId == Session.Character.Group.Raid.MapId
&& Map.GetDistance(
new MapCell { X = Session.Character.PositionX, Y = Session.Character.PositionY },
new MapCell { X = Session.Character.Group.Raid.PositionX, Y = Session.Character.Group.Raid.PositionY }) < 2)
{
if ((Session.Character.Group.SessionCount > 0 || Session.Character.Authority >= AuthorityType.TGM)
&& Session.Character.Group.Sessions.All(s => s.CurrentMapInstance == Session.CurrentMapInstance))
{
if (Session.Character.Group.Raid.FirstMap == null)
{
Session.Character.Group.Raid.LoadScript(MapInstanceType.RaidInstance, Session.Character);
}
if (Session.Character.Group.Raid.FirstMap == null)
{
return;
}
Session.Character.Group.Raid.InstanceBag.Lock = true;
/*Session.Character.Group.Characters.Where(s => s.CurrentMapInstance != Session.CurrentMapInstance).ToList().ForEach(
session =>
{
Session.Character.Group.LeaveGroup(session);
session.SendPacket(session.Character.GenerateRaid(1, true));
session.SendPacket(session.Character.GenerateRaid(2, true));
});*/
Session.Character.Group.Raid.InstanceBag.Lives = (short)Session.Character.Group.SessionCount;
foreach (ClientSession session in Session.Character.Group.Sessions.GetAllItems())
{
if (session != null)
{
ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId,
session.Character.Group.Raid.FirstMap.MapInstanceId,
session.Character.Group.Raid.StartX, session.Character.Group.Raid.StartY);
session.SendPacket("raidbf 0 0 25");
session.SendPacket(session.Character.Group.GeneraterRaidmbf(session));
session.SendPacket(session.Character.GenerateRaid(5));
session.SendPacket(session.Character.GenerateRaid(4));
session.SendPacket(session.Character.GenerateRaid(3));
if (session.Character.Group.Raid.DailyEntries > 0)
{
var entries = session.Character.Group.Raid.DailyEntries - session.Character.GeneralLogs.CountLinq(s => s.LogType == "InstanceEntry" && short.Parse(s.LogData) == session.Character.Group.Raid.Id && s.Timestamp.Date == DateTime.Today);
session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("INSTANCE_ENTRIES"), entries), 10));
}
}
}
ServerManager.Instance.GroupList.Remove(Session.Character.Group);
Logger.LogUserEvent("RAID_START", Session.GenerateIdentity(),
$"RaidId: {Session.Character.Group.GroupId}");
}
else
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("RAID_TEAM_NOT_READY"), 0));
}
}
else
{
if (Session.Character.Group.Raid.IsSinglePortal == true)
{
if ((Session.Character.Group.SessionCount > 2 || Session.Character.Authority >= AuthorityType.TGM)
&& Session.Character.Group.Sessions.All(s => s.CurrentMapInstance == Session.CurrentMapInstance))
{
if (Session.Character.Group.Raid.FirstMap == null)
{
Session.Character.Group.Raid.LoadScript(MapInstanceType.RaidInstance, Session.Character);
}
if (Session.Character.Group.Raid.FirstMap == null)
{
return;
}
Session.Character.Group.Raid.InstanceBag.Lock = true;
Session.Character.Group.Sessions.Where(s => s.CurrentMapInstance != Session.CurrentMapInstance).ToList().ForEach(
session =>
{
Session.Character.Group.LeaveGroup(session);
session.SendPacket(session.Character.GenerateRaid(1, true));
session.SendPacket(session.Character.GenerateRaid(2, true));
});
Session.Character.Group.Raid.InstanceBag.Lives = (short)Session.Character.Group.SessionCount;
foreach (ClientSession session in Session.Character.Group.Sessions.GetAllItems())
{
if (session != null)
{
ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId,
session.Character.Group.Raid.FirstMap.MapInstanceId,
session.Character.Group.Raid.StartX, session.Character.Group.Raid.StartY);
session.SendPacket("raidbf 0 0 25");
session.SendPacket(session.Character.Group.GeneraterRaidmbf(session));
session.SendPacket(session.Character.GenerateRaid(5));
session.SendPacket(session.Character.GenerateRaid(4));
session.SendPacket(session.Character.GenerateRaid(3));
if (session.Character.Group.Raid.DailyEntries > 0)
{
var entries = session.Character.Group.Raid.DailyEntries - session.Character.GeneralLogs.CountLinq(s => s.LogType == "InstanceEntry" && short.Parse(s.LogData) == session.Character.Group.Raid.Id && s.Timestamp.Date == DateTime.Today);
session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("INSTANCE_ENTRIES"), entries), 10));
}
}
}
ServerManager.Instance.GroupList.Remove(Session.Character.Group);
Logger.LogUserEvent("RAID_START", Session.GenerateIdentity(),
$"RaidId: {Session.Character.Group.GroupId}");
}
else
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("RAID_TEAM_NOT_READY"), 0));
}
}
else
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("WRONG_PORTAL"), 0));
}
}
}
}