Beispiel #1
0
        public static void Create(Entities.GameClient client, Packets.TeamActionPacket packet)
        {
            if (packet.EntityUID != client.EntityUID)
            {
                return;
            }
            if (client.Team != null)
            {
                return;
            }

            client.Team        = new Team();
            client.Team.Leader = client.EntityUID;
            if (client.Team.Members.TryAdd(client.EntityUID, client))
            {
                using (var create = new Packets.TeamActionPacket())
                {
                    create.EntityUID = client.EntityUID;
                    create.Action    = Enums.TeamAction.Leader;
                    client.Send(create);
                    create.Action = Enums.TeamAction.Create;
                    client.Send(create);
                }
                client.AddStatusEffect1(Enums.Effect1.TeamLeader, 0);
            }
            else
            {
                client.Team = null;
            }
        }
Beispiel #2
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);
        }
Beispiel #3
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);
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Processing damage.
        /// </summary>
        /// <param name="attacker">The attacker.</param>
        /// <param name="attacked">The attacked.</param>
        /// <param name="damage">The damage.</param>
        public static void ProcessDamage(Entities.IEntity attacker, Entities.IEntity attacked, ref uint damage, bool kill_damage = true)
        {
            // Removed dura, bugged atm. the dura works, although client doesn't update proper etc. CBA to fix it as I never intended to use it
            // Although you can go ahead and fix it yourself if you want, I may do it if I ever feel like it
            // The dura lose is commented out below.
            #region ATTACKER : GAMECLIENT
            if (attacker is Entities.GameClient)
            {
                Entities.GameClient attackerclient = attacker as Entities.GameClient;
                attackerclient.LoseAttackDura(damage);

                #region ATTACKED : GAMECLIENT
                if (attacked is Entities.GameClient)
                {
                    Entities.GameClient attackedclient = attacked as Entities.GameClient;
                    // tournament check, damage = 1 + return
                    if (attackerclient.Battle != null)
                    {
                        if (!attackerclient.Battle.HandleAttack(attackerclient, attackedclient, ref damage))
                        {
                            damage = 0;
                            return;
                        }
                    }
                    else
                    {
                        if (attacked.Map.GotKillCons() && !attackedclient.ContainsFlag1(Enums.Effect1.BlueName) && !attackedclient.ContainsFlag1(Enums.Effect1.RedName) && !attackedclient.ContainsFlag1(Enums.Effect1.BlackName))
                        {
                            attackerclient.AddStatusEffect1(Enums.Effect1.BlueName, 20000);
                        }

                        attackedclient.LoseDefenseDura(damage);
                    }
                }
                #endregion
                #region ATTACKED : MONSTER
                if (attacked is Entities.Monster)
                {
                    Entities.Monster attackedmob = attacked as Entities.Monster;

                    if (((byte)attackedmob.Behaviour) >= 3)
                    {
                        attackerclient.AddStatusEffect1(Enums.Effect1.BlueName, 20000);
                    }
                    if (damage > 0)
                    {
                        ulong exp = (ulong)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next((int)(damage / 2), (int)damage);
                        if (attacked.Level > (attacker.Level + 10))
                        {
                            exp *= 2;
                        }
                        else if (attacker.Level > (attacked.Level + 10))
                        {
                            exp = (ulong)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(1, (int)attackedmob.Level);
                        }
                        attackerclient.AddExp(exp);
                    }
                }
                #endregion
                //if (Calculations.Battle.LoseDuraAttak())
                //attackerclient.LoseAttackDura(damage);
            }
            #endregion
            #region ATTACKER : MONSTER

            #region ATTACKED : GAMECLIENT
            if (attacked is Entities.GameClient)
            {
                Entities.GameClient attackedclient = attacked as Entities.GameClient;

                attackedclient.LoseDefenseDura(damage);
            }
            #endregion

            #endregion

            if (kill_damage)
            {
                HitDamage(attacker, attacked, damage);
            }
        }
Beispiel #5
0
        public void LoadBot(Enums.BotType BotType, int botid, Maps.MapPoint location, Entities.GameClient Opponent)
        {
            switch (BotType)
            {
                #region afk bot
            case Enums.BotType.AFKBot:
            {
                using (var sql = new SqlHandler(Program.Config.ReadString("GameConnectionString")))
                {
                    using (var cmd = new SqlCommandBuilder(sql, SqlCommandType.SELECT, true))
                    {
                        cmd.AddWhereValue("BotID", botid);
                        cmd.Finish("DB_Bots");
                    }

                    if (!sql.Read())
                    {
                        return;
                    }

                    Original.Name = Core.NameGenerator.GetName();
                    if (string.IsNullOrEmpty(Original.Name) || string.IsNullOrWhiteSpace(Original.Name))
                    {
                        return;
                    }

                    Original.Avatar         = sql.ReadUInt16("BotAvatar");
                    Original.Model          = sql.ReadUInt16("BotModel");
                    Original.HairStyle      = sql.ReadUInt16("BotHairStyle");
                    Original.Transformation = sql.ReadUInt16("BotTransformation");
                    Original.Strength       = sql.ReadUInt16("BotStrength");
                    Original.Agility        = sql.ReadUInt16("BotAgility");
                    Original.Vitality       = sql.ReadUInt16("BotVitality");
                    Original.Spirit         = sql.ReadUInt16("BotSpirit");
                    Original.PKPoints       = sql.ReadInt16("BotPKPoints");
                    Original.Level          = sql.ReadByte("BotLevel");
                    Original.Class          = (Enums.Class)Enum.Parse(typeof(Enums.Class), sql.ReadString("BotClass"));
                    Original.PlayerTitle    = (Enums.PlayerTitle)Enum.Parse(typeof(Enums.PlayerTitle), sql.ReadString("BotTitle"));
                    Original.Reborns        = sql.ReadByte("BotReborns");

                    Maps.Map map = location.Map;
                    Original.Map       = map;
                    Original.LastMapID = Original.Map.MapID;
                    Original.X         = location.X;
                    Original.Y         = location.Y;
                    Original.LastMapX  = location.X;
                    Original.LastMapY  = location.Y;
                    Original.LastX     = location.X;
                    Original.LastY     = location.Y;

                    Original.Action    = Enums.ActionType.Sit;
                    Original.Direction = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(8);
                    uint entityuid = (uint)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(700000000, 999999999);
                    Original.EntityUID = entityuid;

                    if (!Original.Map.EnterMap(Original))
                    {
                        return;
                    }

                    uint WeaponR = sql.ReadUInt32("BotWeaponR");
                    if (WeaponR > 0)
                    {
                        Data.ItemInfo item = Core.Kernel.ItemInfos[WeaponR].Copy();
                        Original.Equipments.Equip(item, Enums.ItemLocation.WeaponR, false, false);
                    }
                    uint WeaponL = sql.ReadUInt32("BotWeaponL");
                    if (WeaponL > 0)
                    {
                        Data.ItemInfo item = Core.Kernel.ItemInfos[WeaponL].Copy();
                        Original.Equipments.Equip(item, Enums.ItemLocation.WeaponL, false, false);
                    }
                    uint Armor = sql.ReadUInt32("BotArmor");
                    if (Armor > 0)
                    {
                        Data.ItemInfo item = Core.Kernel.ItemInfos[Armor].Copy();
                        Original.Equipments.Equip(item, Enums.ItemLocation.Armor, false, false);
                    }
                    uint Head = sql.ReadUInt32("BotHead");
                    if (Head > 0)
                    {
                        Data.ItemInfo item = Core.Kernel.ItemInfos[Head].Copy();
                        Original.Equipments.Equip(item, Enums.ItemLocation.Head, false, false);
                    }
                    bool UseSteed = sql.ReadBoolean("BotSteed");
                    if (UseSteed)
                    {
                        uint          Steed = sql.ReadUInt32("BotSteedColor");
                        Data.ItemInfo item  = Core.Kernel.ItemInfos[300000].Copy();
                        item.SocketAndRGB = Steed;
                        Original.Equipments.Equip(item, Enums.ItemLocation.Steed, false, false);

                        uint MountArmor = sql.ReadUInt32("BotMountArmor");
                        if (MountArmor > 0)
                        {
                            Data.ItemInfo item2 = Core.Kernel.ItemInfos[MountArmor].Copy();
                            Original.Equipments.Equip(item2, Enums.ItemLocation.SteedArmor, false, false);
                        }

                        Original.Action = Enums.ActionType.None;
                        Original.AddStatusEffect1(Enums.Effect1.Riding);
                    }
                    uint Garment = sql.ReadUInt32("BotGarment");
                    if (Garment > 0)
                    {
                        Data.ItemInfo item = Core.Kernel.ItemInfos[Garment].Copy();
                        Original.Equipments.Equip(item, Enums.ItemLocation.Garment, false, false);
                    }
                    Original.LoggedIn = true;
                }
                break;
            }

                #endregion *
                #region duel bot
            case Enums.BotType.DuelBot:
            {
                if (Opponent == null)
                {
                    return;
                }

                Original.Name = Core.NameGenerator.GetName();
                if (string.IsNullOrEmpty(Original.Name) || string.IsNullOrWhiteSpace(Original.Name))
                {
                    return;
                }

                Original.Avatar         = Opponent.Avatar;
                Original.Model          = Opponent.Model;
                Original.HairStyle      = Opponent.HairStyle;
                Original.Transformation = 0;
                Original.Strength       = Opponent.Strength;
                Original.Agility        = Opponent.Agility;
                Original.Vitality       = Opponent.Vitality;
                Original.Spirit         = Opponent.Spirit;
                Original.PKPoints       = Opponent.PKPoints;
                Original.Level          = Opponent.Level;
                Original.Class          = Opponent.Class;
                Original.PlayerTitle    = Opponent.PlayerTitle;
                Original.Reborns        = Opponent.Reborns;

                Maps.Map map = Opponent.Map;
                Original.Map       = map;
                Original.LastMapID = Original.Map.MapID;
                Original.X         = Opponent.X;
                Original.Y         = Opponent.Y;
                Original.LastMapX  = Opponent.X;
                Original.LastMapY  = Opponent.Y;
                Original.LastX     = Opponent.X;
                Original.LastY     = Opponent.Y;

                Original.Action    = Enums.ActionType.None;
                Original.Direction = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(8);
                uint entityuid = (uint)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(700000000, 999999999);
                Original.EntityUID = entityuid;

                if (!Original.Map.EnterMap(Original))
                {
                    return;
                }

                Original.Equipments.ForceEquipments(Opponent.Equipments);

                Original.BaseEntity.CalculateBaseStats();
                Original.HP = Original.MaxHP;
                Original.MP = Original.MaxMP;

                /*
                 *      uint WeaponR = sql.ReadUInt32("BotWeaponR");
                 *      if (WeaponR > 0)
                 *      {
                 *              Data.ItemInfo item = Core.Kernel.ItemInfos[WeaponR].Copy();
                 *              Original.Equipments.Equip(item, Enums.ItemLocation.WeaponR, false, false);
                 *      }
                 *      uint WeaponL = sql.ReadUInt32("BotWeaponL");
                 *      if (WeaponL > 0)
                 *      {
                 *              Data.ItemInfo item = Core.Kernel.ItemInfos[WeaponL].Copy();
                 *              Original.Equipments.Equip(item, Enums.ItemLocation.WeaponL, false, false);
                 *      }
                 *      uint Armor = sql.ReadUInt32("BotArmor");
                 *      if (Armor > 0)
                 *      {
                 *              Data.ItemInfo item = Core.Kernel.ItemInfos[Armor].Copy();
                 *              Original.Equipments.Equip(item, Enums.ItemLocation.Armor, false, false);
                 *      }
                 *      uint Head = sql.ReadUInt32("BotHead");
                 *      if (Head > 0)
                 *      {
                 *              Data.ItemInfo item = Core.Kernel.ItemInfos[Head].Copy();
                 *              Original.Equipments.Equip(item, Enums.ItemLocation.Head, false, false);
                 *      }
                 *      bool UseSteed = sql.ReadBoolean("BotSteed");
                 *      if (UseSteed)
                 *      {
                 *              uint Steed = sql.ReadUInt32("BotSteedColor");
                 *              Data.ItemInfo item = Core.Kernel.ItemInfos[300000].Copy();
                 *              item.SocketAndRGB = Steed;
                 *              Original.Equipments.Equip(item, Enums.ItemLocation.Steed, false, false);
                 *
                 *              uint MountArmor = sql.ReadUInt32("BotMountArmor");
                 *              if (MountArmor > 0)
                 *              {
                 *                      Data.ItemInfo item2 = Core.Kernel.ItemInfos[MountArmor].Copy();
                 *                      Original.Equipments.Equip(item2, Enums.ItemLocation.SteedArmor, false, false);
                 *              }
                 *
                 *              Original.Action = Enums.ActionType.None;
                 *              Original.AddStatusEffect1(Enums.Effect1.Riding);
                 *      }
                 *      uint Garment = sql.ReadUInt32("BotGarment");
                 *      if (Garment > 0)
                 *      {
                 *              Data.ItemInfo item = Core.Kernel.ItemInfos[Garment].Copy();
                 *              Original.Equipments.Equip(item, Enums.ItemLocation.Garment, false, false);
                 *      }*/
                Original.LoggedIn = true;
                break;
            }
                #endregion *
            }
        }
Beispiel #6
0
        public void Use2(Entities.BossMonster boss, Entities.GameClient target)
        {
            if (!target.Alive)
            {
                return;
            }

            #region SkillAnimation + Power
            if (RealSkill != -1)
            {
                var usespell = new Packets.UseSpellPacket();

                usespell.EntityUID  = boss.EntityUID;
                usespell.SpellID    = (ushort)RealSkill;
                usespell.SpellX     = boss.X;
                usespell.SpellY     = boss.Y;
                usespell.SpellLevel = RealSkilllevel;


                if (PercentTageEffect != -1)
                {
                    int damage = (target.HP / PercentTageEffect);
                    usespell.AddTarget(target.EntityUID, (uint)damage);
                    target.HP -= damage;
                    if (target.HP <= 0)
                    {
                        Packets.Interaction.Battle.Combat.Kill(boss, target, (uint)damage);
                    }
                }
                else if (DamageEffect > 0)
                {
                    int damage = ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(DamageEffect / 2, DamageEffect);
                    usespell.AddTarget(target.EntityUID, (uint)damage);
                    target.HP -= damage;
                    if (target.HP <= 0)
                    {
                        Packets.Interaction.Battle.Combat.Kill(boss, target, (uint)damage);
                    }
                }
                else
                {
                    usespell.AddTarget(target.EntityUID, 0);
                }

                boss.Screen.UpdateScreen(usespell);
            }
            else
            {
                using (var interact = new Packets.InteractionPacket())
                {
                    interact.Action    = Enums.InteractAction.Attack;
                    interact.EntityUID = boss.EntityUID;
                    interact.TargetUID = target.EntityUID;
                    interact.UnPacked  = true;
                    interact.X         = target.X;
                    interact.Y         = target.Y;
                    if (PercentTageEffect != -1)
                    {
                        int damage = (target.HP / PercentTageEffect);
                        interact.Data = (uint)damage;

                        target.HP -= damage;
                        if (target.HP <= 0)
                        {
                            Packets.Interaction.Battle.Combat.Kill(boss, target, (uint)damage);
                        }
                    }
                    else if (DamageEffect > 0)
                    {
                        int damage = ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(DamageEffect / 2, DamageEffect);
                        interact.Data = (uint)damage;

                        target.HP -= damage;
                        if (target.HP <= 0)
                        {
                            Packets.Interaction.Battle.Combat.Kill(boss, target, (uint)damage);
                        }
                    }
                    else
                    {
                        interact.Data = 0;
                    }
                    boss.Screen.UpdateScreen(interact);
                }
            }
            #endregion

            #region Freeze
            if (Freeze)
            {
                target.AddStatusEffect1(Enums.Effect1.IceBlock, FreezeTime);
            }
            #endregion

            #region Paralyze
            if (Paralyzed)
            {
                target.ParalyzeClient(ParalyzeTime);
            }
            #endregion
        }
Beispiel #7
0
        public static bool Handle(Entities.IEntity attacker, Entities.IEntity target, InteractionPacket interaction, UseSpellPacket usespell, Data.Spell spell, out uint damage)
        {
            damage = 0;
            if (!attacker.Alive)
            {
                return(false);
            }
            if (target == null)
            {
                return(false);
            }
            if (!target.Alive)
            {
                return(false);
            }
            if (!(target is Entities.GameClient))
            {
                return(false);
            }
            if (attacker is Entities.GameClient)
            {
                Entities.GameClient client = (attacker as Entities.GameClient);
                if (!(DateTime.Now >= client.LastSmallLongSkill.AddMilliseconds(Core.TimeIntervals.SmallLongSkillInterval)) && client.AttackPacket == null)
                {
                    using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST))
                        client.Send(fmsg);
                    return(false);
                }
                client.LastSmallLongSkill = DateTime.Now;
            }

            Entities.GameClient TargetClient = (target as Entities.GameClient);
            if (!TargetClient.LoggedIn)
            {
                return(false);
            }

            switch (spell.SpellID)
            {
            case 1075:
                TargetClient.AddStatusEffect1(Enums.Effect1.PartiallyInvisible, spell.Duration * 1000);
                break;

            case 1085:
                TargetClient.AddStatusEffect1(Enums.Effect1.StarOfAccuracy, spell.Duration * 1000);
                break;

            case 1090:
                TargetClient.AddStatusEffect1(Enums.Effect1.Shield, spell.Duration * 1000);
                break;

            case 1095:
                TargetClient.AddStatusEffect1(Enums.Effect1.Stig, spell.Duration * 1000);
                break;

            default:
                return(false);
            }
            byte level_target = (byte)(TargetClient.Level > 50 ? 50 : TargetClient.Level);
            uint exp          = (uint)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next((int)level_target, (int)level_target * 2);

            if ((attacker is Entities.GameClient))
            {
                (attacker as Entities.GameClient).AddSpellExp(spell.SpellID, exp);
            }

            usespell.AddTarget(TargetClient.EntityUID, damage);

            return(true);
        }