Show me line 191 in StartTutorial.java.Code:at core.framework.game.player.controlers.StartTutorial.forceClose(StartTutorial.java:191)
|
Edit: Posting this in here because I accidentally put it in the RS2 server help by accident, sorry!
I added difficulties from Rune-Evo 3, as I was hoping to test it out.
I got everything working but then when I added for it to open the dialogue to select the difficulty, I logged in a new account and it gave me this error:
I have no idea how to fix this and I put so much time into trying this out, any help would be lovely. Thanks a lot RuneServer.Code:java.lang.NullPointerException at core.framework.game.player.controlers.StartTutorial.forceClose(StartTutorial.java:191) at core.framework.game.player.ControlerManager.forceStop(ControlerManager.java:274) at core.framework.game.player.ControlerManager.login(ControlerManager.java:62) at core.framework.game.player.Player.run(Player.java:1451) at core.framework.game.player.Player.start(Player.java:1134) at core.framework.net.decoders.LoginPacketsDecoder.decodeWorldLogin(LoginPacketsDecoder.java:179) at core.framework.net.decoders.LoginPacketsDecoder.decode(LoginPacketsDecoder.java:44) at core.framework.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:122) at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:95) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:558) at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35) at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102) at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
I'm sorry sir, still learning. My sincere apologies if I'm doing something wrong.
Here's my StartTutorial.java:
Basically I want it to open the dialogue when a new player joins. As you can see it opens a interface there too.Code:package core.framework.game.player.controlers; import core.framework.game.Entity; import core.framework.game.player.DialogueManager; import core.framework.game.World; import core.framework.game.WorldObject; import core.framework.game.WorldTile; import core.framework.game.npc.NPC; import core.framework.game.player.Skills; import core.framework.game.tasks.WorldTask; import core.framework.game.tasks.WorldTasksManager; import java.util.Date; import java.util.Calendar; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.text.DecimalFormat; import java.io.IOException; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import core.framework.tools.FileManager; public class StartTutorial extends Controler { private transient DialogueManager dialogueManager; private static final int QUEST_GUIDE_NPC = 949; @Override public void start() { refreshStage(); } public NPC findNPC(int id) { // as it may be far away for (NPC npc : World.getNPCs()) { if (npc == null || npc.getId() != id) continue; return npc; } return null; } /* * return remove controler */ @Override public boolean login() { start(); return true; } /* * return remove controler */ @Override public boolean logout() { return false; } @Override public boolean processMagicTeleport(WorldTile toTile) { return false; } @Override public boolean keepCombating(Entity target) { return false; } @Override public boolean canAttack(Entity target) { return false; } @Override public boolean canHit(Entity target) { return false; } @Override public boolean processItemTeleport(WorldTile toTile) { return false; } @Override public boolean processObjectTeleport(WorldTile toTile) { return false; } @Override public void process() { if (getStage() == 1 && player.getPrayer().isAncientCurses()) updateProgress(); } @Override public boolean processObjectClick1(WorldObject object) { int id = object.getId(); if ((id == 47120 && getStage() == 1) || (Wilderness.isDitch(id) && getStage() == 2)) return true; return false; } @Override public boolean processObjectClick2(WorldObject object) { return false; } @Override public boolean processObjectClick3(WorldObject object) { return false; } public DialogueManager getDialogueManager() { return dialogueManager; } public void refreshStage() { int stage = getStage(); if (stage == 0) { NPC guide = findNPC(QUEST_GUIDE_NPC); if (guide != null) player.getHintIconsManager().addHintIcon(guide, 0, -1, false); } else if (stage == 1) { player.getHintIconsManager().addHintIcon(3102, 3504, 0, 100, 0, 0, -1, false); } else if (stage == 2) { player.getHintIconsManager().addHintIcon(3092, 3521, 0, 0, 0, 0, -1, false); } sendInterfaces(); } public void updateProgress() { setStage(getStage() + 1); if (getStage() == 2) { player.getDialogueManager().startDialogue("QuestGuide", QUEST_GUIDE_NPC, this); } refreshStage(); } @Override public boolean processNPCClick1(NPC npc) { if (npc.getId() == QUEST_GUIDE_NPC) { player.getDialogueManager().startDialogue("QuestGuide", QUEST_GUIDE_NPC, this); } return false; } public void setStage(int stage) { getArguments()[0] = stage; } public int getStage() { if (getArguments() == null) setArguments(new Object[] { 0 }); // index 0 = stage return (Integer) getArguments()[0]; } @Override public void forceClose() { WorldTasksManager.schedule(new WorldTask() { public void run() { player.getInterfaceManager().sendInterfaces(); player.getInterfaceManager().closeReplacedRealChatBoxInterface(); } }); /*int[] itemList = { 1153, 1115, 1067, 1323, 1167, 1129, 1095, 841, 577, 1011, 1381, 1725, 1731 }; for (int i = 0; i < itemList.length; i++) { player.getInventory().addItem(itemList[i], 1); } player.getInventory().addItem(882, 500); player.getInventory().addItem(556, 10000); player.getInventory().addItem(558, 10000); player.getInventory().addItem(554, 10000); player.getInventory().addItem(995, 750000);*/ player.getHintIconsManager().removeUnsavedHintIcon(); player.setExamine("Legion Newbie"); player.getMusicsManager().reset(); World.sendWorldMessage("<col=01DFD7>Welcome to Legion,</col> " + player.getDisplayName() + "!", false); FileManager.writeToFile("iplogs", "IP-Created-Accounts.txt", "["+ player.getDisplayName() +", "+ DateFormat.getDateTimeInstance().format(new Date()) + "]: "+ player.getSession().getIP()+ ""); player.welcomeInterface(); getDialogueManager().startDialogue("NewStarter"); } }
Thank you so much! The error is gone, but now I'm receiving other errors:
I'm really confused on this, sorry. That error occurs when I try to kill NPC's/creatures.Code:ERROR! THREAD NAME: World Thread java.lang.NullPointerException at core.framework.game.player.Skills.addXp(Skills.java:410) at core.framework.game.player.actions.PlayerCombat.delayHit(PlayerCombat.java:3176) at core.framework.game.player.actions.PlayerCombat.delayNormalHit(PlayerCombat.java:3102) at core.framework.game.player.actions.PlayerCombat.meleeAttack(PlayerCombat.java:2520) at core.framework.game.player.actions.PlayerCombat.processWithDelay(PlayerCombat.java:117) at core.framework.game.player.ActionManager.process(ActionManager.java:29) at core.framework.game.player.Player.processEntity(Player.java:1293) at core.framework.cores.WorldThread.run(WorldThread.java:34)
Yep, this is the same method as Rune-Evo 3:
Just not sure why it's not working. Again my apologies as I'm still learning Java.Code:public void addXp(int skill, double exp) { if (player.isXpLocked() || locked[skill]) { return; } if (player.allowChange() == true) { player.setAllowChange(false); player.sendMessage("<col=FF0000>You can now no longer change your Difficulty."); } if (player.getDifficulty() == 1) { exp *= 200; // Super Easy } else if (player.getDifficulty() == 2) { exp *= 150; // Easy } else if (player.getDifficulty() == 3) { exp *= 90; // Normal } else if (player.getDifficulty() == 4) { exp *= 50; // Hard } else if (player.getDifficulty() == 5) { exp *= 10; // Extreme } player.getControlerManager().trackXP(skill, (int) exp); exp *= player.getAuraManager().usingWisdom() == true ? 1.025 : 1; exp *= TimeManager.isWeekend() == true ? 1.7 : 1.0; int oldLevel = getLevelForXp(skill); xp[skill] += exp; for (int i = 0; i < trackSkills.length; i++) { if (trackSkills[i]) { if (trackSkillsIds[i] == 30 || (trackSkillsIds[i] == 29 && (skill == Skills.ATTACK || skill == Skills.DEFENCE || skill == Skills.STRENGTH || skill == Skills.MAGIC || skill == Skills.RANGE || skill == Skills.HITPOINTS)) || trackSkillsIds[i] == getCounterSkill(skill)) { xpTracks[i] += exp; refreshCounterXp(i); } } } if (xp[skill] > MAXIMUM_EXP) { xp[skill] = MAXIMUM_EXP; } int newLevel = getLevelForXp(skill); int levelDiff = newLevel - oldLevel; if (newLevel > oldLevel) { level[skill] += levelDiff; player.getDialogueManager().startDialogue("LevelUp", skill); if (skill == SUMMONING || (skill >= ATTACK && skill <= MAGIC)) { player.getAppearence().generateAppearenceData(); if (skill == HITPOINTS) player.heal(levelDiff * 10); else if (skill == PRAYER) player.getPrayer().restorePrayer(levelDiff * 10); } player.getQuestManager().checkCompleted(); } refresh(skill); }
Edit: I think I'm just gonna get help on adding a non-ripped version of a XP mode thing. I created a different thread about it.
« Previous Thread | Next Thread » |
Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |