Fixed amulet of glory teleport destination for Al-Kharid
Fixed amulet of glory destination spelling Mounted amulet of glory fixes Fixed some examine texts Fixed POH portal build requirements Fixed some related typos Corrected teleport location for Draynor Village Fixed bug where random events could interrupt teleports Enabled the Burgh de Rott star location Rewrote enchanted jewellery teleports Improved replacement of spent slayer rings
This commit is contained in:
@@ -19168,87 +19168,87 @@
|
|||||||
"ids": "13614"
|
"ids": "13614"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Varrock",
|
"examine": "A gateway to Varrock.",
|
||||||
"ids": "13615"
|
"ids": "13615"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Lumbridge",
|
"examine": "A gateway to Lumbridge.",
|
||||||
"ids": "13616"
|
"ids": "13616"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Falador",
|
"examine": "A gateway to Falador.",
|
||||||
"ids": "13617"
|
"ids": "13617"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Camelot",
|
"examine": "A gateway to Camelot.",
|
||||||
"ids": "13618"
|
"ids": "13618"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Ardougne",
|
"examine": "A gateway to Ardougne.",
|
||||||
"ids": "13619"
|
"ids": "13619"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to the Yanille watchtower",
|
"examine": "A gateway to the Yanille watchtower.",
|
||||||
"ids": "13620"
|
"ids": "13620"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Trollheim",
|
"examine": "A gateway to Kharyrll.",
|
||||||
"ids": "13621"
|
"ids": "13621"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Varrock",
|
"examine": "A gateway to Varrock.",
|
||||||
"ids": "13622"
|
"ids": "13622"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Lumbridge",
|
"examine": "A gateway to Lumbridge.",
|
||||||
"ids": "13623"
|
"ids": "13623"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Falador",
|
"examine": "A gateway to Falador.",
|
||||||
"ids": "13624"
|
"ids": "13624"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Camelot",
|
"examine": "A gateway to Camelot.",
|
||||||
"ids": "13625"
|
"ids": "13625"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Ardougne",
|
"examine": "A gateway to Ardougne.",
|
||||||
"ids": "13626"
|
"ids": "13626"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to the Yanille watchtower",
|
"examine": "A gateway to the Yanille watchtower.",
|
||||||
"ids": "13627"
|
"ids": "13627"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Trollheim",
|
"examine": "A gateway to Kharyrll.",
|
||||||
"ids": "13628"
|
"ids": "13628"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Varrock",
|
"examine": "A gateway to Varrock.",
|
||||||
"ids": "13629"
|
"ids": "13629"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Lumbridge",
|
"examine": "A gateway to Lumbridge.",
|
||||||
"ids": "13630"
|
"ids": "13630"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Falador",
|
"examine": "A gateway to Falador.",
|
||||||
"ids": "13631"
|
"ids": "13631"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Camelot",
|
"examine": "A gateway to Camelot.",
|
||||||
"ids": "13632"
|
"ids": "13632"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Ardougne",
|
"examine": "A gateway to Ardougne.",
|
||||||
"ids": "13633"
|
"ids": "13633"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to the Yanille watchtower",
|
"examine": "A gateway to the Yanille watchtower.",
|
||||||
"ids": "13634"
|
"ids": "13634"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "A gateway to Trollheim",
|
"examine": "A gateway to Kharyrll.",
|
||||||
"ids": "13635"
|
"ids": "13635"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,11 +11,13 @@ 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.item.Item
|
import core.game.node.item.Item
|
||||||
import core.game.system.task.Pulse
|
import core.game.system.task.Pulse
|
||||||
|
import core.game.world.GameWorld
|
||||||
import core.game.world.map.Location
|
import core.game.world.map.Location
|
||||||
import core.game.world.update.flag.context.Animation
|
import core.game.world.update.flag.context.Animation
|
||||||
import core.game.world.update.flag.context.Graphics
|
import core.game.world.update.flag.context.Graphics
|
||||||
import org.rs09.consts.Items
|
import org.rs09.consts.Items
|
||||||
import core.game.world.GameWorld.Pulser
|
import core.game.world.GameWorld.Pulser
|
||||||
|
import core.tools.Log
|
||||||
import org.rs09.consts.Sounds
|
import org.rs09.consts.Sounds
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -73,17 +75,17 @@ enum class EnchantedJewellery(
|
|||||||
),
|
),
|
||||||
AMULET_OF_GLORY(
|
AMULET_OF_GLORY(
|
||||||
arrayOf(
|
arrayOf(
|
||||||
"Edgeville.",
|
"Edgeville",
|
||||||
"Karamja.",
|
"Karamja",
|
||||||
"Draynor Village.",
|
"Draynor Village",
|
||||||
"Al-Kharid.",
|
"Al Kharid",
|
||||||
"Nowhere."
|
"Nowhere"
|
||||||
),
|
),
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Location.create(3087, 3495, 0),
|
Location.create(3087, 3495, 0),
|
||||||
Location.create(2919, 3175, 0),
|
Location.create(2919, 3175, 0),
|
||||||
Location.create(3104, 3249, 0),
|
Location.create(3104, 3249, 0),
|
||||||
Location.create(3304, 3124, 0)
|
Location.create(3292, 3175, 0)
|
||||||
),
|
),
|
||||||
Items.AMULET_OF_GLORY4_1712,
|
Items.AMULET_OF_GLORY4_1712,
|
||||||
Items.AMULET_OF_GLORY3_1710,
|
Items.AMULET_OF_GLORY3_1710,
|
||||||
@@ -209,7 +211,7 @@ enum class EnchantedJewellery(
|
|||||||
constructor(options: Array<String>, locations: Array<Location>, vararg ids: Int) : this(options, locations, false, *ids)
|
constructor(options: Array<String>, locations: Array<Location>, vararg ids: Int) : this(options, locations, false, *ids)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method used when the player "Use"s the jewellery piece.
|
* Method used when the player clicks one of the options in the jewellery piece's options dialog.
|
||||||
* @param player the player.
|
* @param player the player.
|
||||||
* @param item the used jewellery item.
|
* @param item the used jewellery item.
|
||||||
* @param buttonID the button id.
|
* @param buttonID the button id.
|
||||||
@@ -222,7 +224,7 @@ enum class EnchantedJewellery(
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
attemptTeleport(player, item, buttonID, isEquipped)
|
attemptTeleport(player, item, buttonID, true, isEquipped)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -230,43 +232,69 @@ enum class EnchantedJewellery(
|
|||||||
* @param player the player.
|
* @param player the player.
|
||||||
* @param item the used jewellery item.
|
* @param item the used jewellery item.
|
||||||
* @param buttonID the button id.
|
* @param buttonID the button id.
|
||||||
|
* @param replace Whether to attempt replacing the item with its lower-charge version. Always true unless you generated a fake item in code.
|
||||||
* @param isEquipped If the player is operating.
|
* @param isEquipped If the player is operating.
|
||||||
*/
|
*/
|
||||||
fun attemptTeleport(player: Player, item: Item, buttonID: Int, isEquipped: Boolean): Boolean {
|
fun attemptTeleport(player: Player, item: Item, buttonID: Int, replace: Boolean, isEquipped: Boolean): Boolean {
|
||||||
val itemIndex = getItemIndex(item)
|
val itemIndex = getItemIndex(item)
|
||||||
val nextJewellery = Item(getNext(itemIndex))
|
val nextJewellery = Item(getNext(itemIndex))
|
||||||
if (!canTeleport(player, nextJewellery)) {
|
if (!canTeleport(player, nextJewellery)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
Pulser.submit(object : Pulse(0) {
|
val location = getLocation(buttonID)
|
||||||
private var count = 0
|
player.scripts.delay = GameWorld.ticks + 4
|
||||||
private var location = getLocation(buttonID)
|
queueScript(player, 0, QueueStrength.SOFT) { stage ->
|
||||||
override fun pulse(): Boolean {
|
when (stage) {
|
||||||
when (count) {
|
|
||||||
0 -> {
|
0 -> {
|
||||||
lock(player,4)
|
lock(player, 4)
|
||||||
visualize(player, ANIMATION, GRAPHICS)
|
visualize(player, ANIMATION, GRAPHICS)
|
||||||
playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200)
|
playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200)
|
||||||
player.impactHandler.disabledTicks = 4
|
player.impactHandler.disabledTicks = 4
|
||||||
closeInterface(player)
|
closeInterface(player)
|
||||||
|
return@queueScript delayScript(player, 3)
|
||||||
}
|
}
|
||||||
3 -> {
|
1 -> {
|
||||||
teleport(player,location)
|
teleport(player, location)
|
||||||
resetAnimator(player)
|
resetAnimator(player)
|
||||||
|
unlock(player)
|
||||||
|
player.dispatch(TeleportEvent(TeleportManager.TeleportType.NORMAL, TeleportMethod.JEWELRY, item, location))
|
||||||
|
if (!replace) {
|
||||||
|
return@queueScript stopExecuting(player)
|
||||||
|
}
|
||||||
if (isLastItemIndex(itemIndex)) {
|
if (isLastItemIndex(itemIndex)) {
|
||||||
if (isCrumble) crumbleJewellery(player, item, isEquipped)
|
if (isSlayerRing(item)) {
|
||||||
|
if (isEquipped) {
|
||||||
|
// Remove it now, but only addItemOrDrop the gem after the teleport has procced
|
||||||
|
if (removeItem(player, item, Container.EQUIPMENT)) {
|
||||||
|
return@queueScript delayScript(player, 1)
|
||||||
|
}
|
||||||
|
log(this.javaClass, Log.ERR, "Error replacing slayer ring with enchanted gem (removeItem from equipment)")
|
||||||
|
}
|
||||||
|
// Not equipped -> can replace fluently
|
||||||
|
if (replaceSlot(player, item.slot, Item(Items.ENCHANTED_GEM_4155), item) == item) {
|
||||||
|
return@queueScript stopExecuting(player)
|
||||||
|
}
|
||||||
|
log(this.javaClass, Log.ERR, "Error replacing slayer ring with enchanted gem (replaceSlot)")
|
||||||
|
}
|
||||||
|
// Not slayer ring
|
||||||
|
if (isCrumble) {
|
||||||
|
val removeFrom = if (isEquipped) Container.EQUIPMENT else Container.INVENTORY
|
||||||
|
if (removeItem(player, item, removeFrom)) {
|
||||||
|
return@queueScript stopExecuting(player)
|
||||||
|
}
|
||||||
|
log(this.javaClass, Log.ERR, "Error crumbling jewelry")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
replaceJewellery(player, item, nextJewellery, isEquipped)
|
replaceJewellery(player, item, nextJewellery, isEquipped)
|
||||||
}
|
}
|
||||||
unlock(player)
|
}
|
||||||
player.dispatch(TeleportEvent(TeleportManager.TeleportType.NORMAL, TeleportMethod.JEWELRY, item, location))
|
2 -> {
|
||||||
return true
|
addItemOrDrop(player, Items.ENCHANTED_GEM_4155)
|
||||||
|
sendMessage(player, "Your Ring of Slaying reverts back into a regular enchanted gem.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
count += 1
|
return@queueScript stopExecuting(player)
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,21 +306,6 @@ enum class EnchantedJewellery(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun crumbleJewellery(player: Player, item: Item, isEquipped: Boolean) {
|
|
||||||
if (isEquipped) {
|
|
||||||
removeItem(player, item, Container.EQUIPMENT)
|
|
||||||
} else {
|
|
||||||
removeItem(player, item)
|
|
||||||
}
|
|
||||||
if (isSlayerRing(item)) {
|
|
||||||
queueScript(player, 1, QueueStrength.SOFT) {
|
|
||||||
addItemOrDrop(player, Items.ENCHANTED_GEM_4155)
|
|
||||||
sendMessage(player, "Your Ring of Slaying reverts back into a regular enchanted gem.")
|
|
||||||
return@queueScript stopExecuting(player)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isSlayerRing(item: Item): Boolean {
|
private fun isSlayerRing(item: Item): Boolean {
|
||||||
return (item.id in RING_OF_SLAYING.ids)
|
return (item.id in RING_OF_SLAYING.ids)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando
|
|||||||
"South-west Varrock mine" to Location.create(3176, 3362, 0), // South-west Varrock mine / Champion's Guild mine
|
"South-west Varrock mine" to Location.create(3176, 3362, 0), // South-west Varrock mine / Champion's Guild mine
|
||||||
"Varrock east bank" to Location.create(3259, 3407, 0), // Varrock east bank / Rune shop
|
"Varrock east bank" to Location.create(3259, 3407, 0), // Varrock east bank / Rune shop
|
||||||
"Lumbridge Swamp south-east mine" to Location.create(3227, 3150, 0), // Lumbridge Swamp south-east mine
|
"Lumbridge Swamp south-east mine" to Location.create(3227, 3150, 0), // Lumbridge Swamp south-east mine
|
||||||
//"Burgh de Rott bank" to Location.create(3500, 3219, 0), // Burgh de Rott bank (requires quest to enter)
|
"Burgh de Rott bank" to Location.create(3500, 3219, 0), // Burgh de Rott bank (requires quest to enter)
|
||||||
"Canifis Bank" to Location.create(3504, 3487, 0), // Canifis bank
|
"Canifis Bank" to Location.create(3504, 3487, 0), // Canifis bank
|
||||||
"Mos Le'Harmless bank" to Location.create(3687, 2969, 0), // Mos Le'Harmless bank (requires quest to enter but is currently accessible for Slayer)
|
"Mos Le'Harmless bank" to Location.create(3687, 2969, 0), // Mos Le'Harmless bank (requires quest to enter but is currently accessible for Slayer)
|
||||||
"Gnome stronghold Bank" to Location.create(2460, 3432, 0), // Gnome stronghold bank
|
"Gnome stronghold Bank" to Location.create(2460, 3432, 0), // Gnome stronghold bank
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com
|
|||||||
fun teleportToStar(player: Player) {
|
fun teleportToStar(player: Player) {
|
||||||
val condition: (p: Player) -> Boolean = when (star.location.toLowerCase()) {
|
val condition: (p: Player) -> Boolean = when (star.location.toLowerCase()) {
|
||||||
"canifis bank" -> {p -> requireQuest(p, Quests.PRIEST_IN_PERIL, "to access this.")}
|
"canifis bank" -> {p -> requireQuest(p, Quests.PRIEST_IN_PERIL, "to access this.")}
|
||||||
//"burgh de rott bank" -> {p -> hasRequirement(p, Quests.IN_AID_OF_THE_MYREQUE)} //disabled: crash
|
"burgh de rott bank" -> {p -> hasRequirement(p, Quests.IN_AID_OF_THE_MYREQUE)}
|
||||||
"crafting guild" -> {p -> hasLevelStat(p, Skills.CRAFTING, 40)}
|
"crafting guild" -> {p -> hasLevelStat(p, Skills.CRAFTING, 40)}
|
||||||
"lletya bank" -> {p -> hasRequirement(p, Quests.MOURNINGS_END_PART_I)}
|
"lletya bank" -> {p -> hasRequirement(p, Quests.MOURNINGS_END_PART_I)}
|
||||||
"jatizso mine" -> {p -> hasRequirement(p, Quests.THE_FREMENNIK_ISLES)}
|
"jatizso mine" -> {p -> hasRequirement(p, Quests.THE_FREMENNIK_ISLES)}
|
||||||
@@ -120,7 +120,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com
|
|||||||
1 -> dialogue("WARNING: The star is located in the wilderness.").also { stage++ }
|
1 -> dialogue("WARNING: The star is located in the wilderness.").also { stage++ }
|
||||||
2 -> player.dialogueInterpreter.sendOptions("Teleport to the star?", "Yes", "No").also { stage++ }
|
2 -> player.dialogueInterpreter.sendOptions("Teleport to the star?", "Yes", "No").also { stage++ }
|
||||||
3 -> when (buttonID) {
|
3 -> when (buttonID) {
|
||||||
1 -> end().also { teleportToStar(player) }
|
1 -> teleportToStar(player)
|
||||||
2 -> end()
|
2 -> end()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,15 +50,15 @@ class EnchantedJewelleryListener : InteractionListener {
|
|||||||
jewellery.use(player, item, 0, isEquipped)
|
jewellery.use(player, item, 0, isEquipped)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
openDialogue(player,EnchantedJewelleryDialogueFile(jewellery,item,isEquipped))
|
openDialogue(player,EnchantedJewelleryDialogueFile(jewellery, item, true, isEquipped))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EnchantedJewelleryDialogueFile(val jewellery: EnchantedJewellery, val item: Item, val isEquipped: Boolean) : DialogueFile() {
|
class EnchantedJewelleryDialogueFile(val jewellery: EnchantedJewellery, val item: Item, val replace: Boolean, val isEquipped: Boolean) : DialogueFile() {
|
||||||
override fun handle(componentID: Int, buttonID: Int) {
|
override fun handle(componentID: Int, buttonID: Int) {
|
||||||
when (stage) {
|
when (stage) {
|
||||||
START_DIALOGUE -> {
|
START_DIALOGUE -> {
|
||||||
interpreter!!.sendOptions("Where would you like to go?", *jewellery.options)
|
interpreter!!.sendOptions("Where would you like to teleport to?", *jewellery.options)
|
||||||
stage++
|
stage++
|
||||||
}
|
}
|
||||||
1 -> end().also { jewellery.use(player!!, item, buttonID - 1, isEquipped) }
|
1 -> end().also { jewellery.use(player!!, item, buttonID - 1, isEquipped) }
|
||||||
|
|||||||
@@ -90,8 +90,6 @@ public final class BuildingUtils {
|
|||||||
|
|
||||||
for (int menuIndex = 0; menuIndex < 7; menuIndex++) {
|
for (int menuIndex = 0; menuIndex < 7; menuIndex++) {
|
||||||
int itemsStringOffset = 97 + (menuIndex * 5);
|
int itemsStringOffset = 97 + (menuIndex * 5);
|
||||||
|
|
||||||
//97 +
|
|
||||||
if (menuIndex >= hotspot.getDecorations().length || (hotspot.getDecorations()[menuIndex] != null && hotspot.getDecorations()[menuIndex].isInvisibleNode())) {
|
if (menuIndex >= hotspot.getDecorations().length || (hotspot.getDecorations()[menuIndex] != null && hotspot.getDecorations()[menuIndex].isInvisibleNode())) {
|
||||||
for (int j = 0; j < 5; j++) {
|
for (int j = 0; j < 5; j++) {
|
||||||
player.getPacketDispatch().sendString("", 396, itemsStringOffset + j);
|
player.getPacketDispatch().sendString("", 396, itemsStringOffset + j);
|
||||||
@@ -104,33 +102,14 @@ public final class BuildingUtils {
|
|||||||
Decoration decoration = hotspot.getDecorations()[menuIndex];
|
Decoration decoration = hotspot.getDecorations()[menuIndex];
|
||||||
items[BUILD_INDEXES[menuIndex]] = new Item(decoration.getInterfaceItem());
|
items[BUILD_INDEXES[menuIndex]] = new Item(decoration.getInterfaceItem());
|
||||||
player.getPacketDispatch().sendString(ItemDefinition.forId(decoration.getInterfaceItem()).getName(), 396, itemsStringOffset);
|
player.getPacketDispatch().sendString(ItemDefinition.forId(decoration.getInterfaceItem()).getName(), 396, itemsStringOffset);
|
||||||
boolean hasRequirements = player.getSkills().getLevel(Skills.CONSTRUCTION) >= decoration.getLevel();
|
boolean hasRequirements = player.getSkills().getLevel(Skills.CONSTRUCTION) >= decoration.getLevel(); //nails are checked in buildDecoration
|
||||||
|
Item[] reqItems = decoration.getItems();
|
||||||
|
String[] reqsText = decoration.getReqsText();
|
||||||
for (int j = 0; j < 4; j++) {
|
for (int j = 0; j < 4; j++) {
|
||||||
if (j >= decoration.getItems().length) {
|
if (j < reqItems.length && !player.getInventory().containsItem(reqItems[j])) {
|
||||||
if (j == decoration.getItems().length && decoration.getNailAmount() > 0) {
|
|
||||||
player.getPacketDispatch().sendString("Nails: " + decoration.getNailAmount(), 396, (itemsStringOffset + 1) + j);
|
|
||||||
} else {
|
|
||||||
player.getPacketDispatch().sendString("", 396, (itemsStringOffset + 1) + j);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Item item = decoration.getItems()[j];
|
|
||||||
if (!player.getInventory().containsItem(item)) {
|
|
||||||
hasRequirements = false;
|
hasRequirements = false;
|
||||||
}
|
}
|
||||||
String s = item.getName() + ": " + item.getAmount();
|
player.getPacketDispatch().sendString(reqsText[j], 396, (itemsStringOffset + 1) + j);
|
||||||
/*if (j > 1 && (decoration == Decoration.RUNE_CASE1 || decoration == Decoration.RUNE_CASE2)) {
|
|
||||||
if (j == 3) {
|
|
||||||
offset--;
|
|
||||||
item = decoration.getItems()[++j];
|
|
||||||
s = item.getName() + ": " + item.getAmount();
|
|
||||||
}
|
|
||||||
item = decoration.getItems()[j + 1];
|
|
||||||
s += ", " + item.getName() + ": " + item.getAmount();
|
|
||||||
player.getPacketDispatch().sendString(s, 396, 15 + offset + j);
|
|
||||||
continue;
|
|
||||||
}*/
|
|
||||||
player.getPacketDispatch().sendString(s, 396, (itemsStringOffset + 1) + j);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (hasRequirements) {
|
if (hasRequirements) {
|
||||||
c261Value += (1 << (menuIndex + 1));
|
c261Value += (1 << (menuIndex + 1));
|
||||||
|
|||||||
@@ -454,7 +454,7 @@ public enum Decoration {
|
|||||||
* Quest hall decorations.
|
* Quest hall decorations.
|
||||||
*/
|
*/
|
||||||
ANTIDRAGON_SHIELD(13522, 8282, 47, 280, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ANTI_DRAGON_SHIELD_1540) }, new Item[] { new Item(Items.ANTI_DRAGON_SHIELD_1540) }),
|
ANTIDRAGON_SHIELD(13522, 8282, 47, 280, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ANTI_DRAGON_SHIELD_1540) }, new Item[] { new Item(Items.ANTI_DRAGON_SHIELD_1540) }),
|
||||||
AMULET_OF_GLORY (13523, 8283, 47, 290, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.AMULET_OF_GLORY_1704) }, new Item[] { new Item(Items.AMULET_OF_GLORY_1704) }),
|
AMULET_OF_GLORY (13523, 8283, 47, 290, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.AMULET_OF_GLORY_1704) }, new Item[] { new Item(Items.AMULET_OF_GLORY_1704) }, new String[] { "Teak plank: 3", "Amulet of Glory", "(uncharged): 1" }),
|
||||||
CAPE_OF_LEGENDS (13524, 8284, 47, 300, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.CAPE_OF_LEGENDS_1052) }, new Item[] { new Item(Items.CAPE_OF_LEGENDS_1052) }),
|
CAPE_OF_LEGENDS (13524, 8284, 47, 300, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.CAPE_OF_LEGENDS_1052) }, new Item[] { new Item(Items.CAPE_OF_LEGENDS_1052) }),
|
||||||
KING_ARTHUR (13510, 8285, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ARTHUR_PORTRAIT_7995) }),
|
KING_ARTHUR (13510, 8285, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ARTHUR_PORTRAIT_7995) }),
|
||||||
ELENA (13511, 8286, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ELENA_PORTRAIT_7996) }),
|
ELENA (13511, 8286, 35, 211, new Item[] { new Item(Items.TEAK_PLANK_8780, 3), new Item(Items.ELENA_PORTRAIT_7996) }),
|
||||||
@@ -727,23 +727,42 @@ public enum Decoration {
|
|||||||
private final int[] objectIds;
|
private final int[] objectIds;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If this node should be invisible to user build options
|
* If this node should be invisible to user build options.
|
||||||
*/
|
*/
|
||||||
private boolean invisibleNode;
|
private boolean invisibleNode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new object, no items, no tools, no refund items.
|
* The requirements text to show for this node.
|
||||||
|
*/
|
||||||
|
private String[] reqsText = {"", "", "", ""};
|
||||||
|
|
||||||
|
private String[] generateDefaultReqsText(Item[] items, int nailAmount) {
|
||||||
|
String[] ret = {"", "", "", ""};
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
if (i >= items.length) {
|
||||||
|
if (i == items.length && nailAmount > 0) {
|
||||||
|
ret[i] = "Nails: " + nailAmount;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret[i] = items[i].getName() + ": " + items[i].getAmount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new object, default items, default tools, default refund items, default requirements text.
|
||||||
* @param objectId The object id.
|
* @param objectId The object id.
|
||||||
* @param interfaceItem The item id for the building interface.
|
* @param interfaceItem The item id for the building interface.
|
||||||
* @param level The level required.
|
* @param level The level required.
|
||||||
* @param experience The experience gained.
|
* @param experience The experience gained.
|
||||||
*/
|
*/
|
||||||
Decoration(int objectId, int interfaceItem, int level, int experience) {
|
Decoration(int objectId, int interfaceItem, int level, int experience) {
|
||||||
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, new Item[] {}, new Item[] {});
|
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, new Item[] {}, new Item[] {}, new String[] {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new object, no tools, no refund items.
|
* Constructs a new object, default tools, default refund items, default requirements text.
|
||||||
* @param objectId The object id.
|
* @param objectId The object id.
|
||||||
* @param interfaceItem The item id for the building interface.
|
* @param interfaceItem The item id for the building interface.
|
||||||
* @param level The level required.
|
* @param level The level required.
|
||||||
@@ -751,11 +770,12 @@ public enum Decoration {
|
|||||||
* @param items The items required.
|
* @param items The items required.
|
||||||
*/
|
*/
|
||||||
Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items) {
|
Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items) {
|
||||||
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, new Item[] {});
|
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, new Item[] {}, new String[] {});
|
||||||
|
this.reqsText = generateDefaultReqsText(items, getNailAmount());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new object, no refund items.
|
* Constructs a new object, default refund items, default requirements text.
|
||||||
* @param objectId The object id.
|
* @param objectId The object id.
|
||||||
* @param interfaceItem The item id for the building interface.
|
* @param interfaceItem The item id for the building interface.
|
||||||
* @param level The level required.
|
* @param level The level required.
|
||||||
@@ -764,7 +784,8 @@ public enum Decoration {
|
|||||||
* @param items The items required.
|
* @param items The items required.
|
||||||
*/
|
*/
|
||||||
Decoration(int objectId, int interfaceItem, int level, int experience, int[] tools, Item[] items) {
|
Decoration(int objectId, int interfaceItem, int level, int experience, int[] tools, Item[] items) {
|
||||||
this(objectId, interfaceItem, level, experience, tools, items, new Item[] {});
|
this(objectId, interfaceItem, level, experience, tools, items, new Item[] {}, new String[] {});
|
||||||
|
this.reqsText = generateDefaultReqsText(items, getNailAmount());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -777,7 +798,21 @@ public enum Decoration {
|
|||||||
* @param refundItems The items to be refunded when the item is removed.
|
* @param refundItems The items to be refunded when the item is removed.
|
||||||
*/
|
*/
|
||||||
Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items, Item[] refundItems) {
|
Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items, Item[] refundItems) {
|
||||||
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, refundItems);
|
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, refundItems, new String[] {});
|
||||||
|
this.reqsText = generateDefaultReqsText(items, getNailAmount());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new object, default tools.
|
||||||
|
* @param objectId The object id.
|
||||||
|
* @param interfaceItem The item id for the building interface.
|
||||||
|
* @param level The level required.
|
||||||
|
* @param experience The experience gained.
|
||||||
|
* @param items The items required.
|
||||||
|
* @param refundItems The items to be refunded when the item is removed.
|
||||||
|
*/
|
||||||
|
Decoration(int objectId, int interfaceItem, int level, int experience, Item[] items, Item[] refundItems, String[] reqsText) {
|
||||||
|
this(objectId, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, refundItems, reqsText);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -789,8 +824,9 @@ public enum Decoration {
|
|||||||
* @param tools The tools needed.
|
* @param tools The tools needed.
|
||||||
* @param items The items required.
|
* @param items The items required.
|
||||||
* @param refundItems The items to be refunded when the item is removed.
|
* @param refundItems The items to be refunded when the item is removed.
|
||||||
|
* @param reqsText The requirements text to be shown in the interface.
|
||||||
*/
|
*/
|
||||||
Decoration(int objectId, int interfaceItem, int level, int experience, int[] tools, Item[] items, Item[] refundItems) {
|
Decoration(int objectId, int interfaceItem, int level, int experience, int[] tools, Item[] items, Item[] refundItems, String[] reqsText) {
|
||||||
this.objectId = objectId;
|
this.objectId = objectId;
|
||||||
this.objectIds = null;
|
this.objectIds = null;
|
||||||
this.interfaceItem = interfaceItem;
|
this.interfaceItem = interfaceItem;
|
||||||
@@ -799,6 +835,9 @@ public enum Decoration {
|
|||||||
this.tools = tools;
|
this.tools = tools;
|
||||||
this.items = items;
|
this.items = items;
|
||||||
this.refundItems = refundItems;
|
this.refundItems = refundItems;
|
||||||
|
if (reqsText.length > 0) {
|
||||||
|
System.arraycopy(reqsText, 0, this.reqsText, 0, reqsText.length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -822,18 +861,6 @@ public enum Decoration {
|
|||||||
Decoration(int[] objectIds, int interfaceItem, int level, int experience, Item[] items) {
|
Decoration(int[] objectIds, int interfaceItem, int level, int experience, Item[] items) {
|
||||||
this(objectIds, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, new Item[] {});
|
this(objectIds, interfaceItem, level, experience, new int[] { Items.HAMMER_2347, Items.SAW_8794 }, items, new Item[] {});
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Constructs a new object no refund items.
|
|
||||||
* @param objectIds The object id.
|
|
||||||
* @param interfaceItem The item id for the building interface.
|
|
||||||
* @param level The level required.
|
|
||||||
* @param experience The experience gained.
|
|
||||||
* @param tools The tools needed.
|
|
||||||
* @param items The items required.
|
|
||||||
*/
|
|
||||||
Decoration(int[] objectIds, int interfaceItem, int level, int experience, int[] tools, Item[] items) {
|
|
||||||
this(objectIds, interfaceItem, level, experience, tools, items, new Item[] {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new object.
|
* Constructs a new object.
|
||||||
@@ -1000,4 +1027,12 @@ public enum Decoration {
|
|||||||
public boolean isInvisibleNode() {
|
public boolean isInvisibleNode() {
|
||||||
return invisibleNode;
|
return invisibleNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the requirements text.
|
||||||
|
* @return The requirements text.
|
||||||
|
*/
|
||||||
|
public String[] getReqsText() {
|
||||||
|
return reqsText;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-5
@@ -1,6 +1,7 @@
|
|||||||
package content.global.skill.construction.decoration.portalchamber;
|
package content.global.skill.construction.decoration.portalchamber;
|
||||||
|
|
||||||
|
|
||||||
|
import content.data.Quests;
|
||||||
import content.global.skill.construction.Hotspot;
|
import content.global.skill.construction.Hotspot;
|
||||||
import content.global.skill.runecrafting.Rune;
|
import content.global.skill.runecrafting.Rune;
|
||||||
import core.cache.def.impl.SceneryDefinition;
|
import core.cache.def.impl.SceneryDefinition;
|
||||||
@@ -18,6 +19,7 @@ import core.plugin.Plugin;
|
|||||||
import core.plugin.ClassScanner;
|
import core.plugin.ClassScanner;
|
||||||
|
|
||||||
import static content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.ARDOUGNE_TELE_ATTRIBUTE;
|
import static content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.ARDOUGNE_TELE_ATTRIBUTE;
|
||||||
|
import static core.api.ContentAPIKt.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PortalChamberPlugin
|
* PortalChamberPlugin
|
||||||
@@ -89,15 +91,14 @@ public class PortalChamberPlugin extends OptionHandler {
|
|||||||
}
|
}
|
||||||
for (Locations l : Locations.values()) {
|
for (Locations l : Locations.values()) {
|
||||||
if (l.name().contains(identifier)) {
|
if (l.name().contains(identifier)) {
|
||||||
if (l == Locations.ARDOUGNE){
|
if ((l == Locations.ARDOUGNE && !getAttribute(player, ARDOUGNE_TELE_ATTRIBUTE, false)) ||
|
||||||
if (!player.getAttribute(ARDOUGNE_TELE_ATTRIBUTE, false)) {
|
(l == Locations.KHARYRLL && !isQuestComplete(player, Quests.DESERT_TREASURE))) {
|
||||||
player.sendMessage("You do not have the requirements to direct the portal there");
|
sendMessage(player, "You do not have the requirements to direct the portal there.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Item[] runes = l.runes;
|
Item[] runes = l.runes;
|
||||||
if (!player.getInventory().containsItems(runes)) {
|
if (!player.getInventory().containsItems(runes)) {
|
||||||
player.sendMessage("You do not have the required runes to build this portal");
|
sendMessage(player, "You do not have the required runes to build this portal.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
player.getInventory().remove(runes);
|
player.getInventory().remove(runes);
|
||||||
|
|||||||
+23
-28
@@ -1,53 +1,53 @@
|
|||||||
package content.global.skill.construction.decoration.questhall
|
package content.global.skill.construction.decoration.questhall
|
||||||
|
|
||||||
|
import content.data.EnchantedJewellery
|
||||||
|
import content.global.handlers.item.EnchantedJewelleryListener.EnchantedJewelleryDialogueFile
|
||||||
|
import core.api.delayScript
|
||||||
|
import core.api.lock
|
||||||
|
import core.api.openDialogue
|
||||||
import core.api.playGlobalAudio
|
import core.api.playGlobalAudio
|
||||||
|
import core.api.queueScript
|
||||||
|
import core.api.resetAnimator
|
||||||
|
import core.api.stopExecuting
|
||||||
import core.api.teleport
|
import core.api.teleport
|
||||||
|
import core.api.visualize
|
||||||
import core.game.interaction.IntType
|
import core.game.interaction.IntType
|
||||||
import core.game.interaction.InteractionListener
|
import core.game.interaction.InteractionListener
|
||||||
|
import core.game.interaction.QueueStrength
|
||||||
import core.game.node.Node
|
import core.game.node.Node
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.node.item.Item
|
import core.game.node.item.Item
|
||||||
import core.game.node.scenery.Scenery
|
import core.game.node.scenery.Scenery
|
||||||
import core.game.system.task.Pulse
|
|
||||||
import core.game.world.map.Location
|
|
||||||
import core.game.world.update.flag.context.Animation
|
import core.game.world.update.flag.context.Animation
|
||||||
import core.game.world.update.flag.context.Graphics
|
import core.game.world.update.flag.context.Graphics
|
||||||
import org.rs09.consts.Items
|
import org.rs09.consts.Items
|
||||||
import org.rs09.consts.Sounds
|
import org.rs09.consts.Sounds
|
||||||
import java.util.concurrent.Executors
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
|
|
||||||
class MountedGlory : InteractionListener {
|
class MountedGlory : InteractionListener {
|
||||||
|
|
||||||
val MOUNTED_GLORY = 13523
|
val MOUNTED_GLORY = 13523
|
||||||
|
val TELEPORTS = EnchantedJewellery.AMULET_OF_GLORY.locations
|
||||||
val TELEPORTS = arrayOf(
|
|
||||||
Location.create(3087, 3495, 0),
|
|
||||||
Location.create(2919, 3175, 0),
|
|
||||||
Location.create(3104, 3249, 0),
|
|
||||||
Location.create(3304, 3124, 0)
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun defineListeners() {
|
override fun defineListeners() {
|
||||||
on(MOUNTED_GLORY, IntType.SCENERY, "Edgeville") { player, `object` ->
|
on(MOUNTED_GLORY, IntType.SCENERY, "Edgeville") { player, `object` ->
|
||||||
mountedGloryAction(player, `object`, 0)
|
mountedGloryAction(player, `object`, 0)
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
on(MOUNTED_GLORY, IntType.SCENERY, "Karamja") { player, `object` ->
|
on(MOUNTED_GLORY, IntType.SCENERY, "Karamja") { player, `object` ->
|
||||||
mountedGloryAction(player, `object`, 1)
|
mountedGloryAction(player, `object`, 1)
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
on(MOUNTED_GLORY, IntType.SCENERY, "Draynor Village") { player, `object` ->
|
on(MOUNTED_GLORY, IntType.SCENERY, "Draynor Village") { player, `object` ->
|
||||||
mountedGloryAction(player, `object`, 2)
|
mountedGloryAction(player, `object`, 2)
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
|
||||||
on(MOUNTED_GLORY, IntType.SCENERY, "Al Kharid") { player, `object` ->
|
on(MOUNTED_GLORY, IntType.SCENERY, "Al Kharid") { player, `object` ->
|
||||||
mountedGloryAction(player, `object`, 3)
|
mountedGloryAction(player, `object`, 3)
|
||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
|
on(MOUNTED_GLORY, IntType.SCENERY, "Rub") { player, _ ->
|
||||||
|
openDialogue(player,EnchantedJewelleryDialogueFile(EnchantedJewellery.AMULET_OF_GLORY, Item(Items.AMULET_OF_GLORY4_1712), false, false))
|
||||||
|
return@on true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private fun mountedGloryAction(player : Player, `object` : Node, int : Int) {
|
private fun mountedGloryAction(player : Player, `object` : Node, int : Int) {
|
||||||
if (player.houseManager.isBuildingMode) {
|
if (player.houseManager.isBuildingMode) {
|
||||||
@@ -57,21 +57,16 @@ class MountedGlory : InteractionListener {
|
|||||||
if (!player.zoneMonitor.teleport(1, Item(Items.AMULET_OF_GLORY_1704))) {
|
if (!player.zoneMonitor.teleport(1, Item(Items.AMULET_OF_GLORY_1704))) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Executors.newSingleThreadScheduledExecutor().schedule({
|
queueScript(player, 0, QueueStrength.SOFT) { stage ->
|
||||||
player.pulseManager.run(object : Pulse() {
|
if (stage == 0) {
|
||||||
var counter = 0
|
lock(player, 4)
|
||||||
override fun pulse(): Boolean {
|
visualize(player, Animation(714), Graphics(308, 100, 50))
|
||||||
when (counter++) {
|
|
||||||
1 -> {
|
|
||||||
player.lock(5)
|
|
||||||
player.visualize(Animation(714), Graphics(308, 100, 50))
|
|
||||||
playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200)
|
playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200)
|
||||||
|
return@queueScript delayScript(player, 3)
|
||||||
}
|
}
|
||||||
4 -> player.animator.reset().also { teleport(player, TELEPORTS[int]) }
|
resetAnimator(player)
|
||||||
|
teleport(player, TELEPORTS[int])
|
||||||
|
return@queueScript stopExecuting(player)
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}, 0, TimeUnit.SECONDS)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-98
@@ -1,98 +0,0 @@
|
|||||||
package content.global.skill.construction.decoration.questhall;
|
|
||||||
|
|
||||||
|
|
||||||
import core.cache.def.impl.SceneryDefinition;
|
|
||||||
import core.game.dialogue.DialogueAction;
|
|
||||||
import core.game.dialogue.DialogueInterpreter;
|
|
||||||
import core.game.interaction.OptionHandler;
|
|
||||||
import core.game.node.Node;
|
|
||||||
import core.game.node.entity.player.Player;
|
|
||||||
import core.game.system.task.Pulse;
|
|
||||||
import core.game.world.GameWorld;
|
|
||||||
import core.game.world.map.Location;
|
|
||||||
import core.game.world.update.flag.context.Animation;
|
|
||||||
import core.game.world.update.flag.context.Graphics;
|
|
||||||
import core.plugin.Initializable;
|
|
||||||
import core.plugin.Plugin;
|
|
||||||
import org.rs09.consts.Sounds;
|
|
||||||
|
|
||||||
import static core.api.ContentAPIKt.playGlobalAudio;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles the POH Mounted Glory.
|
|
||||||
* @author Splinter
|
|
||||||
*/
|
|
||||||
@Initializable
|
|
||||||
public class MountedGloryPlugin extends OptionHandler {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the teleport animation.
|
|
||||||
*/
|
|
||||||
private static final Animation ANIMATION = new Animation(714);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the graphics to use.
|
|
||||||
*/
|
|
||||||
private static final Graphics GRAPHICS = new Graphics(308, 100, 50);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Plugin<Object> newInstance(Object arg) throws Throwable {
|
|
||||||
SceneryDefinition.forId(13523).getHandlers().put("option:rub", this);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(Player player, Node node, String option) {
|
|
||||||
DialogueInterpreter interpreter = player.getDialogueInterpreter();
|
|
||||||
interpreter.sendOptions("Select a location.", "Edgeville", "Karamja", "Draynor Village", "Al-Kharid", "Nowhere.");
|
|
||||||
interpreter.addAction(new DialogueAction() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(Player player, int buttonId) {
|
|
||||||
switch (buttonId) {
|
|
||||||
case 2:
|
|
||||||
teleport(player, Location.create(3087, 3495, 0));
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
teleport(player, Location.create(2919, 3175, 0));
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
teleport(player, Location.create(3081, 3250, 0));
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
teleport(player, Location.create(3304, 3124, 0));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method used to teleport to a location.
|
|
||||||
* @param player the player.
|
|
||||||
* @param location the location.
|
|
||||||
*/
|
|
||||||
private boolean teleport(final Player player, final Location location) {
|
|
||||||
if (player.isTeleBlocked()) {
|
|
||||||
player.sendMessage("A magical force has stopped you from teleporting.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
player.lock();
|
|
||||||
player.visualize(ANIMATION, GRAPHICS);
|
|
||||||
playGlobalAudio(player.getLocation(), Sounds.TELEPORT_ALL_200);
|
|
||||||
player.getImpactHandler().setDisabledTicks(4);
|
|
||||||
GameWorld.getPulser().submit(new Pulse(4, player) {
|
|
||||||
@Override
|
|
||||||
public boolean pulse() {
|
|
||||||
player.unlock();
|
|
||||||
player.getProperties().setTeleportLocation(location);
|
|
||||||
player.getAnimator().reset();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -418,7 +418,7 @@ fun replaceSlot(player: Player, slot: Int, item: Item, currentItem: Item? = null
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cont.remove(currentItem, slot, true)) {
|
if (cont.remove(currentItem, slot, true)) {
|
||||||
return cont.replace(item, slot)
|
return cont.replace(item, slot) ?: currentItem
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerMonitor.log(player, LogType.DUPE_ALERT, "Potential slot-replacement-based dupe attempt, slot: $slot, item: $item")
|
PlayerMonitor.log(player, LogType.DUPE_ALERT, "Potential slot-replacement-based dupe attempt, slot: $slot, item: $item")
|
||||||
@@ -426,8 +426,9 @@ fun replaceSlot(player: Player, slot: Int, item: Item, currentItem: Item? = null
|
|||||||
Container.INVENTORY -> Container.EQUIPMENT
|
Container.INVENTORY -> Container.EQUIPMENT
|
||||||
else -> Container.INVENTORY
|
else -> Container.INVENTORY
|
||||||
}
|
}
|
||||||
if (removeItem(player, currentItem, other))
|
if (removeItem(player, currentItem, other)) {
|
||||||
return cont.replace(item, slot)
|
return cont.replace(item, slot) ?: currentItem
|
||||||
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ public final class ImpactHandler {
|
|||||||
int percentage = (int) (entity.getSkills().getStaticLevel(Skills.HITPOINTS) * 0.10);
|
int percentage = (int) (entity.getSkills().getStaticLevel(Skills.HITPOINTS) * 0.10);
|
||||||
if (p.getSkills().getLifepoints() <= percentage) {
|
if (p.getSkills().getLifepoints() <= percentage) {
|
||||||
Item rolItem = new Item(Items.RING_OF_LIFE_2570);
|
Item rolItem = new Item(Items.RING_OF_LIFE_2570);
|
||||||
if (EnchantedJewellery.RING_OF_LIFE.attemptTeleport(p, rolItem, 0, true)) {
|
if (EnchantedJewellery.RING_OF_LIFE.attemptTeleport(p, rolItem, 0, true, true)) {
|
||||||
p.sendMessage("Your ring of life saves you and in the process is destroyed.");
|
p.sendMessage("Your ring of life saves you and in the process is destroyed.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ public class TeleportManager {
|
|||||||
if (teleportType != -1) {
|
if (teleportType != -1) {
|
||||||
if (entity instanceof Player) {
|
if (entity instanceof Player) {
|
||||||
Player p = (Player) entity;
|
Player p = (Player) entity;
|
||||||
|
p.scripts.setDelay(GameWorld.getTicks() + 12);
|
||||||
p.getDialogueInterpreter().close();
|
p.getDialogueInterpreter().close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user