• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

K

HelloMyNameIsName

Redstoneengineer
Registriert
31 Oktober 2018
Beiträge
49
Diamanten
300
Guten Tag,

ich habe eine Veritable bei Skript und einen Command wie kriege ich es hin einen Spieler zu einer Variable hinzufügen und wieder zu entfernen zudem will ich die Variable auch abrufen können.

MFG
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Wie genau meinst du "zu einer Variable hinzufügen"?
Willst du eine Liste von Spielern erstellen, z.B. für eine Mitgliederliste?
Beispiel:

Code:
# Fügt den Spieler zur Liste "Members" hinzu:
add player to {Members::*}
# Zeigt alle Einträge/Spieler, die in "Members" sind, im Chat an:
loop {Members::*}:
    message loop-value
# Überprüft, ob "Members" den Spieler enthält:
if {Members::*} contains player:
# Eventueller Workaround für den Code oben, da Skript manchmal Spieler nicht korrekt (sondern als Text) in Listen speichert:
if {Members::*} contains "%player%":

Oder möchtest du z.B. einen Wert pro Spieler speichern?
Code:
# Fügt 10 dem Konto des Spielers hinzu.
#Wir nutzen {Money::%player%} statt z.B. {Money.%player%} etc. um die Datenbank nicht vollzumüllen und die Abfrage zu beschleunigen.
add 10 to {Money::%player%}
# Zeigt das eigene Geld an
message "Dein Geld: %{Money::%player%}%"

#Ein Befehl um z.B. das Geld eines anderen Spielers anzuzeigen.
command /money <offlineplayer>:
    trigger:
        if {Money::%arg 1%} is set:
            message "%arg 1%'s Geld: %{Money::%arg 1%}%"
        else:
            message "&cDieser Spieler existiert nicht."
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Code:
# So wie oben, nur das du %player% durch das argument ersetzt
set {NameDeinerVariable::%arg 2%} to arg 1
# Löschen
clear {NameDeinerVariable::%arg 2%}
# Zeigen
message "Es funktioniert: %{NameDeinerVariable::%arg 2%}%"

Wenn das nicht ist was du möchtest habe ich es nicht verstanden. Dann hilft es vielleicht, wenn du erklärst was du tun willst (z.B. Warn-Punkte vergeben, Kontostand etc.)
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Standardmäßig untereinander, da mit jedem Loop ein "Message" ausgeführt gibt, und jedes "message" eine neue Zeile ist.

Du kannst aber auch eine kommagetrennte Liste machen
Zum Beispiel:
Code:
clear {_tmpWarnDisplay}
loop {WarningPoints::*}:
    set {_tmpWarnDisplay} to "%{_tmpWarnDisplay}% %loop-index% (%loop-value%),"
message "%{_tmpWarnDisplay}%"
Sollte eine Liste in dem Format "Spielername (Punkte), Spielername (Punkte)" geben. {_tmpWarnDisplay} ist die Liste (als Text)
(Aus dem Gedächtnis, müsste aber eigentlich klappen)
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
command /su <player> <text> <text>:
permission: {@permissionwarn}
permission message: {@permissionmessagewarn}
trigger:
if arg-1 is set:
if arg-2 is set:
if arg-3 is set:
send "{@prefix} Du wirst hast nun %arg-3% Warn-Punkte wegen %arg-2%" to arg-1"
send "{@prefix} Du hast %arg-1% verwarnt er hat nun %arg-3% Warn-Punkte! "
add %arg-2% and %arg-3% to {wps.%arg-1%}


Geht das so?
Ich hab das jetzt so gemacht:
Code:
command /warn [<text>] [<text>] [<number>] [<text>]:
    permission: warn.admin
    trigger:
        if arg 1 is "list":
            if arg 2 is set:
                message "&7Warnungen von &6%arg 2%&8:"
                loop {WarnReasons::%arg 2%::*}:
                    message "&9%loop-index%: &7&o%loop-value% &7(&c%{WarnPoints::%arg 2%::%loop-index%}% &cPunkte&7)"
            else:
                message "&cBitte gib einen Spieler an."
        else if arg 1 is "add":
            if arg 2 is a player or offlineplayer:
                if arg 3 is set:
                    add arg 3 to {WarnPoints::%arg 2%::*}
                    add arg 4 to {WarnReasons::%arg 2%::*}
                    message "&7Du hast &6%arg 2% &7für &6&o%arg 4%&r&7 mit &c%arg 3% Punkten &7gewarnt."
                else:
                    message "&cBitte gib eine Anzahl an Warnpunkten ein."
            else:
                message "&cDieser Spieler existiert nicht."
        else if arg 1 is "remove":
            if arg 2 is a player or offlineplayer:
                if arg 3 is set:
                    clear {WarnPoints::%arg 2%::%arg 3%}
                    clear {WarnReasons::%arg 2%::%arg 3%}
                else:
                    message "&cBitte gib die Nummer des Warns an."
            else:
                message "&cDieser Spieler existiert nicht."
        else if arg 1 is "clear":
            if arg 2 is a player or offlineplayer:
                clear {WarnPoints::%arg 2%::*}
                clear {WarnReasons::%arg 2%::*}
            else:
                message "&cDieser Spieler existiert nicht."
        else:
            message "&9Warn&8-&6Hilfe&7:"
            message "&7/warn add [Spieler] [Warnpunkte] [Grund]"
            message "&7/warn remove [Spieler] [Index]"
            message "&7/warn list [Spieler]"
            message "&7/warn clear [Spieler]"
Ergibt das hier:
50ac947f67.png


add %arg-2% and %arg-3% to {wps.%arg-1%} funktioniert nicht, da du nicht mehrere Elemente zu einer normalen Variable hinzufügen kannst. Dazu brauchst du eine Liste {VariablenMit::}
Was mein Skript oben nicht kann ist die Nummer der Punkte aller Warns zusammenzählen. Das solltest du aber noch hinzufügen können, einfach {WarnPoints::%Spielername%::*} loopen
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Bei mir ist gerade das Problem ich kann meine WPS abfragen aber mit keine geben da steht "Dieser Spieler exestiert nicht"

MFG
Kann ich so nicht nachvollziehen, klappt bei mir problemlos - ich hab es sozusagen nur bei mir selbst getestet. Ich nutze Skript 2.4-beta5, eventuell gibt es da einen Bug in einer anderen Version, mit dem "is a player or offlineplayer" nicht geht.
Das Problem liegt in Zeile 22. Testweise kannst du ja die if/else-Abfrage dort deaktivieren.

Bist du sicher das du den Befehl richtigrum genutzt hast. Also erst Spieler, dann Punkte, dann Grund? Wenn dir das zu un-intuitiv ist, kannst du es ja umdrehen, einfach die Argumente tauschen.
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Ich kann keine sk Datei hier hochladen ich mach es per Dropbox https://www.dropbox.com/s/go9s8obafyvaq6e/WPS.sk?dl=0

MFG
Scheint ein Skript-Bug zu sein. Ich hatte einige Addons, mit denen es lustigerweise funktioniert hat. Normales Skript ohne Addons aber nicht.

Ich hab die if/else Abfrage jetzt entfernt. Es funktioniert nun, überprüft nur nicht mehr ob der Spieler existiert oder nicht. Sollte Skript den Bug fixen (ich hab nen Bugreport erstellt), kannst du es ja wieder einfügen. Solange müssen deine Teamler einfach die Namen korrekt schreiben (und wenn nicht existente Spieler verwarnt werden ist ja auch nicht so schlimm)
Skript:
Code:
command /su [<text>] <offlineplayer> [<number>] [<text>]:
    permission: warn.admin
    trigger:
        if arg 1 is "abfragen":
            if arg 2 is set:
                message "&7Warnungen von &6%arg 2%&8:"
                loop {WarnReasons::%arg 2%::*}:
                    message "&9%loop-index%: &7&o%loop-value% &7(&c%{WarnPoints::%arg 2%::%loop-index%}% &cPunkte&7)"
            else:
                message "&cBitte gib einen Spieler an."
        else if arg 1 is "add":
            if arg 3 is set:
                add arg 3 to {WarnPoints::%arg 2%::*}
                add arg 4 to {WarnReasons::%arg 2%::*}
                message "&7Du hast &6%arg 2% &7für &6&o%arg 4%&r&7 mit &c%arg 3% WPS &7gewarnt."
            else:
                message "&cBitte gib eine Anzahl an WPS ein."
        else if arg 1 is "remove":
            if arg 3 is set:
                clear {WarnPoints::%arg 2%::%arg 3%}
                clear {WarnReasons::%arg 2%::%arg 3%}
            else:
                message "&cBitte gib die Nummer des WPS an."
        else if arg 1 is "clear":
            if arg 2 is a player or offlineplayer:
                clear {WarnPoints::%arg 2%::*}
                clear {WarnReasons::%arg 2%::*}
            else:
                message "&cDieser Spieler existiert nicht."
        else:
            message "&9WPS&8-&6Hilfe&7:"
            message "&7/su add [Spieler] [Warnpunkte] [Grund]"
            message "&7/su remove [Spieler] [Index]"
            message "&7/su abfragen [Spieler]"
            message "&7/su clear [Spieler]"
 
Oben