Scripte:Find OnLine
Aus Clonk Wiki
Inhaltsverzeichnis |
Allgemein
Eine kleine Einführung die Fortgeschrittenen zeigt wie man sich selbst dynamische Find_ funktionen bauen kann.
| Find_ | |
|---|---|
| Kategorie: | Scriptintern |
| Autor: | Liech |
| Behandelt: | {{{Behandelt}}} |
| Empfohlenes Vorwissen: | {{{Vorwissen}}} |
| Benötigt Objektpacks: | {{{Packs}}} |
| Stufe: | |
Script
/* Find_ Funktionen*/
#strict 2
global
func
Find_OnLine(int
x1,int
y1,
int
x2,
int
y2,int
prec)
{
//Die Such genauigkeit.
if
(!prec)
prec
=
5;
//die Find_ variable mit irgendetwas sinnvollem füllen, sonst kommen unerwünschte meldungen:
var
Gefunden
=
Find_AtPoint(x1,y1);
//jetzt können wir dinge mit Find_And()/Find_Or()/... ein und ausgrenzen.
//Für Komplexe dinge eignet sich oft Find_Eval(), das brauchen wir hier aber nicht
var
dis
=
Distance(x1,y1,GetX()+x2,GetY()+y1);
var
angle
=
Angle(x1,y1,GetX()+x2,GetY()+y1);
//der erste schritt ist bereits getan, deswegen überspringen wir ihn hier (wir fangen bei prec und nicht bei 0 an!):
for(var
i
=
prec;i<dis;i+=prec)
Gefunden
=
Find_Or(Gefunden,Find_AtPoint(x1+Sin(angle,i),y1+Cos(angle,-i)));
//Wie das mit Sin/Cos geht liest du am besten beim Script "Partikelkreis"
//Das Array ist jetzt mit jede menge Suchkriterien gefüllt, welche man sich so inetwa vorstellen kann:
//Find_AtPoint(1,1),Find_AtPoint(2,2),Find_AtPoint(3,3)...
return
Gefunden;
}
//Um etwas zu verkürzen klappt das natürlich auch wunderbar:
global
func
Find_Brennholz(int
Plr)
{
return
Find_And(Find_OCF(OCF_Inflammable()),Find_Not(Find_Eval("GBackLiquid()")),Find_Not(Find_Allied(GetOwner(Plr))));
}
Das Script kann beispielsweise in einer Datei in der System.c4g des Szenarios abgelegt werden. Danach lässt sich das jeweilige Such Kriterium wie im Beispiel verwenden.
Beispiel
var
Material
=
Find_Objects(Find_Brennholz(),Find_OnLine(0,0,0,400));
for(var
e
in
Material)
e->Incinerate();
Dieses Script findet sämtliches als Brennholz geeignetes Material Exakt unter dem Clonk.
Hinweise
Die Find_ funktionen werden in Arrays übersetzt, welche inetwa so aussehen:
[SuchKonstante,Bedingungen,...]
In System.c4g/FindObject.c sind dafür viele beispiele vorhanden. Die meisten Konstanten erklären sich dort von selbst.
Die Funktion Find_OnLine() ist bereits (undokumentiert) in FindObjects.c implementiert:
Find_OnLine(int
x,
int
y,
int
x2,
int
y2)| Scripte des Scripte-Projekts | |
| Bonbon · Context-Eintrag · EliminateTeam · Flint:Partikelschleuder · Hüpfbonbon · TeamMessage | |
| Flint:HitCounter · Flint:Partikelkreis · Flint:Partikelschleuder2 · Is-Funktionen · Menü:Beim Start der Runde · Normaler Flint · Partikel-Linie in den Himmel · Rakete · Random · Relaunch · Return · Sichtweite · Spawn · Startposition | |
| Clantag · Gift-Effekt · Unverwundbarkeit · Scoreboard · Zufallsgespräch | |
| Lebensbalken · Nachrichten bei Sichtkontakt · Object2Overlay · SHA1 | |
| Dieser Artikel wurde gemäß der Scriptrichtlinien veröffentlicht. |
