Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Einen Wert zu einem Array hinzufügen per Script Mo Aug 09, 2010 10:06 pm
Hi Leute, Folgendes Problem. Ich hab ein Objekt gemacht, einen Relaunchpilz. Jeder der ihn isst soll nac dem Tod relauncht werden. Das Prob ist ich hab das nur mit einer static gemacht, weil ich nicht weiß wie man einen Wert zu einem Array hinzufügen kann, ohne die anderen unberührt zu lassen. I-Welche Ideen? :/ Gamer
Toastbrot Kadett
Anmeldedatum : 10.03.09
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Mo Aug 09, 2010 11:06 pm
Du kannst durch das Array in einer for-Schleife gehen und sobald ein leerer Platz kommt füllst du den und wenn keiner frei ist füllst du array[GetLength(array)] mit deinem Wert was das Array um eins verlängert.
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Mo Aug 09, 2010 11:29 pm
Hm, kannst du das mal an nem kurzen Beispiel erläutern? Ich hab z.B einen Array pClonks und möchte dem den Wert von z.B FindObject(CLNK) hinzufügen. Wie geht das jetzt genau?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Mo Aug 09, 2010 11:43 pm
pClonks[GetLengthpClonks)] = FindObject(CLNK);
Allerdings kanns gut sein dass dann ein Objekt doppelt drin ist, wenn das so allgemein gehalten ist.
Wenn du wirklich nur die reintun willst, die so einen Pilz essen, kannst du einfach jeden neuen Clonk hinten dranhängen. Also zB
Und beim Tod schaust du dann halt, ob der Clonk drin ist, und belebst ihn bei Bedarf wieder.
Wenn jeder sowieso nur einen Clonk hat, geht das sogar einfacher. Dann setzt du zB aRelaunches[GetOwner(pClonk)] = true. Das funktioniert weil die Spieler ja alle durchnummeriert sind.
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Di Aug 10, 2010 10:30 am
Danke Limeox, da wär ich nie selbst drauf gekommen mit den Arrays *Thanks Button drück*
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Do Aug 12, 2010 3:11 pm
Mhm, i-wie funktioniert das nicht so ganz Also ich hab 2 Clonks. Der erste ist einen und dann ist der Zweite einen.
Zitat :
-> oneupclonk = [0, Mario #106] -> Mario::MakeCrewMember(this()) = true
-> oneupclonk = [2, Mario #108]
[/quote] Also nachdem der erste es gegesen hat ist ja noch alles in Ordnung, bloß kleine Unschönheit wegen der 0. Nachdem der 2te Clonk es aber gegessen hat, steht vorne drann ne 2 (Das ist die Länge des Array) und dann der neue Clonk. Der alte Clonk geht dabei verloren..
EDIT: Hier mal die Scripts:
Code:
/*-- Clonk Appendto --*/
#strict #appendto CLNK
static oneupclonk;
func Death(){ var elements; for(elements in oneupclonk){if(elements == this())Relaunch();} return(_inherited()); }
func Relaunch(){ SetLength(oneupclonk,GetLength(oneupclonk)-1); var newclonk=CreateObject(GetID(this()),0,10,GetOwner(this())); MakeCrewMember(newclonk,GetOwner(this())); PlayerMessage(GetOwner(this()),"Du wurdest dank des 1-Up Pilzes wiederbelebt."); RemoveObject(this(),1); return(1); }
Und vom Pilz:
Code:
/*-- Neues Objekt --*/
#strict
func Activate(object pClonk){ oneupclonk=[GetLength(oneupclonk)]; oneupclonk[GetLength(oneupclonk)] = pClonk; //Das warst auch schon, bb. Message("Dieser Clonk wird wiederbelebt, wenn er stirbt.",pClonk); return(RemoveObject()); }
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Do Aug 12, 2010 3:31 pm
Zitat :
oneupclonk=[GetLength(oneupclonk)];
Da ist der Fehler, du setzt das Array erst auf [2] und hängst dann den neuen dran. Die Zeile muss einfach raus.
Und btw: In Relaunch() verkürzt du das Array, obwohl du ja nichtmal weißt welcher Wert rausmuss. Die Zeile kannst auch raushauen. Um Werte aus Arrays zu löschen, musst du schon selbst eine Funktion bauen. Übrigens solltest du das auch tu, um Werte in Arrays zu finden:
Code:
global func FindInArray(array a, item) { for (var i; i < GetLength(a); i++) if (a[i] == item) return i; return -1; }
global func RemoveArrayItem(array &a, int item) { var temp = []; for (var i; i < GetLength(a); i++) { if (i < item) temp[i] = a[i]; if (i > item) temp[i-1] = a[i]; } return a = temp; }
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Do Aug 12, 2010 4:41 pm
Danke für die Hilfe, aber wenn ich nun den Pilz esse steht da:
Code:
ERROR: Array access: array expected by: Activate(Mario #106) (obj Ein neues Objekt #110) (Mariotest.c4s\1-Up Pilz.c4d\Script.c:7)
Hier nochmal der derzeitige Script: 1-Up Pilz:
Code:
/*-- Neues Objekt --*/
#strict
func Activate(object pClonk){ oneupclonk[GetLength(oneupclonk)] = pClonk; //Das warst auch schon, bb. Message("Dieser Clonk wird wiederbelebt, wenn er stirbt.",pClonk); return(RemoveObject()); }
global func FindInArray(array a, item) { for (var i; i < GetLength(a); i++) if (a[i] == item) return i; return -1; }
global func RemoveArrayItem(array &a, int item) { var temp = []; for (var i; i < GetLength(a); i++) { if (i < item) temp[i] = a[i]; if (i > item) temp[i-1] = a[i]; } return a = temp; }
func Relaunch(){ SetLength(oneupclonk,GetLength(oneupclonk)-1); var newclonk=CreateObject(GetID(this()),0,10,GetOwner(this())); MakeCrewMember(newclonk,GetOwner(this())); PlayerMessage(GetOwner(this()),"Du wurdest dank des 1-Up Pilzes wiederbelebt."); RemoveObject(this(),1); return(1); }
Hmpf
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Do Aug 12, 2010 5:27 pm
Das Array solltest du erstmal aus dem Clonk rausnehmen, sonst wirds immer auf [] gesetzt, wenn ein neuer relauncht. Das oneupclonk = [] solltest du dann im Szenarioscript in Initialize() festlegen.
Und SetLength(oneupclonk,GetLength(oneupclonk)-1); < das raus^^
Aber... müsste eig klappen.
Edit: Eigentlich müsste es sogar mit einem Effekt funktionieren, der kommt ohne das Arraygezeugs und ohne Clonk-Append aus.
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Fr Aug 13, 2010 12:54 pm
Ja aber enn ich das Rausnehme dann wird der Clonk ja nichtt gelöscht wenn er relauncht wurde!
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Einen Wert zu einem Array hinzufügen per Script Fr Aug 13, 2010 1:20 pm
Doch, das macht RemoveArrayItem. Das Array um 1zu verkürzen nimmt immer den hintersten raus. Beispiel: Spieler 1 isst einen Pilz, Spieler 2 auch. Dann stirbt Spieler 1, wird wiederbelebt und Spieler 2 fliegt aus dem Array. Macht ja keinen Sinn^^
Gesponserte Inhalte
Thema: Re: Einen Wert zu einem Array hinzufügen per Script