Christmas crackers

0 comments

This is made for Hyperion but can easily be converted.

Handles the item on player packet + Christmas crackers. Don't tell me it automatically gives the party hat to the player who pulled the cracker, I know that. It use to be this way until RWT turned into a big problem on RuneScape, but I don't think people who have a RSPS server give a shit about that.

In the stackable item array, so far it only contains money and rune arrows.
The misc item array only contains rune armor.

My documentation explains the code.

In your content folder make a new class called ChristmasCracker and add this in it:

Code: [Select]
package org.hyperion.rs2.model.content;

import org.hyperion.rs2.model.Item;
import org.hyperion.rs2.model.Player;

/**
 * Handles Christmas crackers.
 *
 * @author Ryan Greene
 *
 */
public class ChristmasCracker {

        /**
         * The array storing part hat ID's.
         */
        private static final short[] PARTY_HATS = { 1038, 1040, 1042, 1044, 1046,
                        1048 };

        /**
         * Stackable item rewards like coins.
         */
        private static final short[][] STACKABLE_ITEMS = {
                        { 995, generateRandomNumber(50000) },
                        { 892, generateRandomNumber(500) } };

        /**
         * Misc item rewards like armor.
         */
        private static final short[] MISC_ITEMS = { 1079, 1093, 1127, 1163, 1201 };

        /**
         * The cracker ID.
         */
        private static final short CRACKER_ID = 962;

        /**
         * The player that didn't win the party hat.
         */
        Player loser;

        /**
         * Pulls the Christmas cracker and gives the rewards.
         *
         * @param puller
         *            The player that pulled the cracker.
         * @param target
         *            The player that the cracker was used on.
         */
        public static void pullCracker(Player puller, Player target) {
                if (target.getInventory().freeSlots() <= 2) {
                        puller.getActionSender().sendMessage(
                                        "Your target doesn't have enough inventory space!");
                        return;
                }
                if (puller.getInventory().freeSlots() <= 2) {
                        puller.getActionSender().sendMessage(
                                        "You don't have enough inventory space!");
                        return;
                }
                Player winner = generateRandomNumber(1) == 0 ? puller : target;
                Player loser = winner == puller ? target : puller;

                int partyHat = generateRandomNumber(PARTY_HATS.length);
                int stackableItem = generateRandomNumber(STACKABLE_ITEMS.length);
                int miscItem = generateRandomNumber(MISC_ITEMS.length);

                puller.getInventory().remove(new Item(CRACKER_ID));
                winner.getInventory().add(new Item(PARTY_HATS[partyHat]));
                loser.getInventory().add(
                                new Item(STACKABLE_ITEMS[stackableItem][0],
                                                STACKABLE_ITEMS[stackableItem][1]));
                loser.getInventory().add(new Item(MISC_ITEMS[miscItem]));

                winner.getActionSender().sendMessage(
                                "Congrats! You have won the party hat!");
                loser.getActionSender().sendMessage(
                                "Drats! You didn't win the party hat!");
        }

        /**
         * Generates a random number.
         *
         * @param number
         *            Generates a number between 0 and (number).
         * @return The generated number.
         */
        private static short generateRandomNumber(int number) {
                return (short) new java.util.Random().nextInt(number + 1);
        }
}

In your packet package make a new class called ItemOnItemPacketHandler and add this in it:

Code: [Select]
package org.hyperion.rs2.packet;

import org.hyperion.rs2.model.Player;
import org.hyperion.rs2.model.World;
import org.hyperion.rs2.model.content.ChristmasCracker;
import org.hyperion.rs2.net.Packet;

/**
 * Handles the item on player packet.
 *
 * @author Ryan Greene
 *
 */
public class ItemOnPlayerPacketHandler implements PacketHandler {

        @Override
        public void handle(Player player, Packet packet) {
                @SuppressWarnings("unused")
                final int playerIndex = packet.getShortA();
                final int playerId = packet.getShort();
                final int itemId = packet.getShort();
                @SuppressWarnings("unused")
                final int itemSlot = packet.getLEShortA();
                final Player target = (Player) World.getWorld().getPlayers().get(
                                playerId);
                if (itemId == 962) {
                        ChristmasCracker.pullCracker(player, target);
                }
        }
}

In your configuration file in your data folder add this:

Code: [Select]
#    item used on a player
packetHandlers[14]: org.hyperion.rs2.packet.ItemOnPlayerPacketHandler

The reason the puller and the target need at least two inventory space is because the loser will receive two items.

comments (0)

Post a Comment