Merge pull request #221 from Ceikry/master

Lots of changes [REQUIRES DATABASE RELOAD]
This commit is contained in:
Daniel Ginovker 2020-03-27 18:41:18 -04:00 committed by GitHub
commit 5577c274c3
24 changed files with 534 additions and 145 deletions

View file

@ -3,7 +3,7 @@
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Mar 25, 2020 at 09:12 PM
-- Generation Time: Mar 27, 2020 at 11:19 PM
-- Server version: 10.4.11-MariaDB
-- PHP Version: 7.4.3
@ -15610,6 +15610,7 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(3801, 'Squire', 'A squire of balance.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3802, 'Squire (Novice)', 'A squire of balance.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3805, 'Postie Pete', 'Posts things.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3806, 'Millie Miller', 'Miss Millicent Miller the Miller of Mill Lane Mill', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3808, 'Tortoise', 'Massive beast of War with extra Gnome.', 51, 36, 36, 36, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 3960, 0, 3962, NULL, 0, 3954, NULL, NULL, NULL, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3809, 'Captain Dalbur', 'Tally Ho!', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3810, 'Captain Bleemadge', 'Huzzah!', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
@ -15650,9 +15651,9 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(4251, 'Garden supplier', 'She has green fingers. (Not literally.)', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4252, 'Macaroni Penguin', 'Beak areful with this one', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4257, 'Guard', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL),
(4258, 'Guard', 'A dwarven guard.', 17, 12, 12, 12, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 99, 0, 102, NULL, 0, 0, NULL, NULL, NULL, 6, 29, NULL, NULL, NULL, 1, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL),
(4259, 'Guard', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL);
(4258, 'Guard', 'A dwarven guard.', 17, 12, 12, 12, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 99, 0, 102, NULL, 0, 0, NULL, NULL, NULL, 6, 29, NULL, NULL, NULL, 1, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(4259, 'Guard', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL),
(4260, 'Guard', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL),
(4261, 'Goblin', 'An ugly green creature.', 10, 1, 2, 1, 1, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, 6185, 6183, 6182, NULL, 6185, 6185, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(4262, 'Goblin', 'An ugly green creature.', 10, 1, 2, 1, 1, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, 6185, 6183, 6182, NULL, 6185, 6185, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
@ -15847,9 +15848,9 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(4634, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(4635, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(4636, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(4637, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(4638, 'Gnome soldier', 'A little warrior.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(4637, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(4638, 'Gnome soldier', 'A little warrior.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4639, 'Gnome soldier', 'A little warrior.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4640, 'Gnome soldier', 'A little warrior.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4641, 'Gnome soldier', 'A little warrior.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
@ -16045,9 +16046,9 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(4965, 'Tool Leprechaun', 'It\'s a leprechaun sunbathing on a mountain.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4971, 'Baby Roc', 'A mountain-dwelling bird. Cute', 100, 40, 40, 40, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 5031, 0, 5033, NULL, 0, 0, NULL, NULL, NULL, 7, 7, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4972, 'Giant Roc', 'A very', 285, 55, 55, 55, 55, 55, NULL, NULL, NULL, 60, NULL, NULL, NULL, 5024, 0, 5027, NULL, 0, 5025, NULL, NULL, NULL, 10, 7, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4975, 'Male slave', 'It looks like he\'s been here a long time.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4977, 'Female slave', 'She looks like she\'s been down here a long time.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(4975, 'Male slave', 'It looks like he\'s been here a long time.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(4977, 'Female slave', 'She looks like she\'s been down here a long time.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4989, 'Mercenary', 'He looks a bit aggressive.', 35, 25, 25, 25, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 390, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4990, 'Mercenary', 'He looks a bit aggressive.', 35, 25, 25, 25, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 390, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4991, 'Mercenary', 'He looks a bit aggressive.', 35, 25, 25, 25, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 390, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
@ -16246,9 +16247,9 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(5375, 'Zombie', 'Examine not added', 23, 25, 1, 25, 1, NULL, '15,25,25,25,25,25,25,15,15,25,25,25,25,25,25', NULL, NULL, 30, 5, NULL, NULL, 5568, 5567, 5569, NULL, 5568, 5568, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(5376, 'Zombie', 'Examine not added', 23, 25, 1, 25, 1, NULL, '15,25,25,25,25,25,25,15,15,25,25,25,25,25,25', NULL, NULL, 30, 5, NULL, NULL, 5568, 5567, 5569, NULL, 5568, 5568, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(5377, 'Zombie', 'Examine not added', 30, 38, 1, 28, 1, NULL, '15,25,28,28,25,28,28,15,15,28,25,25,25,25,25', NULL, NULL, 30, 5, NULL, NULL, 5578, 5579, 5580, NULL, 5578, 5578, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(5378, 'Zombie', 'Examine not added', 30, 38, 1, 28, 1, NULL, '15,25,28,28,25,28,28,15,15,28,25,25,25,25,25', NULL, NULL, 30, 5, NULL, NULL, 5578, 5579, 5580, NULL, 5578, 5578, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(5379, 'Zombie', 'Examine not added', 40, 47, 1, 48, 1, NULL, '35,45,45,45,45,45,45,35,35,45,45,45,45,45,45', NULL, NULL, 30, 5, NULL, NULL, 5578, 5579, 5580, NULL, 5578, 5578, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL);
(5378, 'Zombie', 'Examine not added', 30, 38, 1, 28, 1, NULL, '15,25,28,28,25,28,28,15,15,28,25,25,25,25,25', NULL, NULL, 30, 5, NULL, NULL, 5578, 5579, 5580, NULL, 5578, 5578, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(5379, 'Zombie', 'Examine not added', 40, 47, 1, 48, 1, NULL, '35,45,45,45,45,45,45,35,35,45,45,45,45,45,45', NULL, NULL, 30, 5, NULL, NULL, 5578, 5579, 5580, NULL, 5578, 5578, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(5380, 'Zombie', 'Examine not added', 40, 47, 1, 48, 1, NULL, '35,45,45,45,45,45,45,35,35,45,45,45,45,45,45', NULL, NULL, 30, 5, NULL, NULL, 5578, 5579, 5580, NULL, 5578, 5578, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(5381, 'Skeleton', 'Could do with gaining a few pounds.', 88, 62, 62, 62, 1, NULL, NULL, NULL, NULL, 60, 5, NULL, NULL, 5485, 0, 5491, NULL, 0, 0, NULL, NULL, NULL, 8, 75, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '774,775,777', NULL, NULL, NULL),
(5382, 'Animated steel armour', 'Animated steel armour.', 40, 28, 28, 28, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 386, 0, 4167, NULL, 0, 0, NULL, NULL, NULL, 7, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
@ -16449,9 +16450,9 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(5849, 'Outlaw', 'A mean looking outlaw. Don\'t get too close!', 32, 23, 23, 23, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 390, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5850, 'Outlaw', 'A mean looking outlaw. Don\'t get too close!', 32, 23, 23, 23, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 390, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5851, 'Outlaw', 'A mean looking outlaw. Don\'t get too close!', 32, 23, 23, 23, 1, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 390, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5852, 'Monkey', 'Weird eyeball thing. Reminds Thok of breakfast.', 85, 60, 60, 40, 60, 60, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, 0, 0, NULL, NULL, NULL, 10, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '629,631,630', NULL, NULL, NULL),
(5854, 'Bench', 'For sitting on.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(5852, 'Monkey', 'Weird eyeball thing. Reminds Thok of breakfast.', 85, 60, 60, 40, 60, 60, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, 0, 0, NULL, NULL, NULL, 10, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '629,631,630', NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(5854, 'Bench', 'For sitting on.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5855, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(5856, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(5859, 'H.A.M. Archer', 'He looks pretty skilled with that bow.', 57, 15, 15, 20, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 426, 0, 836, NULL, 0, 0, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL),
@ -16649,9 +16650,9 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(6154, 'Portal', 'The Void Knight will soon weaken the shield.', 250, 1, 1, 30, 1, 30, '100,100,100,50,50,0,0,0,0,0,0,0,0,0,0', NULL, NULL, 125, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6155, 'Portal', 'The Void Knight will soon weaken the shield.', 250, 1, 1, 30, 1, 15, '100,100,100,100,25,0,0,0,0,0,0,0,0,0,0', NULL, NULL, 125, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6156, 'Portal', 'The Void Knight will soon weaken the shield.', 250, 1, 1, 30, 1, 30, '100,100,50,100,50,0,0,0,0,0,0,0,0,0,0', NULL, NULL, 125, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6157, 'Portal', 'The Void Knight will soon weaken the shield.', 250, 1, 1, 30, 1, 30, '50,50,100,100,50,0,0,0,0,0,0,0,0,0,0', NULL, NULL, 125, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6159, 'Workman', 'It is cold and solid. Thok will strap it to Marmaros\'s leg.', 114, 50, 50, 65, 50, 50, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, 0, 0, NULL, NULL, NULL, 10, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(6157, 'Portal', 'The Void Knight will soon weaken the shield.', 250, 1, 1, 30, 1, 30, '50,50,100,100,50,0,0,0,0,0,0,0,0,0,0', NULL, NULL, 125, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(6159, 'Workman', 'It is cold and solid. Thok will strap it to Marmaros\'s leg.', 114, 50, 50, 65, 50, 50, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, 0, 0, NULL, NULL, NULL, 10, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6169, 'Squire', 'Squire to the Knights of the Round Table.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6170, 'Sir Lancelot', NULL, 118, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 5, NULL, NULL, 400, 422, 836, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6183, 'Guard', 'An officer of the law.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, '511,513,512', NULL, NULL, NULL),
@ -16842,10 +16843,10 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(6431, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6432, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6433, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6434, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6435, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6436, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL);
(6434, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(6435, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6436, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6437, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6438, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
(6439, 'Goblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, '469,472,471', NULL, NULL, NULL),
@ -17044,10 +17045,10 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(6727, 'Revenant hobgoblin', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, '469,472,471', NULL, NULL, NULL),
(6728, 'Revenant werewolf', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, NULL, NULL, NULL, NULL, NULL),
(6729, 'Revenant ork', NULL, 105, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, NULL, NULL, NULL, NULL, NULL),
(6730, 'Revenant knight', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, NULL, NULL, NULL, NULL, NULL),
(6731, 'Queen of Snow', 'Her lack of body heat is unsettling.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, 5, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6739, 'Snow imp', 'It looks right at home here.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(6730, 'Revenant knight', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(6731, 'Queen of Snow', 'Her lack of body heat is unsettling.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, 5, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6739, 'Snow imp', 'It looks right at home here.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6740, 'Snow', 'Snowflakes swirling in the wind.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6743, 'Dragon snowman', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '408,410,409', NULL, NULL, NULL),
(6745, 'Pirate snowman', NULL, 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '703,705,704', NULL, NULL, NULL),
@ -17242,10 +17243,10 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(7111, 'Thug', 'Low on brains', 5, 7, 7, 9, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 386, 0, 836, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(7112, 'Thug', 'Low on brains', 5, 7, 7, 9, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 386, 0, 836, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(7113, 'Thug', 'Low on brains', 5, 7, 7, 9, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 386, 0, 836, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(7114, 'Thug', 'Low on brains', 5, 7, 7, 9, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 386, 0, 836, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(7115, 'Thaki the delivery dwarf', 'He seems to be enjoying his time in the bar.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7120, 'Tyras guard', 'One of King Tyras\'s men.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(7114, 'Thug', 'Low on brains', 5, 7, 7, 9, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 386, 0, 836, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(7115, 'Thaki the delivery dwarf', 'He seems to be enjoying his time in the bar.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7120, 'Tyras guard', 'One of King Tyras\'s men.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7125, 'Rabbit', 'A hungry-looking rabbit.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7128, 'Farmer', 'A gnome farmer.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7129, 'Farmer', 'A gnome farmer.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
@ -17437,10 +17438,10 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(7585, 'Torcher', 'A penguin pushing paper', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7586, 'Torcher', 'A penguin pushing paper', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7593, 'Shifter', 'He\'s a little rough around the edges.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7605, 'Banker', 'He has unbelievable strength!', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7606, 'Vyrewatch', NULL, 95, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7607, 'Vyrewatch', NULL, 105, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
(7605, 'Banker', 'He has unbelievable strength!', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`, `strength_level`, `defence_level`, `range_level`, `magic_level`, `bonuses`, `poison_amount`, `poison_immune`, `respawn_delay`, `attack_speed`, `movement_radius`, `agg_radius`, `melee_animation`, `defence_animation`, `death_animation`, `spawn_animation`, `magic_animation`, `range_animation`, `start_gfx`, `projectile`, `end_gfx`, `weakness`, `slayer_task`, `slayer_exp`, `combat_style`, `poisonous`, `aggressive`, `start_height`, `prj_height`, `end_height`, `clue_level`, `spell_id`, `combat_audio`, `protect_style`, `force_talk`, `safespot`) VALUES
(7606, 'Vyrewatch', NULL, 95, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7607, 'Vyrewatch', NULL, 105, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7608, 'Vyrewatch', NULL, 120, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7609, 'Vyrewatch', NULL, 130, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7614, 'Vyrewatch', NULL, 95, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
@ -17516,6 +17517,8 @@ INSERT INTO `npc_configs` (`id`, `name`, `examine`, `lifepoints`, `attack_level`
(7773, 'Fire monster', 'A monster like many others', 54, 28, 28, 38, 38, NULL, NULL, NULL, NULL, 60, NULL, NULL, NULL, 9341, 0, 9344, NULL, 0, 0, NULL, NULL, NULL, 0, NULL, NULL, 2, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7823, 'Wall Beast', 'A big, scary hand! ', 105, 38, 38, 38, 1, NULL, NULL, NULL, NULL, 60, 6, 1, NULL, 1802, 1803, 1804, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 105, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7891, 'Melee dummy', 'A melee training dummy', 15, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 60, 6, NULL, NULL, 94, 0, 97, NULL, 0, 0, NULL, NULL, NULL, 6, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7958, 'Smelting Tutor', 'A man of his craft.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7959, 'Smelting Tutor', 'A master of his craft.', 10, 1, 1, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8133, 'Corporeal Beast', 'A vision of supernatural horror.', 2000, 95, 95, 95, 95, 95, '380,250,350,400,650,450,920,850,750,800,1500,250,250,275,200', NULL, 1, 80, 6, 64, 64, 10058, 10386, 10385, NULL, 10053, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8149, 'Armoured zombie', 'He sure looks grave.', 62, 50, 50, 50, 50, NULL, '30,30,80,85,80,40,40,60,38,0,0,0,0,0,0', NULL, NULL, 35, 6, NULL, NULL, 5571, 5574, 5575, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
(8150, 'Armoured zombie', 'This is a rotten one.', 62, 50, 50, 50, 50, NULL, '30,30,80,85,80,40,40,60,38,0,0,0,0,0,0', NULL, NULL, 35, 6, NULL, NULL, 5571, 5574, 5575, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 30, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '931,923,922', NULL, NULL, NULL),
@ -19666,7 +19669,7 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(41, '{3197,3356,0,1,4}-{3234,3297,0,1,3}-{3230,3296,0,1,5}-{3236,3288,0,1,6}-{3236,3300,0,1,2}-{3231,3308,0,1,3}-{2965,3336,0,1,4}-{3110,9573,0,1,6}-{2655,3441,0,1,6}-{2649,3438,0,1,7}-{2649,3446,0,1,6}-{2653,3444,0,1,6}-{2647,3441,0,1,1}-{2784,3062,0,1,4}-{2789,3063,0,1,4}-{3160,3082,0,1,3}-{3140,3096,0,1,3}-{3140,3093,0,1,0}-{3138,3094,0,1,1}-{3140,3093,0,1,3}-{3138,3093,0,1,1}-{3138,3094,0,1,0}-{3189,3278,0,1,3}-{3187,3276,0,1,5}-{3188,3278,0,1,4}-{2851,3370,0,1,3}-{2846,3374,0,1,3}-{2853,3372,0,1,3}-{2847,3373,0,1,3}-{2850,3371,0,1,1}-{2851,3373,0,1,4}-{2852,3370,0,1,4}-{3234,3293,0,1,4}-{3229,3298,0,1,1}-{3228,3296,0,1,4}-{2815,3560,0,1,7}-{2819,3561,0,1,4}-{2818,3559,0,1,6}-{3140,3093,0,1,1}-{2674,3652,0,1,3}-{2672,3655,0,1,6}-{2677,3655,0,1,6}'),
(42, '{3237,3346,0,1,1}'),
(43, '{3241,3354,0,1,3}-{3200,3263,0,0,0}-{3212,3262,0,1,1}-{2926,3323,0,1,0}-{2922,3325,0,1,3}'),
(44, '{3251,3418,0,0,1}-{3252,3418,0,0,1}-{3253,3418,0,0,1}-{3096,3489,0,0,3}-{3147,3448,0,0,1}-{3180,3436,0,0,4}-{3180,3440,0,0,4}-{3180,3444,0,0,4}-{3096,3493,0,0,3}-{3097,3494,0,0,1}-{3191,3437,0,0,3}-{3191,3441,0,0,3}-{3191,3445,0,0,3}'),
(44, '{3251,3418,0,0,1}-{3252,3418,0,0,1}-{3253,3418,0,0,1}-{3096,3489,0,0,3}-{3254,3418,0,0,1}-{3255,3418,0,0,1}-{3256,3418,0,0,1}-{3147,3448,0,0,1}-{3180,3436,0,0,4}-{3180,3440,0,0,4}-{3180,3444,0,0,4}-{3096,3493,0,0,3}-{3097,3494,0,0,1}-{3191,3437,0,0,3}-{3191,3441,0,0,3}-{3191,3445,0,0,3}'),
(45, '{3096,3491,0,0,3}-{3148,3448,0,0,0}-{3191,3443,0,0,3}-{3191,3439,0,0,3}-{3191,3435,0,0,3}-{3180,3442,0,0,4}-{3180,3434,0,0,4}-{2843,5214,0,0,4}'),
(46, '{3179,3348,0,1,0}-{3178,3353,0,1,0}-{3211,3322,0,1,0}-{3214,3314,0,1,0}-{3214,3318,0,1,0}-{3216,3314,0,1,0}-{3218,3287,0,1,0}-{3223,3281,0,1,0}-{3231,3271,0,1,0}-{3233,3267,0,1,0}-{3233,3270,0,1,0}-{3235,3265,0,1,0}-{3235,3259,0,1,0}-{3238,3244,0,1,0}-{3241,3230,0,1,0}-{3241,3234,0,1,0}-{3243,3228,0,1,0}-{3247,3221,0,1,0}-{3248,3220,0,1,0}-{3259,3212,0,1,0}-{2979,3359,0,1,0}-{2979,3357,0,1,0}-{2993,3384,0,1,6}-{3015,3285,0,1,0}'),
(47, '{3097,3364,0,1,3}-{3102,3363,0,1,5}-{3341,3267,0,1,5}-{3235,3224,0,1,3}-{3229,3220,0,1,4}-{3211,3211,0,1,3}-{3225,3220,0,1,1}-{3237,3215,0,1,5}-{3211,3210,0,1,7}-{3227,3220,0,1,7}-{3233,3227,0,1,5}-{3227,3210,0,1,6}-{3228,3222,0,1,4}-{3229,3226,0,1,0}-{3127,3487,0,1,4}-{3125,3486,0,1,6}-{3127,3486,0,1,4}-{3019,3292,0,1,7}-{3018,3295,0,1,7}-{3001,3202,0,1,5}-{3021,3205,0,1,6}-{3026,3174,0,1,5}-{3019,3176,0,1,7}-{3076,3282,0,1,5}-{3089,3266,0,1,4}-{3091,3266,0,1,4}-{3243,3687,0,1,5}-{3249,3669,0,1,3}-{3252,3675,0,1,4}-{3252,3680,0,1,3}-{3259,3683,0,1,0}-{3276,9871,0,1,1}-{3277,9871,0,1,3}-{3225,9862,0,1,4}-{3222,9861,0,1,6}-{3220,9860,0,1,6}-{3219,9865,0,1,6}-{3237,9862,0,1,4}-{3236,3217,0,1,4}-{3259,3230,0,1,4}-{3158,3226,0,1,5}-{3160,3202,0,1,4}-{3233,3237,0,1,7}-{2821,3170,0,1,1}-{2801,3158,0,1,2}-{2852,9642,0,1,6}-{2858,9632,0,1,3}-{2536,2982,0,1,3}-{2531,2980,0,1,0}-{2522,2981,0,1,4}-{2545,2989,0,1,4}-{2523,2970,0,1,2}-{2603,9480,0,1,1}-{2600,9477,0,1,0}-{2579,9496,0,1,4}-{2580,9508,0,1,0}-{2571,9522,0,1,4}-{2654,9640,0,1,6}-{2655,9637,0,1,4}-{2656,9639,0,1,7}-{2651,9636,0,1,5}-{2648,9637,0,1,4}-{2651,9642,0,1,1}-{2654,9640,0,1,0}-{2654,9635,0,1,6}-{2655,9635,0,1,3}-{2664,9626,0,1,6}-{2664,9624,0,1,1}-{2661,9623,0,1,1}-{2663,9623,0,1,3}-{2664,9626,0,1,6}-{2592,9831,0,1,3}-{2588,9825,0,1,6}-{2583,9829,0,1,4}-{2581,9841,0,1,0}-{2597,9823,0,1,2}-{2579,9805,0,1,3}-{2576,9804,0,1,0}-{2573,9805,0,1,5}-{2571,9808,0,1,3}-{2576,9810,0,1,2}-{2587,9802,0,1,2}-{2592,9800,0,1,4}-{2596,9805,0,1,6}-{2601,9802,0,1,5}-{2585,9801,0,1,7}-{2594,9803,0,1,0}-{2590,9806,0,1,3}-{2612,9808,0,1,6}-{2604,9810,0,1,6}-{2579,9821,0,1,2}-{2576,9812,0,1,6}-{2580,9813,0,1,6}-{2600,9813,0,1,4}-{2599,9809,0,1,4}-{2514,3193,0,1,6}-{2518,3192,0,1,3}-{2507,3181,0,1,3}-{2508,3178,0,1,6}-{2511,3183,0,1,3}-{2515,3182,0,1,1}-{2565,9505,0,1,1}-{2566,9510,0,1,6}-{2594,9497,0,1,4}-{3475,9840,0,1,6}-{3481,9842,0,1,1}-{3486,9843,0,1,7}-{3483,9824,0,1,4}-{3496,9808,0,0,5}-{3490,9815,0,1,1}-{3478,9834,0,0,3}-{3490,9824,0,1,4}'),
@ -19715,7 +19718,7 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(102, '{2622,3390,0,1,7}-{2622,3390,0,1,7}'),
(103, '{2501,3289,0,1,1}-{2928,3251,1,1,3}-{3277,3659,0,1,1}-{3280,3658,0,1,1}-{3277,3661,0,1,3}-{3276,3657,0,1,3}-{3241,9907,0,1,4}-{3243,9914,0,1,1}-{3242,9913,0,1,6}-{3242,9916,0,1,5}-{3239,9914,0,1,1}-{2928,3244,1,1,4}-{2924,3253,1,1,3}-{2927,3252,1,1,4}-{2927,3254,1,1,3}'),
(104, '{3093,3357,1,1,6}'),
(105, '{2632,3280,0,1,1}-{2633,3274,0,1,3}-{3094,3601,0,1,6}-{3109,3600,0,1,2}-{3091,3604,0,1,0}-{2497,3164,0,1,2}-{3023,4508,0,1,7}'),
(105, '{2632,3280,0,1,1}-{2633,3274,0,1,3}-{3094,3601,0,1,6}-{3109,3600,0,1,2}-{3091,3604,0,1,0}-{2497,3164,0,1,2}-{3023,4508,0,1,7}-{2696, 3329, 0,1,4}-{2708, 3336, 0,1,4}'),
(106, '{2968,3480,0,1,6}-{2968,3490,0,1,0}-{2978,3507,0,1,1}-{2959,3445,0,1,3}-{2807,3377,0,1,6}-{3289,3353,0,1,3}'),
(107, '{2602,3267,0,1,6}-{2603,3270,0,1,4}-{2607,3268,0,1,5}-{3275,3154,0,1,6}-{3038,9802,0,1,5}-{3041,9804,0,1,6}-{3040,9795,0,1,7}-{3055,9776,0,1,4}-{3039,9769,0,1,6}-{3049,9764,0,1,3}-{3050,9770,0,1,1}-{3039,9765,0,1,1}-{3048,9762,0,1,4}-{3044,9760,0,1,6}-{3048,9779,0,1,1}-{2870,3166,0,1,3}-{2868,3159,0,1,4}-{2867,3172,0,1,5}-{2813,3112,0,1,4}-{2858,3167,0,1,3}-{2846,3153,0,1,3}-{2851,3149,0,1,1}-{2789,2949,0,1,3}-{2787,2943,0,1,3}-{2781,2949,0,1,3}-{3253,9909,0,1,4}-{3300,3312,0,1,1}-{3300,3305,0,1,3}-{3298,3300,0,1,5}-{3298,3294,0,1,0}-{3299,3290,0,1,6}-{2645,9823,0,1,1}-{2641,9819,0,1,7}-{2641,9817,0,1,2}-{2642,9813,0,1,5}-{2639,9809,0,1,2}-{2585,3479,0,1,1}-{2578,3476,0,1,7}-{2588,3485,0,1,3}'),
(108, '{2715,3218,0,0,0}-{2719,3223,0,0,0}-{2720,3212,0,0,0}-{2722,3220,0,0,0}-{2724,3215,0,0,0}-{2729,3224,0,0,0}-{2733,3225,0,0,0}-{2936,9777,0,0,0}-{2934,9765,0,0,0}-{2932,9755,0,0,0}-{2726,3217,0,0,0}-{2728,3218,0,0,0}-{2735,3219,0,0,0}-{2723,3212,0,0,0}-{2721,3216,0,0,0}-{2716,3219,0,0,0}-{2725,3227,0,0,0}'),
@ -20047,7 +20050,7 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(612, '{3028,3510,0,0,0}'),
(619, '{3353,3333,0,1,3}'),
(636, '{2395,3494,0,0,6}-{2396,3494,0,0,6}-{2397,3494,0,0,6}-{2396,3493,0,0,6}'),
(637, '{3166,3433,1,0,5}'),
(637, '{3158,3425,1,1,5}'),
(638, '{3195,3404,0,0,0}'),
(639, '{3211,3425,0,1,7}'),
(640, '{3253,3487,0,1,6}'),
@ -20055,12 +20058,12 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(642, '{3185,3385,0,1,6}'),
(643, '{3246,3383,1,1,5}'),
(644, '{3247,9781,0,1,6}'),
(645, '{3223,3401,0,1,2}'),
(645, '{3223,3401,0,1,2}');
INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(646, '{3257,3447,0,0,0}'),
(648, '{3220,3471,0,0,6}'),
(649, '{3149,3210,0,0,0}'),
(650, '{3148,3205,0,0,0}');
INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(650, '{3148,3205,0,0,0}'),
(651, '{3148,3207,0,0,0}'),
(652, '{3151,3209,0,0,0}'),
(656, '{2822,3374,0,0,3}'),
@ -20555,7 +20558,7 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(1767, '{3262,3262,0,1,6}-{3025,3311,0,1,5}-{2924,3288,0,0,1}-{2921,3290,0,1,1}-{2926,3279,0,1,1}-{2931,3272,0,1,1}-{2936,3273,0,1,6}'),
(1769, '{2979,3203,0,1,4}-{3264,3249,0,1,4}-{2596,9822,0,1,4}'),
(1770, '{2999,3212,0,1,1}-{3262,3253,0,1,6}-{3259,3254,0,1,3}-{2595,9826,0,1,1}'),
(1771, '{2993,3199,0,1,6}-{3248,3233,0,1,6}-{3247,3240,0,1,3}'),
(1771, '{2993,3199,0,1,6}-{3248,3233,0,1,6}-{3247,3240,0,1,3}-{3187, 3286, 0, 1, 0}-{3209, 3277, 0, 1, 0}-{3174, 3294, 0, 1, 0}-{3178, 3294, 0, 1, 0}'),
(1772, '{2993,3203,0,1,0}-{3251,3231,0,1,1}-{3260,3241,0,1,0}-{3259,3222,0,0,4}'),
(1773, '{2991,3219,0,1,1}-{3252,3227,0,1,1}-{3263,3219,0,1,0}'),
(1774, '{3012,3204,0,1,3}-{3255,3228,0,1,4}-{3265,3219,0,1,2}-{2592,9834,0,1,6}'),
@ -20719,15 +20722,15 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(2335, '{3181,3359,0,0,0}'),
(2336, '{2938,3221,0,1,0}'),
(2337, '{2615,3855,0,0,3}'),
(2338, '{2615,3229,0,0,0}'),
(2338, '{2615,3229,0,0,0}');
INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(2339, '{2934,3438,0,1,6}'),
(2340, '{3007,3373,0,1,4}'),
(2341, '{3229,3456,0,0,0}'),
(2342, '{3196,3231,0,1,4}'),
(2343, '{2473,3446,0,1,6}'),
(2344, '{2490,3183,0,1,3}'),
(2353, '{2324,3179,0,1,5}');
INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(2353, '{2324,3179,0,1,5}'),
(2355, '{2353,3163,0,0,4}'),
(2359, '{2335,3169,0,1,3}'),
(2360, '{2335,3174,0,1,4}-{2322,3172,0,1,5}'),
@ -21041,7 +21044,8 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(3307, '{2467,4438,0,1,4}-{2471,4439,0,1,7}-{2465,4436,0,1,3}-{2464,4432,0,1,4}'),
(3310, '{2415,4451,0,1,6}-{2416,4435,0,1,7}-{2423,4432,0,1,4}'),
(3318, '{2401,4378,0,0,0}'),
(3325, '{3161,3432,1,0,4}'),
(3324, '{3159, 3433, 0, 1, 0}'),
(3325, '{3161,3432,1,1,4}'),
(3328, '{3203,3344,0,0,0}'),
(3329, '{3112,3414,0,0,0}'),
(3330, '{3132,3508,0,0,0}'),
@ -21094,6 +21098,7 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(3799, '{2650,2663,0,0,4}'),
(3802, '{2657,2637,0,0,6}'),
(3804, '{3349,3793,0,0,0}-{3349,3793,0,0,4}-{3349,3793,0,0,4}'),
(3806, '{3166, 3304, 0, 1, 0}'),
(3807, '{3254,3274,0,0,0}'),
(3808, '{2517,3205,0,1,3}-{2513,3204,0,1,3}-{2422,3526,0,1,1}'),
(3809, '{2465,3501,3,1,3}'),
@ -22056,6 +22061,7 @@ INSERT INTO `npc_spawns` (`npc_id`, `loc_data`) VALUES
(7768, '{4762,5156,0,1,6}'),
(7823, '{3215,9560,0,0,1}-{3161,9547,0,0,3}-{3164,9556,0,0,4}-{3162,9574,0,0,3}-{3198,9554,0,0,7}-{3216,9588,0,0,1}-{3198,9572,0,0,1}'),
(7891, '{3207,3250,0,0,0}-{3208,3250,0,0,0}-{3209,3250,0,0,0}'),
(7959, '{3188, 3425, 0, 1, 0}'),
(7969, '{3205,3240,0,0,0}'),
(8149, '{3244,9996,0,1,6}-{3229,10008,0,1,6}-{3222,10012,0,1,6}-{3205,10010,0,1,6}-{3212,10012,0,1,6}-{3205,10023,0,1,6}-{3210,10030,0,1,6}-{3212,10039,0,1,6}-{3213,10009,0,1,6}-{3243,9993,0,1,6}-{3218,10036,0,1,6}-{3218,10010,0,1,6}'),
(8150, '{3241,9997,0,1,6}-{3230,10011,0,1,6}-{3221,10012,0,1,6}-{3207,10006,0,1,6}-{3207,10017,0,1,6-{3209,10031,0,1,6}-{3209,10019,0,1,6}-{3217,10012,0,1,6}-{3224,10012,0,1,6}'),
@ -23468,7 +23474,7 @@ INSERT INTO `shops` (`id`, `title`, `general_store`, `stock`, `npcs`, `currency`
(59, 'Fancy Clothes Store', 0, '{1949,10}-{958,10}-{948,10}-{1733,10}-{1734,1000}-{1059,30}-{1061,10}-{1757,10}-{1013,10}-{1025,10}-{10088,0}-{10090,0}-{10091,0}-{10089,0}-{10087,0}-{11525,0}', '554', 995, 0),
(60, 'Thessalias Fine Clothes', 0, '{1005,10}-{1129,10}-{1059,10}-{1061,10}-{1757,10}-{1013,10}-{1015,10}-{1011,10}-{1007,10}-{950,10}-{426,10}-{428,10}', '548', 995, 0),
(61, 'Fine Fashions', 0, '{646,30}-{648,30}-{650,30}-{652,30}-{654,30}-{656,30}-{658,30}-{660,30}-{662,30}-{664,30}-{636,30}-{638,30}-{640,30}-{642,30}-{644,30}-{626,30}-{628,30}-{630,30}-{632,30}-{634,30}', '601', 995, 0),
(62, 'Yrsas Accoutrements', 0, '{3775,10}-{3773,10}-{3767,10}-{3769,10}-{3771,10}-{3793,10}-{3795,10}-{3797,10}-{3791,10}-{3767,10}-{3759,10}-{3761,10}-{3765,10}-{3763,10}-{3777,10}-{3779,10}-{3781,10}-{3783,10}-{3785,10}-{3787,10}-{3789,10}', '1301', 995, 0),
(62, 'Yrsas Accoutrements', 0, '{3775,10}-{3773,10}-{3767,10}-{3769,10}-{3771,10}-{3793,10}-{3795,10}-{3797,10}-{3791,10}-{3799,10}-{3767,10}-{3759,10}-{3761,10}-{3765,10}-{3763,10}-{3777,10}-{3779,10}-{3781,10}-{3783,10}-{3785,10}-{3787,10}-{3789,10}', '1301', 995, 0),
(63, 'Barkers Haberdashery', 0, '{2894,5}-{2896,5}-{2898,5}-{2900,5}-{2902,5}-{2904,5}-{2906,5}-{2908,5}-{2910,5}-{2912,5}-{2914,5}-{2916,5}-{2918,5}-{2920,5}-{2922,5}-{2924,5}-{2926,5}-{2928,5}-{2930,5}-{2932,5}-{2934,5}-{2936,5}-{2938,5}-{2940,5}-{2942,5}-{1007,5}-{1023,5}-{1019,5}-{1021,5}-{1027,5}', '1039', 995, 0),
(64, 'Lletya Seamstress', 0, '{1734,1000}-{1733,10}-{1759,100}-{1763,10}-{1765,10}-{1767,10}-{1769,10}-{1771,10}-{1773,10}', '2353', 995, 0),
(65, 'Dodgy Mikes Second-hand Clothing', 0, '{7114,10}', '3166', 995, 0),

View file

@ -296,9 +296,14 @@ public final class DoorActionHandler {
secondDir = (secondDir + 2) % 4;
}
Location secondLoc = firstLoc.transform((int) p.getX(), (int) p.getY(), 0);
if(object.getId() == 36917 || object.getId() == 36919){
ObjectBuilder.replace(object, object.transform(36919, firstDir, firstLoc), restoreTicks, true);
ObjectBuilder.replace(second, second.transform(36917, secondDir, secondLoc), restoreTicks, true);
} else {
ObjectBuilder.replace(object, object.transform(replaceId, firstDir, firstLoc), restoreTicks, clip);
ObjectBuilder.replace(second, second.transform(secondReplaceId, secondDir, secondLoc), restoreTicks, clip);
}
}
/**
* Handles the opening of a fence.

View file

@ -12,7 +12,7 @@ import java.util.List;
*/
public enum Consumables {
/** meats */
CHICKEN(new Food(2140, 2138, 2144, new ConsumableProperties(3), new CookingProperties(1, 30, 30))), UGTHANKI(new Food(1861, 1859, 2146, new ConsumableProperties(2), new CookingProperties(1, 40, 40))), RABBIT(new Food(3228, 3226, 7222, new ConsumableProperties(5), new CookingProperties(1, 30, 30))), YAK(new Food(2142, 10816, 2146, new ConsumableProperties(2), new CookingProperties(1, 30, 30))),
CHICKEN(new Food(2140, 2138, 2144, new ConsumableProperties(3), new CookingProperties(1, 30, 30))), UGTHANKI(new Food(1861, 1859, 2146, new ConsumableProperties(2), new CookingProperties(1, 40, 40))), RABBIT(new Food(3228, 3226, 7222, new ConsumableProperties(5), new CookingProperties(1, 30, 30))),
DARK_CRAB(new Food(14939, 14937, 14941, new ConsumableProperties(22), new CookingProperties(90, 215, 100))),
CRAB(new Food(7521, 7518, 7520, new ConsumableProperties(10), new CookingProperties(21, 100, 100))),
/** fish */

View file

@ -300,7 +300,7 @@ public enum Bars {
/**
* Steel Dart Tips
*/
STEEL_DART_TIPS(BarType.STEEL, SmithingType.TYPE_DART_TIP, 808, 34),
STEEL_DART_TIPS(BarType.STEEL, SmithingType.TYPE_DART_TIP, 821, 34),
/**
* Steel Nails

View file

@ -5,6 +5,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Random;
import org.crandor.game.component.Component;
import org.crandor.game.container.access.InterfaceContainer;
import org.crandor.game.content.global.BossKillCounter;
import org.crandor.game.node.entity.npc.drop.DropFrequency;
import org.crandor.game.node.entity.player.Player;
@ -22,7 +24,7 @@ public final class RewardChest {
/**
* The low profit drop table.
*/
private static final ChanceItem[] DROP_TABLE = { new ChanceItem(995, 1, 5306, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(995, 306, 306, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(558, 60, 60, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(558, 250, 4900, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(562, 115, 1890, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(560, 15, 15, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(560, 70, 1190, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(565, 35, 630, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(4740, 35, 280, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(165, 1, 1, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(141, 1, 1, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(129, 1, 1, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(385, 4, 4, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(985, 1, 1, 1000, 0.0, DropFrequency.RARE), new ChanceItem(987, 1, 1, 1000, 0.0, DropFrequency.RARE), new ChanceItem(1149, 1, 1, 1000, 0.0, DropFrequency.RARE), new ChanceItem(4708, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4710, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4712, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4714, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4716, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4718, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4720, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4722, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4724, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4726, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4728, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4730, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4732, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4734, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4736, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4738, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4745, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4747, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4749, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4751, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4753, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4755, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4757, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4759, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), };
private static final ChanceItem[] DROP_TABLE = { new ChanceItem(995, 1, 5306, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(995, 306, 306, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(558, 60, 60, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(558, 250, 4900, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(562, 115, 1890, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(560, 15, 15, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(560, 70, 1190, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(565, 35, 630, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(4740, 35, 280, 1000, 0.0, DropFrequency.COMMON), new ChanceItem(165, 1, 1, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(141, 1, 1, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(129, 1, 1, 1000, 0.0, DropFrequency.UNCOMMON), new ChanceItem(985, 1, 1, 1000, 0.0, DropFrequency.RARE), new ChanceItem(987, 1, 1, 1000, 0.0, DropFrequency.RARE), new ChanceItem(1149, 1, 1, 1000, 0.0, DropFrequency.RARE), new ChanceItem(4708, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4710, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4712, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4714, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4716, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4718, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4720, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4722, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4724, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4726, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4728, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4730, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4732, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4734, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4736, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4738, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4745, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4747, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4749, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4751, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4753, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4755, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4757, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), new ChanceItem(4759, 1, 1, 1000, 0.0, DropFrequency.VERY_RARE), };
/**
* Rewards the player.
@ -30,7 +32,7 @@ public final class RewardChest {
*/
public static void reward(Player player) {
for (boolean killed : player.getSavedData().getActivityData().getBarrowBrothers()) {
if (!killed && !player.getName().equals("vexia")) {
if (!killed && !player.getName().equals("test")) {
player.sendMessage("You can't loot the chest until you kill all 6 barrows brothers.");
player.removeAttribute("barrow:looted");// Because they haven't
// actually looted the
@ -48,6 +50,7 @@ public final class RewardChest {
if (mod > 80) {
mod = 80;
}
Item[] rewards = new Item[5];
for (int i = 0; i < 2 + RandomFunction.random(3); i++) {
mod = RandomFunction.random(mod);
ChanceItem reward = null;
@ -79,11 +82,15 @@ public final class RewardChest {
} else {
item = new Item(reward.getId(), reward.getMinimumAmount());
}
rewards[i] = item;
player.getInventory().add(item, player);
player.getPacketDispatch().sendItemOnInterface(item.getId(),item.getAmount(),364,0);
if (item.getDefinition().getName().contains("harok") || item.getDefinition().getName().contains("uthan") || item.getDefinition().getName().contains("aril") || item.getDefinition().getName().contains("orag") || item.getDefinition().getName().contains("erac") || item.getDefinition().getName().contains("hrim")) {
Repository.sendNews(player.getUsername() + " has just received: " + item.getAmount() + " x " + item.getName() + " from Barrows.");
}
}
InterfaceContainer.generateItems(player,rewards,new String[]{ "examine" },364,4);
player.getInterfaceManager().open(new Component(364));
BossKillCounter.addtoBarrowsCount(player);
}

View file

@ -113,6 +113,10 @@ public final class JulietDialogue extends DialoguePlugin {
interpreter.sendDialogues(npc, null, "Quickly! Go and tell Romeo the plan!");
stage = 1002;
break;
default:
npc(FacialExpression.ANGRY,"Oh, Romeo, that no good scoundrel!");
stage = 22;
break;
}
return true;
}

View file

@ -757,6 +757,7 @@ public final class RJCutscenePlugin extends CutscenePlugin {
case 751:
end();
cutscene.stop(true);
quest.finish(player);
break;
}
return true;

View file

@ -160,6 +160,7 @@ public final class HettyDialogue extends DialoguePlugin {
stage = 35;
break;
case 35:
quest.start(player);
quest.setStage(player, 20);
end();
break;

View file

@ -51,6 +51,6 @@ public class SmithingApparenticeDialogue extends DialoguePlugin {
@Override
public int[] getIds() {
return new int[] { 4904 };
return new int[] { 7959,4904 };
}
}

View file

@ -0,0 +1,54 @@
package plugin.interaction.city.lumbridge;
import org.crandor.cache.def.impl.ObjectDefinition;
import org.crandor.game.content.dialogue.DialoguePlugin;
import org.crandor.game.interaction.OptionHandler;
import org.crandor.game.node.Node;
import org.crandor.game.node.entity.player.Player;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
/**
* Cow field sign manager
* @author ceik
*/
@InitializablePlugin
public class CowFieldSign extends OptionHandler {
private int DIALOGUE_KEY = 87905733;
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable{
new SignDialogue().init();
ObjectDefinition.forId(31297).getConfigurations().put("option:read",this);
return this;
}
@Override
public boolean handle(Player player, Node node, String option){
if(node.getId() == 31297){
player.getDialogueInterpreter().open(DIALOGUE_KEY);
}
return true;
}
public final class SignDialogue extends DialoguePlugin{
public SignDialogue(){
/**
* Empty
*/
}
public SignDialogue(Player player){super(player);}
@Override
public DialoguePlugin newInstance(Player player){return new SignDialogue(player);}
@Override
public boolean open(Object... args){
interpreter.sendPlainMessage(false,"Wandering adventurers have killed " + CowPenZone.CowDeaths + " cows in this field.", "Local farmers call it an epidemic.");
return true;
}
@Override
public boolean handle(int componentId, int buttonId){
end();
return true;
}
public int[] getIds() {return new int[] {DIALOGUE_KEY};}
}
}

View file

@ -0,0 +1,52 @@
package plugin.interaction.city.lumbridge;
import org.crandor.game.node.entity.Entity;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.item.GroundItemManager;
import org.crandor.game.node.item.Item;
import org.crandor.game.world.map.zone.MapZone;
import org.crandor.game.world.map.zone.ZoneBorders;
import org.crandor.game.world.map.zone.ZoneBuilder;
import org.crandor.game.world.map.zone.ZoneRestriction;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import org.crandor.tools.RandomFunction;
/**
* Zone for the lumbridge cow pen
* @author ceik
*/
@InitializablePlugin
public class CowPenZone extends MapZone implements Plugin<Object> {
public static int CowDeaths;
@Override
public Object fireEvent(String identifier, Object... args) {
return null;
}
public CowPenZone() {
super("lumbridge cows", true);
}
@Override
public void configure() {
super.register(new ZoneBorders(3242, 3255, 3265, 3297));
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
ZoneBuilder.configure(this);
return this;
}
@Override
public boolean death(Entity e, Entity killer) {
if (killer instanceof Player && e instanceof NPC) {
CowDeaths++;
}
return false;
}
}

View file

@ -0,0 +1,38 @@
package plugin.interaction.city.lumbridge;
import org.crandor.cache.def.impl.ObjectDefinition;
import org.crandor.game.interaction.OptionHandler;
import org.crandor.game.node.Node;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.object.GameObject;
import org.crandor.game.node.object.ObjectBuilder;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
/**
* Handles the chest in farmer fred's house
*
* @author ceik
*/
@InitializablePlugin
public class FredChest extends OptionHandler {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable{
ObjectDefinition.forId(37009).getConfigurations().put("option:open",this);
ObjectDefinition.forId(37010).getConfigurations().put("option:shut",this);
ObjectDefinition.forId(37010).getConfigurations().put("option:search",this);
return this;
}
@Override
public boolean handle(Player player, Node node, String option){
if(option.equals("open")){
ObjectBuilder.replace(node.asObject(),new GameObject(37010,node.asObject().getLocation(),node.asObject().getRotation()));
} else if (option.equals("shut")){
ObjectBuilder.replace(node.asObject(),new GameObject(37009,node.asObject().getLocation(),node.asObject().getRotation()));
} else if (option.equals("search")){
player.getPacketDispatch().sendMessage("You search the chest but find nothing.");
}
return true;
}
}

View file

@ -0,0 +1,52 @@
package plugin.interaction.city.lumbridge;
import org.crandor.cache.def.impl.ObjectDefinition;
import org.crandor.game.content.dialogue.DialoguePlugin;
import org.crandor.game.interaction.OptionHandler;
import org.crandor.game.node.Node;
import org.crandor.game.node.entity.player.Player;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
@InitializablePlugin
public class GnomeCopterSign extends OptionHandler {
public int DIALOGUE_ID = 989769182;
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
new SignDialogue().init();
ObjectDefinition.forId(30037).getConfigurations().put("option:read",this);
return this;
}
@Override
public boolean handle(Player player, Node node, String string) {
if (node.getId() == 30037) {
player.getDialogueInterpreter().open(DIALOGUE_ID);
}
return true;
}
public final class SignDialogue extends DialoguePlugin{
public SignDialogue(){
/**
* Empty
*/
}
public SignDialogue(Player player){super(player);}
@Override
public DialoguePlugin newInstance(Player player){ return new SignDialogue(player);}
@Override
public boolean open(Object... args){
interpreter.sendPlainMessage(false,"Come check out our gnome copters up north!","Disclaimer: EXTREMELY WIP");
stage = 0;
return true;
}
@Override
public boolean handle(int componentId, int buttonId){
end();
return true;
}
@Override
public int[] getIds(){return new int[] {DIALOGUE_ID};}
}
}

View file

@ -16,11 +16,12 @@ import org.crandor.plugin.Plugin;
*/
@InitializablePlugin
public class PriestInPerilUsePlugin extends UseWithHandler {
private int[] monumentIds = new int[] { 3499, 3493, 3494, 3497, 3495, 3498, 3496 };
/**
* Constructs a new {@code PriestInPerilUsePlugin.java} {@code Object}.
*/
public PriestInPerilUsePlugin() {
super(2944, 1925, 2945, 2954);
super(2944, 1925, 2945, 2954, 2347, 1733, 1931, 314, 36, 590);
}
/**
@ -29,7 +30,9 @@ public class PriestInPerilUsePlugin extends UseWithHandler {
*/
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
addHandler(3499, OBJECT_TYPE, this);
for(int i = 0; i < monumentIds.length; i++){
addHandler(monumentIds[i], OBJECT_TYPE, this);
}
addHandler(3485, OBJECT_TYPE, this);
addHandler(3463, OBJECT_TYPE, this);
addHandler(30728, OBJECT_TYPE, this);
@ -43,7 +46,10 @@ public class PriestInPerilUsePlugin extends UseWithHandler {
@Override
public boolean handle(NodeUsageEvent event) {
Player player = event.getPlayer();
if (((GameObject) event.getUsedWith()).getId() == 3499) {
int objUse = ((GameObject) event.getUsedWith()).getId();
int itemUse = ((Item) event.getUsedItem()).getId();
switch(objUse) {
case 3499:
if (!event.getPlayer().getGameAttributes().getAttributes().containsKey("priest_in_peril:key") && event.getPlayer().getInventory().remove(new Item(2944))) {
event.getPlayer().getInventory().add(new Item(2945));
event.getPlayer().getPacketDispatch().sendMessage("You swap the Golden key for the Iron key.");
@ -51,14 +57,81 @@ public class PriestInPerilUsePlugin extends UseWithHandler {
} else {
return true;
}
break;
case 3493:
if(!player.getGameAttributes().getAttributes().containsKey("priest_in_peril:tinderbox")){
if (itemUse == 590) {
if (event.getPlayer().getInventory().remove(new Item(590))) {
event.getPlayer().getInventory().add(new Item(2946));
event.getPlayer().getPacketDispatch().sendMessage("You swap the tinderbox for the golden tinderbox.");
event.getPlayer().getGameAttributes().setAttribute("/save:priest_in_peril:tinderbox", true);
}
if (((GameObject) event.getUsedWith()).getId() == 3485) {
}
}
break;
case 3494:
if(!player.getGameAttributes().getAttributes().containsKey("priest_in_peril:candle")){
if (itemUse == 36) {
if (event.getPlayer().getInventory().remove(new Item(36))) {
event.getPlayer().getInventory().add(new Item(2947));
event.getPlayer().getPacketDispatch().sendMessage("You swap the candle for the golden candle.");
event.getPlayer().getGameAttributes().setAttribute("/save:priest_in_peril:candle", true);
}
}
}
break;
case 3497:
if(!player.getGameAttributes().getAttributes().containsKey("priest_in_peril:feather")){
if (itemUse == 314) {
if (event.getPlayer().getInventory().remove(new Item(314))) {
event.getPlayer().getInventory().add(new Item(2950));
event.getPlayer().getPacketDispatch().sendMessage("You swap the feather for the golden feather.");
event.getPlayer().getGameAttributes().setAttribute("/save:priest_in_peril:feather", true);
}
}
}
break;
case 3495:
if(!player.getGameAttributes().getAttributes().containsKey("priest_in_peril:pot")){
if (itemUse == 1931) {
if (event.getPlayer().getInventory().remove(new Item(1931))) {
event.getPlayer().getInventory().add(new Item(2948));
event.getPlayer().getPacketDispatch().sendMessage("You swap the empty pot for the golden pot.");
event.getPlayer().getGameAttributes().setAttribute("/save:priest_in_peril:pot", true);
}
}
}
break;
case 3498:
if(!player.getGameAttributes().getAttributes().containsKey("priest_in_peril:needle")){
if (itemUse == 1733) {
if (event.getPlayer().getInventory().remove(new Item(1733))) {
event.getPlayer().getInventory().add(new Item(2951));
event.getPlayer().getPacketDispatch().sendMessage("You swap the needle for the golden needle.");
event.getPlayer().getGameAttributes().setAttribute("/save:priest_in_peril:needle", true);
}
}
}
break;
case 3496:
if(!player.getGameAttributes().getAttributes().containsKey("priest_in_peril:hammer")){
if (itemUse == 2347) {
if (event.getPlayer().getInventory().remove(new Item(2347))) {
event.getPlayer().getInventory().add(new Item(2949));
event.getPlayer().getPacketDispatch().sendMessage("You swap the hammer for the golden hammer.");
event.getPlayer().getGameAttributes().setAttribute("/save:priest_in_peril:hammer", true);
}
}
}
break;
case 3485: {
if (event.getPlayer().getInventory().remove(new Item(1925))) {
event.getPlayer().getInventory().add(new Item(2953));
event.getPlayer().getPacketDispatch().sendMessage("You fill the bucket from the well.");
}
}
if (((GameObject) event.getUsedWith()).getId() == 3463) {
break;
case 3463: {
if (player.getInventory().remove(new Item(2945))) {
Quest quest = player.getQuestRepository().getQuest("Priest in Peril");
quest.setStage(player, 15);
@ -68,7 +141,8 @@ public class PriestInPerilUsePlugin extends UseWithHandler {
player.getDialogueInterpreter().sendDialogues(npc, FacialExpression.HALF_GUILTY, "Oh! Thank you! You have found the key!");
}
}
if (((GameObject) event.getUsedWith()).getId() == 30728) {
break;
case 30728: {
if (player.getInventory().remove(new Item(2954))) {
player.getInventory().add(new Item(1925));
Quest quest = player.getQuestRepository().getQuest("Priest in Peril");
@ -76,6 +150,8 @@ public class PriestInPerilUsePlugin extends UseWithHandler {
player.getPacketDispatch().sendMessage("You pour the blessed water over the coffin...");
}
}
break;
}
return true;
}
}

View file

@ -72,6 +72,7 @@ public final class FlourMakingPlugin extends OptionHandler {
extension.emptyChute();
player.getPacketDispatch().sendMessage("You operate the hopper. The grain slides down the chute.");
player.getConfigManager().set(CONFIG, 1);
player.setAttribute("/save:milling:grain",player.getAttribute("milling:grain",0) + 1);
}
break;
case "empty":
@ -98,6 +99,7 @@ public final class FlourMakingPlugin extends OptionHandler {
player.getInventory().add(FLOUR);
extension.decrement(1);
player.getPacketDispatch().sendMessage(!extension.isEmpty() ? "You fill a pot with flour from the bin." : "You fill a pot with the last of the flour in the bin.");
if (extension.getCharges() < 1) {
player.getConfigManager().set(CONFIG, 0);
}
@ -150,11 +152,14 @@ public final class FlourMakingPlugin extends OptionHandler {
* @param increment the increment.
*/
public final void increment(final int increment, boolean semi) {
if(player.getAttribute("milling:grain",0) < 30) {
if (semi) {
semiCharges += increment;
} else {
charges += increment;
}
player.setAttribute("/save:milling:grain",player.getAttribute("milling:grain",0) + 1);
}
}
/**
@ -163,6 +168,9 @@ public final class FlourMakingPlugin extends OptionHandler {
*/
public final void decrement(final int increment) {
charges -= increment;
if(!(player.getAttribute("milling:grain",0) <= 0)){
player.setAttribute("/save:milling:grain",player.getAttribute("milling:grain",0) + 1);
}
}
/**

View file

@ -99,23 +99,43 @@ public class PriestInPerilOptionPlugin extends OptionHandler {
int item = 0;
String message = "";
if (id == 3496) {
if (!player.getGameAttributes().getAttribute("priest_in_peril:hammer", false)) {
item = 2949;
} else {
item = 2347;
}
message = "Saradomin is the hammer that crushes evil everywhere.";
}
if (id == 3498) {
if (!player.getGameAttributes().getAttribute("priest_in_peril:needle", false)) {
item = 2951;
} else {
item = 1733;
}
message = "Saradomin is the needle that binds our lives together.";
}
if (id == 3495) {
if (!player.getGameAttributes().getAttribute("priest_in_peril:pot", false)) {
item = 2948;
} else {
item = 1931;
}
message = "Saradomin is the vessle that keeps our lives from harm.";
}
if (id == 3497) {
if (!player.getGameAttributes().getAttribute("priest_in_peril:feather", false)) {
item = 2950;
} else {
item = 314;
}
message = "Saradomin is the delicate touch that brushes us with love.";
}
if (id == 3494) {
if (!player.getGameAttributes().getAttribute("priest_in_peril:candle", false)) {
item = 2947;
} else {
item = 36;
}
message = "Saradomin is the light that shines throughout our lives.";
}
if (id == 3499) {
@ -127,7 +147,11 @@ public class PriestInPerilOptionPlugin extends OptionHandler {
message = "Saradomin is the key that unlocks the mysteries of life.";
}
if (id == 3493) {
if (!player.getGameAttributes().getAttribute("priest_in_peril:tinderbox", false)) {
item = 2946;
} else {
item = 590;
}
message = "Saradomin is the spark that lights the fire in our hearts.";
}
player.getPacketDispatch().sendString(message, 272, 17);

View file

@ -105,7 +105,6 @@ public class ReadSignPostPlugin extends OptionHandler {
ObjectDefinition.forId(30039).getConfigurations().put("option:read", this);
ObjectDefinition.forId(30040).getConfigurations().put("option:read", this);
ObjectDefinition.forId(31296).getConfigurations().put("option:read", this);
ObjectDefinition.forId(31297).getConfigurations().put("option:read", this);
ObjectDefinition.forId(31298).getConfigurations().put("option:read", this);
ObjectDefinition.forId(31299).getConfigurations().put("option:read", this);
ObjectDefinition.forId(31300).getConfigurations().put("option:read", this);

View file

@ -0,0 +1,64 @@
package plugin.npc.city.lumbridge;
import org.crandor.game.content.dialogue.DialoguePlugin;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.item.Item;
import org.crandor.plugin.InitializablePlugin;
/**
* @author ceik
*/
@InitializablePlugin
public class MilleMiller extends DialoguePlugin {
public MilleMiller(){
/**
* Empty
*/
}
public MilleMiller(Player player){ super(player);}
@Override
public DialoguePlugin newInstance(Player player){return new MilleMiller(player);}
@Override
public boolean open(Object... args){
player("Hello, there. Can you teach me how","to make wheat?");
return true;
}
@Override
public boolean handle(int componentId, int buttonId){
switch(stage){
case 0:
npc("Certainly! You first need to gather wheat from","the field nearby, then you go on up","to the top, put it in the hopper, and","flip those levers!");
stage++;
break;
case 1:
npc("Afterwords, you need to make sure you have","a pot, and come down and grab your wheat!");
stage++;
break;
case 2:
if(!player.getInventory().containsItem(new Item(1931))){
player("Could you give me one of those?");
stage = 4;
} else {
player("Thanks!");
stage++;
}
break;
case 3:
end();
break;
case 4:
npc("Sure thing!");
stage++;
break;
case 5:
end();
player.getInventory().add(new Item(1931));
break;
}
return true;
}
@Override
public int[] getIds() {return new int[] {3806};}
}

View file

@ -41,7 +41,7 @@ public final class JulietNPC extends AbstractNPC {
@Override
public boolean isHidden(final Player player) {
return player.getQuestRepository().getQuest("Romeo & Juliet").getStage(player) > 60;
return player.getQuestRepository().getQuest("Romeo & Juliet").getStage(player) > 60 && player.getQuestRepository().getQuest("Romeo & Juliet").getStage(player) < 100;
}
@Override

View file

@ -1,5 +1,6 @@
package plugin.quest;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.game.node.entity.player.link.quest.Quest;

View file

@ -137,7 +137,7 @@ public final class WaterfallPlugin extends OptionHandler {
player.getPulseManager().run(new Pulse(2, player) {
@Override
public boolean pulse() {
if (player.getEquipment().containsOneItem(295) || player.getInventory().contains(295, 1)) {
if ((player.getEquipment().containsOneItem(295) || player.getInventory().contains(295, 1)) || player.getQuestRepository().isComplete("Waterfall")) {
player.getPacketDispatch().sendMessage("You walk through the door.");
player.teleport(new Location(2575, 9861));
} else {

View file

@ -10,7 +10,6 @@ import org.crandor.game.system.task.Pulse;
import org.crandor.game.world.GameWorld;
import org.crandor.game.world.map.Direction;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.path.Pathfinder;
import org.crandor.game.world.update.flag.context.Animation;
import org.crandor.game.world.update.flag.context.Graphics;
import org.crandor.net.packet.PacketRepository;
@ -22,25 +21,37 @@ import org.crandor.plugin.Plugin;
import java.util.List;
/**
* Created for 2009Scape
* User: Ethan Kyle Millard
* Date: March 15, 2020
* Time: 1:14 PM
* Nora T Hagg NPC
* @author Ethan, cleaned up by ceik
* @date y'know
*/
@InitializablePlugin
public final class NoraTHaggNPC extends AbstractNPC {
private static final Location[] MOVEMENT_PATH = {Location.create(2904, 3463, 0), Location.create(2908, 3463, 0), Location.create(2912, 3463, 0), Location.create(2916, 3463, 0), Location.create(2920, 3463, 0), Location.create(2924, 3463, 0), Location.create(2930, 3463, 0)};
private int tilesIndex = 0;
public class NoraTHaggNPC extends AbstractNPC {
boolean walkdir;
public NoraTHaggNPC() {
super(896, Location.create(2904, 3463, 0));
}
private Location getRespawnLocation() {
return Location.create(2901, 3466, 0);
}
@Override
public int[] getIds() {
return new int[] { 896 };
}
private NoraTHaggNPC(int id, Location location) {
super(id, location);
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
this.configure();
init();
return super.newInstance(arg);
}
private boolean canTeleport(Entity t) {
int playerX = t.getLocation().getX();
int npcX = getLocation().getX();
@ -58,56 +69,17 @@ public final class NoraTHaggNPC extends AbstractNPC {
return false;
}
@Override
public void configure() {
super.configure();
// if (isWalks()) {
// configureMovementPath(MOVEMENT_PATH);
// }
// setWalks(true);
}
@Override
public AbstractNPC construct(int id, Location location, Object... objects) {
return new NoraTHaggNPC(id, location);
}
@Override
public int[] getIds() {
return new int[] { 896 };
}
public void configure() {
super.configure();
setWalks(false);
setPathBoundMovement(true);
private Location getRespawnLocation() {
return Location.create(2901, 3466, 0);
}
@Override
public int getWalkRadius() {
return 50;
}
@Override
public void tick() {
super.tick();
List<Player> players = getViewport().getCurrentPlane().getPlayers();
for (Player player : players) {
if (player == null || !player.isActive() || player.getLocks().isInteractionLocked() || DeathTask.isDead(player) || !canTeleport(player) || !CombatSwingHandler.isProjectileClipped(this, player, false)) {
continue;
}
animate(new Animation(5803));
sendTeleport(player);
}
if (getLocation().equals(Location.create(2904, 3463, 0))) {
Pathfinder.find(this, Location.create(2930, 3463, 0)).walk(this);
} else if (getLocation().equals(Location.create(2930, 3463, 0))) {
Pathfinder.find(this, Location.create(2904, 3463, 0)).walk(this);
}
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
return super.newInstance(arg);
}
private void sendTeleport(final Player player) {
@ -138,5 +110,30 @@ public final class NoraTHaggNPC extends AbstractNPC {
});
}
}
@Override
public void tick() {
super.tick();
List<Player> players = getViewport().getCurrentPlane().getPlayers();
if(getLocation().getX() == 2930){
walkdir = false;
} else if(getLocation().getX() == 2904){
walkdir = true;
}
for (Player player : players) {
if (player == null || !player.isActive() || player.getLocks().isInteractionLocked() || DeathTask.isDead(player) || !canTeleport(player) || !CombatSwingHandler.isProjectileClipped(this, player, false)) {
continue;
}
animate(new Animation(5803));
sendTeleport(player);
player.getPacketDispatch().sendMessage("" + getLocation() + " matches? " + (getLocation().getX() == 2904));
}
if (location.getX() != 2930 && walkdir) {
this.getWalkingQueue().reset();
this.getWalkingQueue().addPath(location.getX() + 1,3463,true);
} else if (location.getX() != 2904 && !walkdir) {
this.getWalkingQueue().reset();
this.getWalkingQueue().addPath(location.getX() - 1,3463,true);
}
}
}

View file

@ -50,7 +50,7 @@ public class YakArmourPlugin extends UseWithHandler {
@Override
public void create(final int amount, int index) {
player.getPulseManager().run(new YakArmourPulse(player, index == 1 ? LEGS : BODY, index, amount));
player.getPulseManager().run(new YakArmourPulse(player, index == 1 ? BODY : LEGS, index, amount));
}
@Override

View file

@ -113,9 +113,9 @@ public final class PhasmatysZone extends MapZone implements Plugin<Object> {
case 5264:
ClimbActionHandler.climb(player, Animation.create(828), Location.create(3654, 3519, 0));
return true;
case 5244:
/*case 5244:
player.getDialogueInterpreter().open(1686, null, true);
return true;
return true;*/
case 11162:
case 11163:
case 11164: