Before gates on underground layer didn't had any channel assigned and of course any function that attempt to check -1 channel caused crash.
Also I find out that at point postInit executed It's possible to get mutable gamestate via gameState() callback so we don't need to pass it there.
Now CGTeleport is not publicly available handler, but generic class for teleport channels usage.
Teleport channels are stored as part of information about the map.
TeleportChannel is structure that contain two vectors of entrances and exits for certain teleport channel. It's also store passability state independently which almost only useful for Player and AI as they can't know if channel passible or not until enough entrances / exits are visible or server passed them information that certain channel is impassible when they visited entrance.
ETeleportChannelType is determined by checking intersection between entrances and exit vectors or checking their size:
- IMPASSABLE: one of vectors empty or only one entrance id is same as only one exit id.
- BIDIRECTIONAL: contents of both vectors is exactly the same.
- UNIDIRECTIONAL: contents of both vectors do not intersect.
- MIXED: contents of vectors only partially intersect. Not currently used; added for future modding.
This function shouldn't be called if quest type is MISSION_NONE as this type used for quest that don't have text yet.
For example Keymaster`s border guards in H3 didn't add any entries to Quest Log so there is no text for them or at least it's not defined how to use it in VCMI.
Now state of adventure map objects that use this handler will be saved properly and they'll work as indended after save loaded. Affect following objects: Buoy, Swan Pond, Faerie Ring, etc.
- fixed evaluation of bank thread by AI (1850)
- fixed crash on evaluating bank threat after loading from save (1830)
- fixed typo in bank config. TODO: schema?