Sie sind auf Seite 1von 19

stonefred.at - [scripting] http://stonefred.at/scripting_et.php?

section=scripting&subsection=et

stonefred.at » scripting » enemy territory

home enemy territory scripting


weblog
Das ist mein Scripting-Tutorial für Return To Castle
music Wolfenstein: Enemy Territory (ET).
digital art
Wieso Scripts schreiben?
web design
autoexec.cfg erstellen
scripting Grundlegende Befehle
enemy territory bind
//
counter strike: echo
source exec
gaming set
seta
contact tweaking
Grafik-Tweaking
Maus-Tweaking
m_pitch und m_yaw
Game-Tweaking
Performance-Tweaking

Scripts mit vstr


Erweitertes Scripting
Meine autoexec.cfg
Color Codes
Vsay List
Key List

Wieso Scripts Schreiben?

Scripts erlauben viele praktische Funktionen (leider auch


einige verbotene).

Zum Beispiel ist es mit Scripts möglich, mit Hilfe von 2 tasten,
in sekunden-schnelle seinen Nick-Name auf einen vorher
festgelegten Fake-Nick zu ändern. Scripts dieser Kategorie
sind nicht unbedingt notwendig, aber durchaus praktisch,
wenn man nicht erkannt werden will (wenn man zb. gerade
einen schlechten Tag hat).

Viel sinnvoller hingegen: ein Script, der einen auf Tastendruck


Explosions- und Rauch-Effekte ausblenden lässt. Das kann
sehr nützlich sein, wenn man auf einem beschädigten Truck
oder Tank liegt und durch den Rauch sehen will. Wichtig ist
auch, dass man diesen effekt gleich wieder einschalten kann,

1 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

damit man zum Beispiel nicht blindlings in eine Arty läuft!

Ein paar eingefleischte ETler werden das vielleicht kennen:


man schreibt sich mit viel Arbeit zig Binds und Settings in die
Konsole und nach einem Crash vom Spiel, sind alle Binds
plötzlich weg.

So etwas lässt sich kinderleicht vermeiden, indem man sich


eine eigene Config-Datei schreibt.

Wie man das alles macht (und noch viel mehr natürlich) lässt
sich in diesem Tutorial nachlesen.

Eins noch: für das scripten bei Enemy Territory braucht man
keine speziellen Vorkenntnisse. Scripten kann jeder!

back to top

autoexec.cfg Erstellen

Am besten beginnt man mit dem Scripten, indem man sich eine
Config-Datei erstellt. Wir gehen wie folgt vor:

1. ins /etmain Verzeichnis wechseln


2. Textdatei erstellen
3. diese aufmachen und abspeichern als autoexec.cfg

Damit ist die eigene Config soweit fertig. Zu Testzwecken


schreiben wir einmal einen kleinen Code hinein.

geht zurück zur autoexec.cfg-Datei und schreibt in die erste


Zeile: bind H "vsay_team FTHealMe" (was dieser Befehl genau tut,
werde ich später erklären, das ist jetzt noch irrelevant).

Als nächstes muss die Datei natürlich gespeichert werden. Ist


das getan, steigt ins Spiel ein und connectet auf einen
x-beliebigen server. Sobald ihr gespawnt seid, klappt die
Konsole mit der taste ^ heruntern (anm.: immer nachdem die
Konsole heruntergeklappt wurde 3 mal die rücktaste drücken,
sonst habt ihr am Anfang ein ungewolltes ^).

Jetzt geben wir folgendes ein: /exec autoexec.cfg und


bestätigen mit [enter]. Wenn jetzt die Erfolgsmeldung execing
autoexec.cfg erscheint, ist bis jetzt alles richtig. Als nächstes
testen wir noch den kurzen Code, den wir am Anfang
eingegeben haben. Schließt die Konsole mit einem weiteren
Druck auf ^ und jetzt drückt einmal auf die Taste H! Jetzt sollte
im Chat die meldung "Heal me!" erscheinen. Gleichzeitig hört
man im voice-chat die Nachricht gesprochen. Wenn ihr das
alles habt, könnt ihr mit dem Tutorial fortfahren!

anm.: den befehl /exec autoexec.cfg müsst ihr nur einmal pro
Mod eingeben (also einmal bei etmain, etpro, etpub, shrubet).
Dann wird dieser bei jedem Spielstart ausgeführt!

back to top

Grundlegende Befehle

2 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

bind
bind <taste> "befehl"

Binds sind unerlässlich für Scripting. Ohne ihnen könnte man


keinen Script ausführen. Ein bind ist ein simpler Befehl, mit
dem man eine bestimme Aktion auf eine bestimmte Taste legt.
Man kann auch eine Aktion auf mehrere Tasten legen oder auf
eine Taste mehrere Aktionen.

es ist sinnvoll, alle Binds aus dem Spiel in die autoexec.cfg zu


schreiben, da man sonst leicht den Überblick verliert und
Befehle auf bereits benutzte Tasten legt. Die ganzen
"normalen" binds (also zum Beispiel nach vorne gehen,
schiessen, nachladen, ...) findet man in der etconfig.cfg-Datei
im /etmain Unterverzeichnis des Spieleordners. Am besten man
kopiert sich alle Zeilen, die mit "bind" beginnen in seine
autoexec.cfg.

Die wichtigsten Befehle sind folgende:

+forward
+back
+moveleft
+moveright

+movedown (ducken)
+moveup (springen)
+prone (kriechen)
+attack (Standard-Angriff)
weapalt (sekundärer Feuermodus; OHNE +!!!)
+sprint
+reload

Ein Bind würde dann etwa wie folgt aussehen: bind W


"+forward"

//
// Kommentar

//kommentiert alles, das danach steht, komplett aus, dh: wird


vom Programm ignoriert.

ein Beispiel: // last modification 2008-01-01

Kommentare sollte man einsetzen um die Config zu gliedern.


Meine config ist zum beispiel 250 zeilen lang und ohne
Kommentaren würde ich mich überhaupt nicht mehr
zurechtfinden. Man kann Kommentare aber auch dazu
einsetzen, um den sinn eines Befehls zu kommentieren.

echo

3 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

echo "text"

Mit echo kann man jeden x-beliebigen Text am linken


Bildschirmrand ausgeben lassen (in der Konsole erscheint der
Text natürlich auch). Am häufigsten findet dieser Befehl seine
Anwendung bei Erfolgsmeldungen eines ausgefürten Scripts.
Ich schlage vor, ihr schreibt in eure autoexec.cfg die Zeile echo
"autoexec.cfg erfolgreich ausgeführt!". Bei echo können auch
Color-Codes verwendet werden!

exec

exec "Dateiname"

Diesen Befehl haben wir bereits beim ersten Test der


autoexec.cfg kennengelernt. exec ließt eine gewünschte Datei
aus, und schreibt alles in die etconfig.cfg. Diesen Befehl
benötigt man natürlich, um die autoexec.cfg zu laden.
Allerdings kann man damit auch weitere Dateien laden. Viele
Spieler teilen ihre autoexec.cfg in mehrere kleinere Dateien,
um eine bessere Übersicht zu erreichen. Man kann auch
Dateien in einem Unterordner in /etmain laden. Ein Beispiel:
exec "config/binds.cfg". Damit kann man die Datei binds.cfg im
Ordner config laden. Die exec Befehle schreibt man natürlich in
die autoexec.cfg!

set

set cvar "wert"

set gibt einer Variable bis zum Beenden des Spiels einen
bestimmten Wert. Ein Beispiel: set name "ETPlayer". Hier wird
der cvar name der Wert ETPlayer zugewießen. Damit legt man
den Namen im Spiel fest. Auch hier können Color-Codes
verwendet werden!

set speichert die Variable nur temporär. Möchte man eine


Variable dauerhaft speichern, sodass sie bereits beim
Initialisieren des Spiels geladen wird (sehr sinnvoll bei
Grafik-Einstellungen, da diese so schneller laden) verwendet
man seta.

seta
seta cvar "wert"

seta gibt einer Variable dauerhaft einen bestimmten Wert. Ein


Beispiel: seta r_gamma "2.0". Hier wird der cvar r_gamma der Wert
2.0 zugewießen. Damit wird schon beim Initialisieren des
Spiels der Gamma-Wert auf 2.0 angehoben.

back to top

Tweaking
4 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

Unter Tweaking versteht man das Einstellen aller Settings


(Grafik, Maus, . . .), sodass sie optimal für den Benutzer
angepasst sind.

Da wir jetzt die grundlegenden Befehle kennen, wird es Zeit


die wichtigsten Einstellungen und ihre Werte kennenzulernen.
Damit man diesen Einstellungen (auch Variablen oder cvars
genannt) einen Wert geben kann, benötigt man die Befehle
set oder seta.

Grafik-Tweaking

Bei den Grafik-Settings muss man zu allererst Gamma- und


Helligkeits-Werte stark erhöhen, um besser sehen zu können:

seta r_gamma "2.0"


ein hoher Wert stellt den Gamma-Wert höher
(Wertebereich: 0 - 3 | Standard: 1)
seta r_intensity "1.2"
ein hoher Wert stellt den Helligkeits-Wert
höher(Wertebereich: 0 - 1.5 | Standard: 1.0)
seta r_mapOverBrightBits "2.5"
ein hoher Wert macht Schatten heller (Wertebereich: 1 -
3 | Standard: 2)

Als nächstes legen wir Detailstufe, Auflösung und


verschiedene Effekte fest:

seta r_customwidth "1280"


stellt die Breite der Auflösung ein
seta r_customheight "1024"
stellt die Höhe der Auflösung ein
seta r_textureMode "GL_LINEAR"
damit kann man den Texturmodus einstellen (mögliche
Werte:
GL_NEAREST schlechteste Qualität
GL_LINEAR mittlere Qualität
GL_LINEAR_MIPMAP_NEAREST gute Qualität (bilinear
filtering)
GL_LINEAR_MIPMAP_LINEAR beste Qualität (trilinear
filtering)
| Standard: GL_LINEAR_MIPMAP_NEAREST)
seta r_picmip "2"
ein hoher Wert verschlechtert die Qualitär der primären
Texturen (Wertebereich: 0 - 3 | Standard: 1
seta r_picmip2 "2"
ein hoher Wert verschlechtert die Qualitär der
sekundären Texturen (Wertebereich: 0 - 3 | Standard: 1
seta r_detailtextures "0"
Ist diese Variable mit 1 aktiviert,
werden alle Texturen
ein zweites mal gerendert. Dadurch sehen sie zwar ein
wenig detaillierter aus, das kostet aber viel Leistung!
(Wertebereich: 0 oder 1 | Standard: 1
seta r_fastsky "1"
Mit 1 wird der Himmel mit einer einzigen Farbe
dargestellt. Sieht zwar hässlich aus, bringt aber ein paar
Prozente Leistung (Wertebereich: 0 oder 1 | Standard: 0
seta r_drawsun "0"
Diese Variable zeigt, wenn sie mit 1 aktiviert ist, die
Sonne an. Da sie spielerisch unwichtig ist, kann man sie

5 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

ohne Bedenken ausschalten (Wertebereich: 0 oder 1 |


Standard: 1
seta cg_shadows "0"
Ist diese Variable aktiviert, wird unter dem Spieler ein
Schatten angezeigt. Ist eigentlich unwichtig (und nicht
recht schön anzusehen), kann also deaktiviert werden
(Wertebereich: 0 oder 1 | Standard: 1
seta r_dynamiclight "1"
Diese cvar kommt ein einziges Mal im Spiel vor, und da ist
sie sehr wichtig: das gelbe bzw. rote Leuchten des
Dynamits. Deshalb sollte sie nicht ausgeschalten werden
(Wertebereich: 0 oder 1 | Standard: 1

Nun folgen die Blut einstellungen. Da Blut spielerisch unwichtig


ist, und sogar die Sicht verschlechtert, ist es sinnvoll, alle
Blut-Variablen auf 0 zu setzen:

seta cg_bloodDamageBlend "0.0"


seta cg_bloodtime "0.0000"
seta cg_showblood "1"
seta cg_bloodFlash "0"
seta cg_drawdamagekick "0"
seta cg_drawfallkick "0"
seta cg_damagekick "0"
seta cg_fallkick "0"

Maus-Tweaking

Als nächstes sollte man die Maus so einstellen, um ein


optimales Aiming erzielen zu können:

seta cl_mouseAccel "0"


Diese Variable legt die Maus-Beschleunigung fest und
sollte deshalb unbedingt auf 0 gesetzt werden! Es gibt
nichts schlechteres beim Aimen als
Maus-Beschleunigung! (Wertebereich: 0 - 1 | Standard: 0)
seta sensitivity "8"
Diese cvar stellt die Maus-Empfindlichkeit ein. Hier muss
jeder selber entscheiden, wie hoch er diesen Wert
setzen will (Wertebereich: 1 - 30 | Standard: 5)
seta m_yaw "0.022"
horizontale Maus-Geschwindigkeit - genauere Erklärung
im nächsten Kapitel m_pitch und m_yaw (Wertebereich:
innerhalb von -0.022 und 0.022 | Standard: 0.022)
seta m_pitch "0.015"
vertikale Maus-Geschwindigkeit - genauere Erklärung im
nächsten Kapitel m_pitch und m_yaw (Wertebereich:
außerhalb von -0.015 und 0.015 | Standard: 0.022)

m_pitch und m_yaw

Man muss sich bei der Maussteuerung eine Ellipse vorstellen.


Bekanntlich hat eine Ellipse 2 Achsen. Die Hauptachse
(horizontal) und die Nebenachse (vertikal). m_yaw wäre dann
die Hauptachse (mit der Länge 2a) und m_pitch wäre die
Nebenachse (Länge 2b). Sind beide Werte gleich groß, sieht
die Ellipse wie ein Kreis aus:

6 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

Wenn man den Wert von m_pitch verkleinert, dann sieht das in
etwa so aus:

Das gleiche Ergebnis erreicht man natürlich auch, wenn man


m_yaw vergrößert. Allerdings wird die ellipse dann viel größer

und man muss die Variable sensitivity reduzieren!

Man kann aber auch m_yaw verkleinern. Dann sieht die Ellipse in
etwa so aus:

Den gleichen Effekt erhält man durch das Vergrößern von


m_pitch, jedoch wird die Ellipse dann wieder sehr groß!

Wozu das alles gut ist: Wenn man die Maus so einstellt, dass
die Steuerung so reagiert, wie die flache Ellipse darstellt
(m_pitch kleiner als m_yaw), dann ist es viel leichter in einem
flachen Areal Headshots zu verteilen. Befindet man sich
allerdings in einem hügeligen Gebiet, muss man die Maus
dafür viel weiter nach oben und unten bewegen. Optimal ist,
einen Script zu schreiben, der zwischen dem Kreis und der
flachen Ellipse umschaltet (die hohe Ellipse ist unnötig, da man
damit nichts treffen würde!). Wie das geht erkläre ich in einem
späteren Kapitel.

Game-Tweaking

7 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

Im jedem Spiel gibt es verschiedene Einstellungen, die oft im


Menü nicht zu finden sind. Einige sind rein spielerische und
andere auch grafische Einstellungen.

seta cg_noAmmoAutoSwitch "1"


Mit 1 wechselt man sofort zu einer anderen Waffe, wenn
die aktuelle komplett leergeschossen wurde. Eine
sinnvolle Variable, deshalb würde ich sie aktiviert lassen!
(Wertebereich: 0 oder 1 | Standard: 1
seta cg_autoReload "0"
Ist diese Variable aktiviert, dann lädt man automatisch
nach, wenn ein Magazin leer ist. Ich würde diese Option
deaktivieren, da man in einem Nahkampf noch schnell zur
Pistole wechseln kann, wenn der gegner gerade
nachlädt. (Wertebereich: 0 oder 1 | Standard: 1
seta cl_allowdownload "1"
Wenn diese Variable mit 1 aktiviert ist, erlaubt man dem
Spiel, Daten von einem Server zu laden, falls diese
benötigt werden. Wenn man das nicht will, kann man
diese Variable auch mit 0 ausschalten, allerdings kann
man dann nur noch auf pure Servern spielen!
(Wertebereich: 0 oder 1 | Standard: 1
seta cg_fov "90"
Diese cvar stellt den Winkel des sichtbaren Bereichs ein
(field of view). Bei einem Menschen ist das optimal 90°
(in beide Richtungen), so auch im Spiel. wenn man
diesen Wert hinaufsetzt (zb.: 120) sieht man in der Nähe
zwar mehr, allerdings wird alles in größerer Entfernung
sehr klein und verzogen (wie wenn man durch ein
Fernglas von der falschen Seite sieht). In einem späteren
Kapitel werde ich erklören, wie man zwischen 2 Werten
bequem umschalten kann. (Standard: 90)

Performance-Tweaking

Beim Performance-Tweaking versucht man im Spiel eine


möglichst hohe FPS (frames per second / bilder pro
sekunde)-Rate zu erreichen. Dabei gibt es 3 Werte, an die es
sich lohnt zu gelangen: 43, 76, 125. Warum genau diese
Zahlen? wenn man eine stabile Frame-Rate auf einem der 3
Werte hat, gibt es minimale Rundungsfehler im
Programmcode. Durch eine der genannten Frame-Raten kann
man diese Rundungsfehler ausnutzen und so etwas weiter
und schneller springen. Dabei gilt, je höher die Frame-Rate,
desto besser. Klingt nach Bug-using, ist es aber nicht. Sogar in
Clan-Wars ist das erlaubt!

Einen Teil des Performance-Tweakings macht bereits das


Grafik-Tweaking aus. Alles andere wird hier beschrieben:

seta cg_drawfps "n"


Mit dieser Variable wird ein kleiner Frame-Counter am
rechten Bildschirmrand angezeigt, der alle n
Millisekunden aktualisiert wird. Wenn man jetzt auf einen
Server connectet, kann man bei ein paar Maps
nachsehen, wie hoch der Wert ungefähr liegt.
seta com_maxfps "76"
Damit setzt man eine Grenze, welche die FPS-Rate nicht
überschreiten darf. Wenn man den Wert zb. auf 76 stellt,
und die durchschnittlichen Werte aber darunter liegen,
hat das keinen Sinn. Dann sollte man com_maxfps auf 43

8 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

stellen.
seta com_hunkmegs "256"
Hiermit stellt man dem Spiel Arbeitsspeicher zur
verfügung. Die Hunkmegs sollten etwa 1/2 des
Arbeitsspeichers bekommen (zb.: 256 bei insgesamt
512MB RAM).
seta com_zonemegs "128"
Vergleichbar mit den Hunkmegs, allerdings benötigen die
die Zonemegs nur 1/4 des Arbeitsspeichers (zb.: 128 bei
insgesamt 512MB RAM).
seta com_soundmegs "128"
Wie die Zonemegs brauchen die Soundmegs optimal 1/4
des Arbeitsspeichers (zb.: 128 bei insgesamt 512MB
RAM).

back to top

Scripts mit vstr

vstr ist ein Befehl, der andere Befehle ausführt. Ein kleines
Beispiel dazu: angenommen, wir wollen einen Selfkill
ausführen. Eigentlich genügt es, den Befehl kill mit bind auf
eine Taste zu legen (zb.: bind K "kill"). Wir versuchen jetzt
eine andere möglichkeit, einen Selfkill zu vollführen.

Wir deklarieren eine neue Variable mit set und nennen sie
selfkill. Danach schreibt man unter anführungszeichen einen
Befehl.

set selfkill "kill"

Damit haben wir unsere erste, eigene Variable erstellt! Jetzt


muss sie nur noch ausgeführt werden:

bind K "vstr selfkill"

Ich hoffe, das ist soweit klar. Wenn ja, dann können wir
unsere Variable selfkill ausbauen.

man könnte zum beispiel mit nur einem tastendruck einen


Selfkill machen und gleichzeitig eine Nachricht in den
Team-Chat schreiben. Eigentlich ist das recht einfach. Dem
Sytax zufolge schreibt man einfach jeden zusätzlichen Befehl
dazu und trennt sie durch ;. Bei unserem Beispiel würde das
dann so aussehen:

set selfkill "kill; vsay_team "Ich mache nun einen Selfkill!""

(der Korrektheit halber auf das 2. Anführungszeichen zum


Schluss nicht vergessen!)

Wie gesagt, so einfach ist das. Und so kann man beliebig viele
Befehle miteinander verketten.

Jetzt schreiben wir mit vstr sogenannte "Toggle-Scripts". Mit


ihnen kann man praktisch den Wert einer Variable
durchschalten. Sehr sinnvoll ist das wenn man zb. com_maxfps
durch verschiedene Werte durchschalten will (da verschiedene
Maps verschieden hohe Hardwareanforderungen haben und
deshalb die FPS-Rate immer verschieden ist).

9 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

Um so einen Toggle-Script zu schreiben, muss man nur eine


Reihe von Befehlen mittels vstr ausführen. Klingt komplizierter,
als es ist. Wir beginnen damit, eine Variable zu deklarieren,
die den namen des Scripts trägt (bei der Benennung von
Variablen immer logisch vorgehen, sonst kennt man sich bald
nicht mehr aus). Nennen wir ihn einfach einmal FPSswitch. Und
diese Variable tut nichts anderes, als eine weitere Variable
mittels vstr auszuführen. Dann erstellen wir einen Bind für
eine x-beliebige Taste (zb. M) mit dem Befehl vstr FPSswitch. Wir
benötigen jetzt 3 weitere Variablen, in deren Namen eine der
drei wichtigen FPS-Rate-Zahlen steckt (also 43, 76 und 125).
Am besten wir nennen sie FPS43, FPS76 und FPS125. Jede dieser
Variablen bekommt einmal den Befehl set com_maxfps mit dem
Wert, der dem Variablennamen entspricht (zb. bei FPS45: set
com_maxfps "43").

Jetzt nehmen wir einmal an, wir haben einen


Highend-Rechner, bei dem 125 FPS keine Frage sind. Da macht
es Sinn, dass FPSswitch gleich zu Beginn des Spiels die Variable
FPS125 lädt. Also schreiben wir als Befehl für FPSswitch: vstr
FPS125.

Soweit alles klar? Mit der taste M wird die Variable FPSswitch
geladen. Diese haben wir darauf eingestellt, von selbst die
Variable FPS125 zu laden. Und in der steht drinnen, das
com_maxfps den Wert 125 erhalten soll. Jetzt müssen wir noch
einstellen, was passieren soll, wenn M ein weiteres Mal
gedrückt wird.

Auch das ist eigentlich ziemlich einfach. Wir schreiben nun in


die Variable FPS125 einen weiteren Befehl dazu. Dieser stellt
FPSswitch nun um. Hier passen würde: set FPSswitch vstr FPS43.
Nun macht man das gleiche bei FPS43 und FPS76 (nur dass bei
FPS43 als nächstes FPS76 geladen werden soll und bei FPS76
FPS125.

Damit man weiß, auf welchen Wert com_maxfps derzeit eingestllt


ist, ist es ratsam, das mittels echo auszugeben.

Als fertiger Script sieht das dann so aus:

bind M "vstr FPSswitch"


set FPSswitch "vstr FPS125"
set FPS43 "set com_maxfps 43; set FPSswitch vstr FPS76; echo "FPS
set to 43""
set FPS76 "set com_maxfps 76; set FPSswitch vstr FPS125; echo "FPS
set to 76""
set FPS125 "set com_maxfps 125; set FPSswitch vstr FPS43; echo
"FPS set to 125""

Ich weiß, das ist anfangs sehr verwirrend. Aber sobald ihr so
einen Script selber geschrieben habt, werdet ihr das System
verstehen.

Jetzt gibt es noch eine Erweiterung zu vstr. Es ist nämlich

10 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

auch möglich einen Script auszuführen, wenn man eine Taste


drückt (bzw. gedrückt hält) und einen anderen, wenn man
diese Taste wieder loslässt. Der Sytax sieht wie folgt aus:

bind <Taste> "+vstr variable_1 variable_2

Wenn man die Taste drückt wird Variable_1 so lange


ausgeführt, bis man die Taste loslässt. Dann wird Variable_2
ausgeführt. Ein sinnvolles Beispiel ist die One-Key-Arty. Wie
dieser script tut: Wenn man die Taste für diesen script drückt
wird mit dem Befehl +zoom in die Fernglasansicht umgeschalten.
Diese bleibt solange erhalten, bis man die taste loslässt. Dann
wird der eigentliche Script ausgeführt. Mit +attack wird die Arty
gelegt und zum Schluss wird noch die Fernglasansicht
beendet. Der fertige Script sieht dann so aus:

bind Q "+vstr arty1 arty2


set arty1 "+zoom"
set arty2 "+attack; -attack; wait 10; -zoom"

Jetzt wird der eine oder andere die frage stellen, warum nach
+attack der Befehl -attack steht. Beim Bind für die Maustaste

steht ja auch nur +attack. warum ist das so?

+attack ist ein befehl. wenn er auf eine taste gelegt wird, wird
er solange ausgeführt, bis die taste losgelassen wird. wenn
man diesen Befehl jedoch in einem Script verwenden, würde
dieser befehl endlos lange ausgeführt werden. Deshalb muss
man ihn mit -attack wieder deaktivieren. Das gleiche gilt auch
bei allen anderen Befehlen wie zb. +forward die ein + vor ihrem
Namen haben.

back to top

Erweitertes Scripting

Nun werde ich einige recht sinnvolle Scripts auflisten. Die


meisten kann man überall finden, aber der Strafe-Shot-Script
ist (anscheinend) ein Unikat!

Namen Change Script


set chooseNick "vstr chooseNick1"
set chooseNick1 "set chooseNick "vstr chooseNick2"; set setNick
"set name "^1ET^7Player""; echo "^1->^7Nick: ^1ET^7Player""
set chooseNick2 "set chooseNick "vstr chooseNick3"; set setNick
"set name "^2Fake^5Nick""; echo "^1->^7Nick: ^2Fake^5Nick""
set chooseNick3 "set chooseNick "vstr chooseNick1"; set setNick
"set name "^1NickName03""; echo "^1->^7Nick: ^1NickName03""
set setNick "echo "^1->^7Nick: ^7choose a nick first!""
bind X "vstr setNick"

bind Z "vstr chooseNick" auf einer deutschen Tastatur ist das


dann Y

Einfach sooft Y drücken, bis der gewünschte Name als mittels

11 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

echo ausgegeben wird - dann mit der Taste X den Namen


übernehmen.

Spawn Script (funktioniert nur bei etPro!)


set engi "vstr engi1"
set engi1 "vstr recycle; class e 1; set engi vstr engi2; say_team
"next spawn: ^1Engi_MP"; echo "^1Engi_MP""
set engi2 "class e 2; set engi vstr engi1; say_team "next spawn:
^1Engi_Rifle"; echo "^1Engi_Rifle""
set fieldop "vstr recycle; class f 1; say_team "next spawn:
^1FieldOp"; echo "^1FieldOp""
set soldier "vstr soldier1"
set soldier1 "vstr recycle; class s 4; set soldier vstr soldier2;
say_team "next spawn: ^1PanzerPussy"; echo "^PanzerPussy""
set soldier2 "class s 5; set soldier vstr soldier3; say_team "next
spawn: ^1Mortar"; echo "^17Mortar""
set soldier3 "class s 2; set soldier vstr soldier4; say_team "next
spawn: ^1MG42"; echo "^1MG42""
set soldier4 "class s 3; set soldier vstr soldier1; say_team "next
spawn: ^1Flamer"; echo "^1Flamer""
set medic "vstr recycle; class m 1; say_team "next spawn:
^1Medic"; echo "^1Medic""
set covop "vstr covop1"
set covop1 "vstr recycle; class c 3; set covop vstr classcovop2;
say_team "next spawn: ^1CovOp_Garand"; echo "^1CovOp_Garand>""
set covop2 "class c 2; set covop vstr covop3; say_team "next
spawn: ^1CovOp_FG42"; echo "^1CovOp_FG42""
set covop3 "class c 1; set covop vstr covop1; say_team "next
spawn: ^1CovOp_Sten"; echo "^1CovOp_Sten""
set recycle "set engi vstr engi1; set covop vstr covop1; set
soldier vstr soldier1"
bind F5 "vstr soldier"
bind F6 "vstr medic"
bind F7 "vstr engi"
bind F8 "vstr fieldop"
bind F9 "vstr covop"

Sooft die Taste für eine Klasse drücken, bis die gewünschte
Waffe im Team-Chat und mittels echo ausgegeben wird. Dann
spawnt man beim nächsten Spawn als diese Klasse mit der
gewählten Waffe.

FOV Switch

set fovswitch "vstr near"


set far "set cg_fov 110; set fovswitch vstr near; echo "^7FOV:
^1110""
set near "set cg_fov 90; set fovswitch vstr far; echo "^7FOV:
^290""
bind X "vstr fovswitch"

Dehr praktisch, da man mit 110 in der Nähe und mit 90 in der
Entfernung besser sehen kann.

12 of 19 Strafe-Shot 23.03.2009 07:19


stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

bind E "+vstr strafeshotright0 strafeshotright1"


set strafeshotright0 "+attack; +moveright; +sprint"
set strafeshotright1 "-attack; -moveright; -sprint"
bind Q "+vstr strafeshotleft0 strafeshotleft1"
set strafeshotleft0 "+attack; +moveleft; +sprint"
set strafeshotleft1 "-attack; -moveleft; -sprint"

Dieser Script ist =Sony= zu verdanken. Er hat mich in einer


Email um einen Script gebeten, bei dem man mit einem
Tastendruck in eine Richtung strafet, gleichzeitig sprintet und
schießt. Daraus ist dann dieser Script entstanden und ich
muss sagen, er ist wirklich praktisch!

Weather Toggle

set atmosphere "vstr atmosphere0"


set atmosphere0 "set cg_atmosphericeffects 0; set atmosphere vstr
atmosphere1; echo "^7cg_atmosphericeffects ^10""
set atmosphere1 "set cg_atmosphericeffects 1; set atmosphere vstr
atmosphere0; echo "^7cg_atmosphericeffects ^21""
bind X "vstr atmosphere"

Mit diesem Scipt kann man Regen und Schnee ein- oder
ausschalten. Ich würde aber schon aus Performancegründen
den Wettereffekt dauerhaft deaktivieren.

Wolfparticles Toggle
set nebular "vstr nebular0" set nebular0 "set cg_wolfparticles 0;
set nebular vstr nebular1; echo "^7cg_wolfparticles ^10"" set
nebular1 "set cg_wolfparticles 1; set nebular vstr nebular0; echo
"^7cg_wolfparticles ^21""
bind X "vstr nebular"

Dieser Script schaltet die Wolfparticles ein oder aus. Das sind
Effekte wie Explosionen, Rauch bei beschädigten Fahrzeugen,
etc., nicht jedoch der Rauch der Rauchgranate des Covert
Ops. Die Wolfparticles sollte man nicht ständig ausschalten, da
man sonst ahnungslos in Arties oder Airstrikes läuft. Ich
schalte diesen Wert per Taste nur auf 0, wenn ich durch den
schwarzen Rauch des Panzers sehen will. Erwähnenswert ist
auch, dass man von manchen Servern bei der Einstellung 0
vom PunkBuster gekickt wird.

One Key Arty


set arty1 "+zoom"
set arty2 "+attack; -attack; wait 10; -zoom"
bind x "+vstr arty1 afty2"

Diesen Script habe ich bereits im Kapitel Scripts mit vstr genau
erklärt. Wenn man Field-Ops ist, kann man, während man eine

13 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

x-beliebige Waffe hält, mit diesem Script sofort eine Arty


setzen. Natürlich sollte man schon vorher auf die richtige
Stelle zielen. Optional kann man die Taste auch gedrückt
halten. Dann sieht man alles mit der Fernglasansicht. Wenn
man die Taste loslässt, wird die Arty gelegt.

180° Turn
bind X "set com_maxfps 40; set cl_yawspeed 13900; +left; wait 2;
-left; set cl_yawspeed 140; com_maxfps 76;"

Auch ein netter Script. Auf Tastendruck dreht man sich (auch
während man sich bewegt) um 180°.

back to top

Meine Config

Das ist meine aktuellste Config. Sie ist sehr aufwendig und
umfangreich. Da ich gerne alles beisammen habe, ist alles in
einer einzigen Datei.

autoexec.cfg downloaden

Achtung! Falls jemand die Config verwenden will, müssen auch


hier Rechnerspezifische Einstellungen nachbearbeitet und
angepasst werden (Auflösung und Speicherzuteilung)!

back to top

Color Codes

Wenn man irgendeine Programmausgabe (name, echo, im


chat: say, say_team) in einer bestimmte Farbe haben will,
benötigt man die Color Codes. Diese beginnen grundsätzlich
mit ^. Danach kommt eine Ziffer oder ein Buchstabe. hier eine
liste aller vorhandenen Color Codes:

code....output

^1 ---> rot
^2 ---> grün
^3 ---> gelb
^4 ---> blau
^5 ---> türkis
^6 ---> pink
^7 ---> weiss
^8 ---> orange
^9 ---> grau
^a ---> orange
^b ---> blau-grün
^c ---> violet
^d ---> hell-blau
^e ---> lavendel

14 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

^f ---> hell-blau
^g ---> hell-grün
^h ---> dunkel-grün
^i ---> rot
^j ---> dunkel-rot
^k ---> braun
^l ---> beige
^m ---> dunkel-gelb
^n ---> creme
^o ---> hell-gelb
^p ---> schwarz
^q ---> rot
^r ---> grün
^s ---> gelb
^t ---> blau
^u ---> türkis
^v ---> pink
^w ---> weiss
^x ---> orange
^y ---> grau
^z ---> hell-grau

ACHTUNG: Wenn man im Spiel selbst einen Color Code


benutzen will und auf ^ drückt, dann öffnet sich die Konsole.
Wenn man diese mit ^ wieder schließt, nicht vergessen auf die
Rücktaste zu drücken!

back to top

vSay List

Manchmal ist es praktisch, sich einige wichtige Einträge aus


dem Quick-Chat-Menü auf einige Tasten zu legen. Alle diese
Chat-Codes funktionieren mit den Befehlen vsay (für alle
hörbar) und vsay_team (nur für das eigene Team hörbar).
Außerdem sind einige Quick-Chat-Voices nicht im Voice-Menü
enthalten. Deshalb gibts hier eine komplette Liste:

Code........................Ausgabe

PathCleared --------------> "Path cleared."


EnemyWeak ----------------> "The enemy is weakened."
AllClear -----------------> "All clear."
Incoming -----------------> "Incoming!"
FireInTheHole ------------> "Fire in the hole!"
OnDefense ----------------> "I'm on defense."
OnOffense ----------------> "I'm attacking."
TakingFire ---------------> "Taking fire!"
MinesCleared -------------> "Mines cleared."
NeedBackup ---------------> "I need backup!"
CoverMe ------------------> "Cover me!"
NeedEngineer -------------> "We need an engineer!"
NeedOps ------------------> "We need Covert Ops!"
Medic --------------------> "Medic!"

15 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

NeedAmmo -----------------> "I need ammo!"


WhereTo ------------------> "Where to?"
FollowMe -----------------> "Follow me!"
LetsGo -------------------> "Let's go!"
Move ---------------------> "Move!"
ClearPath ----------------> "Clear the path!"
HoldFire -----------------> "Hold fire!"
DefendObjective ----------> "Defend our objective!"
DisarmDynamite -----------> "Disarm the dynamite!"
ClearMines ---------------> "Clear the mines!"
ReinforceDefense ---------> "Reinforce the defense!"
ReinforceOffense ---------> "Reinforce the offense!"
DestroyPrimary -----------> "Destroy the primary objective!"
DestroySecondary ---------> "Destroy the secondary objective!"
DestroyConstruction ------> "Destroy the construction!"
ObjectiveDestroyed -------> "Objective destroyed!"
RepairVehicle ------------> "Repair the vehicle!"
DestroyVehicle -----------> "Destroy the vehicle!"
EscortVehicle ------------> "Escort the vehicle!"
FireOnTarget -------------> "Fire on my target!"
CommandAcknowledged ------> "Command acknowledged!"
CommandDeclined ----------> "Command declined!"
CommandCompleted ---------> "Command completed!"
ConstructionCommencing ---> "Construction underway!"
ConstructionCompleted ----> "Construction completed!"
ConstructionDestroyed ----> "Construction destroyed!"
Affirmative --------------> "Yes!"
Negative -----------------> "No!"
Thanks -------------------> "Thanks a lot!"
Welcome ------------------> "You're welcome."
Oops ---------------------> "Oops!"
Sorry --------------------> "Sorry!"
Hi -----------------------> "Hi!"
Bye ----------------------> "Bye."
Cheer --------------------> "Yeah!"
GreatShot ----------------> "Great shot!"
GoodGame -----------------> "Good game!"
IamSoldier ---------------> "I'm a soldier."
IamMedic -----------------> "I'm a medic."
IamEngineer --------------> "I'm an engineer."
IamFieldOps --------------> "I'm a field ops."
IamCovertOps -------------> "I'm a covert ops."

FTAttack -----------------> "Attack!"


FTFallBack ---------------> "Fall back!"
FTCoverMe ----------------> "Cover me!"
FTCoveringFire -----------> "Covering fire!"
FTMortar -----------------> "Deploy mortar!"
FTHealSquad --------------> "Heal the squad!"
FTHealMe -----------------> "Heal me!"
FTReviveTeamMate ---------> "Revive team mate!"
FTReviveMe ---------------> "Revive me!"
FTDestroyObjective -------> "Destroy objective!"
FTRepairObjective --------> "Repair objective!"

16 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

FTConstructObjective -----> "Construct the objective!"


FTDisarmDynamite ---------> "Disarm the dynamite!"
FTDeployLandmines --------> "Deploy landmines!"
FTDisarmLandmines --------> "Disarm landmines!"
FTCallAirStrike ----------> "Call airstrike!"
FTCallArtillery ----------> "Call artillery!"
FTMortarBarrage ----------> "Call mortar barrage!"
FTResupplySquad ----------> "Resupply squad!"
FTResupplyMe -------------> "Resupply me!"
FTExploreArea ------------> "Explore area!"
FTExploreAtCoordinates ---> "Explore at co-ordinates!"
FTSatchelObjective -------> "Destroy satchel objective!"
FTInfiltrate -------------> "Infiltrate!"
FTGoUndercover -----------> "Go undercover!"
FTProvideSniperCover -----> "Provide sniper cover!"

back to top

Key List

Hier ist eine Liste mit allen Tasten und deren Code:

Taste.................Code

A ------------------> A
B ------------------> B
C ------------------> C
D ------------------> D
E ------------------> E
F ------------------> F
G ------------------> G
H ------------------> H
I ------------------> I
J ------------------> J
K ------------------> K
L ------------------> L
M ------------------> M
N ------------------> N
O ------------------> O
P ------------------> P
Q ------------------> Q
R ------------------> R
S ------------------> S
T ------------------> T
U ------------------> U
V ------------------> V
W ------------------> W
X ------------------> X
Y ------------------> Z
Z ------------------> Y

0 ------------------> 0
1 ------------------> 1
2 ------------------> 2
3 ------------------> 3

17 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

4 ------------------> 4
5 ------------------> 5
6 ------------------> 6
7 ------------------> 7
8 ------------------> 8
9 ------------------> 9

F1 -----------------> F1
F2 -----------------> F2
F3 -----------------> F3
F4 -----------------> F4
F5 -----------------> F5
F6 -----------------> F6
F7 -----------------> F7
F8 -----------------> F8
F9 -----------------> F9
F10 ----------------> F10
F11 ----------------> F11
F12 ----------------> F12

Pfeil rauf ---------> UPARROW


Pfeil runter -------> DOWNARROW
Pfeil links --------> LEFTARROW
Pfeil rechts -------> RIGHTARROW

linke Maustaste ----> MOUSE1


rechte Maustaste ---> MOUSE2
mittlere Maustaste -> MOUSE3
weitere Maustasten -> MOUSE4/MOUSE5
Mausrad rauf -------> MWHEELUP
Mausrad runter -----> MWHEELDOWN

Ä ------------------> '
Ö ------------------> ;
Ü ------------------> [
^ ------------------> ~
, ------------------> ,
. ------------------> .
- ------------------> /
# ------------------> \
+ ------------------> ]
ß ------------------> -
´ ------------------> =

Escape -------------> ESC


Tabulator ----------> TAB
Caps-Lock ----------> CAPSLOCK
Shift --------------> SHIFT
Strg ---------------> CTRL
Alt ----------------> ALT
Leer ---------------> SPACE
Enter --------------> ENTER
Rücktaste ----------> BACKSPACE
Pause --------------> PAUSE

Insert -------------> INS


Home ---------------> HOME

18 of 19 23.03.2009 07:19
stonefred.at - [scripting] http://stonefred.at/scripting_et.php?section=scripting&subsection=et

Page Up ------------> PGUP


Page Down ----------> PGDN
Delete -------------> DEL
End ----------------> END

Keypad 1 -----------> KP_END


Keypad 2 -----------> KP_DOWNARROW
Keypad 3 -----------> KP_PGDN
Keypad 4 -----------> KP_LEFTARROW
Keypad 5 -----------> KP_5
Keypad 6 -----------> KP_RIGHTARROW
Keypad 7 -----------> KP_HOME
Keypad 8 -----------> KP_UPARROW
Keypad 9 -----------> KP_PGUP
Keypad 0 -----------> KP_INS
Keypad , -----------> KP_DEL
Keypad / -----------> KP_SLASH
Keypad * -----------> *
Keypad - -----------> KP_MINUS
Keypad + -----------> KP_PLUS
Keypad enter -------> KP_ENTER

back to top

So, das war das ganze Tutorial zum Scripten in Enemy


Territory. Viel Spaß mit eurer oder meiner Config und good luck
& have fun!

Wer Fragen zu diesem Thema hat: einfach eine Email


schreiben. Ich helfe gerne.

© Stonefred (Wolfgang Magerl) 2005-2009 - last update: 2009-03-13, 00:43 xhtml css

19 of 19 23.03.2009 07:19