Thema: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 12:01 am
Hallo an alle Clonker,
ich habe ein neues Luftschiff erstellt und will das nun ins Spiel (Clonk Rage, aktuelle Version) einbinden. Leider habe ich nun mehrere Probleme:
1. Das Luftschiff hat auf beiden Seiten jeweils eine Tür. Hier werden beim drehen die Vertexes nicht mit gedreht.
2. Die Türanimation wird nicht angezeigt.
3. Einstieg ist möglich, jedoch können keine Objekte abgelegt werden und das Luftschiff lässt sich von innen nicht steuern.
4. Im Bug befindet sich eine Haubitze. Wie bekomme ich es hin das man damit schiessen kann ?
Es poste hier mal das komplette script. Könnte etwas wüst aussehen, das sind Auschnitte vom original Luftschiff, welches die Vorlage bildet, und vom Waggon, bei dem ich das Einladen (was nicht geht) abgeleitet habe.
//Vertexes mitdrehen, WO SOLL DAS EINGEFÜGT WERDEN /*var rotVert; if(GetDir()==0)rotVert=-1; //Nach Links gerichtet else rotVert=1; //Nach Rechts gerichtet
private func TurnStart() { // Alle Clonks die das Luftschiff anfassen registrieren var controllers = FindObjects(Find_Action("Push"), Find_ActionTarget(this())); AddEffect("IntTurn", this(), 1, 1, this(), 0, controllers); }
protected func FxIntTurnStart(object target, int number, int temp, array controllers) { if(temp) return(0);
// Alle luftschiffanfassenden Clonks EffectVar(0, target, number) = controllers; // Deren initiale Position auf dem Luftschiff... EffectVar(1, target, number) = CreateArray(GetLength(controllers)); // ... die hier ermittelt wird for(var i = 0; i < GetLength(controllers); ++ i) EffectVar(1, target, number)[i] = controllers[i]->GetX() - GetX(); }
protected func FxIntTurnTimer(object target, int number, int time) { // Laenge der Turn-Action bestimmen var delay = GetActMapVal("Delay", "Turn"); var phases = GetActMapVal("Length", "Turn"); // Schon vorbei if(time == delay * phases) return(-1); // Eine Sinus-Kurve von -90 bis +90 Grad hernehmen um die neue Position // der Clonks auf dem Luftschiff zu bestimmen. var sin_phase = (time * 180 / (phases * delay)) - 90; var pos_phase = Sin(sin_phase, 50) + 50; // Clonkpositionen anpassen var controller_count = GetLength(EffectVar(0, target, number)); for(var i = 0; i < controller_count; ++ i) { var controller = EffectVar(0, target, number)[i]; var pos = EffectVar(1, target, number)[i];
// Koennte sein, dass ein Controller verloren geht if(!controller) continue; // Koennte auch sein, dass er kein Controller mehr ist if(controller->GetAction() ne "Push" || controller->GetActionTarget() != this()) { // Dann nichts mehr mit ihm anstellen, selbst wenn er das Luftschiff // wieder anfaesst - er koennte es an einer anderen Position tun und // dann beamen wir ihn komisch auf dem Luftschiff rum. Lieber nicht. EffectVar(0, target, number)[i] = 0; continue; }
// Dir anpassen wenn Haelfte der Turn-Action vorbei if(time == delay * phases / 2) controller->SetDir(GetDir());
// Neue Position ermitteln (Sinusfoermig um den Luftschiff-Mittelpunkt) var pos_t = -pos * 2; controller->SetPosition(GetX() + pos - (pos*2 * pos_phase / 100), controller->GetY()); } }
protected func FxIntTurnStop(object target, int number, bool temp) { if(temp) return(0); var length = GetLength(EffectVar(0, target, number));
// Nochmal alle Controller durchgehen for(var i = 0; i < length; ++ i) { var object = EffectVar(0, target, number)[i]; var pos = EffectVar(1, target, number)[i];
// Und an fertige Position tun, zur Sicherheit, wenn es noch Controller sind if(!object) continue; if(object->GetAction() S= "Push" && object->GetActionTarget() == this()) object->SetPosition(GetX() - pos, object->GetY()); } }
private func SetDirection(int comdir) { // Richtungsaenderung nach oben/unten geht auch mit "Turn", aber eine // ComDir-Aenderung, die wieder eine Turn-Action erfordern wuerde muss // warten, bis die jetzige Turn-Action fertig ist. if(GetAction() S= "Turn") { turn_end_dir = comdir; if(comdir == COMD_Stop || (ComDirLike(comdir, COMD_Right) && GetDir() == DIR_Left) || (ComDirLike(comdir, COMD_Left) && GetDir() == DIR_Right)) { return(0); } }
// ComDir uebernehmen SetComDir(comdir);
// Angebrachte Action setzen if(GetAction() ne "Turn" && GetAction() ne "WaterLaunch") { if(comdir != COMD_Stop && GetAction() ne "FloatPropel") SetAction("FloatPropel"); if(comdir == COMD_Stop && GetAction() ne "FloatIdle") SetAction("FloatIdle"); }
// Vorherige ClearDirs wegtun ClearScheduleCall(this(), "ClearDir"); // Wenn Bewegung in nur eine Richtung, dann Bewegung in die andere // Richtung aufgeben (macht FLOAT-Prozedur nicht automatisch) if(comdir == COMD_Down || comdir == COMD_Up) ScheduleCall(this(), "ClearDir", 1, Abs(GetXDir()), true); if(comdir == COMD_Left || comdir == COMD_Right || comdir == COMD_Stop) { ScheduleCall(this(), "ClearDir", 1, Abs(GetYDir()), false);
// Bei Bewegung nur in X-Richtung ein wenig schaukeln if(!GetEffect("IntWindYDir", this())) AddEffect("IntWindYDir", this(), 1, 10, this()); } else { if(GetEffect("IntWindYDir", this())) RemoveEffect("IntWindYDir", this()); }
// Beim Landen auf COMD_Down lassen, sonst hopst das Luftschiff schnell // wieder in die Luft if(comdir == COMD_Stop && GBackSolid(0, GetObjHeight()/2+2)) SetComDir(COMD_Down); }
//Wird ausgeführt wenn angefasst und bewegt wird /*protected func ControlUpdate(object controller, int comdir, bool dig, bool throw) { SetDirection(comdir); }*/
//Muss raus damit man überhaupt erstmal einsteigen kann. //Hat sich mit der Funktion oben 'gebissen' /* Initialisierung */ /*protected func Initialize() { turn_end_dir = -1; FloatIdleDown(); }*/
private func CheckCommandAction() { // Propeller an für Kommando if (GetCommand()) if (GetAction()S="FloatIdle") SetAction("FloatPropel"); // Wenden nach rechts if (GetAction() eq "FloatPropel") if (Inside(GetComDir(),COMD_UpRight,COMD_DownRight)) if (GetDir()==DIR_Left) { SetAction("Turn"); SetDir(DIR_Right); return(true); } // Wenden nach links if (GetAction() eq "FloatPropel") if (Inside(GetComDir(),COMD_DownLeft,COMD_UpLeft)) if (GetDir()==DIR_Right) { SetAction("Turn"); SetDir(DIR_Left); return(true); } // Anhalten wenn Ziel erreicht if(!GetCommand() && !GetComDir()) SetDirection(COMD_Stop); return(0); }
private func NoPilotCheck() { if (!FindObject(0,0,0,0,0,0,"Push",this())) return(FloatIdleDown()); return(0); }
//wird aufgerufen wenn das Luftschiff nicht benutzt wird um es auf dem Boden zu halten private func FloatIdleDown() { if (GetAction()ne"FloatIdle") SetAction("FloatIdle"); SetComDir(COMD_Down()); ClearCommand(); return(1); }
/* Signalsteuerung */
public func SignalCall(object pSignal,bool fLoad) { // Bei fLoad = 1 einladen, Status sichern if(fSignalState = fLoad) return(SignalLoad()); // sonst ausladen else return(SignalUnload()); }
// Ausladen private func SignalUnload() { // Nur bei Inhalt if(!ContentsCount()) return(); // Alles raus for(var pContents,i=0; pContents = Contents(i); ++i) SetCommand(pContents,"Exit"); return(1); }
public func SignalDepart(object pSignal) { // Beim Ausladen nix if(!fSignalState) return(1); // Einladen stoppen var pObj; while(pObj = FindObject(0,-20,-20,40,40,OCF_Collectible()|OCF_Grab()|OCF_CrewMember(),0,0,NoContainer(),pObj)) if(GetCommand(pObj)S="Enter") SetCommand(pObj, "None"); fSignalState = 0; return(1); }
/* Trefferkontrolle */
protected func RejectCollect(id idObject, object pObj) { // Pfeile vertragen sich nicht mit einem Luftschiff if (DefinitionCall(idObject,"IsArrow") ) // Nur, wenn der Pfeil sich auch bewegt if(GetXDir(pObj) || GetYDir(pObj)) { // bei brennendem Pfeil anzünden if(OnFire(pObj)) Incinerate(); // ansonsten abstürzen else SetAction("DropOff"); // in jedem Fall im Pfeil Hit auslösen (Sprengpfeil explodiert zB) ProtectedCall(pObj, "Hit"); return(1); } return(1); }
/* Angriff durch Vögel */
public func Poke() { Sound("Rip"); SetAction("DropOff"); return(1); }
/* Forschung */
public func GetResearchBase() { return(BLMP); }
Ich hoffe mal, dass zumindest jemand von euch hier durchblickt, ich tu es nämlich langsam nicht mehr.
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 9:27 am
Also die Vertexe musst du dann wieder von vorne Setzen. Also per Skript selbst umplatzieren. Nicht vergessen, dass wieder auch umgedreht zu machen, sonst bleiben sie wieder da, wenn sich das luftschiff wieder dreht. Befehl ist glaube ich SetVertex()
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 11:50 am
Script schrieb:
//Vertexes mitdrehen, WO SOLL DAS EINGEFÜGT WERDEN
Beim drehen müssen die Vertex ja umgedreht werden. Also je nach drehrichtung die Vertex anders setzten.
Und SetVertexXY() Find ich ist die bessere Variante, hier der Link zur Doku.
Bowserkoopa Staatsrat
Alter : 30 Anmeldedatum : 21.12.08
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 12:35 pm
Aber wie gesagt. Wenn das Schiff nach links dreht müssen die Vertex gesetzt werden und wenn es sich nach rechts dreht, beliben die Vertexe noch so wie bei links. Also wenn es nach rechts dreht, erneut die Vertexe setzen. Nicht vergessen.
Soterotu Generalleutnant
Alter : 31 Ort : Einsames Dorf in Oberfranken Anmeldedatum : 27.01.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 12:43 pm
Mit GetVertex die Vertex auslewse und speichern in variablen undbei erneutem Dreht wieder Zurück geben
Coolzero Clonk
Anmeldedatum : 16.04.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 8:12 pm
WOW, das ging ja schnell. Danke erstmal für die vielen Antworten.
@Gamer: da hätte man echt selbst drauf kommen können
Werde ich mal probieren, mal schaun ob ich das hinbekomme.
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 10:02 pm
Für die Zukunft: Es wäre ratsam wenn du nicht extrem viel zeugs einfach mal hinpostest. Kürze das Script in Zukunft bitte auf das nötige, ich (und viele anderen) haben wenig Motivation 10 Seiten text durchzulesen.
Coolzero Clonk
Anmeldedatum : 16.04.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 11:01 pm
OK.
ich will jetzt nicht großmaulig sein aber bevor ich irgendwas falsches aus dem Skript weglasse da poste ich lieber gleich am anfang alles. Sonst würden bestimmt wieder Fragen kommen wie: Da fehlt noch funktion xyz , oder so und die habe ich dann evtl. weggelassen...
MFG
Coolzero
Soterotu Generalleutnant
Alter : 31 Ort : Einsames Dorf in Oberfranken Anmeldedatum : 27.01.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Fr Apr 17, 2009 11:19 pm
dU hast doch bestimmt doch bestimmt manche sachen aus dem script des Luftschiffes 1:1 übernommen oder. eil für sole sachen giebts #include
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Mehrere Probleme mit neuem Luftschiff Sa Apr 18, 2009 4:08 pm
Ja, genau. Einfach #strict #include C4ID
also z.B #include BIMP (oder wie war die ID von Luftschiff...) Und man kann belieg oft inkludieren.