World Fetcher

Fetches and filters OSRS world information for world selection.

Credits: Developed by TazE Acknowledgements: Thanks to BigAussie for initial world scraper prototype

Getting Started

Basic example for finding a suitable world:

var
  BestWorld: TWorldInfo;
begin
  // Setup WorldFetcher with default settings
  WorldFetcher.Setup();

  // Fetch all available worlds
  if WorldFetcher.FetchAll() then
  begin
    // Find the best world (excludes dangerous/restricted by default)
    BestWorld := WorldFetcher.FindBestWorld();
    WriteLn('Best world: ', BestWorld.WorldNumber, ' with ', BestWorld.PlayerCount, ' players');
  end;
end;

Example for checking skill requirements:

var
  WorldInfo: TWorldInfo;
begin
  // Check a specific world
  WorldInfo := WorldFetcher.GetWorldInfo(420, False);

  if WorldInfo.MinSkillTotal > 0 then
    WriteLn('World ', WorldInfo.WorldNumber, ' requires ',
            WorldInfo.MinSkillTotal, ' total level')
  else if WorldInfo.Activity = WA_DANGEROUS then
    WriteLn('World ', WorldInfo.WorldNumber, ' is a PvP world - avoid!')
  else
    WriteLn('World ', WorldInfo.WorldNumber, ' is suitable');
end;

type EWorldType

EWorldType = enum(FREE_TO_PLAY, MEMBERS);

An enumeration representing the membership type of a world.


type EWorldActivity

EWorldActivity = enum(NORMAL, DANGEROUS, RESTRICTED, SKILL_TOTAL);

An enumeration representing world activity categories.


type EWorldLocation

EWorldLocation = enum(GERMANY, UNITED_KINGDOM, UNITED_STATES, AUSTRALIA);

An enumeration representing the geographical location of world servers.


type EWorldSort

EWorldSort = enum(WORLD_NUMBER, PLAYER_COUNT_ASC, PLAYER_COUNT_DESC, PING_ASC, PING_DESC);

An enumeration for sorting world lists.


type TWorldInfo

Contains comprehensive information about a single game world.

  • WorldNumber: The unique world number (e.g., 301, 302).

  • Location: The geographical location of the world server.

  • PlayerCount: Current number of players online (-1 if unavailable).

  • WorldType: Whether the world is free-to-play or members-only.

  • Activity: Activity category (Normal, Dangerous, Restricted, Skill Total).

  • ActivityString: Original activity description from the world list.

  • MinSkillTotal: Minimum skill total required (0, 500, 750, 1250, 1500, 1750, 2000, 2200).

  • Ping: Round-trip time in milliseconds (-1 if not measured).

  • LastCheck: Timestamp when this information was last updated.


type TSettings

Configurable settings for filtering and scoring worlds in FindBestWorld.

  • MaxPing: Maximum acceptable ping in milliseconds.

  • MaxPlayers: Maximum acceptable player count.

  • MinPlayers: Minimum acceptable player count.

  • ExcludeActivities: Array of activities to exclude from results.

  • ExcludeWorlds: Array of specific world numbers to exclude.

  • ExcludeLocations: Array of locations to exclude.

  • ExcludeTypes: Array of world types to exclude.

  • IncludeActivities: If set, ONLY worlds with these activities are considered.

  • IncludeLocations: If set, ONLY worlds in these locations are considered.

  • PingWeight: Weight factor for ping in scoring (0.0-1.0).

  • PlayerWeight: Weight factor for player count in scoring (0.0-1.0).

  • PingNormalize: Normalization factor for ping values.

  • PlayerNormalize: Normalization factor for player count values.


type TWorldFetcher

The main record for fetching and managing world information.

  • Worlds: Cached array of world information.

  • LastFetched: Timestamp of the last successful fetch operation.

  • Settings: Default search settings for this instance.


TWorldFetcher.Setup

procedure TWorldFetcher.Setup();

Setup WorldFetcher with default search settings. Override this method to customize settings.


TWorldFetcher.PingWorld

function TWorldFetcher.PingWorld(WorldNum: Int32): Int32;

Measures the round-trip time (ping) to a specific world server.

Example:

Ping := WorldFetcher.PingWorld(301);
WriteLn('World 301 ping: ', Ping, 'ms');

TWorldFetcher.GetWorldInfo

function TWorldFetcher.GetWorldInfo(WorldNum: Int32; IncludePing: Boolean = False): TWorldInfo;

Fetches information for a specific world from the official server list.

Parameters

  • WorldNum: The world number to fetch.

  • IncludePing: Whether to measure ping (default: False).

Returns

  • TWorldInfo record with the world’s data.

Example:

WorldInfo := WorldFetcher.GetWorldInfo(301, True);
WriteLn('World 301: ', WorldInfo.PlayerCount, ' players, ', WorldInfo.Ping, 'ms ping');

TWorldFetcher.Fetch

function TWorldFetcher.Fetch(WorldNumbers: TIntegerArray): Boolean;

Fetches information for multiple specific worlds in a single HTTP request. Results are stored in the Worlds array.

Example:

if WorldFetcher.Fetch([301, 302, 303]) then
  WriteLn('Fetched ', Length(WorldFetcher.Worlds), ' specific worlds');

TWorldFetcher.FetchAll

function TWorldFetcher.FetchAll(): Boolean;

Fetches information for all available worlds from the official server list. Results are stored in the Worlds array.

Returns

  • True if the fetch was successful, False otherwise.

Example:

if WorldFetcher.FetchAll() then
  WriteLn('Fetched ', Length(WorldFetcher.Worlds), ' worlds');

TWorldFetcher.GetAvailableWorlds

function TWorldFetcher.GetAvailableWorlds(): TIntegerArray;

Fetches and returns all currently available world numbers from the official server list. This method performs a fresh HTTP request each time it’s called.

Example:

WorldNumbers := WorldFetcher.GetAvailableWorlds();
WriteLn('Found ', Length(WorldNumbers), ' available worlds');

TWorldFetcher.GetWorld

function TWorldFetcher.GetWorld(WorldNum: Int32): TWorldInfo;

Retrieves cached information for a specific world.

Example:

CachedWorld := WorldFetcher.GetWorld(301);
if CachedWorld.WorldNumber > 0 then
  WriteLn('World 301 has ', CachedWorld.PlayerCount, ' players');

TWorldFetcher.FilterByType

function TWorldFetcher.FilterByType(WorldType: EWorldType): array of TWorldInfo;

Filters the cached worlds by membership type.

Example:

F2PWorlds := WorldFetcher.FilterByType(EWorldType.FREE_TO_PLAY);

TWorldFetcher.FilterByLocation

function TWorldFetcher.FilterByLocation(Location: EWorldLocation): array of TWorldInfo;

Filters the cached worlds by server location.

Example:

GermanWorlds := WorldFetcher.FilterByLocation(EWorldLocation.WL_GERMANY);

TWorldFetcher.FilterWorldsByPing

function TWorldFetcher.FilterWorldsByPing(MinPing, MaxPing: Int32): array of TWorldInfo;

Filters the cached worlds by ping range. Only includes worlds with valid ping measurements.

Example:

LowPingWorlds := WorldFetcher.FilterWorldsByPing(0, 50);
WriteLn('Found ', Length(LowPingWorlds), ' worlds with ping < 50ms');

TWorldFetcher.FilterByPlayerCount

function TWorldFetcher.FilterByPlayerCount(MinPlayers, MaxPlayers: Int32): array of TWorldInfo;

Filters the cached worlds by player count range.

Example:

MediumWorlds := WorldFetcher.FilterByPlayerCount(200, 800);

TWorldFetcher.FilterByActivity

function TWorldFetcher.FilterByActivity(Activity: EWorldActivity): array of TWorldInfo;

Filters the cached worlds by activity type.

Example:

SkillWorlds := WorldFetcher.FilterByActivity(EWorldActivity.SKILL_TOTAL);

TWorldFetcher.FilterBySettings

function TWorldFetcher.FilterBySettings(Settings: TSettings): array of TWorldInfo;

Applies all filter criteria from the provided settings to return matching worlds.

Example:

Settings.IncludeLocations := [WL_GERMANY, WL_UNITED_KINGDOM];
Settings.ExcludeActivities := [WA_DANGEROUS, WA_RESTRICTED];
Worlds := WorldFetcher.FilterBySettings(Settings);

TWorldFetcher.GetFilteredWorlds

function TWorldFetcher.GetFilteredWorlds(): array of TWorldInfo;

Helper method that applies the instance’s Settings to filter cached worlds.

Example:

WorldFetcher.Settings.IncludeLocations := [WL_UNITED_STATES];
Worlds := WorldFetcher.GetFilteredWorlds();

TWorldFetcher.FindBestWorld

function TWorldFetcher.FindBestWorld(): TWorldInfo;

Finds the best world based on the search settings configured in Setup.

Example:

BestWorld := WorldFetcher.FindBestWorld();
if BestWorld.WorldNumber > 0 then
  WriteLn('Best world: ', BestWorld.WorldNumber);

TWorldFetcher.FindLowestPingWorld

function TWorldFetcher.FindLowestPingWorld(): TWorldInfo;

Finds the world with the lowest ping from the cached data. Note: Only considers worlds with valid ping measurements (> 0).

Example:

LowestPing := WorldFetcher.FindLowestPingWorld();
if LowestPing.WorldNumber > 0 then
  WriteLn('Best ping: World ', LowestPing.WorldNumber, ' (', LowestPing.Ping, 'ms)');

TWorldFetcher.FindLowestPlayerWorld

function TWorldFetcher.FindLowestPlayerWorld(): TWorldInfo;

Finds the world with the lowest player count from the cached data.

Example:

EmptyWorld := WorldFetcher.FindLowestPlayerWorld();
WriteLn('Least crowded: World ', EmptyWorld.WorldNumber, ' (', EmptyWorld.PlayerCount, ' players)');

TWorldFetcher.SortWorlds

function TWorldFetcher.SortWorlds(Worlds: array of TWorldInfo; worldSort: EWordSort): array of TWorldInfo;

Sorts an array of worlds according to the specified criteria.

Example:

SortedWorlds := WorldFetcher.SortWorlds(FilteredWorlds, SORT_PLAYER_COUNT_ASC);

var WorldFetcher

var WorldFetcher: TWorldFetcher;

Global instance of TWorldFetcher for convenient access to world fetching functionality.