Aufgrund einer akuten Spamwelle ist das Editieren für nicht angemeldete Benutzer zur Zeit deaktiviert. Wir bitten um Verständnis.

Scripte:Nachrichten bei Sichtkontakt

Aus Clonk Wiki

Wechseln zu: Navigation, Suche

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: Experte Experte Experte Experte










Script

C4Script
#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.

C4Script
 
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.

C4Script
  
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


C4Script
    
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.

C4Script
 
goto(4);


Beispiel: Ein Kanderianer schreit laut auf, weil ein Assasin in seine Burg gelangt ist.

Spruch.jpg


Scripte des Scripte-Projekts
AnfängerBonbon · Context-Eintrag · EliminateTeam · Flint:Partikelschleuder · Hüpfbonbon · TeamMessage
Fortgeschrittene FortgeschritteneFlint: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
Profi Profi ProfiClantag · Gift-Effekt · Unverwundbarkeit · Scoreboard · Zufallsgespräch
Experte Experte Experte ExperteLebensbalken · Nachrichten bei Sichtkontakt · Object2Overlay · SHA1


Wipfhunt.png Dieser Artikel wurde gemäß der Scriptrichtlinien veröffentlicht.
extern