Prechádzať zdrojové kódy

Fixed arrow boucing off entities on daze proc

bm01 13 rokov pred
rodič
commit
5fa79926db

+ 1 - 0
Changelog.txt

@@ -20,6 +20,7 @@ Version 1.3.07
  + Added config options for enabling/disabling specific double drops
  + Added automatic zip backup of flatfile database & config files
  + Added config options to enable/disable specific skills for PVP & PVE
+ = Fixed bug where an arrow could bounce off entities on daze proc
  = Fixed bug where a player could gain Acrobatics experience while riding a cart
  = Fixed /party not working properly with 2 arguments
  = Fixed /ability not checking the right permission

+ 4 - 3
src/main/java/com/gmail/nossr50/skills/combat/Archery.java

@@ -10,13 +10,13 @@ import org.bukkit.Location;
 import org.bukkit.Material;
 import org.bukkit.entity.Entity;
 import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.inventory.ItemStack;
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.datatypes.SkillType;
 import com.gmail.nossr50.locale.LocaleLoader;
-import com.gmail.nossr50.util.Combat;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.Users;
 
@@ -53,8 +53,9 @@ public class Archery {
      *
      * @param defender Defending player
      * @param attacker Attacking player
+     * @param event The event to modify
      */
-    public static void dazeCheck(Player defender, Player attacker) {
+    public static void dazeCheck(Player defender, Player attacker, EntityDamageByEntityEvent event) {
         final int MAX_BONUS_LEVEL = 1000;
 
         int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY);
@@ -70,7 +71,7 @@ public class Archery {
 
         if (random.nextInt(2000) <= skillCheck) {
             defender.teleport(loc);
-            Combat.dealDamage(defender, 4);
+            event.setDamage(event.getDamage() + 4);
             defender.sendMessage(LocaleLoader.getString("Combat.TouchedFuzzy"));
             attacker.sendMessage(LocaleLoader.getString("Combat.TargetDazed"));
         }

+ 9 - 10
src/main/java/com/gmail/nossr50/util/Combat.java

@@ -265,9 +265,8 @@ public class Combat {
         if (shooter instanceof Player) {
             Player attacker = (Player) shooter;
             PlayerProfile PPa = Users.getProfile(attacker);
-            int damage = event.getDamage();
 
-            if (permInstance.archery(attacker) && damage > 0) {
+            if (permInstance.archery(attacker)) {
                 if (permInstance.archeryBonus(attacker)) {
                     /*Archery needs a damage bonus to be viable in PVP*/
                     int skillLvl = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY);
@@ -280,8 +279,14 @@ public class Combat {
 
                     /* Every 50 skill levels Archery gains 10% damage bonus, set that here */
                     //TODO: Work in progress for balancing out Archery, will work on it more later...
-                    int archeryBonus = (int)(event.getDamage() * dmgBonusPercent);
-                    event.setDamage(event.getDamage() + archeryBonus);
+                    int damage = event.getDamage();
+                    int archeryBonus = (int) (damage * dmgBonusPercent);
+
+                    event.setDamage(damage + archeryBonus);
+                }
+
+                if (target instanceof Player && permInstance.daze(attacker)) {
+                    Archery.dazeCheck((Player) target, attacker, event);
                 }
 
                 if (permInstance.trackArrows(attacker)) {
@@ -291,12 +296,6 @@ public class Combat {
                 if (target != attacker) {
                     startGainXp(attacker, PPa, target, SkillType.ARCHERY, pluginx);
                 }
-
-                if (target instanceof Player) {
-                    if (permInstance.daze(attacker)) {
-                        Archery.dazeCheck((Player) target, attacker);
-                    }
-                }
             }
         }
     }