Merge branch 'lock-legends-cape' into 'master'
Lock legends cape behind 40 QP See merge request 2009scape/2009scape!73
This commit is contained in:
@@ -10,6 +10,7 @@ import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Plugin
|
||||
import core.game.node.entity.skill.crafting.TanningProduct
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.game.interaction.InteractionListener
|
||||
|
||||
/**
|
||||
@@ -31,6 +32,16 @@ class NPCTradePlugin : InteractionListener() {
|
||||
}
|
||||
return@on npc.openShop(player)
|
||||
}
|
||||
|
||||
on(NPCs.SIEGFRIED_ERKLE_933, NPC, "trade"){player, node ->
|
||||
val points = ContentAPI.getQP(player)
|
||||
if(points < 40){
|
||||
ContentAPI.sendNPCDialogue(player, NPCs.SIEGFRIED_ERKLE_933, "I'm sorry, adventurer, but you need 40 quest points to buy from me.")
|
||||
return@on true
|
||||
}
|
||||
node.asNpc().openShop(player)
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
|
||||
override fun defineDestinationOverrides() {
|
||||
|
||||
@@ -889,6 +889,18 @@ object ContentAPI {
|
||||
player.packetDispatch.sendPlayerOnInterface(iface,child)
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a dialogue that uses the player's chathead.
|
||||
* @param player the player to send the dialogue to
|
||||
* @param npc the ID of the NPC to use for the chathead
|
||||
* @param msg the message to send.
|
||||
* @param expr the FacialExpression to use. An enum exists for these called FacialExpression. Defaults to FacialExpression.FRIENDLY
|
||||
*/
|
||||
@JvmStatic
|
||||
fun sendNPCDialogue(player: Player, npc: Int, msg: String, expr: FacialExpression = FacialExpression.FRIENDLY){
|
||||
player.dialogueInterpreter.sendDialogues(npc, expr, *DialUtils.splitLines(msg))
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends an animation to a specific interface child
|
||||
* @param player the player to send the packet to
|
||||
@@ -972,4 +984,14 @@ object ContentAPI {
|
||||
fun submitIndividualPulse(entity: Entity, pulse: Pulse){
|
||||
entity.pulseManager.run(pulse)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the number of QP a player has
|
||||
* @param player the player to get the QP for
|
||||
* @return the number of QP the player has
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getQP(player: Player): Int{
|
||||
return player.questRepository.points
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ class EquipHandler : InteractionListener() {
|
||||
fun handleEquip(player: Player,node: Node){
|
||||
val item = node.asItem()
|
||||
|
||||
if(item == null || player.inventory[item.slot] != item){
|
||||
if(item == null || player.inventory[item.slot] != item || item.name.toLowerCase().contains("goblin mail")){
|
||||
return
|
||||
}
|
||||
|
||||
@@ -52,7 +52,9 @@ class EquipHandler : InteractionListener() {
|
||||
return
|
||||
}
|
||||
}
|
||||
InteractionListeners.run(node.id,player,node,true)
|
||||
if(!InteractionListeners.run(node.id,player,node,true)){
|
||||
return
|
||||
}
|
||||
|
||||
val lock = player.locks.equipmentLock
|
||||
if (lock != null && lock.isLocked) {
|
||||
|
||||
@@ -28,10 +28,10 @@ abstract class InteractionListener : Listener{
|
||||
fun onUseWith(type: Int, used: IntArray, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){
|
||||
InteractionListeners.add(type,used,with,handler)
|
||||
}
|
||||
fun onEquip(id: Int, handler: (player: Player, node: Node) -> Unit){
|
||||
fun onEquip(id: Int, handler: (player: Player, node: Node) -> Boolean){
|
||||
InteractionListeners.addEquip(id,handler)
|
||||
}
|
||||
fun onUnequip(id:Int, handler: (player: Player, node: Node) -> Unit){
|
||||
fun onUnequip(id:Int, handler: (player: Player, node: Node) -> Boolean){
|
||||
InteractionListeners.addUnequip(id,handler)
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ object InteractionListeners {
|
||||
private val listeners = HashMap<String,(Player, Node) -> Boolean>(1000)
|
||||
private val useWithListeners = HashMap<String,(Player,Node,Node) -> Boolean>(1000)
|
||||
private val destinationOverrides = HashMap<String,(Node) -> Location>(100)
|
||||
private val equipListeners = HashMap<String,(Player,Node) -> Unit>(10)
|
||||
private val equipListeners = HashMap<String,(Player,Node) -> Boolean>(10)
|
||||
|
||||
@JvmStatic
|
||||
fun add(id: Int, type: Int, option: Array<out String>, method: (Player,Node) -> Boolean){
|
||||
@@ -53,22 +53,22 @@ object InteractionListeners {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun addEquip(id: Int,method: (Player, Node) -> Unit){
|
||||
fun addEquip(id: Int,method: (Player, Node) -> Boolean){
|
||||
equipListeners["equip:$id"] = method
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun addUnequip(id: Int, method: (Player,Node) -> Unit){
|
||||
fun addUnequip(id: Int, method: (Player,Node) -> Boolean){
|
||||
equipListeners["unequip:$id"] = method
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getEquip(id: Int): ((Player,Node) -> Unit)? {
|
||||
fun getEquip(id: Int): ((Player,Node) -> Boolean)? {
|
||||
return equipListeners["equip:$id"]
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getUnequip(id: Int): ((Player,Node) -> Unit)? {
|
||||
fun getUnequip(id: Int): ((Player,Node) -> Boolean)? {
|
||||
return equipListeners["unequip:$id"]
|
||||
}
|
||||
|
||||
@@ -124,11 +124,11 @@ object InteractionListeners {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun run(id: Int, player: Player, node: Node, isEquip: Boolean){
|
||||
fun run(id: Int, player: Player, node: Node, isEquip: Boolean): Boolean{
|
||||
if(isEquip){
|
||||
equipListeners["equip:$id"]?.invoke(player,node)
|
||||
return equipListeners["equip:$id"]?.invoke(player,node)!!
|
||||
} else {
|
||||
equipListeners["unequip:$id"]?.invoke(player,node)
|
||||
return equipListeners["unequip:$id"]?.invoke(player,node)!!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class CulChestItems: InteractionListener() {
|
||||
|
||||
}
|
||||
|
||||
fun alchemize(player: Player, node: Node){
|
||||
fun alchemize(player: Player, node: Node): Boolean{
|
||||
val amount = ContentAPI.amountInInventory(player, node.id) + ContentAPI.amountInEquipment(player, node.id)
|
||||
val coins = amount * ContentAPI.itemDefinition(node.id).value
|
||||
|
||||
@@ -51,5 +51,6 @@ class CulChestItems: InteractionListener() {
|
||||
ContentAPI.addItemOrDrop(player, 995, coins)
|
||||
|
||||
ContentAPI.sendDialogue(player, "The item instantly alchemized itself!")
|
||||
return false //tell equip handler not to equip the gloves at all if they still even exist lel
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package rs09.game.interaction.item
|
||||
|
||||
import api.ContentAPI
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.interaction.InteractionListener
|
||||
|
||||
class LegendsCapeLock : InteractionListener() {
|
||||
override fun defineListeners() {
|
||||
onEquip(Items.CAPE_OF_LEGENDS_1052){player, node ->
|
||||
val points = ContentAPI.getQP(player)
|
||||
if(points < 40) ContentAPI.sendDialogue(player, "You need 40 QP to equip that.")
|
||||
return@onEquip points >= 40
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,10 +23,12 @@ class MistagEasterEgg : InteractionListener() {
|
||||
|
||||
onEquip(ZANIK_RING){player,_ ->
|
||||
player.appearance.transformNPC(NPCs.ZANIK_3712)
|
||||
return@onEquip true
|
||||
}
|
||||
|
||||
onUnequip(ZANIK_RING){player, _ ->
|
||||
player.appearance.transformNPC(-1)
|
||||
return@onUnequip true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user