danke, vermutlich ist das obere richtig, aber ich kam nicht wirklich weit genug, um das beurteilen zu können.
Wir haben hier in dem Thread ja dafür gesorgt, dass auch Fundamente repariert werden können. Dasselbe wollte ich nun auch für das abreißen machen. Das Problem bei dem jetzigen Skript ist halt, dass das Suchfenster offensichtlich auf alles hinter dem Clonk beschränkt ist. Da sich das Fundament aber unter dem Clonk befindet, kann es nicht erfasst werden. Das skript sieht folgendermaßen aus:
/* Gebäude-Abriss */
public func ContextDestruction()
{
[Abreißen|Image=SYF1|Condition=BackAnything]
var obj = BackAnything();
if (!obj) return(1);
CreateMenu(SYF1);
AddMenuItem("%s abreißen","DoDestruction",GetID(obj),0,0,obj);
AddMenuItem("Zurück","NoDestruction",SYCC);
}
private func BackBuilding()
{
var obj;
while (obj = FindObjectOwner(0,GetOwner(), -1,+9,0,0, GetDefCoreVal("Construction", "DefCore",GetID(obj)), 0,0,obj))
// if (GetCategory(obj) & C4D_Structure())
// if (GetCon(obj) >= 100)
if (GetDefCoreVal("Construction", "DefCore",GetID(obj)) != 0)
if (!FindObject(DSTR,0,0,0,0,0,"Destruct",obj))
return(obj);
return(0);
}
private func BackConstruct()
{
var obj;
while (obj = FindObjectOwner(0,GetOwner(), -20,+8,40,5, OCF_Construct(), 0,0,obj))
// if (GetCategory(obj) & C4D_Structure())
if (!FindObject(DSTR,0,0,0,0,0,"Destruct",obj))
return(obj);
obj = 0;
while (obj = FindObjectOwner(0,GetOwner(), -1,+9,0,0, OCF_Construct(), 0,0,obj))
// if (GetCategory(obj) & C4D_Structure())
if (!FindObject(DSTR,0,0,0,0,0,"Destruct",obj))
return(obj);
return(0);
}
private func BackAnything()
{
var obj = BackBuilding();
if (obj) return(obj);
return(BackConstruct());
}
private func DoDestruction(par0, target)
{
CreateObject(DSTR)->DoDestruction(target);
}
private func NoDestruction() {}
Wenn ich "FindObject(..." verwende, dann gibt es wie schon von alex geschrieben ein array aus. Allerdings wird ein Objekt erwartet. Deswegen wollte ich "Findobject2(..." draus machen, das geht aber nur, wenn das skript in strict2 geschrieben ist, was nicht der Fall ist und viele Fehler verursacht, wenn ich es einfach zu strict 2 mache.
Also fallen mir nun 3 Optionen ein:
1. Ich ändere das alles so, dass es auch mit einem array umgehen kann und muss dafür vermutlich alles neu machen.
2. ich lagere dieses Abriss Skript aus, sodass ich strict2 daraus machen kann, ohne allen vorhergien zu Schaden.
3. Ich lasse es so wie es ist und ändere nur den Suchradius, sodass auch Fundamente erfasst werden können.
Mir persönlich wäre die dritte Variante am liebsten, weil sie am unkompliziertesten ist und am schnellsten geht und ich eure Zeit nicht weiter mit diesem kleinen Thema rauben muss und wir zu "wichtigeren" Dingen kommen könne.
Wie ändere ich in dem vorhandenen Script also, dass nicht nur hinter, sondern auch etwas über/unter/neben dem Clonk gesucht wird?