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

Austausch | 
 

 ChangeDef()

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
Extremclonk
Staatsrat
Staatsrat
avatar

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

BeitragThema: ChangeDef()   Mo 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
Benutzerprofil anzeigen
Stephan Borgs
Kadett
Kadett
avatar

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

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

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

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

BeitragThema: Re: ChangeDef()   Di 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

_________________
Star Wars Projekt Homepage: http://sites.google.com/site/clonkprojekte/star-wars

Das Burg Projekt.................................................................... Schaut doch mal im Super-Mario Clonk Editon Forum vorbei!
Nach oben Nach unten
Benutzerprofil anzeigen http://www.gamer95.npage.de/
Stephan Borgs
Kadett
Kadett
avatar

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

BeitragThema: Re: ChangeDef()   Di 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
Benutzerprofil anzeigen
Extremclonk
Staatsrat
Staatsrat
avatar

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

BeitragThema: Re: ChangeDef()   Di 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
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: ChangeDef()   

Nach oben Nach unten
 
ChangeDef()
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1

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