XConquer

RangosAsesinos

Jul 4th, 2015
244
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #region Ranged
  2.                     else if (attack.AttackType == Attack.Ranged)
  3.                     {
  4.                         if (attacker.MapID == DeathMatch.MAPID)
  5.                         {
  6.                             attacker.Owner.Send(new Message("You have to use manual linear skills(FastBlade/ScentSword)", System.Drawing.Color.Red, Message.Talk));
  7.                             return;
  8.                         }
  9.                         if (attacker.Owner.Screen.TryGetValue(attack.Attacked, out attacked))
  10.                         {
  11.                             CheckForExtraWeaponPowers(attacker.Owner, attacked);
  12.                             if (!CanAttack(attacker, attacked, null, false))
  13.                                 return;
  14.                             var weapons = attacker.Owner.Weapons;
  15.                             if (weapons.Item1 == null) return;
  16.                             if (weapons.Item1.ID / 1000 != 500 && weapons.Item1.ID / 1000 != 613)
  17.                                 return;
  18.  
  19.                             if (weapons.Item1.ID / 1000 == 500)
  20.                                 if (weapons.Item2 != null)
  21.                                     if (!PacketHandler.IsArrow(weapons.Item2.ID))
  22.                                         return;
  23.  
  24.                             #region Kinetic Spark
  25.                             if (attacker.ContainsFlag3(Update.Flags3.KineticSpark))
  26.                             {
  27.                                 var spell = Database.SpellTable.GetSpell(11590, attacker.Owner);
  28.                                 if (spell != null)
  29.                                 {
  30.                                     spell.CanKill = true;
  31.                                     if (Kernel.Rate(spell.Percent))
  32.                                     {
  33.                                         //attacker.RemoveFlag3(Update.Flags3.KineticSpark);
  34.                                         SpellUse suse = new SpellUse(true);
  35.                                         suse.Attacker = attacker.UID;
  36.                                         suse.SpellID = spell.ID;
  37.                                         suse.SpellLevel = spell.Level;
  38.                                         suse.X = attacker.X;
  39.                                         suse.Y = attacker.Y;
  40.                                         IMapObject lastAttacked = attacker;
  41.                                         uint p = 0;
  42.                                         if (Handle.CanAttack(attacker, attacked, spell, false))
  43.                                         {
  44.                                             lastAttacked = attacked;
  45.                                             uint damage = Game.Attacking.Calculate.Melee(attacker, attacked, spell, ref attack)/4;
  46.                                             suse.Effect1 = attack.Effect1;
  47.                                             if (attacker.SpiritFocus)
  48.                                             {
  49.                                                 damage = (uint)(damage * attacker.SpiritFocusPercent);
  50.                                                 attacker.SpiritFocus = false;
  51.                                             }
  52.                                             damage = damage - damage * (p += 20) / 100;
  53.                                             Handle.ReceiveAttack(attacker, attacked, attack, damage, spell);
  54.                                             suse.AddTarget(attacked.UID, damage, attack);
  55.                                         }
  56.                                         foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
  57.                                         {
  58.                                             if (_obj == null) continue;
  59.                                             if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
  60.                                             {
  61.                                                 if (_obj.UID == attacked.UID) continue;
  62.                                                 var attacked1 = _obj as Entity;
  63.                                                 if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5)
  64.                                                 {
  65.                                                     if (Handle.CanAttack(attacker, attacked1, spell, false))
  66.                                                     {
  67.                                                         lastAttacked = attacked1;
  68.                                                         uint damage = Game.Attacking.Calculate.Melee(attacker, attacked1, spell, ref attack);
  69.                                                         suse.Effect1 = attack.Effect1;
  70.                                                         if (attacker.SpiritFocus)
  71.                                                         {
  72.                                                             damage = (uint)(damage * attacker.SpiritFocusPercent);
  73.                                                             attacker.SpiritFocus = false;
  74.                                                         }
  75.                                                         damage = damage - damage * (p += 20) / 100;
  76.                                                         // damage += (damage * 36) / 100;
  77.                                                         if (damage == 0) break;
  78.                                                         Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
  79.                                                         suse.AddTarget(attacked1.UID, damage, attack);
  80.                                                     }
  81.                                                 }
  82.                                             }
  83.                                             else if (_obj.MapObjType == MapObjectType.SobNpc)
  84.                                             {
  85.                                                 attackedsob = _obj as SobNpcSpawn;
  86.                                                 if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob.X, attackedsob.Y) <= 5)
  87.                                                 {
  88.                                                     if (Handle.CanAttack(attacker, attackedsob, spell))
  89.                                                     {
  90.                                                         lastAttacked = attackedsob;
  91.                                                         uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack);
  92.                                                         suse.Effect1 = attack.Effect1;
  93.                                                         if (attacker.SpiritFocus)
  94.                                                         {
  95.                                                             damage = (uint)(damage * attacker.SpiritFocusPercent);
  96.                                                             attacker.SpiritFocus = false;
  97.                                                         }
  98.                                                         damage = damage - damage * (p += 20) / 100;
  99.                                                         // damage += (damage * 36) / 100;
  100.                                                         if (damage == 0) break;
  101.                                                         Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
  102.                                                         suse.AddTarget(attackedsob.UID, damage, attack);
  103.                                                     }
  104.                                                 }
  105.                                             }
  106.                                         }
  107.                                         attacker.Owner.SendScreen(suse, true);
  108.                                         return;
  109.                                     }
  110.                                 }
  111.                             }
  112.                             #endregion
  113.  
  114.                             if (Kernel.GetDistance(attacker.X, attacker.Y, attacked.X, attacked.Y) <= Constants.pScreenDistance)
  115.                             {
  116.                                 attack.Effect1 = Attack.AttackEffects1.None;
  117.  
  118.                                 uint damage = 0;
  119.  
  120.                                 if (!attacker.Assassin())
  121.                                     damage = Game.Attacking.Calculate.Ranged(attacker, attacked, ref attack)/3;
  122.                                 else
  123.                                     damage = Game.Attacking.Calculate.Melee(attacker, attacked, ref attack)/5;
  124.  
  125.                                 attack.Damage = damage;
  126.                                 if (attacker.EntityFlag == EntityFlag.Player && attacked.EntityFlag != EntityFlag.Player)
  127.                                     if (damage > attacked.Hitpoints)
  128.                                     {
  129.                                         attacker.Owner.IncreaseProficiencyExperience(Math.Min(damage, attacked.Hitpoints), (ushort)(weapons.Item1.ID / 1000));
  130.                                     }
  131.                                     else
  132.                                     {
  133.                                         attacker.Owner.IncreaseProficiencyExperience(damage, (ushort)(weapons.Item1.ID / 1000));
  134.                                     }
  135.                                 ReceiveAttack(attacker, attacked, attack, damage, null);
  136.                             }
  137.                         }
  138.                         else if (attacker.Owner.Screen.TryGetSob(attack.Attacked, out attackedsob))
  139.                         {
  140.                             if (CanAttack(attacker, attackedsob, null))
  141.                             {
  142.                                 if (attacker.Owner.Equipment.TryGetItem(ConquerItem.LeftWeapon) == null)
  143.                                     return;
  144.  
  145.                                 var weapons = attacker.Owner.Weapons;
  146.                                 if (weapons.Item1 == null) return;
  147.                                 if (weapons.Item1.ID / 1000 != 500 && weapons.Item1.ID / 1000 != 613)
  148.                                     return;
  149.  
  150.                                 if (attacker.MapID != 1039)
  151.                                     if (weapons.Item1.ID / 1000 == 500)
  152.                                         if (weapons.Item2 != null)
  153.                                             if (!PacketHandler.IsArrow(weapons.Item2.ID))
  154.                                                 return;
  155.  
  156.                                 #region Kinetic Spark
  157.                                 if (attacker.ContainsFlag3(Update.Flags3.KineticSpark))
  158.                                 {
  159.                                     var spell = Database.SpellTable.GetSpell(11590, attacker.Owner);
  160.                                     if (spell != null)
  161.                                     {
  162.                                         spell.CanKill = true;
  163.                                         if (Kernel.Rate(spell.Percent))
  164.                                         {
  165.                                             //attacker.RemoveFlag3(Update.Flags3.KineticSpark);
  166.                                             SpellUse suse = new SpellUse(true);
  167.                                             suse.Attacker = attacker.UID;
  168.                                             suse.SpellID = spell.ID;
  169.                                             suse.SpellLevel = spell.Level;
  170.                                             suse.X = attacker.X;
  171.                                             suse.Y = attacker.Y;
  172.  
  173.                                             IMapObject lastAttacked = attacker;
  174.                                             uint p = 0;
  175.                                             if (Handle.CanAttack(attacker, attackedsob, spell))
  176.                                             {
  177.                                                 lastAttacked = attackedsob;
  178.                                                 uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack);
  179.                                                 suse.Effect1 = attack.Effect1;
  180.                                                 if (attacker.SpiritFocus)
  181.                                                 {
  182.                                                     damage = (uint)(damage * attacker.SpiritFocusPercent);
  183.                                                     attacker.SpiritFocus = false;
  184.                                                 }
  185.                                                 damage = damage - damage * (p += 20) / 100;
  186.                                                 //damage += (damage * 36) / 100;
  187.                                                 Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
  188.                                                 suse.AddTarget(attackedsob.UID, damage, attack);
  189.                                             }
  190.                                             foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
  191.                                             {
  192.                                                 if (_obj == null) continue;
  193.                                                 if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
  194.                                                 {
  195.                                                     var attacked1 = _obj as Entity;
  196.                                                     if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5)
  197.                                                     {
  198.                                                         if (Handle.CanAttack(attacker, attacked1, spell, false))
  199.                                                         {
  200.                                                             lastAttacked = attacked1;
  201.                                                             uint damage = Game.Attacking.Calculate.Melee(attacker, attacked1, spell, ref attack);
  202.                                                             suse.Effect1 = attack.Effect1;
  203.                                                             if (attacker.SpiritFocus)
  204.                                                             {
  205.                                                                 damage = (uint)(damage * attacker.SpiritFocusPercent);
  206.                                                                 attacker.SpiritFocus = false;
  207.                                                             }
  208.                                                             damage = damage - damage * (p += 20) / 100;
  209.                                                             //  damage += (damage * 36) / 100;
  210.                                                             if (damage == 0) break;
  211.                                                             Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
  212.                                                             suse.AddTarget(attacked1.UID, damage, attack);
  213.                                                         }
  214.                                                     }
  215.                                                 }
  216.                                                 else if (_obj.MapObjType == MapObjectType.SobNpc)
  217.                                                 {
  218.                                                     if (_obj.UID == Target) continue;
  219.                                                     var attackedsob1 = _obj as SobNpcSpawn;
  220.                                                     if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob1.X, attackedsob1.Y) <= 5)
  221.                                                     {
  222.                                                         if (Handle.CanAttack(attacker, attackedsob1, spell))
  223.                                                         {
  224.                                                             lastAttacked = attackedsob1;
  225.                                                             uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob1, ref attack);
  226.                                                             suse.Effect1 = attack.Effect1;
  227.                                                             if (attacker.SpiritFocus)
  228.                                                             {
  229.                                                                 damage = (uint)(damage * attacker.SpiritFocusPercent);
  230.                                                                 attacker.SpiritFocus = false;
  231.                                                             }
  232.                                                             damage = damage - damage * (p += 20) / 60;
  233.                                                             //damage += (damage * 36) / 100;
  234.                                                             if (damage == 0) break;
  235.                                                             Handle.ReceiveAttack(attacker, attackedsob1, attack, damage, spell);
  236.                                                             suse.AddTarget(attackedsob1.UID, damage, attack);
  237.                                                         }
  238.                                                     }
  239.                                                 }
  240.                                             }
  241.                                             attacker.Owner.SendScreen(suse, true);
  242.                                             return;
  243.                                         }
  244.                                     }
  245.                                 }
  246.                                 #endregion
  247.  
  248.                                 if (Kernel.GetDistance(attacker.X, attacker.Y, attackedsob.X, attackedsob.Y) <= Constants.pScreenDistance)
  249.                                 {
  250.                                     attack.Effect1 = Attack.AttackEffects1.None;
  251.                                     uint damage = 0;
  252.                                     if (!attacker.Assassin())
  253.                                         damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack) / 2;
  254.                                     else
  255.                                         damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack);
  256.                                     attack.Damage = damage;
  257.                                     ReceiveAttack(attacker, attackedsob, attack, damage, null);
  258.  
  259.                                     if (damage > attackedsob.Hitpoints)
  260.                                     {
  261.                                         attacker.Owner.IncreaseProficiencyExperience(Math.Min(damage, attackedsob.Hitpoints), (ushort)(weapons.Item1.ID / 1000));
  262.                                     }
  263.                                     else
  264.                                     {
  265.                                         attacker.Owner.IncreaseProficiencyExperience(damage, (ushort)(weapons.Item1.ID / 1000));
  266.                                     }
  267.                                 }
  268.                             }
  269.                         }
  270.                         else
  271.                         {
  272.                             attacker.AttackPacket = null;
  273.                         }
  274.                     }
  275.                     #endregion
RAW Paste Data