diff --git a/Plugins/Mineplex.Core/src/mineplex/core/explosion/Explosion.java b/Plugins/Mineplex.Core/src/mineplex/core/explosion/Explosion.java index a9b24d1ca..c4f0a1dec 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/explosion/Explosion.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/explosion/Explosion.java @@ -1,6 +1,7 @@ package mineplex.core.explosion; import java.util.AbstractMap; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -271,4 +272,54 @@ public class Explosion extends MiniPlugin { return _explosionBlocks; } + + public void BlockExplosion(Collection blockSet, Location mid) + { + if (blockSet.isEmpty()) + return; + + //Save + final HashMap> blocks = new HashMap>(); + + for (Block cur : blockSet) + { + if (cur.getTypeId() == 0) + continue; + + blocks.put(cur, new AbstractMap.SimpleEntry(cur.getTypeId(), cur.getData())); + + if (cur.getTypeId() != 98 || cur.getData() != 0) + cur.setTypeId(0); + } + + //DELAY + final Location fLoc = mid; + _plugin.getServer().getScheduler().runTaskLater(_plugin, new Runnable() + { + public void run() + { + //Launch + for (Block cur : blocks.keySet()) + { + if (blocks.get(cur).getKey() == 98) + if (blocks.get(cur).getValue() == 0) + continue; + + double chance = 0.2 + (double)_explosionBlocks.size()/(double)120; + if (Math.random() > Math.min(0.85, chance)) + { + FallingBlock fall = cur.getWorld().spawnFallingBlock(cur.getLocation().add(0.5, 0.5, 0.5), blocks.get(cur).getKey(), blocks.get(cur).getValue()); + + Vector vec = UtilAlg.getTrajectory(fLoc, fall.getLocation()); + if (vec.getY() < 0) vec.setY(vec.getY() * -1); + + UtilAction.velocity(fall, vec, 0.5 + 0.25*Math.random(), false, 0, 0.4 + 0.20*Math.random(), 10, false); + + _explosionBlocks.add(fall); + } + + } + } + }, 1); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 0e495a88f..576ce657f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -203,6 +203,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation { return _donationManager; } + + public Explosion GetExplosion() + { + return _explosionManager; + } public Fire GetFire() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java index 7913be489..9ee14376d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameFactory.java @@ -6,6 +6,7 @@ import org.bukkit.ChatColor; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.minigames.dragons.Dragons; +import nautilus.game.arcade.game.minigames.escape.DragonEscape; import nautilus.game.arcade.game.minigames.evolution.Evolution; import nautilus.game.arcade.game.minigames.mineware.MineWare; import nautilus.game.arcade.game.minigames.quiver.Quiver; @@ -13,7 +14,6 @@ import nautilus.game.arcade.game.minigames.snowfight.SnowFight; import nautilus.game.arcade.game.minigames.runner.Runner; import nautilus.game.arcade.game.minigames.spleef.Spleef; import nautilus.game.arcade.game.minigames.turfforts.TurfForts; -import nautilus.game.arcade.game.minigames.undeadescape.UndeadEscape; import nautilus.game.arcade.game.standalone.bridge.Bridge; import nautilus.game.arcade.game.standalone.castlesiege.CastleSiege; import nautilus.game.arcade.game.standalone.smash.SuperSmash; @@ -41,7 +41,7 @@ public class GameFactory else if (gameType == GameType.Smash) return new SuperSmash(_manager); else if (gameType == GameType.Spleef) return new Spleef(_manager); else if (gameType == GameType.TurfForts) return new TurfForts(_manager); - else if (gameType == GameType.UndeadEscape) return new UndeadEscape(_manager); + else if (gameType == GameType.DragonEscape) return new DragonEscape(_manager); else if (gameType == GameType.ZombieSurvival) return new ZombieSurvival(_manager); else return null; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 2d248eb02..5babb5199 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -10,7 +10,7 @@ public enum GameType Evolution("Evolution"), Smash("Super Smash Mobs"), Spleef("Super Spleef"), - UndeadEscape("Undead Escape"), + DragonEscape("Dragon Escape"), Quiver("One in the Quiver"), Runner("Runner"), SnowFight("Snow Fight"), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index bed0407fc..8c328c7f1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -129,6 +129,7 @@ public abstract class Game implements Listener public boolean CreatureAllowOverride = false; public int WorldTimeSet = -1; + public boolean WorldWeatherEnabled = false; public int WorldHeightLimit = 0; public int HungerSet = -1; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java index 2a5d6fec6..bdbcfd369 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java @@ -74,20 +74,7 @@ public abstract class SoloGame extends Game if (_places.size() >= 3) AddGems(_places.get(2), 10, "3rd Place", false); - - /* - int sections = _places.size()/10; - - - for (int i=0 ; i<5 ; i++) - { - for (int j=i*sections ; j < j*sections + sections ; j++) - { - AddGems(_places.get(j), 5-i, "Top " + ((i+1)*10) + "%", false); - } - } - */ - + for (Player player : GetPlayers(false)) if (player.isOnline()) AddGems(player, 10, "Participation", false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/DragonData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/DragonData.java index 9b1a7eded..f87935e3d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/DragonData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/DragonData.java @@ -39,7 +39,7 @@ public class DragonData Location = dragon.getLocation(); } - public void Update() + public void Move() { Turn(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/Dragons.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/Dragons.java index 959c55bd2..4fa1d7642 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/Dragons.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/dragons/Dragons.java @@ -29,6 +29,7 @@ import nautilus.game.arcade.events.PlayerStateChangeEvent; import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.game.minigames.dragons.kits.*; +import nautilus.game.arcade.game.minigames.dragons.DragonData; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.perks.PerkSparkler; @@ -174,7 +175,7 @@ public class Dragons extends SoloGame for (DragonData data : _dragons.values()) { data.Target(); - data.Update(); + data.Move(); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonEscape.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonEscape.java new file mode 100644 index 000000000..3d256f00d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonEscape.java @@ -0,0 +1,316 @@ +package nautilus.game.arcade.game.minigames.escape; + +import java.util.ArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.Entity; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilMath; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.GameType; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.SoloGame; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.GameTeam.PlayerState; +import nautilus.game.arcade.game.minigames.escape.DragonEscapeData; +import nautilus.game.arcade.game.minigames.quiver.kits.KitBrawler; +import nautilus.game.arcade.game.standalone.bridge.kits.KitBeserker; +import nautilus.game.arcade.kit.Kit; + +public class DragonEscape extends SoloGame +{ + private ArrayList _ranks = new ArrayList(); + private ArrayList _lastScoreboard = new ArrayList(); + + private Location _dragon; + private ArrayList _waypoints; + + private DragonEscapeData _dragonData; + + public DragonEscape(ArcadeManager manager) + { + super(manager, GameType.DragonEscape, + + new Kit[] + { + new KitBrawler(manager) + }, + + new String[] + { + "Douglas the Dragon is after you!", + "RUN!!!!!!!!!!", + "Last player alive wins!" + }); + + this.DamagePvP = false; + this.HungerSet = 20; + } + + @Override + public void ParseData() + { + _dragon = WorldData.GetDataLocs("RED").get(0); + _waypoints = new ArrayList(); + + //Order Waypoints + Location last = _dragon; + + while (!WorldData.GetDataLocs("BLACK").isEmpty()) + { + Location best = null; + double bestDist = 0; + + //Get Best + for (Location loc : WorldData.GetDataLocs("BLACK")) + { + double dist = UtilMath.offset(loc, last); + + if (best == null || dist < bestDist) + { + best = loc; + bestDist = dist; + } + } + + _waypoints.add(best); + WorldData.GetDataLocs("BLACK").remove(best); + best.subtract(new Vector(0,1,0)); + + last = best; + } + } + + @EventHandler + public void SpawnDragon(GameStateChangeEvent event) + { + if (event.GetState() != GameState.Prepare) + return; + + this.CreatureAllowOverride = true; + EnderDragon dragon = _dragon.getWorld().spawn(_dragon, EnderDragon.class); + this.CreatureAllowOverride = false; + + dragon.setCustomName(ChatColor.YELLOW + C.Bold + "Douglas the Dragon"); + + _dragonData = new DragonEscapeData(this, dragon, _waypoints.get(0)); + } + + @EventHandler + public void MoveDragon(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + if (_dragonData == null) + return; + + _dragonData.Target = _waypoints.get(Math.min(_waypoints.size()-1, (GetWaypointIndex(_dragonData.Location) + 1))); + + _dragonData.Move(); + + Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(_dragonData.Location, 10d).keySet(), _dragonData.Location); + } + + @EventHandler + public void UpdateScores(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (_dragonData == null) + return; + + double dragonScore = GetScore(_dragonData.Dragon); + + for (Player player : GetPlayers(true)) + { + double playerScore = GetScore(player); + + if (player.getLocation().getY() < 50) + player.damage(50); + + if (dragonScore > playerScore) + { + player.damage(50); + } + else + { + + SetScore(player, playerScore); + } + } + } + + public void SetScore(Player player, double playerScore) + { + //Rank + for (DragonScore score : _ranks) + { + if (score.Player.equals(player)) + { + score.Score = playerScore; + return; + } + } + + _ranks.add(new DragonScore(player, playerScore)); + } + + public double GetScore(Entity ent) + { + int index = GetWaypointIndex(ent.getLocation()); + + double score = 10000 * index; + + score -= UtilMath.offset(ent.getLocation(), _waypoints.get(Math.min(_waypoints.size()-1, index+1))); + + return score; + } + + + + public int GetWaypointIndex(Location loc) + { + int best = -1; + double bestDist = 0; + + for (int i=0 ; i<_waypoints.size() ; i++) + { + Location waypoint = _waypoints.get(i); + + double dist = UtilMath.offset(waypoint, loc); + + if (best == -1 || dist < bestDist) + { + best = i; + bestDist = dist; + } + } + + return best; + } + + private void SortScores() + { + for (int i=0 ; i<_ranks.size() ; i++) + { + for (int j=_ranks.size()-1 ; j>0 ; j--) + { + if (_ranks.get(j).Score > _ranks.get(j-1).Score) + { + DragonScore temp = _ranks.get(j); + _ranks.set(j, _ranks.get(j-1)); + _ranks.set(j-1, temp); + } + } + } + } + + + + @Override + @EventHandler + public void ScoreboardUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + //Wipe Last + for (String string : _lastScoreboard) + GetScoreboard().resetScores(Bukkit.getOfflinePlayer(string)); + _lastScoreboard.clear(); + + SortScores(); + + //Write New + for (int i=0 ; i<_ranks.size() ; i++) + { + DragonScore score = _ranks.get(i); + + ChatColor col = ChatColor.GREEN; + if (!IsAlive(score.Player)) + col = ChatColor.RED; + + String out = i+1 + " " + col + score.Player.getName(); + + if (out.length() >= 16) + out = out.substring(0, 15); + + _lastScoreboard.add(out); + + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(16-i); + } + } + + @Override + public Location GetSpectatorLocation() + { + if (SpectatorSpawn == null) + { + SpectatorSpawn = new Location(this.WorldData.World, 0,0,0); + } + + Vector vec = new Vector(0,0,0); + double count = 0; + + for (Player player : GetPlayers(true)) + { + count++; + vec.add(player.getLocation().toVector()); + } + + if (count == 0) + count++; + + vec.multiply(1d/count); + + SpectatorSpawn.setX(vec.getX()); + SpectatorSpawn.setY(vec.getY() + 10); + SpectatorSpawn.setZ(vec.getZ()); + + return SpectatorSpawn; + } + + @Override + public void EndCheck() + { + if (!IsLive()) + return; + + if (GetPlayers(true).size() <= 0) + { + //Announce + AnnounceEnd(_places); + + //Gems + if (_places.size() >= 1) + AddGems(_places.get(0), 20, "1st Place", false); + + if (_places.size() >= 2) + AddGems(_places.get(1), 15, "2nd Place", false); + + if (_places.size() >= 3) + AddGems(_places.get(2), 10, "3rd Place", false); + + for (Player player : GetPlayers(false)) + if (player.isOnline()) + AddGems(player, 10, "Participation", false); + + //End + SetState(GameState.End); + + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonEscapeData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonEscapeData.java new file mode 100644 index 000000000..65299177d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonEscapeData.java @@ -0,0 +1,72 @@ +package nautilus.game.arcade.game.minigames.escape; + +import mineplex.core.common.util.UtilAlg; + +import org.bukkit.Location; +import org.bukkit.entity.EnderDragon; +import org.bukkit.util.Vector; + +public class DragonEscapeData +{ + public DragonEscape Host; + + public EnderDragon Dragon; + + public Location Target = null; + public Location Location = null; + + public float Pitch = 0; + public Vector Velocity = new Vector(0,0,0); + + public DragonEscapeData(DragonEscape host, EnderDragon dragon, Location target) + { + Host = host; + + Dragon = dragon; + + Location temp = dragon.getLocation(); + temp.setPitch(UtilAlg.GetPitch(UtilAlg.getTrajectory(dragon.getLocation(), target))); + dragon.teleport(temp); + + Velocity = dragon.getLocation().getDirection().setY(0).normalize(); + Pitch = UtilAlg.GetPitch(dragon.getLocation().getDirection()); + + Location = dragon.getLocation(); + } + + public void Move() + { + Turn(); + + double timeSpeed = 0.16 + (System.currentTimeMillis() - Host.GetStateTime())/3000000d; + System.out.println(timeSpeed); + + Location.add(Velocity.clone().multiply(timeSpeed)); + Location.add(0, -Pitch, 0); + + Location.setPitch(-1 * Pitch); + Location.setYaw(180 + UtilAlg.GetYaw(Velocity)); + + Dragon.teleport(Location); + } + + private void Turn() + { + //Pitch + float desiredPitch = UtilAlg.GetPitch(UtilAlg.getTrajectory(Location, Target)); + if (desiredPitch < Pitch) Pitch = (float)(Pitch - 0.05); + if (desiredPitch > Pitch) Pitch = (float)(Pitch + 0.05); + if (Pitch > 0.5) Pitch = 0.5f; + if (Pitch < -0.5) Pitch = -0.5f; + + //Flat + Vector desired = UtilAlg.getTrajectory2d(Location, Target); + desired.subtract(UtilAlg.Normalize(new Vector(Velocity.getX(), 0, Velocity.getZ()))); + desired.multiply(0.2); + + Velocity.add(desired); + + //Speed + UtilAlg.Normalize(Velocity); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonScore.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonScore.java new file mode 100644 index 000000000..1a2dfbdd7 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/DragonScore.java @@ -0,0 +1,15 @@ +package nautilus.game.arcade.game.minigames.escape; + +import org.bukkit.entity.Player; + +public class DragonScore +{ + public org.bukkit.entity.Player Player; + public double Score; + + public DragonScore(Player player, double i) + { + Player = player; + Score = i; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/kits/KitLeaper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/kits/KitLeaper.java new file mode 100644 index 000000000..11a8df1dc --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/escape/kits/KitLeaper.java @@ -0,0 +1,40 @@ +package nautilus.game.arcade.game.minigames.escape.kits; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.itemstack.ItemStackFactory; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitAvailability; +import nautilus.game.arcade.kit.Perk; +import nautilus.game.arcade.kit.perks.*; + +public class KitLeaper extends Kit +{ + public KitLeaper(ArcadeManager manager) + { + super(manager, "Jumper", KitAvailability.Free, + + new String[] + { + "Leap to avoid falling to your death!" + }, + + new Perk[] + { + new PerkLeap("Leap", 1.2, 1.2, 8000) + }, + EntityType.ZOMBIE, + new ItemStack(Material.STONE_AXE)); + + } + + @Override + public void GiveItems(Player player) + { + player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.STONE_AXE)); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/quiver/kits/KitLeaper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/quiver/kits/KitLeaper.java index 573a4bbe2..2507f96c6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/quiver/kits/KitLeaper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/quiver/kits/KitLeaper.java @@ -18,16 +18,16 @@ public class KitLeaper extends Kit { public KitLeaper(ArcadeManager manager) { - super(manager, "Leaper", KitAvailability.Free, + super(manager, "Jumper", KitAvailability.Free, new String[] { - "Evade and kill using your powerful leap!" + "Evade and kill using your double jump!" }, new Perk[] { - new PerkLeap("Leap", 1.2, 1.0, 8000) + new PerkDoubleJump("Double Jump", 0.9, 0.9, true) }, EntityType.ZOMBIE, new ItemStack(Material.IRON_AXE)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitArcher.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitArcher.java index 1aaed7c67..3f9f0b5f3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitArcher.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitArcher.java @@ -16,7 +16,7 @@ public class KitArcher extends Kit { public KitArcher(ArcadeManager manager) { - super(manager, "Archer", KitAvailability.Free, + super(manager, "Archer", KitAvailability.Green, new String[] { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitFrosty.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitFrosty.java index 241557bfa..8814f82d7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitFrosty.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/runner/kits/KitFrosty.java @@ -19,7 +19,7 @@ public class KitFrosty extends Kit { public KitFrosty(ArcadeManager manager) { - super(manager, "Frosty", KitAvailability.Free, + super(manager, "Frosty", KitAvailability.Blue, new String[] { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/undeadescape/GiantData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/undeadescape/GiantData.java deleted file mode 100644 index e41a84c1d..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/undeadescape/GiantData.java +++ /dev/null @@ -1,152 +0,0 @@ -package nautilus.game.arcade.game.minigames.undeadescape; - -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilTime; - -import org.bukkit.Location; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -public class GiantData -{ - public UndeadEscape Host; - - public EnderDragon Dragon; - - public Entity TargetEntity = null; - - public Location Target = null; - public Location Location = null; - - public float Pitch = 0; - public Vector Velocity = new Vector(0,0,0); - - public double RangeBest = 1000; - public long RangeTime = 0; - - public GiantData(UndeadEscape host, EnderDragon dragon) - { - Host = host; - - Dragon = dragon; - - Velocity = dragon.getLocation().getDirection().setY(0).normalize(); - Pitch = UtilAlg.GetPitch(dragon.getLocation().getDirection()); - - Location = dragon.getLocation(); - } - - public void Update() - { - Turn(); - - Location.add(Velocity); - Location.add(0, -Pitch, 0); - - Location.setPitch(-1 * Pitch); - Location.setYaw(180 + UtilAlg.GetYaw(Velocity)); - - Dragon.teleport(Location); - } - - private void Turn() - { - //Pitch - float desiredPitch = UtilAlg.GetPitch(UtilAlg.getTrajectory(Location, Target)); - if (desiredPitch < Pitch) Pitch = (float)(Pitch - 0.05); - if (desiredPitch > Pitch) Pitch = (float)(Pitch + 0.05); - if (Pitch > 0.5) Pitch = 0.5f; - if (Pitch < -0.5) Pitch = -0.5f; - - //Flat - Vector desired = UtilAlg.getTrajectory2d(Location, Target); - desired.subtract(UtilAlg.Normalize(new Vector(Velocity.getX(), 0, Velocity.getZ()))); - desired.multiply(0.075); - - Velocity.add(desired); - - //Speed - UtilAlg.Normalize(Velocity); - } - - public void Target() - { - if (TargetEntity != null) - { - if (!TargetEntity.isValid()) - { - TargetEntity = null; - } - else - { - Target = TargetEntity.getLocation().subtract(0, 8, 0); - } - - return; - } - - if (Target == null) - { - TargetSky(); - } - - if (UtilMath.offset(Location, Target) < 4) - { - //Target Player - if (Target.getY() >= Host.GetSpectatorLocation().getY()) - { - TargetPlayer(); - } - //Target Sky - else - { - TargetSky(); - } - } - - TargetTimeout(); - } - - public void TargetTimeout() - { - if (UtilMath.offset(Location, Target)+1 < RangeBest) - { - RangeTime = System.currentTimeMillis(); - RangeBest = UtilMath.offset(Location, Target); - } - else - { - if (UtilTime.elapsed(RangeTime, 10000)) - { - TargetSky(); - } - } - } - - public void TargetSky() - { - RangeBest = 9000; - RangeTime = System.currentTimeMillis(); - - Target = Host.GetSpectatorLocation().clone().add(50 - UtilMath.r(100), 20 + UtilMath.r(30), 50 - UtilMath.r(100)); - } - - public void TargetPlayer() - { - RangeBest = 9000; - RangeTime = System.currentTimeMillis(); - - Player player = Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size())); - Target = player.getLocation(); - - Target.add(UtilAlg.getTrajectory(Location, Target).multiply(4)); - } - - public void HitByArrow() - { - TargetSky(); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/undeadescape/UndeadEscape.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/undeadescape/UndeadEscape.java deleted file mode 100644 index b534911e6..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/minigames/undeadescape/UndeadEscape.java +++ /dev/null @@ -1,245 +0,0 @@ -package nautilus.game.arcade.game.minigames.undeadescape; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.entity.Creature; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Giant; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.util.Vector; - -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilTime; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.GameType; -import nautilus.game.arcade.game.SoloGame; -import nautilus.game.arcade.game.standalone.bridge.kits.KitBeserker; -import nautilus.game.arcade.kit.Kit; - -public class UndeadEscape extends SoloGame -{ - private Location _giantStart; - private Location _giantEnd; - - private Creature _giant = null; - - public UndeadEscape(ArcadeManager manager) - { - super(manager, GameType.UndeadEscape, - - new Kit[] - { - new KitBeserker(manager) - }, - - new String[] - { - "RUN!!!!!!!" - }); - - this.DamagePvP = false; - } - - @Override - public void ParseData() - { - if (!WorldData.GetDataLocs("BLACK").isEmpty()) - _giantStart = WorldData.GetDataLocs("BLACK").get(0); - - if (!WorldData.GetDataLocs("WHITE").isEmpty()) - _giantEnd = WorldData.GetDataLocs("WHITE").get(0); - } - - @EventHandler - public void GiantTarget(EntityTargetEvent event) - { - if (_giant == null) - return; - - if (event.getEntity().equals(_giant)) - event.setCancelled(true); - } - - @EventHandler - public void GiantDamage(EntityDamageEvent event) - { - if (_giant == null) - return; - - if (event.getEntity().equals(_giant)) - event.setCancelled(true); - } - - @EventHandler - public void GiantCombust(EntityCombustEvent event) - { - if (_giant == null) - return; - - if (event.getEntity().equals(_giant)) - event.setCancelled(true); - } - - @EventHandler - public void GiantMove(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - if (GetState() != GameState.Live) - return; - - if (!UtilTime.elapsed(GetStateTime(), 5000)) - return; - - if (_giant == null || !_giant.isValid()) - { - if (_giant != null) - _giant.remove(); - - CreatureAllowOverride = true; - _giant = _giantStart.getWorld().spawn(_giantStart, Giant.class); - CreatureAllowOverride = false; - } - - //Move - double rate = 0.075 + ((System.currentTimeMillis() - this.GetStateTime())/100000d); - - Location target = _giant.getLocation().add(UtilAlg.getTrajectory(_giantStart, _giantEnd).multiply(rate)); - _giant.teleport(target); - - /* - EntityCreature ec = ((CraftCreature)_giant).getHandle(); - Navigation nav = ec.getNavigation(); - Location loc = _giant.getLocation().add(UtilAlg.getTrajectory(_giantStart, _giantEnd).multiply(1)); - nav.a(loc.getX(), loc.getY(), loc.getZ(), 2f + Math.min(2f, (float)())); - */ - } - - @EventHandler - public void GiantGroan(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (GetState() != GameState.Live) - return; - - if (_giant == null) - return; - - if (Math.random() > 0.75) - return; - - _giant.getWorld().playSound(_giant.getEyeLocation(), Sound.ZOMBIE_IDLE, 5f, 0.5f + (float)(Math.random())); - } - - @EventHandler - public void GiantKill(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (_giant == null) - return; - - for (Player player : GetPlayers(true)) - { - if (UtilMath.offset2d(player, _giant) < 7) - { - player.damage(50); - } - } - } - - @EventHandler - public void GiantBlocks(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - if (GetState() != GameState.Live) - return; - - if (_giant == null) - return; - - for (int x=-7 ; x<=7 ; x++) - { - for (int z=-7 ; z<=7 ; z++) - { - for (int y=0 ; y<=15 ; y++) - { - Block block = _giant.getWorld().getBlockAt( - _giant.getLocation().getBlockX()+x, - _giant.getLocation().getBlockY()+y, - _giant.getLocation().getBlockZ()+z); - - if (block.getTypeId() == 0) - continue; - - final Material mat = block.getType(); - final byte data = block.getData(); - final Location loc = block.getLocation().add(0.5, 0.5, 0.5); - - block.setTypeId(0); - - Manager.GetPlugin().getServer().getScheduler().runTaskLater(Manager.GetPlugin(), new Runnable() - { - public void run() - { - FallingBlock fall = loc.getWorld().spawnFallingBlock(loc, mat, data); - - Vector vec = UtilAlg.getTrajectory(_giant, fall); - if (vec.getY() < 0) vec.setY(vec.getY() * -1); - - vec.add(new Vector(0.2 - Math.random()*0.4,0.2 - Math.random()*0.4,0.2 - Math.random()*0.4)); - - UtilAction.velocity(fall, vec, 0.75 + 0.25*Math.random(), false, 0, 0.4 + 0.20*Math.random(), 10, false); - } - }, 1); - } - } - } - } - - @Override - public Location GetSpectatorLocation() - { - if (SpectatorSpawn == null) - { - SpectatorSpawn = new Location(this.WorldData.World, 0,0,0); - } - - Vector vec = new Vector(0,0,0); - double count = 0; - - for (Player player : GetPlayers(true)) - { - count++; - vec.add(player.getLocation().toVector()); - } - - vec.multiply(1d/count); - - SpectatorSpawn.setX(vec.getX()); - SpectatorSpawn.setY(vec.getY() + 10); - SpectatorSpawn.setZ(vec.getZ()); - - return SpectatorSpawn; - } - - //@Override - //public void EndCheck() - //{} -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/SuperSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/SuperSmash.java index 5d2020b90..f60b15f60 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/SuperSmash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/SuperSmash.java @@ -76,14 +76,12 @@ public class SuperSmash extends SoloGame this.DamageTeamSelf = true; this.HungerSet = 20; - - this.PrepareFreeze = false; this.CompassEnabled = true; this.SpawnDistanceRequirement = 16; - this.InventoryOpen = true; + this.InventoryOpen = false; } @EventHandler(priority = EventPriority.HIGH) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitBlaze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitBlaze.java index 202d803c9..f89e7d77b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitBlaze.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitBlaze.java @@ -105,6 +105,6 @@ public class KitBlaze extends SmashKit @Override public int GetCost() { - return 8000; + return 6000; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitSnowman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitSnowman.java index fd77dc57a..baac60dd6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitSnowman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitSnowman.java @@ -32,9 +32,9 @@ public class KitSnowman extends SmashKit new Perk[] { - new PerkSmashStats(6, 1.4, 0.4, 6), + new PerkSmashStats(5, 1.4, 0.4, 6), new PerkDoubleJump("Double Jump", 0.9, 0.9, false), - new PerkDamageSnow(3, 1.5), + new PerkDamageSnow(3, 1.25), new PerkArcticAura(), new PerkBlizzard(), new PerkIcePath(), @@ -91,6 +91,6 @@ public class KitSnowman extends SmashKit @Override public int GetCost() { - return 6000; + return 5000; } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitWitherSkeleton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitWitherSkeleton.java index b08b598b7..bef9a2970 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitWitherSkeleton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/standalone/smash/kits/KitWitherSkeleton.java @@ -31,7 +31,7 @@ public class KitWitherSkeleton extends SmashKit new Perk[] { - new PerkSmashStats(6, 1.1, 0.3, 6), + new PerkSmashStats(6, 1.2, 0.3, 6), new PerkDoubleJump("Double Jump", 0.9, 0.9, false), new PerkWitherSkull(), new PerkWitherImage(), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java index 294c39a94..5d44d0f0e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkBlizzard.java @@ -46,7 +46,7 @@ public class PerkBlizzard extends Perk if (!Kit.HasKit(player)) continue; - player.setExp((float) Math.min(0.999, player.getExp()+0.008)); + player.setExp((float) Math.min(0.999, player.getExp()+0.007)); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java index 4b7c7a963..c0c577f21 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkWitherSkull.java @@ -1,6 +1,7 @@ package nautilus.game.arcade.kit.perks; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import org.bukkit.Location; @@ -15,6 +16,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -32,7 +34,8 @@ import nautilus.game.arcade.kit.Perk; public class PerkWitherSkull extends Perk { - private HashMap _active = new HashMap(); + private HashMap _active = new HashMap(); + private HashSet _ignoreControl = new HashSet(); public PerkWitherSkull() { @@ -69,14 +72,17 @@ public class PerkWitherSkull extends Perk //Fire WitherSkull skull = player.launchProjectile(WitherSkull.class); skull.setDirection(player.getLocation().getDirection()); - - _active.put(skull, player); + + _active.put(skull, player.getLocation().getDirection()); //Sound player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f); //Inform UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + ".")); + + //Control + _ignoreControl.remove(player); } @EventHandler @@ -90,7 +96,7 @@ public class PerkWitherSkull extends Perk while (skullIterator.hasNext()) { WitherSkull skull = skullIterator.next(); - Player player = _active.get(skull); + Player player = (Player)skull.getShooter(); if (!skull.isValid()) { @@ -99,18 +105,17 @@ public class PerkWitherSkull extends Perk continue; } - if (player.isBlocking()) + if (player.isBlocking() && !_ignoreControl.contains(player)) { skull.setDirection(player.getLocation().getDirection()); skull.setVelocity(player.getLocation().getDirection().multiply(0.6)); + _active.put(skull, player.getLocation().getDirection().multiply(0.6)); } else { - Explode(skull, skull.getLocation(), player); - - skullIterator.remove(); - skull.remove(); - continue; + _ignoreControl.add(player); + skull.setDirection(_active.get(skull)); + skull.setVelocity(_active.get(skull)); } } } @@ -138,8 +143,6 @@ public class PerkWitherSkull extends Perk event.SetCancelled("Wither Skull Cancel"); } - - @EventHandler(priority = EventPriority.LOWEST) public void DirectHitDamage(CustomDamageEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index e8d1be1d6..cab19fb40 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -695,6 +695,28 @@ public class GameFlagManager implements Listener } } } + + @EventHandler + public void WorldWeather(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + Game game = Manager.GetGame(); + if (game == null) return; + + if (!game.WorldWeatherEnabled) + { + if (game.WorldData != null) + { + if (game.WorldData.World != null) + { + game.WorldData.World.setStorm(false); + game.WorldData.World.setThundering(false); + } + } + } + } @EventHandler public void WorldWaterDamage(UpdateEvent event)