DevWilliams

SoulShot Fix Rootware

May 2nd, 2021
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. diff --git a/aCis/java/net/sf/l2j/gameserver/data/SkillTable.java b/aCis/java/net/sf/l2j/gameserver/data/SkillTable.java
  2. index ac6f189..597b09c 100644
  3. --- a/aCis/java/net/sf/l2j/gameserver/data/SkillTable.java
  4. +++ b/aCis/java/net/sf/l2j/gameserver/data/SkillTable.java
  5. @@ -40,6 +40,37 @@
  6.  
  7. private static final L2Skill[] _clanSkills = new L2Skill[22];
  8.  
  9. + private static final int[] _shotSkillsId =
  10. + {
  11. + 2008,
  12. + 2009,
  13. + 2033,
  14. + 2039,
  15. + 2047,
  16. + 2061,
  17. + 2150,
  18. + 2151,
  19. + 2152,
  20. + 2153,
  21. + 2154,
  22. + 2155,
  23. + 2156,
  24. + 2157,
  25. + 2158,
  26. + 2159,
  27. + 2160,
  28. + 2161,
  29. + 2162,
  30. + 2163,
  31. + 2164,
  32. + 2181,
  33. + 2182,
  34. + 2183,
  35. + 2184,
  36. + 2185,
  37. + 2186
  38. + };
  39. +
  40. public static SkillTable getInstance()
  41. {
  42. return SingletonHolder._instance;
  43. @@ -183,6 +214,15 @@
  44. return _clanSkills;
  45. }
  46.  
  47. + public static boolean isShotSkill(int skillId)
  48. + {
  49. + for (int id : _shotSkillsId)
  50. + if (id == skillId)
  51. + return true;
  52. +
  53. + return false;
  54. + }
  55. +
  56. /**
  57. * Enum to hold some important references to frequently used (hardcoded) skills in core
  58. * @author DrHouse
  59. diff --git a/aCis/java/net/sf/l2j/gameserver/model/actor/Creature.java b/aCis/java/net/sf/l2j/gameserver/model/actor/Creature.java
  60. index 21a1581..80db9ae 100644
  61. --- a/aCis/java/net/sf/l2j/gameserver/model/actor/Creature.java
  62. +++ b/aCis/java/net/sf/l2j/gameserver/model/actor/Creature.java
  63. @@ -10,6 +10,7 @@
  64. import net.sf.l2j.commons.random.Rnd;
  65.  
  66. import net.sf.l2j.Config;
  67. +import net.sf.l2j.gameserver.data.SkillTable;
  68. import net.sf.l2j.gameserver.data.manager.ZoneManager;
  69. import net.sf.l2j.gameserver.data.xml.MapRegionData;
  70. import net.sf.l2j.gameserver.data.xml.MapRegionData.TeleportType;
  71. @@ -31,6 +32,7 @@
  72. import net.sf.l2j.gameserver.model.actor.ai.type.AttackableAI;
  73. import net.sf.l2j.gameserver.model.actor.ai.type.CreatureAI;
  74. import net.sf.l2j.gameserver.model.actor.attack.CreatureAttack;
  75. +import net.sf.l2j.gameserver.model.actor.attack.CreatureAttack.HitHolder;
  76. import net.sf.l2j.gameserver.model.actor.cast.CreatureCast;
  77. import net.sf.l2j.gameserver.model.actor.container.creature.ChanceSkillList;
  78. import net.sf.l2j.gameserver.model.actor.container.creature.EffectList;
  79. @@ -47,8 +49,10 @@
  80. import net.sf.l2j.gameserver.model.location.Location;
  81. import net.sf.l2j.gameserver.model.zone.type.WaterZone;
  82. import net.sf.l2j.gameserver.network.serverpackets.AbstractNpcInfo.NpcInfo;
  83. +import net.sf.l2j.gameserver.network.serverpackets.Attack;
  84. import net.sf.l2j.gameserver.network.serverpackets.ChangeMoveType;
  85. import net.sf.l2j.gameserver.network.serverpackets.L2GameServerPacket;
  86. +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
  87. import net.sf.l2j.gameserver.network.serverpackets.Revive;
  88. import net.sf.l2j.gameserver.network.serverpackets.ServerObjectInfo;
  89. import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
  90. @@ -266,8 +270,28 @@
  91. */
  92. public void broadcastPacket(L2GameServerPacket packet, boolean selfToo)
  93. {
  94. + final boolean isAttackWithShots = (packet instanceof Attack) && ((Attack) packet).soulshot;
  95. for (final Player player : getKnownType(Player.class))
  96. + {
  97. + if (isAttackWithShots && player.getBlockList().isBlockingAll())
  98. + {
  99. + final Attack atk = new Attack(((Attack) packet).getAttacker(), false, 0);
  100. + final HitHolder[] holder = ((Attack) packet).getHits();
  101. + final HitHolder[] newHolder = new HitHolder[holder.length];
  102. +
  103. + // This magic need for cleanup FLAGS bit mask from SS usage.
  104. + for (int i = 0; i < newHolder.length; i++)
  105. + newHolder[i] = new HitHolder(holder[i]._target, holder[i]._damage, holder[i]._crit, holder[i]._miss, holder[i]._shld);
  106. +
  107. + // Generating FLAG bit mast anew.
  108. + atk.processHits(newHolder);
  109. +
  110. + player.sendPacket(atk);
  111. + continue;
  112. + }
  113. +
  114. player.sendPacket(packet);
  115. + }
  116. }
  117.  
  118. /**
  119. @@ -280,8 +304,16 @@
  120. if (radius < 0)
  121. radius = 600;
  122.  
  123. + // Check if packet is MagicSkillUse.
  124. + final boolean isMagicSkillUse = (packet instanceof MagicSkillUse);
  125. for (final Player player : getKnownTypeInRadius(Player.class, radius))
  126. + {
  127. + // Check if magicSkillUse contains Shot's skill and check if player disabled shot spells.
  128. + if (isMagicSkillUse && SkillTable.isShotSkill(((MagicSkillUse) packet).getSkillId()) && player.getBlockList().isBlockingAll())
  129. + continue;
  130. +
  131. player.sendPacket(packet);
  132. + }
  133. }
  134.  
  135. /**
  136. diff --git a/aCis/java/net/sf/l2j/gameserver/network/serverpackets/Attack.java b/aCis/java/net/sf/l2j/gameserver/network/serverpackets/Attack.java
  137. index 551b40b..3370551 100644
  138. --- a/aCis/java/net/sf/l2j/gameserver/network/serverpackets/Attack.java
  139. +++ b/aCis/java/net/sf/l2j/gameserver/network/serverpackets/Attack.java
  140. @@ -10,7 +10,7 @@
  141. public static final int HITFLAG_SHLD = 0x40;
  142. public static final int HITFLAG_MISS = 0x80;
  143.  
  144. - private final int _attackerId;
  145. + private final Creature _attacker;
  146. public final boolean soulshot;
  147. public final int _ssGrade;
  148. private final int _x;
  149. @@ -20,7 +20,7 @@
  150.  
  151. public Attack(Creature attacker, boolean useShots, int ssGrade)
  152. {
  153. - _attackerId = attacker.getObjectId();
  154. + _attacker = attacker;
  155. soulshot = useShots;
  156. _ssGrade = ssGrade;
  157. _x = attacker.getX();
  158. @@ -64,12 +64,22 @@
  159. return _hits != null;
  160. }
  161.  
  162. + public Creature getAttacker()
  163. + {
  164. + return _attacker;
  165. + }
  166. +
  167. + public HitHolder[] getHits()
  168. + {
  169. + return _hits;
  170. + }
  171. +
  172. @Override
  173. protected final void writeImpl()
  174. {
  175. writeC(0x05);
  176.  
  177. - writeD(_attackerId);
  178. + writeD(_attacker.getObjectId());
  179. writeD(_hits[0]._targetId);
  180. writeD(_hits[0]._damage);
  181. writeC(_hits[0]._flags);
  182. diff --git a/aCis/java/net/sf/l2j/gameserver/network/serverpackets/MagicSkillUse.java b/aCis/java/net/sf/l2j/gameserver/network/serverpackets/MagicSkillUse.java
  183. index 57c8839..96f5c22 100644
  184. --- a/aCis/java/net/sf/l2j/gameserver/network/serverpackets/MagicSkillUse.java
  185. +++ b/aCis/java/net/sf/l2j/gameserver/network/serverpackets/MagicSkillUse.java
  186. @@ -45,6 +45,11 @@
  187. this(cha, cha, skillId, skillLevel, hitTime, reuseDelay, false);
  188. }
  189.  
  190. + public int getSkillId()
  191. + {
  192. + return _skillId;
  193. + }
  194. +
  195. @Override
  196. protected final void writeImpl()
  197. {
  198.  
Advertisement
Add Comment
Please, Sign In to add comment