Mudlet: Machen Sie commandSeparator mit einer Funktion einstellbar

Erstellt am 25. Apr. 2020  ·  26Kommentare  ·  Quelle: Mudlet/Mudlet

Wir haben bereits die Funktion getCommandSeparator(), wir brauchen eine Möglichkeit, das Befehlstrennzeichen festzulegen, ohne in die Einstellungen springen zu müssen. Ich schlage vor, eine setCommandSeparator()-Funktion hinzuzufügen.

Gründe für das Hinzufügen von Funktionen:

  1. Mudlet hat auf meinem MUD an Zugkraft gewonnen und die Spieler bevorzugen die Verwendung eines einzelnen Semikolon-Befehlstrennzeichens, aber das Problem dabei ist natürlich, dass Sie kein zwinkerndes Smiley-Gesicht und keine serverseitigen Mud-Aliase erstellen können, die auch ein verwenden Semikolon zum Trennen von Befehlen.
  2. Mit setCommandSeparator() müssten Spieler kein lästiges Menü-Hopping machen, wenn sie einen serverseitigen Mud-Alias ​​einrichten wollen.
  3. setCommandSeparator() könnte in Verbindung mit getCommandSeparator() verwendet werden, um Skripte einfacher zu teilen, indem Sie so etwas tun:
local x = getCommandSeparator()
if x ~= ";" then setCommandSeparator(";")
send("com1;com2;com3;com4")
setCommandSeparator(x)
else
send("com1;com2;com3;com4")
end

Dies wird ( glaube ich) das Befehlstrennzeichen abrufen, prüfen, ob es sich nicht um ein Semikolon handelt, und wenn es kein Semikolon ist, dann in ein Semikolon ändern, dann den Code ausführen und ihn dann wieder ändern zu was auch immer es war davor.

Hilfreichster Kommentar

Vielleicht wäre eine bessere Funktion eine neue, die das Parsen des Befehlstrennzeichens insgesamt ignoriert und direkt sendet, was im Code eingegeben wird?

Ich mag diese Idee. Würde es es für dich lösen?

Was denken andere in @Mudlet/lua-interface?

Alle 26 Kommentare

oder Sie könnten das richtige Formular verwenden, nämlich sendAll("com1", "com2", "com3", "com4")
oder Sie können getCommandSeparator verwenden und dann die Ausgabe davon verwenden, um Ihre Zeichenfolge, IE, zu bilden

local cs = getCommandSeparator
local commands = {
  "com1",
  "com2",
  "com3",
  "com4",
}
send(table.concat(commands, cs))

Ich bin mir nicht sicher, ob wir Skriptautoren ermutigen möchten, das Befehlstrennzeichen in ihren Skripten festzulegen/zurückzusetzen. Am Ende kommen Tonnen von Leuten, die fragen, warum sie kein Semikolon mehr verwenden können oder warum der Doppelpunkt plötzlich die Dinge in zwei Befehle aufteilt und alles, was es braucht, ist, dass Ihre Funktion einmal einen Fehler macht, bevor sie zurückgesetzt wird. Vor allem, da man damit nichts anfangen kann, wenn es ; ist und der Spieler nun mit einem unerwartet kaputten Setup zurückbleibt.

Abgesehen davon könnte setCommandSeparator gut sein, nur um die vollständige Suite von Einstellungs-Gettern/Settern zu haben, aber genau dafür sollte es nicht verwendet werden.

Meinetwegen. Abgesehen von möglichen Problemen wäre die Möglichkeit lua setCommandSeparator("somethingElseTemporarily") von der Hauptkonsole aus ein Schritt zur Behebung von Problemen für Spieler, die an ';' gewöhnt sind. als Befehlstrenner. Wenn es implementiert wäre, könnte es eine >>> Vorsicht walten lassen, denn bei Missbrauch könnten Ihre Skripte kaputt gehen. <<< im Handbuch.

Ich bin verwirrt, warum all diese vorübergehende Änderung des Befehlstrennzeichens vor sich geht. Wenn sie an ; gewöhnt sind, warum sollten sie es nicht einfach in ; ändern, wie sie es gewohnt sind? Das ist eine Menge zweimal zu tippen, um es hin und her zu ändern, wenn sie einfach in die Einstellungen gehen und es einmal so ändern können, wie sie es tatsächlich wollen.

Es scheint, als wollten Sie einen Alias, der sendAll in Anlehnung an den ersten Kommentar von demonnic einspeist

Was genau geben die Leute dann in Ihre anderen Clients ein, um mehrere Befehle zu senden, aber nicht mit zwinkernden Smileys und serverseitigen Spielereien zu stören?

Ich dachte auch, dass das Weglassen einer Funktion zum Setzen des Befehlstrennzeichens eine bewusste und absichtliche Entscheidung auf Führungsebene war :grin: um den Bruch zu vermeiden, der dadurch entstehen könnte, dass ein Skript/Paket es ändert, während ein anderes (möglicherweise asynchrones von einem Timer!) war aktiv.

Soweit ich das beurteilen kann, fand die Hauptdiskussion darüber in #1866 statt.

Das klingt nach etwas, das wir vielleicht getan hätten, aber ich denke, die Zugänglichkeit könnte dazu führen, dass wir eine Möglichkeit schaffen, es zumindest von der Befehlszeile aus festzulegen, selbst wenn es von der Lua-API selbst getrennt ist.

Ich bin verwirrt, warum all diese vorübergehende Änderung des Befehlstrennzeichens vor sich geht. Wenn sie an ; gewöhnt sind, warum sollten sie es nicht einfach in ; ändern, wie sie es gewohnt sind? Das ist eine Menge zweimal zu tippen, um es hin und her zu ändern, wenn sie einfach in die Einstellungen gehen und es einmal so ändern können, wie sie es tatsächlich wollen.

Das Problem liegt in Fällen, in denen der MUD ';' akzeptiert. als Eingabe und es gibt keine Möglichkeit, ein ';' ohne Menüsprung wenn ';' ist Ihr Befehlstrennzeichen. In der Lage zu sein, Smileys zu machen, ist eine Sache (um dies zu vermeiden, könnte man einen Mudlet-Alias ​​erstellen, der das Befehlstrennzeichen vorübergehend auf etwas Harmloses umschaltet, wenn man einen Chat-Kanal verwendet). Ein weiterer Grund ist, dass der MUD serverseitige Aliase speichern kann, die im Allgemeinen schneller zu verarbeiten und schneller/einfacher zu erstellen sind als clientseitige Aliase, aber diese verwenden ';' auch den Befehl zu trennen.

das alles klingt für mich nach Gründen, ; nicht als Befehlstrennzeichen zu verwenden.

Leider keine Option, da wir bereits Hunderte von Triggern und clientseitigen Aliasen haben, die send("tens of commands separated by ;") verwenden, die alle beim Ändern des Befehlstrennzeichens unterbrochen werden. Ich denke, die Angewohnheit kommt von ZMud, das ; verwendet, um Befehle zu trennen, obwohl der Parser für ZMud ; sendet, wenn es von Leerzeichen umgeben ist. Was wäre, wenn das Verdoppeln des Befehlstrennzeichens stattdessen einfach an den Schlamm gesendet würde? Wenn Ihr Befehlstrennzeichen wie in meinem Fall ; wäre, dann würde das Senden ;; stattdessen ein ; an den Schlamm senden, also würde beispielsweise die Eingabe say hello everyone;;) senden say hello everyone;) . Wenn Sie ;; als Befehlstrennzeichen verwendet haben, würden Sie ;;;; verwenden, um das Befehlstrennzeichen zu maskieren und ;; zu senden. Könnte ein Kontrollkästchen in den Einstellungen haben, das diese Option aktivieren / deaktivieren würde, die standardmäßig deaktiviert ist, um zu vermeiden, dass die Funktionalität für irgendetwas unterbrochen wird, das das Verdoppeln des Befehlstrennzeichens beschädigen könnte, obwohl ich mir nicht vorstellen kann, was der Schaden dort wäre.

Wenn Sie ;; als Befehlstrennzeichen würden Sie dann ;;;; um das Befehlstrennzeichen zu entkommen

Glaubst du, die Leute werden es gut finden, das Semikolon viermal zu tippen? :thinking: Ich glaube nicht, dass das realistisch ist.

Glaubst du, die Leute werden es gut finden, das Semikolon viermal zu tippen? 🤔 Das halte ich nicht für realistisch.

Ich glaube nicht, dass diejenigen, die bereits ein 2-Zeichen-Befehlstrennzeichen übernommen haben, die Notwendigkeit finden würden, ihrem Befehlstrennzeichen sehr oft zu entkommen. Wie oft müssten Sie ein Befehlstrennzeichen verlassen, das bereits auf ;; gesetzt ist? Die Alternative ist einfach, niemals ;; in irgendeiner Weise an den MUD senden zu können, richtig? Ich stimme zu, dass das Entkommen für diejenigen mit 2 oder mehr Zeichen für ihr Befehlstrennzeichen langweilig werden würde, aber es war nicht der Sinn, 2 oder mehr Zeichen in Ihrem Befehlstrennzeichen festzulegen, damit Sie beim Senden an den Schlamm a nicht auf ein Problem stoßen würden einzelnes Zeichen des Escape-Zeichens? Es wäre interessant, eine Umfrage darüber zu sehen, was Leute als Befehlstrennzeichen verwenden und ob sie ;; oder ein anderes doppeltes Zeichen übernommen haben oder nicht.

Ich glaube nicht, dass eine Umfrage helfen wird, denn das heißt "Lass uns die Minderheit verarschen", wer auch immer die Minderheit am Ende ist.

Das Originalskript:

local x = getCommandSeparator()
if x ~= ";" then setCommandSeparator(";")
send("com1;com2;com3;com4")
setCommandSeparator(x)
else
send("com1;com2;com3;com4")
end

Das ist eine wahnsinnige Menge Arbeit, warum die Dinge so kompliziert machen? Wenn Sie mehrere Dinge zu senden haben, verwenden Sie sendAll() ?

Ich glaube nicht, dass eine Umfrage helfen wird, denn das heißt "Lass uns die Minderheit verarschen", wer auch immer die Minderheit am Ende ist.

Ich sehe nicht, wie jemand durch eine Methode geschraubt werden würde, um dem Befehlstrennzeichen zu entkommen. Eine neue Einstellungsoption oder -funktion sollte keine aktuelle Funktionalität beeinträchtigen. Ich bin neugierig, was die Leute tatsächlich für ihren Befehlstrenner verwenden, ob die Leute einen 2-Zeichen-Befehlstrenner übernommen haben, damit sie dieses Zeichen an den MUD senden können oder nicht. Wenn Ihr Befehlstrennzeichen ein einzelnes ; ist, dann würde ;;) ;) senden und das Befehlstrennzeichen umgehen. Wenn Ihr Befehlstrennzeichen ein doppeltes ;; ist, dann würde ;) immer noch ;) senden, ohne das Befehlstrennzeichen zu aktivieren. Wenn Sie aus irgendeinem Grund ;; senden wollten , zum Beispiel gossip Hey guys, I use Mudlet and my command separator is ;; , dann könnten Sie ;;;; , um die ;; an den MUD zu senden das vorherige Beispiel.

Das ist eine wahnsinnige Menge Arbeit, warum die Dinge so kompliziert machen? Wenn Sie mehrere Dinge zu senden haben, verwenden Sie sendAll() ?

Es wäre eine Problemumgehung, wenn wir eine setCommandSeparator() -Funktion für diejenigen hätten, die gerne ; als Befehlstrennzeichen verwenden, aber dennoch gelegentlich ; an ihren MUD senden müssen. sendAll() funktioniert hervorragend, wenn es nur 2 oder 3 Befehle sind, aber wenn Sie 30 oder 40 Befehle hintereinander erreichen, wird es ziemlich schnell mühsam, diese zu schreiben, anstatt die Befehle mit dem bereits vorhandenen Befehl ; zu trennen Separator.

Ich denke, das sind jetzt 2 Vorschläge geworden, einer für die Funktion setCommandSeparator() und der andere eine Kontrollkästchenoption für Einstellungen für Double command separator to bypass the command separator . Ich bin mir in diesem Fall nicht sicher über die Etikette für Github, also entschuldige ich mich dort!

Ich glaube nicht, dass Sie realistisch sind, wenn Sie jemandem sagen, dass er ;;;; eingeben muss ... Entschuldigung! Die Antwort, die Sie wahrscheinlich erhalten werden, lautet: "Willst du mich verarschen?"

Wir haben die Funktion aus einem bestimmten Grund zunächst nicht eingebaut - sie ermöglicht schlechte Angewohnheiten. Ich verstehe die Reibung, die die Spieler in Ihrem Spiel mit dieser schlechten Angewohnheit haben und wie schwierig es ist, und sie würden gerne mehr Arbeit leisten, indem sie wirklich große Skriptaliase einfügen, die das Trennzeichen ändern, bearbeiten usw., anstatt das zu ändern Gewohnheiten ... aber vielleicht ist es am besten, die Gewohnheit stattdessen in etwas Besseres umzuwandeln?

Wenn Sie mehrere Dinge senden möchten, verwenden Sie nicht send() mit dem Befehlstrennzeichen. Das ist schlechte Praxis. Wir haben sendAll() aus diesem Grund, der diese Unordnung vollständig vermeidet. Sehen Sie sich den dämonischen Code an, der oben etwas früher eingefügt wurde.

Ich verstehe vollkommen, dass Sie den Übergang zu Mudlet reibungsloser gestalten möchten. Aber schlechte Angewohnheiten zu ermöglichen, ist wahrscheinlich kein guter Weg, denn am Ende wird Mudlet dann genauso beschissen wie die anderen Kunden, oder?

Ich glaube nicht, dass Sie realistisch sind, wenn Sie jemandem sagen, dass er ;;;; eingeben muss ... Entschuldigung! Die Antwort, die Sie wahrscheinlich erhalten werden, lautet: "Willst du mich verarschen?"

Das müssen sie natürlich nicht, nur wenn sie dem Befehlstrenner aus welchem ​​Grund auch immer entkommen wollen. Wenn sie ein einzelnes ; als Befehlstrennzeichen verwenden würden, müssten sie es nur zweimal eingeben, um zu entkommen und ein einzelnes ; zu senden. ;)

Wenn Sie mehrere Dinge senden möchten, verwenden Sie nicht send() mit dem Befehlstrennzeichen. Das ist schlechte Praxis. Aus diesem Grund haben wir sendAll() , die diese Unordnung vollständig vermeiden. Sehen Sie sich den dämonischen Code an, der oben etwas früher eingefügt wurde.

Leider war mir nicht klar, dass sendAll() die bevorzugte Option dafür war, als ich viele Aliase und Trigger schrieb, und ich wusste auch nicht, dass $ speedwalk() für die Eingabe vieler Richtungen verwendet werden kann.
Also landete ich bei einer Menge Aliase, die in etwa so aussehen: "brief;compact;s;s;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;s;w;w;s;s;w;s;s;s;s;s;e;s;s;e;e;s;e;e;n;e;e;n;e;n;d;d;n;n;n;d;e;e;s;s;s;u;u;u;n;u;u;n;n;w;n;n;u;u;u;n;n;enter lift;u;s;s;s;s;s;s;s;d;d;d;e;e;e;s;s;s;e;e;e;s;s;e;s;e;s;e;e;s;u;u;u;u;u;e;n;n;n;e;n;n;n;e;n;n;n;n;e;e;s;e;s;e;n;n;e;n;e;n;e;s;e;s;e;e;s;s;s;e;e;e;s;brief;compact"

Aber zurück zum Thema, ich glaube nicht, dass es ein Menüwechsel ist, um Befehlstrennzeichen auszutauschen, wenn die Notwendigkeit besteht, das vom Benutzer gewählte Zeichen als Befehlstrennzeichen an den MUD zu senden, und dann erneut im Menü zu wechseln, um es zurückzuschalten Designverbesserung gegenüber anderen Kunden in dieser Hinsicht und ich denke, Mudlet kann es besser machen.

Öffnen Sie einen Editor, der reguläre Ausdrücke suchen und ersetzen kann, geben Sie dieses Muster ein: (.+?); und ersetzen Sie es durch "\1", , und das bringt Sie für jeden Alias ​​zu 95 % dorthin.

Leider war mir nicht klar, dass sendAll() die bevorzugte Option dafür ist, als ich viele Aliase und Trigger schrieb, und ich wusste auch nicht, dass speedwalk() viele Richtungen eingibt.

In Ordnung, wir werden die Dokumentation hier verbessern, damit sie für die Zukunft hilfreich ist.

Edit: Das ist an allen relevanten Stellen gemacht.

Meine Frage bleibt noch unbeantwortet:

Was genau geben die Leute dann in Ihre anderen Clients ein, um mehrere Befehle zu senden, aber nicht mit zwinkernden Smileys und serverseitigen Spielereien zu stören?

Zum Beispiel kann ich davon ausgehen, dass die meisten Spieler nicht einmal allzu sehr in Alias-Skripte eintauchen wollen, sie wollen einfach etwas wie zum Beispiel speedy s;s;w;w;w;s;s;s;e;s;s;e;e;u;u;u;n;n;enter lift;u;s;s;d;e;e und so weiter eingeben.

In diesem Fall können Sie leicht einen Alias ​​erstellen und verteilen, der den Befehl speedy erkennt und den Rest in einzelne Elemente aufteilt, die dann wie oben beschrieben mit sendAll separat gesendet werden können.

Voilá, die Spieler sind glücklich, es müssen überhaupt keine Trennzeichen verwendet oder geändert werden.

Auf keinen Fall empfehle ich das Menü-Hopping, um Ihr bevorzugtes Befehlstrennzeichen im Vergleich zu dem, das jemand in seinen Skripten verwendet, weiterhin festzulegen und zurückzusetzen (denken Sie daran, dass es auch widersprüchliche Autoren geben könnte).
Ich würde es auch nicht dulden, dass ein Autor das Trennzeichen ohne Benachrichtigung des Spielers ändern kann und alle Autoren anderer Skripte und der Spieler selbst davon betroffen sind.

Meine Frage bleibt noch unbeantwortet:

Was genau geben die Leute dann in Ihre anderen Clients ein, um mehrere Befehle zu senden, aber nicht mit zwinkernden Smileys und serverseitigen Spielereien zu stören?

Von den Spielern, die ich gefragt habe, habe ich vier verschiedene Methoden zum Deaktivieren/Umgehen des Befehlstrennzeichens außerhalb des Menüwechsels gehört.

  1. ~ vor dem Befehlstrennzeichen, also würde ~; ; senden
  2. Durch Verdoppeln des Befehlstrennzeichens würde ;; ; senden
  3. Hotkey Strg+R, um unter anderem das Befehlstrennzeichen zu deaktivieren
  4. Ein Symbol am Ende der Konsoleneingabeleiste, das das Befehlstrennzeichen deaktiviert

Soweit ich das beurteilen kann, ist das bevorzugte Befehlstrennzeichen unter unseren Benutzern ; , aber andere Clients bieten verschiedene Möglichkeiten, um aus dem Befehlstrennzeichen herauszukommen, indem sie Smileys senden oder Befehle an den Schlamm senden, die ; erfordern

Ihm zu entkommen klingt für mich in Ordnung - weiß jemand, was Zmud / Mush tun?

ZMUD sagt :

Text wird als eine Reihe von Befehlen geparst, die durch das Befehlstrennzeichen getrennt sind (standardmäßig ;). Jeder Befehl besteht aus dem Befehlsnamen als erstes Wort, dem das Befehlszeichen vorangestellt ist (standardmäßig #). Befehlstrennzeichen innerhalb von Anführungszeichen ("" oder '') oder Klammern ([] <> oder {}) werden bei der Trennung der einzelnen Befehle ignoriert. Beispielsweise
#SAY {a;b}
ist ein einzelner Befehl, wobei as
#SAY a;b
sind zwei Befehle.

Hinweise der MUSHCLIENT-Community:

Wenn Sie in MUSHclient eine Zeile mit einem Semikolon beginnen, werden nachfolgende Semikolons nicht mehr als Zeilentrenner behandelt.

Der Ansatz von Mushclient erscheint vernünftiger ... aber möchten Sie trotzdem dazu beitragen, schlechtes Benehmen zu dulden? Das Korrigieren vorhandener Aliase ist nicht schwer, siehe https://github.com/Mudlet/Mudlet/issues/3677#issuecomment -620511178, und mit besseren Dokumenten würden weniger Leute anfangen, den Fehler zu machen.

@KitchenMUD kannst du deine Aliase damit reparieren?

@KitchenMUD kannst du deine Aliase damit reparieren?

Es ist mühsam, aber ich kann diejenigen, die send verwenden, mit der von Ihnen vorgeschlagenen Methode in sendAll umwandeln.

Hoffentlich nicht viel mehr Arbeit, als die Verwendung von setCommandSeparator()

Hoffentlich nicht viel mehr Arbeit, als die Verwendung von setCommandSeparator()

@vadi2 Vielleicht war das ein schlechtes Beispiel meinerseits. Ich dachte, da wir bereits getCommandSeparator() haben, wäre eine Gegenfunktion setCommandSeparator() eine einfache Lösung. Das Hauptproblem , denke ich, ist, dass Mudlet eine Methode haben sollte, um das gewählte Befehlstrennzeichen zu umgehen, ohne dass der Benutzer zum Menü wechseln muss.

Vielleicht wäre eine bessere Funktion eine neue, die das Parsen des Befehlstrennzeichens insgesamt ignoriert und direkt sendet, was im Code eingegeben wird? Das ist sicherer, um Endbenutzer davon abzuhalten, außerhalb einer UI-Lösung etwas zu vermasseln.

Vielleicht wäre eine bessere Funktion eine neue, die das Parsen des Befehlstrennzeichens insgesamt ignoriert und direkt sendet, was im Code eingegeben wird?

Ich mag diese Idee. Würde es es für dich lösen?

Was denken andere in @Mudlet/lua-interface?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen