SteamWar/BauSystem
Archiviert
13
0

Script Turing Completeness #152

Manuell gemergt
YoyoNow hat 14 Commits von ScriptBranches nach master 2021-01-09 20:40:17 +01:00 zusammengeführt
Besitzer

Closes: #134

Closes: #134
Chaoscaot hat den Titel von Script Touring Completeness zu Script Turing Completeness 2020-12-28 17:15:51 +01:00 geändert
Lixfel hat 2020-12-29 16:02:36 +01:00 Änderungen angefragt
Lixfel hat einen Kommentar hinterlassen
Besitzer

Komplett fehlend: Eine Ingame-Erklärung für den Nutzer, was das Skriptsystem so alles kann.

Komplett fehlend: Eine Ingame-Erklärung für den Nutzer, was das Skriptsystem so alles kann.
@ -83,0 +85,4 @@
private final Map<String, Integer> jumpPoints = new HashMap<>();
private final VariableHolder variableHolder = new VariableHolder();
private boolean lastCommandWasSleep = false;
Besitzer

Mach das System nicht komplexer als nötig.

Mach das System nicht komplexer als nötig.
@ -83,1 +87,4 @@
private boolean lastCommandWasSleep = false;
private int index = 0;
private int executionPoints = 0;
Besitzer

Wenn jemand mehr als 200 Befehle in ein Skriptbuch packt, dann werden eben mehr als 200 Befehle ausgeführt. Du kannst damit nicht Serverabstürze verhindern.

Wenn jemand mehr als 200 Befehle in ein Skriptbuch packt, dann werden eben mehr als 200 Befehle ausgeführt. Du kannst damit nicht Serverabstürze verhindern.
Autor
Besitzer

Ich will damit auch verhindern, dass du unendlich schleifen machst. Aber ich habe es nun rausgenommen.

Ich will damit auch verhindern, dass du unendlich schleifen machst. Aber ich habe es nun rausgenommen.
@ -108,2 +132,4 @@
if (command.toLowerCase().startsWith("exit")) {
return;
}
if (command.toLowerCase().startsWith("jump")) {
Besitzer

Wenn du hier mit so vielen Extracommands anfängst: Mach ein switch case draus.

Wenn du hier mit so vielen Extracommands anfängst: Mach ein switch case draus.
@ -144,0 +205,4 @@
return scriptExecutor.jumpPoints.getOrDefault(args[0], -1);
}
private static void infoCommand(ScriptExecutor scriptExecutor, String[] args) {
Besitzer

Den Info-Befehl finde ich etwas unnötig, sicherlich wird er interessant zum Debuggen sein, aber wir wollen die Leute nicht dazu ermuntern, horrend aufwändige Skripte zu schreiben, und wenn, dann soll es eine Herausforderung sein. Der Info-Command bläst das System nur ohne nennenswerten Mehrwert auf.

Den Info-Befehl finde ich etwas unnötig, sicherlich wird er interessant zum Debuggen sein, aber wir wollen die Leute nicht dazu ermuntern, horrend aufwändige Skripte zu schreiben, und wenn, dann soll es eine Herausforderung sein. Der Info-Command bläst das System nur ohne nennenswerten Mehrwert auf.
Autor
Besitzer

Mit diesem Command soll man, besonders, wenn man einem anderen sein eigenes Skript gibt, So dass er weiß wie man diesen verwendet? Bzw auch um user Rückgaben zu machen.

Mit diesem Command soll man, besonders, wenn man einem anderen sein eigenes Skript gibt, So dass er weiß wie man diesen verwendet? Bzw auch um user Rückgaben zu machen.
@ -144,0 +214,4 @@
scriptExecutor.player.sendMessage("§eInfo§8» §7" + ChatColor.translateAlternateColorCodes('&', String.join(" ", args)));
}
private static void variableCommand(ScriptExecutor scriptExecutor, String[] args) {
Besitzer

Bislang sind keine freien Variablen außer den 4 Konstanten fire, tnt, trace & freeze nötig. Das Programm hat so wenige Input- und Outputmöglichkeiten (Man kann Variablen schließlich nur in ifs verwenden), dass man es daher immer auf die Konstanten zurückgreifen kann und einfach keine freien Variablen benötigt. Entweder das System wird mächtiger, oder Variablen sind sinnlos.

Bislang sind keine freien Variablen außer den 4 Konstanten fire, tnt, trace & freeze nötig. Das Programm hat so wenige Input- und Outputmöglichkeiten (Man kann Variablen schließlich nur in ifs verwenden), dass man es daher immer auf die Konstanten zurückgreifen kann und einfach keine freien Variablen benötigt. Entweder das System wird mächtiger, oder Variablen sind sinnlos.
Autor
Besitzer

Du kannst mit variablen schleifenabbrüche und sonstige Sachen machen. Ich glaube das das doch sinnvoll wäre.

Du kannst mit variablen schleifenabbrüche und sonstige Sachen machen. Ich glaube das das doch sinnvoll wäre.
Besitzer

Du hast aber nix, wofür Schleifen sinnvoll wären. Variablen kannst du letztendlich nur für ifs verwenden. Und eine "Schleife" kannst du ohne variablen Input auch einfach entrollen, da die Länge schon während des Schreibens des Skriptes bekannt ist, d.h besteht dafür keine Notwendigkeit.

Du hast aber nix, wofür Schleifen sinnvoll wären. Variablen kannst du letztendlich nur für ifs verwenden. Und eine "Schleife" kannst du ohne variablen Input auch einfach entrollen, da die Länge schon während des Schreibens des Skriptes bekannt ist, d.h besteht dafür keine Notwendigkeit.
Autor
Besitzer

Jedoch ist es einfacher, wenn man diese als Schleife darstellen kann. Außerdem welche Output/Input Systeme kann man noch einbauen?

Jedoch ist es einfacher, wenn man diese als Schleife darstellen kann. Außerdem welche Output/Input Systeme kann man noch einbauen?
Besitzer

Nein, das ist nicht mal einfacher. Die Variablen fügen dem Skriptsystem derzeit nix hinzu.

Anders würde es aussehen, wenn man die Befehle auch für andere Befehle als für info verwenden könnte...., dann würde ich allerdings info umbenennen in echo und in einen normalen Befehl umwandeln.

Nein, das ist nicht mal einfacher. Die Variablen fügen dem Skriptsystem derzeit nix hinzu. Anders würde es aussehen, wenn man die Befehle auch für andere Befehle als für info verwenden könnte...., dann würde ich allerdings info umbenennen in echo und in einen normalen Befehl umwandeln.
Autor
Besitzer

Welche Befehle soll man für andere Befehle verwenden? Meinst du variablen soll man für andere Befehle verwenden können sollen. Und das umwandeln könnte ich. Ich weiß halt nicht wie man das mit den Variablen dann sinnvoll machen sollte. Weil es dann ja scheinbar globale und nicht globale variablen geben sollte?

Welche Befehle soll man für andere Befehle verwenden? Meinst du variablen soll man für andere Befehle verwenden können sollen. Und das umwandeln könnte ich. Ich weiß halt nicht wie man das mit den Variablen dann sinnvoll machen sollte. Weil es dann ja scheinbar globale und nicht globale variablen geben sollte?
Besitzer

Nein, ich habe nix von globalen und nicht globalen Variablen geschrieben. Ich habe etwas von der Einsetzbarkeit von Variablen geschrieben. Ich möchte die Variablen innerhalb eines Skripts für nahezu jeden Befehl verwenden können, z.B. für ein //pos1 X,Y,Z

Nein, ich habe nix von globalen und nicht globalen Variablen geschrieben. Ich habe etwas von der Einsetzbarkeit von Variablen geschrieben. Ich möchte die Variablen innerhalb eines Skripts für nahezu jeden Befehl verwenden können, z.B. für ein //pos1 X,Y,Z
Autor
Besitzer

Achso. Ich glaube das lässt sich einrichten.

Achso. Ich glaube das lässt sich einrichten.
@ -144,0 +267,4 @@
}
}
private static class VariableHolder {
Besitzer

Das System ist viel zu aufwändig für das wenige, dass es kann. Einfach eine Map<String, Integer> statt einem "VariableHolder". Es gibt nur Integer, keine Boolean. Alles außer 0 wird true bewertet. Die Konstanten "trace", "tnt", "freeze" und "fire" kannst du als solche extra behandeln wie hier in getValue().

Das System ist viel zu aufwändig für das wenige, dass es kann. Einfach eine Map<String, Integer> statt einem "VariableHolder". Es gibt nur Integer, keine Boolean. Alles außer 0 wird true bewertet. Die Konstanten "trace", "tnt", "freeze" und "fire" kannst du als solche extra behandeln wie hier in getValue().
Autor
Besitzer

Lixfel wie würdest du den eine solche Ingame Dokumentation aufziehen. Ich hätte hier an ein Buch gedacht, wo jedes Feature drin steht und beschrieben wird. Was hälst du davon?

Lixfel wie würdest du den eine solche Ingame Dokumentation aufziehen. Ich hätte hier an ein Buch gedacht, wo jedes Feature drin steht und beschrieben wird. Was hälst du davon?
Besitzer

Das Buch sehe ich hier nirgends.

Das Buch sehe ich hier nirgends.
Autor
Besitzer

Dies war eine Frage und keine Aussage, das dies schon fertig sei? Kann man auf eine solche Frage denn auch eine Antwort bekommen?

Dies war eine Frage und keine Aussage, das dies schon fertig sei? Kann man auf eine solche Frage denn auch eine Antwort bekommen?
Besitzer

Einfach implementieren?

Einfach implementieren?
Autor
Besitzer

Soll es eigentlich noch eine möglichkeit geben, wenn man versehentlich unendliche schleifen gebaut hat, dass ein Script auch abbrechbar ist?

Soll es eigentlich noch eine möglichkeit geben, wenn man versehentlich unendliche schleifen gebaut hat, dass ein Script auch abbrechbar ist?
Besitzer

Und wie stellst du dir das vor? (technische Sicht)

Und wie stellst du dir das vor? (technische Sicht)
Autor
Besitzer

Ich haue irgendwo ein Boolschen wert hin, und der ist true solange das script laufen soll. und wenn abgebrochen werden soll wird dieser False gesetzt und damit ich speichern kann welche Scripte laufen. Haue ich die in eine HashMap<Player, Set<ScriptExecutor>> rein. Dann kann man einfach über alle ScriptExecutor gehen und diese Canceln. Ich glaube das wäre das eleganteste.

Ich haue irgendwo ein Boolschen wert hin, und der ist true solange das script laufen soll. und wenn abgebrochen werden soll wird dieser False gesetzt und damit ich speichern kann welche Scripte laufen. Haue ich die in eine `HashMap<Player, Set<ScriptExecutor>>` rein. Dann kann man einfach über alle ScriptExecutor gehen und diese Canceln. Ich glaube das wäre das eleganteste.
Besitzer

Während das Skript läuft (solange kein Sleep kommt) macht der Server nichts anderes. Äußere Eingaben werden nicht abgefragt.

Während das Skript läuft (solange kein Sleep kommt) macht der Server nichts anderes. Äußere Eingaben werden nicht abgefragt.
Autor
Besitzer

Gut aber dann kann ich mit 2 zeilen jeden server immer hunder prozentig zum abschmieren bringen. Ich will einfach nur verhindern, dass dies so einfach ist.

Gut aber dann kann ich mit 2 zeilen jeden server immer hunder prozentig zum abschmieren bringen. Ich will einfach nur verhindern, dass dies so einfach ist.
Autor
Besitzer

Dafür war auch die execution points sache

Dafür war auch die execution points sache
Besitzer

JEDER, der sich auf einem Bauserver befindet, kann /stop ausführen. Das ist ein Einzeiler.

JEDER, der sich auf einem Bauserver befindet, kann /stop ausführen. Das ist ein Einzeiler.
Autor
Besitzer

mit meinem würde der server jedoch laggen und laggen und laggen und dann vllt auch nicht clean runterfahren. Bei deinem /stop ist das wenigstens clean!

mit meinem würde der server jedoch laggen und laggen und laggen und dann vllt auch nicht clean runterfahren. Bei deinem /stop ist das wenigstens clean!
Besitzer

Ne, er würde nicht laggen, er würde einfach nicht mehr reagieren. Anschließend fährt er nach 60s dann runter.

Ne, er würde nicht laggen, er würde einfach nicht mehr reagieren. Anschließend fährt er nach 60s dann runter.
Besitzer

Das ist halt das werte Problem der Turingvollständigkeit, auch Halteproblem genannt.

Das ist halt das werte Problem der Turingvollständigkeit, auch Halteproblem genannt.
Autor
Besitzer

Die Documenation ist nun fertig und mit dem '/script' Befehl verfügbar.

Die Documenation ist nun fertig und mit dem '/script' Befehl verfügbar.
Chaoscaot hat 2021-01-09 20:27:11 +01:00 Änderungen angefragt
@ -0,0 +60,4 @@
}
Player player = (Player) sender;
ItemStack itemStack = new ItemStack(Material.WRITTEN_BOOK, 1);
Besitzer

Kann man den Itemstack nicht in einer private static final Variable haben?

Kann man den Itemstack nicht in einer private static final Variable haben?
@ -52,6 +54,10 @@ public class ScriptListener implements Listener {
if(item == null || isNoBook(item) || item.getItemMeta() == null)
return;
if (item.getItemMeta().getDisplayName().equals("§8Script Buch")) {
Besitzer

Kann man dann CommandScript.BOOK.getItemstack().getName() machen?

Kann man dann `CommandScript.BOOK.getItemstack().getName()` machen?
Chaoscaot hat die Änderungen 2021-01-09 20:35:55 +01:00 genehmigt
YoyoNow hat diesen Pull-Request 2021-01-09 20:40:17 +01:00 geschlossen
YoyoNow löschte die Branch ScriptBranches 2021-01-15 17:23:02 +01:00
Dieses Repo ist archiviert. Du kannst Pull-Requests nicht kommentieren.
Keine Beschreibung angegeben.