Beispiel #1
0
        public static void RemoveSp(this Mate e, bool isBackToMiniland = false)
        {
            if (e.Owner?.Session == null || e.Owner.MapInstance == null)
            {
                return;
            }

            e.IsUsingSp = false;

            e.Owner.Session.SendPacket(e.GenerateScPacket());

            if (!e.IsTeamMember)
            {
                return;
            }

            e.Owner.MapInstance.Broadcast(e.GenerateCMode(-1));
            e.GenerateDpski();
            e.Owner.Session.SendPacket(e.GenerateCond());
            e.Owner.MapInstance.Broadcast(e.GenerateOut());

            if (!isBackToMiniland)
            {
                bool isAct4 = ServerManager.Instance.ChannelId == 51;

                Parallel.ForEach(e.Owner.MapInstance.Sessions.Where(s => s.Character != null), s =>
                {
                    if (!isAct4 || e.Owner.Faction == s.Character.Faction)
                    {
                        s.SendPacket(e.GenerateIn(false, isAct4));
                    }
                    else
                    {
                        s.SendPacket(e.GenerateIn(true, isAct4, s.Account.Authority));
                    }
                });
            }

            e.Owner.Session.SendPacket(e.Owner.GeneratePinit());
        }