===== World / Map Functions ===== This group collects a few different sets of functions relating to the world - - Functions for converting co-ordinates from map ('tile') to world scale - Functions for finding out how much of a particular object can be found in specified locations - Functions for controlling proximity ranges, where events are triggered when a player enters a particular region of the world ==== sysGetTileCenter ==== ^ Format | sysGetTileCenter ( World_X_or_Y )| ^ Description | Returns the world coordinate value for the center of the map tile nearest to the specified position| ^ Returns | World coordinate of tile center | //Example//: Event( "UseItem", "TileTeleport" ) { $tileCenterX = sysGetTileCenter( $gPlayerWorldX ) $tileCenterY = sysGetTileCenter( $gPlayerWorldY ) *setposworld %PLAYER% $tileCenterX $tileCenterY } ==== sysMapToWorld ==== ^ Format | sysMapToWorld ( Map_X_or_Y )| ^ Description | Converts a map coordinate to a world coordinate| ^ Returns | World coordinate | //Notes//: There are 2 coordinate systems used in the game ; Map Coordinates range from 0 to 255 (for the default map size), 0 to 511 or 0 to 1023 (if using a larger map size) and they correspond to the 'tiles' that make up the landscape. World coordinates are in centimeters. ==== sysWorldToMap ==== ^ Format | sysWorldToMap ( Map_X_or_Y )| ^ Description | Converts a world coordinate to a map coordinate| ^ Returns | Nearest map coordinate value | ==== sysGetBuildingAtWorldPos ==== ==== sysWorldGetNumBuildingsOfType ==== ^ Format | sysWorldGetNumBuildingsOfType( BuildingType )| ^ Description | Returns the number of buildings of this type currently existing within the world. Useful for when you want to script a system that limits the number of a particular type of building | ^ Returns | Number of this type of building currently in the world | //Example//: Event( "PlaceAnyBuilding", "" ) { $nBuildingType = $gParam[1] $numInWorld = sysWorldGetNumBuildingsOfType( $nBuildingType ) if ( $numInWorld >= 1 ) { *msg %PLAYER% There can only be 1 of each type of building in the world CancelTransaction() } else { $valid = sysIsBuildingPositionValid( $nBuildingType ) if ( $valid = 1 ) { $buildingName = sysGetTextEntry() $constrAmount = -1 $didAdd = sysAddBuildingWorld( $nBuildingType,$gPlayerID,$gPlayerWorldX,$gPlayerWorldY,$buildingName,$constrAmount ) } } } ==== sysGetNearestForest ==== ==== sysGetNearestPlayer ==== ^ Format | sysGetNearestPlayer( WorldX, WorldY )| ^ Description | Returns the ID of the player closest to the specified world coordinate | ^ Returns | Player ID | //Example//: $kSpecialBuildingRecordNum = 10 Event( "UseItem", "Plunger" ) { SetBuildingContext( $kSpecialBuildingRecordNum ) $posX = $gBuildingWorldX $posY = $gBuildingWorldY $targetPlayerID = sysGetNearestPlayer( $posX, $posY ) $targetPlayerName = sysGetPlayerName( $targetPlayerID ) *say %PLAYER% used the plunger. The person closest to the special building was $targetPlayerName *explodebuilding $kSpecialBuildingRecordNum } ==== sysActivateBuildingProximityEvent ==== ''**sysActivateBuildingProximityEvent( buildingID, range )**'' - Activates a proximity trigger for the current player on the specified buildingID. \\ Used to trigger 4 different events:\\ Event( "BuildingIDProxEnter", "BuildingID") and if that doesnt exist..\\ Event( "BuildingProxEnter", "")\\ and the reverse..\\ Event( "BuildingIDProxLeave", "BuildingID") and if that doesnt exist..\\ Event( "BuildingProxLeave", "")\\ ==== sysDeactivateBuildingProximityEvent ==== ''**sysDeactivateBuildingProximityEvent( buildingID )**'' ==== sysActivateRangeEvent ==== ''**sysActivateRangeEvent( eventID, worldX, worldY, range )**'' - Activates a proximity trigger for the current player using a world coordinate. Atm, eventID is not used, only one range event can be active for the player at any one time. mm, atm seems to only triggers the event "RangeLeave" when a player leaves the range. curious. ==== sysDeactivateRangeEvent ==== ==== sysIsInScriptZone ==== ''**sysIsInScriptZone( MapX, MapY, ZoneIDNum )**'' used to query if the specified map coord is within the specified 'ScriptZone'. Script zones are added via the F10 world editor. ==== sysNumPlayersInBuildZone ==== ==== sysNumPlayersInRCMode ==== ==== sysNumPlayersInScriptZone ==== ''**sysNumPlayersInScriptZone( ScriptZoneIDNum )**'' returns the number of players currently within the specified ScriptZone. \\ Not yet functional: === sysActivateLocalProximityEvent === === sysDeactivateLocalProximityEvent ===