NoRelaunch sind die RPG-Clonks, die sollen nicht relaunchen, und auch nicht die KI. Kann mir bitte jemand helfen?
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 6:07 pm
schau mal ob das script überhaupt aufgerufen wird (test per Log("Script wurde ausgeführt"); ganz an den anfang schreiben)
if(GetID(pCursor) == NoRelaunch[GetLength(NoRelaunch)]) ist übrigens relativ sinnlos. NoRelaunch[GetLength(NoRelaunch)] fragt das letzte element +1 ab (Es wird bei 0 angefangen zu zählen!) was du sicher testen möchtest ist ob es einer der 4 ids entspricht. das wäre int i =0 ; while(i < GetLength(NoRelaunch)) { if (NoRelaunch[i] == GetID(pCursor) return 1; i++; }
Andriel Oberst
Alter : 74 Anmeldedatum : 06.04.10
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 6:34 pm
Es wird aufgerufen. Heißt das nicht "var i = 0;" Wo soll ich das hinschreiben? Ich will ja, dass die RPGs nicht relaunchen.
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 8:16 pm
Die Funktion muss public sein, damit sie per GameCall(Ex) aufgerufen werden kann.
Edit: Prüfen, ob etwas in einem Array ist, geht per GetIndexOf(any item, array a). Undokumentierte Enginefunktion, ist aber deutlich schneller als selbstgebastelte Äquivalente.
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 8:38 pm
Das funktioniert nicht. Die RPGs kriegen trotzdem ein relaunch.
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 9:54 pm
Ach, an RelaunchPlayer wird der gestorbene Clonk auch gar nicht übergeben. Und GetID(0) ist halt auch immer 0 Du kannst stattdessen OnClonkDeath verwenden, allerdings sind da dann die beiden Parameter vertauscht. (OnClonkDeath(object pClonk, int iPlr))
Andriel Oberst
Alter : 74 Anmeldedatum : 06.04.10
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 10:04 pm
Wie soll ich OnClonkDeath() verwenden?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Problem mit Relaunchscript Di Feb 08, 2011 10:31 pm
Eigentlich genau gleich. Der Unterschied ist nur, dass die Parameter anders sind und dass es auch aufgerufen wird, wenn nicht der letzte Clonk eines Spielers gestorben ist, sondern nur irgendeiner.
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 1:10 am
Tut mir leid, es ist natürlich var. Ich bin zurzeit ein wenig zu häufig mit c# und java unterwegs :s
Andriel Oberst
Alter : 74 Anmeldedatum : 06.04.10
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 11:01 am
@Limeox: Jetzt hab ich das:
Code:
public func OnClonkDeath(object pClonk, int iPlr) { var NoRelaunch = [_RP0, _RP1, _RP2, _RP3]; if (GetPlayerType(iPlr) != C4PT_Script) if(GetIndexOf(GetID(pClonk), NoRelaunch) == -1) if(++Global(9) < 5) { MakeCrewMember(CreateObject(ASAS, 75, 665, iPlr), iPlr); SetPlrViewRange(200, GetCrew(iPlr)); SetCursor(iPlr, GetCrew(iPlr)); DoEnergy(100, GetCrew(iPlr)); CreateContents(CLUB, GetCrew(iPlr)); CreateContents(BOTP, GetCrew(iPlr)); CreateContents(HOOK, GetCrew(iPlr)); CreateContents(CRBW, GetCrew(iPlr)); Log("%s hat noch %d Versuche!", GetPlayerName(iPlr), 5 -Global(9)); } }
Die RPGs kriegen keinen Relaunch mehr, das funktioniert jetzt. Aber wenn man stirbt, ist man sofort eliminiert, es wird zwar ein Meuchelmörder erstellt, aber der gehört dem KI-Team! Was hab ich falsch gemacht?
Liech Fregattenkapitän
Alter : 33 Anmeldedatum : 02.02.09
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 12:19 pm
Wenn ich mich nicht irre ist int iPlr nicht iPlr sondern iKiller. Und auch die anderen Parameter sind etwas fragwürdig. Du kannst hier generell informationen per this über den toten clonk einholen. sprich var iPlr = GetOwner(this); var pClonk = this;
Andriel Oberst
Alter : 74 Anmeldedatum : 06.04.10
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 5:06 pm
Okay, jetzt funktioniert alles, ich hab es nun ein wenig anders gemacht(Hab mir etwas vom 3. M&M-Tutorial abgeschaut):
Nur noch eine Frage: Was muss ich jetzt verändern, damit das auch mit mehreren Spielern funzt?(Also, dass jeder Spieler seine eigenen 4 Relaunches hat)
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 6:02 pm
Zitat :
Du kannst hier generell informationen per this über den toten clonk einholen.
Öh, nein. Der Aufruf im Szenarioscript ist komplett ohne Objektkontext, zumindest hier über GameCall/GameCallEx. Da ist this einfach 0.
Es müsste eigentlich reichen, bei der oberen Funktion (mit OnClonkDeath) den iPlr-Parameter rauszuschmeißen und zu Beginn var iPlr = GetOwner(pClonk) zu deklarieren, der Rest kann so bleiben.
Für Relaunches pro Spieler kannst du einfach andere Globals verwenden, oder einfach ein globales Array.
Andriel Oberst
Alter : 74 Anmeldedatum : 06.04.10
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 6:16 pm
Zitat :
Für Relaunches pro Spieler kannst du einfach andere Globals verwenden, oder einfach ein globales Array.
Ähm... und wie mach ich das?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 6:34 pm
Global(iPlr) zum Beispiel, allerdings musst du dann halt NO_OWNER aussortieren. Ein Array ist prinzipiell dasselbe, du brauchst aber nur eine einzige Variable und nicht gleich die ganzen Globals.
Und zugreifen kannst du dann zB per aRelaunches[iPlr]. Gibts hier auch irgendwo Tutorials dazu.
Andriel Oberst
Alter : 74 Anmeldedatum : 06.04.10
Thema: Re: Problem mit Relaunchscript Mi Feb 09, 2011 6:49 pm
Okay, jetzt hab ich alle Global(9) durch Global(iPlr) ersetzt und die NO_OWNER werden eh schon am Anfang der Funktion aussortiert(glaub ich ) Jedenfalls geht jetzt alles, danke!