Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package nl.bartpelle.veteres.content.minigames.raids
- import nl.bartpelle.veteres.content.discord.DiscordBot
- import nl.bartpelle.veteres.content.mechanics.ServerAnnouncements
- import nl.bartpelle.veteres.model.entity.Player
- import nl.bartpelle.veteres.model.item.Item
- import nl.bartpelle.veteres.model.item.ItemContainer
- import java.math.BigDecimal
- import java.math.RoundingMode
- import java.security.SecureRandom
- import java.util.*
- val UNIQUE = 0.2
- val UNCOMMON = 25.0
- val COMMON = 75.0
- val RARE = 0.4
- val VERY_RARE = 0.5
- val ALWAYS = 100.0
- enum class RaidsRewards constructor(itemId: Int, var minimum_amount: Int, var maximum_amount: Int, var chance: Double) {
- OLMLET_PET(20851, 1, 1, VERY_RARE),
- TWISTED_BOW(20997, 1, 1, UNIQUE),
- TWISTED_BUCKLER(21000, 1, 1, UNIQUE),
- ELDER_MAUL(21003, 1, 1, RARE),
- DRAGON_HUNTER_CROSSBOW(21012, 1, 1, UNIQUE),
- DRAGON_CLAWS(13652, 1, 1, RARE),
- DINHS_BULWARK(21015, 1, 1, RARE),
- ANCESTRAL_HAT(21018, 1, 1, UNIQUE),
- ANCESTRAL_ROBE_TOP(21021, 1, 1, UNIQUE),
- ANCESTRAL_ROBE_BOTTOM(21024, 1, 1, UNIQUE),
- DRAGON_HARPOON(21028, 1, 1, RARE),
- DEXTEROUS_PRAYER_SCROLL(21034, 1, 1, RARE),
- KODAI_INSIGNIA(21043, 1, 1, RARE),
- GRIMY_TOADFLAX(3050, 15, 150, UNCOMMON),
- GRIMY_IRIT_LEAF(210, 10, 120, UNCOMMON),
- GRIMY_AVANTOE(212, 5, 110, COMMON),
- GRIMY_KWUARM(214, 10, 100, COMMON),
- GRIMY_SNAPDRAGON(3052, 8, 90, UNCOMMON),
- GRIMY_CADANTINE(216, 12, 90, UNCOMMON),
- GRIMY_LANTADYME(2486, 18, 80, UNCOMMON),
- GRIMY_DWARF_WEED(218, 20, 80, UNCOMMON),
- GRIMY_TORSTOL(220, 5, 70, UNCOMMON),
- TORSTOL_SEED(5304, 7, 21, UNCOMMON),
- DWARF_WEED_SEED(5303, 12, 32, UNCOMMON),
- LANTADYME_SEED(5302, 16, 38, UNCOMMON),
- CADANTINE_SEED(5301, 20, 42, COMMON),
- SNAPDRAGON_SEED(5300, 24, 48, COMMON),
- DRAGON_DART_TIP(11232, 25, 250, UNCOMMON),
- COAL(454, 100, 600, COMMON),
- MITHRIL_ORE(448, 25, 400, COMMON),
- ADAMANT_ORE(450, 9, 430, UNCOMMON),
- RUNITE_ORE(452, 3, 90, UNCOMMON),
- UNCUT_RUBY(1620, 100, 425, COMMON),
- SOUL_RUNE(566, 1000, 4000, COMMON),
- DEATH_RUNE(560, 1000, 4000, COMMON),
- UNCUT_DIAMOND(1618, 50, 250, UNCOMMON),
- //ANCIENT_TABLET(21046, 1, 1, COMMON),
- TEAK_PLANK(8781, 300, 1000, UNCOMMON),
- MAHOGANY_PLANKS(8783, 100, 400, UNCOMMON);
- var itemId: Int = 0
- init {
- this.itemId = if (maximum_amount > 1) itemId else itemId
- }
- companion object {
- fun forItem(itemId: Int): RaidsRewards? {
- for (reward in RaidsRewards.values()) {
- if (reward.itemId == itemId) {
- return reward
- }
- }
- return null
- }
- fun getRewards(player: Player, party: RaidParty): ItemContainer {
- val rewards = ItemContainer(player.world(), 36, ItemContainer.Type.REGULAR)
- var damage = 0
- if (party.groupPoints().containsKey(player.id())) {
- damage = party.groupPoints()[player.id() as Int]!!
- }
- val applicableRewards = ArrayList<RaidsRewards>()
- for (reward in RaidsRewards.values()) {
- val randomChance = player.world().random(2000)
- val randomChance2 = player.world().random(2000)
- val randomChance3 = player.world().random(2000)
- val randomChance4 = player.world().random(2000)
- val randomChance5 = player.world().random(2000)
- val randomChance6 = player.world().random(2000)
- val randomChance7 = player.world().random(2000)
- val randomChance8 = player.world().random(2000)
- val randomChance9 = player.world().random(2000)
- val randomChance10 = player.world().random(2000)
- val chance = if (damage > 3500 && randomChance > 1997) VERY_RARE
- else if (damage > 3500 && randomChance3 > 1997) UNIQUE
- else if (damage > 3500 && randomChance2 > 1996) RARE
- else if (damage > 2000 && randomChance10 > 1998) VERY_RARE
- else if (damage > 2000 && randomChance4 > 1998) UNIQUE
- else if (damage > 2000 && randomChance5 > 1997) RARE
- else if (damage > 800 && randomChance6 > 1999) VERY_RARE
- else if (damage > 800 && randomChance7 > 1999) UNIQUE
- else if (damage > 800 && randomChance8 > 1998) RARE
- else if (damage > 350 && randomChance9 > 150) UNCOMMON else COMMON
- if (reward.chance == chance) {
- applicableRewards.add(reward)
- }
- }
- for (i in 3..6) {
- if (damage > 350) {
- val reward = applicableRewards[player.world().random(applicableRewards.size)]
- rewards.add(Item(reward.itemId, player.world().random(reward.minimum_amount..reward.maximum_amount)))
- for (item in RaidsRewards.values()) {
- if (item.itemId == reward.itemId) {
- if (reward.chance == RARE || reward.chance == UNIQUE || reward.chance == VERY_RARE) {
- player.world().broadcast("<col=6a1a18><img=15> ${player.name()} has received a rare reward from Chambers of Xeric: ${Item(reward.itemId).unnote(player.world()).name(player.world())}!")
- DiscordBot.logRareDrop("News: ${player.name()} has received a ${Item(reward.itemId).unnote(player.world()).name(player.world())} drop from raids!")
- }
- }
- }
- } else {
- player.message("You didn't do enough damage to receive a reward.")
- }
- }
- party.groupPoints().remove(player.id() as Int)
- return rewards
- }
- @JvmStatic
- fun main(args: Array<String>) {
- for (i in 2..500) {
- val shardsAmount = i * 10
- val price:Double = when {
- i <= 19 -> 1.00
- i <= 49 -> 0.90
- i <= 99 -> 0.85
- i <= 299 -> 0.80
- else -> 0.75
- }
- val decimal = BigDecimal(price * i).setScale(2, RoundingMode.DOWN)
- println("${i-2} => array(\n" +
- "\t'pid' => \"${88230014 + i}\", \n" +
- "\t'url' => \"https://secure.bmtmicro.com/cart?CID=8823&PRODUCTID=${88230014 + i}\",\n" +
- "\t'name' => \"$$decimal $shardsAmount Shards\",\n" +
- "\t'shards' => \"$shardsAmount\",\n" +
- "\t'amount' => \"$decimal\",\n" +
- "\t'discount' => \"0\"\n" +
- "),")
- }
- val random = SecureRandom()
- var rewards = ArrayList<Item>()
- val applicableRewards = ArrayList<RaidsRewards>()
- var damage = 1000
- for (i in 0..49) {
- val randomChance = random(250, random)
- val randomChance2 = random(1000, random)
- val randomChance3 = random(1000, random)
- val randomChance4 = random(1000, random)
- val randomChance5 = random(1000, random)
- val randomChance6 = random(450, random)
- val randomChance7 = random(1000, random)
- val randomChance8 = random(1000, random)
- val randomChance9 = random(1000, random)
- for (reward in RaidsRewards.values()) {
- val chance = if (damage > 3500 && randomChance > 249) VERY_RARE
- else if (damage > 3500 && randomChance3 > 995) UNIQUE
- else if (damage > 3500 && randomChance2 > 991) RARE
- else if (damage > 2000 && randomChance4 > 997) UNIQUE
- else if (damage > 2000 && randomChance5 > 993) RARE
- else if (damage > 800 && randomChance6 > 449) VERY_RARE
- else if (damage > 800 && randomChance7 > 999) UNIQUE
- else if (damage > 800 && randomChance8 > 994) RARE
- else if (damage > 350 && randomChance9 > 150) UNCOMMON else COMMON
- if (reward.chance == chance) {
- applicableRewards.add(reward)
- }
- }
- rewards.clear()
- }
- }
- /**
- * @param i Maximum - INCLUSIVE!
- * @return Integer between 1 - MAX
- */
- fun random(i: Int, random: SecureRandom): Int {
- return if (i < 1) {
- 0
- } else random.nextInt(i + 1)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement