CreateArray(iLength);
nicht zwingend benötigt.var aArray = [];
var aFibonacci = [1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987];
var aCrap = ["Hello World!",1337,CLNK,true,0x63a5ff]; //Achtung! Die meißten Programmiersprachen haben nur einen einzigen Datentyp pro Array. C4Script kann das.
var aMapDimensions = [LandscapeWidth(),LandscapeHeight()]; //Nimmt letztendlich die Rückgabewerte und speichert das in Zahlenform ins Array.
aCrap[0]; //Gibt "Hello World!" zurück
aCrap[1]; //Gibt 1337 zurück
...;
x++;
gehen hier auch, sofern man den richtigen Datentyp dafür benutzt.aCrap[3] = false; //Ändert das Array in ["Hello World!",1337,CLNK,false,0x63a5ff]
global func CreateArray(int iLength)
{
var aArray = [];
for(var i=0; i<iLength; i++)
aArray[i] = 0;
return aArray;
}
var aMapDimensions[5] = false;
[int,int,0,0,false]
oder zu [int,int,false]
? Ich tippe mal ersteres? aCrap[10];
aCrap[10];
eine Null zurückliefert, egal ob es zuvor mit var aCrap=[];
oder var aCrap=CreateArray(10);
oder var aCrap=CreateArray(5);
erstellt wurde, also wieviele Nullen zuvor eingefügt wurden. Oder etwa nicht?aCrap[1bis10]
steht. Wenn ich stattdessen einfach 10 benannte variablen erstelle, dann weiß ich anhand der Namen immer, wofür das nun steht und wo ich es verwenden muss. Aber beim Array geht das nicht. Wie mir scheint hatte ich mit meiner Annahme recht, oder? >var aMapDimensions[5] = false;
>wird das dann zu: [int,int,0,0,false] oder zu [int,int,false]? Ich tippe mal ersteres?
[int,int,,,false]
Es ist nichts aber wird wie 0 gehandhabt. Also ist es wie eine nicht initialisierte Variable.>aCrap[10];
>bekomme ich dann einen Fehler, oder 0?
>Du hast ja die CreateArray Funktion beschrieben. Mir ist noch nicht ganz klar, wozu das mit Nullen gefüllt werden muss.
CreateArray();
erstelltes Array kann auch nicht mehr, als ein leeres Array. Die füllung mit Nullen ist übrigens nur dafür da, dass die Einträge angelegt werden. Meines erachtens kann man nicht dynamisch ein Array mit lauter leeren Einträgen erstellen.var aArray = [,,,,,,,,,,,,,,,,,,,,,];
geht zwar und hat leere Einträge, ist aber nicht dynamisch machbar. Deshalb die Lösung mit den Nullen. Klar könnte man auch nur den letzten Eintrag mit einer Null bestücken, aber das wäre eine Sache, die fänden viele Leute (mich mit eingeschlossen) unschön.>Der Grund wehsalb ich zuvor nie Arrays verwendet habe, [...] war dass ich davon ausgehe, dass ich ohne die Entstehung des Arrays nachzuschauen, nicht wissen kann, wofür nun z.b aCrap[1bis10] steht.
>Wenn ich stattdessen einfach 10 benannte variablen erstelle, dann weiß ich anhand der Namen immer, wofür das nun steht und wo ich es verwenden muss.
FindObjects();
>Da sind 100 Variablen Namen irgendwie übersichtlicher
>können Arrays auch global sein und wenn ja wie? Von Natur aus sind sie vermutlich local?
var
, local
und static
auch für diese funktioniert.>lternativ könnte man auch ein Array dafür machen, wo dann ein Platz im Array für eine Regel steht. Dadurch ist das ganze natürlich nicht mehr nachvollziehbar (z.b. aArray[0] ist dann der Wert für die Baustoffe und aArray[1] der Wert für eine andere Regel usw. ), aber es wäre schneller zu schreiben. Sollte ich das so machen, oder fällt dir ein besserer Weg ein?
[[C4ID,value],[C4ID,value],[C4ID,value],...]
machen. Da bei jedem Eintrag die ID mitgeliefert wird, braucht man nichtmal konstante Indices für die einzelnen Regeln, sondern kannst schnell mit einer for-schleife durchgehen und den richtigen eintrag raussuchen (ist zwar etwas komplizierter als stumpfes array[index] = value;
, aber dynamischer).array[index][0]
und den wert über array[index][1]
. Und ja, das ist ein zweidimensionales Array.
ChangeVariableRuleConfig()
im Eingangspost erklärt wurde. Ich hatte das nur angelesen und gedacht, du willst nur infos über Arrays haben. Pack ich das einfach in einen neuen Post für eine weitere Benachrichtigung.func ChangeVariableRuleConfig(id dummy, int iSelection)
{
var iIndex=GetLength(aRules); //Standardwert für den Fall, dass kein Eintrag dafür vorhanden ist
for(var i=0; i<GetLength(aRules))
if(dummy == aRules[i][0])
{
iIndex = i;
break;
}
aRules[iIndex] = [dummy,iSelection];
// Rest der Funktion
Sound("Grab", 1,0,0,1);
EditVariabelRule(0, iSelection);
}
var iResult;
for(var i=0; i<GetLength(aRules); i++)
if(aRules[i][0] == <C4ID>) //Hier ID der gewünschten Regel bei Abfrage einfügen
{
//Wert rausschreiben und Schleife abbrechen
iResult = aRules[i][1];
break;
}
func EditVariabelRule(id dummy, int iSelection)
{
var pClonk = GetCursor();
// Menü aufmachen
CreateMenu(GetID(), pClonk,0,0,"Nur eines wählbar! Variable Einstellung",0,2,0);
var aPossibilities = DefinitionCall(dummy, "GetChooserPossibilities");
for(var j = 0; j < GetLength(aPossibilities), j++) {
AddMenuItem(aPossibilites[j][CHSR_CUSTOM_TITLE], "ChangeVariableRuleConfig",dummy, pClonk, 0, 1, aPossibilites[j][CHSR_CUSTOM_DESC]);
}
}
public func GetChooserPossibilities() {
entries = [];
entries[0] = [];
entries[0][CHSR_CUSTOM_TITLE] = "Nichts zurück";
entries[0][CHSR_CUSTOM_TITLE] = "50% Chance nur Bausatz zurück";
entries[1] = [];
entries[1][CHSR_CUSTOM_TITLE] = "...";
...
return entries;
}
Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill