Advertisement
Arham-4

Master Farmer Pickpocketing

Apr 5th, 2020
746
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.83 KB | None | 0 0
  1. package org.nr.plugins.npc.thieving
  2.  
  3. import com.fasterxml.jackson.databind.ObjectMapper
  4. import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
  5. import com.fasterxml.jackson.module.kotlin.KotlinModule
  6. import com.fasterxml.jackson.module.kotlin.readValue
  7. import org.nr.plugins.items.pojos.category.ChanceCategory
  8. import org.nr.plugins.items.pojos.getRandomWeightedElement
  9. import org.nr.plugins.items.pojos.group.ChanceNamedItemEntryRangedAmountGroup
  10. import org.nr.plugins.items.pojos.individual.asItem
  11. import org.nr.server.content.CheatPrevention
  12. import org.nr.server.model.Animation
  13. import org.nr.server.model.Graphic
  14. import org.nr.server.model.Skill
  15. import org.nr.server.model.entity.npc.Npc
  16. import java.nio.file.Path
  17. import java.nio.file.Paths
  18. import java.util.concurrent.ThreadLocalRandom
  19.  
  20. val masterFarmerNpcId = 2234
  21. val pickpocketOption = 2
  22.  
  23. val mapper: ObjectMapper = ObjectMapper(YAMLFactory()).registerModule(KotlinModule())
  24. val path: Path = Paths.get("data", "def", "yaml", "items", "masterfarmer.yml")
  25. val categories: List<ChanceCategory<ChanceNamedItemEntryRangedAmountGroup>> = mapper.readValue(path.toFile())
  26.  
  27. on_npc_option(masterFarmerNpcId, pickpocketOption) { farmer ->
  28.     player.attemptPickpocketOn(farmer) {
  29.         val groups = categories.getRandomWeightedElement().groups
  30.         val group = groups.getRandomWeightedElement()
  31.         val item = group.items.random().asItem()
  32.  
  33.         player.inventory.add(item)
  34.  
  35.         val plural = item.amount > 1
  36.         player.message("You steal ${if (plural) "some" else "a"} ${item.definition.name}${if (plural) "s" else ""}.")
  37.     }
  38. }
  39.  
  40. fun Player.attemptPickpocketOn(npc: Npc, successAction: () -> Unit) {
  41.     if (!clickDelay.elapsed(2000)) {
  42.         return
  43.     }
  44.     if (CheatPrevention.roll(this)) {
  45.         return
  46.     }
  47.     if (inventory.freeSlots <= 0) {
  48.         message("You don't have free inventory space.")
  49.         return
  50.     }
  51.     val thievingLevel = skillManager.getCurrentLevel(Skill.THIEVING)
  52.     if (thievingLevel < 38) {
  53.         message("You need at least 38 Thieving to pickpocket this NPC.")
  54.         return
  55.     }
  56.     val successChance = (90 + 1.53061224 * (thievingLevel - 1)) / 255
  57.     val roll = ThreadLocalRandom.current().nextDouble()
  58.     debug("successChance = $successChance; roll = $roll")
  59.     if (roll <= successChance) {
  60.         positionToFace = npc.position
  61.         performAnimation(Animation(881))
  62.         successAction()
  63.         packetSender.sendInterfaceRemoval()
  64.         skillManager.addExperience(Skill.THIEVING, 4300)
  65.     } else {
  66.         npc.forceChat("Cor blimey mate, what are ye doing in me pockets?")
  67.         npc.positionToFace = position
  68.         performGraphic(Graphic(80, Graphic.GraphicHeight.HIGH))
  69.         performAnimation(Animation(404))
  70.         stun(ThreadLocalRandom.current().nextInt(7, 11))
  71.     }
  72.     clickDelay.reset()
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement