Using typFind to ease extension interoperability

This is a moderated forum that collects tutorials, guides, and references for creating Transcendence extensions and scripts.
Post Reply
User avatar
Star Weaver
Militia Commander
Militia Commander
Posts: 311
Joined: Sun Nov 07, 2010 10:20 pm
Location: . . . between the stars and the warm black sky . . .

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 ....
Image
Image
Image
Post Reply