CNDG
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.


Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  SuchenSuchen  Neueste BilderNeueste Bilder  AnmeldenAnmelden  LoginLogin  

 

 ChangeDef()

Nach unten 
3 verfasser
AutorNachricht
Extremclonk
Staatsrat
Staatsrat
Extremclonk


Männlich Ort : Am Anti-Spam-Limes
Anmeldedatum : 19.01.09

ChangeDef() Empty
BeitragThema: ChangeDef()   ChangeDef() EmptyMo Apr 12, 2010 11:57 pm

Hallo Leute,
wie ihr dem Titel ja schon entnehmen konntet geht es in diesem Tutorial um den Befehl ChangeDef().


Vorkenntnisse: Grundkenntnisse in Clonk-Script
Schwierigkeit *****


Was macht ChangeDef() überhaupt?

ChangeDef() weißt einem Objekt eine neue Definition zu, sprich ändert die ID eines Objektes. Man darf sich jetzt aber nicht vorstellen man hat auf einmal einen Stein mit der ID "CLNK", wenn man ChangeDef(CLNK) auf einen Stein anwendet, sondern einen Clonk. Heißt das Objekt hat jetzt DefCore, ActMap, Grafik, Beschreibung und Script eines Clonks. An dieser Stelle könnte man Fragen: Warum nicht gleich ein neues Objekt platzieren und das alte löschen? Die Antwort: ChangeDef erhält nämlich auch Teile des ursprünglichen Objekts. Ich will hier nicht auf alles eingehen aber mal die wichtigsten Dinge aufzählen:
-Den Besitzer,
-Die Crewzugehörigkeit (Bei Objekten die CrewMember=1 in der DefCore stehen haben)
-Die .c4i Datei (= Die Datei in der der Clonk gespeichert ist)
-Die Rotation
-Der Construction-Wert (= Wie weit das Gebäude aufgebaut ist)
-Ob eine Flagge aufgesteckt ist
-Den Inhalt
-Lokale Variablen
-Effekte


Wie sieht der Befehl denn aus?

Code:

ChangeDef(ID, Obj);
ID = Die neue ID des Objekts.
Obj = Das Objekt selber. Bei lokalen Aufrufen Null.


Was kann man damit z.B. anstellen?

Ein Beispiel wäre ein Objekt das einen Stein in einen Goldklumpen verwandelt.

Code:

func Activate()
{
 var pObj = FindObject2(Find_Distance(100), Find_ID(ROCK));
  if(pObj) pObj -> ChangeDef(GOLD);
}

Der Script sucht im Umkreis von 100 Pixeln nach einem Stein und verwandelt ihn in einen Goldklumpen.


Man kann auch Clonks verwandeln. Hier ein Beispiel:
Code:

public func Activate()
{
  if(GetID(Contained()) == HZCK) { Contained()->ChangeDef(CLNK);
  Contained()->Initialize(); return 1; }
  if(GetID(Contained()) == CLNK) { Contained()->ChangeDef(HZCK);
  Contained()->Initialize(); return 1; }
}

Dieses Objekt verwandelt Hazardclonks in Clonks und Clonks in Hazardclonks. Das nach der Definitionsänderung noch Initialize im Clonk aufgerufen wird ist unbedingt notwendig da sich dieser sonst nicht bewegen lässt.


Ich denke das Prinzip ist verstanden worden, je nach Scripttechnischem Können könnt ihr damit natürlich noch viel mehr anstellen, z.B. die .c4i eines Clonks für einen Magus benutzen, Gebäude aufrüsten, Verwandlungszauber etc. aber ich will hier nicht zu sehr ins Detail gehen, sonst wird das Tut nur zu überladen.


Worauf muss ich noch achten?

-Bedenke immer, das das Script nach ChangeDef() ein völlig anderes ist, verwandelt das Objekt sich selbst in eine andere Definition, so muss das Script der neuen Definition für potentielle Rückverwandlungen herhalten, der Script der ursprünglichen Definition existiert ja nicht mehr. Hierfür kann man auch einen Effekt verwenden, die ja auch erhalten bleiben.
-Es ist bei fast allen Objekten notwendig Initialize() nach ChangeDef() aufzurufen, abgesehen von einigen wenigen die seine solche Funktion nicht haben.
-Das Clonk-Entwicklerteam rät davon auf eine lokale Variable die aus der ursprünglichen Definition stammt zuzugreifen, selbst wenn sie erhalten wird.


Ich hoffe das ist soweit verständlich.
Gruß, Extremclonk.
Nach oben Nach unten
Stephan Borgs
Kadett
Kadett
Stephan Borgs


Männlich Alter : 29
Ort : Duisburg Meiderich
Anmeldedatum : 09.03.10

ChangeDef() Empty
BeitragThema: Re: ChangeDef()   ChangeDef() EmptyDi Apr 13, 2010 12:16 am

Hast du das Tut für mich gemacht?
Wegen der RdW-Sache.
Nach oben Nach unten
Gamer
Staatsrat
Staatsrat
Gamer


Männlich Alter : 28
Ort : In einem kleinen Dorf in Unterfranken (Bayern)
Anmeldedatum : 10.02.09

ChangeDef() Empty
BeitragThema: Re: ChangeDef()   ChangeDef() EmptyDi Apr 13, 2010 6:30 pm

Das war jetzt eine unpassende Frage^^.
Aber B2T. Ich finde das Tutorial SEHR gut. Es ist schön und Übersichtlich aufgebaut, mit logischen Beispielen geschmückt. Die Überschriften und der Script sind auch schön. Funktionen und Befehle erklärst so das auch ein Neuling es verstehen würde -> sehr gut.
Ich find alles Toll Smile
Nach oben Nach unten
http://www.gamer95.npage.de/
Stephan Borgs
Kadett
Kadett
Stephan Borgs


Männlich Alter : 29
Ort : Duisburg Meiderich
Anmeldedatum : 09.03.10

ChangeDef() Empty
BeitragThema: Re: ChangeDef()   ChangeDef() EmptyDi Apr 13, 2010 7:04 pm

Gut, dann mal konstruktive Kritik:
Also, ich finde es wirklich sehr übersichtlich.
Es gibt Tutorials, die sind Meter lang und man hat den Inhalt immer noch nicht verstanden, aber bei deinem Tut ist das nicht der Fall.
Du hasts prima erklärt und es ist trotzdem nicht zu lang.
Echt klasse.
Nach oben Nach unten
Extremclonk
Staatsrat
Staatsrat
Extremclonk


Männlich Ort : Am Anti-Spam-Limes
Anmeldedatum : 19.01.09

ChangeDef() Empty
BeitragThema: Re: ChangeDef()   ChangeDef() EmptyDi Apr 13, 2010 7:31 pm

Freut mich das das Tutorial verständlich rübergekommen ist, ich bin durch deine RdW-Frage darauf gekommen das ein solches Tut noch fehlt und daher hab ich beschlossen es zu schreiben.
Nach oben Nach unten
Gesponserte Inhalte





ChangeDef() Empty
BeitragThema: Re: ChangeDef()   ChangeDef() Empty

Nach oben Nach unten
 
ChangeDef()
Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» ChangeDef Funktioniert nicht
» Clonk nach ChangeDef nicht steuerbar

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Anfänger :: Tutorials-
Gehe zu: