Thema: Zauber auf ein Objekt So Okt 10, 2010 8:02 pm
Hallo ich möchte gerne einen bestimmten Zauber auf ein Objekt scripten. Dieser Zauber soll dann auf einen sich nähernden Spieler ausgeführt werden. Was muss ich da in die Scriptdatei eingeben?
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt So Okt 10, 2010 8:12 pm
Ansonsten gibt es hierfür 2 möglichkeiten. 1. Die Effekte, eigentlich speziell für sowas gedacht, allerdings nicht ganz einfach. http://www.clonk.de/docs/de/sdk/script/Effects.html 2. Ein Schedule hack mithilfe von Schedule() rufst du immer wieder eine Globale funktion auf die rekursiv sich selbst mithilfe von Schedule() aufruft und nebenbei überprüft ob ein Spieler in der nähe des Objekts ist und sich da bei bedarf terminiert + den Zauber ausführt. http://www.clonk.de/docs/de/sdk/script/fn/Schedule.html
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Zauber auf ein Objekt So Okt 10, 2010 8:15 pm
Kommt immer auf den Zauber an. Generell gilt da: Zauberobjekt an der gewünschten Position erstellen und dann darin Activate(object pCaster) (normale Zauber), ActivateAngle(object pCaster, int iAngle) (Zielzauber) bzw ActivateTarget(object pCaster, object pTarget) (Zauber mit Ziel-Auswahl) aufrufen.
Du brauchst dann natürlich noch im betreffenden Objekt einen Timer. Entweder appendest du dort direkt und baust den Timer ein, oder du hängst ihm einen Timer-Effekt an. Im Timer-Aufruf checkst du dann auf sich nähernde Clonks (FindObjects(Find_Distance(...), Find_OCF(OCF_CrewMember))) und setzt dann den Zauber ein. Bei Zielzaubern musst du dann noch per Angle() den Winkel auswerten und übergeben.
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt So Okt 10, 2010 8:19 pm
Bin jedoch leider Scriptanfänger und weiß auch nicht was ich genau da in die Szenario datei schreiben soll ... =(
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt So Okt 10, 2010 11:36 pm
In den Szenario teil? Da du scheinbar nicht wirklich irgendwie irgendetwas weißt empfehle ich dir einfach mal ein beliebiges allgemeines tutorial durchzulesen, ohne wirst du diese, nicht total einfache aufgabe nur per copy/paste unserer vorschläge lösen können.
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 8:41 am
Hmm, meint ja eig Scriptdatei. Wo gibts denn ein Tutorial solcher Art hier auf CNDG?
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 1:41 pm
sind zwar schon etwas ältere, macht aber nix, fehlen halt ein paar neuerungen.
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 2:31 pm
#strict
func Initialize() {
var pClonk = FindObject2(Find_Distance(100),Find_Func("IsClonk")); CreateObject(GRSG)->ActivateAngle(GetX(pClonk),GetY(pClonk),GetX(this),GetY(this))
return(1); }
Wieso klappt das hier nicht?
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 2:42 pm
Mhm. Was genau klappt nicht? Das einzige was ich denke das es falsch ist ist, dass bei ActivateAngle() Nirgentswo ein Winkel sondern nur Koordinaten eingegeben werden. Wie äusert sich denn der Fehler? Funktioniert nichts? Vlt. noch ne Überrprüfung einbauen obs pClonk überhaupt gibt. if(pClonk) CreateObj.. Also, 1x nähere Fehlerbeschreibung bitte!
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 2:59 pm
Naja aus dem objekt soll ja der Granitschlag kommen wenn der Clonk davorsteht aber da kommt nichts.
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 3:37 pm
Ist das Fantasy pack aktiviert? Also auch in den Vorgaben drin? Du hast beim CreateObject am ende ein ; vergessen, das dürfte dir als fehlermeldung gemeldet werden. Diese Fehlermeldungen bitte immer außnahmslos mit angeben.
Der Hauptfehler liegt aber hier darin das er das gebiet zwar einmal kurz nach einem Clonk absucht, allerdings nur bei erschaffen des Objekts, du brauchst einen Timer der das Mehrmals macht. Hier mal eine reine, sehr simple Script lösung, ist sogar recht effizient. Ansonsten ist die zweite lösungsmöglichkeit das du den Clonkinternen Timer benutzt und einfach in den Defcore Timer=10 TimerCall=SSchlagCheck schreibst, wobei 10 der Frameintervall und SSchlagCheck die funktion ist die im intervall immer wieder aufgerufen wird.
global func SSchlagCheck() { var pClonk = FindObject2(Find_Distance(100),Find_Func("IsClonk")); if (pClonk) CreateObject(GRSG)->ActivateAngle(GetX(pClonk),GetY(pClonk),GetX(this),GetY(this)); //Stoppt wenn ein Clonk gefunden wurde else Schedule("GranitCheck",1,1) //Läuft weiter falls kein Clonk gefunden wird }
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 4:38 pm
klappt irgendwie immernochnicht =O also das was du mir halt geschrieben hast hab ich nun in die script datei geschrieben aber geht auch nicht.
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 6:04 pm
Zitat :
Schedule("SSchlagCheck",1,1);
Schedule führt den String per eval aus, und das erwartet ein vollständiges Statement - hier also "SSchlagCheck()", mit Klammern. Nur bei Funktionen der Call-Familie muss nur der Name angegeben werden.
Zitat :
var pClonk = FindObject2(Find_Distance(100),Find_Func("IsClonk"));
Fast richtig. Hier solltest du bei Find_Distance aber auch die Koordinaten angeben, wo gechekt wird, zB Find_Distance(100, 200, 300), das sucht in einem Radius von 100 Pixeln um den Punkt (200 | 300).
GRSG war der Granitschlag? Der ist nicht im Fantasypack, den müsstest du dann reinkopieren oder das KdD-Pack aktivieren, wenn du das hast. Oder aus einem Szen rauskopieren wo der drin ist. Den Zauber erstellst du dann am besten am selben Punkt wo auch gecheckt wird, also hier CreateObject(GRSG, 200, 300, NO_OWNER). NO_OWNER heißt hierbei dass das Objekt niemandem gehört - sonst würde sich wohl ein Spieler selbst umbringen. Der Granitschlag braucht übrigens keinen angegebenen Winkel, also reicht Activate. Allerdings braucht er ein angegebenes Objekt, denn der Stein wird im Zauberer erstellt und dann herausgeschleudert. Außerdem fliegt er immer in die Blickrichtung des Objekts. Bei normalen Objekten würde er also immer nach links fliegen, da idR nur Lebewesen oder Fahrzeuge die Richtungen links und rechts unterscheiden..
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 6:51 pm
Find_Distance(100) ist schon richtig, er geht ja vom Objekt aus. Mit Schedule und eval hast du recht, mein fehler.
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 7:59 pm
global func SSchlagCheck() { var pClonk = FindObject2(Find_Distance(100),Find_Func("IsClonk")); if (pClonk) CreateObject(GRSG, NO_OWNER)->ActivateAngle(GetX(pClonk),GetY(pClonk),GetX(this),GetY(this)); //Stoppt wenn ein Clonk gefunden wurde else Schedule("GranitCheck",1,1) //Läuft weiter falls kein Clonk gefunden wird }
<-- das geht immernoch nicht also es wird nichts ausgeführt bzw es geschieht nichts =/
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 8:14 pm
Zitat :
Schedule SSchlagCheck();
Schedule ist eine Funktion, danach also erstmal Klammern. Der auszuführende Teil muss als String vorliegen, also in Anführungszeichen. Danach kommt die Verzögerung, also:
Code:
Schedule("SSchlagCheck()", 1);
Zitat :
CreateObject(GRSG, NO_OWNER)
Da musst du die Parameter beachten: Du hast als zweiten NO_OWNER, da kommt aber erstmal die X-Position, also wohl einfach 0. Danach Y, das bleibt ebenfalls 0.
global func SSchlagCheck() { var pClonk = FindObject2(Find_Distance(100),Find_Func("IsClonk")); if (pClonk) CreateObject(GRSG, 0, 0, NO_OWNER)->Activate() else Schedule("SSchlagCheck()", 1) //Läuft weiter falls kein Clonk gefunden wird }
So? aber da ist auch nichts gerade anders also passiert nichts
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 8:41 pm
Nach Activate und dem zweiten Schedule fehlt der Strichpunkt.
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 8:54 pm
global func SSchlagCheck() { var pClonk = FindObject2(Find_Distance(100),Find_Func("IsClonk")); if (pClonk) CreateObject(GRSG, 0, 0, NO_OWNER)->Activate(); else Schedule("SSchlagCheck()", 1); //Läuft weiter falls kein Clonk gefunden wird }
auch erfolglos ...
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 9:24 pm
Wo führst du das script aus? Steht es etwa in Scenario.c4s/Script.c ?
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Mo Okt 11, 2010 9:29 pm
Ne was muss ich denn da reinschreiben? Aber muss da überhaupt was rein?
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Zauber auf ein Objekt Di Okt 12, 2010 2:56 am
Nein, da muss in diesem fall nichts rein. Eine gute Methode dinge zu testen die nicht logisch erscheinen ist die Log methode. Wenn du wissen möchtest ob eine gewisse stelle im Script erreicht wird schreibst du einfach dorthin Log("Beliebiger Text"); Wenn du wissen möchtest ob ein Objekt gefunden wurde oder so schreibst du Log("%v",pClonk); irgendwo hin
Im Chatbereich erscheint dann die entsprechende information. (null) bedeutet das die variable leer ist die du mit Log("%v",pClonk); überprüft hast.
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Di Okt 12, 2010 8:48 am
Naja ich weiß ja, dass das was ich oben zuletzt geschrieben habe auch nicht funktioniert, da immernochnichts passiert. Was muss ich daran noch verändern?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Zauber auf ein Objekt Di Okt 12, 2010 2:53 pm
Was für Errors gibts denn überhaupt? Wenn gar keine kommen, hast du evtl den Debug-Modus ausgeschaltet. Dann geh auf Optionen -> Entwickler -> Debug-Modus. Dann werden dir im Log (und evtl über Objekten) bei Bedarf Fehlermeldungen ausgegeben, die weiterhelfen. Wo steht dein Script? In einem Objekt? Wenn ja, ist das überhaupt platziert?
Frindus Major
Anmeldedatum : 06.05.10
Thema: Re: Zauber auf ein Objekt Di Okt 12, 2010 3:26 pm
0 warnings, 0 errors des steht dort also anscheinend gibts keine errors. Und der Script steht in der Script datei. Also das rote schriftteil da. Und wenn du mir plazieren meinst, ob es in der Map ist: Ja, ich hab ihn reingezogen