Dieser Commit ist enthalten in:
Ursprung
78ae119719
Commit
fc7b8b6233
@ -22,6 +22,7 @@ package de.steamwar.fightsystem;
|
|||||||
import com.comphenix.tinyprotocol.TinyProtocol;
|
import com.comphenix.tinyprotocol.TinyProtocol;
|
||||||
import de.steamwar.core.Core;
|
import de.steamwar.core.Core;
|
||||||
import de.steamwar.fightsystem.ai.LixfelAI;
|
import de.steamwar.fightsystem.ai.LixfelAI;
|
||||||
|
import de.steamwar.fightsystem.ai.chaos.ChaosAI;
|
||||||
import de.steamwar.fightsystem.commands.*;
|
import de.steamwar.fightsystem.commands.*;
|
||||||
import de.steamwar.fightsystem.countdown.*;
|
import de.steamwar.fightsystem.countdown.*;
|
||||||
import de.steamwar.fightsystem.event.HellsBells;
|
import de.steamwar.fightsystem.event.HellsBells;
|
||||||
@ -42,6 +43,7 @@ import de.steamwar.fightsystem.utils.*;
|
|||||||
import de.steamwar.fightsystem.winconditions.*;
|
import de.steamwar.fightsystem.winconditions.*;
|
||||||
import de.steamwar.message.Message;
|
import de.steamwar.message.Message;
|
||||||
import de.steamwar.sql.SchematicNode;
|
import de.steamwar.sql.SchematicNode;
|
||||||
|
import de.steamwar.sql.SteamwarUser;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
@ -167,6 +169,13 @@ public class FightSystem extends JavaPlugin {
|
|||||||
}else if(Config.mode == ArenaMode.PREPARE) {
|
}else if(Config.mode == ArenaMode.PREPARE) {
|
||||||
Fight.getUnrotated().setSchem(SchematicNode.getSchematicNode(Config.PrepareSchemID));
|
Fight.getUnrotated().setSchem(SchematicNode.getSchematicNode(Config.PrepareSchemID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FightStatistics.unrank();
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTask(getPlugin(), () -> {
|
||||||
|
new ChaosAI(Fight.getBlueTeam());
|
||||||
|
new LixfelAI(Fight.getRedTeam(), "Lixfel.AI");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -155,8 +155,10 @@ public abstract class AI {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
Location location = translate(pos, true);
|
Location location = translate(pos, true);
|
||||||
if(interactionDistanceViolation(location))
|
if(interactionDistanceViolation(location)) {
|
||||||
|
chat("Zu kleine Arme für TNT!");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Block block = location.getBlock();
|
Block block = location.getBlock();
|
||||||
if(block.getType() == Material.AIR)
|
if(block.getType() == Material.AIR)
|
||||||
@ -170,8 +172,10 @@ public abstract class AI {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Location location = translate(pos, true);
|
Location location = translate(pos, true);
|
||||||
if(interactionDistanceViolation(location))
|
if(interactionDistanceViolation(location)) {
|
||||||
|
chat("Ich komme da nicht dran!");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
interact(location.getBlock());
|
interact(location.getBlock());
|
||||||
}
|
}
|
||||||
@ -205,7 +209,7 @@ public abstract class AI {
|
|||||||
public void run() {
|
public void run() {
|
||||||
Location location = entity.getLocation();
|
Location location = entity.getLocation();
|
||||||
Location target = translate(pos, false);
|
Location target = translate(pos, false);
|
||||||
if(Math.abs(location.getX() - target.getX()) > 1 || Math.abs(location.getY() - target.getY()) > 1.2 || Math.abs(location.getZ() - target.getZ()) > 1) {
|
if(Math.abs(location.getX() - target.getX()) > 1.9 || Math.abs(location.getY() - target.getY()) > 1.9 || Math.abs(location.getZ() - target.getZ()) > 1.9) {
|
||||||
FightSystem.getPlugin().getLogger().log(Level.INFO, () -> entity.getName() + ": Overdistance movement " + location.toVector() + " " + target.toVector());
|
FightSystem.getPlugin().getLogger().log(Level.INFO, () -> entity.getName() + ": Overdistance movement " + location.toVector() + " " + target.toVector());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -287,7 +291,7 @@ public abstract class AI {
|
|||||||
queue.poll().run();
|
queue.poll().run();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Location translate(Vector pos, boolean blockPos) {
|
public Location translate(Vector pos, boolean blockPos) {
|
||||||
Region extend = team.getExtendRegion();
|
Region extend = team.getExtendRegion();
|
||||||
if(Fight.getUnrotated() == team)
|
if(Fight.getUnrotated() == team)
|
||||||
return new Location(
|
return new Location(
|
||||||
|
31
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Bridge.java
Normale Datei
31
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Bridge.java
Normale Datei
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.fightsystem.ai.chaos;
|
||||||
|
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class Bridge {
|
||||||
|
private Bridge() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Vector BRIDGE_POS = new Vector(25, 14, 24);
|
||||||
|
public static final Vector BRIDGE_SHIELDS = new Vector(25, 15, 25);
|
||||||
|
public static final Vector BRIDGE_MG = new Vector(21, 15, 24);
|
||||||
|
}
|
172
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Cannon.java
Normale Datei
172
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Cannon.java
Normale Datei
@ -0,0 +1,172 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.fightsystem.ai.chaos;
|
||||||
|
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class Cannon {
|
||||||
|
public final Vector[] tnt;
|
||||||
|
public final Vector button;
|
||||||
|
public final Vector load;
|
||||||
|
public final Vector escape;
|
||||||
|
public final String name;
|
||||||
|
|
||||||
|
private Cannon(String name, Vector[] tnt, Vector button, Vector load, Vector escape) {
|
||||||
|
this.tnt = tnt;
|
||||||
|
this.button = button;
|
||||||
|
this.load = load;
|
||||||
|
this.escape = escape;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Vector[] DS_LEFT_TNT = new Vector[] {
|
||||||
|
new Vector(40, 24, 12),
|
||||||
|
new Vector(39, 24, 12),
|
||||||
|
new Vector(38, 23, 12),
|
||||||
|
new Vector(38, 24, 12),
|
||||||
|
new Vector(40, 23, 15),
|
||||||
|
new Vector(40, 23, 14),
|
||||||
|
new Vector(40, 24, 15),
|
||||||
|
new Vector(40, 24, 14),
|
||||||
|
new Vector(38, 23, 15),
|
||||||
|
new Vector(38, 23, 14),
|
||||||
|
new Vector(38, 24, 15),
|
||||||
|
new Vector(38, 24, 14),
|
||||||
|
new Vector(40, 23, 12),
|
||||||
|
};
|
||||||
|
public static final Vector DS_LEFT_BUTTON = new Vector(39, 25, 11);
|
||||||
|
public static final Vector DS_LEFT_LOAD = new Vector(39, 25, 13);
|
||||||
|
public static final Vector DS_LEFT_ESCAPE = new Vector(19, 26, 13);
|
||||||
|
public static final Cannon DS_LEFT = new Cannon("Downstäb Links", DS_LEFT_TNT, DS_LEFT_BUTTON, DS_LEFT_LOAD, DS_LEFT_ESCAPE);
|
||||||
|
|
||||||
|
public static final Vector[] DS_RIGHT_TNT = new Vector[] {
|
||||||
|
new Vector(12, 24, 12),
|
||||||
|
new Vector(11, 24, 12),
|
||||||
|
new Vector(10, 23, 12),
|
||||||
|
new Vector(10, 24, 12),
|
||||||
|
new Vector(10, 23, 15),
|
||||||
|
new Vector(10, 23, 14),
|
||||||
|
new Vector(10, 24, 15),
|
||||||
|
new Vector(10, 24, 14),
|
||||||
|
new Vector(12, 23, 14),
|
||||||
|
new Vector(12, 24, 14),
|
||||||
|
new Vector(12, 23, 15),
|
||||||
|
new Vector(12, 24, 15),
|
||||||
|
new Vector(12, 23, 12),
|
||||||
|
};
|
||||||
|
public static final Vector DS_RIGHT_BUTTON = new Vector(11, 25, 11);
|
||||||
|
public static final Vector DS_RIGHT_LOAD = new Vector(11, 25, 13);
|
||||||
|
public static final Vector DS_RIGHT_ESCAPE = new Vector(31, 26, 13);
|
||||||
|
public static final Cannon DS_RIGHT = new Cannon("Downstäb Rechts", DS_RIGHT_TNT, DS_RIGHT_BUTTON, DS_RIGHT_LOAD, DS_RIGHT_ESCAPE);
|
||||||
|
|
||||||
|
public static final Vector[] STATIC_LEFT_TNT = new Vector[] {
|
||||||
|
new Vector(37, 17, 15),
|
||||||
|
new Vector(37, 17, 14),
|
||||||
|
new Vector(37, 18, 16),
|
||||||
|
new Vector(37, 18, 15),
|
||||||
|
new Vector(37, 18, 14),
|
||||||
|
new Vector(36, 17, 16),
|
||||||
|
new Vector(36, 17, 15),
|
||||||
|
new Vector(36, 17, 14),
|
||||||
|
new Vector(36, 18, 16),
|
||||||
|
new Vector(36, 18, 15),
|
||||||
|
new Vector(36, 18, 14),
|
||||||
|
new Vector(37, 17, 16),
|
||||||
|
};
|
||||||
|
public static final Vector STATIC_LEFT_BUTTON = new Vector(38, 18, 11);
|
||||||
|
public static final Vector STATIC_LEFT_LOAD = new Vector(37, 16, 12);
|
||||||
|
public static final Vector STATIC_LEFT_ESCAPE = new Vector(30, 13, 9);
|
||||||
|
public static final Cannon STATIC_LEFT = new Cannon("Lupf Links", STATIC_LEFT_TNT, STATIC_LEFT_BUTTON, STATIC_LEFT_LOAD, STATIC_LEFT_ESCAPE);
|
||||||
|
|
||||||
|
public static final Vector[] STATIC_RIGHT_TNT = new Vector[] {
|
||||||
|
new Vector(14, 17, 15),
|
||||||
|
new Vector(14, 18, 16),
|
||||||
|
new Vector(14, 18, 15),
|
||||||
|
new Vector(14, 17, 14),
|
||||||
|
new Vector(14, 18, 14),
|
||||||
|
new Vector(13, 17, 16),
|
||||||
|
new Vector(13, 17, 15),
|
||||||
|
new Vector(13, 17, 14),
|
||||||
|
new Vector(13, 18, 16),
|
||||||
|
new Vector(13, 18, 15),
|
||||||
|
new Vector(13, 18, 14),
|
||||||
|
new Vector(14, 17, 16),
|
||||||
|
};
|
||||||
|
public static final Vector STATIC_RIGHT_BUTTON = new Vector(12, 18, 11);
|
||||||
|
public static final Vector STATIC_RIGHT_LOAD = new Vector(13, 17, 12);
|
||||||
|
public static final Vector STATIC_RIGHT_ESCAPE = new Vector(20, 13, 9);
|
||||||
|
public static final Cannon STATIC_RIGHT = new Cannon("Lupf Rechts", STATIC_RIGHT_TNT, STATIC_RIGHT_BUTTON, STATIC_RIGHT_LOAD, STATIC_RIGHT_ESCAPE);
|
||||||
|
|
||||||
|
public static final Vector[] AK_TNT = new Vector[] {
|
||||||
|
new Vector(10, 7, 17),
|
||||||
|
new Vector(10, 11, 17),
|
||||||
|
new Vector(10, 10, 17),
|
||||||
|
new Vector(10, 8, 17),
|
||||||
|
new Vector(10, 9, 17),
|
||||||
|
new Vector(10, 7, 15),
|
||||||
|
new Vector(11, 7, 15),
|
||||||
|
new Vector(12, 7, 15),
|
||||||
|
new Vector(10, 10, 15),
|
||||||
|
new Vector(11, 10, 15),
|
||||||
|
new Vector(12, 10, 15),
|
||||||
|
new Vector(12, 8, 15),
|
||||||
|
new Vector(12, 9, 15),
|
||||||
|
new Vector(11, 8, 15),
|
||||||
|
new Vector(11, 9, 15),
|
||||||
|
new Vector(10, 8, 15),
|
||||||
|
new Vector(10, 9, 15),
|
||||||
|
new Vector(10, 7, 19),
|
||||||
|
new Vector(11, 7, 19),
|
||||||
|
new Vector(12, 7, 19),
|
||||||
|
new Vector(12, 8, 19),
|
||||||
|
new Vector(11, 8, 19),
|
||||||
|
new Vector(10, 8, 19),
|
||||||
|
new Vector(10, 10, 19),
|
||||||
|
new Vector(11, 10, 19),
|
||||||
|
new Vector(12, 10, 19),
|
||||||
|
new Vector(12, 9, 19),
|
||||||
|
new Vector(11, 9, 19),
|
||||||
|
new Vector(10, 9, 19),
|
||||||
|
new Vector(10, 6, 17),
|
||||||
|
};
|
||||||
|
public static final Vector AK_BUTTON = new Vector(9, 9, 16);
|
||||||
|
public static final Vector AK_LOAD = new Vector(11, 8, 17);
|
||||||
|
public static final Cannon AK = new Cannon("Arschkratzer", AK_TNT, AK_BUTTON, AK_LOAD, null);
|
||||||
|
|
||||||
|
public static final Vector[] HA_RIGHT_TNT = new Vector[] {
|
||||||
|
new Vector(23, 6, 9),
|
||||||
|
new Vector(23, 7, 9),
|
||||||
|
new Vector(23, 8, 9),
|
||||||
|
new Vector(23, 5, 9),
|
||||||
|
};
|
||||||
|
|
||||||
|
public static final Vector[] HA_LEFT_TNT = new Vector[] {
|
||||||
|
new Vector(27, 6, 9),
|
||||||
|
new Vector(27, 7, 9),
|
||||||
|
new Vector(27, 8, 9),
|
||||||
|
new Vector(27, 5, 9),
|
||||||
|
};
|
||||||
|
|
||||||
|
public static final Vector HA_RIGHT_LOAD = new Vector(23, 8, 8);
|
||||||
|
public static final Vector HA_LEFT_LOAD = new Vector(27, 8, 8);
|
||||||
|
|
||||||
|
public static final Cannon HA_LEFT = new Cannon("Halbautomatik Links", HA_LEFT_TNT, null, HA_LEFT_LOAD, null);
|
||||||
|
public static final Cannon HA_RIGHT = new Cannon("Halbautomatik Rechts", HA_RIGHT_TNT, null, HA_RIGHT_LOAD, null);
|
||||||
|
}
|
168
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/ChaosAI.java
Normale Datei
168
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/ChaosAI.java
Normale Datei
@ -0,0 +1,168 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.fightsystem.ai.chaos;
|
||||||
|
|
||||||
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.ai.AI;
|
||||||
|
import de.steamwar.fightsystem.ai.LixfelPathplanner;
|
||||||
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
|
import de.steamwar.sql.SchematicNode;
|
||||||
|
import de.steamwar.sql.SteamwarUser;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class ChaosAI extends AI {
|
||||||
|
private final LixfelPathplanner pathplanner = new LixfelPathplanner(chooseSchematic());
|
||||||
|
private State state = State.PRE_PREPARE;
|
||||||
|
private static final Cannon[] cannons = new Cannon[] {
|
||||||
|
Cannon.DS_LEFT,
|
||||||
|
Cannon.DS_RIGHT,
|
||||||
|
Cannon.STATIC_LEFT,
|
||||||
|
Cannon.STATIC_RIGHT,
|
||||||
|
Cannon.HA_LEFT,
|
||||||
|
Cannon.HA_RIGHT,
|
||||||
|
};
|
||||||
|
private Cannon currentCannon = randomCannon();
|
||||||
|
private boolean igniteMg = false;
|
||||||
|
private static final Random random = new Random();
|
||||||
|
|
||||||
|
|
||||||
|
public ChaosAI(FightTeam team) {
|
||||||
|
this(team, SteamwarUser.get(14533));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ChaosAI(FightTeam team, SteamwarUser user) {
|
||||||
|
super(team, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchematicNode chooseSchematic() {
|
||||||
|
return SchematicNode.getSchematicNode(111476);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void plan() {
|
||||||
|
switch (state) {
|
||||||
|
case PRE_PREPARE:
|
||||||
|
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> {
|
||||||
|
state = State.PREPARE;
|
||||||
|
}, 20 * 15);
|
||||||
|
state = State.PREPARING_PREPARE;
|
||||||
|
break;
|
||||||
|
case PREPARING_PREPARE:
|
||||||
|
break;
|
||||||
|
case PREPARE:
|
||||||
|
prepare();
|
||||||
|
state = State.PREPARE_READY;
|
||||||
|
break;
|
||||||
|
case PREPARE_READY:
|
||||||
|
setReady();
|
||||||
|
state = State.WAIT_TILL_START;
|
||||||
|
break;
|
||||||
|
case WAIT_TILL_START:
|
||||||
|
if (FightState.ingame()) {
|
||||||
|
state = State.IGNITE_MG;
|
||||||
|
startFight();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IGNITE_MG:
|
||||||
|
if(igniteMg) {
|
||||||
|
interact(Bridge.BRIDGE_MG);
|
||||||
|
chat("Die MG ist angezündet!");
|
||||||
|
state = State.FIGHT;
|
||||||
|
currentCannon = randomCannon();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FIGHT:
|
||||||
|
fireCannon(currentCannon);
|
||||||
|
break;
|
||||||
|
case ESCAPE:
|
||||||
|
if (currentCannon.escape != null) {
|
||||||
|
pathplanner.planToAnywhere(getPosition(), currentCannon.escape).forEach(this::move);
|
||||||
|
}
|
||||||
|
|
||||||
|
Cannon nextCannon = randomCannon();
|
||||||
|
while (nextCannon == currentCannon) {
|
||||||
|
nextCannon = randomCannon();
|
||||||
|
}
|
||||||
|
|
||||||
|
currentCannon = nextCannon;
|
||||||
|
|
||||||
|
state = State.FIGHT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fireCannon(Cannon cannon) {
|
||||||
|
chat("Ich feuere " + cannon.name + " an!");
|
||||||
|
pathplanner.planToAnywhere(getPosition(), cannon.load).forEach(this::move);
|
||||||
|
if (cannon.button == null) {
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
for (Vector vector : cannon.tnt) {
|
||||||
|
setTNT(vector);
|
||||||
|
}
|
||||||
|
for (int j = 0; j < 30; j++) {
|
||||||
|
getBlock(Bridge.BRIDGE_MG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (Vector vector : cannon.tnt) {
|
||||||
|
setTNT(vector);
|
||||||
|
}
|
||||||
|
interact(cannon.button);
|
||||||
|
}
|
||||||
|
|
||||||
|
state = State.ESCAPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Cannon randomCannon() {
|
||||||
|
return cannons[random.nextInt(cannons.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startFight() {
|
||||||
|
chat("gl&hf");
|
||||||
|
chat("Ich zünde die MG an!");
|
||||||
|
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> {
|
||||||
|
igniteMg = true;
|
||||||
|
}, 20 * 21);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prepare() {
|
||||||
|
chat("Prepare your fkin 4nus");
|
||||||
|
pathplanner.planToAnywhere(getPosition(), Bridge.BRIDGE_POS).forEach(this::move);
|
||||||
|
interact(Bridge.BRIDGE_SHIELDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum State {
|
||||||
|
PRE_PREPARE,
|
||||||
|
PREPARING_PREPARE,
|
||||||
|
PREPARE,
|
||||||
|
PREPARE_READY,
|
||||||
|
WAIT_TILL_START,
|
||||||
|
IGNITE_MG,
|
||||||
|
FIGHT,
|
||||||
|
ESCAPE,
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
25
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/recorder.lua
Normale Datei
25
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/recorder.lua
Normale Datei
@ -0,0 +1,25 @@
|
|||||||
|
event(events.PlaceBlock, function(e)
|
||||||
|
if storage.player.get("recording") then
|
||||||
|
pos = {math.floor(e.x), math.floor(e.y) - 100, math.floor(e.z)}
|
||||||
|
storage.player.get("recordingPos")[storage.player.get("recordingCount")] = pos
|
||||||
|
storage.player.set("recordingCount", storage.player.get("recordingCount") + 1)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
command("recorder", function(args)
|
||||||
|
if storage.player.get("recording") then
|
||||||
|
storage.player.set("recording", false)
|
||||||
|
storage.player.set("recordingCount", 0)
|
||||||
|
print("private static final Vector[] positions = new Vector[] {")
|
||||||
|
for k, v in pairs(storage.player.get("recordingPos")) do
|
||||||
|
print("new Vector(" .. v[1] .. ", " .. v[2] .. ", " .. v[3] .. "),")
|
||||||
|
end
|
||||||
|
print("};")
|
||||||
|
print("Stopped recording")
|
||||||
|
else
|
||||||
|
storage.player.set("recording", true)
|
||||||
|
storage.player.set("recordingCount", 0)
|
||||||
|
storage.player.set("recordingPos", {})
|
||||||
|
print("Started recording")
|
||||||
|
end
|
||||||
|
end)
|
343
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/sw.def.lua
Normale Datei
343
FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/sw.def.lua
Normale Datei
@ -0,0 +1,343 @@
|
|||||||
|
-- This file is a part of the SteamWar software.
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2021 SteamWar.de-Serverteam
|
||||||
|
--
|
||||||
|
-- This program is free software: you can redistribute it and/or modify
|
||||||
|
-- it under the terms of the GNU Affero General Public License as published by
|
||||||
|
-- the Free Software Foundation, either version 3 of the License, or
|
||||||
|
-- (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This program is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
-- GNU Affero General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Affero General Public License
|
||||||
|
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
---
|
||||||
|
--- This file contains the definitions for the SteamWar.de script API.
|
||||||
|
--- It is used by the IDE to provide code completion and type checking.
|
||||||
|
--- Created by Chaoscaot
|
||||||
|
---
|
||||||
|
|
||||||
|
inventory = {}
|
||||||
|
|
||||||
|
---@param title string
|
||||||
|
---@param size number
|
||||||
|
---@return Inventory
|
||||||
|
function inventory.create(title, size) return nil end
|
||||||
|
|
||||||
|
---@alias InventoryClick 'LEFT' | 'SHIFT_LEFT' | 'RIGHT' | 'SHIFT_RIGHT' | 'MIDDLE' | 'NUMBER_KEY'
|
||||||
|
|
||||||
|
---@class Inventory
|
||||||
|
local Inventory = {}
|
||||||
|
|
||||||
|
---@overload fun(slot: number, material: string, name: string, handler: fun(click: InventoryClick)): void
|
||||||
|
---@overload fun(slot: number, material: string, name: string, handler: fun(click: InventoryClick), lore: string[]): void
|
||||||
|
---@overload fun(slot: number, material: string, name: string, handler: fun(click: InventoryClick), lore: string[], enchanted: boolean): void
|
||||||
|
---@param slot number
|
||||||
|
---@param material string
|
||||||
|
---@param name string
|
||||||
|
---@param handler fun(click: InventoryClick): void
|
||||||
|
---@param lore string[]
|
||||||
|
---@param enchanted boolean
|
||||||
|
---@param amount number
|
||||||
|
---@return void
|
||||||
|
function Inventory.item(slot, material, name, handler, lore, enchanted, amount) end
|
||||||
|
|
||||||
|
---@param handler fun(): void
|
||||||
|
---@return void
|
||||||
|
function Inventory.setCloseHandler(handler) end
|
||||||
|
|
||||||
|
---@return void
|
||||||
|
function Inventory.open() end
|
||||||
|
|
||||||
|
player = {}
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
---Get the name of the player.
|
||||||
|
function player.name() return "" end
|
||||||
|
|
||||||
|
---@return void
|
||||||
|
function player.chat(...) end
|
||||||
|
|
||||||
|
---@return void
|
||||||
|
---Send a message to the actionbar of the player.
|
||||||
|
function player.actionbar(...) end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@param newX number
|
||||||
|
function player.x(newX) end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@param newY number
|
||||||
|
function player.y(newY) end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@param newZ number
|
||||||
|
function player.z(newZ) end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@param newYaw number
|
||||||
|
function player.yaw(newYaw) end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@param newPitch number
|
||||||
|
function player.pitch(newPitch) end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function player.sneaking() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function player.sprinting() return nil end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@param newSlot number
|
||||||
|
function player.slot(newSlot) end
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
function player.item() return nil end
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
function player.offHandItem() return nil end
|
||||||
|
|
||||||
|
---@return void
|
||||||
|
function player.closeInventory() end
|
||||||
|
|
||||||
|
---@field nextBool fun(): boolean
|
||||||
|
random = {}
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@overload fun(bound: number): number
|
||||||
|
---@param origin number
|
||||||
|
---@param bound number
|
||||||
|
---@return number
|
||||||
|
function random.nextInt(origin, bound) return nil end
|
||||||
|
|
||||||
|
---@overload fun(): number
|
||||||
|
---@overload fun(bound: number): number
|
||||||
|
---@param origin number
|
||||||
|
---@param bound number
|
||||||
|
---@return number
|
||||||
|
function random.nextDouble(origin, bound) return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function random.nextBool() return nil end
|
||||||
|
|
||||||
|
---@alias RegionType 'wg' | 'mwg' | 'as' | 'ws' | 'ws_inner' | 'ws_rumpf' | 'ws_rahmen' | 'spawn'
|
||||||
|
|
||||||
|
---@class iregion
|
||||||
|
---@field tnt tnt
|
||||||
|
---@field trace trace
|
||||||
|
local iregion = {}
|
||||||
|
|
||||||
|
---@class region: iregion
|
||||||
|
region = {}
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
function iregion.name() return nil end
|
||||||
|
|
||||||
|
---@return RegionType
|
||||||
|
function iregion.type() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function iregion.fire() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function iregion.freeze() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function iregion.protect() return nil end
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
function iregion.loader() return nil end
|
||||||
|
|
||||||
|
---@alias TNTMode 'ALLOW' | 'DENY' | 'ONLY_TB'
|
||||||
|
|
||||||
|
---@class tnt
|
||||||
|
local tnt = {}
|
||||||
|
|
||||||
|
---@return TNTMode
|
||||||
|
function tnt.mode() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function tnt.enabled() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function tnt.onlyTb() return nil end
|
||||||
|
|
||||||
|
---@class trace
|
||||||
|
local trace = {}
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function trace.active() return nil end
|
||||||
|
|
||||||
|
---@return boolean
|
||||||
|
function trace.auto() return nil end
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
function trace.status() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function trace.time() return nil end
|
||||||
|
|
||||||
|
---@param name string
|
||||||
|
---@return iregion
|
||||||
|
function region.get(name) return nil end
|
||||||
|
|
||||||
|
---@return iregion[]
|
||||||
|
function region.list() return nil end
|
||||||
|
|
||||||
|
---@class Position
|
||||||
|
---@field x number
|
||||||
|
---@field y number
|
||||||
|
---@field z number
|
||||||
|
|
||||||
|
---@class server
|
||||||
|
---@field tps tps
|
||||||
|
server = {}
|
||||||
|
|
||||||
|
---@return string
|
||||||
|
function server.time() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function server.ticks() return nil end
|
||||||
|
|
||||||
|
---@param position Position
|
||||||
|
---@return string
|
||||||
|
function getBlockAt(position) return nil end
|
||||||
|
|
||||||
|
---@param position Position
|
||||||
|
---@param material string
|
||||||
|
---@return void
|
||||||
|
function setBlockAt(position, material) return nil end
|
||||||
|
|
||||||
|
---@class tps
|
||||||
|
local tps = {}
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.oneSecond() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.tenSecond() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.oneMinute() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.fiveMinute() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.tenMinute() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.current() return nil end
|
||||||
|
|
||||||
|
---@return number
|
||||||
|
function tps.limit() return nil end
|
||||||
|
|
||||||
|
---@class storage
|
||||||
|
---@field global storageLib
|
||||||
|
---@field player storageLib
|
||||||
|
---@field region storageLib
|
||||||
|
storage = {}
|
||||||
|
|
||||||
|
---@class storageLib
|
||||||
|
local storageLib = {}
|
||||||
|
|
||||||
|
---@param key string
|
||||||
|
---@return any
|
||||||
|
function storageLib.get(key) return nil end
|
||||||
|
|
||||||
|
---@param key string
|
||||||
|
---@param value any
|
||||||
|
---@return void
|
||||||
|
function storageLib.set(key, value) end
|
||||||
|
|
||||||
|
---@param key string
|
||||||
|
---@return boolean
|
||||||
|
function storageLib.has(key) return nil end
|
||||||
|
|
||||||
|
---@param key string
|
||||||
|
---@return void
|
||||||
|
function storageLib.remove(key) end
|
||||||
|
|
||||||
|
---@param key string
|
||||||
|
---@return Accessor
|
||||||
|
function storageLib.accessor(key) return nil end
|
||||||
|
|
||||||
|
---@class Accessor
|
||||||
|
---@overload fun(): any
|
||||||
|
---@overload fun(value: any)
|
||||||
|
|
||||||
|
---@class Selection
|
||||||
|
---@field max Position
|
||||||
|
---@field min Position
|
||||||
|
|
||||||
|
---@class _worldedit
|
||||||
|
_worldedit = {}
|
||||||
|
|
||||||
|
---@overload fun(pos: Position[]): void
|
||||||
|
---@return Selection
|
||||||
|
function _worldedit.selection() return nil end
|
||||||
|
|
||||||
|
---@param msg string
|
||||||
|
---@param callback fun(value: string): void
|
||||||
|
---@return void
|
||||||
|
function input(msg, callback) end
|
||||||
|
|
||||||
|
---@param ticks number
|
||||||
|
---@param callback fun(): void
|
||||||
|
---@return void
|
||||||
|
function delayed(ticks, callback) end
|
||||||
|
|
||||||
|
---@param x number
|
||||||
|
---@param y number
|
||||||
|
---@param z number
|
||||||
|
---@return Position
|
||||||
|
function pos(x, y, z) return nil end
|
||||||
|
|
||||||
|
---@return void
|
||||||
|
function exec(...) end
|
||||||
|
|
||||||
|
---@param obj any
|
||||||
|
---@return number
|
||||||
|
function length(obj) return 0 end
|
||||||
|
|
||||||
|
---@param separator string
|
||||||
|
---@param table any[]
|
||||||
|
---@return string
|
||||||
|
function join(separator, table) return "" end
|
||||||
|
|
||||||
|
---@class EventType
|
||||||
|
---@class events
|
||||||
|
---@field DoubleSwap EventType
|
||||||
|
---@field PlaceBlock EventType
|
||||||
|
---@field BreakBlock EventType
|
||||||
|
---@field RightClick EventType
|
||||||
|
---@field LeftClick EventType
|
||||||
|
---@field TNTSpawn EventType
|
||||||
|
---@field TNTExplode EventType
|
||||||
|
---@field TNTExplodeInBuild EventType
|
||||||
|
---@field SelfJoin EventType
|
||||||
|
---@field SelfLeave EventType
|
||||||
|
---@field DropItem EventType
|
||||||
|
---@field EntityDeath EventType
|
||||||
|
events = {}
|
||||||
|
|
||||||
|
|
||||||
|
---@param id EventType
|
||||||
|
---@param handler fun(params: any): void
|
||||||
|
---@return void
|
||||||
|
function event(id, handler) end
|
||||||
|
|
||||||
|
---@param command string
|
||||||
|
---@param handler fun(params: string[]): void
|
||||||
|
---@return void
|
||||||
|
function command(command, handler) end
|
||||||
|
|
||||||
|
---@param trigger string
|
||||||
|
---@param handler fun(pressed: boolean): void
|
||||||
|
---@return void
|
||||||
|
function hotkey(trigger, handler) end
|
In neuem Issue referenzieren
Einen Benutzer sperren