Fixed ironman mode being stuck after permadeath

This commit is contained in:
Player Name 2024-05-13 15:13:23 +00:00 committed by Ryan
parent a63867627e
commit f501468ead
9 changed files with 30 additions and 33 deletions

View file

@ -48,7 +48,7 @@ class ShootingStarMiningPulse(player: Player?, node: Scenery?, val star: Shootin
val bonusXp = 75 * player.skills.getStaticLevel(Skills.MINING) val bonusXp = 75 * player.skills.getStaticLevel(Skills.MINING)
player.incrementAttribute("/save:shooting-star:bonus-xp", bonusXp) player.incrementAttribute("/save:shooting-star:bonus-xp", bonusXp)
Repository.sendNews(player.username + " is the discoverer of the crashed star near " + star.location + "!") Repository.sendNews(player.username + " is the discoverer of the crashed star near " + star.location + "!")
player.sendMessage("You have ${player.skills.experienceMutiplier * player.getAttribute("shooting-star:bonus-xp", 0).toDouble()} bonus xp towards mining stardust.") player.sendMessage("You have ${player.skills.experienceMultiplier * player.getAttribute("shooting-star:bonus-xp", 0).toDouble()} bonus xp towards mining stardust.")
ShootingStarPlugin.submitScoreBoard(player) ShootingStarPlugin.submitScoreBoard(player)
star.isDiscovered = true star.isDiscovered = true
return player.skills.getLevel(Skills.MINING) >= star.miningLevel return player.skills.getLevel(Skills.MINING) >= star.miningLevel

View file

@ -198,7 +198,7 @@ public final class PCRewardInterface extends ComponentPlugin {
} else if (skillId == Skills.MAGIC || skillId == Skills.RANGE) { } else if (skillId == Skills.MAGIC || skillId == Skills.RANGE) {
divideBy = 29;//19.1-31 ideal range divideBy = 29;//19.1-31 ideal range
} }
return (int) ((level * level) / divideBy) * (player.getSkills().experienceMutiplier / 2); return (int) ((level * level) / divideBy) * (player.getSkills().experienceMultiplier / 2);
} }
/** /**
@ -283,7 +283,7 @@ public final class PCRewardInterface extends ComponentPlugin {
if (reward.isSkillReward()) { if (reward.isSkillReward()) {
final double experience = ((int) calculateExperience(player, reward.getSkill()) * points); final double experience = ((int) calculateExperience(player, reward.getSkill()) * points);
player.getSkills().addExperience(reward.getSkill(), experience); player.getSkills().addExperience(reward.getSkill(), experience);
message = "The Void Knight has granted you " + (int) (experience * player.getSkills().experienceMutiplier) + " " + reward.getName() + "."; message = "The Void Knight has granted you " + (int) (experience * player.getSkills().experienceMultiplier) + " " + reward.getName() + ".";
} else { } else {
if (!reward.checkItemRequirement(player, option)) { if (!reward.checkItemRequirement(player, option)) {
return; return;

View file

@ -93,7 +93,7 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
} }
} }
71 -> when(stage){ 71 -> when(stage){
0 -> options("Set Ironman Mode (current: ${player.ironmanManager.mode.name})", "Change XP Rate (current: ${player.skills.experienceMutiplier}x)", "I'm ready now.").also { stage++ } 0 -> options("Set Ironman Mode (current: ${player.ironmanManager.mode.name})", "Change XP Rate (current: ${player.skills.experienceMultiplier}x)", "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","Hardcore (Permadeath!)","Ultimate","Nevermind.").also { stage = 10 }
2 -> options("1.0x","2.5x","5.0x","10x").also { stage = 20 } 2 -> options("1.0x","2.5x","5.0x","10x").also { stage = 20 }
@ -107,7 +107,7 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
val mode = IronmanMode.values()[buttonId - 1] val mode = IronmanMode.values()[buttonId - 1]
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.experienceMutiplier == 10.0 && mode != IronmanMode.HARDCORE) player.skills.experienceMutiplier = 5.0 if (player.skills.experienceMultiplier == 10.0 && mode != IronmanMode.HARDCORE) player.skills.experienceMultiplier = 5.0
} }
else else
{ {
@ -124,7 +124,7 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
return true return true
} }
player.dialogueInterpreter.sendDialogue("You set your XP rate to: ${rate}x.") player.dialogueInterpreter.sendDialogue("You set your XP rate to: ${rate}x.")
player.skills.experienceMutiplier = rate player.skills.experienceMultiplier = rate
stage = 0 stage = 0
} }
@ -154,9 +154,9 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
{ {
setAttribute(player, "/save:permadeath", true) setAttribute(player, "/save:permadeath", true)
} }
else if(player.skills.experienceMutiplier == 10.0) else if(player.skills.experienceMultiplier == 10.0)
{ {
player.skills.experienceMutiplier = 5.0 player.skills.experienceMultiplier = 5.0
} }
//This overwrites the stuck dialogue after teleporting to Lumbridge for some reason //This overwrites the stuck dialogue after teleporting to Lumbridge for some reason

View file

@ -98,7 +98,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
stage = 41; stage = 41;
break; break;
case 2: case 2:
npc("Your current XP rate is: " + player.getSkills().experienceMutiplier); npc("Your current XP rate is: " + player.getSkills().experienceMultiplier);
stage = 11; stage = 11;
break; break;
case 3: case 3:
@ -123,7 +123,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
break; break;
case 11: case 11:
if (player.getSkills().experienceMutiplier == 5.0) { if (player.getSkills().experienceMultiplier == 5.0) {
player.newPlayer = player.getSkills().getTotalLevel() < 50; player.newPlayer = player.getSkills().getTotalLevel() < 50;
options("Change xp rate", "Nevermind."); options("Change xp rate", "Nevermind.");
stage++; stage++;
@ -152,7 +152,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
switch(buttonId){ switch(buttonId){
case 1: case 1:
if(player.newPlayer) { if(player.newPlayer) {
player.getSkills().experienceMutiplier = 1.0; player.getSkills().experienceMultiplier = 1.0;
stage = 14; stage = 14;
} else { } else {
stage = 15; stage = 15;
@ -161,7 +161,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
break; break;
case 2: case 2:
if(player.newPlayer){ if(player.newPlayer){
player.getSkills().experienceMutiplier = 2.5; player.getSkills().experienceMultiplier = 2.5;
stage = 14; stage = 14;
} else { } else {
stage = 15; stage = 15;
@ -173,7 +173,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
return true; return true;
case 4: case 4:
if (player.newPlayer) { if (player.newPlayer) {
player.getSkills().experienceMutiplier = 10.0; player.getSkills().experienceMultiplier = 10.0;
stage = 14; stage = 14;
} else { } else {
stage = 15; stage = 15;
@ -183,7 +183,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
npc("One moment, please..."); npc("One moment, please...");
break; break;
case 14: case 14:
npc("Tada, your xp rate is now " + player.getSkills().experienceMutiplier); npc("Tada, your xp rate is now " + player.getSkills().experienceMultiplier);
stage = 131; stage = 131;
break; break;
case 15: case 15:
@ -376,7 +376,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
switch (buttonId) { switch (buttonId) {
case 1: case 1:
interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "Tada! Your experience rate is now 10x.", "Happy Scaping!"); interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "Tada! Your experience rate is now 10x.", "Happy Scaping!");
player.getSkills().experienceMutiplier = 10.0; player.getSkills().experienceMultiplier = 10.0;
stage = 50; stage = 50;
break; break;
case 2: case 2:

View file

@ -4,6 +4,7 @@ import core.api.*
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.player.VarpManager import core.game.node.entity.player.VarpManager
import core.game.node.entity.player.info.login.PlayerSaver import core.game.node.entity.player.info.login.PlayerSaver
import core.game.node.entity.player.link.IronmanMode
import core.game.node.entity.player.link.SavedData import core.game.node.entity.player.link.SavedData
import core.game.node.entity.player.link.diary.DiaryType import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.player.link.quest.QuestRepository import core.game.node.entity.player.link.quest.QuestRepository
@ -42,6 +43,7 @@ fun permadeath(target: Player) {
} }
} }
target.musicPlayer.clearUnlocked() target.musicPlayer.clearUnlocked()
target.ironmanManager.mode = IronmanMode.NONE
PlayerSaver(target).save() PlayerSaver(target).save()
target.clear() target.clear()
} }

View file

@ -622,17 +622,12 @@ public class Player extends Entity {
packetDispatch.sendTempMusic(90); packetDispatch.sendTempMusic(90);
if (!getZoneMonitor().handleDeath(killer) && (!getProperties().isSafeZone() && getZoneMonitor().getType() != ZoneType.SAFE.getId()) && getDetails().getRights() != Rights.ADMINISTRATOR) { if (!getZoneMonitor().handleDeath(killer) && (!getProperties().isSafeZone() && getZoneMonitor().getType() != ZoneType.SAFE.getId()) && getDetails().getRights() != Rights.ADMINISTRATOR) {
//If player was a Hardcore Ironman, announce that they died //If player was a Hardcore Ironman, announce that they died
if (this.getIronmanManager().getMode().equals(IronmanMode.HARDCORE)){ //if this was checkRestriction, ultimate irons would be moved to HARDCORE_DEAD as well if (this.getIronmanManager().getMode().equals(IronmanMode.HARDCORE)) { //if this was checkRestriction, ultimate irons would be moved to HARDCORE_DEAD as well
String gender = this.isMale() ? "man " : "woman "; String gender = this.isMale() ? "man " : "woman ";
if (getAttributes().containsKey("permadeath")) { if (getAttributes().containsKey("permadeath")) {
Repository.sendNews("Permadeath Hardcore Iron" + gender + " " + this.getUsername() + " has fallen. Total Level: " + this.getSkills().getTotalLevel()); // Not enough room for XP Repository.sendNews("Permadeath Hardcore Iron" + gender + " " + this.getUsername() + " has fallen. Total Level: " + this.getSkills().getTotalLevel()); // Not enough room for XP
permadeath(this); permadeath(this);
return; return;
} else {
Repository.sendNews("Hardcore Iron " + gender + " " + this.getUsername() + " has fallen. Total Level: " + this.getSkills().getTotalLevel()); // Not enough room for XP
this.getIronmanManager().setMode(IronmanMode.STANDARD);
asPlayer().getSavedData().getActivityData().setHardcoreDeath(true);
this.sendMessage("You have fallen as a Hardcore Iron Man, your Hardcore status has been revoked.");
} }
} }
GroundItemManager.create(new Item(526), getLocation(), k); GroundItemManager.create(new Item(526), getLocation(), k);

View file

@ -355,13 +355,13 @@ class PlayerSaveParser(val player: Player) {
val skillData = saveFile!!["skills"] as JSONArray val skillData = saveFile!!["skills"] as JSONArray
player.skills.parse(skillData) player.skills.parse(skillData)
player.skills.experienceGained = saveFile!!["totalEXP"].toString().toDouble() player.skills.experienceGained = saveFile!!["totalEXP"].toString().toDouble()
player.skills.experienceMutiplier = saveFile!!["exp_multiplier"].toString().toDouble() player.skills.experienceMultiplier = saveFile!!["exp_multiplier"].toString().toDouble()
if (GameWorld.settings?.default_xp_rate != 5.0) { if (GameWorld.settings?.default_xp_rate != 5.0) {
player.skills.experienceMutiplier = GameWorld.settings?.default_xp_rate!! player.skills.experienceMultiplier = GameWorld.settings?.default_xp_rate!!
} }
val divisor: Double val divisor: Double
if(player.skills.experienceMutiplier >= 10 && !player.attributes.containsKey("permadeath")){ //exclude permadeath HCIMs from XP squish if(player.skills.experienceMultiplier >= 10 && !player.attributes.containsKey("permadeath")){ //exclude permadeath HCIMs from XP squish
divisor = player.skills.experienceMutiplier / 5.0 divisor = player.skills.experienceMultiplier / 5.0
player.skills.correct(divisor) player.skills.correct(divisor)
} }
if (saveFile!!.containsKey("milestone")) { if (saveFile!!.containsKey("milestone")) {

View file

@ -569,7 +569,7 @@ class PlayerSaver (val player: Player){
} }
root.put("skills",skills) root.put("skills",skills)
root.put("totalEXP",player.skills.experienceGained.toString()) root.put("totalEXP",player.skills.experienceGained.toString())
root.put("exp_multiplier",player.skills.experienceMutiplier.toString()) root.put("exp_multiplier",player.skills.experienceMultiplier.toString())
if(player.skills.combatMilestone > 0 || player.skills.skillMilestone > 0){ if(player.skills.combatMilestone > 0 || player.skills.skillMilestone > 0){
val milestone = JSONObject() val milestone = JSONObject()
milestone.put("combatMilestone",player.skills.combatMilestone.toString()) milestone.put("combatMilestone",player.skills.combatMilestone.toString())

View file

@ -41,7 +41,7 @@ public final class Skills {
/** /**
* Represents the constant modifier of experience. * Represents the constant modifier of experience.
*/ */
public double experienceMutiplier = 5.0; public double experienceMultiplier = 5.0;
/** /**
* The maximum experience multiplier. * The maximum experience multiplier.
@ -289,7 +289,7 @@ public final class Skills {
private double getExperienceMod(int slot, double experience, boolean playerMod, boolean multiplyer) { private double getExperienceMod(int slot, double experience, boolean playerMod, boolean multiplyer) {
//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
return experienceMutiplier; return experienceMultiplier;
/*if (!(entity instanceof Player)) { /*if (!(entity instanceof Player)) {
return 1.0; return 1.0;
} }
@ -414,14 +414,14 @@ public final class Skills {
setLifepoints(staticLevels[i]); setLifepoints(staticLevels[i]);
} }
} }
experienceMutiplier = 5.0; experienceMultiplier = 5.0;
updateCombatLevel(); updateCombatLevel();
} }
public void parseExpRate(ByteBuffer buffer) { public void parseExpRate(ByteBuffer buffer) {
experienceMutiplier = buffer.getDouble(); experienceMultiplier = buffer.getDouble();
if(GameWorld.getSettings().getDefault_xp_rate() != experienceMutiplier){ if(GameWorld.getSettings().getDefault_xp_rate() != experienceMultiplier){
experienceMutiplier = GameWorld.getSettings().getDefault_xp_rate(); experienceMultiplier = GameWorld.getSettings().getDefault_xp_rate();
} }
} }
@ -445,7 +445,7 @@ public final class Skills {
} }
public void saveExpRate(ByteBuffer buffer) { public void saveExpRate(ByteBuffer buffer) {
buffer.putDouble(experienceMutiplier); buffer.putDouble(experienceMultiplier);
} }
/** /**