[Gelöst]Wo ist die Funktion Incinerate() ? (brennende Bäume)

Vielen dank dafür, das hilft schonmal :slight_smile:

Jetzt ist nur die Frage, wie ich das einbauen kann… Ich möchte ja, dass das Licht aufhört, sobald das Objekt nicht mehr brennt. Demnach kann ich den GetOCF Befehl wohl in keine bereits existierende Funktion schreiben, weil es keine gibt, die aufgerufen wird, wenn das Objekt nicht mehr brennt, oder?
hmmm könnte man Extinguish nehmen? ist das eine Funktion? Also sobald Extinguish passiert, soll das Licht ausgehen?

Falls das mit Extinguish nicht geht, wäre der einzige Weg der mir einfällt ein TimerCall, welcher überprüft ob ein Objekt brennt oder nicht.
Aber kann man für ein Objekt mehrere TimerCall und Timer definieren? Viele Objekte haben ja bereits einen TimerCall definiert, weshalb es wohl nicht umsetzbar wäre, wenn es nur einen TimerCall gibt und man GetOCF() & OCF_OnFire nur damit sinnvoll nutzen kann =/

Falls das alles nicht geht… kommen wir nochmal zur von Zapper geschriebenen Funktion zurück. Die ist soweit ja schon garnicht schlecht, denn Bäume zum leuchten zu bringen bekomme ich auch mit "GetOCF() & OCF_OnFire" nicht hin. Ich möchte lediglich einzelne Objekte davon ausschließen können. Ist das machbar? wie?

edit:

zusätzlich merke ich gerade, dass die FireStopFunktion von Zapper noch nicht einwandfrei funktioniert. Aktuell leuchten ja auch noch die DuroFlames von der Brandbombe. Wenn ich einen Clonk mit dieser Brandbombe anzünde, dann brennt er logischerweise und leuchtet auch. Wenn aber die Flammen der DuroFlames verschwinden und demnach nicht mehr brennen, dann hört plötzlich auch der Clonk auf zu leuchten, obwohl er noch brennt.   Aber wenn der Clonk von einem brennendem Baum Feuer fängt und dann stirbt, leuchtet seine Leiche weiter, obwohl er nicht mehr brennt.

> Wenn aber die Flammen der DuroFlames verschwinden und demnach nicht mehr brennen, dann hört plötzlich auch der Clonk auf zu leuchten, obwohl er noch brennt.   Aber wenn der Clonk von einem brennendem Baum Feuer fängt und dann stirbt, leuchtet seine Leiche weiter, obwohl er nicht mehr brennt.


Das könnte das Problem mit der einen `static` Variablen sein, die für alle Objekte gilt

>Das könnte das Problem mit der einen static Variablen sein, die für alle Objekte gilt


ist es denn auch anders lösbar?
Und kann ich Ausnahmen definieren? z.b indem ich einen if Befehl davor schalte, sodass es z.b bei Duroflames nicht weiter ausgeführt wird, sondern gleich return inherited aufgerufen wird? (ich vermute mal shcon dass das geht, probiere ich morgen mal aus)

edit: jop, ich konnte mit einem if Befehl die Flames und Duroflames ausschließen :)

auch nochmal für zukünfte Projekte von mir:
kann man irgendwie mehr als einen TimerCall pro Objekt definieren? bzw. verschiedene Timer?
edit:
Die Zeitfunktion, also Tag und Nacht, funktioniert ohne Timer… also kann man TimerCall auch umgehen?

> kann man irgendwie mehr als einen TimerCall pro Objekt definieren? bzw. verschiedene Timer?


Nicht über den DefCore-Eintrag TimerCall, aber da Effekte nichts anderes als zeitlich wiederkehrende Aufrufe sind, kannst du über Effekte beliebig viele Timer umsetzen.

Habe eben das Pack "Ruf der Wipfe Remake" gefunden.  Das ist ja absolut genial! fast alles davon wollte ich auch umsetzen, bzw. habe es teilweise schon. Mal schauen wieviel ich davon integrieren kann, ohne das Skinpaket…

Jedenfalls leuchten die brennenden Bäume hier!!  Das Skript dazu ist vermutlich das hier:

/– Feuerlichter –/

#strict

static const RDW_Firelight_Var=15;

global func FxFireStart(object obj, int iNumber, int iTemp, int iCausedBy, bool fBlasted, object pIncineratingObject)
{
  var ret=inherited(obj, iNumber, iTemp, iCausedBy, fBlasted, pIncineratingObject);
  if(ret>-1)
    if(!iTemp)
      if(dayhelligkeit<30)
        if(GetCategory(obj)&C4D_Structure||GetCategory(obj)&C4D_Vehicle||GetCategory(obj)&C4D_StaticBack)
          if(!IsAntiLag())
          {
            EffectVar(RDW_Firelight_Var,obj,iNumber)=CreateObject(LGFL,0,0,-1);
            EffectVar(RDW_Firelight_Var,obj,iNumber)->Init(obj,0,0,GetDefWidth(GetID(obj))*(GetCon(obj)-10)4/100,RGB(150,100,50),true);
          }
  return(ret);
}

global func FxFireTimer(obj,iNumber,iTime)
{
  if(EffectVar(RDW_Firelight_Var,obj,iNumber))
    EffectVar(RDW_Firelight_Var,obj,iNumber)->Init(obj,0,0,(GetDefWidth(GetID(obj))
(GetCon(obj)-10)*4/100)+RandomX(-10,10),RGB(150,100,50),true);
  return(inherited(Par(), Par(1), Par(2), Par(3), Par(4), Par(5), Par(6), Par(7), Par(8), Par(9)));
}

global func FxFireStop(obj,iNumber,iReason,ftemp)
{
  if(!ftemp)
    if(EffectVar(RDW_Firelight_Var,obj,iNumber))
      RemoveObject(EffectVar(RDW_Firelight_Var,obj,iNumber));
  return(inherited(Par(), Par(1), Par(2), Par(3), Par(4), Par(5), Par(6), Par(7), Par(8), Par(9)));
}


Ich werde es mir jetzt noch genauer anschauen, aber vllt sieht ja einer von euch den entscheidenen Unterschied, warum das Script von Zapper für "burnto" Objekte nicht funktioniert hat, dieses Script es aber tut :slight_smile: