Clarity
29.12.2009, 15:28
Hallo liebe Expression Fans!
ich bin selbst noch anfänger auf dem Gebiet. Habe lediglich Java und
ein wenig C/C++ Kentnisse und versuche mich nun in E2 einzuarbeiten.
Für alle interessierten, werde ich meine gut dokumentierten E2s hier rein stellen,
Fragen und Verbesserungsvorschläge sind immer willkommen. Ich hoffe ich bleibe ein
wenig dabei und das hier ist nicht meine letzte E2 die ich hier veröffentliche.
Leider gibt es hier im Forum (noch) kein E2 Syntax Highlighting,
daher ist der Text am einfachsten zu lesen, wenn ihr ihn euch in gmod kopiert.
Mein erstes E2, das ich hier veröffentliche gibt den Namen des dem E2 am nächsten
stehenden Spielers und seinen Ping aus. Also alles noch sehr einfach.
http://666kb.com/i/bfdfp6u7kio30cg48.jpg
@name NearestPlayerPing
# Einfach nur der Name des Entitys, ist beliebig
@inputs
# Wir haben keine Wire Eingaben
@outputs Text:string
# Unser Ausgabewert Text vom Datentyp String
@persist Player:entity Ping Name:string
# Sonstige Variablen, die wir zwar verwenden, aber weder ein noch
# ausgegeben werden. Player ist hier vom Datentyp Entity und
# Ping ist eine normale Zahl (Number). Dieser Datentyp muss in der
# deklaration als Einziger nicht Explizit angegeben werden
@trigger
runOnTick(1)
findByClass("player")
# sorgt dafuer, dass nur nach Spielern gesucht wird
Player = findClosest(entity():pos())
# entity():pos() ist ein Vektor mit den Koordinaten des E2
# findClostest() sucht nun nach dem, dem E2 am naechsten, Entity
# das zustzlich, wie vorhin definiert ein player sein muss
Name = Player:name()
# Gibt einfach den namen als String zurueck
Ping = Player:ping()
# gibt den Ping als normale Zahl zurueck
Text = "Name:\n" + Name + "\nPing:\n" + Ping
# Bei einer String Zuweisung koennen diese wie in Java einfach mit
# einem + aneinander geaengt werden. Aus Zahlen (hier zB Ping)
# wird dabei automatisch ein String generiert
# \n steht fuer einen zeilenumbruch
# by Clarity
Dieses E2 färbt alle Entities im Umkreis von 10m ein. Die Farbe wechselt dabei stetig.
http://666kb.com/i/bfdh7he5uc1a1q8wo.jpg
@name RainbowEntities
# Einfach nur der Name des Entitys, ist beliebig
@inputs
@outputs Anzahl
# Die Anzahl der Entities die sich aktuell im Radius befinden
@persist I X Y Z Color:vector Player:entity
@trigger
runOnTick(1)
if (X < 255) {
X++
}
elseif (Y < 255) {
Y++
}
elseif (Z < 255) {
Z++
}
else {
X = Y = Z = 0
}
# Die Verzweigungen hier bewirken den langsamen Farbwechsel der Entities
# Zuerst wird Rot, dann Gruen, dann Blau langsam erhoeht
# Sind alle Werte bei 255, werden alle wieder auf 0 zurueckgesetzt
Color = vec(X,Y,Z)
# Dieser Vektor ist die aktuelle Farbe
Anzahl = findInSphere(entity():pos(),400)
# Die Anzahl der Entities, die sich in der Sphere (400Inch = 10m)
# um das E2 herum befinden
for (I = 0, Anzahl) {
# Eine einfache for-Schleife von 0 bis zu der Anzahl der Entities
Player = findResult(I)
# Hier wird Player immer das I-te Entity zugewiesen
# Auf diese Weise wird jedes Entity in der Sphere einmal angesprochen
Player:setColor(Color)
# Setzt die Farbe des Entities auf den Aktuellen Farbwert
# Alternativ wre auch Player:setColor(X,Y,Z) moeglich
}
# by Clarity
Dieses E2 wird durch den Besitzer per Chat gesteuert. Bei force zieht das E2 alle Entitys (außer Player und NPCs) im Umkreis von 20m an. Bei explode wird der Ausgang Fire dann auf 1 gesetzt. Verbindet man damit ein Explosive wie ich in meinem Beispiel, dann werden die angezogenen Objekte zerstört.
Ein relativ unspektakuläres Bild:
http://666kb.com/i/bfdtlbhha4txu9sb5.jpg
http://www.wegame.com/watch/forceexplode/
@name ForceExplode
# Einfach nur der Name des Entitys, ist beliebig
@inputs
@outputs Fire
# Muss mit dem Explosive verknpft werden
@persist Anzahl Entity:entity Exploded
@trigger
runOnTick(1)
if (owner():lastSaid() == "force") {
Anzahl = findInSphere(entity():pos(),800)
# Die Anzahl der Entities, die sich in der Sphere (800Inch = 20m)
# um das E2 herum befinden
for (I = 0, Anzahl) {
# Eine einfache for-Schleife von 0 bis zu der Anzahl der Entities
Entity = findResult(I)
Entity:applyForce((entity():pos() - Entity:pos())*Entity:mass())
}
Fire = Exploded = 0
}
elseif (owner():lastSaid() == "explode" & Exploded == 0) {
Fire = Exploded = 1
# Exploded wird auf 1 gesetzt, dass Fire nur einmalig auf 1
# ist und nicht andauernd
}
# by Clarity
Bitte verzeiht mir, falls mal ein Umlaut fehlt, da man in E2 einfach kein ä, ö und ü schreiben kann
muss ich immer ae, oe oder ue schreiben, manchmal vergess ich das.
ich bin selbst noch anfänger auf dem Gebiet. Habe lediglich Java und
ein wenig C/C++ Kentnisse und versuche mich nun in E2 einzuarbeiten.
Für alle interessierten, werde ich meine gut dokumentierten E2s hier rein stellen,
Fragen und Verbesserungsvorschläge sind immer willkommen. Ich hoffe ich bleibe ein
wenig dabei und das hier ist nicht meine letzte E2 die ich hier veröffentliche.
Leider gibt es hier im Forum (noch) kein E2 Syntax Highlighting,
daher ist der Text am einfachsten zu lesen, wenn ihr ihn euch in gmod kopiert.
Mein erstes E2, das ich hier veröffentliche gibt den Namen des dem E2 am nächsten
stehenden Spielers und seinen Ping aus. Also alles noch sehr einfach.
http://666kb.com/i/bfdfp6u7kio30cg48.jpg
@name NearestPlayerPing
# Einfach nur der Name des Entitys, ist beliebig
@inputs
# Wir haben keine Wire Eingaben
@outputs Text:string
# Unser Ausgabewert Text vom Datentyp String
@persist Player:entity Ping Name:string
# Sonstige Variablen, die wir zwar verwenden, aber weder ein noch
# ausgegeben werden. Player ist hier vom Datentyp Entity und
# Ping ist eine normale Zahl (Number). Dieser Datentyp muss in der
# deklaration als Einziger nicht Explizit angegeben werden
@trigger
runOnTick(1)
findByClass("player")
# sorgt dafuer, dass nur nach Spielern gesucht wird
Player = findClosest(entity():pos())
# entity():pos() ist ein Vektor mit den Koordinaten des E2
# findClostest() sucht nun nach dem, dem E2 am naechsten, Entity
# das zustzlich, wie vorhin definiert ein player sein muss
Name = Player:name()
# Gibt einfach den namen als String zurueck
Ping = Player:ping()
# gibt den Ping als normale Zahl zurueck
Text = "Name:\n" + Name + "\nPing:\n" + Ping
# Bei einer String Zuweisung koennen diese wie in Java einfach mit
# einem + aneinander geaengt werden. Aus Zahlen (hier zB Ping)
# wird dabei automatisch ein String generiert
# \n steht fuer einen zeilenumbruch
# by Clarity
Dieses E2 färbt alle Entities im Umkreis von 10m ein. Die Farbe wechselt dabei stetig.
http://666kb.com/i/bfdh7he5uc1a1q8wo.jpg
@name RainbowEntities
# Einfach nur der Name des Entitys, ist beliebig
@inputs
@outputs Anzahl
# Die Anzahl der Entities die sich aktuell im Radius befinden
@persist I X Y Z Color:vector Player:entity
@trigger
runOnTick(1)
if (X < 255) {
X++
}
elseif (Y < 255) {
Y++
}
elseif (Z < 255) {
Z++
}
else {
X = Y = Z = 0
}
# Die Verzweigungen hier bewirken den langsamen Farbwechsel der Entities
# Zuerst wird Rot, dann Gruen, dann Blau langsam erhoeht
# Sind alle Werte bei 255, werden alle wieder auf 0 zurueckgesetzt
Color = vec(X,Y,Z)
# Dieser Vektor ist die aktuelle Farbe
Anzahl = findInSphere(entity():pos(),400)
# Die Anzahl der Entities, die sich in der Sphere (400Inch = 10m)
# um das E2 herum befinden
for (I = 0, Anzahl) {
# Eine einfache for-Schleife von 0 bis zu der Anzahl der Entities
Player = findResult(I)
# Hier wird Player immer das I-te Entity zugewiesen
# Auf diese Weise wird jedes Entity in der Sphere einmal angesprochen
Player:setColor(Color)
# Setzt die Farbe des Entities auf den Aktuellen Farbwert
# Alternativ wre auch Player:setColor(X,Y,Z) moeglich
}
# by Clarity
Dieses E2 wird durch den Besitzer per Chat gesteuert. Bei force zieht das E2 alle Entitys (außer Player und NPCs) im Umkreis von 20m an. Bei explode wird der Ausgang Fire dann auf 1 gesetzt. Verbindet man damit ein Explosive wie ich in meinem Beispiel, dann werden die angezogenen Objekte zerstört.
Ein relativ unspektakuläres Bild:
http://666kb.com/i/bfdtlbhha4txu9sb5.jpg
http://www.wegame.com/watch/forceexplode/
@name ForceExplode
# Einfach nur der Name des Entitys, ist beliebig
@inputs
@outputs Fire
# Muss mit dem Explosive verknpft werden
@persist Anzahl Entity:entity Exploded
@trigger
runOnTick(1)
if (owner():lastSaid() == "force") {
Anzahl = findInSphere(entity():pos(),800)
# Die Anzahl der Entities, die sich in der Sphere (800Inch = 20m)
# um das E2 herum befinden
for (I = 0, Anzahl) {
# Eine einfache for-Schleife von 0 bis zu der Anzahl der Entities
Entity = findResult(I)
Entity:applyForce((entity():pos() - Entity:pos())*Entity:mass())
}
Fire = Exploded = 0
}
elseif (owner():lastSaid() == "explode" & Exploded == 0) {
Fire = Exploded = 1
# Exploded wird auf 1 gesetzt, dass Fire nur einmalig auf 1
# ist und nicht andauernd
}
# by Clarity
Bitte verzeiht mir, falls mal ein Umlaut fehlt, da man in E2 einfach kein ä, ö und ü schreiben kann
muss ich immer ae, oe oder ue schreiben, manchmal vergess ich das.