[Gelöst] globale funktion wiederholt aufrufen?

Ich würde gern eine globale Funktion zb mit ScheduleCall oder Schedule aufrufen. Aber das klappt nicht.

Die globale Funktion steht in einem Script unter System.

Wenn ich ScheduleCall mit obj=0 aufrufe, kommt der Fehler, dass die funktion undefined wäre.

Und mit schedule kann ich die Funktion nicht aufrufen, weil ich dort keine PArameter übergeben kann. Das beispiel ist ja "Explode(50)" in der Doku. 
Um anstelle der 50 nun eine beliebige variable einzufügen, muesste ich wissen, wie ich 1) zwei strings miteinander verschmelze. und 2) wie ich eine beliebige Variable in einen string umwandle. (edit: okay 2tens geht mit Format() )

Wenn ich das skript mit den globalen Variablen in ein eigenes Objekt packe, dann kommt keine Fehlermeldung bei schedulecall mehr, aber funktionieren tut es anscheinend auch nicht… (passiert nichts, wenn ich die fkt zb mit meteoriten aufrufe)

Hier mal was ich zum laufen bringen will. Ich will z.b KKatastrophen("Meteoriten", 10,1000) aufrufen und dann soll halt über 1000 frames lang mit einer gewissen chance meteoriten gespawnt werden:

global func KKatastrophen(skatastrophe, istaerke,idauer) // istaerke sollte von 1 bis 10, schwach bis stark gewählt werden. idauer die dauer in Frames
{
    var aKatastrophen = ["Erdebeben","Meteoriten","Blitze","Vulkan","Eissturm","Gewitter"];  // bei blitze kommen unr blitze. Bei Gewitter erscheint eine Gewitterwolke, sofern Wolken erlaubt. Ansonsten auch nur Blitze
    if(skatastrophe=="Zufall")
    {
        skatastrophe=aKatastrophen[RandomX(0,5)];
    }
   
    var dauer;
    var staerke = istaerke;
    if(!idauer) dauer = 1000; // wenn nicht angegeben, dann immer 1000 Frames lang (ca. 30 sekunden)
    else dauer = idauer;

    if(skatastrophe=="Gewitter")
    {
        if(FindObject(WOL_)) // wenn keine wolken erlaubt, dann nur Blitze und regen
        {
            ScheduleCall(0,"lBlitze",1,dauer,staerke5); // wenn staerke 1, dann kommt jede sekunde ein blitz mit chance von 5%. wenn staerke 10, dann kommt jede sekunde ein blitz mit 50% chance
            ScheduleCall(0,"Regenxyz",1,dauer,staerke
2); // jeden Frame kommen staerke2 tropfen iwo auf der landschaft
        }
        else
        {
            Regenwolkexyz(staerke
10,dauer,staerke20);
        }
    }
    else if(skatastrophe=="Blitze")
    {
        ScheduleCall(0,"lBlitze",1,dauer,staerke
5); // wenn staerke 1, dann kommt jede sekunde ein blitz mit chance von 5%. wenn staerke 10, dann kommt jede sekunde ein blitz mit 50% chance
    }
    else if(skatastrophe=="Erdbeben")
    {
        ScheduleCall(0,"lErdbeben",1,dauer,staerke2);
    }
    else if(skatastrophe=="Vulkan")
    {
        ScheduleCall(0,"lVulcan",1,dauer,staerke
3);
    }
    else if(skatastrophe=="Meteoriten")
    {
        ScheduleCall(0,"lMeteoriten",1,dauer,staerke5);
    }
    else if(skatastrophe=="Eissturm") // Eissturm, mit eismeteoriten
    {
        var temp = GetTemperature(); // die vorherige temperatur speichern und hinterher wieder setzen
        SetTemperature(-79);  // mache es eiskalt (temperatur setzt sich langsam von alleine wieder zurück auf den richtigen wert)
        Eismeteoritenxyz(staerke);
        ScheduleCall(0,"Regenxyz",1,dauer,staerke
2);
        ScheduleCall(0,"SetTemperature",200,dauer/200,-79); // die temperatur fuer die dauer immer wieder neu setzen
        ScheduleCall(0,"Entferneeismeteoritenxyz",dauer); // nach dauer frames alle eismeteoriten entfernen
        ScheduleCall(0,"SetTemperature",dauer,0,temp);
    }
}

func global lBlitze(ichance)
{
    if(RandomX(1,3700)<=ichance)  Blitzexyz(); // 3700, weil es pro sekunde mit einer chance von ichance Prozent gemacht werden soll, es aber jeden frame aufgerufen wird und eine sekunde ca 37frames sind.
}

func global lErdbeben(ichance)
{
    if(RandomX(1,3700)<=ichance)  Erdbebenxyz(); // diese xyz Funktionen sind ebenfalls globale funktionen. Jeder aufruf erzeugt hier 1 erdbeben.
}

func global lVulcan(ichance)
{
    if(RandomX(1,3700)<=ichance)  Vulcanxyz();
}

func global lMeteoriten(ichance)
{
    if(RandomX(1,3700)<=ichance)  Meteoritenxyz();
}

okay mit Schedule und Format funktionierts ^^

wuerde mich aber trzd interessieren, wie man 2 stinges verschmelzen kann, um z.b einen langen string innerhalb einer for schleife zu basteln.

var string1 = "Hallo ";
var string2 = "Welt!";
var stringalleszusammen = Format("%s%s", string1, string2);

Ich meine, es hat auch eine Funktion Concat() in der System.c4g als Abkürzung.

danke euch, beides richtig :slight_smile:

wisst ihr auch einen Weg, wie man strings, welche format enthalten, verschmelzen kann?
Das problem ist einfach, dass man an Format nur 10 Argumente übergeben kann.

Wenn ich nun also mehr als 10 Variablen in einem String ausgeben möchte, geht das zurzeit nicht.
Wenn ich an Concat() strings übergebe, welche Format enthalten, wandelt dieser die in (null) um, soweit ich das jetzt testen konnte…

var s = Format("%s %v %d %s %v", a, b, c, d, e);
s = Format("%s %d %d %i %v", s, f, g, h, i);
s = Format("%s %i %i %d %d", s, j, i, k, m);
s = Format("%s %v %v %v %v", s, n, o, p, q);
return s;

usw.

danke, das funktioniert :slight_smile: