Added new content api method for stating a quest requirement

Made Miscellania accessible with completion of Fremennik Trials via the fairy ring
Locked Morytania locations behind Priest in Peril (both fairy ring and charter ship methods)
This commit is contained in:
Ceikry
2022-09-24 16:14:09 +00:00
committed by Ryan
parent 506bbf35f8
commit 2586c4b66a
3 changed files with 56 additions and 8 deletions
@@ -5,7 +5,6 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.diary.DiaryType; import core.game.node.entity.player.link.diary.DiaryType;
import core.game.node.item.Item; import core.game.node.item.Item;
import core.game.system.task.Pulse; import core.game.system.task.Pulse;
import org.rs09.consts.Items;
import rs09.game.world.GameWorld; import rs09.game.world.GameWorld;
import core.game.world.map.Location; import core.game.world.map.Location;
import rs09.game.world.repository.Repository; import rs09.game.world.repository.Repository;
@@ -17,6 +16,8 @@ import core.tools.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static api.ContentAPIKt.requireQuest;
/** /**
* Represents a class used to charter ships. * Represents a class used to charter ships.
* @author 'Vexia * @author 'Vexia
@@ -67,6 +68,9 @@ public final class ShipCharter {
if (destination == null) { if (destination == null) {
return; return;
} }
if (!destination.checkTravel(player)) {
return;
}
final int cost = getCost(player, destination); final int cost = getCost(player, destination);
player.getInterfaceManager().close(); player.getInterfaceManager().close();
player.getDialogueInterpreter().open(4651, Repository.findNPC(4651), destination, cost); player.getDialogueInterpreter().open(4651, Repository.findNPC(4651), destination, cost);
@@ -134,7 +138,12 @@ public final class ShipCharter {
*/ */
public enum Destination { public enum Destination {
CATHERBY(Location.create(2792, 3417, 1), 25, new int[] { 480, 0, 480, 625, 1600, 3250, 1000, 1600, 3200, 3400 }, Location.create(2797, 3414, 0), 3, 14), CATHERBY(Location.create(2792, 3417, 1), 25, new int[] { 480, 0, 480, 625, 1600, 3250, 1000, 1600, 3200, 3400 }, Location.create(2797, 3414, 0), 3, 14),
PORT_PHASMATYS(Location.create(3705, 3503, 1), 24, new int[] { 3650, 3250, 1850, 0, 0, 0, 2050, 1850, 3200, 1100 }, Location.create(3702, 3502, 0), 2, 13), PORT_PHASMATYS(Location.create(3705, 3503, 1), 24, new int[] { 3650, 3250, 1850, 0, 0, 0, 2050, 1850, 3200, 1100 }, Location.create(3702, 3502, 0), 2, 13) {
@Override
public boolean checkTravel(Player player) {
return requireQuest(player, "Priest in Peril", "to go there");
}
},
CRANDOR(new Location(2792, 3417, 1), 32, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, null, 10, 21), CRANDOR(new Location(2792, 3417, 1), 32, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, null, 10, 21),
BRIMHAVEN(Location.create(2763, 3238, 1), 28, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, Location.create(2760, 3238, 0), 6, 17){ BRIMHAVEN(Location.create(2763, 3238, 1), 28, new int[] { 0, 480, 480, 925, 400, 3650, 1600, 400, 3200, 3800 }, Location.create(2760, 3238, 0), 6, 17){
@Override @Override
@@ -322,6 +331,10 @@ public final class ShipCharter {
return null; return null;
} }
public boolean checkTravel(Player player) {
return true;
}
/** /**
* Method used to sail the ship. * Method used to sail the ship.
* @param player the player. * @param player the player.
+15
View File
@@ -2130,4 +2130,19 @@ fun getCredits(player: Player) : Int {
return player.details.accountInfo.credits return player.details.accountInfo.credits
} }
/**
* Asserts that a quest is required, and sends the player "You must have completed the $questName quest $message"
* @param player the player we are checking
* @param questName the name of the quest we are checking for
* @param message the text appended to "You must have completed the $questName quest ..." if the quest is not complete.
* @return whether or not the quest has been completed
*/
fun requireQuest(player: Player, questName: String, message: String) : Boolean {
if (!isQuestComplete(player, questName)) {
sendMessage(player, "You must have completed the $questName quest $message")
return false
}
return true
}
private class ContentAPI private class ContentAPI
@@ -6,7 +6,6 @@ import core.game.component.Component
import core.game.content.dialogue.FacialExpression import core.game.content.dialogue.FacialExpression
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.player.link.TeleportManager import core.game.node.entity.player.link.TeleportManager
import core.game.node.entity.player.link.diary.DiaryType
import core.game.system.task.Pulse import core.game.system.task.Pulse
import core.game.world.map.Location import core.game.world.map.Location
import core.game.world.map.RegionManager import core.game.world.map.RegionManager
@@ -114,8 +113,9 @@ class FairyRingInterface : InterfaceListener{
} catch (e: Exception) { null } } catch (e: Exception) { null }
var tile = ring?.tile var tile = ring?.tile
if(ring == FairyRing.CIP){ if(ring?.checkAccess(player) != true){
sendDialogue(player, "The ring seems to reject you.") sendDialogue(player, "The ring seems to reject you.")
tile = null
} }
if (ring == null || tile == null) { if (ring == null || tile == null) {
val center = Location(2412, 4434, 0) val center = Location(2412, 4434, 0)
@@ -156,7 +156,11 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
AJS(Location.create(2500, 3896, 0), "Islands: Penguins near Miscellania", 21), AJS(Location.create(2500, 3896, 0), "Islands: Penguins near Miscellania", 21),
AKQ(Location.create(2319, 3619, 0), "Kandarin: Piscatoris Hunter area", 23), AKQ(Location.create(2319, 3619, 0), "Kandarin: Piscatoris Hunter area", 23),
AKS(Location.create(2571, 2956, 0), "Feldip Hills: Jungle Hunter area", 25), AKS(Location.create(2571, 2956, 0), "Feldip Hills: Jungle Hunter area", 25),
ALQ(Location.create(3597, 3495, 0), "Morytania: Haunted Woods east of Canifis", 27), ALQ(Location.create(3597, 3495, 0), "Morytania: Haunted Woods east of Canifis", 27) {
override fun checkAccess(player: Player) : Boolean {
return requireQuest(player, "Priest in Peril", "to use this ring.")
}
},
ALS(Location.create(2644, 3495, 0), "Kandarin: McGrubor's Wood", 29), ALS(Location.create(2644, 3495, 0), "Kandarin: McGrubor's Wood", 29),
BIP(Location.create(3410, 3324, 0), "Islands: River Salve", 30), BIP(Location.create(3410, 3324, 0), "Islands: River Salve", 30),
BIQ(Location.create(3251, 3095, 0), "Kharidian Desert: Near Kalphite hive", 31), BIQ(Location.create(3251, 3095, 0), "Kharidian Desert: Near Kalphite hive", 31),
@@ -164,16 +168,28 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
BJR(null, "Other Realms: Realm of the Fisher King", 36), BJR(null, "Other Realms: Realm of the Fisher King", 36),
BKP(Location.create(2385, 3035, 0), "Feldip Hills: South of Castle Wars", 38), BKP(Location.create(2385, 3035, 0), "Feldip Hills: South of Castle Wars", 38),
BKQ(Location.create(3041, 4532, 0), "Other realms: Enchanted Valley", 39), BKQ(Location.create(3041, 4532, 0), "Other realms: Enchanted Valley", 39),
BKR(Location.create(3469, 3431, 0), "Morytania: Mort Myre, south of Canifis", 40), BKR(Location.create(3469, 3431, 0), "Morytania: Mort Myre, south of Canifis", 40) {
override fun checkAccess(player: Player) : Boolean {
return requireQuest(player, "Priest in Peril", "to use this ring.")
}
},
BLP(Location.create(2437, 5126, 0), "Dungeons: TzHaar area", 42), BLP(Location.create(2437, 5126, 0), "Dungeons: TzHaar area", 42),
BLQ(null, "Yu'biusk", 43),//Location.create(2229, 4244, 1) BLQ(null, "Yu'biusk", 43),//Location.create(2229, 4244, 1)
BLR(Location.create(2740, 3351, 0), "Kandarin: Legends' Guild", 44), BLR(Location.create(2740, 3351, 0), "Kandarin: Legends' Guild", 44),
CIP(null, "Islands: Miscellania", 46), //Location.create(2513, 3884, 0) CIP(Location.create(2513, 3884, 0), "Islands: Miscellania", 46) {
override fun checkAccess(player: Player): Boolean {
return requireQuest(player, "Fremennik Trials", "to use this ring.")
}
},
CIQ(Location.create(2528, 3127, 0), "Kandarin: North-west of Yanille", 47), CIQ(Location.create(2528, 3127, 0), "Kandarin: North-west of Yanille", 47),
CJR(Location.create(2705, 3576, 0), "Kandarin: Sinclair Mansion", 52), CJR(Location.create(2705, 3576, 0), "Kandarin: Sinclair Mansion", 52),
CKP(Location.create(2075, 4848, 0), "Other realms: Cosmic Entity's plane", 54), CKP(Location.create(2075, 4848, 0), "Other realms: Cosmic Entity's plane", 54),
CKR(Location.create(2801, 3003, 0), "Karamja: South of Tai Bwo Wannai Village", 56), CKR(Location.create(2801, 3003, 0), "Karamja: South of Tai Bwo Wannai Village", 56),
CKS(Location.create(3447, 3470, 0), "Morytania: Canifis", 57), CKS(Location.create(3447, 3470, 0), "Morytania: Canifis", 57) {
override fun checkAccess(player: Player) : Boolean {
return requireQuest(player, "Priest in Peril", "to use this ring.")
}
},
CLP(Location.create(3082, 3206, 0), "Islands: South of Draynor Village", 58), CLP(Location.create(3082, 3206, 0), "Islands: South of Draynor Village", 58),
CLS(Location.create(2682, 3081, 0), "Islands: Jungle spiders near Yanille", 61), CLS(Location.create(2682, 3081, 0), "Islands: Jungle spiders near Yanille", 61),
DIR(Location.create(3038, 5348, 0), "Other realms: Goraks' Plane", 64), DIR(Location.create(3038, 5348, 0), "Other realms: Goraks' Plane", 64),
@@ -187,6 +203,10 @@ enum class FairyRing(val tile: Location?, val tip: String = "", val childId: Int
DLR(Location.create(2213, 3099, 0), "Islands: Poison Waste south of Isafdar", 76), DLR(Location.create(2213, 3099, 0), "Islands: Poison Waste south of Isafdar", 76),
AIS(null), AIP(null), AKP(null), FAIRY_HOME(Location.create(2412, 4434, 0)); AIS(null), AIP(null), AKP(null), FAIRY_HOME(Location.create(2412, 4434, 0));
open fun checkAccess(player: Player) : Boolean {
return true
}
companion object { companion object {
/** /**
* Draws the travel log. * Draws the travel log.