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; } }
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); }
/// <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); } } }
/// <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); } }
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 * } }
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 }
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); }