Add fun surprise

This commit is contained in:
ceikry
2021-12-04 14:15:01 -06:00
parent 563e7ac404
commit 4cf6bd38a2
3 changed files with 112 additions and 85 deletions
+3 -1
View File
@@ -63,4 +63,6 @@
- Quest point cape/hood no longer unequip on login if wearing QP hood
- Random Event Genie lamps now scale exp correctly
- Void mace now consumes runes correctly
- Add remote kicking support to the Management Server
- Add remote kicking support to the Management Server
- Added Christmas Event :)
< --- ABOVE Released December 4, 2021 https://gitlab.com/2009scape/2009scape/-/tags/Dec-4-2021 ---- >
@@ -1,84 +0,0 @@
package plugin.drops.mystery_box;
import core.cache.def.impl.ItemDefinition;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.node.item.WeightedChanceItem;
import core.plugin.Plugin;
import core.plugin.PluginManifest;
import org.rs09.consts.Items;
import core.tools.RandomFunction;
import core.plugin.Initializable;
import core.tools.StringUtils;
/**
* Handles the mystery box item.
* @author Ceikry
*/
@Initializable
@PluginManifest(name="MysteryBox")
public final class MysteryBoxPlugin extends OptionHandler {
/**
* The rewards recieved from a mystery box.
*/
private static final WeightedChanceItem[] REWARDS = new WeightedChanceItem[] {
new WeightedChanceItem(Items.UNCUT_DIAMOND_1617,1,10),
new WeightedChanceItem(Items.UNCUT_RUBY_1619,1,50),
new WeightedChanceItem(Items.UNCUT_SAPPHIRE_1623,1,60),
new WeightedChanceItem(Items.UNCUT_JADE_1627,1,150),
new WeightedChanceItem(Items.UNCUT_DRAGONSTONE_1631,1,1),
new WeightedChanceItem(Items.MOLTEN_GLASS_1776,25,5),
new WeightedChanceItem(Items.UNCUT_EMERALD_1621,1,60),
new WeightedChanceItem(Items.COINS_995,25,30),
new WeightedChanceItem(Items.COINS_995,250,50),
new WeightedChanceItem(Items.COINS_995,10,80),
new WeightedChanceItem(0,1,100),
new WeightedChanceItem(Items.UNCUT_OPAL_1625,1,150),
new WeightedChanceItem(Items.VIAL_OF_WATER_228,10,25),
new WeightedChanceItem(Items.VARROCK_TELEPORT_8007,10,5),
new WeightedChanceItem(Items.FALADOR_TELEPORT_8009,10,5)
};
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
ItemDefinition.forId(6199).getHandlers().put("option:open", this);
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
final Item item = RandomFunction.rollWeightedChanceTable(REWARDS);
String name = item.getName().toLowerCase();
if(item.getId() == 0){
name = "nothing";
}
final Item box = (Item) node;
if (player.getInventory().remove(box, box.getSlot(), true)) {
String message;
player.lock(1);
if(name.equals("notithing")){
message = "Inside the box you find nothing :(";
} else {
if(item.getAmount() > 1 && item.getId() != 995){
name = name + "s";
}
message = "Inside the box you find " + (item.getAmount() > 1 ? "some" : (StringUtils.isPlusN(name) ? "an" : "a")) + " " + name + "!";
}
player.sendMessage(message);
if(item.getId() != 0)
player.getInventory().add(item);
}
return true;
}
@Override
public boolean isWalk() {
return false;
}
}
@@ -0,0 +1,109 @@
package rs09.game.content.global.worldevents.holiday.christmas
import api.Container
import api.ContentAPI
import core.game.node.entity.player.Player
import core.game.node.entity.skill.Skills
import core.plugin.Initializable
import core.tools.RandomFunction
import org.rs09.consts.Items
import rs09.ServerStore
import rs09.ServerStore.getInt
import rs09.game.content.global.WeightBasedTable
import rs09.game.content.global.WeightedItem
import rs09.game.interaction.InteractionListener
import rs09.game.system.SystemLogger
import rs09.plugin.CorePluginTypes.XPGainPlugin
import rs09.tools.stringtools.colorize
import java.time.Month
import java.util.*
@Initializable
class GiftRollPlugin : XPGainPlugin() {
override fun run(player: Player, skill: Int, amount: Double) {
val numDaily = getDailyGifts(player)
val cooldown = player.getAttribute("christmas-cooldown", 0L)
if(System.currentTimeMillis() < cooldown) return
player.setAttribute("/save:christmas-cooldown", System.currentTimeMillis() + 5000L)
if(System.currentTimeMillis() > cooldown && numDaily < 10 && RandomFunction.roll(15).also { player.debug("Rolling gift: $it") } && amount > 20) {
incrementDailyGifts(player)
ContentAPI.addItemOrDrop(player, Items.MYSTERY_BOX_6199)
ContentAPI.sendMessage(player, colorize("%RMerry Christmas! %GYou randomly receive a mystery box while training ${Skills.SKILL_NAME[skill]}!"))
}
}
private fun getDailyGifts(player: Player) : Int {
return ServerStore.getArchive("daily-xmas-gifts").getInt(player.name)
}
fun incrementDailyGifts(player: Player) {
val start = getDailyGifts(player)
ServerStore.getArchive("daily-xmas-gifts")[player.name] = start + 1
}
override fun fireEvent(identifier: String?, vararg args: Any?): Any {
return Unit
}
}
class XMASMboxHandler : InteractionListener() {
val MBOX = Items.MYSTERY_BOX_6199
override fun defineListeners() {
//disable if it's not december.
//Calendar.MONTH is 0-indexed, Month is 1-indexed. I know. It's dumb. Thanks oracle.
if(Calendar.getInstance().get(Calendar.MONTH) + 1 != Month.DECEMBER.value){
SystemLogger.logInfo("${Calendar.getInstance().get(Calendar.MONTH)} - ${Month.DECEMBER.value}")
return
}
on(MBOX, ITEM, "open"){player, used ->
val item = MBOX_LOOT.roll().first()
if(ContentAPI.removeItem(player, used, Container.INVENTORY)) {
ContentAPI.sendDialogue(player, "You open the gift and find ${item.amount} ${item.name}!")
ContentAPI.addItemOrDrop(player, item.id, item.amount)
}
return@on true
}
}
val MBOX_LOOT = WeightBasedTable.create(
WeightedItem(Items.TOY_HORSEY_2520, 1, 1, 0.025),
WeightedItem(Items.TOY_HORSEY_2522, 1, 1, 0.025),
WeightedItem(Items.TOY_HORSEY_2524, 1, 1, 0.025),
WeightedItem(Items.TOY_HORSEY_2526, 1, 1, 0.025),
WeightedItem(Items.TOY_KITE_12844, 1, 1, 0.025),
WeightedItem(Items.COAL_453, 1, 1, 0.025),
WeightedItem(Items.MOLTEN_GLASS_1776, 25, 100, 0.25),
WeightedItem(Items.FLAX_1780, 15, 70, 0.25),
WeightedItem(Items.UNCUT_SAPPHIRE_1624, 1, 5, 0.15),
WeightedItem(Items.UNCUT_EMERALD_1622, 1, 5, 0.15),
WeightedItem(Items.UNCUT_RUBY_1620, 1, 5, 0.15),
WeightedItem(Items.UNCUT_DIAMOND_1618, 1, 5, 0.15),
WeightedItem(Items.UNCUT_SAPPHIRE_1624, 100, 100, 0.0015),
WeightedItem(Items.UNCUT_EMERALD_1622, 100, 100, 0.0015),
WeightedItem(Items.UNCUT_RUBY_1620, 100, 100, 0.0015),
WeightedItem(Items.UNCUT_DIAMOND_1618, 100, 100, 0.0015),
WeightedItem(Items.PURE_ESSENCE_7937, 1, 50, 0.15),
WeightedItem(Items.PURE_ESSENCE_7937, 1000, 1000, 0.0015),
WeightedItem(Items.RANARR_SEED_5295, 1, 3, 0.065),
WeightedItem(Items.SNAPDRAGON_SEED_5300, 1, 3, 0.065),
WeightedItem(Items.GOLD_CHARM_12158, 1, 15, 0.15),
WeightedItem(Items.CRIMSON_CHARM_12160, 1, 15, 0.15),
WeightedItem(Items.BLUE_CHARM_12163, 1, 15, 0.15),
WeightedItem(Items.GREEN_CHARM_12159, 1, 15, 0.15),
WeightedItem(Items.SPIRIT_SHARDS_12183, 1, 100, 0.15),
WeightedItem(Items.PURPLE_SWEETS_10476, 1, 15, 0.25),
WeightedItem(Items.COINS_995, 100, 1000, 0.15),
WeightedItem(Items.COINS_995, 50000, 100000, 0.0015),
WeightedItem(Items.COINS_995, 1000000, 1000000, 0.0005),
WeightedItem(Items.NATURE_RUNE_561, 1, 10, 0.15),
WeightedItem(Items.ABYSSAL_WHIP_4151, 1, 1, 0.00005),
WeightedItem(Items.SANTA_HAT_1050, 1, 1, 0.00005),
).insertEasyClue(0.075).insertMediumClue(0.05).insertHardClue(0.025).insertRDTRoll(0.015)
}