ich möchte eine Axt machen, mit der man bereits gefällte Bäume zerlegen kann. Dabei soll der Clonk dann einfach die Chop Action ausführen. Z.b 5 sekunden für jedes Stück Holz im Baum.
Nur wie sorge ich dafür, dass der Clonk x Sekunden lang die Aktion Chop ausführt?
protected func Activate(object pByObj)
{
var ptree = FindObject2(Find_Func("IsTree"),Find_Distance(20));
if (!ptree->~IsStanding())
{
var iWoodCount = ptree->GetComponent(WOOD);
ObjectSetAction(pByObj, "Chop",ptree); // soll noch auf x sekunden verlängert werden
RemoveObject(ptree);
for(var i=0;i<=iWoodCount;i++)
CreateObject (WOOD, 0, 0, -1);
return;
}
else return(_inherited());
}
so wie die funktion jetzt istm scheint die chop funktion garnicht ausgeführt zu werden... jedenfalls sieht man den clonk nicht ausholen, sondern der baum verwandelt sich sofort in holz.
(im Siedelzubehör Pack von Wolli, welches recht neu auf ccan ist, gibt es zwar so eine Axt, aber sie verwendet die nicht existierende Funktion "AxeDown", weshalb sie nicht funktioniert (genauso wie die Wolken, die ein Fehler haben... wundert mich, dass das da noch keiner angemerkt hat)
habs gelöst, indem ich eine neue Aktion erstellt habe, mit denselben Animationen wie die Chop Aktion. Offenbar gibt es wirgendwo irgendwas in der Chop Aktion, die dafür sorgt, dass die aktion auffhört, wenn kein zu fällender Baum in der nähe ist.
Mit der neuen Aktion kann ich einfach sagen ObjectSetAction(pByObj, "AxeDown",ptree); und er macht es so lange, bis ich ihm sage er soll aufhören.
Den Check ob er aufhören kann mache ich mit einem TimerCall in der Axt selbst. Der wird alle 5 sekunden aufgerufen, und wenn ein Clonk gerade damit AxeDown macht, dann wird ein Counter erhöht, sodass es 5 sekunden pro Stück holz dauert und dann der Baum zerlegt ist :)
Die Prozedur CHOP schaut, dass der Clonk einen Baum fällt und kann nicht ohne Actiontarget laufen.