Showing preview only (2,437K chars total). Download the full file or copy to clipboard to get everything.
Repository: runejs/server
Branch: develop
Commit: 3c1e6a757e73
Files: 488
Total size: 31.1 MB
Directory structure:
gitextract__j1tb7oh/
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.md
│ │ ├── content-feature-plugin.md
│ │ └── game-engine-feature.md
│ └── workflows/
│ └── build.yml
├── .gitignore
├── .swcrc
├── .vscode/
│ └── settings.json
├── CONTRIBUTING.md
├── Dockerfile
├── FEATURES.md
├── LICENSE
├── README.md
├── biome.json
├── cache/
│ ├── file-names.properties
│ ├── main_file_cache.dat0
│ ├── main_file_cache.dat1
│ ├── main_file_cache.dat2
│ ├── main_file_cache.idx0
│ ├── main_file_cache.idx1
│ ├── main_file_cache.idx10
│ ├── main_file_cache.idx11
│ ├── main_file_cache.idx12
│ ├── main_file_cache.idx2
│ ├── main_file_cache.idx255
│ ├── main_file_cache.idx3
│ ├── main_file_cache.idx4
│ ├── main_file_cache.idx5
│ ├── main_file_cache.idx6
│ ├── main_file_cache.idx7
│ ├── main_file_cache.idx8
│ └── main_file_cache.idx9
├── config/
│ ├── file-names.properties
│ └── server-config.example.json
├── data/
│ ├── config/
│ │ ├── combat-styles.json
│ │ ├── examine-item-data.yaml
│ │ ├── item-spawns/
│ │ │ └── lumbridge/
│ │ │ └── lumbridge.json
│ │ ├── items/
│ │ │ ├── barrows/
│ │ │ │ └── dharoks.json
│ │ │ ├── bolts.json
│ │ │ ├── bones.json
│ │ │ ├── containers.json
│ │ │ ├── currency.json
│ │ │ ├── equipment/
│ │ │ │ ├── amulets.json
│ │ │ │ ├── axes.json
│ │ │ │ ├── bows.json
│ │ │ │ ├── capes.json
│ │ │ │ ├── daggers.json
│ │ │ │ ├── darts.json
│ │ │ │ ├── halberd.json
│ │ │ │ ├── hammers.json
│ │ │ │ ├── hatchets.json
│ │ │ │ ├── hats.json
│ │ │ │ ├── javelins.json
│ │ │ │ ├── leather-armour.json
│ │ │ │ ├── longswords.json
│ │ │ │ ├── mauls.json
│ │ │ │ ├── pickaxes.json
│ │ │ │ ├── shortswords.json
│ │ │ │ ├── skillscapes.json
│ │ │ │ ├── slayer.json
│ │ │ │ ├── spears.json
│ │ │ │ ├── staffs.json
│ │ │ │ ├── standard-metals/
│ │ │ │ │ ├── adamant-armour.json
│ │ │ │ │ ├── black-armour.json
│ │ │ │ │ ├── bronze-armour.json
│ │ │ │ │ ├── bronze-weapons.json
│ │ │ │ │ ├── iron-armour.json
│ │ │ │ │ ├── iron-weapons.json
│ │ │ │ │ ├── mithril-armour.json
│ │ │ │ │ ├── mithril-weapons.json
│ │ │ │ │ ├── rune-armour.json
│ │ │ │ │ ├── rune-god-armour.json
│ │ │ │ │ ├── steel-armour.json
│ │ │ │ │ ├── steel-weapons.json
│ │ │ │ │ └── white-armour.json
│ │ │ │ ├── tiaras.json
│ │ │ │ ├── training.json
│ │ │ │ └── whips.json
│ │ │ ├── food.json
│ │ │ ├── holiday/
│ │ │ │ └── partyhats.json
│ │ │ ├── icons.json
│ │ │ ├── logs.json
│ │ │ ├── other.json
│ │ │ ├── quests/
│ │ │ │ ├── lost-city.json
│ │ │ │ └── witchs-potion.json
│ │ │ └── skills/
│ │ │ ├── artisan-tools.json
│ │ │ ├── baking.json
│ │ │ ├── cooking.json
│ │ │ ├── crafting/
│ │ │ │ ├── gems.json
│ │ │ │ └── jewelery-moulds.json
│ │ │ ├── firemaking.json
│ │ │ ├── fishing.json
│ │ │ ├── fletching/
│ │ │ │ ├── arrows.json
│ │ │ │ └── bolts.json
│ │ │ ├── herblore/
│ │ │ │ ├── herbs.json
│ │ │ │ ├── ingredients.json
│ │ │ │ └── tools.json
│ │ │ ├── herblore.json
│ │ │ ├── mining.json
│ │ │ ├── prayer.json
│ │ │ └── runecrafting.json
│ │ ├── music/
│ │ │ └── musicRegions.json
│ │ ├── npc-spawns/
│ │ │ ├── alkharid/
│ │ │ │ └── alkharid-general.json
│ │ │ ├── ardougne/
│ │ │ │ ├── bankers.json
│ │ │ │ ├── guards.json
│ │ │ │ └── market.json
│ │ │ ├── camelot/
│ │ │ │ └── bankers.json
│ │ │ ├── canifis/
│ │ │ │ └── bankers.json
│ │ │ ├── catherby/
│ │ │ │ └── bankers.json
│ │ │ ├── draynor/
│ │ │ │ └── bankers.json
│ │ │ ├── edgeville/
│ │ │ │ └── bankers.json
│ │ │ ├── falador/
│ │ │ │ ├── bankers.json
│ │ │ │ └── guards.json
│ │ │ ├── keldagrim/
│ │ │ │ └── bankers.json
│ │ │ ├── lumbridge/
│ │ │ │ ├── bankers.json
│ │ │ │ ├── lumbridge-general.json
│ │ │ │ ├── lumbridge-goblins.json
│ │ │ │ └── lumbridge-sheep.json
│ │ │ ├── magebank/
│ │ │ │ └── bankers.json
│ │ │ ├── nardah/
│ │ │ │ └── bankers.json
│ │ │ ├── pestcontrol/
│ │ │ │ └── bankers.json
│ │ │ ├── portsarim/
│ │ │ │ └── port-sarim-general.json
│ │ │ ├── rimmington/
│ │ │ │ └── rimmington.json
│ │ │ ├── shilovillage/
│ │ │ │ └── bankers.json
│ │ │ ├── varrock/
│ │ │ │ ├── bankers.json
│ │ │ │ ├── blue-moon-inn.json
│ │ │ │ └── varrock-general.json
│ │ │ └── yanille/
│ │ │ └── bankers.json
│ │ ├── npcs/
│ │ │ ├── alkharid.json
│ │ │ ├── ardougne.json
│ │ │ ├── bankers.json
│ │ │ ├── barbarians.json
│ │ │ ├── general.json
│ │ │ ├── generic-humans.json
│ │ │ ├── goblins.json
│ │ │ ├── guards.json
│ │ │ ├── lumbridge.json
│ │ │ ├── port-sarim.json
│ │ │ ├── rimmington.json
│ │ │ ├── sheep.json
│ │ │ └── varrock.json
│ │ ├── scenery-spawns.yaml
│ │ ├── shops/
│ │ │ ├── alkharid/
│ │ │ │ ├── alkharid-gem-trader.json
│ │ │ │ ├── dommiks-crafting-store.json
│ │ │ │ ├── louies-armored-legs.json
│ │ │ │ └── ranaels-skirt-store.json
│ │ │ ├── lumbridge/
│ │ │ │ ├── bobs-axes.json
│ │ │ │ └── lumbridge-general-store.json
│ │ │ ├── portsarim/
│ │ │ │ └── bettys-magic-emporium.json
│ │ │ ├── shilo-village/
│ │ │ │ └── oblis-general-store.json
│ │ │ └── varrock/
│ │ │ └── zaffs-staffs.json
│ │ ├── travel-locations-data.yaml
│ │ ├── widgets.json
│ │ └── xteas/
│ │ └── 435.json
│ └── saves/
│ └── .gitkeep
├── docker-compose.yml
├── jest.config.ts
├── nodemon.json
├── package.json
├── src/
│ ├── engine/
│ │ ├── action/
│ │ │ ├── action-pipeline.ts
│ │ │ ├── hook/
│ │ │ │ ├── action-hook.ts
│ │ │ │ ├── hook-filters.test.ts
│ │ │ │ ├── hook-filters.ts
│ │ │ │ └── task.ts
│ │ │ ├── loader.ts
│ │ │ └── pipe/
│ │ │ ├── button.action.ts
│ │ │ ├── equipment-change.action.ts
│ │ │ ├── item-interaction.action.ts
│ │ │ ├── item-on-item.action.ts
│ │ │ ├── item-on-npc.action.ts
│ │ │ ├── item-on-object.action.ts
│ │ │ ├── item-on-player.action.ts
│ │ │ ├── item-on-world-item.action.ts
│ │ │ ├── item-swap.action.ts
│ │ │ ├── magic-on-npc.action.ts
│ │ │ ├── move-item.action.ts
│ │ │ ├── npc-init.action.ts
│ │ │ ├── npc-interaction.action.ts
│ │ │ ├── object-interaction.action.ts
│ │ │ ├── player-command.action.ts
│ │ │ ├── player-init.action.ts
│ │ │ ├── player-interaction.action.ts
│ │ │ ├── prayer.action.ts
│ │ │ ├── region-change.action.ts
│ │ │ ├── spawned-item-interaction.action.ts
│ │ │ ├── task/
│ │ │ │ ├── queueable-task.ts
│ │ │ │ ├── walk-to-actor-plugin-task.ts
│ │ │ │ ├── walk-to-item-plugin-task.ts
│ │ │ │ └── walk-to-object-plugin-task.ts
│ │ │ └── widget-interaction.action.ts
│ │ ├── config/
│ │ │ ├── config-handler.ts
│ │ │ ├── data-dump.ts
│ │ │ ├── directories.ts
│ │ │ ├── item-config.ts
│ │ │ ├── item-spawn-config.ts
│ │ │ ├── music-regions-config.ts
│ │ │ ├── npc-config.ts
│ │ │ ├── npc-spawn-config.ts
│ │ │ ├── quest-config.ts
│ │ │ ├── shop-config.testskip.ts
│ │ │ └── shop-config.ts
│ │ ├── interface/
│ │ │ └── interface-state.ts
│ │ ├── net/
│ │ │ ├── inbound-packet-handler.ts
│ │ │ ├── inbound-packets/
│ │ │ │ ├── add-friend.packet.ts
│ │ │ │ ├── add-ignore.packet.ts
│ │ │ │ ├── blinking-tab-click.packet.ts
│ │ │ │ ├── button-click.packet.ts
│ │ │ │ ├── character-design.packet.ts
│ │ │ │ ├── chat.packet.ts
│ │ │ │ ├── command.packet.ts
│ │ │ │ ├── drop-item.packet.ts
│ │ │ │ ├── examine.packet.ts
│ │ │ │ ├── item-interaction.packet.ts
│ │ │ │ ├── item-on-item.packet.ts
│ │ │ │ ├── item-on-npc.packet.ts
│ │ │ │ ├── item-on-object.packet.ts
│ │ │ │ ├── item-on-player.packet.ts
│ │ │ │ ├── item-on-world-item.packet.ts
│ │ │ │ ├── item-swap.packet.ts
│ │ │ │ ├── junk.packet.ts
│ │ │ │ ├── magic-attack.packet.ts
│ │ │ │ ├── npc-interaction.packet.ts
│ │ │ │ ├── number-input.packet.ts
│ │ │ │ ├── object-interaction.packet.ts
│ │ │ │ ├── pickup-item.packet.ts
│ │ │ │ ├── player-interaction.packet.ts
│ │ │ │ ├── private-message.packet.ts
│ │ │ │ ├── remove-friend.packet.ts
│ │ │ │ ├── remove-ignore.packet.ts
│ │ │ │ ├── social-button.packet.ts
│ │ │ │ ├── walk.packet.ts
│ │ │ │ ├── widget-interaction.packet.ts
│ │ │ │ └── widgets-closed.packet.ts
│ │ │ ├── isaac.ts
│ │ │ ├── outbound-packet-handler.ts
│ │ │ └── packet.ts
│ │ ├── plugins/
│ │ │ ├── content-plugin.ts
│ │ │ ├── loader.ts
│ │ │ └── reload-content.ts
│ │ ├── task/
│ │ │ ├── README.md
│ │ │ ├── impl/
│ │ │ │ ├── actor-actor-interaction-task.ts
│ │ │ │ ├── actor-landscape-object-interaction-task.ts
│ │ │ │ ├── actor-task.ts
│ │ │ │ ├── actor-teleport-task.ts
│ │ │ │ ├── actor-walk-to-task.ts
│ │ │ │ └── actor-world-item-interaction-task.ts
│ │ │ ├── task-scheduler.test.ts
│ │ │ ├── task-scheduler.ts
│ │ │ ├── task.test.ts
│ │ │ ├── task.ts
│ │ │ ├── types.ts
│ │ │ └── utils/
│ │ │ └── _testing.ts
│ │ ├── util/
│ │ │ ├── address.ts
│ │ │ ├── colors.ts
│ │ │ ├── data.ts
│ │ │ ├── error-handling.ts
│ │ │ ├── files.ts
│ │ │ ├── num.ts
│ │ │ ├── objects.ts
│ │ │ ├── queue.test.ts
│ │ │ ├── queue.ts
│ │ │ ├── strings.ts
│ │ │ ├── time.ts
│ │ │ └── varbits.ts
│ │ └── world/
│ │ ├── actor/
│ │ │ ├── actor.ts
│ │ │ ├── combat.ts
│ │ │ ├── dialogue.ts
│ │ │ ├── magic.ts
│ │ │ ├── metadata.ts
│ │ │ ├── npc.ts
│ │ │ ├── pathfinding.ts
│ │ │ ├── player/
│ │ │ │ ├── achievements.ts
│ │ │ │ ├── attack.ts
│ │ │ │ ├── cutscenes.ts
│ │ │ │ ├── dialogue-action.ts
│ │ │ │ ├── metadata.ts
│ │ │ │ ├── model.ts
│ │ │ │ ├── player-data.ts
│ │ │ │ ├── player.ts
│ │ │ │ ├── private-messaging.ts
│ │ │ │ ├── quest.ts
│ │ │ │ └── sync/
│ │ │ │ ├── actor-sync.ts
│ │ │ │ ├── npc-sync-task.ts
│ │ │ │ └── player-sync-task.ts
│ │ │ ├── prayer.ts
│ │ │ ├── skills.ts
│ │ │ ├── update-flags.ts
│ │ │ ├── util.ts
│ │ │ └── walking-queue.ts
│ │ ├── config/
│ │ │ ├── animation-ids.ts
│ │ │ ├── examine-data.ts
│ │ │ ├── gfx-ids.ts
│ │ │ ├── harvest-tool.ts
│ │ │ ├── harvestable-object.ts
│ │ │ ├── item-ids.ts
│ │ │ ├── object-ids.ts
│ │ │ ├── scenery-spawns.ts
│ │ │ ├── songs.ts
│ │ │ ├── sound-ids.ts
│ │ │ ├── travel-locations.ts
│ │ │ └── widget.ts
│ │ ├── direction.ts
│ │ ├── index.ts
│ │ ├── instances.ts
│ │ ├── items/
│ │ │ ├── item-container.ts
│ │ │ ├── item.ts
│ │ │ └── world-item.ts
│ │ ├── map/
│ │ │ ├── chunk-manager.ts
│ │ │ ├── chunk.ts
│ │ │ ├── collision-map.ts
│ │ │ ├── landscape-object.ts
│ │ │ └── region.ts
│ │ ├── position.ts
│ │ ├── skill-util/
│ │ │ ├── glory-boost.ts
│ │ │ ├── harvest-roll.ts
│ │ │ └── harvest-skill.ts
│ │ ├── sound/
│ │ │ └── music.ts
│ │ ├── task.ts
│ │ └── world.ts
│ ├── plugins/
│ │ ├── buttons/
│ │ │ ├── logout-button.plugin.ts
│ │ │ ├── magic-attack.plugin.ts
│ │ │ ├── magic-teleports.plugin.ts
│ │ │ ├── player-emotes.plugin.ts
│ │ │ └── player-setting-button.plugin.ts
│ │ ├── combat/
│ │ │ └── combat-styles.plugin.ts
│ │ ├── commands/
│ │ │ ├── bank-command.plugin.ts
│ │ │ ├── camera-commands.plugin.ts
│ │ │ ├── clear-inventory-command.plugin.ts
│ │ │ ├── client-config-command.plugin.ts
│ │ │ ├── current-position-command.plugin.ts
│ │ │ ├── data-dump-command.plugin.ts
│ │ │ ├── dump-metadata-command.plugin.ts
│ │ │ ├── give-item-command.plugin.ts
│ │ │ ├── groups-debug.plugin.ts
│ │ │ ├── pathing-commands.plugin.ts
│ │ │ ├── player-animation-command.plugin.ts
│ │ │ ├── player-graphics-command.plugin.ts
│ │ │ ├── quest-list-command.plugin.ts
│ │ │ ├── region-debug-commands.plugin.ts
│ │ │ ├── reset-camera-command.plugin.ts
│ │ │ ├── sound-song-commands.plugin.ts
│ │ │ ├── spawn-npc-command.plugin.ts
│ │ │ ├── spawn-scenery-command.plugin.ts
│ │ │ ├── spawn-test-players-command.plugin.ts
│ │ │ ├── stat-commands.plugin.ts
│ │ │ ├── teleport-command.plugin.ts
│ │ │ ├── transform-command.plugin.ts
│ │ │ ├── travel-back-command.plugin.ts
│ │ │ ├── travel-command.plugin.ts
│ │ │ └── widget-commands.plugin.ts
│ │ ├── dialogue/
│ │ │ ├── dialogue-option.plugin.ts
│ │ │ └── item-selection.plugin.ts
│ │ ├── items/
│ │ │ ├── buckets/
│ │ │ │ ├── empty-container.plugin.ts
│ │ │ │ └── fill-container.plugin.ts
│ │ │ ├── capes/
│ │ │ │ └── skillcape-emotes.plugin.ts
│ │ │ ├── consumables/
│ │ │ │ └── eating.plugin.ts
│ │ │ ├── drop-item.plugin.ts
│ │ │ ├── equipment/
│ │ │ │ ├── equip-item.plugin.ts
│ │ │ │ ├── equipment-stats.plugin.ts
│ │ │ │ └── unequip-item.plugin.ts
│ │ │ ├── herblore/
│ │ │ │ └── clean-herb.ts
│ │ │ ├── move-item.plugin.ts
│ │ │ ├── pickup-item.plugin.ts
│ │ │ ├── pots/
│ │ │ │ └── empty-pot.plugin.ts
│ │ │ ├── rotten-potato/
│ │ │ │ ├── helpers/
│ │ │ │ │ ├── rotten-potato-helpers.ts
│ │ │ │ │ └── rotten-potato-travel.ts
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── rotten-potato-command-hook.ts
│ │ │ │ │ ├── rotten-potato-eat.ts
│ │ │ │ │ ├── rotten-potato-item-on-item.ts
│ │ │ │ │ ├── rotten-potato-item-on-player.ts
│ │ │ │ │ └── rotten-potato-peel.ts
│ │ │ │ └── rotten-potato.plugin.ts
│ │ │ ├── runecrafting/
│ │ │ │ └── tiaras.plugin.ts
│ │ │ ├── shopping/
│ │ │ │ ├── buy-from-shop.plugin.ts
│ │ │ │ ├── item-value.plugin.ts
│ │ │ │ └── sell-to-shop.plugin.ts
│ │ │ └── swap-items.plugin.ts
│ │ ├── music/
│ │ │ ├── music-regions.plugin.ts
│ │ │ └── music-tab.plugin.ts
│ │ ├── npcs/
│ │ │ ├── al-kharid/
│ │ │ │ ├── dommik-crafting-shop.plugin.ts
│ │ │ │ ├── gem-trader.plugin.ts
│ │ │ │ ├── karim.plugin.ts
│ │ │ │ ├── louie-armoured-legs.plugin.ts
│ │ │ │ └── ranael-super-skirt.plugin.ts
│ │ │ ├── falador/
│ │ │ │ └── custom-guards.plugin.ts
│ │ │ ├── lumbridge/
│ │ │ │ ├── bob.plugin.ts
│ │ │ │ ├── hans.plugin.ts
│ │ │ │ ├── lumbridge-farm-helpers.plugin.ts
│ │ │ │ └── shopkeeper.plugin.ts
│ │ │ ├── port-sarim/
│ │ │ │ └── betty.plugin.ts
│ │ │ └── varrock/
│ │ │ ├── blue-moon-inn.plugin.ts
│ │ │ ├── master-smithing-tutor.plugin.ts
│ │ │ ├── wilough.plugin.ts
│ │ │ └── zaff-superior-staffs.plugin.ts
│ │ ├── objects/
│ │ │ ├── bank/
│ │ │ │ ├── bank.plugin.ts
│ │ │ │ └── deposit-box.plugin.ts
│ │ │ ├── cows/
│ │ │ │ └── cow.plugin.ts
│ │ │ ├── crates/
│ │ │ │ └── crates.plugin.ts
│ │ │ ├── doors/
│ │ │ │ ├── door.plugin.ts
│ │ │ │ ├── double-door.plugin.ts
│ │ │ │ └── gate.plugin.ts
│ │ │ ├── dungeon-entrances/
│ │ │ │ └── taverly-dungeon-ladder.plugin.ts
│ │ │ ├── item-spawns/
│ │ │ │ └── take-axe.plugin.ts
│ │ │ ├── ladders/
│ │ │ │ └── ladder.plugin.ts
│ │ │ ├── mill/
│ │ │ │ ├── flour-bin.plugin.ts
│ │ │ │ ├── hopper-controls.plugin.ts
│ │ │ │ └── hopper.plugin.ts
│ │ │ └── pickables/
│ │ │ └── pickables.plugin.ts
│ │ ├── player/
│ │ │ ├── follow-player.plugin.js
│ │ │ ├── login-unlock-emotes.plugin.ts
│ │ │ ├── login-update-settings.plugin.ts
│ │ │ └── update-friends-list.plugin.ts
│ │ ├── quests/
│ │ │ ├── cooks-assistant-quest.plugin.ts
│ │ │ ├── goblin-diplomacy-tutorial/
│ │ │ │ ├── goblin-diplomacy-quest.plugin.ts
│ │ │ │ ├── melee-tutor-dialogue.ts
│ │ │ │ ├── runescape-guide-dialogue.ts
│ │ │ │ └── stage-handler.ts
│ │ │ ├── quest-journal.plugin.ts
│ │ │ └── witchs-potion-quest.plugin.ts
│ │ └── skills/
│ │ ├── construction/
│ │ │ ├── con-constants.ts
│ │ │ ├── home-saver.ts
│ │ │ ├── house.ts
│ │ │ ├── index.ts
│ │ │ ├── room-builder.ts
│ │ │ └── util.ts
│ │ ├── crafting/
│ │ │ ├── sheep-plugin.plugin.ts
│ │ │ └── spinning-wheel.plugin.ts
│ │ ├── firemaking/
│ │ │ ├── chance.ts
│ │ │ ├── data.ts
│ │ │ ├── firemaking-task.ts
│ │ │ ├── index.ts
│ │ │ ├── light-fire.ts
│ │ │ └── types.ts
│ │ ├── fletching/
│ │ │ ├── fletching-constants.ts
│ │ │ ├── fletching-types.ts
│ │ │ └── fletching.plugin.ts
│ │ ├── level-up-dialogue.plugin.ts
│ │ ├── mining/
│ │ │ ├── chance.ts
│ │ │ ├── mining-task.ts
│ │ │ ├── mining.plugin.ts
│ │ │ └── prospecting.plugin.ts
│ │ ├── prayer/
│ │ │ └── bury-bones.plugin.ts
│ │ ├── runecrafting/
│ │ │ ├── runecrafting-altar.plugin.ts
│ │ │ ├── runecrafting-constants.ts
│ │ │ ├── runecrafting-crafting.plugin.ts
│ │ │ ├── runecrafting-tiara.plugin.ts
│ │ │ └── runecrafting-types.ts
│ │ ├── skill-guides/
│ │ │ ├── Strength.json
│ │ │ ├── agility.json
│ │ │ ├── attack.json
│ │ │ ├── construction.json
│ │ │ ├── cooking.json
│ │ │ ├── crafting.json
│ │ │ ├── defence.json
│ │ │ ├── farming.json
│ │ │ ├── firemaking.json
│ │ │ ├── fishing.json
│ │ │ ├── fletching.json
│ │ │ ├── herblore.json
│ │ │ ├── hitpoint.json
│ │ │ ├── magic.json
│ │ │ ├── mining.json
│ │ │ ├── prayer.json
│ │ │ ├── ranged.json
│ │ │ ├── runecrafting.json
│ │ │ ├── skill-guide-config.ts
│ │ │ ├── skill-guides.plugin.ts
│ │ │ ├── slayer.json
│ │ │ ├── smithing.json
│ │ │ ├── thieving.json
│ │ │ └── woodcutting.json
│ │ ├── smithing/
│ │ │ ├── forging-constants.ts
│ │ │ ├── forging-task.ts
│ │ │ ├── forging-types.ts
│ │ │ ├── forging.plugin.ts
│ │ │ ├── smelting-constants.ts
│ │ │ ├── smelting-task.ts
│ │ │ ├── smelting-types.ts
│ │ │ └── smelting.plugin.ts
│ │ └── woodcutting/
│ │ ├── chance.ts
│ │ ├── index.ts
│ │ └── woodcutting-task.ts
│ └── server/
│ ├── game/
│ │ ├── game-server-config.ts
│ │ ├── game-server-connection.ts
│ │ └── game-server.ts
│ ├── gateway/
│ │ └── gateway-server.ts
│ └── runner.ts
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
node_modules
npm-debug.log
.gitignore
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.md
================================================
---
name: Bug Report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/content-feature-plugin.md
================================================
---
name: Content Feature/Plugin
about: New game content features or plugin requests
title: "[CONTENT]"
labels: enhancement, needs workshopping
assignees: ''
---
### Content/Plugin Description
> Example: As a player, I expect to receive a bucket of milk when I click to milk a cow while having a bucket in my inventory.
### Acceptance Criteria
> Any criteria required to consider this new plugin or feature completed.
- [ ] required item 1
- [ ] required item 2
- [ ] required item 3
## Additional Information
> Other additional details relevant to the new feature that were not described above.
================================================
FILE: .github/ISSUE_TEMPLATE/game-engine-feature.md
================================================
---
name: Game Engine Feature
about: New game engine or content API features
title: "[ENGINE] "
labels: needs workshopping, new feature
assignees: ''
---
### Game Engine Feature Description
> Example: As a plugin developer, I expect to be able to be able to hook into the player init event.
### Acceptance Criteria
> Any criteria required to consider this new feature completed.
- [ ] required item 1
- [ ] required item 2
- [ ] required item 3
## Additional Information
> Other additional details relevant to the new feature that were not described above.
================================================
FILE: .github/workflows/build.yml
================================================
name: Check & Build Project
on:
pull_request:
branches: [ master, develop, feature/** ]
push:
branches: [ master, develop ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '24.x'
- name: Install Node Modules
run: npm i
- name: Run Linter
run: npm run lint:fin
- name: Run Formatter
run: npm run format:fin
- name: Run Tests
run: npm run test:fin
- name: Run Typecheck
run: npm run typecheck
- name: Build Project
run: npm run build
================================================
FILE: .gitignore
================================================
node_modules
.DS_Store
/dist
/data/dump
/data/houses
/data/saves/*.json
/config/server-config.json
server-config.yaml
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories.ts and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
/.vs
/coverage/
================================================
FILE: .swcrc
================================================
{
"$schema": "https://swc.rs/schema.json",
"exclude": "node_modules/",
"sourceMaps": true,
"module": {
"type": "commonjs"
},
"jsc": {
"target": "esnext",
"baseUrl": "./src",
"paths": {
"@engine/*": ["./engine/*"],
"@plugins/*": ["./plugins/*"],
"@server/*": ["./server/*"]
},
"parser": {
"syntax": "typescript",
"tsx": false,
"decorators": true,
"dynamicImport": false
}
}
}
================================================
FILE: .vscode/settings.json
================================================
{
"editor.tabSize": 4,
"files.trimTrailingWhitespace": true,
"files.trimFinalNewlines": true,
"files.insertFinalNewline": true
}
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to RuneJS
RuneJS was created with the intention of utilizing JavaScript/TypeScript and Node's innovative features. RxJS was imported for reactive programming as well, opening up opportunities for easy content development. As such, there are a few things we're looking to avoid...
1. Direct ports/copying from Java servers
- This defeats the purpose of RuneJS by implementing basic flows that any regular Java-based server would use. Think outside the box and really utilize ES6, TypeScript, Node, and RxJS! :)
2. Additional/outside dependencies
- Sometimes additional dependencies cannot be avoided, but we'd like to avoid them as much as possible. RuneJS intends to be simple and easy for anyone to pick up, without requiring the user to set up any databases or additional third party systems.
- In some cases this is of course unavoidable, as such we'll handle them on a case-by-case basis.
Ultimately if you're looking to contribute, it's best to check in with us on Discord to see if we're already working on a specific feature or have plans for it already. Add us at **Tyn#0001**
## Code Style
Code style (linting and formatting) are handled by [Biome](https://biomejs.dev/). It is recommended that you install [the Biome extension for your IDE](https://biomejs.dev/guides/editors/first-party-extensions/).
Running `npm run fin` will perform all necessary checks (linting, formatting, typechecking and tests).
## Testing
Unit tests can be written using Jest. To execute the test suite, run `npm test`
- Test files should be located next to the file under test, and called `file-name.test.ts`
- Tests should use the `when / then` pattern made up of composable `describe` statements
- Make use of `beforeEach` to set up state before each test
After running the tests, you can find code coverage in the `./coverage/` folder.
### When / Then testing pattern
Tests should be broken down into a series of `describe` statements, which set up their own internal state when possible.
```ts
describe('when there is a player', () => {
let player: Player
beforeEach(() => {
player = createMockPlayer()
})
describe('when player is wearing a hat', () => {
beforeEach(() => {
player.equipment().set(0, someHatItem)
})
test('should return true', () => {
const result = isWearingHat(player)
expect(result).toEqual(true)
})
})
})
```
There are two main benefits to this kind of design:
- It serves as living documentation: from reading the `beforeEach` block you can clearly see how the prerequisite of "player is wearing a hat" is achieved
- It allows for easy expansion of test cases: future developers can add further
statements inside "when player is wearing a hat" if they want to make use of
that setup
================================================
FILE: Dockerfile
================================================
FROM node:24
WORKDIR /usr/src/app
COPY package.json ./
COPY package-lock.json ./
RUN apt update
RUN apt install -y libsdl-pango-dev
RUN npm ci
COPY src ./src
COPY tsconfig.json ./
COPY .swcrc ./
RUN npm run build
EXPOSE 43594
CMD [ "npm", "run", "start:standalone" ]
================================================
FILE: FEATURES.md
================================================
[](https://discord.gg/5P74nSh)

# RuneJS Feature List
## Game Server
* RSA + ISAAC ciphering :heavy_check_mark:
* Game Update Server :heavy_check_mark:
* Authentication Server :heavy_check_mark:
* Server side cache loading :heavy_check_mark:
* Client pathing validation via cache mapdata :heavy_check_mark:
* Item/object/npc definitions :heavy_check_mark:
* Packet queueing :heavy_check_mark:
### Technical Features
* Asynchronous server infrastructure w/ Promises & RxJS Observables
* A diverse TypeScript plugin system for easily writing new content based off of in-game actions
* A simplified JavaScript plugin system for quickly and easily bootstrapping game content
* Flexible quest and dialogue systems for more advanced content development
* Code compilation via Babel, offering more seamless compilation and redeployment of plugins
## Game World
* Private & group Player Instances :heavy_check_mark:
* Personal player instance objects and world items :heavy_check_mark:
* Bank :heavy_check_mark:
* Withdraw/Deposit 1,5,10,All :heavy_check_mark:
* As note :heavy_check_mark:
* Swap slot :heavy_check_mark:
* Insert mode: :heavy_check_mark:
* Deposit box :heavy_check_mark:
* Audio :yellow_square:
* Music :yellow_square:
* Playing music :heavy_check_mark:
* Music Regions :x:
* Music Player tab :x:
* Sounds :yellow_square:
* Playing sounds :heavy_check_mark:
* Sound effects for actions :yellow_square:
* Home Teleport :heavy_check_mark:
* Emotes :heavy_check_mark:
* Skillcape emotes :heavy_check_mark:
* Unlockable emotes w/ requirements :heavy_check_mark:
* Shop support :heavy_check_mark:
* Inventory support :heavy_check_mark:
* Swapping items :heavy_check_mark:
* Dropping items :heavy_check_mark:
* Picking up ground items :heavy_check_mark:
* Equipping items :heavy_check_mark:
* Doors/gates :yellow_square:
* NSEW doors :heavy_check_mark:
* Diagonal doors :yellow_square:
* Double doors :heavy_check_mark:
* Wooden gates :heavy_check_mark:
* Climbing ladders & stairs :yellow_square:
* Clue Scrolls :x:
### Quests
* Cook's Assistant :heavy_check_mark:
### Skills
* Combat :yellow_square:
* Melee :yellow_square:
* Ranged :x:
* Magic :x:
* Prayer :x:
* Cooking :x:
* Fletching :x:
* Fishing :x:
* Firemaking :yellow_square:
* Fire lighting :yellow_square:
* Chain fires w/ movement :yellow_square:
* Herblore :x:
* Agility :x:
* Thieving :x:
* Slayer :x:
* Farming :x:
* Runecrafting :x:
* Construction :x:
* Woodcutting :yellow_square:
* Formula for success :heavy_check_mark:
* Chopping Trees :heavy_check_mark:
* Axes :heavy_check_mark:
* Birds nests :heavy_check_mark:
* Stump ids :yellow_square:
* Canoes :x:
* Mining :yellow_square:
* Formula for success :heavy_check_mark:
* Mining ores :heavy_check_mark:
* Pickaxes :heavy_check_mark:
* Random gems :heavy_check_mark:
* Gem ores :heavy_check_mark:
* Essence mining :heavy_check_mark:
* Empty Rock ids :yellow_square:
* Crafting :yellow_square:
* Spinning wheel :heavy_check_mark:
* Smithing :yellow_square:
* Smelting ore to bars :heavy_check_mark:
* Forging :yellow_square:
* Correct items :heavy_check_mark:
* Hiding non-applicable items :yellow_square:
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
[](https://discord.gg/5P74nSh)
[](https://github.com/runejs/)
# RuneJS Game Server
RuneJS is a RuneScape game server written in TypeScript and JavaScript. The aim of this project is to create a game server that is both fun and easy to use, while also providing simple content development systems.
The game server currently runs a build of RuneScape from October 30th-31st, 2006 (game build #435). No other builds are supported at this time, but may become available in the future.
**RuneJS is completely open-source and open to all pull requests and/or issues. Many plugins have been added by contributor pull requests and we're always happy to have more!**

## Setup
### Prerequisites
- [`docker`](https://docs.docker.com/get-docker/) and [`docker-compose`](https://docs.docker.com/compose/install/)
- If on Windows, `docker-compose` comes with `docker`
### Running the Game Server
1. Copy the `config/server-config.example.json` and paste it into the same folder using the name `server-config.json`
2. Go into your new `server-config.json` file and modify your RSA modulus and exponent with the ones matching your game client
- You may also modify the server's port and host address from this configuration file
3. Build the docker image with `docker-compose build`
4. Run the game server with `docker-compose up`
The game server will spin up and be accessible via port 43594.
## Game Client
The [RuneScape Java Client #435](https://github.com/runejs/refactored-client-435) must be used to log into a RuneJS game server.
## Additional Commands
Before running these commands, you must:
1. have [NodeJS **version 24 or higher**](https://nodejs.org/en/) installed on your machine
2. run `npm install` from the root of this project
* `npm run game` Launches the game server by itself without building
* `npm run game:dev` Builds and launches the game server by itself in watch mode
* `npm run login` Launches the login server by itself without building
* `npm run update` Launches the update server by itself without building
* `npm run infra` Launches both the login and update server without building
* `npm run standalone` Launches all three servers concurrently without building
* `npm run build:watch` Builds the application and watches for changes
* `npm run build` Builds the application
* `npm run lint` Runs Biome in linting mode, use `lint:fix` to autofix
* `npm run format` Runs Biome in formatting mode, use `format:fix` to autofix
* `npm run test` Runs all tests with Jest
* `npm run typecheck` Typechecks the project
* `npm run fin` Combines lint:fix, format:fix, test and typecheck into a single command
================================================
FILE: biome.json
================================================
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false,
"ignore": []
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 4,
"lineWidth": 140
},
"organizeImports": {
"enabled": true
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"complexity": {
"recommended": true,
"noBannedTypes": "off",
"noForEach": "off",
"noStaticOnlyClass": "off",
"noUselessConstructor": "off",
"noUselessSwitchCase": "off",
"useLiteralKeys": "off",
"useOptionalChain": "off"
},
"correctness": {
"recommended": true,
"noSwitchDeclarations": "off"
},
"performance": {
"recommended": true,
"noAccumulatingSpread": "off",
"noDelete": "off"
},
"suspicious": {
"recommended": true,
"noAssignInExpressions": "off",
"noConfusingVoidType": "off",
"noDoubleEquals": "off",
"noDuplicateObjectKeys": "off",
"noExplicitAny": "off",
"noGlobalIsNan": "off",
"noImplicitAnyLet": "off",
"noSelfCompare": "off",
"noUnsafeDeclarationMerging": "off"
},
"style": {
"recommended": true,
"noInferrableTypes": "off",
"noNonNullAssertion": "off",
"noParameterAssign": "off",
"noUnusedTemplateLiteral": "off",
"noUselessElse": "off",
"useEnumInitializers": "off",
"useImportType": "off",
"useNodejsImportProtocol": "off",
"useNumberNamespace": "off",
"useSingleVarDeclarator": "off",
"useTemplate": "off"
}
}
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"arrowParentheses": "asNeeded"
}
}
}
================================================
FILE: cache/file-names.properties
================================================
-1863637185=miscgraphics,4
-1863637184=miscgraphics,5
-1863637187=miscgraphics,2
-1863637186=miscgraphics,3
-1863637181=miscgraphics,8
-1863637180=miscgraphics,9
-440204630=alls fairy in love n war
-1863637183=miscgraphics,6
-1253085654=scorpia_dances
-1863637182=miscgraphics,7
1356196826=backvmid3
-751102526=high seas
1356196825=backvmid2
-1863637189=miscgraphics,0
549358875=camelot
-1863637188=miscgraphics,1
-1619800378=emotes_locked,19
-1619800379=emotes_locked,18
792536868=understanding
1356196824=backvmid1
-1773559904=title_mute
-342013218=p11_full
1523653533=pirates of peril
696768774=harmony
-1701556831=magicoff2,27
281586976=orb_icon,3
286265996=ready for battle
-1701556832=magicoff2,26
281586977=orb_icon,4
-645977478=scape scared
-1701556833=magicoff2,25
281586978=orb_icon,5
-1701556834=magicoff2,24
-1701556830=magicoff2,28
-1052794696=dance of death
-1619800383=emotes_locked,14
-1619800384=emotes_locked,13
-1619800385=emotes_locked,12
-1556842207=sl_flags
-1619800386=emotes_locked,11
1614826739=mapletree
-1619800387=emotes_locked,10
-1701556835=magicoff2,23
-1701556836=magicoff2,22
1363656441=serenade
-1701556837=magicoff2,21
3089326=door
-1701556838=magicoff2,20
-1619800380=emotes_locked,17
-1619800381=emotes_locked,16
-1619800382=emotes_locked,15
-1037172987=tomorrow
825974316=melodrama
281586973=orb_icon,0
281586974=orb_icon,1
281586975=orb_icon,2
-1701556864=magicoff2,15
-1701556865=magicoff2,14
-1701556866=magicoff2,13
1509400204=sarcophagus
-1701556867=magicoff2,12
-1701556860=magicoff2,19
-1701556861=magicoff2,18
-1701556862=magicoff2,17
1868377358=lower_depths
-1701556863=magicoff2,16
1086036315=reggae2
-1220755677=hermit
-1544597765=sl_stars
-1619800350=emotes_locked,26
-1619800351=emotes_locked,25
-1636062434=tex_brown
-1619800352=emotes_locked,24
-1619800353=emotes_locked,23
-2122174648=back to life
-1619800354=emotes_locked,22
-1701556868=magicoff2,11
-1619800355=emotes_locked,21
-1701556869=magicoff2,10
-1619800356=emotes_locked,20
1619539773=side_icons,7
1121239524=scape wild
368271413=diango's little helpers
1619539772=side_icons,6
1619539775=side_icons,9
1619539774=side_icons,8
-1938172321=miscgraphics2,0
1619539771=side_icons,5
1619539770=side_icons,4
-926977577=the enchanter
1202794514=doorways
1343649581=schools out
-1097177625=q8_full
756012174=wornicons,4
756012173=wornicons,3
756012176=wornicons,6
756012175=wornicons,5
756012170=wornicons,0
827249681=ogre the top
756012172=wornicons,2
756012171=wornicons,1
-1741764817=poles apart
756012178=wornicons,8
-1938172320=miscgraphics2,1
756012177=wornicons,7
-43136286=the last shanty
756012179=wornicons,9
837131331=mapback
-1938172313=miscgraphics2,8
907740319=the depths
-1938172312=miscgraphics2,9
-2099722614=cave of beasts
-1938172317=miscgraphics2,4
-1938172316=miscgraphics2,5
-1938172315=miscgraphics2,6
-1938172314=miscgraphics2,7
1619539769=side_icons,3
-1367483767=cavern
-1938172319=miscgraphics2,2
50474489=treestump
-1938172318=miscgraphics2,3
1619539766=side_icons,0
1619539768=side_icons,2
1619539767=side_icons,1
-607416954=prayeron,11
1837251043=melzars maze
-607416953=prayeron,12
1318893900=have an ice day
-607416952=prayeron,13
-1701556800=magicoff2,37
-607416951=prayeron,14
-1701556801=magicoff2,36
-56804840=woodland
-607416950=prayeron,15
1120636327=scape cave
358884868=button_red
-1701556806=magicoff2,31
-1701556807=magicoff2,30
-1701556802=magicoff2,35
-1701556803=magicoff2,34
-1701556804=magicoff2,33
-1858265682=monster melee
-1701556805=magicoff2,32
-649484675=land of the dwarves
-1789903512=golden touch
1328851780=close_buttons,6
1080306793=shayzien_march
-1339126929=damage
4820960=monkey sadness
-1951786153=bone dance
1328851781=close_buttons,7
939546513=forlorn_homestead
-1019905269=shadowland
-607416955=prayeron,10
-2048535896=pheasant peasant
-1025233830=monkey madness
1121125956=scape soft
-1562452687=etcetera
1969878996=emotes,47
1969878994=emotes,45
-1228279872=ge_icons,3
1969878995=emotes,46
-1228279871=ge_icons,4
1969878992=emotes,43
-1228279870=ge_icons,5
1969878993=emotes,44
1959803992=invback
399048409=mage arena
1969878990=emotes,41
-47057524=lasting
1969878991=emotes,42
-1228279875=ge_icons,0
-1228279874=ge_icons,1
-1228279873=ge_icons,2
-1860080918=inspiration
1997757502=redstone2
1997757503=redstone3
-1060046352=tribal2
1997757501=redstone1
-1701556829=magicoff2,29
1890607210=magicon2,37
1890607211=magicon2,38
1890607212=magicon2,39
-1408684838=ascent
-848436598=fishing
-119984250=combaticons2,17
-119984251=combaticons2,16
1769177816=jungle island
-119984252=combaticons2,15
-119984253=combaticons2,14
-119984254=combaticons2,13
-119984255=combaticons2,12
-119984256=combaticons2,11
-119984257=combaticons2,10
1890607205=magicon2,32
1890607206=magicon2,33
1890607207=magicon2,34
1890607208=magicon2,35
135141185=zeah_combat
1890607209=magicon2,36
-180851958=norse code
112903447=water
922007495=talking forest
-672706748=miracle dance
-1110089645=lament
-1237461365=grotto
1890607203=magicon2,30
1890607204=magicon2,31
-1073910849=mirror
-988841056=still night
-1857025509=sunburn
-468596910=easter jig
796868952=major miner
-1066798491=trawler
1640556978=wonderous
-1624274920=emperor
740093634=find my way
1890607238=magicon2,44
1890607239=magicon2,45
3559837=tick
-1839713245=sideicons
1029455878=hells bells
1890607234=magicon2,40
1890607235=magicon2,41
1890607236=magicon2,42
1890607237=magicon2,43
1503566841=forbidden
-895763669=spooky
-276138668=ham attack
500433071=combaticons,5
-1021014225=catch me if you can
500433070=combaticons,4
500433073=combaticons,7
500433072=combaticons,6
500433075=combaticons,9
1533565119=mind over matter
500433074=combaticons,8
2025958358=emotes_locked,4
500433066=combaticons,0
2025958357=emotes_locked,3
862821975=far away
-1228392498=artistry
2025958356=emotes_locked,2
500433068=combaticons,2
2025958355=emotes_locked,1
500433067=combaticons,1
1085444827=refresh
500433069=combaticons,3
2025958359=emotes_locked,5
1427043851=on the up
2025958354=emotes_locked,0
1316697938=whistle
347955347=venture
1959211608=mapfunction,77
1959211609=mapfunction,78
881850881=the chosen
1959211601=mapfunction,70
1959211602=mapfunction,71
584643951=lost soul
582140282=rising damp
1959211603=mapfunction,72
1740872686=soulfall
1959211604=mapfunction,73
1959211605=mapfunction,74
-119984248=combaticons2,19
1959211606=mapfunction,75
-119984249=combaticons2,18
1609255038=slither and thither
82917947=sarim's vermin
1959211607=mapfunction,76
1728911401=natural
-1189743137=duel arena
108698078=roof2
214634021=head to head
2025958361=emotes_locked,7
-448773288=isle of everywhere
2025958360=emotes_locked,6
-1869996941=titlebox
-338347745=showdown
-2075972251=long ago
2025958363=emotes_locked,9
2025958362=emotes_locked,8
-1487589606=7th realm
-1253087691=garden
-2133902017=zeah_farming
-492926285=impetuous
3314014=lair
907815588=the desert
-1960860275=barbarianism
1890607241=magicon2,47
1890607242=magicon2,48
1890607243=magicon2,49
-919642451=jungle bells
795515487=underground
561438836=fountain
-1418827919=illusive
-634763748=fruits de mer
1890607240=magicon2,46
1694458038=large_button
1393517697=bandit camp
1959211632=mapfunction,80
1884773718=magicoff2,2
1884773719=magicoff2,3
1884773716=magicoff2,0
2121900771=backtop1
1884773717=magicoff2,1
-103077377=gnomeball
-1947119982=blistering barnacles
828650857=autumn voyage
92909147=alone
1691516951=undead dungeon
122265833=expecting
-1320617626=dunjun
1959211633=mapfunction,81
1959211634=mapfunction,82
1959211635=mapfunction,83
1959211636=mapfunction,84
1959211637=mapfunction,85
777534707=army of darkness
1959211638=mapfunction,86
1959211639=mapfunction,87
1884773721=magicoff2,5
1884773722=magicoff2,6
1884773720=magicoff2,4
1959211640=mapfunction,88
1959211641=mapfunction,89
-327707013=anywhere
1884773725=magicoff2,9
1884773723=magicoff2,7
1884773724=magicoff2,8
1116844876=incantation
-728886272=temple of light
685934899=in the clink
-1237289460=grumpy
1945133711=inferno
466902883=strange place
-418223472=phasmatys
817472004=zombiism
106578554=zeah_book,0
106578555=zeah_book,1
1509070203=eagle peak
-485932799=expedition
1171923143=emotes,8
-675357975=attack1
1171923144=emotes,9
1959211610=mapfunction,79
-675357974=attack2
-675357973=attack3
-675357972=attack4
-675357971=attack5
40246002=masquerade
-675357970=attack6
-734206983=arrival
-1980407601=sea shanty xmas
284435223=pharoah's tomb
-148552909=down below
1171923141=emotes,6
1171923142=emotes,7
1171923140=emotes,5
-1077789440=mellow
-710537653=kingdom
1171923138=emotes,3
1171923139=emotes,4
1171923136=emotes,1
-2098286081=venture2
1171923137=emotes,2
1171923135=emotes,0
-1094248165=sigmunds showdown
-271106892=rat a tat tat
3288564=keys
-143163121=ham fisted
-900633031=medieval
944208821=life's a beach\!
-1228279453=riverside
-1666444059=combaticons,10
825919125=options_icons,24
825919126=options_icons,25
1179379180=the trade parade
-1666444057=combaticons,12
825919123=options_icons,22
-1666444058=combaticons,11
825919124=options_icons,23
825919121=options_icons,20
1884768169=magicoff,32
825919122=options_icons,21
1884768167=magicoff,30
1884768168=magicoff,31
1318818808=chainmail
582031337=intrepid
783525419=beetle juice
432605856=untouchable
-969918857=neverland
79789174=narnode's theme
-705938181=zealot
117588=web
-1666444051=combaticons,18
-1666444052=combaticons,17
1687654733=troubled
-1666444050=combaticons,19
-1666444055=combaticons,14
825919129=options_icons,28
-1666444056=combaticons,13
-1666444053=combaticons,16
825919127=options_icons,26
-1666444054=combaticons,15
825919128=options_icons,27
1320694328=magical journey
364185053=roll the bones
-1254483584=jungly1
981183822=right on track
-1254483583=jungly2
-1254483582=jungly3
3075958=dark
-2038936746=deep down
1512143976=everlasting fire
-1392319985=beyond
46273615=tale of keldagrim
-651951461=goblin game
3522941=save
104084791=mossy
1250935993=the monsters below
794539501=garden of summer
1814277765=elven mist
2110556093=the golem
-1475251658=where eagles lair
1884768143=magicoff,27
1884768144=magicoff,28
1884768141=magicoff,25
1529837717=bubble and squeak
1884768142=magicoff,26
-1679325940=technology
1884768145=magicoff,29
-826562194=troubled_waters
1884768140=magicoff,24
-1359348243=painting1
1267356434=the power of tears
-1359348242=painting2
-860755690=jungle hunt
1884768138=magicoff,22
-1197347961=magic magic magic
1884768139=magicoff,23
1134405764=hypnotized
1959211539=mapfunction,50
1381363755=my arms journey
-1644401602=complication
1959211540=mapfunction,51
1959211541=mapfunction,52
1884768136=magicoff,20
1959211542=mapfunction,53
2111304827=warning_icons,0
1884768137=magicoff,21
-440187560=zogre dance
1959211543=mapfunction,54
2111304828=warning_icons,1
-2002535437=corridors of power
825919130=options_icons,29
580384095=jungle troubles
1301622585=slice of station
1959211544=mapfunction,55
2111304829=warning_icons,2
-1294172031=escape
-1309477156=expanse
-1526067851=alternative root
2124773424=dynasty
1743765602=leftarrow
-1482676188=romancing the crone
-1891851953=island of the trolls
736457293=small_button_pressed
-1106172890=letter
986170990=dreamstate
1959211545=mapfunction,56
1959211546=mapfunction,57
1765722413=spirits of elid
1959211547=mapfunction,58
1959211548=mapfunction,59
-2075333010=lonesome
3314400=lava
1355033875=worldmap_icon,1
1814357716=knightmare
1690742645=nox_irae
94935104=cross
-1249495153=frogland
-1642689926=athletes foot
107944162=quest
1355033874=worldmap_icon,0
-2130741313=joy of the hunt
-28982081=labyrinth
250959119=marooned
-1522984472=altar_ego
1326424637=the lost melody
-1779111734=arabique
-398925062=sea shanty2
1884768110=magicoff,15
1884768111=magicoff,16
1817249074=woe of the wyvern
1884768114=magicoff,19
1884768112=magicoff,17
-1624760229=emotion
1884768113=magicoff,18
-353951458=attention
279431252=garden of autumn
422652266=small_button
1884768107=magicoff,12
1884768108=magicoff,13
375695247=the far side
1884768105=magicoff,10
1884768106=magicoff,11
-528864109=crystal sword
1884768109=magicoff,14
1959211570=mapfunction,60
-158141423=prayeron,7
-158141424=prayeron,6
1959211571=mapfunction,61
-158141421=prayeron,9
1959211572=mapfunction,62
-158141422=prayeron,8
1959211573=mapfunction,63
1959211574=mapfunction,64
688840255=piscarilius_sigil
1959211575=mapfunction,65
1959211576=mapfunction,66
1170407052=headicons_prayer
1959211577=mapfunction,67
-324496873=soundscape
-1418445703=tex_red
1961540869=wornicons,10
-1028580907=that_sullen_hall
397136995=elfpainting
-2092714094=haunted mine
1959211578=mapfunction,68
1959211579=mapfunction,69
-158141429=prayeron,1
-158141427=prayeron,3
-140492390=bunny_sugar_rush
-158141428=prayeron,2
-158141425=prayeron,5
1827366203=righteousness
-649601274=darkness_in_the_depths
-158141426=prayeron,4
1961540870=wornicons,11
-158141430=prayeron,0
910299584=principality
-734028978=arrow,1
-734028979=arrow,0
790067275=garden of spring
35762567=workshop
-1095396929=competition
96463963=egypt
-1154441378=jollyr
-1685231711=cave background
-2078908549=time out
-1172405897=wildwood
-170561624=spookyjungle
2110231453=mod_icons
2061491048=shining
-1063411723=tremble
94627585=chest
-520702427=ice melody
1346720899=backleft1
-607416919=prayeron,25
-607416918=prayeron,26
900197712=staticons,6
-607416917=prayeron,27
900197713=staticons,7
-607416916=prayeron,28
900197710=staticons,4
-607416915=prayeron,29
900197711=staticons,5
957931606=courage
900197714=staticons,8
900197715=staticons,9
-720253066=the other side
-1655721374=prayeroff,31
-607416921=prayeron,23
-1655721375=prayeroff,30
-607416920=prayeron,24
-710515142=the mad mole
-1350228392=stratosphere
-1666438445=combaticons2,3
-1666438446=combaticons2,2
-1666438443=combaticons2,5
-1666438444=combaticons2,4
-1106570438=legion
-1666438441=combaticons2,7
-1666438442=combaticons2,6
1398587265=flute salad
-1666438440=combaticons2,8
837223705=mapedge
900197709=staticons,3
-243680393=peng_emotes,7
900197707=staticons,1
378300078=everlasting
900197708=staticons,2
-944748869=witching
-243680396=peng_emotes,4
-1335336992=logo_deadman_mode
-1368714737=small_button_blue
-795140435=wander
-243680397=peng_emotes,3
-243680394=peng_emotes,6
-1666438447=combaticons2,1
-243680395=peng_emotes,5
-1666438448=combaticons2,0
-243680398=peng_emotes,2
-243680399=peng_emotes,1
-607416924=prayeron,20
900197706=staticons,0
-607416923=prayeron,21
-607416922=prayeron,22
3016376=bark
-89244313=romper chomper
346288985=dorgeshun deep
1585002399=magicon,21
-1725263140=chef surprize
1585002398=magicon,20
-993528987=making waves
-628963539=ham and seek
-1666438439=combaticons2,9
-333224315=baroque
-1236252722=prime time
280241284=waking dream
-564582358=distant land
115411843=castlewars
1513246078=al kharid
-1377700863=unknown land
1264132816=miles away
1185785872=barbassault_icons,3
1185785873=barbassault_icons,4
-1655721397=prayeroff,29
-1655721398=prayeroff,28
1185785874=barbassault_icons,5
-1655721399=prayeroff,27
1185785875=barbassault_icons,6
1711341885=fight or flight
1185785870=barbassault_icons,1
1185785871=barbassault_icons,2
3530505=sire
-309570839=pick_and_shovel
647234089=distillery hilarity
-127408236=gnome_village_party
1337378554=backbase2
109757537=stars
1337378553=backbase1
109757538=start
819884325=wilderness3
1328851775=close_buttons,1
658759958=side_background
1328851774=close_buttons,0
-782211141=wonder
1328851777=close_buttons,3
-1995718284=wall_white
819884324=wilderness2
1328851776=close_buttons,2
1328851779=close_buttons,5
-943885542=scape hunter
1328851778=close_buttons,4
1185785869=barbassault_icons,0
-607416949=prayeron,16
-607416948=prayeron,17
-1779684630=rune essence
-607416947=prayeron,18
-607416946=prayeron,19
1119460311=bandos battalion
-967559823=creature cruelty
-1904094243=zeah_fishing
-1913214770=wilderness
460367020=village
825919161=options_icons,39
1585002375=magicon,18
94839810=coins
1585002376=magicon,19
825919160=options_icons,38
-1282090556=faerie
-521895311=the adventurer
788399136=tree spirits
-1902858744=beneath_the_stronghold
-356730043=pirates of penance
1185785876=barbassault_icons,7
825919158=options_icons,36
825919159=options_icons,37
825919156=options_icons,34
-1455241861=victory is mine
825919157=options_icons,35
-1333874720=side_icons,17
825919154=options_icons,32
825919155=options_icons,33
825919152=options_icons,30
825919153=options_icons,31
1437805631=chatback
-1623296531=ground scape
685190118=in the brine
1366257555=nightfall
110327241=theme
-1333874725=side_icons,12
-1333874726=side_icons,11
-1333874727=side_icons,10
-1333874721=side_icons,16
-1333874722=side_icons,15
-1124681475=darkly_altared
-8976533=throne of the demon
-1333874723=side_icons,14
-1333874724=side_icons,13
-1989106719=assault and battery
1958759012=greatness
1057075019=b12_full
1143353537=chain of command
-51091830=desert voyage
-1073927447=mirage
-91048728=number_button
3165239=gaol
-1380919269=breeze
445640248=rugged_terrain
106079=key
-655784411=overlay_multiway
-1025835715=backright2
-1025835716=backright1
1120933843=scape main
3225350=iban
-956253112=title fight
-123912401=la mort
1585002367=magicon,10
-2128736428=startgame
1585002368=magicon,11
-925031874=royale
1585002369=magicon,12
1585002370=magicon,13
1585002373=magicon,16
1585002374=magicon,17
-1307116191=superstition
1585002371=magicon,14
1585002372=magicon,15
-587569902=path of peril
3392903=null
-1601127242=inadequacy
2136330800=staticons2,0
2136330801=staticons2,1
344336468=grip of the talon
2136330804=staticons2,4
2136330805=staticons2,5
2136330802=staticons2,2
2136330803=staticons2,3
1960215130=barking mad
-43712789=scape original
621171714=cellar song
1585002461=magicon,41
1585002462=magicon,42
1585002460=magicon,40
111485446=upass
2136330808=staticons2,8
694847251=in the manor
2136330809=staticons2,9
2136330806=staticons2,6
2136330807=staticons2,7
-1385847955=rightarrow
1343200077=the slayer
1585002465=magicon,45
1585002466=magicon,46
1585002463=magicon,43
1585002464=magicon,44
1585002469=magicon,49
-95571520=volcanic vikings
1585002467=magicon,47
1585002468=magicon,48
-1032629963=shipwrecked
93330745=aztec
-881372797=tabs,1
1377351472=oriental
121641580=headicons_hint
-881372798=tabs,0
1585002438=magicon,39
-1661605940=elfwood
-607416893=prayeron,30
-822106577=jungle island xmas
-607416892=prayeron,31
332368736=mad eadgar
1585002432=magicon,33
-143368781=side_background_right
1585002433=magicon,34
-1081494434=malady
1585002430=magicon,31
1585002431=magicon,32
1585002436=magicon,37
1585002437=magicon,38
1585002434=magicon,35
1585002435=magicon,36
-1938171360=miscgraphics3,0
-1059680853=trinity
781557721=dies_irae
-1938171359=miscgraphics3,1
497375231=stillness
-1938171358=miscgraphics3,2
-1938171357=miscgraphics3,3
-960709976=dogs of war
2129339089=magicon,1
2129339088=magicon,0
755433248=headicons_pk
108392383=regal
-213632750=waterfall
-1367706280=canvas
73828649=settlement
848123561=into the abyss
478781900=last stand
1339486127=the shadow
-1055503808=roc and roll
837204902=mapdots
950484242=compass
-1082154559=fanfare
747848680=nether_realm
788224888=dead quiet
1532279978=monarch waltz
-149029727=side_background_left1
812947089=fanfare2
-149029726=side_background_left2
1006643748=high spirits
-2136059388=starlight
2122572442=the tower
-1998869913=spooky2
1411067174=gnome village2
-2065077267=wild side
812947090=fanfare3
1585002429=magicon,30
1294629755=on the wing
2097127567=monkey badness
-2032107216=sojourn
1020264019=pest control
3237038=info
1473393027=fe fi fo fum
-1686202291=upper_depths
3540994=stop
1742080803=darkwood
740392969=little cave of horrors
-158379532=prayerglow
-691855347=in between
-200702983=the noble rodent
1652745754=forgotten
-1895307673=hitmark,3
-1895307674=hitmark,2
-1895307675=hitmark,1
-1895307676=hitmark,0
-1895307670=hitmark,6
-1895307671=hitmark,5
-1895307672=hitmark,4
1968917071=bone dry
-850506182=trawler minor
197029040=mapscene
-808772318=in the pits
-1165315580=looking back
-1763090403=scape_ape
-1938177931=miscgraphics,11
-1938177932=miscgraphics,10
1936130561=thrall_of_the_serpent
1258863383=yesteryear
1994744000=slice of silent movie
-1691854169=dead can dance
1585002407=magicon,29
1585002405=magicon,27
1585002406=magicon,28
271319484=frostbite
-499867199=meridian
1585002400=magicon,22
-1938177930=miscgraphics,12
-84626226=mudskipper melody
1585002403=magicon,25
1585002404=magicon,26
3641802=wall
1585002401=magicon,23
1585002402=magicon,24
-606457701=wolf mountain
1276599785=button_brown
1969878899=emotes,13
1969878897=emotes,11
1969878898=emotes,12
1969878896=emotes,10
-1938177928=miscgraphics,14
-907669678=brew hoo hoo
-1938177929=miscgraphics,13
72999866=subterranea
619237947=the galleon
-1764950404=scape sad
295831445=heart and mind
908430134=dangerous road
738888631=tradebacking
-174800339=verdana_11pt_regular
686705631=lightwalk
-601591436=side_background_bottom
-1479412376=the navigator
-359173459=zamorak zoo
744536246=null and void
-1701556798=magicoff2,39
-1701556799=magicoff2,38
-1396384012=bamboo
-200388662=lighthouse
133626717=suspicious
-810515425=voyage
3061973=crag
1802291895=big chords
-1661619479=elfwall
113315621=wood2
1813041183=steelborder2,0
429244831=slug a bug ball
1813041184=steelborder2,1
-1658386264=shining_spirit
738909086=chamber
526264239=verdana_13pt_regular
-877351859=temple
2142215577=the mollusc menace
1124498189=warpath
-2136649922=no way out
-339706871=grimly_fiendish
547534551=wrath and ruin
544229147=lore and order
3327206=load
1610073470=lovakengj_sigil
-419218284=long way home
-662489856=food for thought
1306461568=stagnant
-1662171955=elfdoor
-1043985601=meddling kids
947464074=titlebutton
-1309055712=exposed
-1487348923=ambient jungle
-1829469821=lament of meiyerditch
233203434=leftarrow_small
-1216167350=dangerous
114464611=railings
-1106574323=legend
-1701556767=magicoff2,49
-999707515=time to mine
-1701556768=magicoff2,48
2129339097=magicon,9
2129339096=magicon,8
1959211510=mapfunction,42
2129339095=magicon,7
1959211511=mapfunction,43
2129339094=magicon,6
2129339093=magicon,5
2129339092=magicon,4
2129339091=magicon,3
2129339090=magicon,2
3522472=saga
-1701556769=magicoff2,47
-544722449=rellekka
1033441676=tribal background
1915718129=the desolate isle
1890607150=magicon2,19
1787618597=stranded
1717999087=forgettable melody
1959211512=mapfunction,44
-243680400=peng_emotes,0
1959211513=mapfunction,45
1959211514=mapfunction,46
1959211515=mapfunction,47
1959211516=mapfunction,48
1959211517=mapfunction,49
1705947058=the cellar dwellers
1216634785=landlubber
1884768198=magicoff,40
-1588113323=the rogues den
1884768199=magicoff,41
-905842564=serene
-607599698=prayeroff,2
-607599699=prayeroff,1
1890607142=magicon2,11
1389384362=monkey trouble
1890607143=magicon2,12
1890607144=magicon2,13
1890607145=magicon2,14
1890607146=magicon2,15
1890607147=magicon2,16
1890607148=magicon2,17
1966766798=mausoleum
1890607149=magicon2,18
1808345541=armadyl alliance
290391725=options_slider,7
1890607141=magicon2,10
290391722=options_slider,4
-607599696=prayeroff,4
290391721=options_slider,3
-607599697=prayeroff,3
290391724=options_slider,6
-607599694=prayeroff,6
290391723=options_slider,5
-607599695=prayeroff,5
-607599692=prayeroff,8
-607599693=prayeroff,7
290391720=options_slider,2
-607599691=prayeroff,9
1334775925=chat_background
-1779127378=arabian2
-1779127377=arabian3
528722471=island life
1890607175=magicon2,23
1890607176=magicon2,24
949634504=mouse trap
1890607177=magicon2,25
1890607178=magicon2,26
1890607179=magicon2,27
3327403=logo
290391719=options_slider,1
1092249049=storm brew
290391718=options_slider,0
404357804=everywhere
1890607172=magicon2,20
1890607173=magicon2,21
951530772=contest
1890607174=magicon2,22
-1701556776=magicoff2,40
1884768176=magicoff,39
-395250469=corporal punishment
1749113330=newbie melody
1884768174=magicoff,37
1884768175=magicoff,38
-1701556772=magicoff2,44
-1701556773=magicoff2,43
-1701556774=magicoff2,42
-1701556775=magicoff2,41
-858121616=tzhaar
1884768172=magicoff,35
1884768173=magicoff,36
666772244=combat_shield
1884768170=magicoff,33
1884768171=magicoff,34
1959211509=mapfunction,41
1639695510=mapmarker
-1661748240=friends_icons
-552301350=knightly
-1918044851=mastermindless
-1701556770=magicoff2,46
-1701556771=magicoff2,45
201526300=corporealbeast
1959211508=mapfunction,40
105001967=nomad
-70910145=clickcross,3
-1737914947=mapfunction,5
1801745440=staticons2,11
-70910146=clickcross,2
-865479038=tribal
-1737914946=mapfunction,6
1801745441=staticons2,12
-70910147=clickcross,1
-1737914945=mapfunction,7
1801745442=staticons2,13
-70910148=clickcross,0
-1737914944=mapfunction,8
1801745443=staticons2,14
-1737914943=mapfunction,9
1801745444=staticons2,15
1801745445=staticons2,16
1801745446=staticons2,17
-1877545169=land down under
93921962=books
-1737914949=mapfunction,3
-1737914948=mapfunction,4
-1655721428=prayeroff,19
-2136884405=title.jpg
-1655721429=prayeroff,18
1584819628=magicoff,6
1584819629=magicoff,7
437480876=voodoo cult
1584819624=magicoff,2
1584819625=magicoff,3
1584819626=magicoff,4
-1737914952=mapfunction,0
1584819627=magicoff,5
-1737914951=mapfunction,1
124995564=harmony2
1584819622=magicoff,0
1801745439=staticons2,10
1584819623=magicoff,1
346263512=dorgeshun city
-1665011705=down and out
1890607180=magicon2,28
1890607181=magicon2,29
1417471781=titlescroll
1959211446=mapfunction,20
1956141536=options_radio_buttons,0
736568812=ballad of enchantment
-1737914950=mapfunction,2
1959211447=mapfunction,21
1959211448=mapfunction,22
1959211449=mapfunction,23
-1890130256=morytania
-70910141=clickcross,7
-70910142=clickcross,6
1956141539=options_radio_buttons,3
-70910143=clickcross,5
1956141538=options_radio_buttons,2
284766976=splendour
-70910144=clickcross,4
1956141537=options_radio_buttons,1
196677638=the quizmaster
530068296=overture
-1123094568=sl_button
-700552779=hosidius_sigil
-614076819=sad meadow
1956141543=options_radio_buttons,7
1956141542=options_radio_buttons,6
1956141541=options_radio_buttons,5
1956141540=options_radio_buttons,4
1584819631=magicoff,9
1846633612=gnome village
-2128560371=sl_back
1969878905=emotes,19
306819362=crystal castle
1584819630=magicoff,8
1969878903=emotes,17
303737220=options_icons,7
1969878904=emotes,18
1969878901=emotes,15
-78220817=devils_may_care
1969878902=emotes,16
-40521666=dimension x
1969878900=emotes,14
673424924=the lunar isle
789609582=brimstail's scales
303737222=options_icons,9
303737221=options_icons,8
1959211415=mapfunction,10
3059343=coil
1959211416=mapfunction,11
1959211417=mapfunction,12
-1256560486=last_man_standing
1959211418=mapfunction,13
336238005=rightarrow_small
1959211419=mapfunction,14
-677662361=forever
-1655721430=prayeroff,17
-1655721431=prayeroff,16
-1655721432=prayeroff,15
1959211420=mapfunction,15
1959211663=mapfunction,90
1959211421=mapfunction,16
1959211422=mapfunction,17
1959211423=mapfunction,18
303737217=options_icons,4
303737216=options_icons,3
303737215=options_icons,2
-1665005042=funny bunnies
303737214=options_icons,1
303737219=options_icons,6
303737218=options_icons,5
303737213=options_icons,0
95997798=we are the fairies
2001751835=desert heat
1959211424=mapfunction,19
-1655721437=prayeroff,10
687938017=clanwars
-1776024210=desolate_mage
-650944128=strength of saradomin
-1655721433=prayeroff,14
1160873524=aye car rum ba
-1655721434=prayeroff,13
-1655721435=prayeroff,12
-1081314499=marble
-1655721436=prayeroff,11
1097075475=reset,0
1959211477=mapfunction,30
-693313916=warriors guild
3506388=roof
1959211478=mapfunction,31
1097075476=reset,1
-2134967800=dagannoth dawn
-985763247=planks
1959211479=mapfunction,32
1999746381=fenkenstrain's refrain
898010371=garden of winter
359174830=rat hunt
1959211482=mapfunction,35
686441581=lightness
1959211483=mapfunction,36
1959211484=mapfunction,37
1959211485=mapfunction,38
1959211486=mapfunction,39
2023201035=dwarf theme
1959211480=mapfunction,33
1959211481=mapfunction,34
-1065532022=combatboxes,1
-1065532021=combatboxes,2
-1065532020=combatboxes,3
1867160429=old_tiles
394756979=scape santa
25205919=elfroof2
-663428071=dangerous way
-1065532023=combatboxes,0
1959211450=mapfunction,24
-895939599=spirit
1959211451=mapfunction,25
1959211452=mapfunction,26
1959211453=mapfunction,27
1959211454=mapfunction,28
1959211455=mapfunction,29
-275310687=undercurrent
212205923=goblin village
-303898981=faithless
-1381531001=tomb raider
260940912=marzipan
1343267530=backhmid1
1343267531=backhmid2
1097468315=horizon
-1655721404=prayeroff,22
623451622=kourend_the_magnificent
-1655721405=prayeroff,21
-1655721406=prayeroff,20
-1655721400=prayeroff,26
-313384067=p12_full
-1655721401=prayeroff,25
-1655721402=prayeroff,24
-1655721403=prayeroff,23
95848451=dream
1966781751=maws_jaws_claws
-995428255=parade
95734525=method of madness
-1308064877=hitmarks
1030045177=mutant medley
1333034828=blackmark
851641665=davy jones locker
417793574=scrollbar
1346720900=backleft2
1884768206=magicoff,48
1884768207=magicoff,49
1801140808=fangs for the memory
1884768204=magicoff,46
1345432055=pinball wizard
1884768205=magicoff,47
-783693496=dance of the undead
1274780903=chompy hunt
465278529=the lost tribe
-1666437481=combaticons3,6
2032696205=cabin fever
-1666437480=combaticons3,7
1825640471=borderland
415928477=zeah_mining
1884768202=magicoff,44
-607599700=prayeroff,0
1884768203=magicoff,45
1884768200=magicoff,42
1884768201=magicoff,43
-1666437487=combaticons3,0
-1666437486=combaticons3,1
813726263=crystal cave
1235442953=pathways
518814479=lullaby
-1666437483=combaticons3,4
1585007985=magicon2,7
-1666437482=combaticons3,5
1585007986=magicon2,8
-1666437485=combaticons3,2
1585007987=magicon2,9
-1666437484=combaticons3,3
104080482=moody
1969878967=emotes,39
-665666447=work work work
1364992651=evil bobs island
1969878965=emotes,37
1227328817=verdana_15pt_regular
1969878966=emotes,38
1969878963=emotes,35
1581724013=monkey business
1969878964=emotes,36
-74307138=miscellania
1969878961=emotes,33
1969878962=emotes,34
1969878960=emotes,32
1131171307=wayward
-1154558416=sl_arrows
529929957=overpass
1258058669=huffman
-694094064=adventure
1171698653=orb_xp,1
1171698652=orb_xp,0
1171698655=orb_xp,3
1171698654=orb_xp,2
1802171733=arceuus_sigil
221109227=tears of guthix
-1661754893=elfroof
-1666437478=combaticons3,9
1124565314=warrior
1969878958=emotes,30
1969878959=emotes,31
-934797897=reggae
2110260221=the genie
-1666437479=combaticons3,8
104257585=mummy
-1923924724=sworddecor,0
2136325196=staticons,17
-1332194002=background
2136164423=homescape
-1923924721=sworddecor,3
2136325194=staticons,15
-1923924722=sworddecor,2
-873564465=tiptoe
2136325195=staticons,16
-1923924723=sworddecor,1
123560953=espionage
2136325192=staticons,13
2136325193=staticons,14
1038911415=gnome king
2136325190=staticons,11
2136325191=staticons,12
1854274741=karamja jam
1969878989=emotes,40
-1242708793=glyphs
563269755=the terrible tower
1650323088=twilight
-12868552=sea shanty
289742397=book of spells
1880989696=dragontooth island
2136325189=staticons,10
110873=pen
-454421102=out of the deep
825919099=options_icons,19
825919097=options_icons,17
825919098=options_icons,18
-1349119470=cursed
1585007978=magicon2,0
825919095=options_icons,15
1585007979=magicon2,1
825919096=options_icons,16
825919093=options_icons,13
825919094=options_icons,14
825919091=options_icons,11
825919092=options_icons,12
-895977880=sphinx
-874529881=city of the dead
825919090=options_icons,10
1585007981=magicon2,3
1585007982=magicon2,4
1585007983=magicon2,5
-1618729246=body parts
1585007984=magicon2,6
1585007980=magicon2,2
1086075866=shayzien_sigil
2103661451=jester minute
-911346307=steelborder,2
-1809781334=button_brown_big
-911346306=steelborder,3
-816227352=vision
-911346309=steelborder,0
109407595=shine
-911346308=steelborder,1
-119954464=combaticons3,12
-119954465=combaticons3,11
-1846853118=armageddon
-119954462=combaticons3,14
-119954463=combaticons3,13
-119954460=combaticons3,16
-908183966=scarab
-119954461=combaticons3,15
-282886672=home sweet home
103666243=march
1969878929=emotes,22
1643875326=fire and brimstone
1969878927=emotes,20
-119954466=combaticons3,10
1969878928=emotes,21
-839455633=close quarters
941457503=way of the enchanter
-1453405761=mor-ul-rek
-415134015=have a blast
-1658514874=floating free
1213477442=chickened out
-1619800349=emotes_locked,27
-599680631=fear and loathing
-1081041422=insect queen
-1268786147=forest
-119954459=combaticons3,17
-119954457=combaticons3,19
-119954458=combaticons3,18
-850395529=trouble brewing
-1773920521=cave of the goblins
-771284962=claustrophobia
1310729739=bankbuttons,2
1306691868=upcoming
1465443077=over to nardah
1310729744=bankbuttons,7
1310729743=bankbuttons,6
1310729742=bankbuttons,5
1234827707=deep wildy
-90350772=xenophobe
-750127868=arabian
1310729741=bankbuttons,4
1310729740=bankbuttons,3
1041911129=waterlogged
108875897=runes
1447063382=barb wire
-378865792=magic dance
285466503=overlay_duel
1814287296=zeah_magic
1976894499=down to earth
1969878936=emotes,29
1969878934=emotes,27
-1567437308=deadlands
1969878935=emotes,28
1310729738=bankbuttons,1
1969878932=emotes,25
-957019274=too many cooks
1310729737=bankbuttons,0
2092627105=silence
1969878933=emotes,26
1969878930=emotes,23
1969878931=emotes,24
-901674570=well of voyage
1787935731=quill_oblique_large
-365283881=quill_caps_large
1157777820=lunar_alphabet
24702590=lunar_alphabet_lrg
================================================
FILE: cache/main_file_cache.dat2
================================================
[File too large to display: 28.8 MB]
================================================
FILE: config/file-names.properties
================================================
-1863637185=miscgraphics,4
-1863637184=miscgraphics,5
-1863637187=miscgraphics,2
-1863637186=miscgraphics,3
-1863637181=miscgraphics,8
-1863637180=miscgraphics,9
-440204630=alls fairy in love n war
-1863637183=miscgraphics,6
-1253085654=scorpia_dances
-1863637182=miscgraphics,7
1356196826=backvmid3
-751102526=high seas
1356196825=backvmid2
-1863637189=miscgraphics,0
549358875=camelot
-1863637188=miscgraphics,1
-1619800378=emotes_locked,19
-1619800379=emotes_locked,18
792536868=understanding
1356196824=backvmid1
-1773559904=title_mute
-342013218=p11_full
1523653533=pirates of peril
696768774=harmony
-1701556831=magicoff2,27
281586976=orb_icon,3
286265996=ready for battle
-1701556832=magicoff2,26
281586977=orb_icon,4
-645977478=scape scared
-1701556833=magicoff2,25
281586978=orb_icon,5
-1701556834=magicoff2,24
-1701556830=magicoff2,28
-1052794696=dance of death
-1619800383=emotes_locked,14
-1619800384=emotes_locked,13
-1619800385=emotes_locked,12
-1556842207=sl_flags
-1619800386=emotes_locked,11
1614826739=mapletree
-1619800387=emotes_locked,10
-1701556835=magicoff2,23
-1701556836=magicoff2,22
1363656441=serenade
-1701556837=magicoff2,21
3089326=door
-1701556838=magicoff2,20
-1619800380=emotes_locked,17
-1619800381=emotes_locked,16
-1619800382=emotes_locked,15
-1037172987=tomorrow
825974316=melodrama
281586973=orb_icon,0
281586974=orb_icon,1
281586975=orb_icon,2
-1701556864=magicoff2,15
-1701556865=magicoff2,14
-1701556866=magicoff2,13
1509400204=sarcophagus
-1701556867=magicoff2,12
-1701556860=magicoff2,19
-1701556861=magicoff2,18
-1701556862=magicoff2,17
1868377358=lower_depths
-1701556863=magicoff2,16
1086036315=reggae2
-1220755677=hermit
-1544597765=sl_stars
-1619800350=emotes_locked,26
-1619800351=emotes_locked,25
-1636062434=tex_brown
-1619800352=emotes_locked,24
-1619800353=emotes_locked,23
-2122174648=back to life
-1619800354=emotes_locked,22
-1701556868=magicoff2,11
-1619800355=emotes_locked,21
-1701556869=magicoff2,10
-1619800356=emotes_locked,20
1619539773=side_icons,7
1121239524=scape wild
368271413=diango's little helpers
1619539772=side_icons,6
1619539775=side_icons,9
1619539774=side_icons,8
-1938172321=miscgraphics2,0
1619539771=side_icons,5
1619539770=side_icons,4
-926977577=the enchanter
1202794514=doorways
1343649581=schools out
-1097177625=q8_full
756012174=wornicons,4
756012173=wornicons,3
756012176=wornicons,6
756012175=wornicons,5
756012170=wornicons,0
827249681=ogre the top
756012172=wornicons,2
756012171=wornicons,1
-1741764817=poles apart
756012178=wornicons,8
-1938172320=miscgraphics2,1
756012177=wornicons,7
-43136286=the last shanty
756012179=wornicons,9
837131331=mapback
-1938172313=miscgraphics2,8
907740319=the depths
-1938172312=miscgraphics2,9
-2099722614=cave of beasts
-1938172317=miscgraphics2,4
-1938172316=miscgraphics2,5
-1938172315=miscgraphics2,6
-1938172314=miscgraphics2,7
1619539769=side_icons,3
-1367483767=cavern
-1938172319=miscgraphics2,2
50474489=treestump
-1938172318=miscgraphics2,3
1619539766=side_icons,0
1619539768=side_icons,2
1619539767=side_icons,1
-607416954=prayeron,11
1837251043=melzars maze
-607416953=prayeron,12
1318893900=have an ice day
-607416952=prayeron,13
-1701556800=magicoff2,37
-607416951=prayeron,14
-1701556801=magicoff2,36
-56804840=woodland
-607416950=prayeron,15
1120636327=scape cave
358884868=button_red
-1701556806=magicoff2,31
-1701556807=magicoff2,30
-1701556802=magicoff2,35
-1701556803=magicoff2,34
-1701556804=magicoff2,33
-1858265682=monster melee
-1701556805=magicoff2,32
-649484675=land of the dwarves
-1789903512=golden touch
1328851780=close_buttons,6
1080306793=shayzien_march
-1339126929=damage
4820960=monkey sadness
-1951786153=bone dance
1328851781=close_buttons,7
939546513=forlorn_homestead
-1019905269=shadowland
-607416955=prayeron,10
-2048535896=pheasant peasant
-1025233830=monkey madness
1121125956=scape soft
-1562452687=etcetera
1969878996=emotes,47
1969878994=emotes,45
-1228279872=ge_icons,3
1969878995=emotes,46
-1228279871=ge_icons,4
1969878992=emotes,43
-1228279870=ge_icons,5
1969878993=emotes,44
1959803992=invback
399048409=mage arena
1969878990=emotes,41
-47057524=lasting
1969878991=emotes,42
-1228279875=ge_icons,0
-1228279874=ge_icons,1
-1228279873=ge_icons,2
-1860080918=inspiration
1997757502=redstone2
1997757503=redstone3
-1060046352=tribal2
1997757501=redstone1
-1701556829=magicoff2,29
1890607210=magicon2,37
1890607211=magicon2,38
1890607212=magicon2,39
-1408684838=ascent
-848436598=fishing
-119984250=combaticons2,17
-119984251=combaticons2,16
1769177816=jungle island
-119984252=combaticons2,15
-119984253=combaticons2,14
-119984254=combaticons2,13
-119984255=combaticons2,12
-119984256=combaticons2,11
-119984257=combaticons2,10
1890607205=magicon2,32
1890607206=magicon2,33
1890607207=magicon2,34
1890607208=magicon2,35
135141185=zeah_combat
1890607209=magicon2,36
-180851958=norse code
112903447=water
922007495=talking forest
-672706748=miracle dance
-1110089645=lament
-1237461365=grotto
1890607203=magicon2,30
1890607204=magicon2,31
-1073910849=mirror
-988841056=still night
-1857025509=sunburn
-468596910=easter jig
796868952=major miner
-1066798491=trawler
1640556978=wonderous
-1624274920=emperor
740093634=find my way
1890607238=magicon2,44
1890607239=magicon2,45
3559837=tick
-1839713245=sideicons
1029455878=hells bells
1890607234=magicon2,40
1890607235=magicon2,41
1890607236=magicon2,42
1890607237=magicon2,43
1503566841=forbidden
-895763669=spooky
-276138668=ham attack
500433071=combaticons,5
-1021014225=catch me if you can
500433070=combaticons,4
500433073=combaticons,7
500433072=combaticons,6
500433075=combaticons,9
1533565119=mind over matter
500433074=combaticons,8
2025958358=emotes_locked,4
500433066=combaticons,0
2025958357=emotes_locked,3
862821975=far away
-1228392498=artistry
2025958356=emotes_locked,2
500433068=combaticons,2
2025958355=emotes_locked,1
500433067=combaticons,1
1085444827=refresh
500433069=combaticons,3
2025958359=emotes_locked,5
1427043851=on the up
2025958354=emotes_locked,0
1316697938=whistle
347955347=venture
1959211608=mapfunction,77
1959211609=mapfunction,78
881850881=the chosen
1959211601=mapfunction,70
1959211602=mapfunction,71
584643951=lost soul
582140282=rising damp
1959211603=mapfunction,72
1740872686=soulfall
1959211604=mapfunction,73
1959211605=mapfunction,74
-119984248=combaticons2,19
1959211606=mapfunction,75
-119984249=combaticons2,18
1609255038=slither and thither
82917947=sarim's vermin
1959211607=mapfunction,76
1728911401=natural
-1189743137=duel arena
108698078=roof2
214634021=head to head
2025958361=emotes_locked,7
-448773288=isle of everywhere
2025958360=emotes_locked,6
-1869996941=titlebox
-338347745=showdown
-2075972251=long ago
2025958363=emotes_locked,9
2025958362=emotes_locked,8
-1487589606=7th realm
-1253087691=garden
-2133902017=zeah_farming
-492926285=impetuous
3314014=lair
907815588=the desert
-1960860275=barbarianism
1890607241=magicon2,47
1890607242=magicon2,48
1890607243=magicon2,49
-919642451=jungle bells
795515487=underground
561438836=fountain
-1418827919=illusive
-634763748=fruits de mer
1890607240=magicon2,46
1694458038=large_button
1393517697=bandit camp
1959211632=mapfunction,80
1884773718=magicoff2,2
1884773719=magicoff2,3
1884773716=magicoff2,0
2121900771=backtop1
1884773717=magicoff2,1
-103077377=gnomeball
-1947119982=blistering barnacles
828650857=autumn voyage
92909147=alone
1691516951=undead dungeon
122265833=expecting
-1320617626=dunjun
1959211633=mapfunction,81
1959211634=mapfunction,82
1959211635=mapfunction,83
1959211636=mapfunction,84
1959211637=mapfunction,85
777534707=army of darkness
1959211638=mapfunction,86
1959211639=mapfunction,87
1884773721=magicoff2,5
1884773722=magicoff2,6
1884773720=magicoff2,4
1959211640=mapfunction,88
1959211641=mapfunction,89
-327707013=anywhere
1884773725=magicoff2,9
1884773723=magicoff2,7
1884773724=magicoff2,8
1116844876=incantation
-728886272=temple of light
685934899=in the clink
-1237289460=grumpy
1945133711=inferno
466902883=strange place
-418223472=phasmatys
817472004=zombiism
106578554=zeah_book,0
106578555=zeah_book,1
1509070203=eagle peak
-485932799=expedition
1171923143=emotes,8
-675357975=attack1
1171923144=emotes,9
1959211610=mapfunction,79
-675357974=attack2
-675357973=attack3
-675357972=attack4
-675357971=attack5
40246002=masquerade
-675357970=attack6
-734206983=arrival
-1980407601=sea shanty xmas
284435223=pharoah's tomb
-148552909=down below
1171923141=emotes,6
1171923142=emotes,7
1171923140=emotes,5
-1077789440=mellow
-710537653=kingdom
1171923138=emotes,3
1171923139=emotes,4
1171923136=emotes,1
-2098286081=venture2
1171923137=emotes,2
1171923135=emotes,0
-1094248165=sigmunds showdown
-271106892=rat a tat tat
3288564=keys
-143163121=ham fisted
-900633031=medieval
944208821=life's a beach\!
-1228279453=riverside
-1666444059=combaticons,10
825919125=options_icons,24
825919126=options_icons,25
1179379180=the trade parade
-1666444057=combaticons,12
825919123=options_icons,22
-1666444058=combaticons,11
825919124=options_icons,23
825919121=options_icons,20
1884768169=magicoff,32
825919122=options_icons,21
1884768167=magicoff,30
1884768168=magicoff,31
1318818808=chainmail
582031337=intrepid
783525419=beetle juice
432605856=untouchable
-969918857=neverland
79789174=narnode's theme
-705938181=zealot
117588=web
-1666444051=combaticons,18
-1666444052=combaticons,17
1687654733=troubled
-1666444050=combaticons,19
-1666444055=combaticons,14
825919129=options_icons,28
-1666444056=combaticons,13
-1666444053=combaticons,16
825919127=options_icons,26
-1666444054=combaticons,15
825919128=options_icons,27
1320694328=magical journey
364185053=roll the bones
-1254483584=jungly1
981183822=right on track
-1254483583=jungly2
-1254483582=jungly3
3075958=dark
-2038936746=deep down
1512143976=everlasting fire
-1392319985=beyond
46273615=tale of keldagrim
-651951461=goblin game
3522941=save
104084791=mossy
1250935993=the monsters below
794539501=garden of summer
1814277765=elven mist
2110556093=the golem
-1475251658=where eagles lair
1884768143=magicoff,27
1884768144=magicoff,28
1884768141=magicoff,25
1529837717=bubble and squeak
1884768142=magicoff,26
-1679325940=technology
1884768145=magicoff,29
-826562194=troubled_waters
1884768140=magicoff,24
-1359348243=painting1
1267356434=the power of tears
-1359348242=painting2
-860755690=jungle hunt
1884768138=magicoff,22
-1197347961=magic magic magic
1884768139=magicoff,23
1134405764=hypnotized
1959211539=mapfunction,50
1381363755=my arms journey
-1644401602=complication
1959211540=mapfunction,51
1959211541=mapfunction,52
1884768136=magicoff,20
1959211542=mapfunction,53
2111304827=warning_icons,0
1884768137=magicoff,21
-440187560=zogre dance
1959211543=mapfunction,54
2111304828=warning_icons,1
-2002535437=corridors of power
825919130=options_icons,29
580384095=jungle troubles
1301622585=slice of station
1959211544=mapfunction,55
2111304829=warning_icons,2
-1294172031=escape
-1309477156=expanse
-1526067851=alternative root
2124773424=dynasty
1743765602=leftarrow
-1482676188=romancing the crone
-1891851953=island of the trolls
736457293=small_button_pressed
-1106172890=letter
986170990=dreamstate
1959211545=mapfunction,56
1959211546=mapfunction,57
1765722413=spirits of elid
1959211547=mapfunction,58
1959211548=mapfunction,59
-2075333010=lonesome
3314400=lava
1355033875=worldmap_icon,1
1814357716=knightmare
1690742645=nox_irae
94935104=cross
-1249495153=frogland
-1642689926=athletes foot
107944162=quest
1355033874=worldmap_icon,0
-2130741313=joy of the hunt
-28982081=labyrinth
250959119=marooned
-1522984472=altar_ego
1326424637=the lost melody
-1779111734=arabique
-398925062=sea shanty2
1884768110=magicoff,15
1884768111=magicoff,16
1817249074=woe of the wyvern
1884768114=magicoff,19
1884768112=magicoff,17
-1624760229=emotion
1884768113=magicoff,18
-353951458=attention
279431252=garden of autumn
422652266=small_button
1884768107=magicoff,12
1884768108=magicoff,13
375695247=the far side
1884768105=magicoff,10
1884768106=magicoff,11
-528864109=crystal sword
1884768109=magicoff,14
1959211570=mapfunction,60
-158141423=prayeron,7
-158141424=prayeron,6
1959211571=mapfunction,61
-158141421=prayeron,9
1959211572=mapfunction,62
-158141422=prayeron,8
1959211573=mapfunction,63
1959211574=mapfunction,64
688840255=piscarilius_sigil
1959211575=mapfunction,65
1959211576=mapfunction,66
1170407052=headicons_prayer
1959211577=mapfunction,67
-324496873=soundscape
-1418445703=tex_red
1961540869=wornicons,10
-1028580907=that_sullen_hall
397136995=elfpainting
-2092714094=haunted mine
1959211578=mapfunction,68
1959211579=mapfunction,69
-158141429=prayeron,1
-158141427=prayeron,3
-140492390=bunny_sugar_rush
-158141428=prayeron,2
-158141425=prayeron,5
1827366203=righteousness
-649601274=darkness_in_the_depths
-158141426=prayeron,4
1961540870=wornicons,11
-158141430=prayeron,0
910299584=principality
-734028978=arrow,1
-734028979=arrow,0
790067275=garden of spring
35762567=workshop
-1095396929=competition
96463963=egypt
-1154441378=jollyr
-1685231711=cave background
-2078908549=time out
-1172405897=wildwood
-170561624=spookyjungle
2110231453=mod_icons
2061491048=shining
-1063411723=tremble
94627585=chest
-520702427=ice melody
1346720899=backleft1
-607416919=prayeron,25
-607416918=prayeron,26
900197712=staticons,6
-607416917=prayeron,27
900197713=staticons,7
-607416916=prayeron,28
900197710=staticons,4
-607416915=prayeron,29
900197711=staticons,5
957931606=courage
900197714=staticons,8
900197715=staticons,9
-720253066=the other side
-1655721374=prayeroff,31
-607416921=prayeron,23
-1655721375=prayeroff,30
-607416920=prayeron,24
-710515142=the mad mole
-1350228392=stratosphere
-1666438445=combaticons2,3
-1666438446=combaticons2,2
-1666438443=combaticons2,5
-1666438444=combaticons2,4
-1106570438=legion
-1666438441=combaticons2,7
-1666438442=combaticons2,6
1398587265=flute salad
-1666438440=combaticons2,8
837223705=mapedge
900197709=staticons,3
-243680393=peng_emotes,7
900197707=staticons,1
378300078=everlasting
900197708=staticons,2
-944748869=witching
-243680396=peng_emotes,4
-1335336992=logo_deadman_mode
-1368714737=small_button_blue
-795140435=wander
-243680397=peng_emotes,3
-243680394=peng_emotes,6
-1666438447=combaticons2,1
-243680395=peng_emotes,5
-1666438448=combaticons2,0
-243680398=peng_emotes,2
-243680399=peng_emotes,1
-607416924=prayeron,20
900197706=staticons,0
-607416923=prayeron,21
-607416922=prayeron,22
3016376=bark
-89244313=romper chomper
346288985=dorgeshun deep
1585002399=magicon,21
-1725263140=chef surprize
1585002398=magicon,20
-993528987=making waves
-628963539=ham and seek
-1666438439=combaticons2,9
-333224315=baroque
-1236252722=prime time
280241284=waking dream
-564582358=distant land
115411843=castlewars
1513246078=al kharid
-1377700863=unknown land
1264132816=miles away
1185785872=barbassault_icons,3
1185785873=barbassault_icons,4
-1655721397=prayeroff,29
-1655721398=prayeroff,28
1185785874=barbassault_icons,5
-1655721399=prayeroff,27
1185785875=barbassault_icons,6
1711341885=fight or flight
1185785870=barbassault_icons,1
1185785871=barbassault_icons,2
3530505=sire
-309570839=pick_and_shovel
647234089=distillery hilarity
-127408236=gnome_village_party
1337378554=backbase2
109757537=stars
1337378553=backbase1
109757538=start
819884325=wilderness3
1328851775=close_buttons,1
658759958=side_background
1328851774=close_buttons,0
-782211141=wonder
1328851777=close_buttons,3
-1995718284=wall_white
819884324=wilderness2
1328851776=close_buttons,2
1328851779=close_buttons,5
-943885542=scape hunter
1328851778=close_buttons,4
1185785869=barbassault_icons,0
-607416949=prayeron,16
-607416948=prayeron,17
-1779684630=rune essence
-607416947=prayeron,18
-607416946=prayeron,19
1119460311=bandos battalion
-967559823=creature cruelty
-1904094243=zeah_fishing
-1913214770=wilderness
460367020=village
825919161=options_icons,39
1585002375=magicon,18
94839810=coins
1585002376=magicon,19
825919160=options_icons,38
-1282090556=faerie
-521895311=the adventurer
788399136=tree spirits
-1902858744=beneath_the_stronghold
-356730043=pirates of penance
1185785876=barbassault_icons,7
825919158=options_icons,36
825919159=options_icons,37
825919156=options_icons,34
-1455241861=victory is mine
825919157=options_icons,35
-1333874720=side_icons,17
825919154=options_icons,32
825919155=options_icons,33
825919152=options_icons,30
825919153=options_icons,31
1437805631=chatback
-1623296531=ground scape
685190118=in the brine
1366257555=nightfall
110327241=theme
-1333874725=side_icons,12
-1333874726=side_icons,11
-1333874727=side_icons,10
-1333874721=side_icons,16
-1333874722=side_icons,15
-1124681475=darkly_altared
-8976533=throne of the demon
-1333874723=side_icons,14
-1333874724=side_icons,13
-1989106719=assault and battery
1958759012=greatness
1057075019=b12_full
1143353537=chain of command
-51091830=desert voyage
-1073927447=mirage
-91048728=number_button
3165239=gaol
-1380919269=breeze
445640248=rugged_terrain
106079=key
-655784411=overlay_multiway
-1025835715=backright2
-1025835716=backright1
1120933843=scape main
3225350=iban
-956253112=title fight
-123912401=la mort
1585002367=magicon,10
-2128736428=startgame
1585002368=magicon,11
-925031874=royale
1585002369=magicon,12
1585002370=magicon,13
1585002373=magicon,16
1585002374=magicon,17
-1307116191=superstition
1585002371=magicon,14
1585002372=magicon,15
-587569902=path of peril
3392903=null
-1601127242=inadequacy
2136330800=staticons2,0
2136330801=staticons2,1
344336468=grip of the talon
2136330804=staticons2,4
2136330805=staticons2,5
2136330802=staticons2,2
2136330803=staticons2,3
1960215130=barking mad
-43712789=scape original
621171714=cellar song
1585002461=magicon,41
1585002462=magicon,42
1585002460=magicon,40
111485446=upass
2136330808=staticons2,8
694847251=in the manor
2136330809=staticons2,9
2136330806=staticons2,6
2136330807=staticons2,7
-1385847955=rightarrow
1343200077=the slayer
1585002465=magicon,45
1585002466=magicon,46
1585002463=magicon,43
1585002464=magicon,44
1585002469=magicon,49
-95571520=volcanic vikings
1585002467=magicon,47
1585002468=magicon,48
-1032629963=shipwrecked
93330745=aztec
-881372797=tabs,1
1377351472=oriental
121641580=headicons_hint
-881372798=tabs,0
1585002438=magicon,39
-1661605940=elfwood
-607416893=prayeron,30
-822106577=jungle island xmas
-607416892=prayeron,31
332368736=mad eadgar
1585002432=magicon,33
-143368781=side_background_right
1585002433=magicon,34
-1081494434=malady
1585002430=magicon,31
1585002431=magicon,32
1585002436=magicon,37
1585002437=magicon,38
1585002434=magicon,35
1585002435=magicon,36
-1938171360=miscgraphics3,0
-1059680853=trinity
781557721=dies_irae
-1938171359=miscgraphics3,1
497375231=stillness
-1938171358=miscgraphics3,2
-1938171357=miscgraphics3,3
-960709976=dogs of war
2129339089=magicon,1
2129339088=magicon,0
755433248=headicons_pk
108392383=regal
-213632750=waterfall
-1367706280=canvas
73828649=settlement
848123561=into the abyss
478781900=last stand
1339486127=the shadow
-1055503808=roc and roll
837204902=mapdots
950484242=compass
-1082154559=fanfare
747848680=nether_realm
788224888=dead quiet
1532279978=monarch waltz
-149029727=side_background_left1
812947089=fanfare2
-149029726=side_background_left2
1006643748=high spirits
-2136059388=starlight
2122572442=the tower
-1998869913=spooky2
1411067174=gnome village2
-2065077267=wild side
812947090=fanfare3
1585002429=magicon,30
1294629755=on the wing
2097127567=monkey badness
-2032107216=sojourn
1020264019=pest control
3237038=info
1473393027=fe fi fo fum
-1686202291=upper_depths
3540994=stop
1742080803=darkwood
740392969=little cave of horrors
-158379532=prayerglow
-691855347=in between
-200702983=the noble rodent
1652745754=forgotten
-1895307673=hitmark,3
-1895307674=hitmark,2
-1895307675=hitmark,1
-1895307676=hitmark,0
-1895307670=hitmark,6
-1895307671=hitmark,5
-1895307672=hitmark,4
1968917071=bone dry
-850506182=trawler minor
197029040=mapscene
-808772318=in the pits
-1165315580=looking back
-1763090403=scape_ape
-1938177931=miscgraphics,11
-1938177932=miscgraphics,10
1936130561=thrall_of_the_serpent
1258863383=yesteryear
1994744000=slice of silent movie
-1691854169=dead can dance
1585002407=magicon,29
1585002405=magicon,27
1585002406=magicon,28
271319484=frostbite
-499867199=meridian
1585002400=magicon,22
-1938177930=miscgraphics,12
-84626226=mudskipper melody
1585002403=magicon,25
1585002404=magicon,26
3641802=wall
1585002401=magicon,23
1585002402=magicon,24
-606457701=wolf mountain
1276599785=button_brown
1969878899=emotes,13
1969878897=emotes,11
1969878898=emotes,12
1969878896=emotes,10
-1938177928=miscgraphics,14
-907669678=brew hoo hoo
-1938177929=miscgraphics,13
72999866=subterranea
619237947=the galleon
-1764950404=scape sad
295831445=heart and mind
908430134=dangerous road
738888631=tradebacking
-174800339=verdana_11pt_regular
686705631=lightwalk
-601591436=side_background_bottom
-1479412376=the navigator
-359173459=zamorak zoo
744536246=null and void
-1701556798=magicoff2,39
-1701556799=magicoff2,38
-1396384012=bamboo
-200388662=lighthouse
133626717=suspicious
-810515425=voyage
3061973=crag
1802291895=big chords
-1661619479=elfwall
113315621=wood2
1813041183=steelborder2,0
429244831=slug a bug ball
1813041184=steelborder2,1
-1658386264=shining_spirit
738909086=chamber
526264239=verdana_13pt_regular
-877351859=temple
2142215577=the mollusc menace
1124498189=warpath
-2136649922=no way out
-339706871=grimly_fiendish
547534551=wrath and ruin
544229147=lore and order
3327206=load
1610073470=lovakengj_sigil
-419218284=long way home
-662489856=food for thought
1306461568=stagnant
-1662171955=elfdoor
-1043985601=meddling kids
947464074=titlebutton
-1309055712=exposed
-1487348923=ambient jungle
-1829469821=lament of meiyerditch
233203434=leftarrow_small
-1216167350=dangerous
114464611=railings
-1106574323=legend
-1701556767=magicoff2,49
-999707515=time to mine
-1701556768=magicoff2,48
2129339097=magicon,9
2129339096=magicon,8
1959211510=mapfunction,42
2129339095=magicon,7
1959211511=mapfunction,43
2129339094=magicon,6
2129339093=magicon,5
2129339092=magicon,4
2129339091=magicon,3
2129339090=magicon,2
3522472=saga
-1701556769=magicoff2,47
-544722449=rellekka
1033441676=tribal background
1915718129=the desolate isle
1890607150=magicon2,19
1787618597=stranded
1717999087=forgettable melody
1959211512=mapfunction,44
-243680400=peng_emotes,0
1959211513=mapfunction,45
1959211514=mapfunction,46
1959211515=mapfunction,47
1959211516=mapfunction,48
1959211517=mapfunction,49
1705947058=the cellar dwellers
1216634785=landlubber
1884768198=magicoff,40
-1588113323=the rogues den
1884768199=magicoff,41
-905842564=serene
-607599698=prayeroff,2
-607599699=prayeroff,1
1890607142=magicon2,11
1389384362=monkey trouble
1890607143=magicon2,12
1890607144=magicon2,13
1890607145=magicon2,14
1890607146=magicon2,15
1890607147=magicon2,16
1890607148=magicon2,17
1966766798=mausoleum
1890607149=magicon2,18
1808345541=armadyl alliance
290391725=options_slider,7
1890607141=magicon2,10
290391722=options_slider,4
-607599696=prayeroff,4
290391721=options_slider,3
-607599697=prayeroff,3
290391724=options_slider,6
-607599694=prayeroff,6
290391723=options_slider,5
-607599695=prayeroff,5
-607599692=prayeroff,8
-607599693=prayeroff,7
290391720=options_slider,2
-607599691=prayeroff,9
1334775925=chat_background
-1779127378=arabian2
-1779127377=arabian3
528722471=island life
1890607175=magicon2,23
1890607176=magicon2,24
949634504=mouse trap
1890607177=magicon2,25
1890607178=magicon2,26
1890607179=magicon2,27
3327403=logo
290391719=options_slider,1
1092249049=storm brew
290391718=options_slider,0
404357804=everywhere
1890607172=magicon2,20
1890607173=magicon2,21
951530772=contest
1890607174=magicon2,22
-1701556776=magicoff2,40
1884768176=magicoff,39
-395250469=corporal punishment
1749113330=newbie melody
1884768174=magicoff,37
1884768175=magicoff,38
-1701556772=magicoff2,44
-1701556773=magicoff2,43
-1701556774=magicoff2,42
-1701556775=magicoff2,41
-858121616=tzhaar
1884768172=magicoff,35
1884768173=magicoff,36
666772244=combat_shield
1884768170=magicoff,33
1884768171=magicoff,34
1959211509=mapfunction,41
1639695510=mapmarker
-1661748240=friends_icons
-552301350=knightly
-1918044851=mastermindless
-1701556770=magicoff2,46
-1701556771=magicoff2,45
201526300=corporealbeast
1959211508=mapfunction,40
105001967=nomad
-70910145=clickcross,3
-1737914947=mapfunction,5
1801745440=staticons2,11
-70910146=clickcross,2
-865479038=tribal
-1737914946=mapfunction,6
1801745441=staticons2,12
-70910147=clickcross,1
-1737914945=mapfunction,7
1801745442=staticons2,13
-70910148=clickcross,0
-1737914944=mapfunction,8
1801745443=staticons2,14
-1737914943=mapfunction,9
1801745444=staticons2,15
1801745445=staticons2,16
1801745446=staticons2,17
-1877545169=land down under
93921962=books
-1737914949=mapfunction,3
-1737914948=mapfunction,4
-1655721428=prayeroff,19
-2136884405=title.jpg
-1655721429=prayeroff,18
1584819628=magicoff,6
1584819629=magicoff,7
437480876=voodoo cult
1584819624=magicoff,2
1584819625=magicoff,3
1584819626=magicoff,4
-1737914952=mapfunction,0
1584819627=magicoff,5
-1737914951=mapfunction,1
124995564=harmony2
1584819622=magicoff,0
1801745439=staticons2,10
1584819623=magicoff,1
346263512=dorgeshun city
-1665011705=down and out
1890607180=magicon2,28
1890607181=magicon2,29
1417471781=titlescroll
1959211446=mapfunction,20
1956141536=options_radio_buttons,0
736568812=ballad of enchantment
-1737914950=mapfunction,2
1959211447=mapfunction,21
1959211448=mapfunction,22
1959211449=mapfunction,23
-1890130256=morytania
-70910141=clickcross,7
-70910142=clickcross,6
1956141539=options_radio_buttons,3
-70910143=clickcross,5
1956141538=options_radio_buttons,2
284766976=splendour
-70910144=clickcross,4
1956141537=options_radio_buttons,1
196677638=the quizmaster
530068296=overture
-1123094568=sl_button
-700552779=hosidius_sigil
-614076819=sad meadow
1956141543=options_radio_buttons,7
1956141542=options_radio_buttons,6
1956141541=options_radio_buttons,5
1956141540=options_radio_buttons,4
1584819631=magicoff,9
1846633612=gnome village
-2128560371=sl_back
1969878905=emotes,19
306819362=crystal castle
1584819630=magicoff,8
1969878903=emotes,17
303737220=options_icons,7
1969878904=emotes,18
1969878901=emotes,15
-78220817=devils_may_care
1969878902=emotes,16
-40521666=dimension x
1969878900=emotes,14
673424924=the lunar isle
789609582=brimstail's scales
303737222=options_icons,9
303737221=options_icons,8
1959211415=mapfunction,10
3059343=coil
1959211416=mapfunction,11
1959211417=mapfunction,12
-1256560486=last_man_standing
1959211418=mapfunction,13
336238005=rightarrow_small
1959211419=mapfunction,14
-677662361=forever
-1655721430=prayeroff,17
-1655721431=prayeroff,16
-1655721432=prayeroff,15
1959211420=mapfunction,15
1959211663=mapfunction,90
1959211421=mapfunction,16
1959211422=mapfunction,17
1959211423=mapfunction,18
303737217=options_icons,4
303737216=options_icons,3
303737215=options_icons,2
-1665005042=funny bunnies
303737214=options_icons,1
303737219=options_icons,6
303737218=options_icons,5
303737213=options_icons,0
95997798=we are the fairies
2001751835=desert heat
1959211424=mapfunction,19
-1655721437=prayeroff,10
687938017=clanwars
-1776024210=desolate_mage
-650944128=strength of saradomin
-1655721433=prayeroff,14
1160873524=aye car rum ba
-1655721434=prayeroff,13
-1655721435=prayeroff,12
-1081314499=marble
-1655721436=prayeroff,11
1097075475=reset,0
1959211477=mapfunction,30
-693313916=warriors guild
3506388=roof
1959211478=mapfunction,31
1097075476=reset,1
-2134967800=dagannoth dawn
-985763247=planks
1959211479=mapfunction,32
1999746381=fenkenstrain's refrain
898010371=garden of winter
359174830=rat hunt
1959211482=mapfunction,35
686441581=lightness
1959211483=mapfunction,36
1959211484=mapfunction,37
1959211485=mapfunction,38
1959211486=mapfunction,39
2023201035=dwarf theme
1959211480=mapfunction,33
1959211481=mapfunction,34
-1065532022=combatboxes,1
-1065532021=combatboxes,2
-1065532020=combatboxes,3
1867160429=old_tiles
394756979=scape santa
25205919=elfroof2
-663428071=dangerous way
-1065532023=combatboxes,0
1959211450=mapfunction,24
-895939599=spirit
1959211451=mapfunction,25
1959211452=mapfunction,26
1959211453=mapfunction,27
1959211454=mapfunction,28
1959211455=mapfunction,29
-275310687=undercurrent
212205923=goblin village
-303898981=faithless
-1381531001=tomb raider
260940912=marzipan
1343267530=backhmid1
1343267531=backhmid2
1097468315=horizon
-1655721404=prayeroff,22
623451622=kourend_the_magnificent
-1655721405=prayeroff,21
-1655721406=prayeroff,20
-1655721400=prayeroff,26
-313384067=p12_full
-1655721401=prayeroff,25
-1655721402=prayeroff,24
-1655721403=prayeroff,23
95848451=dream
1966781751=maws_jaws_claws
-995428255=parade
95734525=method of madness
-1308064877=hitmarks
1030045177=mutant medley
1333034828=blackmark
851641665=davy jones locker
417793574=scrollbar
1346720900=backleft2
1884768206=magicoff,48
1884768207=magicoff,49
1801140808=fangs for the memory
1884768204=magicoff,46
1345432055=pinball wizard
1884768205=magicoff,47
-783693496=dance of the undead
1274780903=chompy hunt
465278529=the lost tribe
-1666437481=combaticons3,6
2032696205=cabin fever
-1666437480=combaticons3,7
1825640471=borderland
415928477=zeah_mining
1884768202=magicoff,44
-607599700=prayeroff,0
1884768203=magicoff,45
1884768200=magicoff,42
1884768201=magicoff,43
-1666437487=combaticons3,0
-1666437486=combaticons3,1
813726263=crystal cave
1235442953=pathways
518814479=lullaby
-1666437483=combaticons3,4
1585007985=magicon2,7
-1666437482=combaticons3,5
1585007986=magicon2,8
-1666437485=combaticons3,2
1585007987=magicon2,9
-1666437484=combaticons3,3
104080482=moody
1969878967=emotes,39
-665666447=work work work
1364992651=evil bobs island
1969878965=emotes,37
1227328817=verdana_15pt_regular
1969878966=emotes,38
1969878963=emotes,35
1581724013=monkey business
1969878964=emotes,36
-74307138=miscellania
1969878961=emotes,33
1969878962=emotes,34
1969878960=emotes,32
1131171307=wayward
-1154558416=sl_arrows
529929957=overpass
1258058669=huffman
-694094064=adventure
1171698653=orb_xp,1
1171698652=orb_xp,0
1171698655=orb_xp,3
1171698654=orb_xp,2
1802171733=arceuus_sigil
221109227=tears of guthix
-1661754893=elfroof
-1666437478=combaticons3,9
1124565314=warrior
1969878958=emotes,30
1969878959=emotes,31
-934797897=reggae
2110260221=the genie
-1666437479=combaticons3,8
104257585=mummy
-1923924724=sworddecor,0
2136325196=staticons,17
-1332194002=background
2136164423=homescape
-1923924721=sworddecor,3
2136325194=staticons,15
-1923924722=sworddecor,2
-873564465=tiptoe
2136325195=staticons,16
-1923924723=sworddecor,1
123560953=espionage
2136325192=staticons,13
2136325193=staticons,14
1038911415=gnome king
2136325190=staticons,11
2136325191=staticons,12
1854274741=karamja jam
1969878989=emotes,40
-1242708793=glyphs
563269755=the terrible tower
1650323088=twilight
-12868552=sea shanty
289742397=book of spells
1880989696=dragontooth island
2136325189=staticons,10
110873=pen
-454421102=out of the deep
825919099=options_icons,19
825919097=options_icons,17
825919098=options_icons,18
-1349119470=cursed
1585007978=magicon2,0
825919095=options_icons,15
1585007979=magicon2,1
825919096=options_icons,16
825919093=options_icons,13
825919094=options_icons,14
825919091=options_icons,11
825919092=options_icons,12
-895977880=sphinx
-874529881=city of the dead
825919090=options_icons,10
1585007981=magicon2,3
1585007982=magicon2,4
1585007983=magicon2,5
-1618729246=body parts
1585007984=magicon2,6
1585007980=magicon2,2
1086075866=shayzien_sigil
2103661451=jester minute
-911346307=steelborder,2
-1809781334=button_brown_big
-911346306=steelborder,3
-816227352=vision
-911346309=steelborder,0
109407595=shine
-911346308=steelborder,1
-119954464=combaticons3,12
-119954465=combaticons3,11
-1846853118=armageddon
-119954462=combaticons3,14
-119954463=combaticons3,13
-119954460=combaticons3,16
-908183966=scarab
-119954461=combaticons3,15
-282886672=home sweet home
103666243=march
1969878929=emotes,22
1643875326=fire and brimstone
1969878927=emotes,20
-119954466=combaticons3,10
1969878928=emotes,21
-839455633=close quarters
941457503=way of the enchanter
-1453405761=mor-ul-rek
-415134015=have a blast
-1658514874=floating free
1213477442=chickened out
-1619800349=emotes_locked,27
-599680631=fear and loathing
-1081041422=insect queen
-1268786147=forest
-119954459=combaticons3,17
-119954457=combaticons3,19
-119954458=combaticons3,18
-850395529=trouble brewing
-1773920521=cave of the goblins
-771284962=claustrophobia
1310729739=bankbuttons,2
1306691868=upcoming
1465443077=over to nardah
1310729744=bankbuttons,7
1310729743=bankbuttons,6
1310729742=bankbuttons,5
1234827707=deep wildy
-90350772=xenophobe
-750127868=arabian
1310729741=bankbuttons,4
1310729740=bankbuttons,3
1041911129=waterlogged
108875897=runes
1447063382=barb wire
-378865792=magic dance
285466503=overlay_duel
1814287296=zeah_magic
1976894499=down to earth
1969878936=emotes,29
1969878934=emotes,27
-1567437308=deadlands
1969878935=emotes,28
1310729738=bankbuttons,1
1969878932=emotes,25
-957019274=too many cooks
1310729737=bankbuttons,0
2092627105=silence
1969878933=emotes,26
1969878930=emotes,23
1969878931=emotes,24
-901674570=well of voyage
1787935731=quill_oblique_large
-365283881=quill_caps_large
1157777820=lunar_alphabet
24702590=lunar_alphabet_lrg
================================================
FILE: config/server-config.example.json
================================================
{
"configDir": "./config",
"cacheDir": "./cache",
"host": "0.0.0.0",
"port": 43594,
"updateServerHost": "0.0.0.0",
"updateServerPort": 43592,
"loginServerHost": "0.0.0.0",
"loginServerPort": 43591,
"rsaMod": "119568088839203297999728368933573315070738693395974011872885408638642676871679245723887367232256427712869170521351089799352546294030059890127723509653145359924771433131004387212857375068629466435244653901851504845054452735390701003613803443469723435116497545687393297329052988014281948392136928774011011998343",
"rsaExp": "12747337179295870166838611986189126026507945904720545965726999254744592875817063488911622974072289858092633084100280214658532446654378876853112046049506789703022033047774294965255097838909779899992870910011426403494610880634275141204442441976355383839981584149269550057129306515912021704593400378690444280161",
"encryptionEnabled": true,
"playerSavePath": "./data/saves",
"showWelcome": true,
"expRate": 1,
"giveAchievements": true,
"checkCredentials": true,
"tutorialEnabled": false,
"adminDropsEnabled": true,
"bypassTeleportRequirements": false
}
================================================
FILE: data/config/combat-styles.json
================================================
{
"unarmed": [
{
"type": "crush",
"exp": "attack",
"anim": "punch",
"button_id": 2
},
{
"type": "crush",
"exp": "strength",
"anim": "kick",
"button_id": 3
},
{
"type": "crush",
"exp": "defence",
"anim": "punch",
"button_id": 4
}
],
"axe": [
{
"type": "slash",
"exp": "attack",
"anim": "slash",
"button_id": 2
},
{
"type": "slash",
"exp": "strength",
"anim": "slash",
"button_id": 5
},
{
"type": "crush",
"exp": "strength",
"anim": "slash",
"button_id": 4
},
{
"type": "slash",
"exp": "defence",
"anim": "slash",
"button_id": 3
}
],
"dagger": [
{
"type": "stab",
"exp": "attack",
"anim": "stab",
"button_id": 2
},
{
"type": "stab",
"exp": "strength",
"anim": "stab",
"button_id": 3
},
{
"type": "slash",
"exp": "strength",
"anim": "slash",
"button_id": 4
},
{
"type": "stab",
"exp": "defence",
"anim": "stab",
"button_id": 5
}
]
}
================================================
FILE: data/config/examine-item-data.yaml
================================================
- id: 0 # Dwarf remains
examine: "The body of a Dwarf savaged by Goblins."
- id: 1 # Toolkit
examine: "Good for repairing broken cannons."
- id: 2 # Cannonball
examine: "Ammo for the Dwarf Cannon."
- id: 3 # Nulodion's notes
examine: "Construction notes for Dwarf cannon ammo."
- id: 4 # Ammo mould
examine: "Used to make cannon ammunition."
- id: 5 # Instruction manual
examine: "An old note book."
- id: 6 # Cannon base
examine: "The cannon is built on this."
- id: 8 # Cannon stand
examine: "The mounting for the multicannon."
- id: 10 # Cannon barrels
examine: "The barrels of the multicannon."
- id: 12 # Cannon furnace
examine: "This powers the multicannon."
- id: 14 # Railing
examine: "A metal railing replacement."
- id: 15 # Holy table napkin
examine: "A cloth given to me by Sir Galahad."
- id: 16 # Magic whistle
examine: "A small tin whistle."
- id: 17 # Grail bell
examine: "I wonder what happens when I ring it?"
- id: 18 # Magic gold feather
examine: "It will point the way for me."
- id: 19 # Holy grail
examine: "A holy and powerful artefact."
- id: 20 # White cog
examine: "A cog from some machinery."
- id: 21 # Black cog
examine: "A cog from some machinery."
- id: 22 # Blue cog
examine: "A cog from some machinery."
- id: 23 # Red cog
examine: "A cog from some machinery."
- id: 24 # Rat poison
examine: "Doesn't look very tasty."
- id: 25 # Red vine worm
examine: "Wormy."
- id: 26 # Fishing trophy
examine: "Hemenster fishing contest trophy."
- id: 27 # Fishing pass
examine: "Pass to the Hemenster fishing contest."
- id: 28 # Insect repellent
examine: "Drives away all known 6 legged creatures."
- id: 30 # Bucket of wax
examine: "It's a bucket of wax."
- id: 32 # Lit black candle
examine: "A lit spooky candle."
- id: 33 # Lit candle
examine: "A lit candle."
- id: 35 # Excalibur
examine: "This used to belong to King Arthur."
- id: 36 # Candle
examine: "A candle."
- id: 38 # Black candle
examine: "A spooky candle."
- id: 39 # Bronze arrowtips
examine: "I can make some arrows with these."
- id: 40 # Iron arrowtips
examine: "I can make some arrows with these."
- id: 41 # Steel arrowtips
examine: "I can make some arrows with these."
- id: 42 # Mithril arrowtips
examine: "I can make some arrows with these."
- id: 43 # Adamant arrowtips
examine: "I can make some arrows with these."
- id: 44 # Rune arrowtips
examine: "I can make some arrows with these."
- id: 45 # Opal bolt tips
examine: "Opal bolt tips."
- id: 46 # Pearl bolt tips
examine: "Pearl bolt tips."
- id: 47 # Barb bolttips
examine: "I can make bolts with these."
- id: 48 # Longbow (u)
examine: "I need to find a string for this."
- id: 50 # Shortbow (u)
examine: "I need to find a string for this."
- id: 52 # Arrow shaft
examine: "A wooden arrow shaft."
- id: 53 # Headless arrow
examine: "A wooden arrow shaft with flights attached."
- id: 54 # Oak shortbow (u)
examine: "An unstrung oak shortbow; I need a bowstring for this."
- id: 56 # Oak longbow (u)
examine: "An unstrung oak longbow; I need a bowstring for this."
- id: 58 # Willow longbow (u)
examine: "An unstrung willow longbow; I need a bowstring for this."
- id: 60 # Willow shortbow (u)
examine: "An unstrung willow shortbow; I need a bowstring for this."
- id: 62 # Maple longbow (u)
examine: "An unstrung maple longbow; I need a bowstring for this."
- id: 64 # Maple shortbow (u)
examine: "An unstrung maple shortbow; I need a bowstring for this."
- id: 66 # Yew longbow (u)
examine: "An unstrung yew longbow; I need a bowstring for this."
- id: 68 # Yew shortbow (u)
examine: "An unstrung yew shortbow; I need a bowstring for this."
- id: 70 # Magic longbow (u)
examine: "An unstrung magic longbow; I need a bowstring for this."
- id: 72 # Magic shortbow (u)
examine: "An unstrung magic shortbow; I need a bowstring for this."
- id: 74 # Khazard helmet
examine: "A helmet, as worn by the minions of General Khazard."
- id: 75 # Khazard armour
examine: "Armour, as worn by the minions of General Khazard."
- id: 76 # Khazard cell keys
examine: "These keys open the cells at the Khazard fight arena."
- id: 77 # Khali brew
examine: "A bottle of Khazard's worst brew."
- id: 78 # Ice arrows
examine: "Can only be fired from yew, magic, dark or twisted bows."
- id: 83 # Lever
examine: "A lever to open something perhaps?"
- id: 84 # Staff of armadyl
examine: "The power in this staff causes it to vibrate gently."
- id: 85 # Shiny key
examine: "It catches the light!."
- id: 86 # Pendant of lucien
examine: "An amulet made by Lucien."
- id: 87 # Armadyl pendant
examine: "Worn by followers of Armadyl."
- id: 88 # Boots of lightness
examine: "Magic boots that make you lighter than normal."
- id: 89 # Boots of lightness
examine: "Magic boots that make you lighter than normal."
- id: 90 # Child's blanket
examine: "It's very soft!"
- id: 113 # Strength potion(4)
examine: "4 doses of Strength potion."
- id: 115 # Strength potion(3)
examine: "3 doses of Strength potion."
- id: 117 # Strength potion(2)
examine: "2 doses of Strength potion."
- id: 119 # Strength potion(1)
examine: "1 dose of Strength potion."
- id: 121 # Attack potion(3)
examine: "3 doses of Attack potion."
- id: 123 # Attack potion(2)
examine: "2 doses of Attack potion."
- id: 125 # Attack potion(1)
examine: "1 dose of Attack potion."
- id: 127 # Restore potion(3)
examine: "3 doses of restore potion."
- id: 129 # Restore potion(2)
examine: "2 doses of restore potion."
- id: 131 # Restore potion(1)
examine: "1 dose of restore potion."
- id: 133 # Defence potion(3)
examine: "3 doses of Defence potion."
- id: 135 # Defence potion(2)
examine: "2 doses of Defence potion."
- id: 137 # Defence potion(1)
examine: "1 dose of Defence potion."
- id: 139 # Prayer potion(3)
examine: "3 doses of Prayer restore potion."
- id: 141 # Prayer potion(2)
examine: "2 doses of Prayer restore potion."
- id: 143 # Prayer potion(1)
examine: "1 dose of Prayer restore potion."
- id: 145 # Super attack(3)
examine: "3 doses of super Attack potion."
- id: 147 # Super attack(2)
examine: "2 doses of super Attack potion."
- id: 149 # Super attack(1)
examine: "1 dose of super Attack potion."
- id: 151 # Fishing potion(3)
examine: "3 doses of Fishing potion."
- id: 153 # Fishing potion(2)
examine: "2 doses of Fishing potion."
- id: 155 # Fishing potion(1)
examine: "1 dose of Fishing potion."
- id: 157 # Super strength(3)
examine: "3 doses of super Strength potion."
- id: 159 # Super strength(2)
examine: "2 doses of super Strength potion."
- id: 161 # Super strength(1)
examine: "1 dose of super Strength potion."
- id: 163 # Super defence(3)
examine: "3 doses of super Defence potion."
- id: 165 # Super defence(2)
examine: "2 doses of super Defence potion."
- id: 167 # Super defence(1)
examine: "1 dose of super Defence potion."
- id: 169 # Ranging potion(3)
examine: "3 doses of ranging potion."
- id: 171 # Ranging potion(2)
examine: "2 doses of ranging potion."
- id: 173 # Ranging potion(1)
examine: "1 dose of ranging potion."
- id: 175 # Antipoison(3)
examine: "3 doses of antipoison potion."
- id: 177 # Antipoison(2)
examine: "2 doses of antipoison potion."
- id: 179 # Antipoison(1)
examine: "1 dose of antipoison potion."
- id: 181 # Superantipoison(3)
examine: "3 doses of super antipoison potion."
- id: 183 # Superantipoison(2)
examine: "2 doses of super antipoison potion."
- id: 185 # Superantipoison(1)
examine: "1 dose of super antipoison potion."
- id: 187 # Weapon poison
examine: "For use on daggers and projectiles."
- id: 189 # Zamorak brew(3)
examine: "3 doses of Zamorak brew."
- id: 191 # Zamorak brew(2)
examine: "2 doses of Zamorak brew."
- id: 193 # Zamorak brew(1)
examine: "1 dose of Zamorak brew."
- id: 195 # Potion
examine: "This is meant to be good for spots."
- id: 197 # Poison chalice
examine: "A cup of a strange brew..."
- id: 221 # Eye of newt
examine: "It seems to be looking at me."
- id: 223 # Red spiders' eggs
examine: "Ewww!"
- id: 225 # Limpwurt root
examine: "The root of a limpwurt plant."
- id: 227 # Vial of water
examine: "A glass vial containing water."
- id: 229 # Vial
examine: "An empty glass vial."
- id: 231 # Snape grass
examine: "Strange spiky grass."
- id: 233 # Pestle and mortar
examine: "I can grind things for potions in this."
- id: 235 # Unicorn horn dust
examine: "Finely ground horn of Unicorn."
- id: 237 # Unicorn horn
examine: "This horn has restorative properties."
- id: 239 # White berries
examine: "Sour berries, used in potions."
- id: 241 # Dragon scale dust
examine: "Finely ground scale of Dragon."
- id: 243 # Blue dragon scale
examine: "A large shiny scale."
- id: 245 # Wine of zamorak
examine: "An evil wine for an evil god."
- id: 247 # Jangerberries
examine: "They don't look very ripe."
- id: 249 # Guam leaf
examine: "A bitter green herb."
- id: 251 # Marrentill
examine: "A herb used in poison cures."
- id: 253 # Tarromin
examine: "A useful herb."
- id: 255 # Harralander
examine: "A useful herb."
- id: 257 # Ranarr weed
examine: "A useful herb."
- id: 259 # Irit leaf
examine: "A useful herb."
- id: 261 # Avantoe
examine: "A useful herb."
- id: 263 # Kwuarm
examine: "A powerful herb."
- id: 265 # Cadantine
examine: "A powerful herb."
- id: 267 # Dwarf weed
examine: "A powerful herb."
- id: 269 # Torstol
examine: "A powerful herb."
- id: 271 # Pressure gauge
examine: "It looks like part of a machine."
- id: 272 # Fish food
examine: "Keeps your pet fish strong and healthy."
- id: 273 # Poison
examine: "This stuff looks nasty."
- id: 274 # Poisoned fish food
examine: "Doesn't seem very nice to the poor fishes."
- id: 275 # Key
examine: "A slightly smelly key."
- id: 276 # Rubber tube
examine: "It's slightly charred."
- id: 277 # Oil can
examine: "It's pretty full."
- id: 278 # Cattleprod
examine: "A sharp cattleprod."
- id: 279 # Sheep feed
examine: "Councillor Halgrive gave me this to kill some sheep."
- id: 280 # Sheep bones (1)
examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 281 # Sheep bones (2)
examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 282 # Sheep bones (3)
examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 283 # Sheep bones (4)
examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 284 # Plague jacket
examine: "This should protect me from the plague, I hope!"
- id: 285 # Plague trousers
examine: "These should protect me from the plague, I hope!"
- id: 286 # Orange goblin mail
examine: "Armour designed to fit goblins."
- id: 287 # Blue goblin mail
examine: "Armour designed to fit goblins."
- id: 288 # Goblin mail
examine: "Armour designed to fit goblins."
- id: 290 # Research package
examine: "This contains some vital research results."
- id: 291 # Notes
examine: "It seems to be written in some kind of code."
- id: 292 # Book on baxtorian
examine: "A book on elven history in northern Gielinor."
- id: 294 # Glarial's pebble
examine: "A small pebble with elven inscription."
- id: 295 # Glarial's amulet
examine: "A bright green gem set in a necklace."
- id: 296 # Glarial's urn
examine: "An urn containing Glarial's ashes."
- id: 299 # Mithril seeds
examine: "Magical seeds in a mithril case."
- id: 300 # Rat's tail
examine: "A bit of rat."
- id: 301 # Lobster pot
examine: "Useful for catching lobsters."
- id: 303 # Small fishing net
examine: "Useful for catching small fish."
- id: 305 # Big fishing net
examine: "Useful for catching lots of fish."
- id: 307 # Fishing rod
examine: "Useful for catching sardine or herring."
- id: 309 # Fly fishing rod
examine: "Useful for catching salmon or trout."
- id: 311 # Harpoon
examine: "Useful for catching really big fish."
- id: 313 # Fishing bait
examine: "For use with a fishing rod."
- id: 314 # Feather
examine: "Used for fly fishing."
- id: 315 # Shrimps
examine: "Some nicely cooked shrimp."
- id: 317 # Raw shrimps
examine: "I should try cooking this."
- id: 319 # Anchovies
examine: "Some nicely cooked anchovies."
- id: 321 # Raw anchovies
examine: "I should try cooking this."
- id: 323 # Burnt fish
examine: "Oops!"
- id: 325 # Sardine
examine: "Some nicely cooked sardines."
- id: 327 # Raw sardine
examine: "I should try cooking this."
- id: 329 # Salmon
examine: "Some nicely cooked salmon."
- id: 331 # Raw salmon
examine: "I should try cooking this."
- id: 333 # Trout
examine: "Some nicely cooked trout."
- id: 335 # Raw trout
examine: "I should try cooking this."
- id: 337 # Giant carp
examine: "Some nicely cooked giant carp."
- id: 338 # Raw giant carp
examine: "I should try cooking this."
- id: 339 # Cod
examine: "Some nicely cooked cod."
- id: 341 # Raw cod
examine: "I should try cooking this."
- id: 343 # Burnt fish
examine: "Oops!"
- id: 345 # Raw herring
examine: "I should try cooking this."
- id: 347 # Herring
examine: "Some nicely cooked herring."
- id: 349 # Raw pike
examine: "I should try cooking this."
- id: 351 # Pike
examine: "Some nicely cooked pike."
- id: 353 # Raw mackerel
examine: "I should try cooking this."
- id: 355 # Mackerel
examine: "Some nicely cooked mackerel."
- id: 357 # Burnt fish
examine: "Oops!"
- id: 359 # Raw tuna
examine: "I should try cooking this."
- id: 361 # Tuna
examine: "Wow, this is a big fish."
- id: 363 # Raw bass
examine: "I should try cooking this."
- id: 365 # Bass
examine: "Wow, this is a big fish."
- id: 367 # Burnt fish
examine: "Oops!"
- id: 369 # Burnt fish
examine: "Oops!"
- id: 371 # Raw swordfish
examine: "I should try cooking this."
- id: 373 # Swordfish
examine: "I'd better be careful eating this!"
- id: 375 # Burnt swordfish
examine: "Oops!"
- id: 377 # Raw lobster
examine: "I should try cooking this."
- id: 379 # Lobster
examine: "This looks tricky to eat."
- id: 381 # Burnt lobster
examine: "Oops!"
- id: 383 # Raw shark
examine: "I should try cooking this."
- id: 385 # Shark
examine: "I'd better be careful eating this."
- id: 387 # Burnt shark
examine: "Oops!"
- id: 389 # Raw manta ray
examine: "A rare catch."
- id: 391 # Manta ray
examine: "A rare catch."
- id: 393 # Burnt manta ray
examine: "Oops!"
- id: 395 # Raw sea turtle
examine: "A rare catch."
- id: 397 # Sea turtle
examine: "Tasty!"
- id: 399 # Burnt sea turtle
examine: "Oops!"
- id: 401 # Seaweed
examine: "Slightly damp seaweed."
- id: 403 # Edible seaweed
examine: "Slightly damp seaweed."
- id: 405 # Casket
examine: "I hope there's treasure in it."
- id: 407 # Oyster
examine: "Maybe there are pearls inside?"
- id: 409 # Empty oyster
examine: "Aww, it's empty."
- id: 411 # Oyster pearl
examine: "I could work wonders with a chisel on this pearl."
- id: 413 # Oyster pearls
examine: "I could work wonders with a chisel on these pearls."
- id: 415 # Ethenea
examine: "An expensive colourless liquid."
- id: 416 # Liquid honey
examine: "This isn't worth much."
- id: 417 # Sulphuric broline
examine: "It's highly poisonous."
- id: 418 # Plague sample
examine: "Probably best I don't keep this too long."
- id: 419 # Touch paper
examine: "A special kind of paper."
- id: 420 # Distillator
examine: "Apparently it distills."
- id: 422 # Bird feed
examine: "Birds love this stuff!"
- id: 423 # Key
examine: "Opens things."
- id: 424 # Pigeon cage
examine: "It's full of pigeons."
- id: 425 # Pigeon cage
examine: "It's empty..."
- id: 426 # Priest gown
examine: "Top half of a priest suit."
- id: 428 # Priest gown
examine: "Bottom half of a priest suit."
- id: 431 # Karamjan rum
examine: "A very strong spirit brewed in Karamja."
- id: 432 # Chest key
examine: "A key to One-Eyed Hector's chest."
- id: 433 # Pirate message
examine: "Pirates don't have the best handwriting..."
- id: 434 # Clay
examine: "Some hard dry clay."
- id: 436 # Copper ore
examine: "This needs refining."
- id: 438 # Tin ore
examine: "This needs refining."
- id: 440 # Iron ore
examine: "This needs refining."
- id: 442 # Silver ore
examine: "This needs refining."
- id: 444 # Gold ore
examine: "This needs refining."
- id: 446 # 'perfect' gold ore
examine: "This needs refining."
- id: 447 # Mithril ore
examine: "This needs refining."
- id: 449 # Adamantite ore
examine: "This needs refining."
- id: 451 # Runite ore
examine: "This needs refining."
- id: 453 # Coal
examine: "Hmm a non-renewable energy source!"
- id: 455 # Barcrawl card
examine: "The official Alfred Grimhand bar crawl card."
- id: 456 # Scorpion cage
examine: "It's empty!"
- id: 457 # Scorpion cage
examine: "There is 1 scorpion inside."
- id: 458 # Scorpion cage
examine: "There are 2 scorpions inside."
- id: 459 # Scorpion cage
examine: "There are 2 scorpions inside."
- id: 460 # Scorpion cage
examine: "There is 1 scorpion inside."
- id: 461 # Scorpion cage
examine: "There are 2 scorpions inside."
- id: 462 # Scorpion cage
examine: "There is 1 scorpion inside."
- id: 463 # Scorpion cage
examine: "There are 3 scorpions inside."
- id: 464 # Strange fruit
examine: "I wonder what this tastes like?"
- id: 466 # Pickaxe handle
examine: "Useless without the head."
- id: 468 # Broken pickaxe
examine: "Nurmof can fix this for me."
- id: 470 # Broken pickaxe
examine: "Nurmof can fix this for me."
- id: 472 # Broken pickaxe
examine: "Nurmof can fix this for me."
- id: 474 # Broken pickaxe
examine: "Nurmof can fix this for me."
- id: 476 # Broken pickaxe
examine: "Nurmof can fix this for me."
- id: 478 # Broken pickaxe
examine: "Nurmof can fix this for me."
- id: 480 # Bronze pick head
examine: "It's missing a handle."
- id: 482 # Iron pick head
examine: "It's missing a handle."
- id: 484 # Steel pick head
examine: "It's missing a handle."
- id: 486 # Mithril pick head
examine: "It's missing a handle."
- id: 488 # Adamant pick head
examine: "It's missing a handle."
- id: 490 # Rune pick head
examine: "It's missing a handle."
- id: 492 # Axe handle
examine: "Useless without the head."
- id: 494 # Broken axe
examine: "Bob can fix this for me."
- id: 496 # Broken axe
examine: "Bob can fix this for me."
- id: 498 # Broken axe
examine: "Bob can fix this for me."
- id: 500 # Broken axe
examine: "Bob can fix this for me."
- id: 502 # Broken axe
examine: "Bob can fix this for me."
- id: 504 # Broken axe
examine: "Bob can fix this for me."
- id: 506 # Broken axe
examine: "Bob can fix this for me."
- id: 522 # Enchanted beef
examine: "I don't fancy eating this now."
- id: 523 # Enchanted rat
examine: "I don't fancy eating this now."
- id: 524 # Enchanted bear
examine: "I don't fancy eating this now."
- id: 525 # Enchanted chicken
examine: "I don't fancy eating this now."
- id: 526 # Bones
examine: "Bones are for burying!"
- id: 528 # Burnt bones
examine: "Bones are for burying!"
- id: 530 # Bat bones
examine: "Ew it's a pile of bones."
- id: 532 # Big bones
examine: "Ew it's a pile of bones."
- id: 534 # Babydragon bones
examine: "Ew it's a pile of bones."
- id: 536 # Dragon bones
examine: "These would feed a dog for months!"
- id: 538 # Druid's robe
examine: "Keeps a druid's knees nice and warm."
- id: 542 # Monk's robe
examine: "Keeps a monk's knees nice and warm."
- id: 548 # Shade robe
examine: "If a shade had knees, this would keep them nice and warm."
- id: 550 # Newcomer map
examine: "Issued to all new citizens of Gielinor."
- id: 552 # Ghostspeak amulet
examine: "It lets me talk to ghosts."
- id: 553 # Ghost's skull
examine: "Ooooh spooky!"
- id: 554 # Fire rune
examine: "One of the 4 basic elemental Runes."
- id: 555 # Water rune
examine: "One of the 4 basic elemental Runes."
- id: 556 # Air rune
examine: "One of the 4 basic elemental Runes."
- id: 557 # Earth rune
examine: "One of the 4 basic elemental Runes."
- id: 558 # Mind rune
examine: "Used for basic level missile spells."
- id: 559 # Body rune
examine: "Used for curse spells."
- id: 560 # Death rune
examine: "Used for medium level missile spells."
- id: 561 # Nature rune
examine: "Used for alchemy spells."
- id: 562 # Chaos rune
examine: "Used for low level missile spells."
- id: 563 # Law rune
examine: "Used for teleport spells."
- id: 564 # Cosmic rune
examine: "Used for enchant spells."
- id: 565 # Blood rune
examine: "Used for high level missile spells."
- id: 566 # Soul rune
examine: "Used for high level curse spells."
- id: 567 # Unpowered orb
examine: "I'd prefer it if it was powered."
- id: 569 # Fire orb
examine: "A magic glowing orb."
- id: 571 # Water orb
examine: "A magic glowing orb."
- id: 573 # Air orb
examine: "A magic glowing orb."
- id: 575 # Earth orb
examine: "A magic glowing orb."
- id: 581 # Black robe
examine: "I can do magic better in this."
- id: 583 # Bailing bucket
examine: "It's a bailing bucket."
- id: 585 # Bailing bucket
examine: "It's a bailing bucket full of salty water."
- id: 587 # Orb of protection
examine: "A strange glowing green orb."
- id: 588 # Orbs of protection
examine: "Two strange glowing green orbs."
- id: 589 # Gnome amulet
examine: "It's an amulet of protection given to me by the gnomes."
- id: 590 # Tinderbox
examine: "Useful for lighting a fire."
- id: 592 # Ashes
examine: "A heap of ashes."
- id: 594 # Lit torch
examine: "A lit home-made torch."
- id: 595 # Torch
examine: "An unlit home-made torch."
- id: 596 # Unlit torch
examine: "An unlit home-made torch."
- id: 602 # Lens mould
examine: "An unusual mould in the shape of a disc."
- id: 604 # Bone shard
examine: "A slender bone shard given to you by Zadimus."
- id: 605 # Bone key
examine: "A bone key fashioned from a shard of bone."
- id: 606 # Stone-plaque
examine: "A stone plaque with carved letters in it."
- id: 607 # Tattered scroll
examine: "An ancient tattered scroll."
- id: 608 # Crumpled scroll
examine: "An ancient crumpled scroll."
- id: 609 # Rashiliyia corpse
examine: "The remains of the Zombie Queen."
- id: 610 # Zadimus corpse
examine: "The remains of Zadimus."
- id: 611 # Locating crystal
examine: "A magical crystal sphere."
- id: 612 # Locating crystal
examine: "A magical crystal sphere."
- id: 613 # Locating crystal
examine: "A magical crystal sphere."
- id: 614 # Locating crystal
examine: "A magical crystal sphere."
- id: 615 # Locating crystal
examine: "A magical crystal sphere."
- id: 616 # Beads of the dead
examine: "A curious looking neck ornament."
- id: 617 # Coins
examine: "Lovely money!"
- id: 618 # Bone beads
examine: "Beads carved out of a bone."
- id: 619 # Paramaya ticket
examine: "Allows you to rest in the luxurious Paramayer Inn."
- id: 621 # Ship ticket
examine: "Allows you passage on the 'Lady of the waves' ship."
- id: 623 # Sword pommel
examine: "An ivory sword pommel."
- id: 624 # Bervirius notes
examine: "Notes taken from the tomb of Bervirius."
- id: 625 # Wampum belt
examine: "A decorated belt used to trade information between distant villages."
- id: 666 # Portrait
examine: "Picture of a posing Paladin."
- id: 667 # Blurite sword
examine: "A Faladian Knight's sword."
- id: 668 # Blurite ore
examine: "Definitely blue."
- id: 669 # Specimen jar
examine: "A receptacle for specimens!"
- id: 670 # Specimen brush
examine: "A small brush used to clean rock samples."
- id: 671 # Animal skull
examine: "A carefully-kept-safe skull sample."
- id: 672 # Special cup
examine: "A special cup."
- id: 673 # Teddy
examine: "A lucky mascot."
- id: 674 # Cracked sample
examine: "A roughly shaped piece of rock."
- id: 675 # Rock pick
examine: "A small pick for digging."
- id: 676 # Trowel
examine: "Used for digging!"
- id: 677 # Panning tray
examine: "An empty tray for panning."
- id: 678 # Panning tray
examine: "This tray contains gold."
- id: 679 # Panning tray
examine: "This tray contains mud."
- id: 680 # Nuggets
examine: "Pure, lovely gold!"
- id: 681 # Ancient talisman
examine: "An unusual symbol as yet unidentified by the archaeological expert."
- id: 682 # Unstamped letter
examine: "A letter waiting to be stamped."
- id: 683 # Sealed letter
examine: "A sealed letter of recommendation."
- id: 684 # Belt buckle
examine: "Used to hold up trousers!"
- id: 685 # Old boot
examine: "Phew!"
- id: 686 # Rusty sword
examine: "A decent-enough weapon gone rusty."
- id: 687 # Broken arrow
examine: "This must have been shot at high speed."
- id: 688 # Buttons
examine: "Not Dick Whittington's helper at all!"
- id: 689 # Broken staff
examine: "I pity the poor person beaten with this!"
- id: 690 # Broken glass
examine: "Smashed glass."
- id: 691 # Level 1 certificate
examine: "The owner has passed the Earth Sciences level 1 exam."
- id: 692 # Level 2 certificate
examine: "The owner has passed Earth Sciences level 2 exam."
- id: 693 # Level 3 certificate
examine: "The owner has passed Earth Sciences level 3 exam."
- id: 694 # Ceramic remains
examine: "Smashing!"
- id: 695 # Old tooth
examine: "Now, if I can just find a tooth fairy to sell this to..."
- id: 696 # Invitation letter
examine: "A letter inviting me to use the private dig shafts."
- id: 697 # Damaged armour
examine: "It would be hard to repair this!"
- id: 698 # Broken armour
examine: "No use to me in this state..."
- id: 699 # Stone tablet
examine: "An old stone slab with writing on it."
- id: 700 # Chemical powder
examine: "An acrid chemical."
- id: 701 # Ammonium nitrate
examine: "An acrid chemical."
- id: 702 # Unidentified liquid
examine: "A strong chemical."
- id: 703 # Nitroglycerin
examine: "A strong chemical."
- id: 704 # Ground charcoal
examine: "Charcoal - crushed to small pieces!"
- id: 705 # Mixed chemicals
examine: "A mixture of strong chemicals."
- id: 706 # Mixed chemicals
examine: "A mixture of strong chemicals."
- id: 707 # Chemical compound
examine: "A mixture of strong chemicals."
- id: 708 # Arcenia root
examine: "The root of an arcenia plant."
- id: 709 # Chest key
examine: "This fits a chest."
- id: 710 # Vase
examine: "A vessel for holding plants."
- id: 711 # Book on chemicals
examine: "It's about chemicals, judging from its cover."
- id: 712 # Cup of tea
examine: "A nice cup of tea."
- id: 714 # Radimus notes
examine: "Notes given to you by Radimus Erkle, it includes a partially completed map."
- id: 715 # Radimus notes
examine: "Notes given to you by Radimus Erkle, it includes a partially completed map."
- id: 716 # Bull roarer
examine: "It makes a loud but interesting sound when swung in the air."
- id: 717 # Scrawled note
examine: "A scrawled note with spidery writing on it."
- id: 718 # A scribbled note
examine: "A scrawled note with spidery writing on it."
- id: 719 # Scrumpled note
examine: "A scrawled note with spidery writing on it."
- id: 720 # Sketch
examine: "A rough sketch of a bowl shaped vessel given to you by Gujuo."
- id: 721 # Gold bowl
examine: "A specially made bowl constructed out of pure gold."
- id: 722 # Blessed gold bowl
examine: "A specially made bowl constructed out of pure gold and blessed."
- id: 723 # Golden bowl
examine: "A specially made golden bowl with water."
- id: 724 # Golden bowl
examine: "A specially made bowl constructed out of pure gold. It has pure water in it."
- id: 725 # Golden bowl
examine: "A blessed golden bowl. It has water in it."
- id: 726 # Golden bowl
examine: "A blessed golden bowl. It has pure sacred water in it."
- id: 727 # Hollow reed
examine: "One of nature's pipes."
- id: 729 # Shamans tome
examine: "It looks like the Shamans personal notes..."
- id: 731 # Enchanted vial
examine: "An enchanted empty glass vial."
- id: 732 # Holy water
examine: "A vial of holy water, good against certain demons."
- id: 733 # Smashed glass
examine: "Fragments of a broken container."
- id: 735 # Yommi tree seeds
examine: "These need to be germinated before they can be used."
- id: 736 # Yommi tree seeds
examine: "These are germinated and ready to be planted in fertile soil."
- id: 737 # Snakeweed mixture
examine: "It's a mixture of Snakeweed and water. Needs another ingredient."
- id: 738 # Ardrigal mixture
examine: "It's a mixture of Ardrigal and water. Needs another ingredient."
- id: 739 # Bravery potion
examine: "A bravery potion for which Gujuo gave you the details, let's hope it works."
- id: 740 # Blue hat
examine: "A strange blue wizards hat."
- id: 741 # Chunk of crystal
examine: "It looks like it's been snapped off of something."
- id: 742 # Hunk of crystal
examine: "It looks like it's been snapped off of something."
- id: 743 # Lump of crystal
examine: "It looks like it's been snapped off of something."
- id: 744 # Heart crystal
examine: "A heart shaped crystal."
- id: 745 # Heart crystal
examine: "A heart shaped crystal."
- id: 746 # Dark dagger
examine: "A black obsidian dagger, it has a strange aura about it."
- id: 747 # Glowing dagger
examine: "A black obsidian dagger, it has a strange aura about it - it seems to be glowing."
- id: 748 # Holy force
examine: "A powerful spell for good."
- id: 749 # Yommi totem
examine: "A well carved totem pole made from the trunk of a Yommi tree."
- id: 750 # Gilded totem
examine: "A gilded totem pole from the Kharazi tribe."
- id: 751 # Gnomeball
examine: "A ball used in Gnomeball."
- id: 753 # Cadava berries
examine: "Poisonous berries."
- id: 755 # Message
examine: "A message from Juliet to Romeo."
- id: 756 # Cadava potion
examine: "I'm meant to give this to Juliet."
- id: 757 # Book
examine: "The Shield of Arrav by A R Wright."
- id: 763 # Broken shield
examine: "Half of the Shield of Arrav."
- id: 765 # Broken shield
examine: "Half of the Shield of Arrav."
- id: 767 # Phoenix crossbow
examine: "Former property of the Phoenix Gang."
- id: 769 # Certificate
examine: "I can use this to claim a reward from the King."
- id: 771 # Dramen branch
examine: "A limb of the fabled Dramen tree."
- id: 772 # Dramen staff
examine: "Crafted from a Dramen tree branch."
- id: 773 # 'perfect' ring
examine: "A perfect ruby ring."
- id: 774 # 'perfect' necklace
examine: "A perfect ruby necklace."
- id: 775 # Cooking gauntlets
examine: "These gauntlets empower with a greater ability to cook fish."
- id: 777 # Chaos gauntlets
examine: "These gauntlets empower spell casters."
- id: 778 # Steel gauntlets
examine: "My reward for assisting the Fitzharmon family."
- id: 779 # Crest part
examine: "A fragment of the Fitzharmon family crest."
- id: 780 # Crest part
examine: "A fragment of the Fitzharmon family crest."
- id: 781 # Crest part
examine: "A fragment of the Fitzharmon family crest."
- id: 782 # Family crest
examine: "The Fitzharmon family crest."
- id: 783 # Bark sample
examine: "A sample of the bark from the Grand Tree."
- id: 784 # Translation book
examine: "A book to translate the ancient gnome language into English."
- id: 785 # Glough's journal
examine: "Perhaps I should read it and see what Glough is up to!"
- id: 786 # Hazelmere's scroll
examine: "Hazelmere wrote something down on this scroll."
- id: 787 # Lumber order
examine: "An order from the Karamja shipyard."
- id: 788 # Glough's key
examine: "The key to Glough's chest."
- id: 789 # Twigs
examine: "Twigs bound together in the shape of a T."
- id: 790 # Twigs
examine: "Twigs bound together in the shape of a U."
- id: 791 # Twigs
examine: "Twigs bound together in the shape of a Z."
- id: 792 # Twigs
examine: "Twigs bound together in the shape of a O."
- id: 793 # Daconia rock
examine: "An ancient rock with strange magical properties."
- id: 794 # Invasion plans
examine: "These are plans for an invasion!"
- id: 795 # War ship
examine: "A model of a Karamja warship."
- id: 800 # Bronze thrownaxe
examine: "A finely balanced throwing axe."
- id: 801 # Iron thrownaxe
examine: "A finely balanced throwing axe."
- id: 802 # Steel thrownaxe
examine: "A finely balanced throwing axe."
- id: 803 # Mithril thrownaxe
examine: "A finely balanced throwing axe."
- id: 805 # Rune thrownaxe
examine: "A finely balanced throwing axe."
- id: 806 # Bronze dart
examine: "A deadly throwing dart with a bronze tip."
- id: 807 # Iron dart
examine: "A deadly throwing dart with an iron tip."
- id: 808 # Steel dart
examine: "A deadly throwing dart with a steel tip."
- id: 809 # Mithril dart
examine: "A deadly throwing dart with a mithril tip."
- id: 810 # Adamant dart
examine: "A deadly throwing dart with an adamant tip."
- id: 811 # Rune dart
examine: "A deadly throwing dart with a rune tip."
- id: 812 # Bronze dart(p)
examine: "A deadly poisoned dart with a bronze tip."
- id: 813 # Iron dart(p)
examine: "A deadly poisoned dart with an iron tip."
- id: 814 # Steel dart(p)
examine: "A deadly poisoned dart with a steel tip."
- id: 815 # Mithril dart(p)
examine: "A deadly poisoned dart with a mithril tip."
- id: 816 # Adamant dart(p)
examine: "A deadly poisoned dart with an adamant tip."
- id: 817 # Rune dart(p)
examine: "A deadly poisoned dart with a rune tip."
- id: 819 # Bronze dart tip
examine: "A deadly looking dart tip made of bronze - needs feathers for flight."
- id: 820 # Iron dart tip
examine: "A deadly looking dart tip made of iron - needs feathers for flight."
- id: 821 # Steel dart tip
examine: "A deadly-looking dart tip made of steel - needs feathers for flight."
- id: 822 # Mithril dart tip
examine: "A deadly looking dart tip made of mithril - needs feathers for flight."
- id: 823 # Adamant dart tip
examine: "A deadly-looking dart tip made of adamant - needs feathers for flight."
- id: 824 # Rune dart tip
examine: "A deadly-looking dart tip made of runite - needs feathers for flight."
- id: 825 # Bronze javelin
examine: "A bronze tipped javelin."
- id: 826 # Iron javelin
examine: "An iron tipped javelin."
- id: 827 # Steel javelin
examine: "A steel tipped javelin."
- id: 828 # Mithril javelin
examine: "A mithril tipped javelin."
- id: 829 # Adamant javelin
examine: "An adamant tipped javelin."
- id: 830 # Rune javelin
examine: "A rune tipped javelin."
- id: 831 # Bronze javelin(p)
examine: "A bronze tipped javelin."
- id: 832 # Iron javelin(p)
examine: "An iron tipped javelin."
- id: 833 # Steel javelin(p)
examine: "A steel tipped javelin."
- id: 834 # Mithril javelin(p)
examine: "A mithril tipped javelin."
- id: 835 # Adamant javelin(p)
examine: "An adamant tipped javelin."
- id: 836 # Rune javelin(p)
examine: "A rune tipped javelin."
- id: 837 # Crossbow
examine: "This fires crossbow bolts."
- id: 839 # Longbow
examine: "A nice sturdy bow."
- id: 841 # Shortbow
examine: "Short but effective."
- id: 843 # Oak shortbow
examine: "A shortbow made out of oak, still effective."
- id: 845 # Oak longbow
examine: "A nice sturdy bow made out of oak."
- id: 847 # Willow longbow
examine: "A nice sturdy bow made out of willow."
- id: 849 # Willow shortbow
examine: "A shortbow made out of willow, still effective."
- id: 851 # Maple longbow
examine: "A nice sturdy bow made out of Maple."
- id: 853 # Maple shortbow
examine: "A shortbow made out of Maple, still effective."
- id: 855 # Yew longbow
examine: "A nice sturdy bow made out of yew."
- id: 857 # Yew shortbow
examine: "A shortbow made out of yew, still effective."
- id: 859 # Magic longbow
examine: "A nice sturdy magical bow."
- id: 861 # Magic shortbow
examine: "Short and magical, but still effective."
- id: 863 # Iron knife
examine: "A finely balanced throwing knife."
- id: 864 # Bronze knife
examine: "A finely balanced throwing knife."
- id: 865 # Steel knife
examine: "A finely balanced throwing knife."
- id: 866 # Mithril knife
examine: "A finely balanced throwing knife."
- id: 867 # Adamant knife
examine: "A finely balanced throwing knife."
- id: 868 # Rune knife
examine: "A finely balanced throwing knife."
- id: 869 # Black knife
examine: "A finely balanced throwing knife."
- id: 870 # Bronze knife(p)
examine: "A finely balanced throwing knife."
- id: 871 # Iron knife(p)
examine: "A finely balanced throwing knife."
- id: 872 # Steel knife(p)
examine: "A finely balanced throwing knife."
- id: 873 # Mithril knife(p)
examine: "A finely balanced throwing knife."
- id: 874 # Black knife(p)
examine: "A finely balanced throwing knife."
- id: 875 # Adamant knife(p)
examine: "A finely balanced throwing knife."
- id: 876 # Rune knife(p)
examine: "A finely balanced throwing knife."
- id: 877 # Bronze bolts
examine: "Bronze crossbow bolts."
- id: 879 # Opal bolts
examine: "Opal tipped Bronze crossbow bolts."
- id: 880 # Pearl bolts
examine: "Pearl tipped Iron crossbow bolts."
- id: 881 # Barbed bolts
examine: "Great if you have a crossbow!"
- id: 882 # Bronze arrow
examine: "Arrows with bronze heads."
- id: 883 # Bronze arrow(p)
examine: "Venomous-looking arrows."
- id: 884 # Iron arrow
examine: "Arrows with iron heads."
- id: 885 # Iron arrow(p)
examine: "Venomous-looking arrows."
- id: 886 # Steel arrow
examine: "Arrows with steel heads."
- id: 887 # Steel arrow(p)
examine: "Venomous-looking arrows."
- id: 888 # Mithril arrow
examine: "Arrows with mithril heads."
- id: 889 # Mithril arrow(p)
examine: "Venomous-looking arrows."
- id: 890 # Adamant arrow
examine: "Arrows with adamant heads."
- id: 891 # Adamant arrow(p)
examine: "Venomous-looking arrows."
- id: 892 # Rune arrow
examine: "Arrows with rune heads."
- id: 893 # Rune arrow(p)
examine: "Venomous-looking arrows."
- id: 946 # Knife
examine: "A dangerous looking knife."
- id: 948 # Bear fur
examine: "This would make warm clothing."
- id: 950 # Silk
examine: "It's a sheet of silk."
- id: 952 # Spade
examine: "A slightly muddy spade."
- id: 954 # Rope
examine: "A coil of rope."
- id: 956 # Flier
examine: "Get your axes from Bob's Axes."
- id: 958 # Grey wolf fur
examine: "This would make warm clothing."
- id: 960 # Plank
examine: "A plank of wood!"
- id: 962 # Christmas cracker
examine: "I need to pull this."
- id: 964 # Skull
examine: "Ooooh spooky!"
- id: 966 # Tile
examine: "A fraction of a roof."
- id: 968 # Rock
examine: "A rock"
- id: 970 # Papyrus
examine: "Used for making notes."
- id: 972 # Papyrus
examine: "Used for making notes."
- id: 973 # Charcoal
examine: "A lump of charcoal."
- id: 975 # Machete
examine: "A jungle specific slashing device."
- id: 981 # Disk of returning
examine: "Used to get out of Thordur's blackhole."
- id: 983 # Brass key
examine: "Opens a door that leads into a dungeon."
- id: 989 # Crystal key
examine: "A mysterious key for a mysterious chest."
- id: 991 # Muddy key
examine: "It looks like the key to a chest."
- id: 993 # Sinister key
examine: "You get a sense of dread from this key."
- id: 995 # Coins
examine: "Lovely money!"
- id: 1005 # White apron
examine: "A mostly clean apron."
- id: 1009 # Brass necklace
examine: "I'd prefer a gold one."
- id: 1011 # Blue skirt
examine: "Leg covering favoured by women and wizards."
- id: 1013 # Pink skirt
examine: "A ladies skirt."
- id: 1015 # Black skirt
examine: "Clothing favoured by women and dark wizards."
- id: 1017 # Wizard hat
examine: "A silly pointed hat."
- id: 1037 # Bunny ears
examine: "A rabbit-like adornment."
- id: 1038 # Red partyhat
examine: "A nice hat from a cracker."
- id: 1040 # Yellow partyhat
examine: "A nice hat from a cracker."
- id: 1042 # Blue partyhat
examine: "A nice hat from a cracker."
- id: 1044 # Green partyhat
examine: "A nice hat from a cracker."
- id: 1046 # Purple partyhat
examine: "A nice hat from a cracker."
- id: 1048 # White partyhat
examine: "A nice hat from a cracker."
- id: 1050 # Santa hat
examine: "It's a Santa hat."
- id: 1052 # Cape of legends
examine: "The cape worn by members of the Legends Guild."
- id: 1059 # Leather gloves
examine: "These will keep my hands warm!"
- id: 1061 # Leather boots
examine: "Comfortable leather boots."
- id: 1063 # Leather vambraces
examine: "Better than no armour!"
- id: 1067 # Iron platelegs
examine: "These look pretty heavy."
- id: 1069 # Steel platelegs
examine: "These look pretty heavy."
- id: 1071 # Mithril platelegs
examine: "These look pretty heavy."
- id: 1073 # Adamant platelegs
examine: "These look pretty heavy."
- id: 1075 # Bronze platelegs
examine: "These look pretty heavy."
- id: 1077 # Black platelegs
examine: "Big, black and heavy looking."
- id: 1079 # Rune platelegs
examine: "These look pretty heavy."
- id: 1081 # Iron plateskirt
examine: "Designer leg protection."
- id: 1083 # Steel plateskirt
examine: "Designer leg protection."
- id: 1085 # Mithril plateskirt
examine: "Designer leg protection."
- id: 1087 # Bronze plateskirt
examine: "Designer leg protection."
- id: 1089 # Black plateskirt
examine: "Big, black and heavy looking."
- id: 1091 # Adamant plateskirt
examine: "Designer leg protection."
- id: 1093 # Rune plateskirt
examine: "Designer leg protection."
- id: 1095 # Leather chaps
examine: "Better than no armour!"
- id: 1097 # Studded chaps
examine: "Those studs should provide a bit more protection."
- id: 1099 # Green d'hide chaps
examine: "Made from 100% real dragonhide."
- id: 1101 # Iron chainbody
examine: "A series of connected metal rings."
- id: 1103 # Bronze chainbody
examine: "A series of connected metal rings."
- id: 1105 # Steel chainbody
examine: "A series of connected metal rings."
- id: 1107 # Black chainbody
examine: "A series of connected metal rings."
- id: 1109 # Mithril chainbody
examine: "A series of connected metal rings."
- id: 1111 # Adamant chainbody
examine: "A series of connected metal rings."
- id: 1113 # Rune chainbody
examine: "A series of connected metal rings."
- id: 1115 # Iron platebody
examine: "Provides excellent protection."
- id: 1117 # Bronze platebody
examine: "Provides excellent protection."
- id: 1119 # Steel platebody
examine: "Provides excellent protection."
- id: 1121 # Mithril platebody
examine: "Provides excellent protection."
- id: 1123 # Adamant platebody
examine: "Provides excellent protection."
- id: 1125 # Black platebody
examine: "Provides excellent protection."
- id: 1127 # Rune platebody
examine: "Provides excellent protection."
- id: 1129 # Leather body
examine: "Better than no armour!"
- id: 1131 # Hardleather body
examine: "Harder than normal leather."
- id: 1133 # Studded body
examine: "Those studs should provide a bit more protection."
- id: 1135 # Green d'hide body
examine: "Made from 100% real dragonhide."
- id: 1137 # Iron med helm
examine: "A medium sized helmet."
- id: 1139 # Bronze med helm
examine: "A medium sized helmet."
- id: 1141 # Steel med helm
examine: "A medium sized helmet."
- id: 1143 # Mithril med helm
examine: "A medium sized helmet."
- id: 1145 # Adamant med helm
examine: "A medium sized helmet."
- id: 1147 # Rune med helm
examine: "A medium sized helmet."
- id: 1149 # Dragon med helm
examine: "Makes the wearer pretty intimidating."
- id: 1151 # Black med helm
examine: "A medium sized helmet."
- id: 1153 # Iron full helm
examine: "A full face helmet."
- id: 1155 # Bronze full helm
examine: "A full face helmet."
- id: 1157 # Steel full helm
examine: "A full face helmet."
- id: 1159 # Mithril full helm
examine: "A full face helmet."
- id: 1161 # Adamant full helm
examine: "A full face helmet."
- id: 1163 # Rune full helm
examine: "A full face helmet."
- id: 1165 # Black full helm
examine: "A full face helmet."
- id: 1167 # Leather cowl
examine: "Better than no armour!"
- id: 1169 # Coif
examine: "Light weight head protection."
- id: 1171 # Wooden shield
examine: "A solid wooden shield."
- id: 1173 # Bronze sq shield
examine: "A medium square shield."
- id: 1175 # Iron sq shield
examine: "A medium square shield."
- id: 1177 # Steel sq shield
examine: "A medium square shield."
- id: 1179 # Black sq shield
examine: "A medium square shield."
- id: 1181 # Mithril sq shield
examine: "A medium square shield."
- id: 1183 # Adamant sq shield
examine: "A medium square shield."
- id: 1185 # Rune sq shield
examine: "A medium square shield."
- id: 1187 # Dragon sq shield
examine: "An ancient and powerful looking Dragon Square shield."
- id: 1189 # Bronze kiteshield
examine: "A large metal shield."
- id: 1191 # Iron kiteshield
examine: "A large metal shield."
- id: 1193 # Steel kiteshield
examine: "A large metal shield."
- id: 1195 # Black kiteshield
examine: "A large metal shield."
- id: 1197 # Mithril kiteshield
examine: "A large metal shield."
- id: 1199 # Adamant kiteshield
examine: "A large metal shield."
- id: 1201 # Rune kiteshield
examine: "A large metal shield."
- id: 1203 # Iron dagger
examine: "Short but pointy."
- id: 1205 # Bronze dagger
examine: "Short but pointy."
- id: 1207 # Steel dagger
examine: "Short but pointy."
- id: 1209 # Mithril dagger
examine: "A dangerous dagger."
- id: 1211 # Adamant dagger
examine: "Short and deadly."
- id: 1213 # Rune dagger
examine: "A powerful dagger."
- id: 1215 # Dragon dagger
examine: "A powerful dagger."
- id: 1217 # Black dagger
examine: "A vicious black dagger."
- id: 1219 # Iron dagger(p)
examine: "The blade is covered with poison."
- id: 1221 # Bronze dagger(p)
examine: "This dagger is poisoned."
- id: 1223 # Steel dagger(p)
examine: "The blade has been poisoned."
- id: 1225 # Mithril dagger(p)
examine: "A poisoned Mithril dagger."
- id: 1227 # Adamant dagger(p)
examine: "A very dangerous poisoned dagger."
- id: 1229 # Rune dagger(p)
examine: "The blade is covered with a nasty poison."
- id: 1231 # Dragon dagger(p)
examine: "A powerful dagger."
- id: 1233 # Black dagger(p)
examine: "This dagger is poisoned."
- id: 1237 # Bronze spear
examine: "A bronze tipped spear."
- id: 1239 # Iron spear
examine: "An iron tipped spear."
- id: 1241 # Steel spear
examine: "A steel tipped spear."
- id: 1243 # Mithril spear
examine: "A mithril tipped spear."
- id: 1245 # Adamant spear
examine: "An adamantite tipped spear."
- id: 1247 # Rune spear
examine: "A rune tipped spear."
- id: 1249 # Dragon spear
examine: "A dragon tipped spear."
- id: 1251 # Bronze spear(p)
examine: "A poisoned bronze tipped spear."
- id: 1253 # Iron spear(p)
examine: "A poisoned iron tipped spear."
- id: 1255 # Steel spear(p)
examine: "A poisoned steel tipped spear."
- id: 1257 # Mithril spear(p)
examine: "A poisoned mithril tipped spear."
- id: 1259 # Adamant spear(p)
examine: "A poisoned adamantite tipped spear."
- id: 1261 # Rune spear(p)
examine: "A poisoned rune tipped spear."
- id: 1263 # Dragon spear(p)
examine: "A poisoned dragon tipped spear."
- id: 1265 # Bronze pickaxe
examine: "Used for mining."
- id: 1267 # Iron pickaxe
examine: "Used for mining."
- id: 1269 # Steel pickaxe
examine: "Used for mining."
- id: 1271 # Adamant pickaxe
examine: "Used for mining."
- id: 1273 # Mithril pickaxe
examine: "Used for mining."
- id: 1275 # Rune pickaxe
examine: "Used for mining."
- id: 1277 # Bronze sword
examine: "A razor sharp sword."
- id: 1279 # Iron sword
examine: "A razor sharp sword."
- id: 1281 # Steel sword
examine: "A razor sharp sword."
- id: 1283 # Black sword
examine: "A razor sharp sword."
- id: 1285 # Mithril sword
examine: "A razor sharp sword."
- id: 1287 # Adamant sword
examine: "A razor sharp sword."
- id: 1289 # Rune sword
examine: "A razor sharp sword."
- id: 1291 # Bronze longsword
examine: "A razor sharp longsword."
- id: 1293 # Iron longsword
examine: "A razor sharp longsword."
- id: 1295 # Steel longsword
examine: "A razor sharp longsword."
- id: 1297 # Black longsword
examine: "A razor sharp longsword."
- id: 1299 # Mithril longsword
examine: "A razor sharp longsword."
- id: 1301 # Adamant longsword
examine: "A razor sharp longsword."
- id: 1303 # Rune longsword
examine: "A razor sharp longsword."
- id: 1305 # Dragon longsword
examine: "A very powerful sword."
- id: 1307 # Bronze 2h sword
examine: "A two handed sword."
- id: 1309 # Iron 2h sword
examine: "A two handed sword."
- id: 1311 # Steel 2h sword
examine: "A two handed sword."
- id: 1313 # Black 2h sword
examine: "A two handed sword."
- id: 1315 # Mithril 2h sword
examine: "A two handed sword."
- id: 1317 # Adamant 2h sword
examine: "A two handed sword."
- id: 1319 # Rune 2h sword
examine: "A two handed sword."
- id: 1321 # Bronze scimitar
examine: "A vicious, curved sword."
- id: 1323 # Iron scimitar
examine: "A vicious, curved sword."
- id: 1325 # Steel scimitar
examine: "A vicious, curved sword."
- id: 1327 # Black scimitar
examine: "A vicious, curved sword."
- id: 1329 # Mithril scimitar
examine: "A vicious, curved sword."
- id: 1331 # Adamant scimitar
examine: "A vicious, curved sword."
- id: 1333 # Rune scimitar
examine: "A vicious, curved sword."
- id: 1335 # Iron warhammer
examine: "I don't think it's intended for joinery."
- id: 1337 # Bronze warhammer
examine: "I don't think it's intended for joinery."
- id: 1339 # Steel warhammer
examine: "I don't think it's intended for joinery."
- id: 1341 # Black warhammer
examine: "I don't think it's intended for joinery."
- id: 1343 # Mithril warhammer
examine: "I don't think it's intended for joinery."
- id: 1347 # Rune warhammer
examine: "I don't think it's intended for joinery."
- id: 1349 # Iron axe
examine: "A woodcutter's axe."
- id: 1351 # Bronze axe
examine: "A woodcutter's axe."
- id: 1353 # Steel axe
examine: "A woodcutter's axe."
- id: 1355 # Mithril axe
examine: "A powerful axe."
- id: 1357 # Adamant axe
examine: "A powerful axe."
- id: 1359 # Rune axe
examine: "A powerful axe."
- id: 1361 # Black axe
examine: "A sinister looking axe."
- id: 1363 # Iron battleaxe
examine: "A vicious looking axe."
- id: 1365 # Steel battleaxe
examine: "A vicious looking axe."
- id: 1367 # Black battleaxe
examine: "A vicious looking axe."
- id: 1369 # Mithril battleaxe
examine: "A vicious looking axe."
- id: 1371 # Adamant battleaxe
examine: "A vicious looking axe."
- id: 1373 # Rune battleaxe
examine: "A vicious looking axe."
- id: 1375 # Bronze battleaxe
examine: "A vicious looking axe."
- id: 1377 # Dragon battleaxe
examine: "A vicious looking axe."
- id: 1379 # Staff
examine: "It's a slightly magical stick."
- id: 1381 # Staff of air
examine: "A Magical staff."
- id: 1383 # Staff of water
examine: "A Magical staff."
- id: 1385 # Staff of earth
examine: "A Magical staff."
- id: 1387 # Staff of fire
examine: "A Magical staff."
- id: 1389 # Magic staff
examine: "A Magical staff."
- id: 1391 # Battlestaff
examine: "It's a slightly magical stick."
- id: 1393 # Fire battlestaff
examine: "It's a slightly magical stick."
- id: 1395 # Water battlestaff
examine: "It's a slightly magical stick."
- id: 1397 # Air battlestaff
examine: "It's a slightly magical stick."
- id: 1399 # Earth battlestaff
examine: "It's a slightly magical stick."
- id: 1401 # Mystic fire staff
examine: "It's a slightly magical stick."
- id: 1403 # Mystic water staff
examine: "It's a slightly magical stick."
- id: 1405 # Mystic air staff
examine: "It's a slightly magical stick."
- id: 1407 # Mystic earth staff
examine: "It's a slightly magical stick."
- id: 1409 # Iban's staff
examine: "An ancient staff, formerly the property of Iban."
- id: 1410 # Iban's staff
examine: "I'll need to get this repaired before I can use it."
- id: 1419 # Scythe
examine: "It's a Scythe."
- id: 1420 # Iron mace
examine: "A spiky mace."
- id: 1422 # Bronze mace
examine: "A spiky mace."
- id: 1424 # Steel mace
examine: "A spiky mace."
- id: 1426 # Black mace
examine: "A spiky mace."
- id: 1428 # Mithril mace
examine: "A spiky mace."
- id: 1430 # Adamant mace
examine: "A spiky mace."
- id: 1432 # Rune mace
examine: "A spiky mace."
- id: 1434 # Dragon mace
examine: "A spiky mace."
- id: 1436 # Rune essence
examine: "An uncharged Rune Stone."
- id: 1438 # Air talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1440 # Earth talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1442 # Fire talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1444 # Water talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1446 # Body talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1448 # Mind talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1452 # Chaos talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1454 # Cosmic talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1456 # Death talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1458 # Law talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1462 # Nature talisman
examine: "A mysterious power emanates from the talisman..."
- id: 1464 # Archery ticket
examine: "I can exchange this for equipment."
- id: 1465 # Weapon poison
examine: "For use on daggers and projectiles."
- id: 1466 # Sea slug
examine: "A rather nasty looking crustacean."
- id: 1467 # Damp sticks
examine: "Some damp wooden sticks."
- id: 1468 # Dry sticks
examine: "Some dry wooden sticks."
- id: 1469 # Broken glass
examine: "Smashed glass."
- id: 1470 # Red bead
examine: "A small round red bead."
- id: 1472 # Yellow bead
examine: "A small round yellow bead."
- id: 1474 # Black bead
examine: "A small round black bead."
- id: 1476 # White bead
examine: "A small round white bead."
- id: 1478 # Amulet of accuracy
examine: "It increases my aim."
- id: 1480 # Rock
examine: "A chunk of rock."
- id: 1481 # Orb of light
examine: "A magical sphere that glimmers within."
- id: 1482 # Orb of light
examine: "A magical sphere that glimmers within."
- id: 1483 # Orb of light
examine: "A magical sphere that glimmers within."
- id: 1484 # Orb of light
examine: "A magical sphere that glimmers within."
- id: 1486 # Piece of railing
examine: "A broken piece of railing."
- id: 1487 # Unicorn horn
examine: "A withered unicorn horn."
- id: 1488 # Paladin's badge
examine: "A coat of arms of the Ardougne Paladins."
- id: 1489 # Paladin's badge
examine: "A coat of arms of the Ardougne Paladins."
- id: 1490 # Paladin's badge
examine: "A coat of arms of the Ardougne Paladins."
- id: 1491 # Witch's cat
examine: "A cat."
- id: 1492 # Doll of iban
examine: "A simple doll with Iban's likeness."
- id: 1493 # Old journal
examine: "An account of the last times of someone."
- id: 1494 # History of iban
examine: "The tale of Iban."
- id: 1495 # Klank's gauntlets
examine: "Strong dwarvish gloves."
- id: 1496 # Iban's dove
examine: "I thought you only saw these in pairs?"
- id: 1497 # Amulet of othanian
examine: "A mystical demonic amulet."
- id: 1498 # Amulet of doomion
examine: "A mystical demonic amulet."
- id: 1499 # Amulet of holthion
examine: "A mystical demonic amulet."
- id: 1500 # Iban's shadow
examine: "A strange dark liquid."
- id: 1501 # Dwarf brew
examine: "Smells stronger than most spirits."
- id: 1502 # Iban's ashes
examine: "The burnt remains of Iban."
- id: 1503 # Warrant
examine: "A search warrant for a house in Ardougne."
- id: 1504 # Hangover cure
examine: "It doesn't look very tasty."
- id: 1506 # Gas mask
examine: "Stops me from breathing nasty stuff!"
- id: 1507 # A small key
examine: "Quite a small key."
- id: 1508 # A scruffy note
examine: "It seems to say \"hongorer lure\"..."
- id: 1509 # Book
examine: "Turnip growing for beginners."
- id: 1510 # Picture
examine: "A picture of a lady called Elena."
- id: 1511 # Logs
examine: "A number of wooden logs."
- id: 1513 # Magic logs
examine: "Logs cut from a magic tree."
- id: 1515 # Yew logs
examine: "Logs cut from a yew tree."
- id: 1517 # Maple logs
examine: "Logs cut from a maple tree."
- id: 1519 # Willow logs
examine: "Logs cut from a willow tree."
- id: 1521 # Oak logs
examine: "Logs cut from an oak tree."
- id: 1523 # Lockpick
examine: "For picking tough locks."
- id: 1526 # Snake weed
examine: "This herb is Snake Weed."
- id: 1528 # Ardrigal
examine: "This herb is Ardrigal."
- id: 1530 # Sito foil
examine: "This herb is Sito Foil."
- id: 1532 # Volencia moss
examine: "This herb is Volencia Moss."
- id: 1534 # Rogue's purse
examine: "This herb is Rogue's Purse."
- id: 1535 # Map part
examine: "A piece of the map to Crandor."
- id: 1536 # Map part
examine: "A piece of the map to Crandor."
- id: 1537 # Map part
examine: "A piece of the map to Crandor."
- id: 1538 # Crandor map
examine: "A map of the route to Crandor."
- id: 1539 # Steel nails
examine: "Keeps things in place fairly permanently."
- id: 1540 # Anti-dragon shield
examine: "This provides partial protection from dragonbreath attacks."
- id: 1542 # Maze key
examine: "A key to Melzar's Maze."
- id: 1543 # Key
examine: "A red key from Melzar's Maze."
- id: 1544 # Key
examine: "An orange key from Melzar's Maze."
- id: 1545 # Key
examine: "A yellow key from Melzar's Maze."
- id: 1546 # Key
examine: "A blue key from Melzar's Maze."
- id: 1547 # Key
examine: "A magenta key from Melzar's Maze."
- id: 1548 # Key
examine: "A green key from Melzar's Maze."
- id: 1549 # Stake
examine: "A very pointy stick."
- id: 1550 # Garlic
examine: "A clove of garlic."
- id: 1552 # Seasoned sardine
examine: "Sardine flavoured with doogle leaves."
- id: 1554 # Fluffs' kitten
examine: "It looks like it's lost."
- id: 1555 # Pet kitten
examine: "This kitten seems to like you."
- id: 1556 # Pet kitten
examine: "This kitten seems to like you."
- id: 1557 # Pet kitten
examine: "This kitten seems to like you."
- id: 1558 # Pet kitten
examine: "This kitten seems to like you."
- id: 1559 # Pet kitten
examine: "This kitten seems to like you."
- id: 1560 # Pet kitten
examine: "This kitten seems to like you."
- id: 1561 # Pet cat
examine: "This cat definitely likes you."
- id: 1562 # Pet cat
examine: "This cat definitely likes you."
- id: 1563 # Pet cat
examine: "This cat definitely likes you."
- id: 1564 # Pet cat
examine: "This cat definitely likes you."
- id: 1565 # Pet cat
examine: "This cat definitely likes you."
- id: 1566 # Pet cat
examine: "This cat definitely likes you."
- id: 1567 # Pet cat
examine: "This cat is so well fed it can hardly move."
- id: 1568 # Pet cat
examine: "This cat is so well fed it can hardly move."
- id: 1569 # Pet cat
examine: "This cat is so well fed it can hardly move."
- id: 1570 # Pet cat
examine: "This cat is so well fed it can hardly move."
- id: 1571 # Pet cat
examine: "This cat is so well fed it can hardly move."
- id: 1572 # Pet cat
examine: "This cat is so well fed it can hardly move."
- id: 1573 # Doogle leaves
examine: "A tasty herb, good for seasoning."
- id: 1575 # Cat training medal
examine: "For feline training expertise."
- id: 1577 # Pete's candlestick
examine: "Scarface Pete's Candlestick."
- id: 1579 # Thieves' armband
examine: "This denotes a Master Thief."
- id: 1580 # Ice gloves
examine: "These will keep my hands cold!"
- id: 1581 # Blamish snail slime
examine: "Yuck."
- id: 1582 # Blamish oil
examine: "Made from the finest snail slime."
- id: 1583 # Fire feather
examine: "Firebird feather."
- id: 1584 # Id papers
examine: "Apparently my name is Hartigen."
- id: 1585 # Oily fishing rod
examine: "Useful for catching lava eels."
- id: 1586 # Miscellaneous key
examine: "I wonder what this unlocks?."
- id: 1590 # Dusty key
examine: "Never let your home get like this."
- id: 1591 # Jail key
examine: "Key to a cell."
- id: 1592 # Ring mould
examine: "Used to make gold rings."
- id: 1594 # Unholy mould
examine: "Used to make unholy symbols."
- id: 1595 # Amulet mould
examine: "Used to make gold amulets."
- id: 1597 # Necklace mould
examine: "Used to make gold necklaces."
- id: 1599 # Holy mould
examine: "Used to make holy symbols of Saradomin."
- id: 1601 # Diamond
examine: "This looks valuable."
- id: 1603 # Ruby
examine: "This looks valuable."
- id: 1605 # Emerald
examine: "This looks valuable."
- id: 1607 # Sapphire
examine: "This looks valuable."
- id: 1609 # Opal
examine: "A semi precious stone."
- id: 1611 # Jade
examine: "A semi precious stone."
- id: 1613 # Red topaz
examine: "A semi precious stone."
- id: 1615 # Dragonstone
examine: "This looks valuable."
- id: 1617 # Uncut diamond
examine: "This would be worth more cut."
- id: 1619 # Uncut ruby
examine: "This would be worth more cut."
- id: 1621 # Uncut emerald
examine: "This would be worth more cut."
- id: 1623 # Uncut sapphire
examine: "This would be worth more cut."
- id: 1625 # Uncut opal
examine: "This would be worth more cut."
- id: 1627 # Uncut jade
examine: "This would be worth more cut."
- id: 1629 # Uncut red topaz
examine: "This would be worth more cut."
- id: 1631 # Uncut dragonstone
examine: "This would be worth more cut."
- id: 1635 # Gold ring
examine: "A valuable ring."
- id: 1637 # Sapphire ring
examine: "A valuable ring."
- id: 1639 # Emerald ring
examine: "A valuable ring."
- id: 1641 # Ruby ring
examine: "A valuable ring."
- id: 1643 # Diamond ring
examine: "A valuable ring."
- id: 1645 # Dragonstone ring
examine: "A valuable ring."
- id: 1654 # Gold necklace
examine: "I wonder if this is valuable."
- id: 1656 # Sapphire necklace
examine: "I wonder if this is valuable."
- id: 1658 # Emerald necklace
examine: "I wonder if this is valuable."
- id: 1660 # Ruby necklace
examine: "I wonder if this is valuable."
- id: 1662 # Diamond necklace
examine: "I wonder if this is valuable."
- id: 1664 # Dragon necklace
examine: "I wonder if this is valuable."
- id: 1692 # Gold amulet
examine: "A plain gold amulet."
- id: 1694 # Sapphire amulet
examine: "I wonder if I can get this enchanted."
- id: 1696 # Emerald amulet
examine: "I wonder if I can get this enchanted."
- id: 1698 # Ruby amulet
examine: "I wonder if I can get this enchanted."
- id: 1700 # Diamond amulet
examine: "I wonder if I can get this enchanted."
- id: 1704 # Amulet of glory
examine: "A very powerful dragonstone amulet."
- id: 1706 # Amulet of glory(1)
examine: "A dragonstone amulet with 1 magic charge."
- id: 1708 # Amulet of glory(2)
examine: "A dragonstone amulet with 2 magic charges."
- id: 1710 # Amulet of glory(3)
examine: "A dragonstone amulet with 3 magic charges."
- id: 1712 # Amulet of glory(4)
examine: "A dragonstone amulet with 4 magic charges."
- id: 1714 # Unstrung symbol
examine: "It needs a string so I can wear it."
- id: 1716 # Unblessed symbol
examine: "A symbol of Saradomin."
- id: 1718 # Holy symbol
examine: "A blessed holy symbol of Saradomin."
- id: 1720 # Unstrung emblem
examine: "It needs a string so I can wear it."
- id: 1722 # Unpowered symbol
examine: "An unblessed symbol of Zamorak."
- id: 1724 # Unholy symbol
examine: "An unholy symbol of Zamorak."
- id: 1725 # Amulet of strength
examine: "An enchanted ruby amulet."
- id: 1727 # Amulet of magic
examine: "An enchanted sapphire amulet of magic."
- id: 1729 # Amulet of defence
examine: "An enchanted emerald amulet of protection."
- id: 1731 # Amulet of power
examine: "An enchanted diamond amulet of power."
- id: 1733 # Needle
examine: "Used with a thread to make clothes."
- id: 1734 # Thread
examine: "Used with a needle to make clothes."
- id: 1735 # Shears
examine: "For shearing sheep."
- id: 1737 # Wool
examine: "I think this came from a sheep."
- id: 1739 # Cowhide
examine: "I should take this to the tannery."
- id: 1741 # Leather
examine: "It's a piece of leather."
- id: 1743 # Hard leather
examine: "It's a piece of hard leather."
- id: 1747 # Black dragonhide
examine: "The scaly rough hide from a Black Dragon."
- id: 1749 # Red dragonhide
examine: "The scaly rough hide from a Red Dragon."
- id: 1751 # Blue dragonhide
examine: "The scaly rough hide from a Blue Dragon."
- id: 1753 # Green dragonhide
examine: "The scaly rough hide from a Green Dragon."
- id: 1755 # Chisel
examine: "Good for detailed Crafting."
- id: 1757 # Brown apron
examine: "A mostly clean apron."
- id: 1759 # Ball of wool
examine: "Spun from sheeps' wool."
- id: 1761 # Soft clay
examine: "Clay soft enough to mould."
- id: 1763 # Red dye
examine: "A little bottle of red dye."
- id: 1765 # Yellow dye
examine: "A little bottle of yellow dye."
- id: 1767 # Blue dye
examine: "A little bottle of blue dye."
- id: 1769 # Orange dye
examine: "A little bottle of orange dye."
- id: 1771 # Green dye
examine: "A little bottle of green dye."
- id: 1773 # Purple dye
examine: "A little bottle of purple dye."
- id: 1775 # Molten glass
examine: "Hot glass ready to be blown into useful objects."
- id: 1777 # Bow string
examine: "I need a bow stave to attach this to."
- id: 1779 # Flax
examine: "I should use this with a spinning wheel."
- id: 1781 # Soda ash
examine: "One of the ingredients for making glass."
- id: 1783 # Bucket of sand
examine: "One of the ingredients for making glass."
- id: 1785 # Glassblowing pipe
examine: "Used to form molten glass into useful items."
- id: 1787 # Unfired pot
examine: "I need to put this in a pottery oven."
- id: 1789 # Unfired pie dish
examine: "I need to put this in a pottery oven."
- id: 1791 # Unfired bowl
examine: "I need to put this in a pottery oven."
- id: 1793 # Woad leaf
examine: "A slightly bluish leaf."
- id: 1794 # Bronze wire
examine: "Useful for Crafting items."
- id: 1796 # Silver necklace
examine: "Anna's shiny silver coated necklace."
- id: 1797 # Silver necklace
examine: "Anna's shiny silver coated necklace coated with a thin layer of flour."
- id: 1798 # Silver cup
examine: "Bob's shiny silver coated tea cup."
- id: 1799 # Silver cup
examine: "Bob's shiny silver coated tea cup coated with a thin layer of flour."
- id: 1800 # Silver bottle
examine: "Carol's shiny silver coated bottle."
- id: 1801 # Silver bottle
examine: "Carol's shiny silver coated bottle coated with a thin layer of flour."
- id: 1802 # Silver book
examine: "David's shiny silver coated book."
- id: 1803 # Silver book
examine: "David's shiny silver coated book coated with a thin layer of flour."
- id: 1804 # Silver needle
examine: "Elizabeth's shiny silver coated needle."
- id: 1805 # Silver needle
examine: "Elizabeth's shiny silver coated needle coated with a thin layer of flour."
- id: 1806 # Silver pot
examine: "Frank's shiny silver coated pot."
- id: 1807 # Silver pot
examine: "Frank's shiny silver coated pot coated with a thin layer of flour."
- id: 1808 # Criminal's thread
examine: "Some red thread found at the murder scene."
- id: 1809 # Criminal's thread
examine: "Some green thread found at the murder scene."
- id: 1810 # Criminal's thread
examine: "Some blue thread found at the murder scene."
- id: 1811 # Flypaper
examine: "A piece of fly paper. It's sticky."
- id: 1812 # Pungent pot
examine: "A pot found at the murder scene, with a sickly odour."
- id: 1813 # Criminal's dagger
examine: "A flimsy-looking dagger found at the crime scene."
- id: 1814 # Criminal's dagger
examine: "A flimsy-looking dagger found at the crime scene coated with a thin layer of flour."
- id: 1815 # Killer's print
examine: "The fingerprints of the murderer."
- id: 1816 # Anna's print
examine: "An imprint of Anna's fingerprint."
- id: 1817 # Bob's print
examine: "An imprint of Bob's fingerprint."
- id: 1818 # Carol's print
examine: "An imprint of Carol's fingerprint."
- id: 1819 # David's print
examine: "An imprint of David's fingerprint."
- id: 1820 # Elizabeth's print
examine: "An imprint of Elizabeth's fingerprint."
- id: 1821 # Frank's print
examine: "An imprint of Frank's fingerprint."
- id: 1822 # Unknown print
examine: "An unidentified fingerprint taken from the murder weapon."
- id: 1823 # Waterskin(4)
examine: "A full waterskin with four portions of water."
- id: 1825 # Waterskin(3)
examine: "A nearly full waterskin with three portions of water."
- id: 1827 # Waterskin(2)
examine: "A half empty waterskin with two portions of water."
- id: 1829 # Waterskin(1)
examine: "A nearly empty waterskin with one portion of water."
- id: 1831 # Waterskin(0)
examine: "A completely empty waterskin - you'll need to fill it up."
- id: 1833 # Desert shirt
examine: "A cool, light desert shirt."
- id: 1835 # Desert robe
examine: "A cool, light desert robe."
- id: 1837 # Desert boots
examine: "Comfortable desert shoes."
- id: 1839 # Metal key
examine: "This key is crudely made. It came from the mining camp Mercenary Captain."
- id: 1840 # Cell door key
examine: "A metallic key, usually used by prison guards."
- id: 1841 # Barrel
examine: "An empty mining barrel."
- id: 1842 # Ana in a barrel
examine: "A mining barrel with Ana in it."
- id: 1843 # Wrought iron key
examine: "This key unlocks a very sturdy gate of some sort. Ana gave me this key."
- id: 1844 # Slave shirt
examine: "A filthy, smelly, flea infested shirt."
- id: 1845 # Slave robe
examine: "A filthy, smelly, flea infested robe."
- id: 1846 # Slave boots
examine: "A set of filthy, smelly, flea infested desert slave boots."
- id: 1847 # Scrumpled paper
examine: "A piece of paper with barely legible writing - looks like a recipe!"
- id: 1849 # Prototype dart
examine: "A prototype throwing dart."
- id: 1850 # Technical plans
examine: "Plans of a technical nature."
- id: 1851 # Tenti pineapple
examine: "The most delicious of pineapples."
- id: 1852 # Bedabin key
examine: "A key to the chest in Captain Siad's room."
- id: 1853 # Prototype dart tip
examine: "A prototype dart tip - it looks deadly."
- id: 1854 # Shantay pass
examine: "Allows you to pass through the Shantay pass into the Kharid Desert."
- id: 1855 # Rock
examine: "Looks like a plain rock, must have some ore in it?"
- id: 1856 # Guide book
examine: "A Tourist's Guide To Ardougne."
- id: 1857 # Totem
examine: "The Rantuki tribe's totem."
- id: 1858 # Address label
examine: "It says 'To Lord Handelmort, Handelmort Mansion'."
- id: 1859 # Raw ugthanki meat
examine: "I need to cook this first."
- id: 1861 # Ugthanki meat
examine: "Freshly cooked ugthanki meat."
- id: 1863 # Pitta dough
examine: "I need to cook this."
- id: 1865 # Pitta bread
examine: "Nicely baked pitta bread. Needs more ingredients to make a kebab."
- id: 1869 # Chopped tomato
examine: "A mixture of tomatoes in a bowl."
- id: 1871 # Chopped onion
examine: "A mixture of onions in a bowl."
- id: 1873 # Chopped ugthanki
examine: "Strips of ugthanki meat in a bowl."
- id: 1875 # Onion & tomato
examine: "A mixture of chopped onions and tomatoes in a bowl."
- id: 1877 # Ugthanki & onion
examine: "A mixture of chopped onions and ugthanki meat in a bowl."
- id: 1879 # Ugthanki & tomato
examine: "A mixture of chopped tomatoes and ugthanki meat in a bowl."
- id: 1881 # Kebab mix
examine: "A mixture of chopped tomatoes, onions and ugthanki meat in a bowl."
- id: 1883 # Ugthanki kebab
examine: "A strange smelling kebab made from ugthanki meat."
- id: 1885 # Ugthanki kebab
examine: "A fresh kebab made from ugthanki meat."
- id: 1887 # Cake tin
examine: "Useful for baking cakes."
- id: 1889 # Uncooked cake
examine: "Now all I need to do is cook it."
- id: 1891 # Cake
examine: "A plain sponge cake."
- id: 1893 # 2/3 cake
examine: "Someone has eaten a big chunk of this cake."
- id: 1895 # Slice of cake
examine: "I'd rather have a whole cake."
- id: 1897 # Chocolate cake
examine: "This looks very tasty."
- id: 1899 # 2/3 chocolate cake
examine: "Someone has eaten a big chunk of this cake."
- id: 1901 # Chocolate slice
examine: "I'd rather have a whole cake."
- id: 1903 # Burnt cake
examine: "Argh what a mess!"
- id: 1905 # Asgarnian ale
examine: "Probably the finest ale in Asgarnia."
- id: 1907 # Wizard's mind bomb
examine: "It's got strange bubbles in it."
- id: 1909 # Greenman's ale
examine: "A glass of frothy ale."
- id: 1911 # Dragon bitter
examine: "A glass of bitter."
- id: 1913 # Dwarven stout
examine: "A pint of thick dark beer."
- id: 1915 # Grog
examine: "A murky glass of some sort of drink."
- id: 1917 # Beer
examine: "A glass of frothy ale."
- id: 1919 # Beer glass
examine: "I need to fill this with beer."
- id: 1921 # Bowl of water
examine: "It's a bowl of water."
- id: 1923 # Bowl
examine: "Useful for mixing things."
- id: 1925 # Bucket
examine: "It's a wooden bucket."
- id: 1927 # Bucket of milk
examine: "It's a bucket of milk."
- id: 1929 # Bucket of water
examine: "It's a bucket of water."
- id: 1931 # Pot
examine: "This pot is empty."
- id: 1933 # Pot of flour
examine: "There is flour in this pot."
- id: 1935 # Jug
examine: "This jug is empty."
- id: 1937 # Jug of water
examine: "It's full of water."
- id: 1939 # Swamp tar
examine: "A foul smelling thick tar-like substance."
- id: 1940 # Raw swamp paste
examine: "A thick tar-like substance mixed with flour."
- id: 1941 # Swamp paste
examine: "A tar-like substance mixed with flour and warmed."
- id: 1942 # Potato
examine: "This could be used to make a good stew."
- id: 1944 # Egg
examine: "A nice fresh egg."
- id: 1947 # Grain
examine: "Some wheat heads."
- id: 1949 # Chef's hat
examine: "What a silly hat."
- id: 1951 # Redberries
examine: "Very bright red berries."
- id: 1953 # Pastry dough
examine: "Potentially pastry."
- id: 1955 # Cooking apple
examine: "Keeps the doctor away."
- id: 1957 # Onion
examine: "A strong smelling onion."
- id: 1959 # Pumpkin
examine: "Happy Halloween."
- id: 1961 # Easter egg
examine: "Happy Easter."
- id: 1963 # Banana
examine: "Mmm this looks tasty."
- id: 1965 # Cabbage
examine: "Yuck I don't like cabbage."
- id: 1967 # Cabbage
examine: "Yuck I don't like cabbage."
- id: 1969 # Spinach roll
examine: "A home made spinach thing."
- id: 1971 # Kebab
examine: "A meaty kebab."
- id: 1973 # Chocolate bar
examine: "Mmmmmmm chocolate."
- id: 1975 # Chocolate dust
examine: "It's ground up chocolate."
- id: 1977 # Chocolatey milk
examine: "Milk with chocolate in it."
- id: 1978 # Cup of tea
examine: "A nice cup of tea."
- id: 1980 # Empty cup
examine: "An empty cup."
- id: 1982 # Tomato
examine: "This would make good ketchup."
- id: 1984 # Rotten apple
examine: "Rotten to the core!"
- id: 1985 # Cheese
examine: "It's got holes in it."
- id: 1987 # Grapes
examine: "Good grapes for wine making."
- id: 1989 # Half full wine jug
examine: "An optimist would say it's half full."
- id: 1991 # Jug of bad wine
examine: "Oh dear, this wine is terrible!"
- id: 1993 # Jug of wine
examine: "It's full of wine."
- id: 1995 # Unfermented wine
examine: "This wine needs to ferment before it can be drunk."
- id: 1997 # Incomplete stew
examine: "I need to add some meat too."
- id: 1999 # Incomplete stew
examine: "I need to add some potato too."
- id: 2001 # Uncooked stew
examine: "I need to cook this."
- id: 2003 # Stew
examine: "It's a meat and potato stew."
- id: 2005 # Burnt stew
examine: "Eew, it's horribly burnt."
- id: 2007 # Spice
examine: "This could liven up an otherwise bland stew."
- id: 2009 # Uncooked curry
examine: "I need to cook this."
- id: 2011 # Curry
examine: "It's a spicy hot curry."
- id: 2013 # Burnt curry
examine: "Eew, it's horribly burnt."
- id: 2015 # Vodka
examine: "An absolutely clear spirit."
- id: 2017 # Whisky
examine: "A bottle of Draynor Malt."
- id: 2019 # Gin
examine: "A strong spirit that tastes of Juniper."
- id: 2021 # Brandy
examine: "A strong spirit best served in a large glass."
- id: 2023 # Cocktail guide
examine: "A book on tree gnome cocktails."
- id: 2025 # Cocktail shaker
examine: "Used for mixing cocktails."
- id: 2026 # Cocktail glass
examine: "For sipping cocktails."
- id: 2030 # Premade choc s'dy
examine: "A premade Chocolate Saturday."
- id: 2032 # Premade dr' dragon
examine: "A premade Drunk Dragon."
- id: 2034 # Premade fr' blast
examine: "A premade Fruit Blast."
- id: 2036 # Premade p' punch
examine: "A premade Pineapple punch."
- id: 2038 # Premade sgg
examine: "A premade Short Green Guy."
- id: 2040 # Premade wiz blz'd
examine: "A Premade Wizard Blizzard."
- id: 2048 # Pineapple punch
examine: "A fresh healthy fruit mix."
- id: 2054 # Wizard blizzard
examine: "This looks like a strange mix."
- id: 2064 # Blurberry special
examine: "Looks good... smells strong."
- id: 2074 # Choc saturday
examine: "A warm creamy alcoholic beverage."
- id: 2080 # Short green guy
examine: "A Short Green Guy... looks good."
- id: 2084 # Fruit blast
examine: "A cool refreshing fruit mix."
- id: 2092 # Drunk dragon
examine: "A warm creamy
gitextract__j1tb7oh/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.md │ │ ├── content-feature-plugin.md │ │ └── game-engine-feature.md │ └── workflows/ │ └── build.yml ├── .gitignore ├── .swcrc ├── .vscode/ │ └── settings.json ├── CONTRIBUTING.md ├── Dockerfile ├── FEATURES.md ├── LICENSE ├── README.md ├── biome.json ├── cache/ │ ├── file-names.properties │ ├── main_file_cache.dat0 │ ├── main_file_cache.dat1 │ ├── main_file_cache.dat2 │ ├── main_file_cache.idx0 │ ├── main_file_cache.idx1 │ ├── main_file_cache.idx10 │ ├── main_file_cache.idx11 │ ├── main_file_cache.idx12 │ ├── main_file_cache.idx2 │ ├── main_file_cache.idx255 │ ├── main_file_cache.idx3 │ ├── main_file_cache.idx4 │ ├── main_file_cache.idx5 │ ├── main_file_cache.idx6 │ ├── main_file_cache.idx7 │ ├── main_file_cache.idx8 │ └── main_file_cache.idx9 ├── config/ │ ├── file-names.properties │ └── server-config.example.json ├── data/ │ ├── config/ │ │ ├── combat-styles.json │ │ ├── examine-item-data.yaml │ │ ├── item-spawns/ │ │ │ └── lumbridge/ │ │ │ └── lumbridge.json │ │ ├── items/ │ │ │ ├── barrows/ │ │ │ │ └── dharoks.json │ │ │ ├── bolts.json │ │ │ ├── bones.json │ │ │ ├── containers.json │ │ │ ├── currency.json │ │ │ ├── equipment/ │ │ │ │ ├── amulets.json │ │ │ │ ├── axes.json │ │ │ │ ├── bows.json │ │ │ │ ├── capes.json │ │ │ │ ├── daggers.json │ │ │ │ ├── darts.json │ │ │ │ ├── halberd.json │ │ │ │ ├── hammers.json │ │ │ │ ├── hatchets.json │ │ │ │ ├── hats.json │ │ │ │ ├── javelins.json │ │ │ │ ├── leather-armour.json │ │ │ │ ├── longswords.json │ │ │ │ ├── mauls.json │ │ │ │ ├── pickaxes.json │ │ │ │ ├── shortswords.json │ │ │ │ ├── skillscapes.json │ │ │ │ ├── slayer.json │ │ │ │ ├── spears.json │ │ │ │ ├── staffs.json │ │ │ │ ├── standard-metals/ │ │ │ │ │ ├── adamant-armour.json │ │ │ │ │ ├── black-armour.json │ │ │ │ │ ├── bronze-armour.json │ │ │ │ │ ├── bronze-weapons.json │ │ │ │ │ ├── iron-armour.json │ │ │ │ │ ├── iron-weapons.json │ │ │ │ │ ├── mithril-armour.json │ │ │ │ │ ├── mithril-weapons.json │ │ │ │ │ ├── rune-armour.json │ │ │ │ │ ├── rune-god-armour.json │ │ │ │ │ ├── steel-armour.json │ │ │ │ │ ├── steel-weapons.json │ │ │ │ │ └── white-armour.json │ │ │ │ ├── tiaras.json │ │ │ │ ├── training.json │ │ │ │ └── whips.json │ │ │ ├── food.json │ │ │ ├── holiday/ │ │ │ │ └── partyhats.json │ │ │ ├── icons.json │ │ │ ├── logs.json │ │ │ ├── other.json │ │ │ ├── quests/ │ │ │ │ ├── lost-city.json │ │ │ │ └── witchs-potion.json │ │ │ └── skills/ │ │ │ ├── artisan-tools.json │ │ │ ├── baking.json │ │ │ ├── cooking.json │ │ │ ├── crafting/ │ │ │ │ ├── gems.json │ │ │ │ └── jewelery-moulds.json │ │ │ ├── firemaking.json │ │ │ ├── fishing.json │ │ │ ├── fletching/ │ │ │ │ ├── arrows.json │ │ │ │ └── bolts.json │ │ │ ├── herblore/ │ │ │ │ ├── herbs.json │ │ │ │ ├── ingredients.json │ │ │ │ └── tools.json │ │ │ ├── herblore.json │ │ │ ├── mining.json │ │ │ ├── prayer.json │ │ │ └── runecrafting.json │ │ ├── music/ │ │ │ └── musicRegions.json │ │ ├── npc-spawns/ │ │ │ ├── alkharid/ │ │ │ │ └── alkharid-general.json │ │ │ ├── ardougne/ │ │ │ │ ├── bankers.json │ │ │ │ ├── guards.json │ │ │ │ └── market.json │ │ │ ├── camelot/ │ │ │ │ └── bankers.json │ │ │ ├── canifis/ │ │ │ │ └── bankers.json │ │ │ ├── catherby/ │ │ │ │ └── bankers.json │ │ │ ├── draynor/ │ │ │ │ └── bankers.json │ │ │ ├── edgeville/ │ │ │ │ └── bankers.json │ │ │ ├── falador/ │ │ │ │ ├── bankers.json │ │ │ │ └── guards.json │ │ │ ├── keldagrim/ │ │ │ │ └── bankers.json │ │ │ ├── lumbridge/ │ │ │ │ ├── bankers.json │ │ │ │ ├── lumbridge-general.json │ │ │ │ ├── lumbridge-goblins.json │ │ │ │ └── lumbridge-sheep.json │ │ │ ├── magebank/ │ │ │ │ └── bankers.json │ │ │ ├── nardah/ │ │ │ │ └── bankers.json │ │ │ ├── pestcontrol/ │ │ │ │ └── bankers.json │ │ │ ├── portsarim/ │ │ │ │ └── port-sarim-general.json │ │ │ ├── rimmington/ │ │ │ │ └── rimmington.json │ │ │ ├── shilovillage/ │ │ │ │ └── bankers.json │ │ │ ├── varrock/ │ │ │ │ ├── bankers.json │ │ │ │ ├── blue-moon-inn.json │ │ │ │ └── varrock-general.json │ │ │ └── yanille/ │ │ │ └── bankers.json │ │ ├── npcs/ │ │ │ ├── alkharid.json │ │ │ ├── ardougne.json │ │ │ ├── bankers.json │ │ │ ├── barbarians.json │ │ │ ├── general.json │ │ │ ├── generic-humans.json │ │ │ ├── goblins.json │ │ │ ├── guards.json │ │ │ ├── lumbridge.json │ │ │ ├── port-sarim.json │ │ │ ├── rimmington.json │ │ │ ├── sheep.json │ │ │ └── varrock.json │ │ ├── scenery-spawns.yaml │ │ ├── shops/ │ │ │ ├── alkharid/ │ │ │ │ ├── alkharid-gem-trader.json │ │ │ │ ├── dommiks-crafting-store.json │ │ │ │ ├── louies-armored-legs.json │ │ │ │ └── ranaels-skirt-store.json │ │ │ ├── lumbridge/ │ │ │ │ ├── bobs-axes.json │ │ │ │ └── lumbridge-general-store.json │ │ │ ├── portsarim/ │ │ │ │ └── bettys-magic-emporium.json │ │ │ ├── shilo-village/ │ │ │ │ └── oblis-general-store.json │ │ │ └── varrock/ │ │ │ └── zaffs-staffs.json │ │ ├── travel-locations-data.yaml │ │ ├── widgets.json │ │ └── xteas/ │ │ └── 435.json │ └── saves/ │ └── .gitkeep ├── docker-compose.yml ├── jest.config.ts ├── nodemon.json ├── package.json ├── src/ │ ├── engine/ │ │ ├── action/ │ │ │ ├── action-pipeline.ts │ │ │ ├── hook/ │ │ │ │ ├── action-hook.ts │ │ │ │ ├── hook-filters.test.ts │ │ │ │ ├── hook-filters.ts │ │ │ │ └── task.ts │ │ │ ├── loader.ts │ │ │ └── pipe/ │ │ │ ├── button.action.ts │ │ │ ├── equipment-change.action.ts │ │ │ ├── item-interaction.action.ts │ │ │ ├── item-on-item.action.ts │ │ │ ├── item-on-npc.action.ts │ │ │ ├── item-on-object.action.ts │ │ │ ├── item-on-player.action.ts │ │ │ ├── item-on-world-item.action.ts │ │ │ ├── item-swap.action.ts │ │ │ ├── magic-on-npc.action.ts │ │ │ ├── move-item.action.ts │ │ │ ├── npc-init.action.ts │ │ │ ├── npc-interaction.action.ts │ │ │ ├── object-interaction.action.ts │ │ │ ├── player-command.action.ts │ │ │ ├── player-init.action.ts │ │ │ ├── player-interaction.action.ts │ │ │ ├── prayer.action.ts │ │ │ ├── region-change.action.ts │ │ │ ├── spawned-item-interaction.action.ts │ │ │ ├── task/ │ │ │ │ ├── queueable-task.ts │ │ │ │ ├── walk-to-actor-plugin-task.ts │ │ │ │ ├── walk-to-item-plugin-task.ts │ │ │ │ └── walk-to-object-plugin-task.ts │ │ │ └── widget-interaction.action.ts │ │ ├── config/ │ │ │ ├── config-handler.ts │ │ │ ├── data-dump.ts │ │ │ ├── directories.ts │ │ │ ├── item-config.ts │ │ │ ├── item-spawn-config.ts │ │ │ ├── music-regions-config.ts │ │ │ ├── npc-config.ts │ │ │ ├── npc-spawn-config.ts │ │ │ ├── quest-config.ts │ │ │ ├── shop-config.testskip.ts │ │ │ └── shop-config.ts │ │ ├── interface/ │ │ │ └── interface-state.ts │ │ ├── net/ │ │ │ ├── inbound-packet-handler.ts │ │ │ ├── inbound-packets/ │ │ │ │ ├── add-friend.packet.ts │ │ │ │ ├── add-ignore.packet.ts │ │ │ │ ├── blinking-tab-click.packet.ts │ │ │ │ ├── button-click.packet.ts │ │ │ │ ├── character-design.packet.ts │ │ │ │ ├── chat.packet.ts │ │ │ │ ├── command.packet.ts │ │ │ │ ├── drop-item.packet.ts │ │ │ │ ├── examine.packet.ts │ │ │ │ ├── item-interaction.packet.ts │ │ │ │ ├── item-on-item.packet.ts │ │ │ │ ├── item-on-npc.packet.ts │ │ │ │ ├── item-on-object.packet.ts │ │ │ │ ├── item-on-player.packet.ts │ │ │ │ ├── item-on-world-item.packet.ts │ │ │ │ ├── item-swap.packet.ts │ │ │ │ ├── junk.packet.ts │ │ │ │ ├── magic-attack.packet.ts │ │ │ │ ├── npc-interaction.packet.ts │ │ │ │ ├── number-input.packet.ts │ │ │ │ ├── object-interaction.packet.ts │ │ │ │ ├── pickup-item.packet.ts │ │ │ │ ├── player-interaction.packet.ts │ │ │ │ ├── private-message.packet.ts │ │ │ │ ├── remove-friend.packet.ts │ │ │ │ ├── remove-ignore.packet.ts │ │ │ │ ├── social-button.packet.ts │ │ │ │ ├── walk.packet.ts │ │ │ │ ├── widget-interaction.packet.ts │ │ │ │ └── widgets-closed.packet.ts │ │ │ ├── isaac.ts │ │ │ ├── outbound-packet-handler.ts │ │ │ └── packet.ts │ │ ├── plugins/ │ │ │ ├── content-plugin.ts │ │ │ ├── loader.ts │ │ │ └── reload-content.ts │ │ ├── task/ │ │ │ ├── README.md │ │ │ ├── impl/ │ │ │ │ ├── actor-actor-interaction-task.ts │ │ │ │ ├── actor-landscape-object-interaction-task.ts │ │ │ │ ├── actor-task.ts │ │ │ │ ├── actor-teleport-task.ts │ │ │ │ ├── actor-walk-to-task.ts │ │ │ │ └── actor-world-item-interaction-task.ts │ │ │ ├── task-scheduler.test.ts │ │ │ ├── task-scheduler.ts │ │ │ ├── task.test.ts │ │ │ ├── task.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ └── _testing.ts │ │ ├── util/ │ │ │ ├── address.ts │ │ │ ├── colors.ts │ │ │ ├── data.ts │ │ │ ├── error-handling.ts │ │ │ ├── files.ts │ │ │ ├── num.ts │ │ │ ├── objects.ts │ │ │ ├── queue.test.ts │ │ │ ├── queue.ts │ │ │ ├── strings.ts │ │ │ ├── time.ts │ │ │ └── varbits.ts │ │ └── world/ │ │ ├── actor/ │ │ │ ├── actor.ts │ │ │ ├── combat.ts │ │ │ ├── dialogue.ts │ │ │ ├── magic.ts │ │ │ ├── metadata.ts │ │ │ ├── npc.ts │ │ │ ├── pathfinding.ts │ │ │ ├── player/ │ │ │ │ ├── achievements.ts │ │ │ │ ├── attack.ts │ │ │ │ ├── cutscenes.ts │ │ │ │ ├── dialogue-action.ts │ │ │ │ ├── metadata.ts │ │ │ │ ├── model.ts │ │ │ │ ├── player-data.ts │ │ │ │ ├── player.ts │ │ │ │ ├── private-messaging.ts │ │ │ │ ├── quest.ts │ │ │ │ └── sync/ │ │ │ │ ├── actor-sync.ts │ │ │ │ ├── npc-sync-task.ts │ │ │ │ └── player-sync-task.ts │ │ │ ├── prayer.ts │ │ │ ├── skills.ts │ │ │ ├── update-flags.ts │ │ │ ├── util.ts │ │ │ └── walking-queue.ts │ │ ├── config/ │ │ │ ├── animation-ids.ts │ │ │ ├── examine-data.ts │ │ │ ├── gfx-ids.ts │ │ │ ├── harvest-tool.ts │ │ │ ├── harvestable-object.ts │ │ │ ├── item-ids.ts │ │ │ ├── object-ids.ts │ │ │ ├── scenery-spawns.ts │ │ │ ├── songs.ts │ │ │ ├── sound-ids.ts │ │ │ ├── travel-locations.ts │ │ │ └── widget.ts │ │ ├── direction.ts │ │ ├── index.ts │ │ ├── instances.ts │ │ ├── items/ │ │ │ ├── item-container.ts │ │ │ ├── item.ts │ │ │ └── world-item.ts │ │ ├── map/ │ │ │ ├── chunk-manager.ts │ │ │ ├── chunk.ts │ │ │ ├── collision-map.ts │ │ │ ├── landscape-object.ts │ │ │ └── region.ts │ │ ├── position.ts │ │ ├── skill-util/ │ │ │ ├── glory-boost.ts │ │ │ ├── harvest-roll.ts │ │ │ └── harvest-skill.ts │ │ ├── sound/ │ │ │ └── music.ts │ │ ├── task.ts │ │ └── world.ts │ ├── plugins/ │ │ ├── buttons/ │ │ │ ├── logout-button.plugin.ts │ │ │ ├── magic-attack.plugin.ts │ │ │ ├── magic-teleports.plugin.ts │ │ │ ├── player-emotes.plugin.ts │ │ │ └── player-setting-button.plugin.ts │ │ ├── combat/ │ │ │ └── combat-styles.plugin.ts │ │ ├── commands/ │ │ │ ├── bank-command.plugin.ts │ │ │ ├── camera-commands.plugin.ts │ │ │ ├── clear-inventory-command.plugin.ts │ │ │ ├── client-config-command.plugin.ts │ │ │ ├── current-position-command.plugin.ts │ │ │ ├── data-dump-command.plugin.ts │ │ │ ├── dump-metadata-command.plugin.ts │ │ │ ├── give-item-command.plugin.ts │ │ │ ├── groups-debug.plugin.ts │ │ │ ├── pathing-commands.plugin.ts │ │ │ ├── player-animation-command.plugin.ts │ │ │ ├── player-graphics-command.plugin.ts │ │ │ ├── quest-list-command.plugin.ts │ │ │ ├── region-debug-commands.plugin.ts │ │ │ ├── reset-camera-command.plugin.ts │ │ │ ├── sound-song-commands.plugin.ts │ │ │ ├── spawn-npc-command.plugin.ts │ │ │ ├── spawn-scenery-command.plugin.ts │ │ │ ├── spawn-test-players-command.plugin.ts │ │ │ ├── stat-commands.plugin.ts │ │ │ ├── teleport-command.plugin.ts │ │ │ ├── transform-command.plugin.ts │ │ │ ├── travel-back-command.plugin.ts │ │ │ ├── travel-command.plugin.ts │ │ │ └── widget-commands.plugin.ts │ │ ├── dialogue/ │ │ │ ├── dialogue-option.plugin.ts │ │ │ └── item-selection.plugin.ts │ │ ├── items/ │ │ │ ├── buckets/ │ │ │ │ ├── empty-container.plugin.ts │ │ │ │ └── fill-container.plugin.ts │ │ │ ├── capes/ │ │ │ │ └── skillcape-emotes.plugin.ts │ │ │ ├── consumables/ │ │ │ │ └── eating.plugin.ts │ │ │ ├── drop-item.plugin.ts │ │ │ ├── equipment/ │ │ │ │ ├── equip-item.plugin.ts │ │ │ │ ├── equipment-stats.plugin.ts │ │ │ │ └── unequip-item.plugin.ts │ │ │ ├── herblore/ │ │ │ │ └── clean-herb.ts │ │ │ ├── move-item.plugin.ts │ │ │ ├── pickup-item.plugin.ts │ │ │ ├── pots/ │ │ │ │ └── empty-pot.plugin.ts │ │ │ ├── rotten-potato/ │ │ │ │ ├── helpers/ │ │ │ │ │ ├── rotten-potato-helpers.ts │ │ │ │ │ └── rotten-potato-travel.ts │ │ │ │ ├── hooks/ │ │ │ │ │ ├── rotten-potato-command-hook.ts │ │ │ │ │ ├── rotten-potato-eat.ts │ │ │ │ │ ├── rotten-potato-item-on-item.ts │ │ │ │ │ ├── rotten-potato-item-on-player.ts │ │ │ │ │ └── rotten-potato-peel.ts │ │ │ │ └── rotten-potato.plugin.ts │ │ │ ├── runecrafting/ │ │ │ │ └── tiaras.plugin.ts │ │ │ ├── shopping/ │ │ │ │ ├── buy-from-shop.plugin.ts │ │ │ │ ├── item-value.plugin.ts │ │ │ │ └── sell-to-shop.plugin.ts │ │ │ └── swap-items.plugin.ts │ │ ├── music/ │ │ │ ├── music-regions.plugin.ts │ │ │ └── music-tab.plugin.ts │ │ ├── npcs/ │ │ │ ├── al-kharid/ │ │ │ │ ├── dommik-crafting-shop.plugin.ts │ │ │ │ ├── gem-trader.plugin.ts │ │ │ │ ├── karim.plugin.ts │ │ │ │ ├── louie-armoured-legs.plugin.ts │ │ │ │ └── ranael-super-skirt.plugin.ts │ │ │ ├── falador/ │ │ │ │ └── custom-guards.plugin.ts │ │ │ ├── lumbridge/ │ │ │ │ ├── bob.plugin.ts │ │ │ │ ├── hans.plugin.ts │ │ │ │ ├── lumbridge-farm-helpers.plugin.ts │ │ │ │ └── shopkeeper.plugin.ts │ │ │ ├── port-sarim/ │ │ │ │ └── betty.plugin.ts │ │ │ └── varrock/ │ │ │ ├── blue-moon-inn.plugin.ts │ │ │ ├── master-smithing-tutor.plugin.ts │ │ │ ├── wilough.plugin.ts │ │ │ └── zaff-superior-staffs.plugin.ts │ │ ├── objects/ │ │ │ ├── bank/ │ │ │ │ ├── bank.plugin.ts │ │ │ │ └── deposit-box.plugin.ts │ │ │ ├── cows/ │ │ │ │ └── cow.plugin.ts │ │ │ ├── crates/ │ │ │ │ └── crates.plugin.ts │ │ │ ├── doors/ │ │ │ │ ├── door.plugin.ts │ │ │ │ ├── double-door.plugin.ts │ │ │ │ └── gate.plugin.ts │ │ │ ├── dungeon-entrances/ │ │ │ │ └── taverly-dungeon-ladder.plugin.ts │ │ │ ├── item-spawns/ │ │ │ │ └── take-axe.plugin.ts │ │ │ ├── ladders/ │ │ │ │ └── ladder.plugin.ts │ │ │ ├── mill/ │ │ │ │ ├── flour-bin.plugin.ts │ │ │ │ ├── hopper-controls.plugin.ts │ │ │ │ └── hopper.plugin.ts │ │ │ └── pickables/ │ │ │ └── pickables.plugin.ts │ │ ├── player/ │ │ │ ├── follow-player.plugin.js │ │ │ ├── login-unlock-emotes.plugin.ts │ │ │ ├── login-update-settings.plugin.ts │ │ │ └── update-friends-list.plugin.ts │ │ ├── quests/ │ │ │ ├── cooks-assistant-quest.plugin.ts │ │ │ ├── goblin-diplomacy-tutorial/ │ │ │ │ ├── goblin-diplomacy-quest.plugin.ts │ │ │ │ ├── melee-tutor-dialogue.ts │ │ │ │ ├── runescape-guide-dialogue.ts │ │ │ │ └── stage-handler.ts │ │ │ ├── quest-journal.plugin.ts │ │ │ └── witchs-potion-quest.plugin.ts │ │ └── skills/ │ │ ├── construction/ │ │ │ ├── con-constants.ts │ │ │ ├── home-saver.ts │ │ │ ├── house.ts │ │ │ ├── index.ts │ │ │ ├── room-builder.ts │ │ │ └── util.ts │ │ ├── crafting/ │ │ │ ├── sheep-plugin.plugin.ts │ │ │ └── spinning-wheel.plugin.ts │ │ ├── firemaking/ │ │ │ ├── chance.ts │ │ │ ├── data.ts │ │ │ ├── firemaking-task.ts │ │ │ ├── index.ts │ │ │ ├── light-fire.ts │ │ │ └── types.ts │ │ ├── fletching/ │ │ │ ├── fletching-constants.ts │ │ │ ├── fletching-types.ts │ │ │ └── fletching.plugin.ts │ │ ├── level-up-dialogue.plugin.ts │ │ ├── mining/ │ │ │ ├── chance.ts │ │ │ ├── mining-task.ts │ │ │ ├── mining.plugin.ts │ │ │ └── prospecting.plugin.ts │ │ ├── prayer/ │ │ │ └── bury-bones.plugin.ts │ │ ├── runecrafting/ │ │ │ ├── runecrafting-altar.plugin.ts │ │ │ ├── runecrafting-constants.ts │ │ │ ├── runecrafting-crafting.plugin.ts │ │ │ ├── runecrafting-tiara.plugin.ts │ │ │ └── runecrafting-types.ts │ │ ├── skill-guides/ │ │ │ ├── Strength.json │ │ │ ├── agility.json │ │ │ ├── attack.json │ │ │ ├── construction.json │ │ │ ├── cooking.json │ │ │ ├── crafting.json │ │ │ ├── defence.json │ │ │ ├── farming.json │ │ │ ├── firemaking.json │ │ │ ├── fishing.json │ │ │ ├── fletching.json │ │ │ ├── herblore.json │ │ │ ├── hitpoint.json │ │ │ ├── magic.json │ │ │ ├── mining.json │ │ │ ├── prayer.json │ │ │ ├── ranged.json │ │ │ ├── runecrafting.json │ │ │ ├── skill-guide-config.ts │ │ │ ├── skill-guides.plugin.ts │ │ │ ├── slayer.json │ │ │ ├── smithing.json │ │ │ ├── thieving.json │ │ │ └── woodcutting.json │ │ ├── smithing/ │ │ │ ├── forging-constants.ts │ │ │ ├── forging-task.ts │ │ │ ├── forging-types.ts │ │ │ ├── forging.plugin.ts │ │ │ ├── smelting-constants.ts │ │ │ ├── smelting-task.ts │ │ │ ├── smelting-types.ts │ │ │ └── smelting.plugin.ts │ │ └── woodcutting/ │ │ ├── chance.ts │ │ ├── index.ts │ │ └── woodcutting-task.ts │ └── server/ │ ├── game/ │ │ ├── game-server-config.ts │ │ ├── game-server-connection.ts │ │ └── game-server.ts │ ├── gateway/ │ │ └── gateway-server.ts │ └── runner.ts └── tsconfig.json
SYMBOL INDEX (1104 symbols across 156 files)
FILE: src/engine/action/action-pipeline.ts
type ActionStrength (line 11) | type ActionStrength = 'weak' | 'normal' | 'strong';
type ActionType (line 16) | type ActionType =
type ActionCancelType (line 55) | type ActionCancelType = 'manual-movement' | 'pathing-movement' | 'generi...
type ActionPipeHandler (line 60) | type ActionPipeHandler = (...args: any[]) => RunnableHooks | void;
type ActionPipe (line 65) | type ActionPipe = [ActionType, ActionPipeHandler];
type RunnableHooks (line 70) | interface RunnableHooks<T = any> {
class ActionPipeline (line 81) | class ActionPipeline {
method constructor (line 88) | public constructor(public readonly actor: Actor) {
method getPipe (line 92) | public static getPipe(action: ActionType): ActionPipeHandler | null {
method register (line 96) | public static register(action: ActionType, actionPipeHandlerFn: Action...
method shutdown (line 100) | public shutdown(): void {
method call (line 104) | public async call(action: ActionType, ...args: any[]): Promise<void> {
method cancelRunningTasks (line 118) | public async cancelRunningTasks(): Promise<void> {
method runActionHandler (line 136) | private async runActionHandler(actionHandler: any, args: any[]): Promi...
method runHook (line 164) | private async runHook(actionHook: ActionHook, action: any): Promise<vo...
method paused (line 186) | public get paused(): boolean {
FILE: src/engine/action/hook/action-hook.ts
type QuestRequirement (line 9) | interface QuestRequirement {
type ActionHook (line 18) | interface ActionHook<A = any, H = any> {
function sortActionHooks (line 54) | function sortActionHooks<T = any>(actionHooks: ActionHook<T>[]): ActionH...
FILE: src/engine/action/hook/hook-filters.ts
function questHookFilter (line 66) | function questHookFilter(player: Player, actionHook: ActionHook): boolean {
FILE: src/engine/action/hook/task.ts
type TaskSessionData (line 15) | type TaskSessionData = { [key: string]: any };
type TaskDetails (line 17) | interface TaskDetails<T> {
type HookTask (line 25) | interface HookTask<T = any> {
class TaskExecutor (line 36) | class TaskExecutor<T> {
method constructor (line 45) | public constructor(
method run (line 54) | public async run(): Promise<void> {
method execute (line 90) | public async execute(): Promise<boolean> {
method canActivate (line 121) | public async canActivate(): Promise<boolean> {
method stop (line 139) | public async stop(): Promise<void> {
method getDetails (line 148) | public getDetails(): TaskDetails<T> {
method valid (line 158) | public get valid(): boolean {
FILE: src/engine/action/loader.ts
function loadActionFiles (line 11) | async function loadActionFiles(): Promise<void> {
FILE: src/engine/action/pipe/button.action.ts
type ButtonActionHook (line 9) | interface ButtonActionHook extends ActionHook<ButtonAction, buttonAction...
type buttonActionHandler (line 23) | type buttonActionHandler = (buttonAction: ButtonAction) => void | Promis...
type ButtonAction (line 28) | interface ButtonAction {
FILE: src/engine/action/pipe/equipment-change.action.ts
type EquipmentChangeActionHook (line 13) | interface EquipmentChangeActionHook extends ActionHook<EquipmentChangeAc...
type equipmentChangeActionHandler (line 23) | type equipmentChangeActionHandler = (equipmentChangeAction: EquipmentCha...
type EquipmentChangeType (line 28) | type EquipmentChangeType = 'equip' | 'unequip';
type EquipmentChangeAction (line 33) | interface EquipmentChangeAction {
FILE: src/engine/action/pipe/item-interaction.action.ts
type ItemInteractionActionHook (line 13) | interface ItemInteractionActionHook extends ActionHook<ItemInteractionAc...
type itemInteractionActionHandler (line 27) | type itemInteractionActionHandler = (itemInteractionAction: ItemInteract...
type ItemInteractionAction (line 32) | interface ItemInteractionAction {
FILE: src/engine/action/pipe/item-on-item.action.ts
type ItemOnItemActionHook (line 11) | interface ItemOnItemActionHook extends ActionHook<ItemOnItemAction, item...
type itemOnItemActionHandler (line 19) | type itemOnItemActionHandler = (itemOnItemAction: ItemOnItemAction) => v...
type ItemOnItemAction (line 24) | interface ItemOnItemAction {
FILE: src/engine/action/pipe/item-on-npc.action.ts
type ItemOnNpcActionHook (line 14) | interface ItemOnNpcActionHook extends ActionHook<ItemOnNpcAction, itemOn...
type itemOnNpcActionHandler (line 26) | type itemOnNpcActionHandler = (itemOnNpcAction: ItemOnNpcAction) => void;
type ItemOnNpcAction (line 31) | interface ItemOnNpcAction {
FILE: src/engine/action/pipe/item-on-object.action.ts
type ItemOnObjectActionHook (line 14) | interface ItemOnObjectActionHook extends ActionHook<ItemOnObjectAction, ...
type itemOnObjectActionHandler (line 26) | type itemOnObjectActionHandler = (itemOnObjectAction: ItemOnObjectAction...
type ItemOnObjectAction (line 31) | interface ItemOnObjectAction {
FILE: src/engine/action/pipe/item-on-player.action.ts
type ItemOnPlayerActionHook (line 13) | interface ItemOnPlayerActionHook extends ActionHook<itemOnPlayerActionHa...
type itemOnPlayerActionHandler (line 23) | type itemOnPlayerActionHandler = (itemOnPlayerAction: ItemOnPlayerAction...
type ItemOnPlayerAction (line 28) | interface ItemOnPlayerAction {
FILE: src/engine/action/pipe/item-on-world-item.action.ts
type ItemOnWorldItemActionHook (line 14) | interface ItemOnWorldItemActionHook extends ActionHook<ItemOnWorldItemAc...
type itemOnWorldItemActionHandler (line 24) | type itemOnWorldItemActionHandler = (itemOnWorldItemAction: ItemOnWorldI...
type ItemOnWorldItemAction (line 31) | interface ItemOnWorldItemAction {
FILE: src/engine/action/pipe/item-swap.action.ts
type ItemSwapActionHook (line 10) | interface ItemSwapActionHook extends ActionHook<ItemSwapAction, itemSwap...
type itemSwapActionHandler (line 18) | type itemSwapActionHandler = (itemSwapAction: ItemSwapAction) => void;
type ItemSwapAction (line 23) | interface ItemSwapAction {
FILE: src/engine/action/pipe/magic-on-npc.action.ts
type MagicOnNPCActionHook (line 10) | interface MagicOnNPCActionHook extends ActionHook<MagicOnNPCAction, magi...
type magiconnpcActionHandler (line 24) | type magiconnpcActionHandler = (buttonAction: MagicOnNPCAction) => void ...
type MagicOnNPCAction (line 29) | interface MagicOnNPCAction {
FILE: src/engine/action/pipe/move-item.action.ts
type MoveItemActionHook (line 10) | interface MoveItemActionHook extends ActionHook<MoveItemAction, moveItem...
type moveItemActionHandler (line 18) | type moveItemActionHandler = (moveItemAction: MoveItemAction) => void;
type MoveItemAction (line 23) | interface MoveItemAction {
FILE: src/engine/action/pipe/npc-init.action.ts
type NpcInitActionHook (line 10) | interface NpcInitActionHook extends ActionHook<NpcInitAction, npcInitAct...
type npcInitActionHandler (line 18) | type npcInitActionHandler = (npcAction: NpcInitAction) => void;
type NpcInitAction (line 23) | interface NpcInitAction {
FILE: src/engine/action/pipe/npc-interaction.action.ts
type NpcInteractionActionHook (line 13) | interface NpcInteractionActionHook extends ActionHook<NpcInteractionActi...
type npcInteractionActionHandler (line 25) | type npcInteractionActionHandler = (npcInteractionAction: NpcInteraction...
type NpcInteractionAction (line 30) | interface NpcInteractionAction {
FILE: src/engine/action/pipe/object-interaction.action.ts
type ObjectInteractionActionHook (line 13) | interface ObjectInteractionActionHook extends ActionHook<ObjectInteracti...
type objectInteractionActionHandler (line 25) | type objectInteractionActionHandler = (objectInteractionAction: ObjectIn...
type ObjectInteractionAction (line 30) | interface ObjectInteractionAction {
FILE: src/engine/action/pipe/player-command.action.ts
type PlayerCommandActionHook (line 11) | interface PlayerCommandActionHook extends ActionHook<PlayerCommandAction...
type commandActionHandler (line 25) | type commandActionHandler = (playerCommandAction: PlayerCommandAction) =...
type PlayerCommandAction (line 30) | interface PlayerCommandAction {
FILE: src/engine/action/pipe/player-init.action.ts
type PlayerInitActionHook (line 9) | type PlayerInitActionHook = ActionHook<PlayerInitAction, playerInitActio...
type playerInitActionHandler (line 14) | type playerInitActionHandler = (playerInitAction: PlayerInitAction) => v...
type PlayerInitAction (line 19) | interface PlayerInitAction {
FILE: src/engine/action/pipe/player-interaction.action.ts
type PlayerInteractionActionHook (line 12) | interface PlayerInteractionActionHook extends ActionHook<PlayerInteracti...
type playerInteractionActionHandler (line 22) | type playerInteractionActionHandler = (playerInteractionAction: PlayerIn...
type PlayerInteractionAction (line 27) | interface PlayerInteractionAction {
FILE: src/engine/action/pipe/prayer.action.ts
type PrayerActionHook (line 10) | interface PrayerActionHook extends ActionHook<PrayerAction, PrayerAction...
type PrayerActionHandler (line 24) | type PrayerActionHandler = (buttonAction: PrayerAction) => void | Promis...
type PrayerAction (line 29) | interface PrayerAction {
FILE: src/engine/action/pipe/region-change.action.ts
type RegionChangeActionHook (line 12) | interface RegionChangeActionHook extends ActionHook<RegionChangeAction, ...
type regionChangeActionHandler (line 24) | type regionChangeActionHandler = (regionChangeAction: RegionChangeAction...
type RegionChangeAction (line 29) | interface RegionChangeAction {
FILE: src/engine/action/pipe/spawned-item-interaction.action.ts
type SpawnedItemInteractionHook (line 15) | interface SpawnedItemInteractionHook extends ActionHook<SpawnedItemInter...
type spawnedItemInteractionHandler (line 27) | type spawnedItemInteractionHandler = (spawnedItemInteractionAction: Spaw...
type SpawnedItemInteractionAction (line 32) | interface SpawnedItemInteractionAction {
FILE: src/engine/action/pipe/task/queueable-task.ts
type QueueableTaskEval (line 14) | interface QueueableTaskEval {
type ObjectAction (line 22) | type ObjectAction = ObjectInteractionAction | ItemOnObjectAction;
type ObjectActionHook (line 27) | type ObjectActionHook<TAction extends ObjectAction> = ActionHook<TAction...
type ObjectActionData (line 32) | type ObjectActionData<TAction extends ObjectAction> = Omit<TAction, 'pla...
class QueueableTask (line 41) | class QueueableTask<TAction extends ObjectAction> extends ActorTask<Play...
method constructor (line 62) | constructor(
method execute (line 81) | public execute(): void {
FILE: src/engine/action/pipe/task/walk-to-actor-plugin-task.ts
type ActorAction (line 13) | type ActorAction = PlayerInteractionAction | ItemOnPlayerAction | NpcInt...
type ActorActionHook (line 18) | type ActorActionHook<TAction extends ActorAction> = ActionHook<TAction, ...
type ActorKey (line 20) | type ActorKey = 'otherPlayer' | 'npc';
type ActorActionData (line 25) | type ActorActionData<TAction extends ActorAction> = Omit<TAction, 'playe...
class WalkToActorPluginTask (line 33) | class WalkToActorPluginTask<
method constructor (line 47) | constructor(
method execute (line 64) | public execute(): void {
FILE: src/engine/action/pipe/task/walk-to-item-plugin-task.ts
class WalkToItemPluginTask (line 13) | class WalkToItemPluginTask extends ActorWorldItemInteractionTask<Player> {
method constructor (line 24) | constructor(plugins: SpawnedItemInteractionHook[], player: Player, wor...
method execute (line 34) | public execute(): void {
FILE: src/engine/action/pipe/task/walk-to-object-plugin-task.ts
type ObjectAction (line 11) | type ObjectAction = ObjectInteractionAction | ItemOnObjectAction;
type ObjectActionHook (line 16) | type ObjectActionHook<TAction extends ObjectAction> = ActionHook<TAction...
type ObjectActionData (line 21) | type ObjectActionData<TAction extends ObjectAction> = Omit<TAction, 'pla...
class WalkToObjectPluginTask (line 29) | class WalkToObjectPluginTask<TAction extends ObjectAction> extends Actor...
method constructor (line 37) | constructor(plugins: ObjectActionHook<TAction>[], player: Player, land...
method execute (line 54) | public execute(): void {
FILE: src/engine/action/pipe/widget-interaction.action.ts
type WidgetInteractionActionHook (line 10) | interface WidgetInteractionActionHook extends ActionHook<WidgetInteracti...
type widgetInteractionActionHandler (line 24) | type widgetInteractionActionHandler = (widgetInteractionAction: WidgetIn...
type WidgetInteractionAction (line 29) | interface WidgetInteractionAction {
FILE: src/engine/config/config-handler.ts
function loadCoreConfigurations (line 39) | async function loadCoreConfigurations(): Promise<void> {
function loadGameConfigurations (line 43) | async function loadGameConfigurations(): Promise<void> {
FILE: src/engine/config/data-dump.ts
type DataDumpResult (line 7) | interface DataDumpResult {
function dump (line 12) | function dump<T>(fileName: string, definitions: T[]): DataDumpResult {
FILE: src/engine/config/directories.ts
constant BUILD_DIR (line 3) | const BUILD_DIR = join('.', 'dist', 'engine');
FILE: src/engine/config/item-config.ts
type WeaponStyle (line 6) | type WeaponStyle =
type EquipmentSlot (line 49) | type EquipmentSlot =
type EquipmentType (line 81) | type EquipmentType = 'hat' | 'helmet' | 'torso' | 'full_top' | 'one_hand...
type ItemRequirements (line 83) | interface ItemRequirements {
type OffensiveBonuses (line 88) | interface OffensiveBonuses {
type DefensiveBonuses (line 97) | interface DefensiveBonuses {
type SkillBonuses (line 105) | interface SkillBonuses {
type WeaponInfo (line 109) | interface WeaponInfo {
type ItemMetadata (line 114) | interface ItemMetadata {
type EquipmentData (line 142) | interface EquipmentData {
type ItemPresetConfiguration (line 152) | interface ItemPresetConfiguration {
type ItemConfiguration (line 156) | interface ItemConfiguration {
class ItemDetails (line 186) | class ItemDetails {
method constructor (line 211) | public constructor(item?: ItemDetails) {
method lowAlchValue (line 218) | get lowAlchValue(): number {
method highAlchValue (line 222) | get highAlchValue(): number {
method minimumValue (line 226) | get minimumValue(): number {
function translateItemConfig (line 231) | function translateItemConfig(key: string | undefined, config: ItemConfig...
function loadItemConfigurations (line 258) | async function loadItemConfigurations(path: string): Promise<{
FILE: src/engine/config/item-spawn-config.ts
type ItemSpawnConfiguration (line 4) | interface ItemSpawnConfiguration {
class ItemSpawn (line 15) | class ItemSpawn {
method constructor (line 23) | public constructor(itemKey: string, position: Position) {
function translateItemSpawnConfig (line 29) | function translateItemSpawnConfig(config: ItemSpawnConfiguration): ItemS...
function loadItemSpawnConfigurations (line 47) | async function loadItemSpawnConfigurations(path: string): Promise<ItemSp...
FILE: src/engine/config/music-regions-config.ts
type MusicRegionsConfiguration (line 3) | interface MusicRegionsConfiguration {
class MusicTrack (line 10) | class MusicTrack {
method constructor (line 16) | public constructor(songId: number, songName: string, musicTabButtonId:...
function translateMusicRegionsConfig (line 24) | function translateMusicRegionsConfig(config: MusicRegionsConfiguration):...
function loadMusicRegionConfigurations (line 28) | async function loadMusicRegionConfigurations(): Promise<MusicTrack[]> {
FILE: src/engine/config/npc-config.ts
type NpcSkills (line 9) | interface NpcSkills {
type OffensiveStats (line 13) | interface OffensiveStats {
type NpcCombatAnimations (line 23) | interface NpcCombatAnimations {
type DropTable (line 29) | interface DropTable {
type NpcPresetConfiguration (line 37) | interface NpcPresetConfiguration {
type NpcServerConfig (line 41) | interface NpcServerConfig {
class NpcDetails (line 70) | class NpcDetails extends NpcConfig {
method constructor (line 82) | public constructor(defaultValues: { [key: string]: any }) {
function translateNpcServerConfig (line 88) | function translateNpcServerConfig(npcKey: string | undefined, config: Np...
function loadNpcConfigurations (line 113) | async function loadNpcConfigurations(path: string): Promise<{
FILE: src/engine/config/npc-spawn-config.ts
type NpcSpawnConfiguration (line 5) | interface NpcSpawnConfiguration {
class NpcSpawn (line 14) | class NpcSpawn {
method constructor (line 20) | public constructor(npcKey: string, spawnPosition: Position, movementRa...
function translateNpcSpawnConfig (line 28) | function translateNpcSpawnConfig(config: NpcSpawnConfiguration): NpcSpawn {
function loadNpcSpawnConfigurations (line 37) | async function loadNpcSpawnConfigurations(path: string): Promise<NpcSpaw...
FILE: src/engine/config/quest-config.ts
type QuestKey (line 6) | type QuestKey = number | 'complete';
type QuestStageHandler (line 8) | type QuestStageHandler = {
type QuestDialogueHandler (line 12) | type QuestDialogueHandler = {
type QuestJournalHandler (line 16) | type QuestJournalHandler = {
type QuestCompletion (line 20) | interface QuestCompletion {
class PlayerQuest (line 32) | class PlayerQuest {
method constructor (line 38) | public constructor(questId: string) {
function questDialogueActionFactory (line 43) | function questDialogueActionFactory(
FILE: src/engine/config/shop-config.ts
type ShopStock (line 10) | type ShopStock = { itemKey: string; amount: number; restock?: number }[];
class Shop (line 12) | class Shop {
method constructor (line 26) | public constructor(
method resetShopStock (line 50) | public resetShopStock(): void {
method getBuyFromShopPrice (line 67) | public getBuyFromShopPrice(item: ItemDetails): number {
method getSellToShopPrice (line 109) | public getSellToShopPrice(item: ItemDetails): number {
method isItemSoldHere (line 145) | public isItemSoldHere(itemKey: string): boolean {
method open (line 149) | public open(player: Player): void {
method updateCustomers (line 172) | private updateCustomers() {
method removePlayerFromShop (line 182) | private removePlayerFromShop(player: Player) {
type ShopConfiguration (line 191) | interface ShopConfiguration {
function shopFactory (line 200) | function shopFactory(key: string, config: ShopConfiguration): Shop {
function loadShopConfigurations (line 212) | async function loadShopConfigurations(path: string): Promise<{ [key: str...
FILE: src/engine/interface/interface-state.ts
type TabType (line 7) | type TabType =
type GameInterfaceSlot (line 22) | type GameInterfaceSlot = 'full' | 'screen' | 'chatbox' | 'tabarea';
type WidgetOptions (line 40) | interface WidgetOptions {
class Widget (line 51) | class Widget {
method constructor (line 61) | public constructor(interfaceId: number, options: WidgetOptions) {
type WidgetClosedEvent (line 75) | interface WidgetClosedEvent {
class InterfaceState (line 84) | class InterfaceState {
method constructor (line 92) | public constructor(player: Player) {
method openChatOverlayWidget (line 117) | public openChatOverlayWidget(widgetId: number): void {
method closeChatOverlayWidget (line 122) | public closeChatOverlayWidget(): void {
method openScreenOverlayWidget (line 127) | public openScreenOverlayWidget(widgetId: number): void {
method closeScreenOverlayWidget (line 132) | public closeScreenOverlayWidget(): void {
method widgetClosed (line 137) | public async widgetClosed(slot: GameInterfaceSlot): Promise<WidgetClos...
method closeWidget (line 146) | public closeWidget(slot: GameInterfaceSlot, widgetId?: number, data?: ...
method openWidget (line 167) | public openWidget(widgetId: number, options: WidgetOptions): Widget {
method setTab (line 189) | public setTab(type: TabType, widget: Widget | number | null): void {
method getTab (line 213) | public getTab(type: TabType): Widget | null {
method findWidget (line 217) | public findWidget(widgetId: number): Widget | null {
method widgetOpen (line 228) | public widgetOpen(slot?: GameInterfaceSlot, widgetId?: number): boolean {
method getWidget (line 241) | public getWidget(slot: GameInterfaceSlot): Widget | null {
method closeAllSlots (line 245) | public closeAllSlots(): void {
method showWidget (line 251) | private showWidget(widget: Widget): void {
method closeOthers (line 292) | private closeOthers(openSlot: GameInterfaceSlot): void {
method clearSlots (line 297) | private clearSlots(): void {
method fullScreenWidget (line 304) | public get fullScreenWidget(): Widget | null {
method screenWidget (line 308) | public get screenWidget(): Widget | null {
method chatboxWidget (line 312) | public get chatboxWidget(): Widget | null {
method tabareaWidget (line 316) | public get tabareaWidget(): Widget | null {
method screenOverlayWidget (line 320) | public get screenOverlayWidget(): number | null {
FILE: src/engine/net/inbound-packet-handler.ts
type InboundPacket (line 7) | interface InboundPacket {
type PacketData (line 13) | interface PacketData {
constant PACKET_DIRECTORY (line 21) | const PACKET_DIRECTORY = `${BUILD_DIR}/net/inbound-packets`;
function loadPackets (line 23) | async function loadPackets(): Promise<Map<number, InboundPacket>> {
function handlePacket (line 39) | function handlePacket(player: Player, packetId: number, packetSize: numb...
FILE: src/engine/net/inbound-packets/object-interaction.packet.ts
type ObjectInteractionData (line 10) | interface ObjectInteractionData {
type objectInteractionPacket (line 16) | type objectInteractionPacket = (packet: PacketData) => ObjectInteraction...
FILE: src/engine/net/isaac.ts
class Isaac (line 1) | class Isaac {
method constructor (line 9) | public constructor(seed: number[]) {
method getR (line 13) | public getR(): number[] {
method add (line 17) | public add(x: number, y: number): number {
method reset (line 23) | public reset(): void {
method seed (line 29) | public seed(s: number[]): void {
method prng (line 119) | public prng(n?: number): void {
method rand (line 151) | public rand(): number {
method internals (line 159) | public internals(): { a: number; b: number; c: number; m: number[]; r:...
FILE: src/engine/net/outbound-packet-handler.ts
class OutboundPacketHandler (line 21) | class OutboundPacketHandler {
method constructor (line 29) | public constructor(player: Player) {
method resetCamera (line 36) | public resetCamera(): void {
method snapCameraTo (line 40) | public snapCameraTo(position: Position, height: number, speed: number,...
method turnCameraTowards (line 46) | public turnCameraTowards(position: Position, height: number, speed: nu...
method updateSocialSettings (line 52) | public updateSocialSettings(): void {
method sendPrivateMessage (line 60) | public sendPrivateMessage(chatId: number, sender: Player, message: num...
method sendProjectile (line 72) | public sendProjectile(
method updateFriendStatus (line 100) | public updateFriendStatus(friendName: string, worldId: number): void {
method sendFriendServerStatus (line 107) | public sendFriendServerStatus(status: 0 | 1 | 2): void {
method playSong (line 114) | public playSong(songId: number): void {
method playQuickSong (line 120) | public playQuickSong(songId: number, previousSongId: number): void {
method playSound (line 128) | public playSound(soundId: number, volume: number, delay: number = 0): ...
method playSoundAtPosition (line 137) | public playSoundAtPosition(
method updateChunk (line 155) | public updateChunk(chunk: Chunk, chunkUpdates: ChunkUpdateItem[]): void {
method clearChunk (line 193) | public clearChunk(chunk: Chunk): void {
method setWorldItem (line 203) | public setWorldItem(worldItem: WorldItem, position: Position, offset: ...
method removeWorldItem (line 214) | public removeWorldItem(worldItem: WorldItem, position: Position, offse...
method setLocationObject (line 224) | public setLocationObject(locationObject: LandscapeObject, position: Po...
method removeLocationObject (line 235) | public removeLocationObject(locationObject: LandscapeObject, position:...
method updateReferencePosition (line 245) | public updateReferencePosition(position: Position): void {
method showChatboxWidget (line 259) | public showChatboxWidget(widgetId: number): void {
method setWidgetNpcHead (line 266) | public setWidgetNpcHead(widgetId: number, childId: number, modelId: nu...
method setWidgetPlayerHead (line 274) | public setWidgetPlayerHead(widgetId: number, childId: number): void {
method playWidgetAnimation (line 281) | public playWidgetAnimation(widgetId: number, childId: number, animatio...
method showScreenAndTabWidgets (line 289) | public showScreenAndTabWidgets(widgetId: number, tabWidgetId: number):...
method resetAllClientConfigs (line 296) | public resetAllClientConfigs(): void {
method updateClientConfig (line 301) | public updateClientConfig(configId: number, value: number): void {
method setWidgetModelRotationAndZoom (line 322) | public setWidgetModelRotationAndZoom(widgetId: number, childId: number...
method updateWidgetModel1 (line 332) | public updateWidgetModel1(widgetId: number, childId: number, modelId: ...
method updateWidgetItemModel (line 340) | public updateWidgetItemModel(widgetId: number, itemId: number, scale?:...
method updateWidgetString (line 351) | public updateWidgetString(widgetId: number, childId: number, value: st...
method updateWidgetColor (line 359) | public updateWidgetColor(widgetId: number, childId: number, color: num...
method closeActiveWidgets (line 367) | public closeActiveWidgets(): void {
method showScreenOverlayWidget (line 371) | public showScreenOverlayWidget(widgetId: number): void {
method showStandaloneScreenWidget (line 377) | public showStandaloneScreenWidget(widgetId: number): void {
method sendUpdateSingleWidgetItem (line 384) | public sendUpdateSingleWidgetItem(widget: { widgetId: number; containe...
method update (line 405) | public update(packet: Packet, widget: { widgetId: number; containerId:...
method sendUpdateAllWidgetItems (line 432) | public sendUpdateAllWidgetItems(widget: { widgetId: number; containerI...
method sendUpdateAllWidgetItemsById (line 437) | public sendUpdateAllWidgetItemsById(widget: { widgetId: number; contai...
method setItemOnWidget (line 445) | public setItemOnWidget(widgetId: number, childId: number, itemId: numb...
method toggleWidgetVisibility (line 454) | public toggleWidgetVisibility(widgetId: number, childId: number, hidde...
method moveWidgetChild (line 462) | public moveWidgetChild(widgetId: number, childId: number, offsetX: num...
method showTabWidget (line 471) | public showTabWidget(widgetId: number): void {
method sendTabWidget (line 477) | public sendTabWidget(tabIndex: SidebarTab, widgetId: number | null): v...
method blinkTabIcon (line 485) | public blinkTabIcon(tabIndex: number): void {
method showFullscreenWidget (line 491) | public showFullscreenWidget(widgetId: number, secondaryWidgetId: numbe...
method showNumberInputDialogue (line 499) | public showNumberInputDialogue(): void {
method showTextInputDialogue (line 504) | public showTextInputDialogue(): void {
method showChatDialogue (line 509) | public showChatDialogue(widgetId: number): void {
method updateCarryWeight (line 515) | public updateCarryWeight(weight: number): void {
method showHintIcon (line 522) | public showHintIcon(iconType: 2 | 3 | 4 | 5 | 6, position: Position, o...
method showPlayerHintIcon (line 532) | public showPlayerHintIcon(player: Player): void {
method showNpcHintIcon (line 545) | public showNpcHintIcon(npc: Npc): void {
method resetNpcHintIcon (line 558) | public resetNpcHintIcon(): void {
method logout (line 571) | public logout(): void {
method chatboxMessage (line 578) | public chatboxMessage(message: string): void {
method consoleMessage (line 585) | public consoleMessage(message: string): void {
method sendConsoleCommand (line 592) | public sendConsoleCommand(command: string, help: string): void {
method updateSkill (line 599) | public updateSkill(skillId: number, level: number, exp: number): void {
method constructMapRegion (line 608) | public constructMapRegion(mapData: ConstructedRegion): void {
method updateCurrentMapChunk (line 681) | public updateCurrentMapChunk(): void {
method updatePlayerOption (line 708) | public updatePlayerOption(option: string, index: number = 0, placement...
method flushQueue (line 717) | public flushQueue(): void {
method queue (line 731) | public queue(packet: Packet, updateTask: boolean = false): void {
method putCameraPosition (line 742) | private putCameraPosition(packet: Packet, position: Position, height: ...
method getChunkPositionOffset (line 750) | private getChunkPositionOffset(x: number, y: number, chunk: Chunk): nu...
method getChunkOffset (line 756) | private getChunkOffset(chunk: Chunk): { offsetX: number; offsetY: numb...
method strip (line 765) | private strip(packet: Packet): Buffer {
method segment (line 772) | private segment(container: ItemContainer, start: number): { bitset: nu...
FILE: src/engine/net/packet.ts
type PacketType (line 7) | enum PacketType {
class Packet (line 16) | class Packet extends ByteBuffer {
method constructor (line 20) | public constructor(packetId: number, type: PacketType = PacketType.FIX...
method toBuffer (line 26) | public toBuffer(cipher: Isaac): Buffer {
method packetId (line 51) | public get packetId(): number {
method type (line 55) | public get type(): PacketType {
FILE: src/engine/plugins/content-plugin.ts
class ContentPlugin (line 10) | class ContentPlugin {
function loadPluginFiles (line 19) | async function loadPluginFiles(): Promise<ContentPlugin[]> {
FILE: src/engine/plugins/loader.ts
type PluginActionHookMap (line 10) | type PluginActionHookMap = { quest?: ActionHook[] } & {
type PluginQuestMap (line 17) | interface PluginQuestMap {
function loadPlugins (line 33) | async function loadPlugins(): Promise<void> {
FILE: src/engine/task/impl/actor-actor-interaction-task.ts
method constructor (line 25) | constructor(actor: TActor, otherActor: TOtherActor, walkOnStart = false) {
method execute (line 47) | public execute() {
method other (line 71) | protected get other(): TOtherActor | null {
FILE: src/engine/task/impl/actor-landscape-object-interaction-task.ts
method constructor (line 25) | constructor(
method execute (line 54) | public execute() {
method landscapeObject (line 82) | protected get landscapeObject(): LandscapeObject | null {
method landscapeObjectPosition (line 102) | protected get landscapeObjectPosition(): Position | null {
FILE: src/engine/task/impl/actor-task.ts
method constructor (line 27) | constructor(
method onStop (line 41) | public onStop(): void {
method listenForMovement (line 55) | private listenForMovement(): void {
FILE: src/engine/task/impl/actor-teleport-task.ts
class ActorTeleportTask (line 10) | class ActorTeleportTask<TActor extends Actor = Actor> extends ActorTask<...
method constructor (line 17) | constructor(actor: TActor, newPosition: Position) {
method execute (line 30) | public execute() {
method newPosition (line 43) | protected get newPosition(): Position | null {
FILE: src/engine/task/impl/actor-walk-to-task.ts
type WalkToTargetType (line 10) | type WalkToTargetType = LandscapeObject | Position;
type WalkToTarget (line 15) | type WalkToTarget = WalkToTargetType | (() => WalkToTargetType);
type ActorWalkToTask (line 25) | interface ActorWalkToTask<TActor extends Actor = Actor, TTarget extends ...
method constructor (line 49) | constructor(
method execute (line 82) | public execute() {
method getTargetPosition (line 114) | private getTargetPosition(): Position {
method atDestination (line 127) | protected get atDestination(): boolean {
FILE: src/engine/task/impl/actor-world-item-interaction-task.ts
method constructor (line 20) | constructor(actor: TActor, worldItem: WorldItem) {
method execute (line 36) | public execute() {
method worldItem (line 57) | protected get worldItem(): WorldItem | null {
FILE: src/engine/task/task-scheduler.ts
class TaskScheduler (line 10) | class TaskScheduler {
method tick (line 24) | public tick(): void {
method enqueue (line 58) | public enqueue(task: Task): void {
method clear (line 94) | public clear(): void {
FILE: src/engine/task/task.test.ts
method constructor (line 156) | constructor() {
method execute (line 160) | public execute(): void {
method onStop (line 164) | public onStop(): void {
FILE: src/engine/task/task.ts
constant DEFAULT_TASK_CONFIG (line 4) | const DEFAULT_TASK_CONFIG: Required<TaskConfig> = {
function readConfigValue (line 13) | function readConfigValue(key: keyof TaskConfig, config?: TaskConfig): any {
type Task (line 29) | interface Task {
method constructor (line 81) | public constructor(config?: TaskConfig) {
method breaksOn (line 109) | public breaksOn(breakType: TaskBreakType): boolean {
method stop (line 118) | public stop(): boolean {
method tick (line 141) | public tick(): void {
method isActive (line 165) | public get isActive(): boolean {
FILE: src/engine/task/types.ts
type TaskStackType (line 6) | enum TaskStackType {
type TaskStackGroup (line 25) | enum TaskStackGroup {
type TaskBreakType (line 37) | enum TaskBreakType {
type TaskConfig (line 51) | type TaskConfig = Partial<
FILE: src/engine/task/utils/_testing.ts
function createMockTask (line 5) | function createMockTask(
FILE: src/engine/util/colors.ts
function hexToRgb (line 1) | function hexToRgb(hex: number): { r: number; b: number; g: number } {
function hexToHexString (line 9) | function hexToHexString(hex: number): string {
function rgbTo16Bit (line 25) | function rgbTo16Bit(r: number, g: number, b: number): number {
FILE: src/engine/util/data.ts
function hasValueNotNull (line 1) | function hasValueNotNull(variable: unknown): boolean {
FILE: src/engine/util/error-handling.ts
class WidgetsClosedWarning (line 7) | class WidgetsClosedWarning extends Error {
method constructor (line 8) | constructor() {
class ActionsCancelledWarning (line 15) | class ActionsCancelledWarning extends Error {
method constructor (line 16) | constructor() {
function initErrorHandling (line 25) | function initErrorHandling(): void {
FILE: src/engine/util/files.ts
function watchSource (line 46) | function watchSource(dir: string): Observable<void> {
function watchForChanges (line 58) | function watchForChanges(dir: string, regex: RegExp): void {
FILE: src/engine/util/objects.ts
function deepMerge (line 7) | function deepMerge<T>(objectA: T, objectB: T): T {
FILE: src/engine/util/queue.ts
class Queue (line 6) | class Queue<TItem> {
method enqueue (line 13) | public enqueue(item: TItem): void {
method dequeue (line 21) | public dequeue(): TItem | undefined {
method peek (line 35) | public peek(): TItem {
method clear (line 42) | public clear(): void {
method items (line 49) | public get items(): TItem[] {
method length (line 56) | public get length(): number {
method isEmpty (line 63) | public get isEmpty(): boolean {
method isNotEmpty (line 70) | public get isNotEmpty(): boolean {
FILE: src/engine/util/strings.ts
function getFont (line 13) | function getFont(font?: number | string) {
type TextDecoration (line 24) | enum TextDecoration {
function getStylingType (line 29) | function getStylingType(tag: string) {
function wrapText (line 53) | function wrapText(text: string, maxWidth: number, font?: number | string...
constant VALID_CHARS (line 161) | const VALID_CHARS = [
function longToString (line 227) | function longToString(nameLong: bigint): string {
function stringToLong (line 238) | function stringToLong(s: string): bigint {
FILE: src/engine/util/varbits.ts
function getVarbitMorphIndex (line 11) | function getVarbitMorphIndex(varbitId, playerConfig) {
FILE: src/engine/world/actor/actor.ts
type ActorType (line 24) | type ActorType = 'player' | 'npc';
method constructor (line 80) | protected constructor(actorType: ActorType) {
method enqueueTask (line 114) | public enqueueTask<T>(taskClass: new (actor: Actor, ...args: T[]) => Tas...
method enqueueBaseTask (line 134) | public enqueueBaseTask(task: Task): void {
method teleport (line 147) | public teleport(newPosition: Position): void {
method clearBonuses (line 154) | public clearBonuses(): void {
method moveBehind (line 178) | public moveBehind(target: Actor): boolean {
method moveTo (line 204) | public moveTo(target: Actor): boolean {
method follow (line 223) | public follow(target: Actor): void {
method walkTo (line 249) | public walkTo(target: Actor | Position): boolean {
method face (line 272) | public face(
method clearFaceActor (line 304) | public clearFaceActor(): void {
method playAnimation (line 311) | public playAnimation(animation: number | Animation | null): void {
method stopAnimation (line 319) | public stopAnimation(): void {
method playGraphics (line 323) | public playGraphics(graphics: number | Graphic): void {
method stopGraphics (line 331) | public stopGraphics(): void {
method removeItem (line 335) | public removeItem(slot: number): void {
method removeBankItem (line 339) | public removeBankItem(slot: number): void {
method giveItem (line 343) | public giveItem(item: number | Item): boolean {
method giveBankItem (line 346) | public giveBankItem(item: number | Item): boolean {
method hasItemInInventory (line 350) | public hasItemInInventory(item: number | Item): boolean {
method hasItemInBank (line 353) | public hasItemInBank(item: number | Item): boolean {
method hasItemOnPerson (line 357) | public hasItemOnPerson(item: number | Item): boolean {
method canMove (line 361) | public canMove(): boolean {
method initiateRandomMovement (line 367) | public initiateRandomMovement(): void {
method moveSomewhere (line 385) | public moveSomewhere(): void {
method forceMovement (line 454) | public forceMovement(direction: number, steps: number): void {
method withinBounds (line 491) | public withinBounds(x: number, y: number): boolean {
method init (line 498) | protected init() {
method destroy (line 507) | protected destroy() {
method tick (line 513) | protected tick() {
method position (line 517) | public get position(): Position {
method position (line 521) | public set position(value: Position) {
method lastMapRegionUpdatePosition (line 529) | public get lastMapRegionUpdatePosition(): Position {
method lastMapRegionUpdatePosition (line 533) | public set lastMapRegionUpdatePosition(value: Position) {
method worldIndex (line 537) | public get worldIndex(): number {
method worldIndex (line 541) | public set worldIndex(value: number) {
method walkDirection (line 545) | public get walkDirection(): number {
method walkDirection (line 549) | public set walkDirection(value: number) {
method runDirection (line 553) | public get runDirection(): number {
method runDirection (line 557) | public set runDirection(value: number) {
method faceDirection (line 561) | public get faceDirection(): number {
method faceDirection (line 565) | public set faceDirection(value: number) {
method busy (line 569) | public get busy(): boolean {
method busy (line 573) | public set busy(value: boolean) {
method instance (line 577) | public get instance(): WorldInstance {
method instance (line 581) | public set instance(value: WorldInstance | null) {
method bonuses (line 585) | public get bonuses(): { offensive: OffensiveBonuses; defensive: Defensiv...
FILE: src/engine/world/actor/combat.ts
type CombatStyles (line 4) | interface CombatStyles {
type CombatStyle (line 8) | interface CombatStyle {
FILE: src/engine/world/actor/dialogue.ts
type Emote (line 10) | enum Emote {
type EmoteAnimation (line 35) | enum EmoteAnimation {
function wrapDialogueText (line 119) | function wrapDialogueText(text: string, type: 'ACTOR' | 'TEXT'): string[] {
function parseDialogueFunctionArgs (line 139) | function parseDialogueFunctionArgs(func: Function): string[] | null {
type DialogueTree (line 163) | type DialogueTree = (Function | DialogueFunction | GoToAction)[];
type AdditionalOptions (line 165) | interface AdditionalOptions {
type NpcParticipant (line 171) | interface NpcParticipant {
class DialogueFunction (line 176) | class DialogueFunction {
method constructor (line 177) | constructor(
type ParsedDialogueTree (line 186) | type ParsedDialogueTree = (DialogueAction | DialogueFunction | string)[];
type DialogueAction (line 188) | interface DialogueAction {
class GoToAction (line 193) | class GoToAction implements DialogueAction {
method constructor (line 197) | constructor(public to: string | Function) {}
type ActorDialogueAction (line 200) | interface ActorDialogueAction extends DialogueAction {
type NpcDialogueAction (line 205) | interface NpcDialogueAction extends ActorDialogueAction {
type PlayerDialogueAction (line 209) | interface PlayerDialogueAction extends ActorDialogueAction {
type TextDialogueAction (line 213) | interface TextDialogueAction extends DialogueAction {
type TitledTextDialogueAction (line 218) | interface TitledTextDialogueAction extends DialogueAction {
type OptionsDialogueAction (line 223) | interface OptionsDialogueAction extends DialogueAction {
type SubDialogueTreeAction (line 227) | interface SubDialogueTreeAction extends DialogueAction {
function parseDialogueTree (line 232) | function parseDialogueTree(player: Player, npcParticipants: NpcParticipa...
function runDialogueAction (line 452) | async function runDialogueAction(
function runParsedDialogue (line 665) | async function runParsedDialogue(
function dialogue (line 681) | async function dialogue(
type SelectableItem (line 767) | interface SelectableItem {
type ItemSelection (line 774) | interface ItemSelection {
function itemSelectionDialogue (line 779) | async function itemSelectionDialogue(player: Player, type: 'COOKING' | '...
FILE: src/engine/world/actor/magic.ts
type Magic (line 1) | interface Magic {
FILE: src/engine/world/actor/metadata.ts
type ActorMetadata (line 13) | type ActorMetadata = {
FILE: src/engine/world/actor/npc.ts
class Npc (line 23) | class Npc extends Actor {
method constructor (line 52) | public constructor(npcDetails: NpcDetails | number, npcSpawn: NpcSpawn...
method init (line 112) | public async init(): Promise<void> {
method processDeath (line 127) | public async processDeath(assailant: Actor, defender: Actor): Promise<...
method withinBounds (line 166) | public withinBounds(x: number, y: number): boolean {
method kill (line 175) | public kill(respawn: boolean = true): void {
method tick (line 188) | public async tick(): Promise<void> {
method reset (line 197) | public async reset(): Promise<void> {
method say (line 208) | public say(message: string): void {
method canMove (line 215) | public canMove(): boolean {
method playSound (line 227) | public playSound(soundId: number, volume: number): void {
method transformInto (line 235) | public transformInto(npcKey: string): void {
method setNewId (line 245) | public setNewId(id: number): void {
method equals (line 250) | public equals(other: Npc): boolean {
method position (line 258) | public set position(position: Position) {
method position (line 269) | public get position(): Position {
method name (line 273) | public get name(): string {
method combatLevel (line 277) | public get combatLevel(): number {
method movementRadius (line 281) | public get movementRadius(): number {
method exists (line 285) | public get exists(): boolean {
method exists (line 289) | public set exists(value: boolean) {
method initialized (line 293) | public get initialized(): boolean {
method instanceId (line 297) | public get instanceId(): string | null {
function calculateNpcDrops (line 311) | function calculateNpcDrops(player: Player, npcDetails: NpcDetails): { it...
function getRandomInt (line 349) | function getRandomInt(max, min = 1): number {
FILE: src/engine/world/actor/pathfinding.ts
class Point (line 10) | class Point {
method constructor (line 14) | public constructor(
method equals (line 19) | public equals(point: Point | null): boolean {
method x (line 37) | public get x(): number {
method y (line 41) | public get y(): number {
method parent (line 45) | public get parent(): Point | null {
method parent (line 49) | public set parent(value: Point | null) {
method cost (line 53) | public get cost(): number {
method cost (line 57) | public set cost(value: number) {
type PathingOptions (line 62) | interface PathingOptions {
class Pathfinding (line 67) | class Pathfinding {
method constructor (line 74) | public constructor(private actor: Actor) {}
method walkTo (line 76) | public walkTo(position: Position, options: PathingOptions): void {
method createTileMap (line 105) | public createTileMap(searchRadius: number = 8): { [key: string]: Tile } {
method pathTo (line 122) | public pathTo(destinationX: number, destinationY: number, searchRadius...
method canMoveTo (line 264) | public canMoveTo(origin: Position, destination: Position): boolean {
method movementPermitted (line 396) | public movementPermitted(
method diagonalMovementPermitted (line 423) | public diagonalMovementPermitted(
method findLocalCornerChunk (line 447) | public findLocalCornerChunk(cornerX: number, cornerY: number, origin: ...
method calculateCost (line 461) | private calculateCost(point: Point): void {
method calculateCostBetween (line 480) | private calculateCostBetween(current: Point, destination: Point): numb...
method calculateBestPoint (line 486) | private calculateBestPoint(): Point | null {
method canPathNSEW (line 500) | private canPathNSEW(position: Position, i: number): boolean {
method canPathDiagonally (line 507) | private canPathDiagonally(
method instance (line 536) | private get instance(): WorldInstance {
FILE: src/engine/world/actor/player/achievements.ts
type AchievementSeries (line 14) | enum AchievementSeries {
type Achievement (line 19) | interface Achievement {
function giveAchievement (line 44) | function giveAchievement(achievement: Achievement, player: Player): bool...
function hasAchievement (line 62) | function hasAchievement(achievement: Achievement, player: Player): boole...
FILE: src/engine/world/actor/player/attack.ts
class Attack (line 3) | class Attack {
type AttackDamageType (line 12) | enum AttackDamageType {
FILE: src/engine/world/actor/player/cutscenes.ts
type CameraOptions (line 7) | interface CameraOptions {
class Cutscene (line 23) | class Cutscene {
method constructor (line 36) | public constructor(player: Player, options?: CameraOptions) {
method setCamera (line 48) | public setCamera(options: CameraOptions): void {
method snapCameraTo (line 78) | public snapCameraTo(
method lookAt (line 101) | public lookAt(lookX: number, lookY: number, height: number = 400, move...
method endCutscene (line 113) | public endCutscene(): void {
method cameraX (line 118) | public get cameraX(): number {
method cameraY (line 122) | public get cameraY(): number {
method cameraHeight (line 126) | public get cameraHeight(): number {
method cameraMovementSpeed (line 130) | public get cameraMovementSpeed(): number {
method cameraAcceleration (line 134) | public get cameraAcceleration(): number {
method lookX (line 138) | public get lookX(): number {
method lookY (line 142) | public get lookY(): number {
method lookHeight (line 146) | public get lookHeight(): number {
method lookMovementSpeed (line 150) | public get lookMovementSpeed(): number {
method lookAcceleration (line 154) | public get lookAcceleration(): number {
FILE: src/engine/world/actor/player/dialogue-action.ts
type LineConstraint (line 12) | type LineConstraint = [number, number];
type DialogueEmote (line 24) | enum DialogueEmote {
type DialogueType (line 57) | type DialogueType = 'PLAYER' | 'NPC' | 'OPTIONS' | 'TEXT';
type DialogueOptions (line 59) | interface DialogueOptions {
class DialogueAction (line 69) | class DialogueAction {
method constructor (line 72) | public constructor(private readonly p: Player) {}
method player (line 74) | public async player(emote: DialogueEmote, lines: string[]): Promise<Di...
method npc (line 78) | public async npc(npc: Npc | number, emote: DialogueEmote, lines: strin...
method options (line 82) | public async options(title: string, options: string[]): Promise<Dialog...
method dialogue (line 86) | public async dialogue(options: DialogueOptions): Promise<DialogueActio...
method close (line 161) | public close(): void {
method action (line 165) | public get action(): number | null {
method action (line 169) | public set action(value: number | null) {
FILE: src/engine/world/actor/player/metadata.ts
type PlayerMetadata (line 16) | type PlayerMetadata = {
FILE: src/engine/world/actor/player/model.ts
type SendMessageOptions (line 4) | interface SendMessageOptions {
FILE: src/engine/world/actor/player/player-data.ts
type Appearance (line 11) | interface Appearance {
class PlayerSettings (line 27) | class PlayerSettings {
type PlayerSave (line 48) | interface PlayerSave {
function savePlayerData (line 112) | function savePlayerData(player: Player): boolean {
function playerExists (line 154) | function playerExists(username: string): boolean {
function loadPlayerSave (line 160) | function loadPlayerSave(username: string): PlayerSave | null {
FILE: src/engine/world/actor/player/player.ts
type SidebarTab (line 87) | enum SidebarTab {
type Rights (line 103) | enum Rights {
class Player (line 112) | class Player extends Actor {
method constructor (line 162) | public constructor(
method init (line 198) | public async init(): Promise<void> {
method logout (line 334) | public logout(): void {
method save (line 366) | public save(): void {
method privateMessageReceived (line 370) | public privateMessageReceived(fromPlayer: Player, messageBytes: number...
method addFriend (line 374) | public addFriend(friendName: string): boolean {
method removeFriend (line 384) | public removeFriend(friendName: string): boolean {
method addIgnoredPlayer (line 395) | public addIgnoredPlayer(playerName: string): boolean {
method removeIgnoredPlayer (line 413) | public removeIgnoredPlayer(playerName: string): boolean {
method onNpcKill (line 424) | public onNpcKill(npc: Npc) {
method chunkChanged (line 432) | public chunkChanged(chunk: Chunk): void {
method tick (line 443) | public async tick(): Promise<void> {
method update (line 466) | public async update(): Promise<void> {
method reset (line 470) | public async reset(): Promise<void> {
method getQuestPoints (line 495) | public getQuestPoints(): number {
method getQuest (line 509) | public getQuest(questId: string): PlayerQuest {
method hasQuestRequirement (line 525) | public hasQuestRequirement(questId: string, minimumStage: QuestKey = '...
method setQuestProgress (line 543) | public setQuestProgress(questId: string, progress: QuestKey): void {
method modifyWidget (line 619) | public modifyWidget(widgetId: number, options: { childId?: number; tex...
method setSidebarWidget (line 641) | public setSidebarWidget(sidebarId: SidebarTab, widgetId: number | null...
method playSong (line 649) | public playSong(songId: number): void {
method playSound (line 671) | public playSound(soundId: number, volume: number = 10, delay: number =...
method sendMessage (line 694) | public async sendMessage(messages: string | string[], options?: boolea...
method teleport (line 732) | public teleport(newPosition: Position, updateRegion: boolean = true): ...
method canMove (line 756) | public canMove(): boolean {
method removeFirstItem (line 763) | public removeFirstItem(item: number | Item): number {
method hasCoins (line 774) | public hasCoins(amount: number): number {
method removeItem (line 778) | public removeItem(slot: number): void {
method giveItem (line 783) | public giveItem(item: number | Item | string): boolean {
method hasItemOnPerson (line 793) | public hasItemOnPerson(item: number | Item): boolean {
method updateCarryWeight (line 801) | public updateCarryWeight(force: boolean = false): void {
method settingChanged (line 815) | public settingChanged(buttonId: number): void {
method updateBonuses (line 858) | public updateBonuses(): void {
method sendLogMessage (line 870) | public sendLogMessage(message: string, isConsole: boolean): void {
method sendCommandList (line 878) | public sendCommandList(commands: PlayerCommandActionHook[]): void {
method isItemEquipped (line 904) | public isItemEquipped(item: number | Item | string): boolean {
method getEquippedItem (line 914) | public getEquippedItem(equipmentSlot: EquipmentSlot): Item | null {
method canEquipItem (line 926) | public canEquipItem(item: ItemDetails | string): { equipable: boolean;...
method equipItem (line 952) | public equipItem(itemId: number, itemSlot: number, slot: EquipmentSlot...
method equipmentChanged (line 1036) | public equipmentChanged(): void {
method syncBonuses (line 1051) | public syncBonuses(): void {
method unequipItem (line 1073) | public unequipItem(slot: EquipmentSlot | number, updateRequired: boole...
method transformInto (line 1108) | public transformInto(npc: NpcDetails | string | number | null): void {
method getMorphedNpcDetails (line 1140) | public getMorphedNpcDetails(originalNpc: Npc) {
method equals (line 1161) | public equals(player: Player): boolean {
method inventoryUpdated (line 1165) | private inventoryUpdated(event: ContainerUpdateEvent): void {
method sendChunkUpdates (line 1182) | private sendChunkUpdates(chunks: Chunk[]): void {
method findChunkUpdates (line 1208) | private findChunkUpdates(chunkMods: Map<string, TileModifications>, ch...
method updateQuestTab (line 1229) | private updateQuestTab(): void {
method updateMusicTab (line 1259) | private updateMusicTab(): void {
method addBonuses (line 1282) | private addBonuses(item: Item): void {
method loadSaveData (line 1310) | private loadSaveData(): void {
method position (line 1378) | public set position(position: Position) {
method position (line 1389) | public get position(): Position {
method socket (line 1393) | public get socket(): Socket {
method inCipher (line 1397) | public get inCipher(): Isaac {
method outCipher (line 1401) | public get outCipher(): Isaac {
method outgoingPackets (line 1405) | public get outgoingPackets(): OutboundPacketHandler {
method loginDate (line 1409) | public get loginDate(): Date {
method lastAddress (line 1413) | public get lastAddress(): string {
method rights (line 1417) | public get rights(): Rights {
method appearance (line 1421) | public get appearance(): Appearance {
method appearance (line 1425) | public set appearance(value: Appearance) {
method equipment (line 1429) | public get equipment(): ItemContainer {
method carryWeight (line 1433) | public get carryWeight(): number {
method settings (line 1437) | public get settings(): PlayerSettings {
method nearbyChunks (line 1441) | public get nearbyChunks(): Chunk[] {
method instance (line 1445) | public get instance(): WorldInstance {
method instance (line 1449) | public set instance(value: WorldInstance | null) {
FILE: src/engine/world/actor/player/private-messaging.ts
type PrivateChatMode (line 4) | enum PrivateChatMode {
class PrivateMessaging (line 10) | class PrivateMessaging {
method friendAdded (line 11) | public static friendAdded(player: Player, friendName: string): void {
method friendRemoved (line 16) | public static friendRemoved(player: Player, friendName: string): void {
method updateFriendsList (line 33) | public static updateFriendsList(player: Player): void {
method playerPrivateChatModeChanged (line 62) | public static playerPrivateChatModeChanged(player: Player, updating: b...
method playerLoggedIn (line 85) | public static playerLoggedIn(player: Player): void {
FILE: src/engine/world/actor/player/quest.ts
class Quest (line 3) | class Quest {
method constructor (line 11) | public constructor(options: {
FILE: src/engine/world/actor/player/sync/actor-sync.ts
function registerNewActors (line 15) | function registerNewActors(
function syncTrackedActors (line 80) | function syncTrackedActors(
function appendMovement (line 131) | function appendMovement(actor: Actor, packet: ByteBuffer): void {
FILE: src/engine/world/actor/player/sync/npc-sync-task.ts
class NpcSyncTask (line 13) | class NpcSyncTask extends SyncTask<void> {
method constructor (line 16) | public constructor(player: Player) {
method execute (line 21) | public async execute(): Promise<void> {
method appendUpdateMaskData (line 94) | private appendUpdateMaskData(npc: Npc, updateMaskData: ByteBuffer): vo...
FILE: src/engine/world/actor/player/sync/player-sync-task.ts
class PlayerSyncTask (line 16) | class PlayerSyncTask extends SyncTask<void> {
method constructor (line 19) | public constructor(player: Player) {
method execute (line 24) | public async execute(): Promise<void> {
method appendUpdateMaskData (line 107) | private appendUpdateMaskData(player: Player, updateMaskData: ByteBuffe...
method appendBasicAppearanceItem (line 340) | private appendBasicAppearanceItem(buffer: ByteBuffer, player: Player, ...
FILE: src/engine/world/actor/prayer.ts
class Prayer (line 1) | class Prayer {
FILE: src/engine/world/actor/skills.ts
type Skill (line 9) | enum Skill {
type SkillName (line 34) | type SkillName =
type SkillDetail (line 58) | interface SkillDetail {
type SkillValue (line 89) | interface SkillValue {
class SkillShortcut (line 95) | class SkillShortcut {
method constructor (line 96) | public constructor(
method addExp (line 101) | public addExp(exp: number): void {
method level (line 105) | public set level(value: number) {
method level (line 109) | public get level(): number {
method exp (line 113) | public set exp(value: number) {
method exp (line 117) | public get exp(): number {
method levelForExp (line 121) | public get levelForExp(): number {
type SkillShortcutMap (line 126) | type SkillShortcutMap = {
class SkillShortcuts (line 130) | class SkillShortcuts implements SkillShortcutMap {
class Skills (line 155) | class Skills extends SkillShortcuts {
method constructor (line 172) | public constructor(
method confine (line 189) | private static confine(value: number, min: number, max: number): number {
method setHitpoints (line 193) | public setHitpoints(hitpoints: number): void {
method getTotalLevel (line 197) | public getTotalLevel(): number {
method getCombatLevel (line 201) | public getCombatLevel(): number {
method getLevel (line 209) | public getLevel(skill: number | SkillName, ignoreLevelModifications: b...
method hasLevel (line 214) | public hasLevel(skill: number | SkillName, level: number, ignoreLevelM...
method getLevelForExp (line 218) | public getLevelForExp(exp: number, index: number | undefined = undefin...
method getExpForLevel (line 229) | public getExpForLevel(level: number): number {
method addExp (line 234) | public addExp(skill: number | SkillName, exp: number): void {
method showLevelUpDialogue (line 291) | public showLevelUpDialogue(skill: number | SkillName, level: number): ...
method getSkillId (line 325) | public getSkillId(skill: number | SkillName): number {
method get (line 334) | public get(skill: number | SkillName): SkillValue {
method setExp (line 343) | public setExp(skill: number | SkillName, exp: number): void {
method setLevel (line 348) | public setLevel(skill: number | SkillName, level: number): void {
method defaultValues (line 353) | private defaultValues(): SkillValue[] {
method values (line 360) | public get values(): SkillValue[] {
method values (line 364) | public set values(value: SkillValue[]) {
FILE: src/engine/world/actor/update-flags.ts
type ChatMessage (line 7) | interface ChatMessage {
type Graphic (line 17) | interface Graphic {
type Animation (line 26) | interface Animation {
type DamageType (line 31) | enum DamageType {
type Damage (line 40) | interface Damage {
class UpdateFlags (line 50) | class UpdateFlags {
method constructor (line 60) | public constructor() {
method reset (line 65) | public reset(): void {
method addDamage (line 79) | public addDamage(amount: number, type: DamageType, remainingHitpoints:...
method addChatMessage (line 88) | public addChatMessage(chatMessage: ChatMessage): void {
method updateBlockRequired (line 100) | public get updateBlockRequired(): boolean {
method mapRegionUpdateRequired (line 112) | public get mapRegionUpdateRequired(): boolean {
method mapRegionUpdateRequired (line 116) | public set mapRegionUpdateRequired(value: boolean) {
method appearanceUpdateRequired (line 120) | public get appearanceUpdateRequired(): boolean {
method appearanceUpdateRequired (line 124) | public set appearanceUpdateRequired(value: boolean) {
method chatMessages (line 128) | public get chatMessages(): ChatMessage[] {
method chatMessages (line 132) | public set chatMessages(value: ChatMessage[]) {
method facePosition (line 136) | public get facePosition(): Position | null {
method facePosition (line 140) | public set facePosition(value: Position | null) {
method faceActor (line 144) | public get faceActor(): Actor | 'CLEAR' | null {
method faceActor (line 148) | public set faceActor(value: Actor | 'CLEAR' | null) {
method graphics (line 152) | public get graphics(): Graphic | null {
method graphics (line 156) | public set graphics(value: Graphic | null) {
method animation (line 160) | public get animation(): Animation | null {
method animation (line 164) | public set animation(value: Animation | null) {
method damage (line 168) | public get damage(): Damage | null {
method damage (line 172) | public set damage(value: Damage | null) {
FILE: src/engine/world/actor/walking-queue.ts
class WalkingQueue (line 11) | class WalkingQueue {
method constructor (line 20) | public constructor(private readonly actor: Actor) {
method moving (line 25) | public moving(): boolean {
method clear (line 29) | public clear(): void {
method getLastPosition (line 33) | public getLastPosition(): Position {
method add (line 41) | public add(x: number, y: number, positionMetadata?: { [key: string]: a...
method moveIfAble (line 95) | public moveIfAble(xDiff: number, yDiff: number): boolean {
method resetDirections (line 109) | public resetDirections(): void {
method calculateDirection (line 114) | public calculateDirection(diffX: number, diffY: number): number {
method process (line 142) | public process(): void {
method valid (line 244) | get valid(): boolean {
method valid (line 248) | set valid(value: boolean) {
FILE: src/engine/world/config/examine-data.ts
type Examine (line 5) | interface Examine {
class ExamineCache (line 10) | class ExamineCache {
method constructor (line 15) | public constructor() {
method getItem (line 22) | public getItem(id: number): string | null {
method getNpc (line 27) | public getNpc(id: number): string | null {
method getObject (line 32) | public getObject(id: number): string | null {
function parseData (line 38) | function parseData(fileName: string): Map<number, Examine> {
FILE: src/engine/world/config/harvest-tool.ts
type HarvestTool (line 4) | interface HarvestTool {
type Pickaxe (line 10) | enum Pickaxe {
type Axe (line 19) | enum Axe {
function getBestPickaxe (line 53) | function getBestPickaxe(player: Player): HarvestTool | null {
function getBestAxe (line 68) | function getBestAxe(player: Player): HarvestTool | null {
function getPickaxe (line 79) | function getPickaxe(pickaxe: Pickaxe): HarvestTool {
function getAxe (line 83) | function getAxe(axe: Axe): HarvestTool {
FILE: src/engine/world/config/harvestable-object.ts
type WeightedItem (line 4) | interface WeightedItem {
type IHarvestable (line 9) | interface IHarvestable {
constant CLAY_OBJECTS (line 21) | const CLAY_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
constant COPPER_OBJECTS (line 26) | const COPPER_OBJECTS: Map<number, number> = new Map<number, number>([
constant TIN_OBJECTS (line 30) | const TIN_OBJECTS: Map<number, number> = new Map<number, number>([...obj...
constant IRON_OBJECTS (line 35) | const IRON_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
constant COAL_OBJECTS (line 40) | const COAL_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
constant SILVER_OBJECTS (line 45) | const SILVER_OBJECTS: Map<number, number> = new Map<number, number>([
constant GOLD_OBJECTS (line 49) | const GOLD_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
constant MITHRIL_OBJECTS (line 54) | const MITHRIL_OBJECTS: Map<number, number> = new Map<number, number>([
constant ADAMANT_OBJECTS (line 58) | const ADAMANT_OBJECTS: Map<number, number> = new Map<number, number>([
constant RUNITE_OBJECTS (line 62) | const RUNITE_OBJECTS: Map<number, number> = new Map<number, number>([
constant NORMAL_OBJECTS (line 66) | const NORMAL_OBJECTS: Map<number, number> = new Map<number, number>([
constant ACHEY_OBJECTS (line 71) | const ACHEY_OBJECTS: Map<number, number> = new Map<number, number>([...o...
constant OAK_OBJECTS (line 76) | const OAK_OBJECTS: Map<number, number> = new Map<number, number>([...obj...
constant WILLOW_OBJECTS (line 81) | const WILLOW_OBJECTS: Map<number, number> = new Map<number, number>([......
constant TEAK_OBJECTS (line 86) | const TEAK_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
constant DRAMEN_OBJECTS (line 91) | const DRAMEN_OBJECTS: Map<number, number> = new Map<number, number>([......
constant MAPLE_OBJECTS (line 96) | const MAPLE_OBJECTS: Map<number, number> = new Map<number, number>([...o...
constant HOLLOW_OBJECTS (line 101) | const HOLLOW_OBJECTS: Map<number, number> = new Map<number, number>([......
constant MAHOGANY_OBJECTS (line 106) | const MAHOGANY_OBJECTS: Map<number, number> = new Map<number, number>([
constant YEW_OBJECTS (line 110) | const YEW_OBJECTS: Map<number, number> = new Map<number, number>([...obj...
constant MAGIC_OBJECTS (line 115) | const MAGIC_OBJECTS: Map<number, number> = new Map<number, number>([...o...
type Ore (line 120) | enum Ore {
type Tree (line 135) | enum Tree {
function selectWeightedItem (line 149) | function selectWeightedItem(items: WeightedItem[]): string {
function getOre (line 417) | function getOre(ore: Ore): IHarvestable {
function getOreFromRock (line 421) | function getOreFromRock(id: number): IHarvestable {
function getTreeFromHealthy (line 425) | function getTreeFromHealthy(id: number): IHarvestable {
function getOreFromDepletedRock (line 429) | function getOreFromDepletedRock(id: number): IHarvestable {
function getAllOreIds (line 440) | function getAllOreIds(): number[] {
function getTreeIds (line 451) | function getTreeIds(): number[] {
FILE: src/engine/world/config/scenery-spawns.ts
function parseScenerySpawns (line 6) | function parseScenerySpawns(): LandscapeObject[] {
FILE: src/engine/world/config/travel-locations.ts
type RawTravelLocation (line 5) | interface RawTravelLocation {
type TravelLocation (line 11) | interface TravelLocation {
class TravelLocations (line 30) | class TravelLocations {
method constructor (line 33) | public constructor() {
method find (line 37) | public find(search: string): TravelLocation | null {
FILE: src/engine/world/config/widget.ts
type PlayerWidget (line 23) | interface PlayerWidget {
FILE: src/engine/world/direction.ts
type DirectionData (line 1) | interface DirectionData {
type Direction (line 11) | type Direction = 'NORTH' | 'SOUTH' | 'EAST' | 'WEST' | 'NORTHEAST' | 'NO...
constant WNES (line 62) | const WNES: Direction[] = ['WEST', 'NORTH', 'EAST', 'SOUTH'];
FILE: src/engine/world/instances.ts
type ItemSpawnConfig (line 15) | interface ItemSpawnConfig {
type InstancedChunk (line 35) | interface InstancedChunk {
class TileModifications (line 50) | class TileModifications {
method empty (line 69) | public get empty(): boolean {
class WorldInstance (line 77) | class WorldInstance {
method constructor (line 92) | public constructor(public readonly instanceId: string) {}
method spawnWorldItem (line 101) | public spawnWorldItem(item: Item | number, position: Position, config?...
method despawnWorldItem (line 165) | public despawnWorldItem(worldItem: WorldItem): void {
method respawnItem (line 197) | public async respawnItem(worldItem: WorldItem): Promise<void> {
method worldItemAdded (line 226) | public worldItemAdded(worldItem: WorldItem, excludePlayer?: Player): v...
method worldItemRemoved (line 242) | public worldItemRemoved(worldItem: WorldItem): void {
method hideGameObjectTemporarily (line 253) | public async hideGameObjectTemporarily(object: LandscapeObject, hideTi...
method spawnTemporaryGameObject (line 265) | public async spawnTemporaryGameObject(object: LandscapeObject, positio...
method toggleGameObjects (line 279) | public toggleGameObjects(newObject: LandscapeObject, oldObject: Landsc...
method replaceGameObject (line 299) | public async replaceGameObject(newObject: LandscapeObject | number, ol...
method spawnGameObject (line 327) | public spawnGameObject(object: LandscapeObject, reference: boolean = f...
method despawnGameObject (line 349) | public despawnGameObject(object: LandscapeObject): void {
method hideGameObject (line 382) | public hideGameObject(object: LandscapeObject): void {
method showGameObject (line 400) | public showGameObject(object: LandscapeObject): void {
method getInstancedChunk (line 444) | public getInstancedChunk(worldPositionOrX: Position | number, y?: numb...
method getTileModifications (line 489) | public getTileModifications(worldPosition: Position): { chunk: Instanc...
method addPlayer (line 506) | public addPlayer(player: Player): void {
method removePlayer (line 516) | public removePlayer(player: Player): void {
method clearTileIfEmpty (line 532) | private clearTileIfEmpty(worldPosition: Position): void {
FILE: src/engine/world/items/item-container.ts
type ContainerUpdateEvent (line 9) | interface ContainerUpdateEvent {
type InventoryMapType (line 33) | type InventoryMapType = (Item | null)[];
class ItemContainer (line 35) | class ItemContainer {
method constructor (line 40) | public constructor(size: number) {
method clear (line 50) | public clear(fireEvent: boolean = true): void {
method has (line 58) | public has(item: number | Item): boolean {
method amount (line 62) | public amount(item: number | Item): number {
method findAll (line 74) | public findAll(search: number | Item): number[] {
method findIndex (line 111) | public findIndex(item: number | Item): number {
method setAll (line 116) | public setAll(items: (Item | null)[], fireEvent: boolean = true): void {
method set (line 126) | public set(slot: number, item: Item | null, fireEvent: boolean = true)...
method findItemIndex (line 133) | public findItemIndex(item: Item): number {
method add (line 149) | public add(item: number | string | Item, fireEvent: boolean = true): {...
method addStacking (line 203) | public addStacking(item: number | Item, fireEvent: boolean = true): { ...
method amountInStack (line 243) | public amountInStack(slot: number): number {
method removeFirst (line 247) | public removeFirst(item: number | Item, fireEvent: boolean = true): nu...
method remove (line 262) | public remove(slot: number, fireEvent: boolean = true): Item | null {
method getFirstOpenSlot (line 272) | public getFirstOpenSlot(): number {
method hasSpace (line 276) | public hasSpace(): boolean {
method getOpenSlotCount (line 280) | public getOpenSlotCount(): number {
method getOpenSlots (line 291) | public getOpenSlots(): number[] {
method swap (line 303) | public swap(fromSlot: number, toSlot: number): void {
method weight (line 311) | public weight(): number {
method canFit (line 331) | public canFit(item: Item, everythingStacks: boolean = false): boolean {
method size (line 348) | public get size(): number {
method items (line 352) | public get items(): (Item | null)[] {
method containerUpdated (line 356) | public get containerUpdated(): Subject<ContainerUpdateEvent> {
FILE: src/engine/world/items/item.ts
type Item (line 5) | interface Item {
function itemInventoryOptions (line 10) | function itemInventoryOptions(itemId: number): string[] {
function IsParentWidget (line 19) | function IsParentWidget(widget: WidgetBase): widget is ParentWidget {
function IsStaticItemWidget (line 24) | function IsStaticItemWidget(widget: WidgetBase): widget is StaticItemWid...
function parseItemId (line 71) | function parseItemId(item: number | Item): number {
function toNote (line 75) | function toNote(item: number | Item): number {
function fromNote (line 89) | function fromNote(item: number | Item): number {
FILE: src/engine/world/items/world-item.ts
type WorldItem (line 5) | type WorldItem = {
FILE: src/engine/world/map/chunk-manager.ts
class Tile (line 7) | class Tile {
method constructor (line 12) | public constructor(
method setSettings (line 23) | public setSettings(settings: number): void {
type MapRegion (line 30) | interface MapRegion {
class ChunkManager (line 38) | class ChunkManager {
method constructor (line 42) | public constructor() {
method getTile (line 46) | public getTile(position: Position): Tile {
method registerMapRegion (line 80) | public registerMapRegion(mapRegionX: number, mapRegionY: number): void {
method registerObjects (line 119) | public registerObjects(objects: LandscapeObject[], mapFile: MapFile): ...
method getSurroundingChunks (line 143) | public getSurroundingChunks(chunk: Chunk): Chunk[] {
method getRegionIdForWorldPosition (line 163) | public getRegionIdForWorldPosition(position: Position): number {
method getChunkForWorldPosition (line 167) | public getChunkForWorldPosition(position: Position): Chunk {
method getChunk (line 171) | public getChunk(position: Position | { x: number; y: number; level: nu...
FILE: src/engine/world/map/chunk.ts
type CustomLandscapeObject (line 9) | interface CustomLandscapeObject {
type ChunkUpdateItem (line 13) | interface ChunkUpdateItem {
class Chunk (line 22) | class Chunk {
method constructor (line 29) | public constructor(position: Position) {
method registerMapRegion (line 37) | public registerMapRegion(): void {
method setFilestoreLandscapeObject (line 43) | public setFilestoreLandscapeObject(landscapeObject: LandscapeObject): ...
method addPlayer (line 48) | public addPlayer(player: Player): void {
method removePlayer (line 54) | public removePlayer(player: Player): void {
method addNpc (line 61) | public addNpc(npc: Npc): void {
method removeNpc (line 67) | public removeNpc(npc: Npc): void {
method getFilestoreLandscapeObject (line 74) | public getFilestoreLandscapeObject(objectId: number, position: Positio...
method equals (line 78) | public equals(chunk: Chunk): boolean {
method position (line 82) | public get position(): Position {
method players (line 86) | public get players(): Player[] {
method npcs (line 90) | public get npcs(): Npc[] {
method collisionMap (line 94) | public get collisionMap(): CollisionMap {
method filestoreLandscapeObjects (line 98) | public get filestoreLandscapeObjects(): Map<string, LandscapeObject> {
FILE: src/engine/world/map/collision-map.ts
class CollisionMap (line 11) | class CollisionMap {
method constructor (line 23) | public constructor(x: number, y: number, heightLevel: number, options?...
method markGameObject (line 40) | public markGameObject(landscapeObject: LandscapeObject, mark: boolean)...
method reset (line 77) | public reset(): void {
method markWall (line 85) | public markWall(x: number, y: number, type: number, rotation: number, ...
method unmarkWall (line 209) | public unmarkWall(x: number, y: number, position: number, rotation: nu...
method markSolidOccupant (line 332) | public markSolidOccupant(
method markBlocked (line 366) | public markBlocked(x: number, y: number, mark: boolean): void {
method set (line 383) | public set(x: number, y: number, flag: number): void {
method unset (line 420) | public unset(x: number, y: number, flag: number): void {
method getSiblingCollisionMap (line 449) | public getSiblingCollisionMap(offsetX: number, offsetY: number): Colli...
method insetX (line 465) | public get insetX(): number {
method insetY (line 469) | public get insetY(): number {
method adjacency (line 473) | public get adjacency(): (number | null)[][] {
FILE: src/engine/world/map/landscape-object.ts
type ModifiedLandscapeObject (line 3) | interface ModifiedLandscapeObject extends LandscapeObject {
FILE: src/engine/world/map/region.ts
type RegionType (line 8) | type RegionType = 'mapfile' | 'region' | 'chunk';
type RegionSizeMap (line 13) | type RegionSizeMap = {
method constructor (line 29) | protected constructor(rotation: number = 0) {
method templatePosition (line 35) | public get templatePosition(): Position {
type ConstructedRegion (line 40) | interface ConstructedRegion {
FILE: src/engine/world/position.ts
class Coords (line 13) | class Coords {
method equals (line 18) | static equals(a: Coords, b: Coords): boolean {
class Position (line 26) | class Position {
method constructor (line 35) | public constructor(arg0: number | Coords | Position, y?: number, level...
method clone (line 44) | public clone(): Position {
method withinInteractionDistance (line 51) | public withinInteractionDistance(target: LandscapeObject | Position, m...
method withinViewDistance (line 99) | public withinViewDistance(position: Position): boolean {
method within (line 116) | public within(min: Position, max: Position, checkPlane: boolean = true...
method move (line 124) | public move(x: number, y: number, level?: number): Position {
method equalsIgnoreLevel (line 137) | public equalsIgnoreLevel(position: Position | { x: number; y: number }...
method distanceBetween (line 145) | public distanceBetween(other: Position): number {
method fromDirection (line 149) | public fromDirection(direction: number): Position {
method step (line 153) | public step(steps: number, direction: Direction): Position {
method copy (line 157) | public copy(): Position {
method equals (line 161) | public equals(position: Position | { x: number; y: number; level: numb...
method calculateChunkLocalX (line 169) | public calculateChunkLocalX(position: Position): number {
method calculateChunkLocalY (line 173) | public calculateChunkLocalY(position: Position): number {
method setX (line 181) | public setX(x: number): Position {
method setY (line 190) | public setY(y: number): Position {
method setLevel (line 199) | public setLevel(plane: number): Position {
method coords (line 207) | public get coords(): Coords {
method chunkX (line 215) | public get chunkX(): number {
method chunkY (line 219) | public get chunkY(): number {
method chunkLocalX (line 223) | public get chunkLocalX(): number {
method chunkLocalY (line 227) | public get chunkLocalY(): number {
method localX (line 231) | public get localX(): number {
method localY (line 235) | public get localY(): number {
method x (line 239) | public get x(): number {
method x (line 243) | public set x(value: number) {
method y (line 247) | public get y(): number {
method y (line 251) | public set y(value: number) {
method level (line 255) | public get level(): number {
method level (line 259) | public set level(value: number) {
method key (line 263) | public get key(): string {
FILE: src/engine/world/skill-util/glory-boost.ts
function checkForGemBoost (line 5) | function checkForGemBoost(player: Player): number {
FILE: src/engine/world/skill-util/harvest-roll.ts
function rollBirdsNestType (line 6) | function rollBirdsNestType(): Item {
function rollGemType (line 33) | function rollGemType(): Item {
FILE: src/engine/world/skill-util/harvest-skill.ts
function canInitiateHarvest (line 15) | function canInitiateHarvest(player: Player, target: IHarvestable, skill:...
FILE: src/engine/world/sound/music.ts
type MusicPlayerMode (line 1) | enum MusicPlayerMode {
type MusicPlayerLoopMode (line 6) | enum MusicPlayerLoopMode {
type MusicTabButtonIds (line 11) | enum MusicTabButtonIds {
FILE: src/engine/world/world.ts
type QuadtreeKey (line 31) | interface QuadtreeKey {
class World (line 40) | class World {
method constructor (line 59) | public constructor() {
method startup (line 73) | public async startup(): Promise<void> {
method shutdown (line 81) | public shutdown(): void {
method enqueueTask (line 95) | public enqueueTask(task: Task): void {
method findObjectAtLocation (line 105) | public findObjectAtLocation(
method findCustomMapObject (line 187) | public findCustomMapObject(actor: Actor, objectId: number, objectPosit...
method kickAllPlayers (line 265) | public kickAllPlayers(): void {
method saveOnlinePlayers (line 280) | public saveOnlinePlayers(): void {
method playLocationSound (line 299) | public playLocationSound(position: Position, instanceId: string, sound...
method findNearbyNpcsById (line 313) | public findNearbyNpcsById(
method findNpcsByKey (line 335) | public findNpcsByKey(npcKey: string, instanceId: string = activeWorld....
method findNpcsById (line 344) | public findNpcsById(npcId: number, instanceId: string = activeWorld.gl...
method findNpcsByInstance (line 352) | public findNpcsByInstance(instanceId: string): Npc[] {
method findNearbyNpcs (line 362) | public findNearbyNpcs(position: Position, distance: number, instanceId...
method findNearbyPlayers (line 380) | public findNearbyPlayers(position: Position, distance: number, instanc...
method findActivePlayerByUsername (line 396) | public findActivePlayerByUsername(username: string): Player | null {
method spawnWorldItems (line 405) | public spawnWorldItems(player?: Player): void {
method spawnGlobalNpcs (line 423) | public spawnGlobalNpcs(): void {
method spawnNpc (line 430) | public async spawnNpc(
method spawnScenery (line 451) | public spawnScenery(): void {
method setupWorldTick (line 455) | public async setupWorldTick(): Promise<void> {
method generateFakePlayers (line 460) | public generateFakePlayers(): void {
method worldTick (line 493) | public async worldTick(): Promise<void> {
method nextTick (line 525) | public async nextTick(): Promise<void> {
method ticks (line 529) | public async ticks(count: number): Promise<void> {
method scheduleNpcRespawn (line 533) | public async scheduleNpcRespawn(npc: Npc): Promise<boolean> {
method playerSlotsRemaining (line 541) | public playerSlotsRemaining(): number {
method findPlayer (line 545) | public findPlayer(playerUsername: string): Player | null {
method playerOnline (line 550) | public playerOnline(player: Player | string): boolean {
method registerPlayer (line 569) | public registerPlayer(player: Player): boolean {
method deregisterPlayer (line 590) | public deregisterPlayer(player: Player): void {
method npcExists (line 594) | public npcExists(npc: Npc): boolean {
method registerNpc (line 603) | public async registerNpc(npc: Npc): Promise<boolean> {
method deregisterNpc (line 621) | public deregisterNpc(npc: Npc): void {
FILE: src/plugins/buttons/magic-attack.plugin.ts
function attack_target (line 10) | function attack_target(player: Player, elapsedTicks: number): boolean {
FILE: src/plugins/buttons/magic-teleports.plugin.ts
type Teleports (line 18) | enum Teleports {
function queueTeleport (line 127) | function queueTeleport(player: Player, pos: Position) {
function homeTeleport (line 154) | function homeTeleport(player: Player, elapsedTicks: number): boolean {
type MagicCost (line 182) | type MagicCost = Record<number, number>;
function hasInfinite (line 190) | function hasInfinite(player: Player, resource: number): boolean {
function expenseMagic (line 226) | function expenseMagic(player: Player, cost: MagicCost): boolean {
function genericTeleport (line 267) | function genericTeleport(player: Player, elapsedTicks: number, target: P...
FILE: src/plugins/buttons/player-emotes.plugin.ts
type Emote (line 6) | interface Emote {
type SkillcapeEmote (line 13) | interface SkillcapeEmote extends Emote {
function unlockEmote (line 100) | function unlockEmote(player: Player, emoteName: string): void {
function lockEmote (line 109) | function lockEmote(player: Player, emoteName: string): void {
function unlockEmotes (line 121) | function unlockEmotes(player: Player): void {
FILE: src/plugins/combat/combat-styles.plugin.ts
function updateCombatStyle (line 13) | function updateCombatStyle(player: Player, weaponStyle: WeaponStyle, sty...
function showUnarmed (line 23) | function showUnarmed(player: Player): void {
function setWeaponWidget (line 36) | function setWeaponWidget(player: Player, weaponStyle: WeaponStyle, itemD...
function updateCombatStyleWidget (line 44) | function updateCombatStyleWidget(player: Player): void {
FILE: src/plugins/items/herblore/clean-herb.ts
type IGrimyHerb (line 7) | interface IGrimyHerb {
FILE: src/plugins/items/move-item.plugin.ts
type WidgetDetail (line 6) | type WidgetDetail = [number, number, (player: Player) => ItemContainer];
function moveItem (line 13) | function moveItem(
FILE: src/plugins/items/rotten-potato/helpers/rotten-potato-travel.ts
constant INTRO_PAGE_COUNT (line 5) | const INTRO_PAGE_COUNT = 1;
constant ITEMS_PER_PAGE (line 6) | const ITEMS_PER_PAGE = 15;
function openTravel (line 9) | function openTravel(player: Player, page: number) {
FILE: src/plugins/items/rotten-potato/hooks/rotten-potato-eat.ts
type DialogueOption (line 4) | enum DialogueOption {
FILE: src/plugins/items/rotten-potato/hooks/rotten-potato-peel.ts
function openBank (line 10) | function openBank(player: Player) {
type DialogueOption (line 37) | enum DialogueOption {
FILE: src/plugins/items/shopping/buy-from-shop.plugin.ts
function removeCoins (line 9) | function removeCoins(inventory: ItemContainer, coinsIndex: number, cost:...
FILE: src/plugins/items/swap-items.plugin.ts
type WidgetDetail (line 6) | type WidgetDetail = [number, number, (player: Player) => ItemContainer];
function swapItems (line 15) | function swapItems(container: ItemContainer, fromSlot: number, toSlot: n...
FILE: src/plugins/music/music-regions.plugin.ts
function getByValue (line 8) | function getByValue(map, searchValue) {
FILE: src/plugins/npcs/falador/custom-guards.plugin.ts
type DialogueNpcTree (line 12) | interface DialogueNpcTree {
function startIdleDialogueTree (line 128) | function startIdleDialogueTree(npc: Npc, closeNpc: Npc, dialogueTree: Di...
function doDialogue (line 138) | function doDialogue(a: Npc, b: Npc, dialogueIndex: number, dialogueTree:...
FILE: src/plugins/objects/cows/cow.plugin.ts
function milkCow (line 12) | function milkCow(details: { objectConfig: ObjectConfig; player: Player }...
FILE: src/plugins/objects/ladders/ladder.plugin.ts
method constructor (line 37) | constructor(actor: Actor) {
method execute (line 41) | execute() {
FILE: src/plugins/objects/mill/flour-bin.plugin.ts
function flourBin (line 9) | function flourBin(details: { objectConfig: ObjectConfig; player: Player ...
FILE: src/plugins/quests/cooks-assistant-quest.plugin.ts
function dialogueIngredientQuestions (line 59) | function dialogueIngredientQuestions(): Function {
function youStillNeed (line 188) | function youStillNeed(quest: PlayerQuest): DialogueTree {
FILE: src/plugins/quests/goblin-diplomacy-tutorial/goblin-diplomacy-quest.plugin.ts
function showTabWidgetHint (line 37) | function showTabWidgetHint(
function unlockAvailableTabs (line 66) | function unlockAvailableTabs(player: Player, availableTabs?: number): vo...
function npcHint (line 84) | function npcHint(player: Player, npcKey: string | number): void {
function spawnGoblinBoi (line 125) | async function spawnGoblinBoi(player: Player, spawnPoint: 'beginning' | ...
function tutorialHandler (line 147) | async function tutorialHandler(player: Player): Promise<void> {
function spawnQuestNpcs (line 163) | function spawnQuestNpcs(player: Player): void {
constant QUEST_ID (line 205) | const QUEST_ID = 'tyn:goblin_diplomacy';
constant QUEST (line 207) | const QUEST = new Quest({
FILE: src/plugins/quests/goblin-diplomacy-tutorial/stage-handler.ts
function getAnim (line 205) | function getAnim() {
FILE: src/plugins/skills/construction/con-constants.ts
constant MAP_SIZE (line 3) | const MAP_SIZE = 13;
type RoomType (line 5) | type RoomType =
FILE: src/plugins/skills/construction/house.ts
class House (line 71) | class House {
method constructor (line 74) | public constructor() {
method copyRooms (line 90) | public copyRooms(rooms: (Room | null)[][][]): void {
class Room (line 103) | class Room extends ConstructedChunk {
method constructor (line 106) | public constructor(type: RoomType, orientation: number = 0) {
method getTemplatePosition (line 111) | public getTemplatePosition(): Position {
FILE: src/plugins/skills/crafting/spinning-wheel.plugin.ts
type Spinnable (line 13) | interface Spinnable {
type SpinnableButton (line 20) | interface SpinnableButton {
class SpinProductTask (line 78) | class SpinProductTask extends ActorTask<Player> {
method constructor (line 109) | constructor(player: Player, spinnable: Spinnable, count: number) {
method execute (line 115) | public execute(): void {
FILE: src/plugins/skills/firemaking/data.ts
constant FIREMAKING_LOGS (line 5) | const FIREMAKING_LOGS: Burnable[] = [
FILE: src/plugins/skills/firemaking/firemaking-task.ts
class FiremakingTask (line 27) | class FiremakingTask extends ActorWorldItemInteractionTask<Player> {
method constructor (line 45) | constructor(player: Player, logWorldItem: WorldItem) {
method execute (line 65) | public execute() {
function runFiremakingTask (line 125) | function runFiremakingTask(player: Player, worldItemLog: WorldItem) {
FILE: src/plugins/skills/firemaking/types.ts
type Burnable (line 6) | type Burnable = {
FILE: src/plugins/skills/fletching/fletching-types.ts
type Fletchable (line 2) | interface Fletchable {
FILE: src/plugins/skills/mining/mining-task.ts
class MiningTask (line 27) | class MiningTask extends ActorLandscapeObjectInteractionTask<Player> {
method constructor (line 40) | constructor(
method isGemRock (line 58) | private isGemRock(): boolean {
method hasChargedGlory (line 62) | private hasChargedGlory(): boolean {
method execute (line 75) | public execute(): void {
method hasMaterials (line 162) | private hasMaterials() {
method getGemMiningChance (line 166) | private getGemMiningChance(): number {
method hasLevel (line 187) | private hasLevel() {
FILE: src/plugins/skills/runecrafting/runecrafting-altar.plugin.ts
function finishEnterAltar (line 53) | function finishEnterAltar(player: Player, item: Item, altar: Runecraftin...
FILE: src/plugins/skills/runecrafting/runecrafting-constants.ts
function getEntityByAttr (line 480) | function getEntityByAttr<T>(entities: Map<any, T>, attr: string, value: ...
function getEntityIds (line 505) | function getEntityIds<T>(entities: Map<any, T>, property: keyof T): numb...
function runeMultiplier (line 516) | function runeMultiplier(runeId: number, level: number): number {
FILE: src/plugins/skills/runecrafting/runecrafting-crafting.plugin.ts
function getCombinationRuneByAltar (line 66) | function getCombinationRuneByAltar(itemId: number, objectId: number): Ru...
FILE: src/plugins/skills/runecrafting/runecrafting-types.ts
type RunecraftingRecipe (line 8) | interface RunecraftingRecipe {
type RunecraftingTiara (line 12) | interface RunecraftingTiara {
type RunecraftingTalisman (line 20) | interface RunecraftingTalisman {
type RunecraftingAltar (line 24) | interface RunecraftingAltar {
type RunecraftingRune (line 32) | interface RunecraftingRune {
type RunecraftingCombinationRune (line 41) | interface RunecraftingCombinationRune {
FILE: src/plugins/skills/skill-guides/skill-guide-config.ts
type SkillGuideConfiguration (line 5) | interface SkillGuideConfiguration {
type SkillGuide (line 19) | interface SkillGuide {
type SkillSubGuide (line 26) | interface SkillSubGuide {
function loadSkillGuideConfigurations (line 40) | async function loadSkillGuideConfigurations(path: string): Promise<Skill...
FILE: src/plugins/skills/skill-guides/skill-guides.plugin.ts
function loadGuide (line 14) | function loadGuide(player: Player, guideId: number, subGuideId: number =...
FILE: src/plugins/skills/smithing/forging-task.ts
class ForgingTask (line 14) | class ForgingTask extends ActorTask<Player> {
method constructor (line 18) | constructor(
method execute (line 26) | public execute(): void {
method hasMaterials (line 71) | private hasMaterials() {
FILE: src/plugins/skills/smithing/forging-types.ts
type Smithable (line 2) | interface Smithable {
FILE: src/plugins/skills/smithing/smelting-constants.ts
constant BRONZE (line 5) | const BRONZE: Bar = {
constant BLURITE (line 15) | const BLURITE: Bar = {
constant IRON (line 23) | const IRON: Bar = {
constant SILVER (line 30) | const SILVER: Bar = {
constant STEEL (line 37) | const STEEL: Bar = {
constant GOLD (line 47) | const GOLD: Bar = {
constant MITHRIL (line 54) | const MITHRIL: Bar = {
constant ADAMANTITE (line 64) | const ADAMANTITE: Bar = {
constant RUNEITE (line 74) | const RUNEITE: Bar = {
FILE: src/plugins/skills/smithing/smelting-task.ts
class SmeltingTask (line 16) | class SmeltingTask extends ActorTask<Player> {
method constructor (line 20) | constructor(
method execute (line 28) | public execute(): void {
method hasMaterials (line 80) | private hasMaterials() {
method hasLevel (line 95) | private hasLevel() {
FILE: src/plugins/skills/smithing/smelting-types.ts
type Bar (line 3) | interface Bar {
type Smeltable (line 11) | interface Smeltable {
FILE: src/plugins/skills/woodcutting/woodcutting-task.ts
class WoodcuttingTask (line 18) | class WoodcuttingTask extends ActorLandscapeObjectInteractionTask<Player> {
method constructor (line 37) | constructor(player: Player, landscapeObject: LandscapeObject, sizeX: n...
method getItemToAdd (line 52) | private getItemToAdd(): string | null {
method execute (line 80) | public execute(): void {
method onStop (line 187) | public onStop(): void {
function runWoodcuttingTask (line 194) | function runWoodcuttingTask(player: Player, landscapeObject: LandscapeOb...
FILE: src/server/game/game-server-config.ts
type GameServerConfig (line 1) | interface GameServerConfig {
FILE: src/server/game/game-server-connection.ts
class GameServerConnection (line 8) | class GameServerConnection {
method constructor (line 13) | public constructor(
method decodeMessage (line 18) | public decodeMessage(buffer?: ByteBuffer): void | Promise<void> {
method connectionDestroyed (line 111) | public connectionDestroyed(): void {
method closeSocket (line 116) | public closeSocket(): void {
FILE: src/server/game/game-server.ts
function setupConfig (line 26) | async function setupConfig(): Promise<boolean> {
function launchGameServer (line 45) | async function launchGameServer(): Promise<void> {
FILE: src/server/gateway/gateway-server.ts
type ServerType (line 17) | type ServerType = 'game_server' | 'login_server' | 'update_server';
class GatewayServer (line 19) | class GatewayServer extends SocketServer {
method constructor (line 26) | public constructor(private readonly clientSocket: Socket) {
method initialHandshake (line 30) | public initialHandshake(buffer: ByteBuffer): boolean {
method decodeMessage (line 85) | public decodeMessage(buffer: ByteBuffer): void | Promise<void> {
method connectionDestroyed (line 95) | public connectionDestroyed(): void {
method parseLoginServerResponse (line 101) | private async parseLoginServerResponse(buffer: ByteBuffer): Promise<vo...
method createPlayer (line 143) | private async createPlayer(
Condensed preview — 488 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,502K chars).
[
{
"path": ".dockerignore",
"chars": 38,
"preview": "node_modules\nnpm-debug.log\n.gitignore\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.md",
"chars": 541,
"preview": "---\nname: Bug Report\nabout: Create a report to help us improve\ntitle: \"[BUG]\"\nlabels: bug\nassignees: ''\n\n---\n\n**Describe"
},
{
"path": ".github/ISSUE_TEMPLATE/content-feature-plugin.md",
"chars": 601,
"preview": "---\nname: Content Feature/Plugin\nabout: New game content features or plugin requests\ntitle: \"[CONTENT]\"\nlabels: enhancem"
},
{
"path": ".github/ISSUE_TEMPLATE/game-engine-feature.md",
"chars": 562,
"preview": "---\nname: Game Engine Feature\nabout: New game engine or content API features\ntitle: \"[ENGINE] \"\nlabels: needs workshoppi"
},
{
"path": ".github/workflows/build.yml",
"chars": 878,
"preview": "name: Check & Build Project\n\non:\n pull_request:\n branches: [ master, develop, feature/** ]\n push:\n b"
},
{
"path": ".gitignore",
"chars": 314,
"preview": "node_modules\n.DS_Store\n/dist\n/data/dump\n/data/houses\n/data/saves/*.json\n/config/server-config.json\nserver-config.yaml\n\n#"
},
{
"path": ".swcrc",
"chars": 543,
"preview": "{\n \"$schema\": \"https://swc.rs/schema.json\",\n \"exclude\": \"node_modules/\",\n \"sourceMaps\": true,\n \"module\": {\n "
},
{
"path": ".vscode/settings.json",
"chars": 145,
"preview": "{\n \"editor.tabSize\": 4,\n \"files.trimTrailingWhitespace\": true,\n \"files.trimFinalNewlines\": true,\n \"files.ins"
},
{
"path": "CONTRIBUTING.md",
"chars": 2794,
"preview": "# Contributing to RuneJS\n\nRuneJS was created with the intention of utilizing JavaScript/TypeScript and Node's innovative"
},
{
"path": "Dockerfile",
"chars": 272,
"preview": "FROM node:24\nWORKDIR /usr/src/app\nCOPY package.json ./\nCOPY package-lock.json ./\n\nRUN apt update\nRUN apt install -y libs"
},
{
"path": "FEATURES.md",
"chars": 3515,
"preview": "[](https:"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 2846,
"preview": "[](https:"
},
{
"path": "biome.json",
"chars": 2392,
"preview": "{\n \"$schema\": \"https://biomejs.dev/schemas/1.9.4/schema.json\",\n \"vcs\": {\n \"enabled\": true,\n \"clientK"
},
{
"path": "cache/file-names.properties",
"chars": 33294,
"preview": "-1863637185=miscgraphics,4\n-1863637184=miscgraphics,5\n-1863637187=miscgraphics,2\n-1863637186=miscgraphics,3\n-1863637181="
},
{
"path": "config/file-names.properties",
"chars": 33294,
"preview": "-1863637185=miscgraphics,4\n-1863637184=miscgraphics,5\n-1863637187=miscgraphics,2\n-1863637186=miscgraphics,3\n-1863637181="
},
{
"path": "config/server-config.example.json",
"chars": 1162,
"preview": "{\n \"configDir\": \"./config\",\n \"cacheDir\": \"./cache\",\n\n \"host\": \"0.0.0.0\",\n \"port\": 43594,\n\n \"updateServerH"
},
{
"path": "data/config/combat-styles.json",
"chars": 1558,
"preview": "{\n \"unarmed\": [\n {\n \"type\": \"crush\",\n \"exp\": \"attack\",\n \"anim\": \"punch\",\n "
},
{
"path": "data/config/examine-item-data.yaml",
"chars": 332952,
"preview": "- id: 0 # Dwarf remains\n examine: \"The body of a Dwarf savaged by Goblins.\"\n- id: 1 # Toolkit\n examine: \"Good for repa"
},
{
"path": "data/config/item-spawns/lumbridge/lumbridge.json",
"chars": 612,
"preview": "[\n {\n \"item\": \"rs:coins\",\n \"amount\": 25,\n \"spawn_x\": 3211,\n \"spawn_y\": 3240,\n \"ins"
},
{
"path": "data/config/items/barrows/dharoks.json",
"chars": 1448,
"preview": "{\n \"rs:dharoks_axe\": {\n \"tradable\": true,\n \"equippable\": true,\n \"equipment_data\": {\n "
},
{
"path": "data/config/items/bolts.json",
"chars": 713,
"preview": "{\n \"rs:bronze_bolt\": {\n \"game_id\": 877\n },\n \"rs:opal_bolt\": {\n \"game_id\": 879\n },\n \"rs:blur"
},
{
"path": "data/config/items/bones.json",
"chars": 4697,
"preview": "{\n \"rs:bones\": {\n \"game_id\": 526,\n \"tradable\": true,\n \"weight\": 0.5,\n \"metadata\": {\n "
},
{
"path": "data/config/items/containers.json",
"chars": 999,
"preview": "{\n \"rs:pot\": {\n \"game_id\": 1931,\n \"examine\": \"This pot is empty.\",\n \"tradable\": true,\n \"w"
},
{
"path": "data/config/items/currency.json",
"chars": 77,
"preview": "{\n \"rs:coins\": {\n \"game_id\": 995,\n \"tradable\": true\n }\n}\n"
},
{
"path": "data/config/items/equipment/amulets.json",
"chars": 1544,
"preview": "{\n \"rs:amulet_of_glory\": {\n \"game_id\": 1704,\n \"examine\": \"A very powerful dragonstone amulet.\",\n "
},
{
"path": "data/config/items/equipment/axes.json",
"chars": 746,
"preview": "{\n \"rs:dharoks_greataxe\": {\n \"game_id\": 4718,\n \"examine\": \"Dharok the Wretched's greataxe.\",\n \"t"
},
{
"path": "data/config/items/equipment/bows.json",
"chars": 651,
"preview": "{\n \"rs:shortbow\": {\n \"game_id\": 50\n },\n \"rs:longbow\": {\n \"game_id\": 48\n },\n \"rs:oak_shortbo"
},
{
"path": "data/config/items/equipment/capes.json",
"chars": 476,
"preview": "{\n \"rs:cape_of_legends\": {\n \"game_id\": 1052,\n \"examine\": \"The cape worn by members of the Legends Guild"
},
{
"path": "data/config/items/equipment/daggers.json",
"chars": 3601,
"preview": "{\n \"rs:iron_dagger\": {\n \"game_id\": 1203,\n \"examine\": \"Short but pointy.\",\n \"tradable\": true,\n "
},
{
"path": "data/config/items/equipment/darts.json",
"chars": 324,
"preview": "{\n \"rs:bronze_dart\": {\n \"game_id\": 806\n },\n \"rs:iron_dart\": {\n \"game_id\": 807\n },\n \"rs:stee"
},
{
"path": "data/config/items/equipment/halberd.json",
"chars": 7173,
"preview": "{\n \"rs:iron_halberd\": {\n \"game_id\": 3192,\n \"examine\": \"Short but pointy.\",\n \"tradable\": true,\n "
},
{
"path": "data/config/items/equipment/hammers.json",
"chars": 226,
"preview": "{\n \"rs:torags_hammers\": {\n \"game_id\": 4747,\n \"examine\": \"Torag the Corrupted's twin hammers.\",\n "
},
{
"path": "data/config/items/equipment/hatchets.json",
"chars": 3772,
"preview": "{\n \"presets\": {\n \"rs:woodcutting_axe\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/hats.json",
"chars": 551,
"preview": "{\n \"rs:wizard_hat_(blue)\": {\n \"game_id\": 579,\n \"weight\": 0.453,\n \"equipment_data\": {\n "
},
{
"path": "data/config/items/equipment/javelins.json",
"chars": 336,
"preview": "{\n \"rs:bronze_javelin\": {\n \"game_id\": 52\n },\n \"rs:iron_javelin\": {\n \"game_id\": 52\n },\n \"rs:"
},
{
"path": "data/config/items/equipment/leather-armour.json",
"chars": 4716,
"preview": "{\n \"rs:leather_cowl\": {\n \"game_id\": 1167,\n \"examine\": \"Better than no armour!\",\n \"tradable\": tru"
},
{
"path": "data/config/items/equipment/longswords.json",
"chars": 964,
"preview": "{\n \"rs:dragon_longsword\": {\n \"game_id\": 1305,\n \"examine\": \"A very powerful sword.\",\n \"tradable\":"
},
{
"path": "data/config/items/equipment/mauls.json",
"chars": 735,
"preview": "{\n \"rs:granite_maul\": {\n \"game_id\": 4153,\n \"examine\": \"Simplicity is the best weapon.\",\n \"tradab"
},
{
"path": "data/config/items/equipment/pickaxes.json",
"chars": 3149,
"preview": "{\n \"presets\": {\n \"rs:pickaxe_base\": {\n \"examine\": \"Used for mining.\",\n \"tradable\": true,"
},
{
"path": "data/config/items/equipment/shortswords.json",
"chars": 742,
"preview": "{\n \"rs:toktz_xil_ak\": {\n \"game_id\": 6523,\n \"examine\": \"A razor sharp sword of obsidian.\",\n \"trad"
},
{
"path": "data/config/items/equipment/skillscapes.json",
"chars": 17896,
"preview": "{\n \"presets\": {\n \"rs:skillcape\": {\n \"tradable\": false,\n \"weight\": 0.453,\n \"eq"
},
{
"path": "data/config/items/equipment/slayer.json",
"chars": 11409,
"preview": "{\n \"rs:black_mask\": {\n \"game_id\": 8921,\n \"examine\": \"An inert-seeming cave horror mask.\",\n \"trad"
},
{
"path": "data/config/items/equipment/spears.json",
"chars": 170,
"preview": "{\n \"rs:guthans_warspear\": {\n \"game_id\": 4726,\n \"tradable\": true,\n \"notable\": true,\n \"stac"
},
{
"path": "data/config/items/equipment/staffs.json",
"chars": 4899,
"preview": "{\n \"presets\": {\n \"rs:staff_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/adamant-armour.json",
"chars": 1553,
"preview": "{\n \"presets\": {\n \"rs:adamant_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/black-armour.json",
"chars": 1550,
"preview": "{\n \"presets\": {\n \"rs:black_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/bronze-armour.json",
"chars": 1644,
"preview": "{\n \"presets\": {\n \"rs:bronze_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/bronze-weapons.json",
"chars": 1292,
"preview": "{\n \"presets\": {\n \"rs:bronze_weapon_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/iron-armour.json",
"chars": 1131,
"preview": "{\n \"rs:iron_platelegs\": {\n \"game_id\": 1067,\n \"examine\": \"These look pretty heavy.\",\n \"weight\": 9"
},
{
"path": "data/config/items/equipment/standard-metals/iron-weapons.json",
"chars": 702,
"preview": "{\n \"rs:iron_battleaxe\": {\n \"game_id\": 1363,\n \"examine\": \"A vicious looking axe.\",\n \"tradable\": t"
},
{
"path": "data/config/items/equipment/standard-metals/mithril-armour.json",
"chars": 1442,
"preview": "{\n \"presets\": {\n \"rs:mithril_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/mithril-weapons.json",
"chars": 831,
"preview": "{\n \"rs:mithril_battleaxe\": {\n \"game_id\": 1369,\n \"examine\": \"A vicious looking axe.\",\n \"tradable\""
},
{
"path": "data/config/items/equipment/standard-metals/rune-armour.json",
"chars": 6866,
"preview": "{\n \"presets\": {\n \"rs:rune_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/rune-god-armour.json",
"chars": 9545,
"preview": "{\n \"presets\": {\n \"rs:rune_god_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/steel-armour.json",
"chars": 1431,
"preview": "{\n \"presets\": {\n \"rs:steel_armour_base\": {\n \"tradable\": true,\n \"equippable\": true,\n "
},
{
"path": "data/config/items/equipment/standard-metals/steel-weapons.json",
"chars": 828,
"preview": "{\n \"rs:steel_battleaxe\": {\n \"game_id\": 1365,\n \"examine\": \"A vicious looking axe.\",\n \"tradable\": "
},
{
"path": "data/config/items/equipment/standard-metals/white-armour.json",
"chars": 758,
"preview": "{\n \"rs:white_full_helm\": {\n \"game_id\": 6623,\n \"tradable\": true,\n \"weight\": 2.721,\n \"equip"
},
{
"path": "data/config/items/equipment/tiaras.json",
"chars": 3156,
"preview": "{\n \"rs:air_tiara\": {\n \"game_id\": 5527,\n \"tradable\": true,\n \"weight\": 1,\n \"equippable\": tr"
},
{
"path": "data/config/items/equipment/training.json",
"chars": 1444,
"preview": "{\n \"rs:training_sword\": {\n \"game_id\": 9703,\n \"examine\": \"Basic training sword.\",\n \"tradable\": fa"
},
{
"path": "data/config/items/equipment/whips.json",
"chars": 2066,
"preview": "{\n \"rs:abyssal_whip\": {\n \"game_id\": 4151,\n \"examine\": \"A weapon from the Abyss.\",\n \"tradable\": t"
},
{
"path": "data/config/items/food.json",
"chars": 29756,
"preview": "{\n \"presets\": {\n \"rs:food\": {\n \"tradable\": true,\n \"consumable\": true,\n \"metad"
},
{
"path": "data/config/items/holiday/partyhats.json",
"chars": 833,
"preview": "{\n \"presets\": {\n \"rs:partyhat\": {\n \"tradable\": true,\n \"weight\": 0.056,\n \"equi"
},
{
"path": "data/config/items/icons.json",
"chars": 915,
"preview": "{\n \"rs:gnome_stronghold_agility_course\": {\n \"game_id\": 2150\n },\n \"rs:gnomeball_game\": {\n \"game_id"
},
{
"path": "data/config/items/logs.json",
"chars": 1720,
"preview": "{\n \"presets\": {\n \"rs:log\": {\n \"tradable\": true,\n \"weight\": 2\n }\n },\n\n \"rs:l"
},
{
"path": "data/config/items/other.json",
"chars": 195,
"preview": "{\n \"rs:dwarf_remains\": {\n \"game_id\": 0,\n \"tradable\": false\n },\n \"rs:rotten_potato\": {\n \"ga"
},
{
"path": "data/config/items/quests/lost-city.json",
"chars": 196,
"preview": "{\n \"rs:dramen_branch\": {\n \"game_id\": 771,\n \"examine\": \"A limb of the fabled Dramen tree.\",\n \"tra"
},
{
"path": "data/config/items/quests/witchs-potion.json",
"chars": 107,
"preview": "{\n \"rs:rats_tail\": {\n \"game_id\": 300,\n \"tradable\": false,\n \"weight\": 0.003\n }\n}\n"
},
{
"path": "data/config/items/skills/artisan-tools.json",
"chars": 900,
"preview": "{\n \"rs:shears\": {\n \"game_id\": 5603,\n \"examine\": \"For shearing sheep.\",\n \"tradable\": true,\n "
},
{
"path": "data/config/items/skills/baking.json",
"chars": 288,
"preview": "{\n \"rs:cake_tin\": {\n \"game_id\": 1887,\n \"examine\": \"Useful for baking cakes.\",\n \"tradable\": true,"
},
{
"path": "data/config/items/skills/cooking.json",
"chars": 168,
"preview": "{\n \"rs:raw_rat_meat\": {\n \"game_id\": 2134\n },\n \"rs:cooked_meat\": {\n \"game_id\": 2142\n },\n \"rs"
},
{
"path": "data/config/items/skills/crafting/gems.json",
"chars": 1678,
"preview": "{\n \"presets\": {\n \"rs:uncut_gem_base\": {\n \"examine\": \"This would be worth more cut.\",\n \"w"
},
{
"path": "data/config/items/skills/crafting/jewelery-moulds.json",
"chars": 978,
"preview": "{\n \"presets\": {\n \"rs:mould_base\": {\n \"weight\": 0.453,\n \"tradable\": true\n }\n },"
},
{
"path": "data/config/items/skills/firemaking.json",
"chars": 1046,
"preview": "{\n \"rs:tinderbox\": {\n \"game_id\": 590,\n \"tradable\": true,\n \"weight\": 0.035\n },\n \"rs:normal_"
},
{
"path": "data/config/items/skills/fishing.json",
"chars": 457,
"preview": "{\n \"rs:small_fishing_net\": {\n \"game_id\": 303\n },\n \"rs:big_fishing_net\": {\n \"game_id\": 305\n },\n"
},
{
"path": "data/config/items/skills/fletching/arrows.json",
"chars": 438,
"preview": "{\n \"rs:arrow_shaft\": {\n \"game_id\": 52\n },\n \"rs:bronze_arrow\": {\n \"game_id\": 882\n },\n \"rs:ir"
},
{
"path": "data/config/items/skills/fletching/bolts.json",
"chars": 713,
"preview": "{\n \"rs:bronze_bolt\": {\n \"game_id\": 877\n },\n \"rs:opal_bolt\": {\n \"game_id\": 879\n },\n \"rs:blur"
},
{
"path": "data/config/items/skills/herblore/herbs.json",
"chars": 3003,
"preview": "{\n \"presets\": {\n \"rs:grimy_herb_base\": {\n \"examine\": \"It needs cleaning.\",\n \"weight\": 0."
},
{
"path": "data/config/items/skills/herblore/ingredients.json",
"chars": 57,
"preview": "{\n \"rs:eye_of_newt\": {\n \"game_id\": 221\n }\n}\n"
},
{
"path": "data/config/items/skills/herblore/tools.json",
"chars": 176,
"preview": "{\n \"rs:pestle_and_mortar\": {\n \"game_id\": 233,\n \"examine\": \"I can grind things for potions in this.\",\n "
},
{
"path": "data/config/items/skills/herblore.json",
"chars": 2972,
"preview": "{\n \"rs:herblore_attack_potion\": {\n \"game_id\": 221\n },\n \"rs:herblore_anti_poison_potion\": {\n \"game"
},
{
"path": "data/config/items/skills/mining.json",
"chars": 3232,
"preview": "{\n \"rs:rune_essence\": {\n \"game_id\": 1436,\n \"examine\": \"An unimbued rune.\",\n \"tradable\": true,\n "
},
{
"path": "data/config/items/skills/prayer.json",
"chars": 129,
"preview": "{\n \"rs:prayer_guide\": {\n \"game_id\": 1714\n },\n \"rs:herblore_anti_poison_potion\": {\n \"game_id\": 235"
},
{
"path": "data/config/items/skills/runecrafting.json",
"chars": 11174,
"preview": "{\n \"rs:binding_necklace\": {\n \"game_id\": 5521,\n \"tradable\": true,\n \"weight\": 0.01,\n \"equip"
},
{
"path": "data/config/music/musicRegions.json",
"chars": 67212,
"preview": "{\n \"musicRegions\": [\n {\n \"songId\": 363,\n \"songName\": \"7th Realm\",\n \"musicTabB"
},
{
"path": "data/config/npc-spawns/alkharid/alkharid-general.json",
"chars": 650,
"preview": "[\n {\n \"npc\": \"rs:alkharid_gem_trader\",\n \"spawn_x\": 3288,\n \"spawn_y\": 3212,\n \"movement_rad"
},
{
"path": "data/config/npc-spawns/ardougne/bankers.json",
"chars": 798,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2657,\n \"spawn_y\": 3286,\n \"movement_radius\": 0\n }"
},
{
"path": "data/config/npc-spawns/ardougne/guards.json",
"chars": 1322,
"preview": "[\n {\n \"npc\": \"rs:guard:2\",\n \"spawn_x\": 2635,\n \"spawn_y\": 3339,\n \"movement_radius\": 5,\n "
},
{
"path": "data/config/npc-spawns/ardougne/market.json",
"chars": 2086,
"preview": "[\n {\n \"npc\": \"rs:ardougne_baker:0\",\n \"spawn_x\": 2654,\n \"spawn_y\": 3311,\n \"movement_radius"
},
{
"path": "data/config/npc-spawns/camelot/bankers.json",
"chars": 583,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2807,\n \"spawn_y\": 3443,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/canifis/bankers.json",
"chars": 579,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 3514,\n \"spawn_y\": 3482,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/catherby/bankers.json",
"chars": 873,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2729,\n \"spawn_y\": 3495,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/draynor/bankers.json",
"chars": 435,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 3090,\n \"spawn_y\": 3242,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/edgeville/bankers.json",
"chars": 581,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 3096,\n \"spawn_y\": 3491,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/falador/bankers.json",
"chars": 1598,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2947,\n \"spawn_y\": 3366,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/falador/guards.json",
"chars": 441,
"preview": "[\n {\n \"npc\": \"rs:guard:0\",\n \"spawn_x\": 2967,\n \"spawn_y\": 3388,\n \"movement_radius\": 5,\n "
},
{
"path": "data/config/npc-spawns/keldagrim/bankers.json",
"chars": 295,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2836,\n \"spawn_y\": 10205,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/lumbridge/bankers.json",
"chars": 345,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 3209,\n \"spawn_y\": 3222,\n \"spawn_level\": 2,\n "
},
{
"path": "data/config/npc-spawns/lumbridge/lumbridge-general.json",
"chars": 1019,
"preview": "[\n {\n \"npc\": \"rs:hans\",\n \"spawn_x\": 3222,\n \"spawn_y\": 3222,\n \"movement_radius\": 8\n },\n"
},
{
"path": "data/config/npc-spawns/lumbridge/lumbridge-goblins.json",
"chars": 1443,
"preview": "[\n {\n \"npc\": \"rs:goblin\",\n \"spawn_x\": 3263,\n \"spawn_y\": 3232,\n \"movement_radius\": 8\n }"
},
{
"path": "data/config/npc-spawns/lumbridge/lumbridge-sheep.json",
"chars": 735,
"preview": "[\n {\n \"npc\": \"rs:spy_penguin_sheep\",\n \"spawn_x\": 3197,\n \"spawn_y\": 3262,\n \"movement_radiu"
},
{
"path": "data/config/npc-spawns/magebank/bankers.json",
"chars": 147,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2534,\n \"spawn_y\": 4713,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/nardah/bankers.json",
"chars": 579,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 3425,\n \"spawn_y\": 2889,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/pestcontrol/bankers.json",
"chars": 583,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2665,\n \"spawn_y\": 2651,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/portsarim/port-sarim-general.json",
"chars": 470,
"preview": "[\n {\n \"npc\": \"rs:betty\",\n \"spawn_x\": 3012,\n \"spawn_y\": 3259,\n \"movement_radius\": 5\n },"
},
{
"path": "data/config/npc-spawns/rimmington/rimmington.json",
"chars": 843,
"preview": "[\n {\n \"npc\": \"rs:hetty\",\n \"spawn_x\": 2968,\n \"spawn_y\": 3205,\n \"spawn_level\": 0,\n \""
},
{
"path": "data/config/npc-spawns/shilovillage/bankers.json",
"chars": 147,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2852,\n \"spawn_y\": 2955,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/varrock/bankers.json",
"chars": 1447,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 3252,\n \"spawn_y\": 3418,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npc-spawns/varrock/blue-moon-inn.json",
"chars": 656,
"preview": "[\n {\n \"npc\": \"rs:barbarian_woman\",\n \"spawn_x\": 3224,\n \"spawn_y\": 3402,\n \"movement_radius\""
},
{
"path": "data/config/npc-spawns/varrock/varrock-general.json",
"chars": 1165,
"preview": "[\n {\n \"npc\": \"rs:varrock_zaff\",\n \"spawn_x\": 3203,\n \"spawn_y\": 3432,\n \"movement_radius\": 2"
},
{
"path": "data/config/npc-spawns/yanille/bankers.json",
"chars": 435,
"preview": "[\n {\n \"npc\": \"rs:banker\",\n \"spawn_x\": 2615,\n \"spawn_y\": 3091,\n \"movement_radius\": 0,\n "
},
{
"path": "data/config/npcs/alkharid.json",
"chars": 295,
"preview": "{\n \"rs:alkharid_gem_trader\": {\n \"game_id\": 540\n },\n \"rs:alkharid_dommik\": {\n \"game_id\": 545\n }"
},
{
"path": "data/config/npcs/ardougne.json",
"chars": 806,
"preview": "{\n \"rs:ardougne_baker\": {\n \"variations\": [\n {\n \"suffix\": 0,\n \"game_id"
},
{
"path": "data/config/npcs/bankers.json",
"chars": 52,
"preview": "{\n \"rs:banker\": {\n \"game_id\": 494\n }\n}\n"
},
{
"path": "data/config/npcs/barbarians.json",
"chars": 60,
"preview": "{\n \"rs:barbarian_woman\": {\n \"game_id\": 17\n }\n}\n"
},
{
"path": "data/config/npcs/general.json",
"chars": 526,
"preview": "{\n \"rs:rat\": {\n \"game_id\": 47,\n \"drop_table\": [\n {\n \"itemKey\": \"rs:rats_tail\""
},
{
"path": "data/config/npcs/generic-humans.json",
"chars": 1100,
"preview": "{\n \"presets\": {\n \"rs:human_male\": {\n \"killable\": true,\n \"respawn_time\": 3,\n \""
},
{
"path": "data/config/npcs/goblins.json",
"chars": 2158,
"preview": "{\n \"presets\": {\n \"rs:goblin_base_l2\": {\n \"killable\": true,\n \"respawn_time\": 3,\n "
},
{
"path": "data/config/npcs/guards.json",
"chars": 769,
"preview": "{\n \"rs:guard\": {\n \"variations\": [\n {\n \"suffix\": 0,\n \"game_id\": 9\n "
},
{
"path": "data/config/npcs/lumbridge.json",
"chars": 552,
"preview": "{\n \"rs:hans\": {\n \"game_id\": 0,\n \"skills\": {\n \"hitpoints\": 10,\n \"herblore\": 99\n "
},
{
"path": "data/config/npcs/port-sarim.json",
"chars": 539,
"preview": "{\n \"rs:betty\": {\n \"game_id\": 583\n },\n \"rs:Giant_rat\": {\n \"game_id\": 86,\n \"drop_table\": [\n "
},
{
"path": "data/config/npcs/rimmington.json",
"chars": 51,
"preview": "{\n \"rs:hetty\": {\n \"game_id\": 307\n }\n}\n"
},
{
"path": "data/config/npcs/sheep.json",
"chars": 164,
"preview": "{\n \"rs:spy_penguin_sheep\": {\n \"game_id\": 3579\n },\n \"rs:sheep\": {\n \"game_id\": 43\n },\n \"rs:na"
},
{
"path": "data/config/npcs/varrock.json",
"chars": 767,
"preview": "{\n \"rs:varrock_zaff\": {\n \"game_id\": 546\n },\n \"rs:blue_moon_inn_bartender\": {\n \"game_id\": 734\n "
},
{
"path": "data/config/scenery-spawns.yaml",
"chars": 0,
"preview": ""
},
{
"path": "data/config/shops/alkharid/alkharid-gem-trader.json",
"chars": 1264,
"preview": "{\n \"rs:alkharid_gem_trader\": {\n \"name\": \"Gem Trader\",\n \"shop_sell_rate\": 1.0,\n \"shop_buy_rate\": "
},
{
"path": "data/config/shops/alkharid/dommiks-crafting-store.json",
"chars": 1402,
"preview": "{\n \"rs:dommiks_crafting_store\": {\n \"name\": \"Dommik's Crafting Store\",\n \"shop_sell_rate\": 1.0,\n \""
},
{
"path": "data/config/shops/alkharid/louies-armored-legs.json",
"chars": 1047,
"preview": "{\n \"rs:louies_armored_legs\": {\n \"name\": \"Louie's Armoured Legs Bazaar\",\n \"shop_sell_rate\": 1.0,\n "
},
{
"path": "data/config/shops/alkharid/ranaels-skirt-store.json",
"chars": 1051,
"preview": "{\n \"rs:ranaels_skirt_store\": {\n \"name\": \"Ranael's Super Skirt Store\",\n \"shop_sell_rate\": 1.0,\n \""
},
{
"path": "data/config/shops/lumbridge/bobs-axes.json",
"chars": 1153,
"preview": "{\n \"rs:lumbridge_bobs_axes\": {\n \"name\": \"Bob's Brilliant Axes.\",\n \"shop_sell_rate\": 1.0,\n \"shop_"
},
{
"path": "data/config/shops/lumbridge/lumbridge-general-store.json",
"chars": 1650,
"preview": "{\n \"rs:lumbridge_general_store\": {\n \"name\": \"Lumbridge General Store\",\n \"general_store\": true,\n "
},
{
"path": "data/config/shops/portsarim/bettys-magic-emporium.json",
"chars": 1696,
"preview": "{\n \"rs:bettys_magic_emporium\": {\n \"name\": \"Betty's Magic Emporium\",\n \"shop_sell_rate\": 1.0,\n \"sh"
},
{
"path": "data/config/shops/shilo-village/oblis-general-store.json",
"chars": 3278,
"preview": "{\n \"rs:oblis-general-store\": {\n \"name\": \"Obli's General Store\",\n \"general_store\": true,\n \"shop_s"
},
{
"path": "data/config/shops/varrock/zaffs-staffs.json",
"chars": 1152,
"preview": "{\n \"rs:zaffs_superior_staffs\": {\n \"name\": \"Zaff's Superior Staffs\",\n \"shop_sell_rate\": 1.0,\n \"sh"
},
{
"path": "data/config/travel-locations-data.yaml",
"chars": 13153,
"preview": "- name: Abandoned Mine\n x: 3441\n y: 3236\n z: 0\n- name: Agility Arena\n x: 2809\n y: 3191\n z: 0\n- name: Agility Pyram"
},
{
"path": "data/config/widgets.json",
"chars": 2632,
"preview": "{\n \"characterDesign\": 269,\n \"furnace\": {\n \"widgetId\": 311,\n \"slots\": {\n \"slot0\": {\n "
},
{
"path": "data/config/xteas/435.json",
"chars": 101852,
"preview": "[\n {\n \"archive\": 5,\n \"group\": 1,\n \"name_hash\": -1153472937,\n \"name\": \"l40_55\",\n \"mapsquare\": 10295,\n "
},
{
"path": "data/saves/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "docker-compose.yml",
"chars": 287,
"preview": "services:\n runejs_game_server:\n build:\n context: .\n dockerfile: Dockerfile\n volumes:\n - ./data:/us"
},
{
"path": "jest.config.ts",
"chars": 6906,
"preview": "/*\n * For a detailed explanation regarding each configuration property and type check, visit:\n * https://jestjs.io/docs/"
},
{
"path": "nodemon.json",
"chars": 100,
"preview": "{\n \"verbose\": true,\n \"ignore\": [\"src/plugins/\"],\n \"watch\": [\"src/\"],\n \"ext\": \"ts, js\"\n}\n"
},
{
"path": "package.json",
"chars": 3258,
"preview": "{\n \"name\": \"@runejs/server\",\n \"version\": \"1.0.0-alpha.3\",\n \"description\": \"A RuneScape game server emulator wri"
},
{
"path": "src/engine/action/action-pipeline.ts",
"chars": 5847,
"preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport { TaskExecutor } from '@engine/action/hook/tas"
},
{
"path": "src/engine/action/hook/action-hook.ts",
"chars": 2034,
"preview": "import type { ActionStrength, ActionType } from '@engine/action/action-pipeline';\nimport type { HookTask } from '@engine"
},
{
"path": "src/engine/action/hook/hook-filters.test.ts",
"chars": 906,
"preview": "import { advancedNumberHookFilter } from './hook-filters';\n\ndescribe('action/hook hook filters', () => {\n describe('a"
},
{
"path": "src/engine/action/hook/hook-filters.ts",
"chars": 2789,
"preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport type { Player } from '@engine/world/actor/play"
},
{
"path": "src/engine/action/hook/task.ts",
"chars": 5330,
"preview": "import type { Subscription } from 'rxjs';\nimport { lastValueFrom, timer } from 'rxjs';\nimport { v4 } from 'uuid';\n\nimpor"
},
{
"path": "src/engine/action/loader.ts",
"chars": 1504,
"preview": "import { join } from 'path';\nimport type { ActionPipe } from '@engine/action/action-pipeline';\nimport { ActionPipeline }"
},
{
"path": "src/engine/action/pipe/button.action.ts",
"chars": 2598,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport { type ActionHook, getActionHook"
},
{
"path": "src/engine/action/pipe/equipment-change.action.ts",
"chars": 3396,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/item-interaction.action.ts",
"chars": 4957,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/item-on-item.action.ts",
"chars": 3461,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/item-on-npc.action.ts",
"chars": 4050,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/item-on-object.action.ts",
"chars": 4602,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/item-on-player.action.ts",
"chars": 3781,
"preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
},
{
"path": "src/engine/action/pipe/item-on-world-item.action.ts",
"chars": 3799,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/item-swap.action.ts",
"chars": 2315,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/magic-on-npc.action.ts",
"chars": 2239,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/move-item.action.ts",
"chars": 2285,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/npc-init.action.ts",
"chars": 1461,
"preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
},
{
"path": "src/engine/action/pipe/npc-interaction.action.ts",
"chars": 3703,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/object-interaction.action.ts",
"chars": 3990,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/player-command.action.ts",
"chars": 4703,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/player-init.action.ts",
"chars": 1272,
"preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
},
{
"path": "src/engine/action/pipe/player-interaction.action.ts",
"chars": 2927,
"preview": "import type { RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hoo"
},
{
"path": "src/engine/action/pipe/prayer.action.ts",
"chars": 2163,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/region-change.action.ts",
"chars": 5924,
"preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
},
{
"path": "src/engine/action/pipe/spawned-item-interaction.action.ts",
"chars": 3770,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/action/pipe/task/queueable-task.ts",
"chars": 3554,
"preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport { ActorTask } from '@engine/task/impl/actor-ta"
},
{
"path": "src/engine/action/pipe/task/walk-to-actor-plugin-task.ts",
"chars": 3197,
"preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport type { ItemOnNpcAction } from '@engine/action/"
},
{
"path": "src/engine/action/pipe/task/walk-to-item-plugin-task.ts",
"chars": 2007,
"preview": "import type { SpawnedItemInteractionHook } from '@engine/action/pipe/spawned-item-interaction.action';\nimport type { Ite"
},
{
"path": "src/engine/action/pipe/task/walk-to-object-plugin-task.ts",
"chars": 2937,
"preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport type { ItemOnObjectAction } from '@engine/acti"
},
{
"path": "src/engine/action/pipe/widget-interaction.action.ts",
"chars": 3580,
"preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
},
{
"path": "src/engine/config/config-handler.ts",
"chars": 8633,
"preview": "import 'json5/lib/register';\nimport type { ItemPresetConfiguration } from '@engine/config/item-config';\nimport { ItemDet"
},
{
"path": "src/engine/config/data-dump.ts",
"chars": 1478,
"preview": "import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { logger } from '@runejs/common';\nimport type { "
},
{
"path": "src/engine/config/directories.ts",
"chars": 84,
"preview": "import { join } from 'path';\n\nexport const BUILD_DIR = join('.', 'dist', 'engine');\n"
},
{
"path": "src/engine/config/item-config.ts",
"chars": 10484,
"preview": "import { deepMerge } from '@engine/util/objects';\nimport type { SkillName } from '@engine/world/actor/skills';\nimport { "
},
{
"path": "src/engine/config/item-spawn-config.ts",
"chars": 1687,
"preview": "import { Position } from '@engine/world/position';\nimport { loadConfigurationFiles } from '@runejs/common/fs';\n\nexport i"
},
{
"path": "src/engine/config/music-regions-config.ts",
"chars": 1103,
"preview": "import * as musicRegionsFile from '../../../data/config/music/musicRegions.json';\n\nexport interface MusicRegionsConfigur"
},
{
"path": "src/engine/config/npc-config.ts",
"chars": 5932,
"preview": "import type { QuestRequirement } from '@engine/action/hook/action-hook';\nimport type { DefensiveBonuses } from '@engine/"
},
{
"path": "src/engine/config/npc-spawn-config.ts",
"chars": 1435,
"preview": "import type { Direction } from '@engine/world/direction';\nimport { Position } from '@engine/world/position';\nimport { lo"
},
{
"path": "src/engine/config/quest-config.ts",
"chars": 1952,
"preview": "import type { npcInteractionActionHandler } from '@engine/action/pipe/npc-interaction.action';\nimport type { Npc } from "
},
{
"path": "src/engine/config/shop-config.testskip.ts",
"chars": 4747,
"preview": "import { findItem } from '@engine/config/config-handler';\nimport type { Shop, ShopConfiguration } from '@engine/config/s"
},
{
"path": "src/engine/config/shop-config.ts",
"chars": 8319,
"preview": "import { findItem, widgets } from '@engine/config/config-handler';\nimport type { ItemDetails } from '@engine/config/item"
},
{
"path": "src/engine/interface/interface-state.ts",
"chars": 9677,
"preview": "import type { Player } from '@engine/world/actor/player/player';\nimport type { ItemContainer } from '@engine/world/items"
},
{
"path": "src/engine/net/inbound-packet-handler.ts",
"chars": 1838,
"preview": "import { BUILD_DIR } from '@engine/config/directories';\nimport type { Player } from '@engine/world/actor/player/player';"
},
{
"path": "src/engine/net/inbound-packets/add-friend.packet.ts",
"chars": 359,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { longToString } from '@engine/util/strings"
},
{
"path": "src/engine/net/inbound-packets/add-ignore.packet.ts",
"chars": 366,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { longToString } from '@engine/util/strings"
},
{
"path": "src/engine/net/inbound-packets/blinking-tab-click.packet.ts",
"chars": 616,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
},
{
"path": "src/engine/net/inbound-packets/button-click.packet.ts",
"chars": 475,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
},
{
"path": "src/engine/net/inbound-packets/character-design.packet.ts",
"chars": 1149,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
},
{
"path": "src/engine/net/inbound-packets/chat.packet.ts",
"chars": 577,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
},
{
"path": "src/engine/net/inbound-packets/command.packet.ts",
"chars": 902,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { type Player, Rights } from '@engine/world"
},
{
"path": "src/engine/net/inbound-packets/drop-item.packet.ts",
"chars": 623,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
},
{
"path": "src/engine/net/inbound-packets/examine.packet.ts",
"chars": 946,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { activeWorld } from '@engine/world';\nimpor"
},
{
"path": "src/engine/net/inbound-packets/item-interaction.packet.ts",
"chars": 3742,
"preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
},
{
"path": "src/engine/net/inbound-packets/item-on-item.packet.ts",
"chars": 1896,
"preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
},
{
"path": "src/engine/net/inbound-packets/item-on-npc.packet.ts",
"chars": 1709,
"preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
},
{
"path": "src/engine/net/inbound-packets/item-on-object.packet.ts",
"chars": 2956,
"preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
},
{
"path": "src/engine/net/inbound-packets/item-on-player.packet.ts",
"chars": 1783,
"preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
}
]
// ... and 288 more files (download for full content)
About this extraction
This page contains the full source code of the runejs/server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 488 files (31.1 MB), approximately 610.3k tokens, and a symbol index with 1104 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.