#appendto
generiert.
local aResearchBases;
public func Intialize() {
//...
aResearchBases = [CNKT, ANVL, ...];
//...
}
// Variante 1: Direkt das Array zurückgeben und hoffen, dass kein Bösewicht irgendwelche Einträge überschreibt.
public func GetResearchBases() {
return aResearchBases;
}
// Variante 2: Nur Zugriff über Index zulassen
public func GetResearchBases(int i) {
return aResearchBases\[i\];
}
var BaseList = DefinitionCall(idDef, "GetResearchBaseList"); // eine liste
if (BaseList)
for(var j=0;j < GetLength(BaseList);j++) // eine globale Array funtkion aus einem Array.c skript, um sicherzugehen, dass das array auch so lang ist, wie der index der abgefragt wird
idBase = ArrayData(BaseList,j, 0)
if (idBase)
if (!GetPlrKnowledge(iPlr,idBase)) fHasBase=0;
var BaseList = DefinitionCall(idDef, "GetResearchBaseList"); // eine liste
if (BaseList)
for(var idBase in BaseList)
if (!GetPlrKnowledge(iPlr,idBase)) fHasBase=0;
//Geschützer Array Zugriff
global func ArrayData(array anArray, int dnIndex, xExeption)
{
if (Inside(dnIndex, 0, GetLength(anArray) - 1))
return anArray[dnIndex];
return xExeption;
>Gibt es eine möglichkeit, eine for schleife über jedes listenelement zu machen, ohne die Länge der Liste dabei beachten zu müssen? Also sowas wie "for entry in liste" oder ähnliches?
for(var element in liste) {
...
}
>in C4 Skript fangen die indizes von listen bei 0 an, oder? Und auch die Indizes von z.b GetDefinition fangen bei 0 an, oder?
>und 0 ist unwahr, richtig? Ist eine leere Liste auch unwahr?
#appendto funktioniert zur Compilezeit. Es kann gar nicht in Funktionen und erst recht nicht in Schleifen stehen. Was du machen kannst ist aber:#appendto *
func GetResearchBase()
{
// Huette, Bausatz, Amboss erst nach dem Flint
var appendto_ids = [HUT3, CNKT, ANVL];
if (GetIndexOf(appendto_ids, GetID()) >= 0) return FLNT;
// Standard-Forschungsvoraussetzungen
return _inherited(...);
}
>#appendto *
Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill