Add fun surprise
This commit is contained in:
@@ -64,3 +64,5 @@
|
|||||||
- Random Event Genie lamps now scale exp correctly
|
- Random Event Genie lamps now scale exp correctly
|
||||||
- Void mace now consumes runes 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
+109
@@ -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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user