示例#1
0
        public static bool Handle(Entities.GameClient client, UseSpellPacket usespell)
        {
            if (!client.Equipments.Contains(Enums.ItemLocation.Steed))
            {
                return(false);
            }

            if (client.ContainsFlag1(Enums.Effect1.Riding))
            {
                client.RemoveFlag1(Enums.Effect1.Riding);
            }
            else if (client.Stamina < 100)
            {
                return(false);
            }
            else
            {
                client.AddStatusEffect1(Enums.Effect1.Riding);
            }

            using (var vigor = new Packets.SteedVigorPacket())
            {
                vigor.Type   = 2;
                vigor.Amount = 9001;
                client.Send(vigor);
            }

            usespell.AddTarget(client.EntityUID, 0);
            return(true);
        }
示例#2
0
        public void BeginMatch()
        {
            ArenaQualifier.PlayerQueue.Remove(Player1);
            ArenaQualifier.PlayerQueue.Remove(Player2);

            ArenaMap = Core.Kernel.Maps[700].CreateDynamic(out DynamicID);

            ProjectX_V3_Lib.Threading.DelayedTask.StartDelayedTask(EndMatch, 120000, 0);

            Player1Damage = 0;
            Player2Damage = 0;

            MatchStartTime = DateTime.Now.AddMilliseconds(10000);
            Started        = true;

            Player1.HP             = Player1.MaxHP;
            Player1.Transformation = 0;
            ushort[] PlayerLoc = GenerateRandomLocation();
            Player1.TeleportDynamic(DynamicID, PlayerLoc[0], PlayerLoc[1]);

            Player1.RemoveFlag1(Enums.Effect1.Ghost);
            Player1.RemoveFlag1(Enums.Effect1.Dead);
            Player1.RemoveFlag1(Enums.Effect1.Riding);

            Player2.HP             = Player2.MaxHP;
            Player2.Transformation = 0;
            PlayerLoc = GenerateRandomLocation();
            Player2.TeleportDynamic(DynamicID, PlayerLoc[0], PlayerLoc[1]);

            Player2.RemoveFlag1(Enums.Effect1.Ghost);
            Player2.RemoveFlag1(Enums.Effect1.Dead);
            Player2.RemoveFlag1(Enums.Effect1.Riding);

            SendMatch();
            SendCountDown(Player1, Player2);
            SendCountDown(Player2, Player1);
            SendPacket();

            Player1.Battle = this;
            Player2.Battle = this;
        }
示例#3
0
        public void Delete(Entities.GameClient client, Packets.TeamActionPacket packet)
        {
            if (!client.Alive)
            {
                return;
            }
            if (Leader != client.EntityUID)
            {
                return;
            }

            client.RemoveFlag1(Enums.Effect1.TeamLeader);
            foreach (Entities.GameClient member in Members.Values)
            {
                member.Team = null;
                member.Send(packet);
            }

            Members.Clear();
            Leader = 0;
        }
示例#4
0
        /// <summary>
        /// Kills an entity.
        /// </summary>
        /// <param name="attacker">The attacker.</param>
        /// <param name="attacked">The attacked.</param>
        public static void Kill(Entities.IEntity attacker, Entities.IEntity attacked, uint damage = 0)
        {
            attacked.HP    = 0;
            attacked.Alive = false;

            if (attacked is Entities.Monster)
            {
                (attacked as Entities.Monster).Kill(attacker, damage);
                if (attacker is Entities.GameClient)
                {
                    if ((attacker as Entities.GameClient).Battle != null)
                    {
                        (attacker as Entities.GameClient).Battle.KillMob((attacker as Entities.GameClient), attacked.EntityUID);
                    }
                }
            }

            using (var killpacket = new Packets.InteractionPacket())
            {
                killpacket.Action    = Enums.InteractAction.Kill;
                killpacket.TargetUID = attacked.EntityUID;
                killpacket.X         = attacked.X;
                killpacket.Y         = attacked.Y;
                killpacket.Data      = 1;

                if (attacker != null)
                {
                    killpacket.EntityUID = attacker.EntityUID;

                    attacker.Screen.UpdateScreen(killpacket);
                    if (attacker is Entities.GameClient)
                    {
                        (attacker as Entities.GameClient).Send(killpacket);
                    }
                }
                else
                {
                    killpacket.EntityUID = 0;
                    attacked.Screen.UpdateScreen(killpacket);
                    if (attacked is Entities.GameClient)
                    {
                        (attacked as Entities.GameClient).Send(killpacket);
                    }
                }
            }

            if (attacked is Entities.GameClient)
            {
                Entities.GameClient attackedclient = attacked as Entities.GameClient;
                attackedclient.RemoveFlag1(Enums.Effect1.Fly);
                attackedclient.RemoveFlag1(Enums.Effect1.Invisible);

                if (attacker != null)
                {
                    if (attacked.EntityUID != attacker.EntityUID)
                    {
                        if (attacker is Entities.GameClient)
                        {
                            if ((attacker as Entities.GameClient).Battle != null)
                            {
                                if (!(attacker as Entities.GameClient).Battle.HandleDeath((attacker as Entities.GameClient), attackedclient))
                                {
                                    return;
                                }
                            }
                            else if (attacked.Map.GotKillCons())
                            {
                                Entities.GameClient attackerclient = attacker as Entities.GameClient;
                                if (attackedclient.Guild != null && attackerclient.Guild != null)
                                {
                                    if (attackerclient.Guild.IsEnemy(attackedclient.Guild.Name))
                                    {
                                        attackerclient.PKPoints += 3;
                                    }
                                    else
                                    {
                                        attackerclient.PKPoints += 10;
                                    }
                                }
                                else
                                {
                                    attackerclient.PKPoints += 10;
                                }
                            }
                        }
                    }
                }
                attackedclient.AttackPacket = null;
                attackedclient.ReviveTime   = DateTime.Now.AddSeconds(20);
                attackedclient.AddStatusEffect1(Enums.Effect1.Dead);
                attackedclient.AddStatusEffect1(Enums.Effect1.Ghost);
                attackedclient.RemoveFlag1(Enums.Effect1.BlueName);
                attackedclient.Stamina = 0;

                attackedclient.Transformation = Calculations.BasicCalculations.GetGhostTransform(attackedclient.Model);
            }

            if (attacked is Entities.BossCreature)
            {
                Entities.BossCreature creature = attacked as Entities.BossCreature;
                creature.Abort();
            }
            else if (attacked is Entities.BossMonster)
            {
                Entities.BossMonster boss = attacked as Entities.BossMonster;
                boss.AbortBoss(false);
                if (attacker is Entities.GameClient)
                {
                    boss.ON_DEATH(attacker as Entities.GameClient);
                }
            }
        }
示例#5
0
        /// <summary>
        /// Handling the combat of the interact packet.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="interact">The interact packet.</param>
        public static void Handle(Entities.GameClient client, InteractionPacket interact)
        {
            if (interact == null)
            {
                return;
            }

            if (!client.Alive)
            {
                return;
            }

            if (client.Paralyzed)
            {
                return;
            }

            if (!client.CanAttack)
            {
                return;
            }

            if (!(DateTime.Now >= client.LoginProtection.AddSeconds(10)))
            {
                using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST))
                    client.Send(fmsg);
                return;
            }
            if (!(DateTime.Now >= client.ReviveProtection.AddSeconds(5)))
            {
                using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST))
                    client.Send(fmsg);
                return;
            }

            if (!(DateTime.Now >= client.LastAttack.AddMilliseconds(Core.TimeIntervals.AttackInterval)) && client.AttackPacket == null)
            {
                using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST))
                    client.Send(fmsg);
                return;
            }

            if (client.Battle != null)
            {
                if (!client.Battle.HandleBeginAttack(client))
                {
                    using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST))
                        client.Send(fmsg);
                    return;
                }
            }
            client.LastAttack = DateTime.Now;
            //client.AutoAttacking = false;
            switch (interact.Action)
            {
            case Enums.InteractAction.MagicAttack:
            {
                #region TemporaryDecryption
                if (!interact.UnPacked)
                {
                    interact.UnPacked = true;

                    byte[] packet  = interact.Copy();
                    ushort SkillId = Convert.ToUInt16(((long)packet[24] & 0xFF) | (((long)packet[25] & 0xFF) << 8));
                    SkillId ^= (ushort)0x915d;
                    SkillId ^= (ushort)client.EntityUID;
                    SkillId  = (ushort)(SkillId << 0x3 | SkillId >> 0xd);
                    SkillId -= 0xeb42;

                    uint Target = ((uint)packet[12] & 0xFF) | (((uint)packet[13] & 0xFF) << 8) | (((uint)packet[14] & 0xFF) << 16) | (((uint)packet[15] & 0xFF) << 24);
                    Target = ((((Target & 0xffffe000) >> 13) | ((Target & 0x1fff) << 19)) ^ 0x5F2D2463 ^ client.EntityUID) - 0x746F4AE6;

                    ushort TargetX = 0;
                    ushort TargetY = 0;
                    long   xx      = (packet[16] & 0xFF) | ((packet[17] & 0xFF) << 8);
                    long   yy      = (packet[18] & 0xFF) | ((packet[19] & 0xFF) << 8);
                    xx      = xx ^ (client.EntityUID & 0xffff) ^ 0x2ed6;
                    xx      = ((xx << 1) | ((xx & 0x8000) >> 15)) & 0xffff;
                    xx     |= 0xffff0000;
                    xx     -= 0xffff22ee;
                    yy      = yy ^ (client.EntityUID & 0xffff) ^ 0xb99b;
                    yy      = ((yy << 5) | ((yy & 0xF800) >> 11)) & 0xffff;
                    yy     |= 0xffff0000;
                    yy     -= 0xffff8922;
                    TargetX = Convert.ToUInt16(xx);
                    TargetY = Convert.ToUInt16(yy);

                    interact.TargetUID = Target;
                    interact.MagicType = SkillId;
                    interact.X         = TargetX;
                    interact.Y         = TargetY;
                }
                #endregion

                if (client.ContainsFlag1(Enums.Effect1.Riding) && interact.MagicType != 7001)
                {
                    if (client.Stamina >= 100)
                    {
                        client.Stamina = 0;
                        client.RemoveFlag1(Enums.Effect1.Riding);
                    }
                    return;
                }

                Magic.Handle(client, interact);
                break;
            }

            case Enums.InteractAction.Attack:
                if (client.ContainsFlag1(Enums.Effect1.Riding))
                {
                    if (client.Stamina >= 100)
                    {
                        client.Stamina = 0;
                        client.RemoveFlag1(Enums.Effect1.Riding);
                    }
                    return;
                }
                Physical.Handle(client, interact);
                break;

            case Enums.InteractAction.Shoot:
                if (client.ContainsFlag1(Enums.Effect1.Riding))
                {
                    if (client.Stamina >= 100)
                    {
                        client.Stamina = 0;
                        client.RemoveFlag1(Enums.Effect1.Riding);
                    }
                    return;
                }
                Ranged.Handle(client, interact);
                break;
            }
        }
示例#6
0
 public static void Handle(Entities.GameClient client, GeneralDataPacket General)
 {
     client.RemoveFlag1(Enums.Effect1.Fly);
 }