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:
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user