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

Austausch | 
 

 Einen Wert zu einem Array hinzufügen per Script

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

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

BeitragThema: 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

_________________
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/
Toastbrot
Kadett
Kadett
avatar

Männlich Anmeldedatum : 10.03.09

BeitragThema: 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.
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: 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?

_________________
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/
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: 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
Zitat :
public func Activate(object pClonk) {
[Pilz essen]
aClonks[GetLength(aClonks)] = pClonk;
RemoveObject();
}
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.
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: 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 Smile
*Thanks Button drück*

_________________
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/
Gamer
Staatsrat
Staatsrat
avatar

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

BeitragThema: 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 Sad
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());
}

_________________
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/
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: 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;
}

Dann bräuchtest du im Clonk-Death() nur
Code:
if (FindInArray(oneupclonk, this) != -1) {
  Relaunch();
  RemoveArrayItem(oneupclonk, FindInArray(oneupclonk, this));
}
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: 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;
}

Und das Appendto
Code:
/*-- Clonk Appendto --*/

#strict
#appendto CLNK

static oneupclonk;


func Initialize(){oneupclonk=[]; return(_inherited());}

func Death(){
if (FindInArray(oneupclonk, this) != -1) {
  Relaunch();
  RemoveArrayItem(oneupclonk, FindInArray(oneupclonk, this));
                                          }
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);
}

Hmpf Sad

_________________
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/
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: 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.
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: 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!

_________________
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/
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: 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^^
Nach oben Nach unten
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: Einen Wert zu einem Array hinzufügen per Script   

Nach oben Nach unten
 
Einen Wert zu einem Array hinzufügen per Script
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» Wie verstecke ich einen Link hinter einem x-beliebigen Text?
» Besteht für die Admins eines Forums die Pflicht, accounts zu löschen?
» Ziel 96 - Einem Pferd einen Apfel geben
» Wie man einen Link macht (in Foren und Nachrichten)
» Einem Forum Moderatoren hinzufügen??

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Sonstiges :: Scripthilfe-
Gehe zu: