Functions to Deal with Clones

K.V.
27 Feb 2018, 02:53Hello!
Please add functions or suggest changes!
Thank you!
Revised functions:
<function name="GetDirectCloneChildren" parameters="parent, prototype" type="objectlist">
return (FilterByAttribute(GetDirectChildren(parent),"prototype", prototype))
</function>
<function name="IsCloneOf" parameters="object, prototype" type="boolean">
return (object.prototype = prototype)
</function>
<function name="ScopeReachableClonesOf" parameters="prototype" type="objectlist">
return (FilterByAttribute(ScopeReachable(), "prototype", prototype))
</function>
<function name="GetRandomReachableCloneOf" parameters="prototype" type="object">
PickOneObject (ScopeReachableClonesOf(prototype))
</function>
<function name="AnyReachableCloneGetBoolean" parameters="prototype, attribute" type="boolean">
return (ListCount(FilterByAttribute(ScopeReachableClonesOf(prototype), attribute, true))>0)
</function>
<!-- This function written by mrangel -->
<function name="GetReachableClonesWithBoolean" parameters="prototype, attribute" type="objectlist">
return (FilterByAttribute(ScopeReachableClonesOf(prototype), attribute, true))
</function>
mrangel
27 Feb 2018, 03:43In ReachableClonesGetBoolean, you're testing if one or more clones has that flag. In that case, once you found it there's no need to loop over the remaining clones (and there's actually no need to loop over all the reachable objects to find out if one is a clone. In this case, you can make it faster by:
<function name="ReachableClonesGetBoolean" parameters="prototype, attribute" type="boolean">
foreach (o, ScopeReachable()) {
if (HasObject(o, "prototype")) {
if (GetBoolean(o,attribute)) {
if (o.prototype = prototype) {
return (true)
}
}
}
}
return (false)
</function>
However, I'm not sure what you'd use this function for. Every case I can think of, it would be more useful to return a list of clones with that attribute; or the number of them. In which case you can't stop as soon as you find one, so you'd do:
<function name="GetReachableClonesWithBoolean" parameters="prototype, attribute" type="objectlist">
return (FilterByAttribute(ScopeReachableClones(), attribute, true))
</function>

K.V.
27 Feb 2018, 11:46Aha!
Good stuff!
ReachableClonesGetBoolean()
I changed it to return the first time it finds a clone with the attribute set to true.
This is to quickly check if the player has access to something like a cloned lantern which is currently switched on.
I've got ScopeReachableClones()
to return the object list.

K.V.
27 Feb 2018, 16:29NOTE: ReachableClonesGetBoolean()
has recently been changed to AnyReachableCloneGetBoolean()
.
The purpose of ReachableClonesGetBoolean()
?
We have a friend who is a text-processor abuser.
This anonymous person is also very much into cloning.
There is so much code written at this point, going back and doing away any text-processor stuff is out of the question.
...but we can replace bits and pieces to make things work.
E.g.,
Say there is a lamp
object in an out of world room. It's sole purpose is to be cloned.
Now, at some point during play, we want to know if a clone of lamp which is reachable is switched on.
There are many ways to approach this, I know, but the code consists of text-processor stuff nested inside each other numerous times and strung together more intricately than ... well, than I've ever seen! And it all works, except for a few bits concerning clones.
So, where there is something like:
{either lamp.switchedon:but at least you've got the lamp providing light.|and it's too bad you haven't switched that lamp on!}
...we could put:
{either "+ReachableClonesGetBoolean(lamp,"switchedon")+":but at least you've got the lamp providing light.|and it's too bad you haven't switched that lamp on!}
mrangel
27 Feb 2018, 17:13Hmm ... very specific case there. I can come up with a few more edge cases where that function could be useful. But they all seem to be tied in with hysterical raisins.
Talon
27 Feb 2018, 17:29This looks like some very useful stuff, Im notorious for using clones(Generating npcs/monsters and so on) having functions to help work with em can only help
