Added missing sounds

Added equipping sounds to all Kitesheilds & sq shields that are currently available 
Added equipping sounds to combat Melee Boots that are currently available 
Added equipping sounds to combat Melee Gloves that are currently available 
Added equipping sounds to all Coifs that are currently available 
Added equipping sounds to all D'hide bodies that are currently available 
Added equipping sounds to all D'hide chaps that are currently available 
Added equipping sounds to all D'hide vambracers that are currently available 
Added equipping sounds to all Bows that are currently available 
Added equipping sounds to all Cross bows that are currently available 
Added equipping sounds to all Javelins that are currently available 
Added equipping sounds to all Knifes that are currently available 
Added equipping sounds to all Darts that are currently available 
Added equipping sounds to all Throwing axes that are currently available 
Added equipping sounds to all Arrows that are currently available 
Added equipping sounds to all Claws that are currently available 
Added equipping sounds to all Halbergs that are currently available 
Added equipping sounds to all Hastae that are currently available 
Added equiping sounds to all Daggers that are currently available 
Added equipping sounds to all Swords that are currently available 
Added equipping sounds to all Longswords that are currently available 
Added equipping sounds to all Scimitars that are currently available 
Added equipping sounds to all 2H swords that are currently available 
Added equipping sounds to all War-hammers that are currently available 
Corrected the incorrect equipping sounds to all staves to the correct sound
Added equipping sound to the Easter ring
Added equipping sound to the Jack lantern mask
Added the correct red nose light animation to the Reindeer hat
Corrected the Chocatrice cape to be the real one in game with the logo in the back and also added the emote to it
Added sounds to the Scythe and corrected its combat animations
Added the Rubber chicken emote "dance" with its music jingle and the chicken "bawk" sound
Added the Ice amulet and the Wintumber tree to Diangos item return since they were missing
Added the correct jingle to the Air guitar emote
This commit is contained in:
Dark Sage 2024-07-13 05:46:28 +00:00 committed by Ryan
parent 6b152bcc8c
commit a44472e559
7 changed files with 2120 additions and 923 deletions

152
Server/README.md Normal file
View file

@ -0,0 +1,152 @@
[![AGPL-3.0 License][license-shield]][license-url]
<br />
<p align="center">
<a href="https://gitlab.com/2009scape/2009scape">
<img src="https://i.imgur.com/RsfVfkB.png" alt="Logo" width="300" height="67">
</a>
<h3 align="center">An open source MMORPG emulation server</h3>
<h1 align="center"><a href="https://2009scape.org/"><strong>Play the live server »</strong></a></h1>
<p align="center">
<br />
<br />
<a href="https://2009scape.org/">Community Hosted Server</a>
·
<a href="https://discord.gg/43YPGND">Discord Invite</a>
· <a href="https://gitlab.com/2009scape/2009scape/-/issues">Report Bug</a>
</p>
<h3>NOTE: Bug reports and support are only accepted by/offered to players of our live hosted server. We will not provide support to those running their own copies.</h3>
## Table of Contents
* [Live Server Information](#live-server-information)
* [History of this Codebase](#history-of-this-codebase)
* [Our Core Values](#our-core-values)
* [Contributing](#contributing)
* [Setup for Content Developers](#content-developers-setting-up-the-project)
* [GitLab Setup](#gitlab-setup)
* [Prerequisites](#prerequisites)
* [Project Setup](#project-setup)
* [Running the project](#running-the-project)
* [License](#license)
* [Contact](#contact)
## Live Server Information
Did you know that the 2009Scape Development Team hosts the main branch of this repo that you can connect to and play? Come join a growing community of people that love to grind out skills, quest, and hangout together. A download link for the launcher can be found [here](https://2009scape.org). Connecting to the live server is also one of the easiest ways to identify bugs/typos/missing features. Identifying these issues help developers, whether already on the project, or are even brand new to the project, fix bugs and issues in an expedited rate.
## History of this Codebase
The 2009Scape you see today has gone through a magnitude of changes. Originally starting its life as Arios498, this server saw a lot of people playing it daily, unfortunately, it was for profit and closed source. It was later upgraded to Arios530, targeting the build 530 of runescape with content in and around January 1st, 2009. Development came to a halt when a developer of the closed source project released the source code. The original developers of this server went on to create Kratos 530 back in 2015.
This project was started out of love for the 530 revision. A small group of developers spent thousands of hours improving on the existing source that was left to the curb. Over the past year, this project has seen many developers coming and going, fixing bugs that they find either through their own server, or bugs that they find in the live game that is currently hosted. We do not accept donations of any kind. The smiles and wonderful compliments are more than enough to keep us going! Content and bugfixes are always number one on our list, and we try our best to answer any questions that you may have, provided you have read through this readme and frequently asked questions on the discord.
## Our Core Values
In the current climate of RuneScape Private Servers in general, we believe it's important to wear our core values on our sleeves and defend them with everything we have! Below are what we hold as our core, most important values:
* **We do NOT believe in profiting off an RSPS.** To many of us here at the 2009Scape team, what we care about most is preserving the wonderful work of the Gower brothers in the most true-to-spirit manner possible. We do NOT do this to make a profit, and in fact **we outright refuse donations.** This is a labor of love and passion for everyone involved, a love for real RS2! This is perhaps the single most central value we have. If you want to "donate" to us, do so with your time and your dedication. That is what we desire most.
* **Authenticity is central to the work**. As a remake, one of the most important things to us is being true to the Gower spirit. What the Gowers brought to us in our childhood is what we are driven to preserve for the remainder of the world.
* **Open Source is crucial to the project**. We believe open source remakes to be crucial to preserving what we loved in our childhood, and we believe for-profit and/or closed-source servers are destined to flounder out and fail.
* **Be welcoming**. One of our most important goals is to provide a community of friendly and caring people that get along and love to enjoy the game with eachother. For this reason, we do tend to be very strict when it comes to toxicity. We care about quality a whole lot more than quantity!
## Contributing
**Note: All merge requests MUST be made using the defaut MR template. Merge requests that do not use this template will not be accepted.**
**Note: All new contributions MUST be made in Kotlin unless you are updating or fixing a bug in legacy code. More information on Kotlin can be found [here](https://kotlinlang.org/).**
There are many ways everyone can contribute! From the most seasoned programmers to those who do not have the most remote clue how code works! Below are some things that can always use some love from the community.
* **Content Testers**: I'm putting this one up top because of its importance. We, the contributors and developers, aren't perfect. Sometimes, we make mistakes. This is where you come in - If you want a sneak peek at upcoming content, have a knack for breaking things, or just want to contribute to the project without making code changes, you can become a tester! If you are interested in becoming a tester, reach out in the testing channel of the discord. [Why become a tester?](#why-become-a-tester)
* **Wiki Editors**: Did you know we have a wiki? Well it's always in need of people to fill it out and stay on top of it. Editing the wiki is one of the easiest ways you can contribute to 2009Scape! If you're an active player and have the will, there's so much you could be helping out with over at the wiki. [Click here to go to the wiki](https://cdn.2009scape.org/wiki/doku.php?id=start).
* **JSON editors**: We could always use more JSON editors! Please note that JSON editing **must** be done using the [Thanos Tool](https://gitlab.com/2009scape/tools/rs09-thanos-tool/-/jobs/5153567519/artifacts/file/build/libs/zaros.jar). **This does not run on modern Java** and requires **Java 11** to run (using the usual 'java -jar zaros.jar').
* **Authenticity Auditors**: As a remake, authenticity is central to our core values! We could always use someone to go through the game and create large lists of simple tasks that can be done to bring us closer to the authentic 2009 game! The preferred way to do this is one-area-at-a-time. If you want to see an example of some audits we've done in the past, take a look [here](https://gitlab.com/2009scape/2009scape/-/issues/46).
* **Code Contributors**: As a remake, we have massive amounts of content that need to be implemented or corrected. If you know how to program or are willing to learn, this is where you could be extremely helpful! We need everything from quests, to dialogue, to mini-games, to skills that still need to be corrected or implemented. This is perhaps one of the most valuable ways someone could help out the project! If you are interested in developing content, reach out in the development channel of the Discord.
## Content Developers: Setting Up the Project.
### GitLab Setup
**Note: This allows you to commit changes to the main repo (with approval)! Also, always stay up to date with the most recent updates by pulling into your copy when 2009Scape updates!**
1. Create a GitLab account if you haven't done so already.
2. Follow our Git Basics guide [over on the wiki.](https://gitlab.com/2009scape/2009scape/-/wikis/git-basics)
**If at anytime you have an issue with GitLab please refer to the [GitLab help center](https://gitlab.com/help).**
### Prerequisites
These are mandatory. If you don't install **all** of these programs **in order** prior to
the project's setup, things won't work. At all.
*For Windows users* - Turn developer mode on first in Windows developer settings.
* [JDK 11](https://adoptium.net) or the Java SE Development Kit Version 11
* [IntelliJ IDEA Community](https://www.jetbrains.com/idea/download/)
### SSH setup
1. [Set up a key if you don't have one (ed25519)](https://docs.gitlab.com/ee/user/ssh.html#generate-an-ssh-key-pair)
2. [Add your public key to your gitlab account](https://docs.gitlab.com/ee/user/ssh.html#add-an-ssh-key-to-your-gitlab-account)
3. [Verify you can connect to git@gitlab.com](https://docs.gitlab.com/ee/user/ssh.html#verify-that-you-can-connect)
### Project Setup
1. If you haven't already, make sure to follow our [Git Basics](https://gitlab.com/2009scape/2009scape/-/wikis/git-basics) guide.
2. Run `git lfs pull` in the 2009scape folder you cloned as part of that guide. This only has to be done once, ever.
3. Follow our [IntelliJ IDEA Setup Guide](https://gitlab.com/2009scape/2009scape/-/wikis/Setup-for-IntelliJ-IDEA-IDE)
### Running the project
1. If you followed the IntelliJ setup guide, which you probably should have, just use the provided run configuration.
***Note: If you choose not to use the provided run scripts or IntelliJ, you *must* run `mvn clean` before it will build correctly.***
#### Linux / OSX
Start the game server with the included run script. Use `./run -h` for more info.
#### Windows
Start the game server with `run-server.bat`
### License
We use the AGPL 3.0 license, which can be found [here](https://www.gnu.org/licenses/agpl-3.0.en.html). Please be sure to read and understand the license. Failure to follow the guidelines outlined in the license will result in legal action. If you know or hear of anyone breaking this license, please send a report, with proof, to Red Bracket#8151, ceikry#2724, or woahscam#8535 on discord or email woahscam@hotmail.com. **We WILL NOT change the license to fit your needs.**
### Contact
**Reminder: There is no official support for setting up your own server. Do not ping/dm developers, or ask in support channels about setting up your server. Support for the live server and 2009Scape single-player is available on the [2009Scape forums](https://forum.2009scape.org/).**
[license-shield]: https://img.shields.io/badge/license-AGPL--3.0-informational
[license-url]: https://www.gnu.org/licenses/agpl-3.0.en.html
### Why become a tester?
Before content hits Live, it has to be tested. We can, but do not want to do this alone, and would love the help! But don't worry, there is something in it for you. Credits! Keep in mind that credits will only be awarded to people who thoroughly test the content and provide detailed reports on them. Like votes or HoF you must claim them in the #claim-to-fame channel on discord or matrix.
* If you test smaller things like bug fixes there is a 2 credit reward.
* If you test full quests or minigames you will be rewarded 5 credits.
* If you find a bug in the content you are testing that hasn't already been found you will earn an extra credit.
These credits can be spent in the 2009Scape Reward Shop. It's important to be clear that credits are gained by contributions to the project. We cannot and will not accept donations (of any kind), especially not in exchange for in-game credits or perks.
Testers are not the only people who can gain credits - other ways of earning credits can be found on [the 2009Scape website](https://2009scape.org/site/game_guide/credits.html).
Please be patient! The Credit system is not fully complete yet, so it will take a long time for credits to be awarded.

File diff suppressed because it is too large Load diff

View file

@ -12,6 +12,9 @@ import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import org.rs09.consts.Sounds;
import static core.api.ContentAPIKt.playAudio;
/** /**
* Handles a morph item. * Handles a morph item.
@ -65,6 +68,7 @@ public class MorphItemPlugin implements Plugin<Object> {
*/ */
private void morph(Player player, Item item) { private void morph(Player player, Item item) {
int morphId = item.getId() == 6583 ? 2626 : EASTER_EGG_IDS[RandomFunction.random(EASTER_EGG_IDS.length)]; int morphId = item.getId() == 6583 ? 2626 : EASTER_EGG_IDS[RandomFunction.random(EASTER_EGG_IDS.length)];
playAudio(player, 1520);
player.getInterfaceManager().close(); player.getInterfaceManager().close();
player.getAppearance().transformNPC(morphId); player.getAppearance().transformNPC(morphId);
player.getInterfaceManager().removeTabs(0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14); player.getInterfaceManager().removeTabs(0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);

View file

@ -6,6 +6,13 @@ import core.game.world.update.flag.context.Graphics
import org.rs09.consts.Items import org.rs09.consts.Items
import core.game.interaction.InteractionListener import core.game.interaction.InteractionListener
import core.game.interaction.IntType import core.game.interaction.IntType
import kotlinx.coroutines.delay
import org.rs09.consts.Sounds
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class ToyListeners : InteractionListener { class ToyListeners : InteractionListener {
companion object { companion object {
@ -14,10 +21,12 @@ class ToyListeners : InteractionListener {
private val MARIONETTE_WALK = Animation(3004) private val MARIONETTE_WALK = Animation(3004)
private val MARIONETTE_BOW = Animation(3005) private val MARIONETTE_BOW = Animation(3005)
private val MARIONETTE_DANCE = Animation(3006) private val MARIONETTE_DANCE = Animation(3006)
private val MARIONETTE_GFX = arrayOf(intArrayOf(507, 508, 509, 510), intArrayOf(511, 512, 513, 514), intArrayOf(515, 516, 517, 518)) private val MARIONETTE_GFX =
arrayOf(intArrayOf(507, 508, 509, 510), intArrayOf(511, 512, 513, 514), intArrayOf(515, 516, 517, 518))
private val SNOWGLOBE_SHAKE = Animation(7535) //Initial Shake private val SNOWGLOBE_SHAKE = Animation(7535) //Initial Shake
private val SNOWGLOBE_HOLDFACE = Animation(7536) //Immediately after shake, player holds the snow globe to face private val SNOWGLOBE_HOLDFACE = Animation(7536) //Immediately after shake, player holds the snow globe to face
private val SNOWGLOBE_INTERFACE = 659 //After HOLDFACE this interface is displayed, player either clicks 'continue' for inv of snowballs, or 'close' for no snowballs private val SNOWGLOBE_INTERFACE =
659 //After HOLDFACE this interface is displayed, player either clicks 'continue' for inv of snowballs, or 'close' for no snowballs
private val SNOWGLOBE_DOWNFAST = Animation(7537) //Used when player hit 'close' on the interface private val SNOWGLOBE_DOWNFAST = Animation(7537) //Used when player hit 'close' on the interface
private val SNOWGLOBE_DOWNSLOW = Animation(7538) //Used when the player hit 'continue' on the interface private val SNOWGLOBE_DOWNSLOW = Animation(7538) //Used when the player hit 'continue' on the interface
private val SNOWGLOBE_STOMP = Animation(7528) //When player hits continue this animation plays private val SNOWGLOBE_STOMP = Animation(7528) //When player hits continue this animation plays
@ -34,7 +43,7 @@ class ToyListeners : InteractionListener {
} }
override fun defineListeners() { override fun defineListeners() {
on(Items.CHOCATRICE_CAPE_12634, IntType.ITEM, "operate"){ player, _ -> on(Items.CHOCATRICE_CAPE_12645, IntType.ITEM, "operate") { player, _ ->
lockInteractions(player, 2) lockInteractions(player, 2)
visualize(player, 8903, 1566) visualize(player, 8903, 1566)
return@on true return@on true
@ -44,18 +53,18 @@ class ToyListeners : InteractionListener {
val index = MARIONETTES.indexOf(marionette.id) val index = MARIONETTES.indexOf(marionette.id)
lockInteractions(player, 2) lockInteractions(player, 2)
when(getUsedOption(player)) { when (getUsedOption(player)) {
"jump" -> visualize(player, MARIONETTE_JUMP, MARIONETTE_GFX[index][0]) "jump" -> visualize(player, MARIONETTE_JUMP, MARIONETTE_GFX[index][0])
"walk" -> visualize(player, MARIONETTE_WALK, MARIONETTE_GFX[index][1]) "walk" -> visualize(player, MARIONETTE_WALK, MARIONETTE_GFX[index][1])
"bow" -> visualize(player, MARIONETTE_BOW, MARIONETTE_GFX[index][2]) "bow" -> visualize(player, MARIONETTE_BOW, MARIONETTE_GFX[index][2])
"dance" -> visualize(player, MARIONETTE_DANCE, MARIONETTE_GFX[index][3]) "dance" -> visualize(player, MARIONETTE_DANCE, MARIONETTE_GFX[index][3])
} }
return@on true return@on true
} }
on(Items.REINDEER_HAT_10507, IntType.ITEM, "operate"){ player, _ -> on(Items.REINDEER_HAT_10507, IntType.ITEM, "operate") { player, _ ->
lockInteractions(player, 2) lockInteractions(player, 2)
animate(player, 5059) visualize(player, 5059, 859)
return@on true return@on true
} }
@ -64,7 +73,7 @@ class ToyListeners : InteractionListener {
animate(player, SNOWGLOBE_SHAKE) animate(player, SNOWGLOBE_SHAKE)
runTask(player, 3) { runTask(player, 3) {
animate(player, SNOWGLOBE_HOLDFACE) animate(player, SNOWGLOBE_HOLDFACE)
runTask(player){ runTask(player) {
openInterface(player, SNOWGLOBE_INTERFACE) openInterface(player, SNOWGLOBE_INTERFACE)
} }
} }
@ -80,17 +89,17 @@ class ToyListeners : InteractionListener {
return@on true return@on true
} }
on(Items.TOY_KITE_12844, IntType.ITEM, "fly"){ player, _ -> on(Items.TOY_KITE_12844, IntType.ITEM, "fly","operate") { player, _ ->
lockInteractions(player, 2) lockInteractions(player, 2)
animate(player, TOY_KITE_FLY) animate(player, TOY_KITE_FLY)
return@on true return@on true
} }
on(Items.YO_YO_4079, IntType.ITEM, "play", "loop", "walk", "crazy"){ player, _ -> on(Items.YO_YO_4079, IntType.ITEM, "play", "loop", "walk", "crazy") { player, _ ->
val option = getUsedOption(player) val option = getUsedOption(player)
lockInteractions(player, 2) lockInteractions(player, 2)
when(option) { when (option) {
"play" -> animate(player, YOYO_PLAY) "play" -> animate(player, YOYO_PLAY)
"loop" -> animate(player, YOYO_LOOP) "loop" -> animate(player, YOYO_LOOP)
"walk" -> animate(player, YOYO_WALK) "walk" -> animate(player, YOYO_WALK)
@ -99,11 +108,11 @@ class ToyListeners : InteractionListener {
return@on true return@on true
} }
on(Items.ZOMBIE_HEAD_6722, IntType.ITEM, "talk-at", "display", "question"){ player, _ -> on(Items.ZOMBIE_HEAD_6722, IntType.ITEM, "talk-at", "display", "question") { player, _ ->
val option = getUsedOption(player) val option = getUsedOption(player)
lockInteractions(player, 2) lockInteractions(player, 2)
when(option) { when (option) {
"talk-at" -> { "talk-at" -> {
animate(player, ZOMBIE_HEAD_TALK_AT) animate(player, ZOMBIE_HEAD_TALK_AT)
sendChat(player, "Alas!") sendChat(player, "Alas!")
@ -116,5 +125,12 @@ class ToyListeners : InteractionListener {
} }
return@on true return@on true
} }
on(Items.RUBBER_CHICKEN_4566, IntType.ITEM, "operate", "Dance") { player, _ ->
lockInteractions(player, 2)
visualize(player, 1835, -1)
playJingle(player, 99);
playAudio(player, 355, 100);
return@on true
}
} }
} }

View file

@ -27,7 +27,7 @@ import static core.api.ContentAPIKt.inInventory;
public class DiangoReclaimInterface extends ComponentPlugin { public class DiangoReclaimInterface extends ComponentPlugin {
private static final int COMPONENT_ID = 468; private static final int COMPONENT_ID = 468;
public static final List<Item> ITEMS = new ArrayList<>(20); public static final List<Item> ITEMS = new ArrayList<>(20);
public static final Item[] HOLIDAY_ITEMS = {new Item(Items.YO_YO_4079), new Item(Items.REINDEER_HAT_10507), new Item(Items.RUBBER_CHICKEN_4566),new Item(Items.ZOMBIE_HEAD_6722), new Item(6857), new Item(6856), new Item(6858), new Item(6859), new Item(6860), new Item(6861), new Item(6862), new Item(6863), new Item(9920), new Item(9921),new Item(9922), new Item(9923), new Item(9924), new Item(9925), new Item(11019), new Item(11020), new Item(11021), new Item(11022), new Item(11789), new Item(11949), new Item(12634), new Item(14076), new Item(14077), new Item(14081),new Item(14595), new Item(14602), new Item(14603), new Item(14605), new Item(14654), new Item(Items.RED_MARIONETTE_6867), new Item(Items.GREEN_MARIONETTE_6866), new Item(Items.BLUE_MARIONETTE_6865)}; public static final Item[] HOLIDAY_ITEMS = {new Item(Items.YO_YO_4079), new Item(Items.REINDEER_HAT_10507), new Item(Items.WINTUMBER_TREE_10508), new Item(Items.RUBBER_CHICKEN_4566),new Item(Items.ZOMBIE_HEAD_6722), new Item(6857), new Item(6856), new Item(6858), new Item(6859), new Item(6860), new Item(6861), new Item(6862), new Item(6863), new Item(9920), new Item(9921),new Item(9922), new Item(9923), new Item(9924), new Item(9925), new Item(11019), new Item(11020), new Item(11021), new Item(11022), new Item(11789), new Item(11949), new Item(12645), new Item(14076), new Item(14077), new Item(14081),new Item(14595), new Item(14602), new Item(14603), new Item(14605), new Item(14654), new Item(Items.ICE_AMULET_14596), new Item(Items.RED_MARIONETTE_6867), new Item(Items.GREEN_MARIONETTE_6866), new Item(Items.BLUE_MARIONETTE_6865)};
//initialize the plugin, add lists of items to the ITEMS list... //initialize the plugin, add lists of items to the ITEMS list...
@Override @Override

View file

@ -14,6 +14,7 @@ import core.game.world.GameWorld;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics; import core.game.world.update.flag.context.Graphics;
import static core.api.ContentAPIKt.playJingle;
/** /**
* Represents an emote. * Represents an emote.
* *
@ -50,10 +51,10 @@ public enum Emotes {
SHRUG(8, Animation.create(2113)), SHRUG(8, Animation.create(2113)),
CHEER(9, Animation.create(862)), CHEER(9, Animation.create(862)),
BECKON(10, Animation.create(864)), BECKON(10, Animation.create(864)),
//Switch laugh id 11, to 12, and switch Jump id 12 to 11. Id's were mismatched. //Switch laugh id 11, to 12, and switch Jump id 12 to 11. Id's were mismatched.
//This caused the LAUGH to proc JUMP_FOR_JOY and JUMP_FOR_JOY to proc LAUGH! :) //This caused the LAUGH to proc JUMP_FOR_JOY and JUMP_FOR_JOY to proc LAUGH! :)
JUMP_FOR_JOY(11, Animation.create(2109)), JUMP_FOR_JOY(11, Animation.create(2109)),
LAUGH(12, Animation.create(861)), LAUGH(12, Animation.create(861)),
YAWN(13, Animation.create(2111)) { YAWN(13, Animation.create(2111)) {
@Override @Override
public void play(Player player) { public void play(Player player) {
@ -166,7 +167,12 @@ public enum Emotes {
} }
}, },
SNOWMAN_DANCE(40, Animation.create(7531), "This emote can be unlocked by playing a Christmas holiday event."), SNOWMAN_DANCE(40, Animation.create(7531), "This emote can be unlocked by playing a Christmas holiday event."),
AIR_GUITAR(41, Animation.create(2414), Graphics.create(1537), "This emote can be accessed by unlocking 200 pieces of music."), AIR_GUITAR(41, Animation.create(2414), Graphics.create(1537), "This emote can be accessed by unlocking 200 pieces of music.") {
public void play(Player player) {
playJingle(player, 302);
super.play(player);
}
},
SAFETY_FIRST(42, Animation.create(8770), Graphics.create(1553), "You can't use this emote yet. Visit the Stronghold of Player safety to<br>unlock it."), SAFETY_FIRST(42, Animation.create(8770), Graphics.create(1553), "You can't use this emote yet. Visit the Stronghold of Player safety to<br>unlock it."),
EXPLORE(43, Animation.create(9990), Graphics.create(1734), "You can't use this emote yet. You must complete all the Lumbridge <br>and Draynor beginner tasks to unlock it."), EXPLORE(43, Animation.create(9990), Graphics.create(1734), "You can't use this emote yet. You must complete all the Lumbridge <br>and Draynor beginner tasks to unlock it."),
TRICK(44, Animation.create(10530), Graphics.create(1863), "This emote can be unlocked by playing a Halloween holiday event."), TRICK(44, Animation.create(10530), Graphics.create(1863), "This emote can be unlocked by playing a Halloween holiday event."),
@ -174,7 +180,7 @@ public enum Emotes {
GIVE_THANKS(46, "This emote can be unlocked by playing a Thanksgiving holiday event.") { GIVE_THANKS(46, "This emote can be unlocked by playing a Thanksgiving holiday event.") {
@Override @Override
public void play(final Player player) { public void play(final Player player) {
GameWorld.getPulser().submit(new Pulse(1, player) { GameWorld.getPulser().submit(new Pulse(1, player) {
int counter; int counter;
@Override @Override
@ -415,4 +421,4 @@ public enum Emotes {
return lockedMessage; return lockedMessage;
} }
} }

View file

@ -42,13 +42,13 @@ grafana_log_ttl_days = 7
[world] [world]
name = "2009Scape" name = "RuneScape"
#name used for announcements of bots selling items on the GE #name used for announcements of bots selling items on the GE
name_ge = "2009Scape" name_ge = "Grand Exchange"
debug = true debug = true
dev = true dev = true
start_gui = false start_gui = false
daily_restart = true daily_restart = false
#world number #world number
world_id = "1" world_id = "1"
country_id = "0" country_id = "0"
@ -74,7 +74,7 @@ allow_token_purchase = true
skillcape_perks = true skillcape_perks = true
increased_door_time = false increased_door_time = false
enable_botting = false enable_botting = false
max_adv_bots = 100 max_adv_bots = 0
enable_doubling_money_scammers = true enable_doubling_money_scammers = true
wild_pvp_enabled = true wild_pvp_enabled = true
jad_practice_enabled = true jad_practice_enabled = true