Compare commits
No commits in common. "main" and "hcim-backup" have entirely different histories.
main
...
hcim-backu
@ -43,5 +43,5 @@ I would strongly recommend contributing code to the [2009Scape project](https://
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Like 2009Scape, this is AGPLv3. This is, in my opinion, the only proper license for an open source RSPS. The key term of the license being if you wish to use this code to host your own server, you must also offer the source code for people to inspect and use, and allow them to make modifications to it as I did with 2009Scape's code.
|
Like 2009Scape, this is AGPLv3. This is, in my opinion, the only proper license for an open source RSPS. The key term of the license being if you wish to use this code, you must also offer the source code for people to inspect and use! (eg no private, for profit RSPS).
|
||||||
|
|
||||||
|
@ -46,23 +46,23 @@ enum class RandomEvents(val npc: RandomEventNPC, val loot: WeightBasedTable? = n
|
|||||||
WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985,1,1,0.1),
|
WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985,1,1,0.1),
|
||||||
WeightedItem(Items.LOOP_HALF_OF_A_KEY_987,1,1,0.1)
|
WeightedItem(Items.LOOP_HALF_OF_A_KEY_987,1,1,0.1)
|
||||||
)),
|
)),
|
||||||
// MAZE(npc = MazeNPC()),
|
MAZE(npc = MazeNPC()),
|
||||||
DRILL_DEMON(npc = SergeantDamienNPC()),
|
DRILL_DEMON(npc = SergeantDamienNPC()),
|
||||||
EVIL_CHICKEN(npc = EvilChickenNPC()),
|
EVIL_CHICKEN(npc = EvilChickenNPC()),
|
||||||
// STRANGE_PLANT(npc = StrangePlantNPC()),
|
STRANGE_PLANT(npc = StrangePlantNPC()),
|
||||||
// SWARM(npc = SwarmNPC()),
|
SWARM(npc = SwarmNPC()),
|
||||||
// EVIL_BOB(npc = EvilBobNPC(), skillIds = intArrayOf(Skills.FISHING, Skills.MAGIC)),
|
EVIL_BOB(npc = EvilBobNPC(), skillIds = intArrayOf(Skills.FISHING, Skills.MAGIC)),
|
||||||
DRUNKEN_DWARF(npc = DrunkenDwarfNPC()),
|
DRUNKEN_DWARF(npc = DrunkenDwarfNPC()),
|
||||||
RICK_TURPENTINE(npc = RickTurpentineNPC(), loot = CERTER.loot),
|
RICK_TURPENTINE(npc = RickTurpentineNPC(), loot = CERTER.loot),
|
||||||
SURPRISE_EXAM(npc = MysteriousOldManNPC(), type = "sexam"),
|
SURPRISE_EXAM(npc = MysteriousOldManNPC(), type = "sexam"),
|
||||||
FREAKY_FORESTER(npc = FreakyForesterNPC(), skillIds = intArrayOf(Skills.WOODCUTTING)),
|
FREAKY_FORESTER(npc = FreakyForesterNPC(), skillIds = intArrayOf(Skills.WOODCUTTING)),
|
||||||
// PILLORY(npc = PilloryNPC(), skillIds = intArrayOf(Skills.THIEVING)),
|
PILLORY(npc = PilloryNPC(), skillIds = intArrayOf(Skills.THIEVING)),
|
||||||
TREE_SPIRIT(npc = TreeSpiritRENPC(), skillIds = intArrayOf(Skills.WOODCUTTING)),
|
TREE_SPIRIT(npc = TreeSpiritRENPC(), skillIds = intArrayOf(Skills.WOODCUTTING)),
|
||||||
QUIZ_MASTER(npc = QuizMasterNPC()),
|
QUIZ_MASTER(npc = QuizMasterNPC()),
|
||||||
RIVER_TROLL(RiverTrollRENPC(), skillIds = intArrayOf(Skills.FISHING)),
|
RIVER_TROLL(RiverTrollRENPC(), skillIds = intArrayOf(Skills.FISHING)),
|
||||||
// ROCK_GOLEM(RockGolemRENPC(), skillIds = intArrayOf(Skills.MINING)),
|
ROCK_GOLEM(RockGolemRENPC(), skillIds = intArrayOf(Skills.MINING)),
|
||||||
SHADE(ShadeRENPC(), skillIds = intArrayOf(Skills.PRAYER));
|
SHADE(ShadeRENPC(), skillIds = intArrayOf(Skills.PRAYER)),
|
||||||
// ZOMBIE(ZombieRENPC(), skillIds = intArrayOf(Skills.PRAYER));
|
ZOMBIE(ZombieRENPC(), skillIds = intArrayOf(Skills.PRAYER));
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmField
|
@JvmField
|
||||||
|
@ -8,18 +8,21 @@ import core.game.interaction.InterfaceListener
|
|||||||
object RulesAndInfo {
|
object RulesAndInfo {
|
||||||
val RULES = arrayOf(
|
val RULES = arrayOf(
|
||||||
"<col=ffffff>1. Basically just don't be an asshole</col>",
|
"<col=ffffff>1. Basically just don't be an asshole</col>",
|
||||||
" -No spamming, harassment, or other",
|
" -Spamming, serious harassment, and other disruptive behaviors",
|
||||||
" disruptive behaviors",
|
" are not okay, and will be addressed appropriately.",
|
||||||
"<col=ffffff>2. No exploitation of bugs.</col>",
|
"<col=ffffff>1. Be respectful to your fellow players.</col>",
|
||||||
|
" -No harassment, etc.",
|
||||||
|
" -Keep arguments private.",
|
||||||
|
"<col=ffffff>2. Do not exploit bugs.</col>",
|
||||||
" -Zero tolerance. Can result in account deletion.",
|
" -Zero tolerance. Can result in account deletion.",
|
||||||
" -If you discover a bug, report it to Emo/admins.",
|
" -If you discover a bug, report it to Emo or other admins.",
|
||||||
"<col=ffffff>3. Discuss or Advertising.</col>",
|
"<col=ffffff>3. Do not discuss or advertise.</col>",
|
||||||
" -Discussion of the live jagex games is fine.",
|
" -Discussion of the live jagex games is fine.",
|
||||||
" -Discussion of open source projects is fine.",
|
" -Discussion of open source projects is fine.",
|
||||||
" -No advertising of non-open source RSPSs.",
|
" -Advertising of non-open source RSPSs is not okay.",
|
||||||
"<col=ffffff>4. No unfair advantages.</col>",
|
"<col=ffffff>4. No unfair advantages.</col>",
|
||||||
" -No botting, autoclickers, AHKing, etc...",
|
" -No botting, autoclickers, AHKing, etc...",
|
||||||
" -Again, just don't be an asshole."
|
" -Again, basically just don't be an asshole."
|
||||||
)
|
)
|
||||||
val SEPARATOR = "<str> </str>"
|
val SEPARATOR = "<str> </str>"
|
||||||
val INFO = arrayOf(
|
val INFO = arrayOf(
|
||||||
|
@ -128,12 +128,7 @@ public final class FamiliarManager {
|
|||||||
}
|
}
|
||||||
if (currentPet != -1) {
|
if (currentPet != -1) {
|
||||||
int last = this.petDetails.get(currentPet).size() - 1;
|
int last = this.petDetails.get(currentPet).size() - 1;
|
||||||
PetDetails details;
|
PetDetails details = this.petDetails.get(currentPet).get(last);
|
||||||
if (last < 0) { //missing data in save due to historical bug (see GL !2077)
|
|
||||||
details = new PetDetails(0);
|
|
||||||
} else {
|
|
||||||
details = this.petDetails.get(currentPet).get(last);
|
|
||||||
}
|
|
||||||
Pets pets = Pets.forId(currentPet);
|
Pets pets = Pets.forId(currentPet);
|
||||||
familiar = new Pet(player, details, currentPet, pets.getNpcId(currentPet));
|
familiar = new Pet(player, details, currentPet, pets.getNpcId(currentPet));
|
||||||
} else if (familiarData.containsKey("familiar")) {
|
} else if (familiarData.containsKey("familiar")) {
|
||||||
@ -419,9 +414,6 @@ public final class FamiliarManager {
|
|||||||
* @param details The new pet details.
|
* @param details The new pet details.
|
||||||
*/
|
*/
|
||||||
public void addDetails(int itemId, PetDetails details) {
|
public void addDetails(int itemId, PetDetails details) {
|
||||||
if (petDetails.get(itemId) == null) {
|
|
||||||
petDetails.put(itemId, new ArrayList<>());
|
|
||||||
}
|
|
||||||
petDetails.get(itemId).add(details);
|
petDetails.get(itemId).add(details);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,8 +129,8 @@ public final class Pet extends Familiar {
|
|||||||
if (pet.isKitten(itemId)) {
|
if (pet.isKitten(itemId)) {
|
||||||
owner.incrementAttribute("/save:stats_manager:cats_raised");
|
owner.incrementAttribute("/save:stats_manager:cats_raised");
|
||||||
}
|
}
|
||||||
owner.getFamiliarManager().addDetails(newItemId, details);
|
|
||||||
owner.getFamiliarManager().removeDetails(getItemId());
|
owner.getFamiliarManager().removeDetails(getItemId());
|
||||||
|
owner.getFamiliarManager().addDetails(newItemId, details);
|
||||||
owner.getFamiliarManager().morphPet(new Item(newItemId), false, location, details.getHunger(), 0);
|
owner.getFamiliarManager().morphPet(new Item(newItemId), false, location, details.getHunger(), 0);
|
||||||
owner.getPacketDispatch().sendMessage("<col=ff0000>Your pet has grown larger.</col>");
|
owner.getPacketDispatch().sendMessage("<col=ff0000>Your pet has grown larger.</col>");
|
||||||
}
|
}
|
||||||
|
@ -10,15 +10,10 @@ import core.game.node.entity.player.Player
|
|||||||
import core.plugin.Initializable
|
import core.plugin.Initializable
|
||||||
import org.rs09.consts.Items
|
import org.rs09.consts.Items
|
||||||
import org.rs09.consts.NPCs
|
import org.rs09.consts.NPCs
|
||||||
import core.game.node.item.Item
|
|
||||||
|
|
||||||
@Initializable
|
@Initializable
|
||||||
class AchiettiesDialogue(player: Player? = null) : DialoguePlugin(player){
|
class AchiettiesDialogue(player: Player? = null) : DialoguePlugin(player){
|
||||||
|
|
||||||
companion object {
|
|
||||||
const val BRIBE_PRICE = 1_000_000
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||||
openDialogue(player, AchiettiesDialogueFile(), npc)
|
openDialogue(player, AchiettiesDialogueFile(), npc)
|
||||||
return true
|
return true
|
||||||
@ -39,28 +34,30 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
|
|
||||||
b.onQuestStages(Quests.HEROES_QUEST, 0,1)
|
b.onQuestStages(Quests.HEROES_QUEST, 0,1)
|
||||||
.branch { player ->
|
.branch { player ->
|
||||||
// Return the current quest stage.
|
return@branch getQuestStage(player, Quests.HEROES_QUEST)
|
||||||
getQuestStage(player, Quests.HEROES_QUEST)
|
}.let{ branch ->
|
||||||
}
|
|
||||||
.let { branch ->
|
|
||||||
branch.onValue(0)
|
branch.onValue(0)
|
||||||
.npcl(FacialExpression.FRIENDLY, "Greetings. Welcome to the Heroes' Guild.")
|
.npcl(FacialExpression.FRIENDLY, "Greetings. Welcome to the Heroes' Guild.")
|
||||||
.npcl("Only the greatest heroes of this land may gain entrance to this guild.")
|
.npcl("Only the greatest heroes of this land may gain entrance to this guild.")
|
||||||
|
// - If the player's skill levels are lower than the quest requirements. (I think this is after 2009)
|
||||||
|
// linel("Before starting this quest, be aware that one or more of your skill levels are lower than what is required to fully complete it.")
|
||||||
.options()
|
.options()
|
||||||
.let { optionBuilder ->
|
.let { optionBuilder ->
|
||||||
optionBuilder.option("I'm a hero, may I apply to join?")
|
optionBuilder.option("I'm a hero, may I apply to join?")
|
||||||
.playerl("I'm a hero. May I apply to join?")
|
.playerl("I'm a hero. May I apply to join?")
|
||||||
.branch { player ->
|
.branch { player ->
|
||||||
if (HeroesQuest.hasRequirements(player)) 1 else 0
|
return@branch if (HeroesQuest.hasRequirements(player)) {
|
||||||
|
1
|
||||||
|
} else {
|
||||||
|
0
|
||||||
}
|
}
|
||||||
.let { branch ->
|
}.let { branch ->
|
||||||
branch.onValue(0)
|
branch.onValue(0)
|
||||||
.npcl("You're a hero? I've never heard of YOU. You are required to possess at least 55 quest points to file an application.")
|
.npcl("You're a hero? I've never heard of YOU. You are required to possess at least 55 quest points to file an application.")
|
||||||
.npcl("Additionally you must have completed the Shield of Arrav, Lost City, Merlin's Crystal and Dragon Slayer quests.")
|
.npcl("Additionally you must have completed the Shield of Arrav, Lost City, Merlin's Crystal and Dragon Slayer quests.")
|
||||||
.end()
|
.end()
|
||||||
branch
|
return@let branch
|
||||||
}
|
}.onValue(1)
|
||||||
.onValue(1)
|
|
||||||
.betweenStage { df, player, _, _ ->
|
.betweenStage { df, player, _, _ ->
|
||||||
if(getQuestStage(player, Quests.HEROES_QUEST) == 0) {
|
if(getQuestStage(player, Quests.HEROES_QUEST) == 0) {
|
||||||
setQuestStage(player, Quests.HEROES_QUEST, 1)
|
setQuestStage(player, Quests.HEROES_QUEST, 1)
|
||||||
@ -82,30 +79,8 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
||||||
.npcl("Good luck with that.")
|
.npcl("Good luck with that.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Or perhaps the guild needs a bit of financing?")
|
|
||||||
.npcl("Perhaps a small 'Loan' of 1 million coins?")
|
|
||||||
// Bribery branch
|
|
||||||
.options()
|
|
||||||
.let { optionBuilder3 ->
|
|
||||||
optionBuilder3.option_playerl("That sounds good")
|
|
||||||
.branch { player ->
|
|
||||||
if (inInventory(player!!, 995, AchiettiesDialogue.BRIBE_PRICE)) 1 else 0
|
|
||||||
}
|
|
||||||
.let { branch ->
|
|
||||||
branch.onValue(1)
|
|
||||||
.playerl(FacialExpression.FRIENDLY, "Here you go!")
|
|
||||||
.endWith { _, player ->
|
|
||||||
removeItem(player, Item(995, AchiettiesDialogue.BRIBE_PRICE), Container.INVENTORY)
|
|
||||||
finishQuest(player, Quests.HEROES_QUEST)
|
|
||||||
}
|
|
||||||
branch.onValue(0)
|
|
||||||
.playerl(FacialExpression.HALF_GUILTY, "Actually, I don't have that much.")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
optionBuilder3.option_playerl("1 million coins for this dump? No way")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
optionBuilder.option_playerl("Good for the foremost heroes of the land.")
|
optionBuilder.option_playerl("Good for the foremost heroes of the land.")
|
||||||
.npcl("Yes. Yes it is.")
|
.npcl("Yes. Yes it is.")
|
||||||
.end()
|
.end()
|
||||||
@ -115,7 +90,7 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
.npcl("How goes thy quest adventurer?")
|
.npcl("How goes thy quest adventurer?")
|
||||||
.playerl("It's tough. I've not done it yet.")
|
.playerl("It's tough. I've not done it yet.")
|
||||||
.npcl("Remember, the items you need to enter are:")
|
.npcl("Remember, the items you need to enter are:")
|
||||||
.npcl("An Entranan Firebird's feather, A Master Thieves' armband, and a cooked Lava Eel.")
|
.npcl("An Entranan Firebirds' feather, A Master Thieves armband, and a cooked Lava Eel.")
|
||||||
.options()
|
.options()
|
||||||
.let { optionBuilder2 ->
|
.let { optionBuilder2 ->
|
||||||
optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
|
optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
|
||||||
@ -130,29 +105,6 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
||||||
.npcl("Good luck with that.")
|
.npcl("Good luck with that.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Or perhaps the guild needs a bit of financing?")
|
|
||||||
.npcl("Perhaps a small 'Loan' of 1 million coins?")
|
|
||||||
// Bribery branch
|
|
||||||
.options()
|
|
||||||
.let { optionBuilder3 ->
|
|
||||||
optionBuilder3.option_playerl("That sounds good")
|
|
||||||
.branch { player ->
|
|
||||||
if (inInventory(player!!, 995, AchiettiesDialogue.BRIBE_PRICE)) 1 else 0
|
|
||||||
}
|
|
||||||
.let { branch ->
|
|
||||||
branch.onValue(1)
|
|
||||||
.playerl(FacialExpression.FRIENDLY, "Here you go!")
|
|
||||||
.endWith { _, player ->
|
|
||||||
removeItem(player, Item(995, AchiettiesDialogue.BRIBE_PRICE), Container.INVENTORY)
|
|
||||||
finishQuest(player, Quests.HEROES_QUEST)
|
|
||||||
}
|
|
||||||
branch.onValue(0)
|
|
||||||
.playerl(FacialExpression.HALF_GUILTY, "Actually, I don't have that much.")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
optionBuilder3.option_playerl("1 million coins for this dump? No way")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,14 +113,14 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
.npcl("How goes thy quest adventurer?")
|
.npcl("How goes thy quest adventurer?")
|
||||||
.playerl("It's tough. I've not done it yet.")
|
.playerl("It's tough. I've not done it yet.")
|
||||||
.npcl("Remember, the items you need to enter are:")
|
.npcl("Remember, the items you need to enter are:")
|
||||||
.npcl("An Entranan Firebird's feather, A Master Thieves' armband, and a cooked Lava Eel.")
|
.npcl("An Entranan Firebirds' feather, A Master Thieves armband, and a cooked Lava Eel.")
|
||||||
.options()
|
.options()
|
||||||
.let { optionBuilder2 ->
|
.let { optionBuilder2 ->
|
||||||
optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
|
optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
|
||||||
.npcl("I'm sure you have the relevant contacts to find out about that.")
|
.npcl("I'm sure you have the relevant contacts to find out about that.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Any hints on getting the feather?")
|
optionBuilder2.option_playerl("Any hints on getting the feather?")
|
||||||
.npcl("Not really - other than Entranan Firebirds tend to live on Entrana.")
|
.npcl("Not really - other than Entranan firebirds tend to live on Entrana.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Any hints on getting the eel?")
|
optionBuilder2.option_playerl("Any hints on getting the eel?")
|
||||||
.npcl("Maybe go and find someone who knows a lot about fishing?")
|
.npcl("Maybe go and find someone who knows a lot about fishing?")
|
||||||
@ -176,49 +128,25 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
||||||
.npcl("Good luck with that.")
|
.npcl("Good luck with that.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Or perhaps the guild needs a bit of financing?")
|
|
||||||
.npcl("Perhaps a small 'Loan' of 1 million coins?")
|
|
||||||
// Bribery branch
|
|
||||||
.options()
|
|
||||||
.let { optionBuilder3 ->
|
|
||||||
optionBuilder3.option_playerl("That sounds good")
|
|
||||||
.branch { player ->
|
|
||||||
if (inInventory(player!!, 995, AchiettiesDialogue.BRIBE_PRICE)) 1 else 0
|
|
||||||
}
|
|
||||||
.let { branch ->
|
|
||||||
branch.onValue(1)
|
|
||||||
.playerl(FacialExpression.FRIENDLY, "Here you go!")
|
|
||||||
.endWith { _, player ->
|
|
||||||
removeItem(player, Item(995, AchiettiesDialogue.BRIBE_PRICE), Container.INVENTORY)
|
|
||||||
finishQuest(player, Quests.HEROES_QUEST)
|
|
||||||
}
|
|
||||||
branch.onValue(0)
|
|
||||||
.playerl(FacialExpression.HALF_GUILTY, "Actually, I don't have that much.")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
optionBuilder3.option_playerl("1 million coins for this dump? No way")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
b.onQuestStages(Quests.HEROES_QUEST, 6)
|
b.onQuestStages(Quests.HEROES_QUEST, 6)
|
||||||
.npcl("Greetings. Welcome to the Heroes' Guild.")
|
.npcl("Greetings. Welcome to the Heroes' Guild.")
|
||||||
.npcl("How goes thy quest adventurer?")
|
.npcl("How goes thy quest adventurer?")
|
||||||
.branch { player ->
|
.branch { player ->
|
||||||
if (HeroesQuest.allItemsInInventory(player)) 1 else 0
|
return@branch if (HeroesQuest.allItemsInInventory(player)) { 1 } else { 0 }
|
||||||
}
|
}.let { branch ->
|
||||||
.let { branch ->
|
|
||||||
branch.onValue(0)
|
branch.onValue(0)
|
||||||
.playerl("It's tough. I've not done it yet.")
|
.playerl("It's tough. I've not done it yet.")
|
||||||
.npcl("Remember, the items you need to enter are:")
|
.npcl("Remember, the items you need to enter are:")
|
||||||
.npcl("An Entranan Firebird's feather, A Master Thieves' armband, and a cooked Lava Eel.")
|
.npcl("An Entranan Firebirds' feather, A Master Thieves armband, and a cooked Lava Eel.")
|
||||||
.options()
|
.options()
|
||||||
.let { optionBuilder2 ->
|
.let { optionBuilder2 ->
|
||||||
optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
|
optionBuilder2.option_playerl("Any hints on getting the thieves armband?")
|
||||||
.npcl("I'm sure you have the relevant contacts to find out about that.")
|
.npcl("I'm sure you have the relevant contacts to find out about that.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Any hints on getting the feather?")
|
optionBuilder2.option_playerl("Any hints on getting the feather?")
|
||||||
.npcl("Not really - other than Entranan Firebirds tend to live on Entrana.")
|
.npcl("Not really - other than Entranan firebirds tend to live on Entrana.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Any hints on getting the eel?")
|
optionBuilder2.option_playerl("Any hints on getting the eel?")
|
||||||
.npcl("Maybe go and find someone who knows a lot about fishing?")
|
.npcl("Maybe go and find someone who knows a lot about fishing?")
|
||||||
@ -226,30 +154,8 @@ class AchiettiesDialogueFile : DialogueBuilderFile() {
|
|||||||
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
optionBuilder2.option_playerl("I'll start looking for all those things then.")
|
||||||
.npcl("Good luck with that.")
|
.npcl("Good luck with that.")
|
||||||
.end()
|
.end()
|
||||||
optionBuilder2.option_playerl("Or perhaps the guild needs a bit of financing?")
|
|
||||||
.npcl("Perhaps a small 'Loan' of 1 million coins?")
|
|
||||||
// Bribery branch
|
|
||||||
.options()
|
|
||||||
.let { optionBuilder3 ->
|
|
||||||
optionBuilder3.option_playerl("That sounds good")
|
|
||||||
.branch { player ->
|
|
||||||
if (inInventory(player!!, 995, AchiettiesDialogue.BRIBE_PRICE)) 1 else 0
|
|
||||||
}
|
|
||||||
.let { branch ->
|
|
||||||
branch.onValue(1)
|
|
||||||
.playerl(FacialExpression.FRIENDLY, "Here you go!")
|
|
||||||
.endWith { _, player ->
|
|
||||||
removeItem(player, Item(995, AchiettiesDialogue.BRIBE_PRICE), Container.INVENTORY)
|
|
||||||
finishQuest(player, Quests.HEROES_QUEST)
|
|
||||||
}
|
|
||||||
branch.onValue(0)
|
|
||||||
.playerl(FacialExpression.HALF_GUILTY, "Actually, I don't have that much.")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
optionBuilder3.option_playerl("1 million coins for this dump? No way")
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
branch.onValue(1)
|
branch.onValue(1)
|
||||||
.playerl("I have all the required items.")
|
.playerl("I have all the required items.")
|
||||||
.npcl("I see that you have. Well done. Now, to complete the quest, and gain entry to the Heroes' Guild in your final task all that you have to do is...")
|
.npcl("I see that you have. Well done. Now, to complete the quest, and gain entry to the Heroes' Guild in your final task all that you have to do is...")
|
||||||
|
@ -124,7 +124,6 @@ class CivilianDialogue(player: Player? = null) : DialoguePlugin(player) {
|
|||||||
if (removeItem(player, cat)){
|
if (removeItem(player, cat)){
|
||||||
player.familiarManager.removeDetails(cat)
|
player.familiarManager.removeDetails(cat)
|
||||||
addItem(player, Items.DEATH_RUNE_560, 100)
|
addItem(player, Items.DEATH_RUNE_560, 100)
|
||||||
player.incrementAttribute("/save:stats_manager:cats_sold");
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,7 +172,6 @@ class CatTrade : InteractionListener{
|
|||||||
// Remove the cat
|
// Remove the cat
|
||||||
player.familiarManager.removeDetails(used.id)
|
player.familiarManager.removeDetails(used.id)
|
||||||
addItem(player, Items.DEATH_RUNE_560, 100)
|
addItem(player, Items.DEATH_RUNE_560, 100)
|
||||||
player.incrementAttribute("/save:stats_manager:cats_sold");
|
|
||||||
openDialogue(player, dialogue, with as NPC)
|
openDialogue(player, dialogue, with as NPC)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
package content.region.misc.tutisland.dialogue
|
package content.region.misc.tutisland.dialogue
|
||||||
|
|
||||||
|
import content.global.handlers.iface.RulesAndInfo
|
||||||
import content.region.misc.tutisland.handlers.*
|
import content.region.misc.tutisland.handlers.*
|
||||||
|
import core.ServerConstants
|
||||||
import core.api.*
|
import core.api.*
|
||||||
import core.game.node.entity.npc.NPC
|
import core.game.node.entity.npc.NPC
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.node.entity.player.link.IronmanMode
|
import core.game.node.entity.player.link.IronmanMode
|
||||||
import core.game.node.entity.player.link.TeleportManager
|
import core.game.node.entity.player.link.TeleportManager
|
||||||
import core.game.node.item.Item
|
import core.game.node.item.Item
|
||||||
|
import core.game.world.GameWorld
|
||||||
import core.game.world.map.Location
|
import core.game.world.map.Location
|
||||||
import core.plugin.Initializable
|
import core.plugin.Initializable
|
||||||
|
import core.tools.END_DIALOGUE
|
||||||
|
import core.worker.ManagementEvents
|
||||||
import org.rs09.consts.Items
|
import org.rs09.consts.Items
|
||||||
import org.rs09.consts.NPCs
|
import org.rs09.consts.NPCs
|
||||||
import proto.management.JoinClanRequest
|
import proto.management.JoinClanRequest
|
||||||
import core.ServerConstants
|
|
||||||
import content.global.handlers.iface.RulesAndInfo
|
|
||||||
import core.game.world.GameWorld
|
|
||||||
import core.tools.END_DIALOGUE
|
|
||||||
import core.worker.ManagementEvents
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the magic tutor's dialogue
|
* Handles the magic tutor's dialogue
|
||||||
@ -44,29 +44,20 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
Item(557, 4),
|
Item(557, 4),
|
||||||
Item(559, 2)
|
Item(559, 2)
|
||||||
)
|
)
|
||||||
private val STARTER_BANK = arrayOf(Item(995, 2500))
|
private val STARTER_BANK = arrayOf(Item(995, 25))
|
||||||
// Helper function to convert a numeric XP rate to a descriptive string.
|
|
||||||
private fun xpRateText(rate: Double): String {
|
|
||||||
return when(rate) {
|
|
||||||
1.0 -> "Normal (100%)"
|
|
||||||
2.5 -> "2.5x"
|
|
||||||
5.0 -> "5x"
|
|
||||||
10.0 -> "10x"
|
|
||||||
0.1 -> "Scale up to 10x at level 99"
|
|
||||||
0.2 -> "Scale up to 5x at level 99"
|
|
||||||
else -> "${rate}x"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
override fun newInstance(player: Player?): core.game.dialogue.DialoguePlugin {
|
override fun newInstance(player: Player?): core.game.dialogue.DialoguePlugin {
|
||||||
return TutorialMagicTutorDialogue(player)
|
return TutorialMagicTutorDialogue(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun open(vararg args: Any?): Boolean {
|
override fun open(vararg args: Any?): Boolean {
|
||||||
npc = args[0] as NPC
|
npc = args[0] as NPC
|
||||||
when(getAttribute(player, "tutorial:stage", 0)) {
|
when(getAttribute(player, "tutorial:stage", 0))
|
||||||
|
{
|
||||||
67 -> playerl(core.game.dialogue.FacialExpression.FRIENDLY, "Hello.")
|
67 -> playerl(core.game.dialogue.FacialExpression.FRIENDLY, "Hello.")
|
||||||
69 -> npcl(core.game.dialogue.FacialExpression.FRIENDLY, "Good. This is a list of your spells. Currently you can only cast one offensive spell called Wind Strike. Let's try it out on one of those chickens.")
|
69 -> npcl(core.game.dialogue.FacialExpression.FRIENDLY, "Good. This is a list of your spells. Currently you can only cast one offensive spell called Wind Strike. Let's try it out on one of those chickens.")
|
||||||
70 -> if(!inInventory(player, Items.AIR_RUNE_556) && !inInventory(player, Items.MIND_RUNE_558)) {
|
70 -> if(!inInventory(player, Items.AIR_RUNE_556) && !inInventory(player, Items.MIND_RUNE_558))
|
||||||
|
{
|
||||||
player.dialogueInterpreter.sendDoubleItemMessage(Items.AIR_RUNE_556, Items.MIND_RUNE_558, "You receive some spare runes.")
|
player.dialogueInterpreter.sendDoubleItemMessage(Items.AIR_RUNE_556, Items.MIND_RUNE_558, "You receive some spare runes.")
|
||||||
addItem(player, Items.AIR_RUNE_556, 15)
|
addItem(player, Items.AIR_RUNE_556, 15)
|
||||||
addItem(player, Items.MIND_RUNE_558, 15)
|
addItem(player, Items.MIND_RUNE_558, 15)
|
||||||
@ -79,7 +70,8 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||||
when(getAttribute(player, "tutorial:stage", 0)) {
|
when(getAttribute(player, "tutorial:stage", 0))
|
||||||
|
{
|
||||||
67 -> when(stage++){
|
67 -> when(stage++){
|
||||||
0 -> npcl(core.game.dialogue.FacialExpression.FRIENDLY, "Good day, newcomer. My name is Terrova. I'm here to tell you about Magic. Let's start by opening your spell list.")
|
0 -> npcl(core.game.dialogue.FacialExpression.FRIENDLY, "Good day, newcomer. My name is Terrova. I'm here to tell you about Magic. Let's start by opening your spell list.")
|
||||||
1 -> {
|
1 -> {
|
||||||
@ -101,44 +93,42 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
71 -> when(stage){
|
71 -> when(stage){
|
||||||
0 -> options(
|
0 -> options("Set Ironman Mode (current: ${player.ironmanManager.mode.name})", "Change XP Rate (current: ${player.skills.experienceMultiplier}x)", "I'm ready now.").also { stage++ }
|
||||||
"Set Ironman Mode (current: ${player.ironmanManager.mode.name})",
|
|
||||||
"Change XP Rate (current: ${xpRateText(player.skills.experienceMultiplier)})",
|
|
||||||
"I'm ready now."
|
|
||||||
).also { stage++ }
|
|
||||||
1 -> when(buttonId){
|
1 -> when(buttonId){
|
||||||
1 -> options("None", "Standard", "Hardcore (Permadeath!)", "Ultimate", "Nevermind.").also { stage = 10 }
|
1 -> options("None","Standard","Ultimate","Nevermind.").also { stage = 10 }
|
||||||
2 -> options("Flat XP Rate Multiplier", "Scaled XP Rate Multiplier", "Back").also { stage = 21 }
|
2 -> options("1.0x","2.5x","5.0x").also { stage = 20 }
|
||||||
3 -> npcl(core.game.dialogue.FacialExpression.FRIENDLY, "Well, you're all finished here now. I'll give you a reasonable number of starting items when you leave.").also { stage = 30 }
|
3 -> npcl(core.game.dialogue.FacialExpression.FRIENDLY, "Well, you're all finished here now. I'll give you a reasonable number of starting items when you leave.").also { stage = 30 }
|
||||||
}
|
}
|
||||||
// Modified submenu branch for XP rate options
|
|
||||||
21 -> when(buttonId) {
|
|
||||||
1 -> options("1.0x", "2.5x", "5.0x", "10x").also { stage = 22 }
|
|
||||||
2 -> options("1.0x", "Scale to 10x", "Scale to 5x").also { stage = 23 }
|
|
||||||
3 -> options(
|
|
||||||
"Set Ironman Mode (current: ${player.ironmanManager.mode.name})",
|
|
||||||
"Change XP Rate (current: ${xpRateText(player.skills.experienceMultiplier)})",
|
|
||||||
"I'm ready now."
|
|
||||||
).also { stage = 1 }
|
|
||||||
else -> return false
|
|
||||||
}
|
|
||||||
10 -> {
|
10 -> {
|
||||||
stage = 0
|
stage = 0
|
||||||
if(buttonId < 5) {
|
if(buttonId < 5)
|
||||||
val mode = IronmanMode.values()[buttonId - 1]
|
{
|
||||||
|
val mode = when (buttonId - 1)
|
||||||
|
{
|
||||||
|
0 -> IronmanMode.NONE
|
||||||
|
1 -> IronmanMode.STANDARD
|
||||||
|
2 -> IronmanMode.ULTIMATE
|
||||||
|
else -> IronmanMode.NONE
|
||||||
|
}
|
||||||
|
if (mode != IronmanMode.NONE) stage = 11
|
||||||
player.dialogueInterpreter.sendDialogue("You set your ironman mode to: ${mode.name}.")
|
player.dialogueInterpreter.sendDialogue("You set your ironman mode to: ${mode.name}.")
|
||||||
player.ironmanManager.mode = mode
|
player.ironmanManager.mode = mode
|
||||||
if (player.skills.experienceMultiplier == 10.0 && mode != IronmanMode.HARDCORE)
|
if (player.skills.experienceMultiplier == 10.0) player.skills.experienceMultiplier = 5.0
|
||||||
player.skills.experienceMultiplier = 5.0
|
}
|
||||||
} else {
|
else
|
||||||
|
{
|
||||||
handle(interfaceId, 0)
|
handle(interfaceId, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
22 -> {
|
11 -> player.dialogueInterpreter.sendPlainMessage(false, *splitLines("WARNING: You have selected an ironman mode. This is an uncompromising mode that WILL completely restrict your ability to trade. This MAY leave you unable to complete certain content, including quests.")).also { stage = 0 }
|
||||||
val rates = arrayOf(1.0, 2.5, 5.0, 10.0)
|
|
||||||
|
20 -> {
|
||||||
|
val rates = arrayOf(1.0,2.5,5.0)
|
||||||
val rate = rates[buttonId - 1]
|
val rate = rates[buttonId - 1]
|
||||||
if(rate == 10.0 && player.ironmanManager.mode != IronmanMode.HARDCORE) {
|
if(rate == 10.0) {
|
||||||
player.dialogueInterpreter.sendDialogue("10.0x is only available to Hardcore Ironmen!")
|
player.dialogueInterpreter.sendDialogue("10.0x is no longer available!")
|
||||||
|
player.skills.experienceMultiplier = 5.0
|
||||||
stage = 0
|
stage = 0
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -146,24 +136,14 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
player.skills.experienceMultiplier = rate
|
player.skills.experienceMultiplier = rate
|
||||||
stage = 0
|
stage = 0
|
||||||
}
|
}
|
||||||
23 -> {
|
|
||||||
val rates = arrayOf(1.0, 0.1, 0.2)
|
|
||||||
val rate = rates[buttonId - 1]
|
|
||||||
if(rate == 0.1) {
|
|
||||||
player.dialogueInterpreter.sendDialogue("You set your XP rate to scale to be 10x at level 99.")
|
|
||||||
} else if (rate == 0.2) {
|
|
||||||
player.dialogueInterpreter.sendDialogue("You set your XP rate to scale to be 5x at level 99.")
|
|
||||||
} else {
|
|
||||||
player.dialogueInterpreter.sendDialogue("You set your XP rate to: ${rate}x.")
|
|
||||||
}
|
|
||||||
player.skills.experienceMultiplier = rate
|
|
||||||
stage = 0
|
|
||||||
}
|
|
||||||
30 -> player.dialogueInterpreter.sendOptions("Leave Tutorial Island?", "Yes, I'm ready.", "No, not yet.").also { stage++ }
|
30 -> player.dialogueInterpreter.sendOptions("Leave Tutorial Island?", "Yes, I'm ready.", "No, not yet.").also { stage++ }
|
||||||
31 -> when(buttonId) {
|
31 -> when(buttonId)
|
||||||
|
{
|
||||||
1 -> playerl(core.game.dialogue.FacialExpression.FRIENDLY, "I'm ready to go now, thank you.").also { stage = 40 }
|
1 -> playerl(core.game.dialogue.FacialExpression.FRIENDLY, "I'm ready to go now, thank you.").also { stage = 40 }
|
||||||
2 -> playerl(core.game.dialogue.FacialExpression.FRIENDLY, "I'm not quite ready to go yet, thank you.").also { stage = END_DIALOGUE }
|
2 -> playerl(core.game.dialogue.FacialExpression.FRIENDLY, "I'm not quite ready to go yet, thank you.").also { stage = END_DIALOGUE }
|
||||||
}
|
}
|
||||||
|
|
||||||
40 -> {
|
40 -> {
|
||||||
setAttribute(player, "/save:tutorial:complete", true)
|
setAttribute(player, "/save:tutorial:complete", true)
|
||||||
setVarbit(player, 3756, 0)
|
setVarbit(player, 3756, 0)
|
||||||
@ -179,13 +159,14 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
player.inventory.add(*STARTER_PACK)
|
player.inventory.add(*STARTER_PACK)
|
||||||
player.bank.add(*STARTER_BANK)
|
player.bank.add(*STARTER_BANK)
|
||||||
|
|
||||||
if(player.ironmanManager.mode == IronmanMode.HARDCORE) {
|
if(player.skills.experienceMultiplier == 10.0)
|
||||||
setAttribute(player, "/save:permadeath", true)
|
{
|
||||||
} else if(player.skills.experienceMultiplier == 10.0) {
|
|
||||||
player.skills.experienceMultiplier = 5.0
|
player.skills.experienceMultiplier = 5.0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overwrites the stuck dialogue after teleporting to Lumbridge
|
//This overwrites the stuck dialogue after teleporting to Lumbridge for some reason
|
||||||
|
//Dialogue from 2007 or thereabouts
|
||||||
|
//Original is five lines, but if the same is done here it will break. Need to find another way of showing all this information.
|
||||||
interpreter.sendDialogue(
|
interpreter.sendDialogue(
|
||||||
"Welcome to Lumbridge! To get more help, simply click on the",
|
"Welcome to Lumbridge! To get more help, simply click on the",
|
||||||
"Lumbridge Guide or one of the Tutors - these can be found by looking",
|
"Lumbridge Guide or one of the Tutors - these can be found by looking",
|
||||||
@ -213,6 +194,7 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
ManagementEvents.publish(clanJoin.build())
|
ManagementEvents.publish(clanJoin.build())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
12 -> {
|
12 -> {
|
||||||
player.setAttribute("close_c_", true)
|
player.setAttribute("close_c_", true)
|
||||||
end()
|
end()
|
||||||
@ -225,4 +207,5 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
|
|||||||
override fun getIds(): IntArray {
|
override fun getIds(): IntArray {
|
||||||
return intArrayOf(NPCs.MAGIC_INSTRUCTOR_946)
|
return intArrayOf(NPCs.MAGIC_INSTRUCTOR_946)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ class KingRoaldDialogue(player: Player? = null) : DialoguePlugin(player) {
|
|||||||
addOption("Priest in Peril", KingRoaldPIPDialogue(player.questRepository.getStage(Quests.PRIEST_IN_PERIL)))
|
addOption("Priest in Peril", KingRoaldPIPDialogue(player.questRepository.getStage(Quests.PRIEST_IN_PERIL)))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!player.questRepository.getQuest(Quests.SHIELD_OF_ARRAV).isCompleted(player)) {
|
if (player.questRepository.getQuest(Quests.SHIELD_OF_ARRAV).isStarted(player) && !player.questRepository.getQuest(Quests.SHIELD_OF_ARRAV).isCompleted(player)) {
|
||||||
addOption("Shield of Arrav", KingRoaldArravDialogue())
|
addOption("Shield of Arrav", KingRoaldArravDialogue())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,20 +6,12 @@ import core.game.dialogue.DialogueFile
|
|||||||
import core.tools.END_DIALOGUE
|
import core.tools.END_DIALOGUE
|
||||||
import core.tools.START_DIALOGUE
|
import core.tools.START_DIALOGUE
|
||||||
import content.data.Quests
|
import content.data.Quests
|
||||||
import core.game.dialogue.FacialExpression
|
|
||||||
import core.api.Container
|
|
||||||
import core.api.inInventory
|
|
||||||
import core.api.removeItem
|
|
||||||
import core.game.dialogue.DialoguePlugin
|
|
||||||
|
|
||||||
|
|
||||||
private val CERTIFICATE = Item(769)
|
private val CERTIFICATE = Item(769)
|
||||||
|
|
||||||
|
|
||||||
class KingRoaldArravDialogue() : DialogueFile() {
|
class KingRoaldArravDialogue() : DialogueFile() {
|
||||||
companion object {
|
|
||||||
const val BRIBE_PRICE = 6000
|
|
||||||
}
|
|
||||||
override fun handle(componentID: Int, buttonID: Int) {
|
override fun handle(componentID: Int, buttonID: Int) {
|
||||||
|
|
||||||
if (player!!.inventory.containsItem(ShieldofArrav.PHOENIX_SHIELD) || player!!.inventory.containsItem(ShieldofArrav.BLACKARM_SHIELD)) {
|
if (player!!.inventory.containsItem(ShieldofArrav.PHOENIX_SHIELD) || player!!.inventory.containsItem(ShieldofArrav.BLACKARM_SHIELD)) {
|
||||||
@ -62,29 +54,7 @@ class KingRoaldArravDialogue() : DialogueFile() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
when (stage) {
|
abandonFile()
|
||||||
START_DIALOGUE -> player("I would like to contribute to one of", "your Political Action Committees").also{ stage++ }
|
|
||||||
1 -> npcl("Which one?").also { stage++ }
|
|
||||||
2 -> playerl("The Citizens Who Can't Be Bothered To Do Shield of Arrav").also { stage++ }
|
|
||||||
3 -> npcl(FacialExpression.HALF_THINKING, "I see... that will be 6,000 coins").also { stage++ }
|
|
||||||
4 -> options("Here you go!", "Nevermind.").also { stage++ }
|
|
||||||
5 -> when (buttonID) {
|
|
||||||
1 -> {
|
|
||||||
if (inInventory(player!!, 995, BRIBE_PRICE))
|
|
||||||
playerl(FacialExpression.FRIENDLY, "Here you go!").also { stage = 20 }
|
|
||||||
else
|
|
||||||
playerl(FacialExpression.HALF_GUILTY, "Actually, I don't have that much.").also { stage = END_DIALOGUE }
|
|
||||||
}
|
|
||||||
2 -> playerl(FacialExpression.FRIENDLY, "On second thought, never mind.").also { stage = END_DIALOGUE }
|
|
||||||
}
|
|
||||||
20 -> {
|
|
||||||
npcl("Thank you so much, dear donor. The government of Varrock now has higher priorities than the Shield of Arrav.")
|
|
||||||
if (removeItem(player!!, Item(995, BRIBE_PRICE), Container.INVENTORY)) {
|
|
||||||
player!!.questRepository.getQuest(Quests.SHIELD_OF_ARRAV).finish(player)
|
|
||||||
}
|
|
||||||
stage = END_DIALOGUE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -41,7 +41,7 @@ public final class Skills {
|
|||||||
/**
|
/**
|
||||||
* Represents the constant modifier of experience.
|
* Represents the constant modifier of experience.
|
||||||
*/
|
*/
|
||||||
public double experienceMultiplier = 0.1; // Note in EmoScape this sets the default to be the scaling to 10x at 99
|
public double experienceMultiplier = 5.0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum experience multiplier.
|
* The maximum experience multiplier.
|
||||||
@ -287,30 +287,9 @@ public final class Skills {
|
|||||||
* @return The experience mod.
|
* @return The experience mod.
|
||||||
*/
|
*/
|
||||||
private double getExperienceMod(int slot, double experience, boolean playerMod, boolean multiplyer) {
|
private double getExperienceMod(int slot, double experience, boolean playerMod, boolean multiplyer) {
|
||||||
// Emo has hijacked this method to enable the scaling of the exp multiplier
|
|
||||||
//Keywords for people ctrl + Fing the project
|
//Keywords for people ctrl + Fing the project
|
||||||
//xprate xp rate xp multiplier skilling rate
|
//xprate xp rate xp multiplier skilling rate
|
||||||
if (experienceMultiplier == 0.1) { // exp multiplier placeholder for 10x at 100
|
|
||||||
double mult = (1 + ((this.experience[slot] * 9) / 13034431)); // 13034431 is the exp for 99, meaning this formula hits 10x at 99
|
|
||||||
if (mult < 1.0) {
|
|
||||||
return 1.0;
|
|
||||||
} else if (mult > 10.0) {
|
|
||||||
return 10.0;
|
|
||||||
} else {
|
|
||||||
return mult;
|
|
||||||
}
|
|
||||||
} else if (experienceMultiplier == 0.2) { // exp multiplier placeholder for 5x at 100
|
|
||||||
double mult = (1 + ((this.experience[slot] * 4) / 13034431)); // 13034431 is the exp for 99, meaning this formula hits 5x at 99
|
|
||||||
if (mult < 1.0) {
|
|
||||||
return 1.0;
|
|
||||||
} else if (mult > 5.0) {
|
|
||||||
return 5.0;
|
|
||||||
} else {
|
|
||||||
return mult;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return experienceMultiplier;
|
return experienceMultiplier;
|
||||||
}
|
|
||||||
/*if (!(entity instanceof Player)) {
|
/*if (!(entity instanceof Player)) {
|
||||||
return 1.0;
|
return 1.0;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ const val STATS_ROCKS = "rocks_mined"
|
|||||||
const val STATS_RC = "essence_crafted"
|
const val STATS_RC = "essence_crafted"
|
||||||
const val STATS_FOOD_COOKED = "food_cooked"
|
const val STATS_FOOD_COOKED = "food_cooked"
|
||||||
const val STATS_CATS_RAISED = "cats_raised"
|
const val STATS_CATS_RAISED = "cats_raised"
|
||||||
const val STATS_CATS_SOLD = "cats_sold"
|
|
||||||
const val STATS_PK_KILLS = "player_kills"
|
const val STATS_PK_KILLS = "player_kills"
|
||||||
const val STATS_PK_DEATHS = "player_deaths"
|
const val STATS_PK_DEATHS = "player_deaths"
|
||||||
const val STATS_ALKHARID_GATE = "alkharid_gate"
|
const val STATS_ALKHARID_GATE = "alkharid_gate"
|
||||||
|
@ -62,7 +62,7 @@ class StatsCommandSet : CommandSet(Privilege.STANDARD) {
|
|||||||
72 -> sendLine(player,"Quest Points: ${queryPlayer.questRepository.points}",i)
|
72 -> sendLine(player,"Quest Points: ${queryPlayer.questRepository.points}",i)
|
||||||
73 -> sendLine(player,"Ironman Mode: ${queryPlayer.ironmanManager.mode.name.lowercase(Locale.getDefault())}",i)
|
73 -> sendLine(player,"Ironman Mode: ${queryPlayer.ironmanManager.mode.name.lowercase(Locale.getDefault())}",i)
|
||||||
74 -> sendLine(player,"Deaths: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_DEATHS",0)}",i)
|
74 -> sendLine(player,"Deaths: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_DEATHS",0)}",i)
|
||||||
75 -> sendLine(player, "Cats Sold: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_CATS_SOLD", 0)}", i)
|
75 -> sendLine(player, SPACER,i)
|
||||||
76 -> sendLine(player,"Logs Chopped: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_LOGS",0)}",i)
|
76 -> sendLine(player,"Logs Chopped: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_LOGS",0)}",i)
|
||||||
77 -> sendLine(player,"Rocks Mined: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_ROCKS",0)}",i)
|
77 -> sendLine(player,"Rocks Mined: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_ROCKS",0)}",i)
|
||||||
78 -> sendLine(player,"Fish Caught: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_FISH",0)}",i)
|
78 -> sendLine(player,"Fish Caught: ${queryPlayer.getAttribute("$STATS_BASE:$STATS_FISH",0)}",i)
|
||||||
|
@ -23,13 +23,13 @@ noauth_default_admin = false #NOTE: If we are not using auth, this determines wh
|
|||||||
#The limit on how many different accounts a player can log into per day.
|
#The limit on how many different accounts a player can log into per day.
|
||||||
daily_accounts_per_ip = 3
|
daily_accounts_per_ip = 3
|
||||||
watchdog_enabled = true
|
watchdog_enabled = true
|
||||||
connectivity_check_url = "https://google.com,https://emoscape.org"
|
connectivity_check_url = "https://duckduckgo.com,https://emoscape.org"
|
||||||
connectivity_timeout = 500
|
connectivity_timeout = 500
|
||||||
|
|
||||||
[database]
|
[database]
|
||||||
database_name = "global"
|
database_name = "global"
|
||||||
database_username = "scape"
|
database_username = "root"
|
||||||
database_password = "TestPass"
|
database_password = ""
|
||||||
database_address = "127.0.0.1"
|
database_address = "127.0.0.1"
|
||||||
database_port = "3306"
|
database_port = "3306"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user