[Script Basics] Bastel Stunde ! (zu 92% fertig)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Script Basics] Bastel Stunde ! (zu 92% fertig)

      Inhaltsangabe
      • Vorwort
      • Was sind überhaupt Scripte ?
      • Was brauch ich alles für mein Script ?
      • CFG Dateien
      • Tastenbezeichnung
      • Syntax
      • Funktionen
      • Nachlese-Möglichkeiten
      • Script Basics
      • Schlusswort


      Vorwort

      Ich möchte mit diesen Guide eine kleine Hilfestellung geben für Dota 2 Spieler, die zuvor noch keine Erfahrung mit Valve Source Engine gesammelt bzw. sich noch nicht mit dem Scripten vertraut gemacht haben. Die Hilfestellung soll den Effekt haben, dass Leser des Guides eigenständig Scripte erstellen können bzw nachvollziehen können, wie man bestimmte gewünschte Ergebnisse erzielt und mit Hilfe einer Nachlese-Möglichkeit diese reproduziert und an sein Bedürfnisse anpasst.



      Was sind überhaupt Scripte ?

      Scripte im Valve Universum sind Befehlsketten oder auch Befehlsreihenfolgen, die beim Auslösen einer vordefinierten Taste nacheinander durchgeführt werden und somit eine Vereinfachung ermöglichen können (, dass liegt im Auge des Betrachters).

      Ein Couier, der per Tastendruck, alle Items von einem Spieler in den Stauraum packt und mit Haste zu diesem fliegt, die Items in deren Spielerinventar packt und zurückfliegt, wäre ein Beispiel für ein Script.



      Was brauch ich alles für mein Script ?

      Kurz gesagt,
      • Eine Idee
      • eine CFG-Datei
      • eine freie Taste
      • die Funktionen
      • die Befehle
      • das Wissen, wie man das ganze kombiniert


      CFG-Dateien

      Wir brauchen eine CFG Dateie, auch Configurations-Datei genannt, doofes Wort, wir bleiben lieber bei CFG Dateien, ist kürzer...
      Da Dota 2 von Valve vermarktet wird, finden wir das Spiel auch in unseren Steam Ordner, dort müsst ihr euch zum Ordner "cfg" freikämpfen ("Steam\steamapps\common\dota 2 beta\dota\cfg"), dort angekommen, findet ihr lauter toller CFG Dateien.

      Nun ist Vorsicht angesagt, uns sollte wenn überhaupt nur die config.cfg dort interessieren, diese ist für alle benutzerdefinierten Einstellungen standardmäßig vorgesehen. Diese beinhaltet unser Settings (Tastenbelegungen, Grafik-,Soundeinstellung und vieles mehr) und sollte vor uns Experimentwütigen erstmal unberührt gelassen werden.

      Daher empfehlt es sich eine eigene CFG Datei zu erstellen, wo wir erstmal unsere Scripte und für uns wichtige Befehle speichern können, aus diesem Grund hat das Valve Team vorsorglich die autoexec.cfg eingebunden, obwohl diese Datei noch gar nicht vom Spiel aus vorhanden ist. Wir müssen dem nach also nur eine CFG Datei mit dem Namen autoexec erstellen, der einfachste Weg ist indem ihr eine CFG Datei kopiert, nicht ausschneidet und den Inhalt löscht und den Namen zu autoexec ändert.

      Die autoexec hat nun den Vorteil, dass wir übersichtlich und ohne Risiko Dinge in Angriff nehmen können und zu Not immer noch die Standart Config haben, wo die Tastenbelegungen, läuffähigen Grafik- und Soundsettings abgespeichert sind auf die wir zurückgreifen können.

      In unseren Fall müssten wir die autoexec.cfg aus dem cfg Ordner rausnehmen und Dota 2 würde, wenn es ein Setting Problem war, wieder normal laufen.



      Die Tastenbelegung

      Um unser Script zu benutzen brauchen wir eine Tastenamen und müssen auch wissen wo dieser zu finden ist, damit diese Befehlskette abgearbeitet wird. Dafür gibt es dieses tolle Bild, womit ihr Tastennamen auch den Postition zuordnen könnt.


      Quelle : 4players.de



      Syntax

      Es fehlen nur noch ein paar Schritte und dann können wir unser eigenes Script in Angriff nehmen, im nächsten Schritt werde ich die Funktionen anhand eines Beispiels erklären, bevor wir aber dazu kommen, will ich kurz auf die Syntax eingehen (,wie Config und Co. Scripte wahrnimmt).
      Mit der Syntax ist der Aufbau gemeint, wie die Funktionen und Befehle aneinandergereit werden, damit diese von Dota verstanden werden und weiterverarbeitet werden bzw. durchgeführt werden können .

      Wenn ich zu einer Frau sagen würde, "ich liebe dir, weil ohne du kann ich nicht bin", würde diese mich auch sehr komisch anschauen und wäre sehr wahrscheinlich ein bisschen verwirrt (, wenn sie nicht JBO kennt).


      Damit eure Meisterwerke auch nachher richtig laufen sollte eure Syntax so aussehen :

      "Funktion" "Variable / Taste" "Was soll geschehen"



      Funktionen

      Funktionen sind so gesehen auch Befehle mit dem großen Unterschied, dass diese mit anderen Befehlen arbeiten, diese verarbeiten, einweisen oder nur den Benutzer informieren.

      Mir sind diese Funktionen bekannt

      • Kommentar
      • Bind
      • Anhang
      • Alias
      • Echo
      • Exec


      Kommentar Funktion

      Die wichtigste Funktion beim Scripten und allgemein beim Programmierung ist meiner Meinung nach der Kommentar, Bei Dota 2 muss man um diese Funktion anzuwenden zwei Slashes ("//") an der gewünschte Stelle eintippen. Kommentare sind wichtig um den Überblick zu behalten, also ein Segen auf Erden, wenn man sich ein Script anschaut, was nicht von einem selbst ist oder lange nicht mehr angerührt wurde. Kommentar sind zudem auch gut um Befehle, die man zZ. nicht braucht oder unsicher ist, auszuschalten, ohne das man sie komplett löschen muss (, da nach einen Kommentar die Zeile geblockt wird).


      Bind Funktion

      Kommen wir zum Befehl "bind", mit bind verknüpfen wir eine Taste mit einer Variablen (Platzhalter), einem befehl oder Befehlskette.


      Anwendungsbeispiel "Kommentar & Bind"

      Quellcode

      1. bind "F12" "volume 0.00" // ingame sound wird mit dem betätigen der F12 Taste ausgeschaltet

      Bei diesem Beispiel wird auf beim betätigen der F12 Taste der Befehl volumen 0.00 ausgeführt, der veranlässt, das der inGame auf 0 gesetzt wird, da hinter ist ein Kommentar zu finden der die Funktion beschreibt.


      Anhang

      Um Befehle an einander zuketten brauchen wir eine Funktion, hier erledigt dies das ";" (Zeichen), es erlaubt Befehle anzuhängen und diese nacheinander abzuarbeiten.


      Alias Funktion

      Die "Alias" Funktion erlaubt uns Befehlsketten einer Variablen (Platzhalter) zu zuweisen, auch ist es möglich selber auf eine Variable mit einer Variable zu verweisen. Allem in allem erspart uns dieser sehr viel Copy-Paste oder Tipparbeit und sorgt für ein bisschen Übersicht.


      Echo Funktion

      Mit der "Echo" Funktion kann man sich selbst Botschaften in Game übermitteln, die keiner sonst sehen soll, da sie für diese Person uninteressant sind und auf dauer nerven würde. Insgesamt ist der Befehl interessant für Scripte wo Wertänderungen Ingame durchgeführt werden, die man ansonsten schwerer nachvollziehen könnte, wie zB die Maussensibilität- oder Lautstärkeeinstellungen.

      Um diese Funktion verwenden zu können, brauch man allerdings den Developer Modus (developer "1"), da ansonsten keine Echo Nachricht in Game angezeigt werden würde, dazu müsst ihr den Wert in eine ausführbare CFG Datei (config, autoexec zB.) reinschreiben.


      Anwendungsbeispiel "Anhang, Alias und Echo"

      Quellcode

      1. bind "Taste" "mSound"
      2. alias "mSound" "volume 0.00;echo Volume_Muted"

      Fast die selbe Funktion wie eben, nur dass 2 Befehle abgearbeitet werden, inGame wird der Sound ausstellt und ein Echo Befehl wird ausgegeben "Volumen_Mute".


      Exec Funktion

      Die Exec Funktion ist dazu da um CFG Dateien mit einzubinden, diese Funktion macht Sinn, wenn man bestimmte Werte nur gelegentlich brauch (binds überschreiben bei bestimmten Helden zB.) oder ein bisschen mehr Übersicht insgesamt schaffen möchte.

      Anwendungsbeispiel "Exec"

      Quellcode

      1. bind "F11" "exec Invoker.cfg" // die Invoker CFG wird eingebunden und überschreibt bestimmte binds
      2. bind "F10" "exec autoexec.cfg" // Binds werden wieder auf den normal wert umgeschrieben




      Nachlese-Möglichkeiten

      Wir sind eigentlich erstmal am Ende dieses Guides angekommen. Ihr habt Beispiele bekommen wie man die Funktionen anwenden kann und habt eine Übersicht, wo sich welche Taste befindet. Es fehlen eigentlich nur noch die zu verarbeitenen Befehle, da man die nicht alle Befehle merken kann, muss man sich eigentlich nur merken, wo man nachschlagen kann, dazu habe ich hier eine Mini Liste reingeschrieben.

      Valve Wiki Console Commands List
      ValveWiki.com Comand Line Options
      dota2Wiki.com Console Commands List



      Script Basic

      Es gibt Scribt-Ansätze, die man immer und immer wieder brauch, wenn man für sich das Spiel einfacher machen möchte, in den nächsten Zeilen möchte ich euch diese vorstellen und erklären.


      Toggle Script

      Wenn wir von toggle reden, benutzen wir eine Taste für mehre Werte, Variablen oder Befehle, die per Tastendruck nach einer festgelegten Reihenfolge pro Druck ausgeführt werden, dies ist sinnvoll wenn man einen Wert stufenweise erhöhen möchte oder man mit einer Taste einen An- / Aus- Schalter haben möchte, aber wie geht das ?

      Bei einem einfachen Toggle Script, brauch man eine feste Variablen und so viele Variablen, wie man Aktionen per Tastendrück ausführen möchte, die feste Variable wird auf eine Taste gebindet und man verbindet sie mit einen Variablen, die eine gewünschte Aktion ausführt. In den Variablen, die Aktionen ausführen, wird am Ende der Befehlskette, die feste Variable mit der nächsten gewünschten Variablen verknüpft, man überschreibt also den alten Wert und das geht immer so weiter, am Ende wird die letzte Variable mit der ersten verbunden und man hat einen Kreislauf.


      Hier mal ein Anwendungsbeispiel :
      -----
      bind " "Taste" "iSound // die Variable iSound wird auf eine Taste gebindet

      alias "iSound" "mSound" // iSound wird auf eine weitere Variable verwiesen mit dem Namen mSound
      alias "mSound" "volume 0.00;alias iSound Sound05" // mSound wird beschrieben, Sound wird auf 0% gesetzt und die Variable iSound verweist nicht mehr auf mSound sondern auf Sound05
      alias "Sound05" "volume 0.05;alias iSound Sound10" // das gleiche hier mit Sound05 und Sound10
      alias "Sound10" "volume 0.10;alias iSound Sound15" // das gleiche hier mit Sound05 und Sound10
      alias "Sound15" "volume 0.15;alias iSound mSound" // das gleiche hier mit Sound15 und mSound, der Kreis schliesst sich

      Dies hier (drüber) ist ein Toggle Script, was die Lautstärke im Spiel per Tasten Drück regulieren kann, dabei erfasst das Script vier Werte, die es nach der Reihe abarbeitet (0/5/10/15% Ingame Sound).

      In der ersten Zeile geben wir einer Taste die Variable iSound.
      Als nächstes folgt, dass wir sagen, dass iSound auf die Variable mSound verweisen, wir verbinden also iSound mit einer weiteren Variable in dem Fall mit mSound.
      Nun wird nun mSound beschrieben, mSound bedeutet der Ingame Sound wird auf 0% reguliert und nun folgt das wichtigste, wir überschreiben die alte Verbindung und ändern Sie zu Sound10, also wir sagen nachdem mSound durchgeführt wurd, dass iSound nun auf Sound10 verweist und somit hat iSound neue Befehlskette.
      In den folgenden Zeilen wird, dass ganze wiederholt und am Ende mit der ersten Variable (mSound) verbunden, damit sich ein Kreislauf bildet.

      Zusammengefasst wir haben die feste Variable iSound, die zu Anfang mit einer der 4 weitere Variablen verknüpft ist, die vier weiteren Variablen verknüpfen die feste Variable iSound, nachdem sie ihre eigentliche Aufgabe erfüllt haben, mit der nächsten Variablen und erschaffen somit einen Kreislauf.
      -----



      Schlusswort

      Dieser Guide Ansatz ist bei weitem noch nicht fertig, die Wortwahl muss ich noch überarbeiten und die Beispiel für die Funktionen gefallen mir auch noch nicht so richtig.
      Es fehlen noch paar sinnvolle Schablonen, wie ein Toggle und Meta Scripts und Ideen zur Optimierung / aufräumen der CFG Dateien,

      dennoch will ich schon mal diesen Mini Beitrag hier los werden, um auf evtl. Wünsche und Kritik eingehen zu können (und weil ich ihn nicht mehr als Entwurf speichern kann im Briefkasten... over 10000).

      Da ich große Probleme beim Lesen und Schreiben habe, wäre es nett, wenn ihr gefundene Fehler einfach per PM oder hier als Kommentar reinschreiben würdet.

      MfG Xephas

      Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von Xephas ()

    • Gute Idee, da recht wenige anscheinend mit Config und Console vertraut sind, obwohl diese viele Möglichkeiten eröffnen.

      Trotzdem sind Scripts immer mit Vorsicht zu genießen. Vieles ist oftmals nicht wirklich erlaubt, auch wenn es möglich ist (z.B. früher noch: BunnyHop).

      Autoinvoke: Ghostwalk
      alias "ghostwalk" "dota_ability_execute 0; dota_ability_execute 0; dota_ability_execute 1; dota_ability_execute 5; dota_ability_execute 3" // falls neue ability auf "D" invoked wird

      bind "x" "ghostwalk"
      Missing ...

      R.I.P.

      MYM|Mark is back! :ugly:
    • TrEffN![X] schrieb:

      Gute Idee, da recht wenige anscheinend mit Config und Console vertraut sind, obwohl diese viele Möglichkeiten eröffnen.

      Trotzdem sind Scripts immer mit Vorsicht zu genießen. Vieles ist oftmals nicht wirklich erlaubt, auch wenn es möglich ist (z.B. früher noch: BunnyHop).

      Autoinvoke: Ghostwalk
      alias "ghostwalk" "dota_ability_execute 0; dota_ability_execute 0; dota_ability_execute 1; dota_ability_execute 5; dota_ability_execute 3" // falls neue ability auf "D" invoked wird

      bind "x" "ghostwalk"


      jap, das ist extrem Grenzwertig. Gutes beispiel mit dem invoker, du kannst dir quasi die tastatur mit autoinvokes zuklatschen.

      Ich weiss nicht inwiefern sich targetfreie spells mit target spells zusammenlegen lassen, das würde noch mehr möglichkeiten Eröffnen ( instant ulti nach dagger z.b.)

      In dota1 hiess es ja sowas ist verboten, möglich war es mit zusätzlichen scripten damals schon.
    • Das sind vermutlich nicht mehr basics aber:

      1. gehen Auswahlmenüs?

      Bei Rtcw konnte man mit mehrmaligem drücken einer Taste z.b. zwischen Medic mit Thompson und Medic mit MP40 switchen.

      Dota-Beispiel: kann ich mir ne Nachricht ala Gank Top/Bot/Mid auf eine Taste legen? (also alle drei auf eine Taste)

      2. kann man attribute abfragen?

      z.B. dass der Chicken-bind nur funktioniert wenn das Chicken gerade nicht läuft.

      3. gehen Positionsabfragen?

      kann ich z.b. ein Chicken zum Tower schicken lassen oder gleichzeitig mit der Meldung "Gank Mid" mitte blinken per Knopfdruck?
    • Ich hab den Guide mal fix überflogen, schau nochmal auf Schreibfehler etc. durch, aber das steht denke eh aufm Plan.

      Ein bischen verwirrend ist der Spaß mit config.cfg/autoexec.cfg
      Wenn ich mich recht erinnere wird einzig die autoexec.cfg beim Spielstart mitgeladen, weitere zu ladende configs müssen in ihr aufgerufen oder von Hand(über die Console) nachgeladen werden.
      Das Problem in Dota ist das die komplette cfg Struktur noch undurchsichtig erscheint, den aus irgendeinem Grund werden Konfigurationen die direkt im Spiel händisch vorgenommen wurden priorisiert.

      Ansonsten ganz ok für Spieler die sich damit noch gar nicht auseinandergesetzt haben, schön wäre es das ganze vielleicht anhand eines Beispiels aufzubereiten(nimm doch einfach das mit dem Chicken und erklär den Code).

      1. gehen Auswahlmenüs?

      Bei Cs 1.6 gabs damals ne schöne Gui Oberfläche(Name entfallen) die sich auch frei editieren lies, bin mir nicht sicher obs das auch in der Source Engine gibt.
      Falls ja kann man mit ein wenig Abreit komplette IngameMenüs erstellen die einem alles gewünschte ermöglichen(von kompletter Tastaturbelegung bis hin zu herospezifischen Scripts/Chatansagen etc.)

      Dota-Beispiel: kann ich mir ne Nachricht ala Gank Top/Bot/Mid auf eine Taste legen? (also alle drei auf eine Taste)

      Chatnachrichten sind das einfachste überhaupt, was mir z.b. sehr geholfen hat war:
      // Say MISS/RE bindings
      bind "leftarrow" "say_team miss top"
      bind "rightarrow" "say_team miss bottom"
      bind "downarrow" "say_team miss mid"
      bind "uparrow" "say_team re"

      2. kann man attribute abfragen?

      3. gehen Positionsabfragen?

      Soweit ich mich erinnern kann gibt die Console(über die eigentlich alles was mit cfg´s zu tun hat läuft) keine Rückgabewerte aus.
      Aber ich irre mich in diesem Punkt gern falls es doch was gibt :D

      Zu den Comments möchte ich mal anfügen, es liegt an Valve bzw. den Events Beschränkungen in den cfg´s zu definieren. Solange es sowas nicht gibt sollten "Schreiberlinge" alle Freiheiten haben. Egal obs Invokerscripte sind oder einfach nur ein Ulti-->Blink Script für den SK.
      Ob irgendwas uneralubt ist? Diese Frage darf sich aktuell noch nicht einmal stellen, man schaue sich nur mal ein paar "ProConfigs" an, was da so drinnen steht ist schon ziemlich arg.
      Zumal wir als Spieler erstmal alle Möglichkeiten kennen/auszreizen müssen damit man sehen kann ob bestimmte Befehle in der Config zu arg sind und einer Regulierung seitens Valve erfordern.

      Overall, ein sehr wichtiges Thema. In CS (1.6 wie Source) war config tweaken fast genauso wichtig wie spielen selber :D
    • Danke für die Antwort. 2. und 3. könnte man auch recht hart abusen :D

      da_kolben schrieb:

      Chatnachrichten sind das einfachste überhaupt, was mir z.b. sehr geholfen hat war:
      // Say MISS/RE bindings
      bind "leftarrow" "say_team miss top"
      bind "rightarrow" "say_team miss bottom"
      bind "downarrow" "say_team miss mid"
      bind "uparrow" "say_team re"
      Das ist mir schon klar, aber ich möchte halt nicht zwölfmillionen Tasten damit belegen :D Deswegen das mit den Menü's
    • Mal kurz eingeharkt :

      toggle ( was noch kommen wird) :

      Mit toggle ist gemeint, dass man eine Taste hat die mehre Befehle nach einer Reihenfolge abarbeitet und dann am ende wieder von vorne anfängt, das kann eine Soundeinstellung sein (mute, 5%,10%,15% und wieder auf mute gehen), aber auch einfach nur ein An- und Ausbefehl sein

      meta (muss ich wohl mich schlau machen, wie genau das hier ist)

      wäre ein Trick, der eine Taste als Art Menütaste benötigt und dann beim gedrückt halten andere Tasten, die schon andere Befehle belegt haben, noch mal belegbar machen.

      Das kennt man auch von Konsolen Shootern die eine Taste benutzen, um dann ein Auswahlmenü für Waffen zu haben so lange diese gedrückt bleibt, die Taste gibt so lange sie wie gesagt gedrückt bleibt dann anderen Tasten eine neue Aktion ( eine Auswahlmöglichkeit), wenn die Menütaste los gelassen wird, besitzen dann alle Tasten wieder ihre normale Funktion.

      wie gesagt kommt noch, ich bedanke mich schon mal für die Kritik, seid ruhig streng, ich möchte gerne das wirklich ein Neuling nach 1-2 ruhigen lesen der Beispiel anvollziehen kann, was er machen muss um den selben Effekt zu haben, das liegt an oberster Priorität.

      MfG Xephas

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Xephas ()

    • Benutzer online 1

      1 Besucher