浏览代码

Fixed teleport exploit in regards to Archery bonus XP.

GJ 12 年之前
父节点
当前提交
8f17ec96f0
共有 1 个文件被更改,包括 12 次插入1 次删除
  1. 12 1
      src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java

+ 12 - 1
src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java

@@ -18,10 +18,21 @@ public class ArcheryManager extends SkillManager {
 
 
     public void distanceXpBonus(LivingEntity target) {
     public void distanceXpBonus(LivingEntity target) {
         Player player = mcMMOPlayer.getPlayer();
         Player player = mcMMOPlayer.getPlayer();
-        Location shooterLocation = player.getEyeLocation();
+        Location shooterLocation = player.getLocation();
         Location targetLocation = target.getLocation();
         Location targetLocation = target.getLocation();
+
+        if (!shooterLocation.getWorld().equals(targetLocation.getWorld())) {
+            return;
+        }
+
         double squaredDistance = shooterLocation.distanceSquared(targetLocation);
         double squaredDistance = shooterLocation.distanceSquared(targetLocation);
 
 
+        // Cap distance at 100^2 to prevent teleport exploit.
+        // TODO: Better way to handle this would be great...
+        if (squaredDistance > 10000) {
+            squaredDistance = 10000;
+        }
+
         int bonusXp = (int) (squaredDistance * Archery.distanceXpModifer);
         int bonusXp = (int) (squaredDistance * Archery.distanceXpModifer);
         mcMMOPlayer.addXp(SkillType.ARCHERY, bonusXp);
         mcMMOPlayer.addXp(SkillType.ARCHERY, bonusXp);
     }
     }