Scripte:Nachrichten bei Sichtkontakt
Aus Clonk Wiki
Allgemein
Dieses Script ist dazu gedacht fremde Clonks etwas sagen zu lassen, wenn man mit dem eigenen Clonk in ihre Nähe kommt. Es ist in dem Szenarioscript zu platzieren und eignet sich besonders gut für Adventures. Allerdings darf der eigene Clonk-Typ nur einmal im Szenario vorkommen.
| Nachrichten bei Sichtkontakt | |
|---|---|
| Kategorie: | Adventure |
| Autor: | Biber |
| Behandelt: | {{{Behandelt}}} |
| Empfohlenes Vorwissen: | Arrays (siehe Arrays oder Zufallsgespräch) |
| Benötigt Objektpacks: | Ritter |
| Stufe: | |
Script
#strict 2
// Der Scripttimer muss im Szenario erst gestartet werden. Am besten gleich beim Szenarienstart; daher in Initialize.
protected
func
Initialize()
{
ScriptGo(true);
}
// Dieses Script wird durch den Scripttimer ausgelöst und alle 3 Ticks (30 Frames) wiederholt.
protected
func
Script7()
{
var
Nachrichten
=
["Hallo",
"Hi",
"Da bist du ja!"];
for(var
pClonks
in
FindObjects(
Find_ID(CLNK),
Find_InRect(180,
600,
500,
190)
)
{
if(FindObject2(
Find_ID(KNIG),
Find_Distance(190,GetX(pClonks),GetY(pClonks))
)
&&
GetAlive(pClonks)
&&
!GetEffect("Silent",
pClonks)
&&
PathFree(
GetX(pClonks),
GetY(pClonks),
GetX(FindObject(KNIG)),
GetY(FindObject(KNIG))
)
)
{
Message(Nachrichten[Random(GetLength(Nachrichten))],
pCLonks);
AddEffect("Silent",
pClonks,5,0);
}
}
goto(4);
return
1;
}
Erklärung
Zuerst legen wir fest, was für Sprüche die Clonks sagen sollen, wenn man in ihre Nähe kommt. Dazu wird ein Array erschaffen, in dem die Nachrichten gespeichert werden. Wie Arrays funktionieren, wird bei CNDG sehr schön beschrieben.
var
Nachrichten
=
["Hallo",
"Hi",
"Da bist du ja!"];
Nun wird eine for-Schleife gemacht, die alle zu den Suchkriterien passenden Clonks findet und sie die folgende Anweisung ausführen lässt.
-1. Suchkriterium: Find_ID, hier kommt die ID der Clonks hin, die etwas sagen sollen. In unterem Fall handelt es sich um normale Clonks.
-2. Suchkriterium: Find_InRect(), hier wird der Bereich festgelegt, in dem die Clonks sein sollen, wenn sie etwas sagen sollen. Wenn der Bereich egal ist, kann man diese Bedingung auch einfach weglassen. In unterem Fall werden alle CLNKs gesucht, die in einem Kasten mit den Maßen 50*50 sind, wobei die linke, obere Ecke bei (100,200) liegt.
for(var
pClonks
in
FindObjects(
Find_ID(CLNK),
Find_InRect(100,
200,
50,
50)
)
Da die Engine jetzt alle Clonks kennt, die etwas sagen sollen, wird nun durch ein if überprüft, ob das Sagen eines Spruches überhaupt sinnvoll ist. Ohne diese Bedingungen würden die Clonks alle 30 Frames etwas sagen.
-1.Bedingung: Hier wird geschaut, ob es einen Clonk mit der ID "KNIG" gibt, der 180 Pixel von den Sprüche-Clonks entfernt ist. (Dieser Clonk ist dann der Clonk des Spielers)
-2.Bedingung: Die Clonks müssen leben, denn es sieht ja komisch aus, wenn tote Leute mit einem sprechen wollen..
-3.Bedingung: Er darf nicht den Effekt "Silent" auf sich haben. Dieser Effekt wird später auf die Clonks verteilt, damit sie ihren Spruch nur einmal sagen.
-4.Bedingung: Die Sicht auf den Clonk muss frei sein, denn man spricht ja nicht durch Mauern hindurch :o
if(FindObject2(
Find_ID(KNIG),
Find_Distance(190,GetX(pClonks),GetY(pClonks))
)
&&
GetAlive(pClonks)
&&
!GetEffect("Silent",
pClonks)
&&
PathFree(
GetX(pClonks),
GetY(pClonks),
GetX(FindObject(KNIG)),
GetY(FindObject(KNIG))
)
)
Da nun alle Bedingungen erfüllt sind, kann der Clonk endlich seinen Satz sagen. Mit Random() wird eine zufällige Nachricht ausgewählt. Außerdem wird ein Effekt auf den Clonk getan, damit die Nachricht nur einmal erscheint. Kommt man in einem Ritteradventure zB in ein Dorf, so wäre es komisch, wenn einen die Leute ohne Pause Begrüßungen an den Kopf werfen. Wie Effekte genaue funktionieren lässt sich in der Doku nachlesen.
Am Schluss wird der Scriptzähler wider auf 4 gesetzt, um das Ganze zu wiederholen.
goto(4);
Beispiel:
Ein Kanderianer schreit laut auf, weil ein Assasin in seine Burg gelangt ist.
| 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. |

