Untitled
unknown
java
4 years ago
11 kB
6
Indexable
package com.rs.game.player.content.dailychallenges; import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Random; import com.rs.game.item.ItemIdentifiers; import com.rs.game.player.Player; import com.rs.game.player.content.dailychallenges.challenges.DailyChallenge; import com.rs.game.player.content.dailychallenges.challenges.DailyChallengeState; import com.rs.game.player.content.dailychallenges.challenges.DailyChallengesHolder; import com.rs.game.player.content.dailychallenges.map.DailyChallengesMap; import com.rs.game.player.dialogue.Dialogue; import com.rs.utils.Colors; import lombok.Getter; import lombok.Setter; public class DailyChallengesManager implements Serializable { private static final long serialVersionUID = -9206796684786532738L; public static final int RESET_VIS_WAX_AMOUNT = 25; public static final int EXTEND_VIS_WAX_AMOUNT = 50; public transient DailyChallenge selectedChallenge; public transient int selectedChallengeIndex; @Getter private LinkedHashMap<DailyChallenge, DailyChallengeState> dailyChallenges; @Getter @Setter private transient Player player; public DailyChallengesManager() { setPlayer(player); if (dailyChallenges == null) { dailyChallenges = new LinkedHashMap<DailyChallenge, DailyChallengeState>(5); } } public void onLogin() { // if(DailyChallengesMap. { if (requiresNewChallenges()) { DailyChallengesMap.getEntry(player.getUsername()).setNeedNewChallenges(false); generateDailyChallenges(); player.sm(Colors.GREEN + "Your Daily Challenges have been reset!"); } else { player.sm(Colors.CYAN + "There is " + DailyChallengesExecutor.timeUntilNextExecution() + " time left until Daily Challenges reset."); } // } } private boolean requiresNewChallenges() { if (DailyChallengesMap.getEntry(player.getUsername()) == null) { return false; } return DailyChallengesMap.getEntry(player.getUsername()).needNewChallenges(); } public DailyChallenge getDailyChallengeByIndexInMap(int index) { List<DailyChallenge> keys = new ArrayList<DailyChallenge>(dailyChallenges.keySet()); return keys.get(index); } public DailyChallenge getDailyChallengeBySkill(int skillId) { for (Map.Entry<DailyChallenge, DailyChallengeState> entry : player.getDailyChallenges().getDailyChallenges() .entrySet()) { int challengeSkill = entry.getKey().getSkillId(); if (skillId == challengeSkill) { return entry.getKey(); } } return null; } public void updateChallengeProgress(DailyChallenge challenge, int amount) { if (dailyChallenges.containsKey(challenge)) { dailyChallenges.get(challenge).setProgress(dailyChallenges.get(challenge).getProgress() + amount); } } private static LinkedHashMap<DailyChallenge, DailyChallengeState> cloneMap( LinkedHashMap<DailyChallenge, DailyChallengeState> mapToClone) { Map<DailyChallenge, DailyChallengeState> newMap = new LinkedHashMap<DailyChallenge, DailyChallengeState>( mapToClone.size()); for (Map.Entry<DailyChallenge, DailyChallengeState> entry : mapToClone.entrySet()) { newMap.put(entry.getKey(), entry.getValue()); } return (LinkedHashMap<DailyChallenge, DailyChallengeState>) newMap; } private static DailyChallenge getDailyChallengeByIndexInMap(Map<DailyChallenge, DailyChallengeState> map, int index) { List<DailyChallenge> keys = new ArrayList<DailyChallenge>(map.keySet()); return keys.get(index); } private static DailyChallengeState getDailyChallengeProgressByIndexInMap( Map<DailyChallenge, DailyChallengeState> map, int index) { List<DailyChallengeState> values = new ArrayList<DailyChallengeState>(map.values()); return values.get(index); } private boolean rerollChallenge(DailyChallenge challenge) { if (dailyChallenges.containsKey(challenge) && !isCompleted(challenge)) { Map<DailyChallenge, DailyChallengeState> tempMap = cloneMap(dailyChallenges); List<DailyChallenge> keys = new ArrayList<DailyChallenge>(dailyChallenges.keySet()); int indexInMap = keys.indexOf(challenge); keys.remove(indexInMap); DailyChallengesHolder challengeSkill = randomSkill(); while (true) { challengeSkill = randomSkill(); if (!existingChallengeSkill(challengeSkill)) { break; } } DailyChallenge generatedChallenge = randomChallengeFromSkill(challengeSkill); resetDailyChallenges(); for (int i = 0; i < 5; i++) { if (i == indexInMap) { dailyChallenges.put(generatedChallenge, new DailyChallengeState(generatedChallenge)); dailyChallenges.get(generatedChallenge).setReRolled(true); continue; } dailyChallenges.put(getDailyChallengeByIndexInMap(tempMap, i), getDailyChallengeProgressByIndexInMap(tempMap, i)); } return true; } else { player.getDialogueManager().startDialogue("SimpleMessage", Colors.RED + "Error message!<br>" + "This challenge has been either completed, claimed, or doesn't exist in your challenges."); } return false; } public void generateDailyChallenges() { resetDailyChallenges(); DailyChallengesHolder challengeSkill = randomSkill(); while (dailyChallenges.size() < 5) { challengeSkill = randomSkill(); if (existingChallengeSkill(challengeSkill)) { continue; } DailyChallenge challenge = randomChallengeFromSkill(challengeSkill); dailyChallenges.put(challenge, new DailyChallengeState(challenge)); } player.sm("Size: " + dailyChallenges.size()); printMap(); } public void claimReward(DailyChallenge challenge) { if (isCompleted(challenge) && !dailyChallenges.get(challenge).isClaimedReward()) { // code for reward here. dailyChallenges.get(challenge).setClaimedReward(true); return; } player.sm(Colors.RED + "There are no rewards for you to claim."); } public boolean rewardAwaits() { for (Map.Entry<DailyChallenge, DailyChallengeState> entry : player.getDailyChallenges().getDailyChallenges() .entrySet()) { if (isCompleted(entry.getKey()) && !dailyChallenges.get(entry.getKey()).isClaimedReward()) { return true; } } return false; } public boolean isCompleted(DailyChallenge challenge) { for (Map.Entry<DailyChallenge, DailyChallengeState> entry : player.getDailyChallenges().getDailyChallenges() .entrySet()) { if (entry.getKey().equals(challenge)) { Integer value = dailyChallenges.get(entry.getKey()).getProgress(); if (value >= challenge.getFinishCount()) { return true; } } } return false; } private void resetDailyChallenges() { dailyChallenges.clear(); } public void printMap() { for (Map.Entry<DailyChallenge, DailyChallengeState> entry : player.getDailyChallenges().getDailyChallenges() .entrySet()) { DailyChallenge key = entry.getKey(); DailyChallengeState state = dailyChallenges.get(entry.getKey()); System.out.println("Entry: " + key.getName() + " skill id: " + key.getSkillId() + ", progress: (" + state.getProgress() + "/" + key.getFinishCount() + "), has claimed reward: " + state.isClaimedReward() + ", is rerolled: " + state.isReRolled()); } } private boolean existingChallengeSkill(DailyChallengesHolder challengeSkill) { for (Map.Entry<DailyChallenge, DailyChallengeState> entry : dailyChallenges.entrySet()) { DailyChallenge key = entry.getKey(); if (key.getName().toLowerCase().equalsIgnoreCase(challengeSkill.toString().toLowerCase())) { return true; } } return false; } private DailyChallengesHolder randomSkill() { int pick = new Random().nextInt(DailyChallengesHolder.values().length); return DailyChallengesHolder.values()[pick]; } private DailyChallenge randomChallengeFromSkill(DailyChallengesHolder challengeSkill) { int pick = new Random().nextInt(challengeSkill.getDailyChallenges().size()); return challengeSkill.getDailyChallenges().get(pick); } public void reRoll(DailyChallenge challenge) { player.getDialogueManager().startDialogue(new Dialogue() { @Override public void start() { sendOptionsDialogue("Reroll " + Colors.RED + "[Daily " + challenge.getName() + "]</col> for " + Colors.RED + RESET_VIS_WAX_AMOUNT + " Vis wax?", "Yes, proceed to Reroll.", "No."); } @Override public void run(int interfaceId, int componentId) { switch (stage) { case -1: switch (componentId) { case OPTION_1: if (player.getInventory().getAmountOf(ItemIdentifiers.VIS_WAX) >= RESET_VIS_WAX_AMOUNT) { if (rerollChallenge(challenge)) { DailyChallengesInterface.refreshInterface(player); sendDialogue("Success."); stage = 0; } } else { sendDialogue("You do not have enough Vis wax to do this, requires: " + RESET_VIS_WAX_AMOUNT + " to reroll a challenge."); stage = 0; } break; case OPTION_2: end(); break; } break; case 0: end(); break; } } @Override public void finish() { } }); } private enum XP_DROPTABLE { // skillLevel, Experience LVL_1(1, 500), LVL_2(2, 552), LVL_3(3, 616), LVL_4(4, 680), LVL_5(5, 746), LVL_6(6, 832), LVL_7(7, 984), LVL_8(8, 1016), LVL_9(9, 1154), LVL_10(10, 1228), LVL_11(11, 1360), LVL_12(12, 1504), LVL_13(13, 1644), LVL_14(14, 1832), LVL_15(15, 2016), LVL_16(16, 2092), LVL_17(17, 2192), LVL_18(18, 2280), LVL_19(19, 2384), LVL_20(20, 2480), LVL_21(21, 2596), LVL_22(22, 2696), LVL_23(23, 2816), LVL_24(24, 2940), LVL_25(25, 3072), LVL_26(26, 3192), LVL_27(27, 3242), LVL_28(28, 3312), LVL_29(29, 3624), LVL_30(30, 3784), LVL_31(31, 3946), LVL_32(32, 4112), LVL_33(33, 4288), LVL_34(34, 4474), LVL_35(35, 4664), LVL_36(36, 4868), LVL_37(37, 5078), LVL_38(38, 5296), LVL_39(39, 5532), LVL_40(40, 5764), LVL_41(41, 6016), LVL_42(42, 6276), LVL_43(43, 6544), LVL_44(44, 6828), LVL_45(45, 7116), LVL_46(46, 7432), LVL_47(47, 7764), LVL_48(48, 8100), LVL_49(49, 8440), LVL_50(50, 8808), LVL_51(51, 9186), LVL_52(52, 9600), LVL_53(53, 9996), LVL_54(54, 10436), LVL_55(55, 10896), LVL_56(56, 11376), LVL_57(57, 11880), LVL_58(58, 12366), LVL_59(59, 12929), LVL_60(60, 13474), LVL_61(61, 14057), LVL_62(62, 14684), LVL_63(63, 15290), LVL_64(64, 16033), LVL_65(65, 16671), LVL_66(66, 17372), LVL_67(67, 18152), LVL_68(68, 19032), LVL_69(69, 19760), LVL_70(70, 20742), LVL_71(71, 21543), LVL_72(72, 22474), LVL_73(73, 23572), LVL_74(74, 24655), LVL_75(75, 25709), LVL_76(76, 26715), LVL_77(77, 27960), LVL_78(78, 29174), LVL_79(79, 30337), LVL_80(80, 31840), LVL_81(81, 33328), LVL_82(82, 34780), LVL_83(83, 36174), LVL_84(84, 38096), LVL_85(85, 39347), LVL_86(86, 41196), LVL_87(87, 43003), LVL_88(88, 44739), LVL_89(89, 47380), LVL_90(90, 48972), LVL_91(91, 51612), LVL_92(92, 52914), LVL_93(93, 55424), LVL_94(94, 57886), LVL_95(95, 60261), LVL_96(96, 64517), LVL_97(97, 66779), LVL_98(98, 68815); @Getter private int skillLevel, experience; XP_DROPTABLE(int skillLevel, int experience) { this.skillLevel = skillLevel; this.experience = experience; } } }
Editor is loading...