Page 1 of 1

Using typFind to ease extension interoperability

Posted: Sat May 26, 2012 11:37 am
by Star Weaver
Hi! Quick little fun trick I found out about. (typFind (cat "* +unid:" &someUnid;)) returns a list containing only the unid you gave it if the type that that unid represents exists in the current game environment, or 'nil' if it does not.

You can't do this check in <Globals> because it's likely not all types have been defined yet, but you can do it from a run-once event a-la:

Code: Select all

<StationType unid="&stWhatever;" virtual="True">
  <Events>
    <OnGlobalPlayerEnteredSystem>
      (block nil
        (if (not (typIncGlobalData &stWhatever; 'done 1)) (block nil
          (setq myGlobalUnidList (filter myGlobalUnidList unid (typFind (cat "* +unid:" unid))))
        ))
      )
    </OnGlobalPlayerEnteredSystem>
  </Events>
</StationType>
(myGlobalUnidList to be supplied by reader)

Filter works here without opening the returned list because of two things:
  • A list with any items in it counts as a true value when given to something requiring a boolean input
  • An empty list or nil, which are actually interchangeable, count as a false value when ....