Implemented Varrock hard achievement for getting a spottier cape

Fixed an inauthentic typo in Matthias's falconry dialog
This commit is contained in:
Sam Marder
2026-05-30 14:28:30 +00:00
committed by Ryan
parent 8d7f78ac5b
commit 0b41c5a146
2 changed files with 149 additions and 9 deletions
@@ -6,6 +6,7 @@ import core.game.component.ComponentDefinition
import core.game.component.ComponentPlugin import core.game.component.ComponentPlugin
import core.game.container.access.InterfaceContainer import core.game.container.access.InterfaceContainer
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.item.Item import core.game.node.item.Item
import core.plugin.Initializable import core.plugin.Initializable
import core.plugin.Plugin import core.plugin.Plugin
@@ -165,6 +166,10 @@ class FurClothingInterface : ComponentPlugin(){
if (removeItem(player, requiredFur, Container.INVENTORY) && if (removeItem(player, requiredFur, Container.INVENTORY) &&
removeItem(player, coins, Container.INVENTORY)) { removeItem(player, coins, Container.INVENTORY)) {
addItem(player, clothing.product.id, amount) addItem(player, clothing.product.id, amount)
if (clothing == FUR_CLOTHING.DASH_CAPE) {
player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 2, 2)
}
} }
} }
@@ -8,6 +8,7 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.game.node.item.Item; import core.game.node.item.Item;
import org.rs09.consts.Items;
/** /**
* Handles the MathiasFlaconryDialogue dialogue. * Handles the MathiasFlaconryDialogue dialogue.
@@ -49,7 +50,8 @@ public class MathiasFlaconryDialogue extends DialoguePlugin {
} }
break; break;
case 323: case 323:
end(); interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "Well, you're welcome to come back if you change", "your mind.");
stage = 967;
break; break;
case 95: case 95:
if (player.getBank().containsItem(FALCON) || player.getEquipment().containsItem(FALCON) || player.getInventory().containsItem(FALCON)) { if (player.getBank().containsItem(FALCON) || player.getEquipment().containsItem(FALCON) || player.getInventory().containsItem(FALCON)) {
@@ -58,7 +60,7 @@ public class MathiasFlaconryDialogue extends DialoguePlugin {
return true; return true;
} }
if (player.getEquipment().get(EquipmentContainer.SLOT_HANDS) != null || player.getEquipment().get(EquipmentContainer.SLOT_SHIELD) != null || player.getEquipment().get(EquipmentContainer.SLOT_WEAPON) != null) { if (player.getEquipment().get(EquipmentContainer.SLOT_HANDS) != null || player.getEquipment().get(EquipmentContainer.SLOT_SHIELD) != null || player.getEquipment().get(EquipmentContainer.SLOT_WEAPON) != null) {
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Sorry, free your hands, weapon, and shield slot first."); interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Sorry, you really need both hands free for falconry. I'd", "suggest that you put away your weapons and gloves before", "we start.");
stage = 99; stage = 99;
break; break;
} }
@@ -69,11 +71,11 @@ public class MathiasFlaconryDialogue extends DialoguePlugin {
stage = 97; stage = 97;
} else { } else {
end(); end();
player.getPacketDispatch().sendMessage("You need 500 gold goins."); player.getPacketDispatch().sendMessage("You need 500 gold coins.");
} }
break; break;
case 97: case 97:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Don't worry: I'll keep and eye on you to make sure", "you don't upset it roo much."); interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Don't worry; I'll keep an eye on you to make sure", "you don't upset it too much.");
stage = 99; stage = 99;
break; break;
case 99: case 99:
@@ -84,22 +86,109 @@ public class MathiasFlaconryDialogue extends DialoguePlugin {
stage = 501; stage = 501;
break; break;
case 501: case 501:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Could I have a go with your bird?"); interpreter.sendOptions("Select an Option", "Do you have any quests I could do?", "What is this place?", "Could I have a go with your bird?");
stage = 502; stage = 502;
break; break;
case 502: case 502:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.ASKING, "Do you have any quests I could do?");
stage = 600;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.ASKING, "What is this place?");
stage = 700;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.ASKING, "Could I have a go with your bird?");
stage = 800;
break;
}
break;
case 600:
interpreter.sendDialogues(5093, FacialExpression.ASKING, "A quest? What a strange notion. Do you normally go", "around asking complete strangers for quests?");
stage = 601;
break;
case 601:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Er, yes, now you come to mention it.");
stage = 602;
break;
case 602:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Oh, ok then. Well, no, I don't; sorry.");
stage = 967;
break;
case 700:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "A good question; straight and to the point. My name is ", "Matthias, I am a falconer, and this is where I train", "my birds.");
stage = 701;
break;
case 701:
interpreter.sendOptions("Select an Option", "Do you have any quests I could do?", "That sounds like fun; could I have a go?", "That doesn't sound like my sort of thing.", "What's this falconry thing all about then?");
stage = 702;
break;
case 702:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.ASKING, "Do you have any quests I could do?");
stage = 600;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.ASKING, "That sounds like fun; could I have a go?");
stage = 800;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That doesn't sound like my sort of thing.");
stage = 720;
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What's this falconry thing all about then?");
stage = 750;
break;
}
break;
case 720:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Fair enough; it does require a great deal of patience and", "skill, so I can understand if you might feel intimidated.");
stage = 967;
break;
case 750:
interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "Well, some people see it as a sport, although such a term", "does not really convey the amount of patience and", "dedication required to be proficient at the task.");
stage = 751;
break;
case 751:
interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "Putting it simply, it is the training and use of birds of", "prey in hunting quarry.");
stage = 752;
break;
case 752:
interpreter.sendDialogues(player, FacialExpression.ASKING, "So it's like keeping a pet then?");
stage = 753;
break;
case 753:
interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "Not exactly, no. Such a bird can never really be", "considered tame in the same way that a dog can.");
stage = 754;
break;
case 754:
interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "They can be trained to associate people or places with", "food though, and, as such, a good falconer can get a", "trained bird to do as he wishes.");
stage = 701;
break;
case 800:
if (player.getSkills().getLevel(Skills.HUNTER) < 43) { if (player.getSkills().getLevel(Skills.HUNTER) < 43) {
npc("Try coming back when you're more experienced", "I wouldn't want my birds being injured."); npc("Try coming back when you're more experienced", "I wouldn't want my birds being injured.");
stage = 967; stage = 967;
return true; return true;
} }
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Training falcons is a lot of work and I", "doubt you're up to the task. However, I suppose", "I could let you try hunting with one."); interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Training falcons is a lot of work and I doubt you're up", "to the task. However, I suppose I could let you try", "hunting with one.");
stage = 503; stage = 801;
break; break;
case 503: case 801:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "I have some tamer birds that I occasionally lend to rich", "noblemen who consider it a sufficiently refined sport for", "their tastes. and you look like the kind who might", "appreciate a good hunt."); interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "I have some tamer birds that I occasionally lend to rich", "noblemen who consider it a sufficiently refined sport for", "their tastes, and you look like the kind who might", "appreciate a good hunt.");
stage = 802;
break;
case 802:
interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "I'd have to request a small fee, mind you; how does", "500 gold pieces sound?");
stage = 90; stage = 90;
break; break;
case 900: case 900:
interpreter.sendOptions("Select an Option", "Yes, please.", "No thank you."); interpreter.sendOptions("Select an Option", "Yes, please.", "No thank you.");
stage = 901; stage = 901;
@@ -125,7 +214,48 @@ public class MathiasFlaconryDialogue extends DialoguePlugin {
case 967: case 967:
end(); end();
break; break;
case 1000:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Ah, you're back. How are you getting along with her then?");
stage = 1001;
break;
case 1001:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "It's certainly harder than it looks.");
stage = 1002;
break;
case 1002:
interpreter.sendDialogues(5093, FacialExpression.HALF_GUILTY, "Sorry, but I was talking to the falcon, not you. But yes it", "is. Have you had enough yet?");
stage = 1003;
break;
case 1003:
interpreter.sendOptions("Select an Option", "Actually, I'd like to keep trying a little longer.", "I think I'll leave it for now.");
stage = 1004;
break;
case 1004:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.ASKING, "Actually, I'd like to keep trying a little longer.");
stage = 1010;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "I think I'll leave it for now.");
stage = 1020;
break;
} }
break;
case 1010:
interpreter.sendDialogues(5093, FacialExpression.NEUTRAL, "Ok then, just come talk to me when you're done.");
stage = 967;
break;
case 1020:
player.getInventory().remove(FALCON);
player.getEquipment().remove(FALCON, true);
interpreter.sendDialogue("You give the falcon and glove back to Matthias.");
stage = 967;
break;
}
return true; return true;
} }
@@ -145,6 +275,11 @@ public class MathiasFlaconryDialogue extends DialoguePlugin {
stage = 900; stage = 900;
return true; return true;
} }
if (player.getEquipment().contains(10024, 1) || player.getInventory().contains(10024, 1)) {
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Hello again.");
stage = 1000;
return true;
}
if (args.length == 2) if (args.length == 2)
quick = true; quick = true;
if (quick) { if (quick) {