mirror of
https://github.com/2006-Scape/2006RebottedClient.git
synced 2026-07-03 00:31:48 +00:00
13915 lines
584 KiB
Java
13915 lines
584 KiB
Java
package org.rebotted;
|
|
|
|
import org.rebotted.archive.ASMClassLoader;
|
|
import org.rebotted.archive.ClassArchive;
|
|
import org.rebotted.bot.data.APIData;
|
|
import org.rebotted.bot.data.RebottedAPI;
|
|
import org.rebotted.bot.loader.APILoader;
|
|
import org.rebotted.cache.FileArchive;
|
|
import org.rebotted.cache.FileStore;
|
|
import org.rebotted.cache.FileStore.Store;
|
|
import org.rebotted.cache.anim.Animation;
|
|
import org.rebotted.cache.anim.Frame;
|
|
import org.rebotted.cache.anim.Graphic;
|
|
import org.rebotted.cache.config.Varbit;
|
|
import org.rebotted.cache.config.Varp;
|
|
import org.rebotted.cache.def.FloorDefinition;
|
|
import org.rebotted.cache.def.ItemDefinition;
|
|
import org.rebotted.cache.def.NpcDefinition;
|
|
import org.rebotted.cache.def.ObjectDefinition;
|
|
import org.rebotted.cache.graphics.*;
|
|
import org.rebotted.cache.idk.IdentityKit;
|
|
import org.rebotted.collection.Deque;
|
|
import org.rebotted.collection.Linkable;
|
|
import org.rebotted.draw.ProducingGraphicsBuffer;
|
|
import org.rebotted.draw.Rasterizer2D;
|
|
import org.rebotted.draw.Rasterizer3D;
|
|
import org.rebotted.entity.*;
|
|
import org.rebotted.entity.model.Model;
|
|
import org.rebotted.io.Buffer;
|
|
import org.rebotted.net.BufferedConnection;
|
|
import org.rebotted.net.IsaacCipher;
|
|
import org.rebotted.net.requester.Resource;
|
|
import org.rebotted.net.requester.ResourceProvider;
|
|
import org.rebotted.scene.*;
|
|
import org.rebotted.scene.object.GroundDecoration;
|
|
import org.rebotted.scene.object.SpawnedObject;
|
|
import org.rebotted.scene.object.WallDecoration;
|
|
import org.rebotted.scene.object.WallObject;
|
|
import org.rebotted.sign.SignLink;
|
|
import org.rebotted.sound.SoundConstants;
|
|
import org.rebotted.sound.SoundPlayer;
|
|
import org.rebotted.sound.Track;
|
|
import net.rebotted.cache.graphics.RSFont;
|
|
import net.rebotted.net.protocol.ProtocolConstants;
|
|
import net.rebotted.scene.graphic.Fog;
|
|
import org.rebotted.ui.themes.SubstanceDark;
|
|
import org.rebotted.ui.BotFrame;
|
|
import org.rebotted.util.*;
|
|
|
|
import javax.imageio.ImageIO;
|
|
import javax.swing.*;
|
|
import java.applet.AppletContext;
|
|
import java.awt.*;
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.*;
|
|
import java.net.InetAddress;
|
|
import java.net.Socket;
|
|
import java.net.URL;
|
|
import java.util.AbstractMap;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.zip.CRC32;
|
|
|
|
public class Client extends GameApplet {
|
|
|
|
public static final int[][] PLAYER_BODY_RECOLOURS = {
|
|
{6798, 107, 10283, 16, 4797, 7744, 5799, 4634, 33697, 22433, 2983, 54193},
|
|
{8741, 12, 64030, 43162, 7735, 8404, 1701, 38430, 24094, 10153, 56621, 4783, 1341, 16578, 35003, 25239},
|
|
{25238, 8742, 12, 64030, 43162, 7735, 8404, 1701, 38430, 24094, 10153, 56621, 4783, 1341, 16578, 35003},
|
|
{4626, 11146, 6439, 12, 4758, 10270}, {4550, 4537, 5681, 5673, 5790, 6806, 8076, 4574}};
|
|
public static final int[] tabInterfaceIDs = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1};
|
|
public static final int[] anIntArray1204 = {9104, 10275, 7595, 3610, 7975, 8526, 918, 38802, 24466, 10145, 58654,
|
|
5027, 1457, 16565, 34991, 25486};
|
|
private static final long serialVersionUID = 5707517957054703648L;
|
|
private static final int[] SKILL_EXPERIENCE;
|
|
private static final String validUserPassChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"\243$%^&*()-_=+[{]};:'@#~,<.>/?\\| ";
|
|
public static ScreenMode frameMode = ScreenMode.FIXED;
|
|
public static int frameWidth = 765;
|
|
public static int frameHeight = 503;
|
|
public static int screenAreaWidth = 512;
|
|
public static int screenAreaHeight = 334;
|
|
public static int cameraZoom = 600;
|
|
public static boolean showChatComponents = true;
|
|
public static boolean showTabComponents = true;
|
|
public static boolean changeTabArea = frameMode != ScreenMode.FIXED;
|
|
public static boolean changeChatArea = frameMode != ScreenMode.FIXED;
|
|
public static boolean transparentTabArea = false;
|
|
public static Client instance;
|
|
public static int portOffset;
|
|
public static int anInt1089;
|
|
public static int spellId = 0;
|
|
public static int totalRead = 0;
|
|
public static Player localPlayer;
|
|
public static boolean loggedIn;
|
|
public static int tick;
|
|
public static boolean updateChatbox;
|
|
public static int[] BIT_MASKS;
|
|
public static int anInt1290;
|
|
public static String server = "";
|
|
public static int[] fullScreenTextureArray;
|
|
public static int openInterfaceId;
|
|
static int anInt1211;
|
|
public static int tabId;
|
|
private static int anInt849;
|
|
private static int anInt854;
|
|
private static int anInt924;
|
|
private static int nodeID = 10;
|
|
private static boolean isMembers = true;
|
|
private static boolean lowMemory = false;
|
|
private static int anInt986;
|
|
private static int anInt1005;
|
|
private static int anInt1051;
|
|
private static int anInt1097;
|
|
private static boolean tabAreaAltered;
|
|
private static ProducingGraphicsBuffer loginBoxImageProducer;
|
|
private static int anInt1117;
|
|
private static int anInt1134;
|
|
private static int anInt1142;
|
|
private static int anInt1155;
|
|
private static boolean fpsOn;
|
|
private static ProducingGraphicsBuffer tabImageProducer;
|
|
private static ProducingGraphicsBuffer gameScreenImageProducer;
|
|
private static ProducingGraphicsBuffer chatboxImageProducer;
|
|
private static int anInt1175;
|
|
private static int[] anIntArray1180;
|
|
private static int[] anIntArray1181;
|
|
private static int[] anIntArray1182;
|
|
private static int anInt1188;
|
|
private static boolean flagged;
|
|
private static int anInt1226;
|
|
private static int anInt1288;
|
|
|
|
static {
|
|
SKILL_EXPERIENCE = new int[99];
|
|
int i = 0;
|
|
for (int j = 0; j < 99; j++) {
|
|
int l = j + 1;
|
|
int i1 = (int) ((double) l + 300D * Math.pow(2D, (double) l / 7D));
|
|
i += i1;
|
|
SKILL_EXPERIENCE[j] = i / 4;
|
|
}
|
|
BIT_MASKS = new int[32];
|
|
i = 2;
|
|
for (int k = 0; k < 32; k++) {
|
|
BIT_MASKS[k] = i - 1;
|
|
i += i;
|
|
}
|
|
}
|
|
public static BotFrame botFrame = null;
|
|
public final int[] // Perfected (Hp, pray and run orb)
|
|
orbX = {0, 0, 24}, orbY = {41, 85, 122}, orbTextX = {15, 16, 40}, orbTextY = {67, 111, 148},
|
|
coloredOrbX = {27, 27, 51}, coloredOrbY = {45, 89, 126}, currentInterface = {4016, 4012, 149},
|
|
maximumInterface = {4017, 4013, 149}, orbIconX = {33, 30, 58}, orbIconY = {51, 92, 130};
|
|
public final FileStore[] indices;
|
|
public final Widget aClass9_1059;
|
|
public final int anInt1239 = 100;
|
|
private final int[] soundVolume;
|
|
private final int[] modeX = {164, 230, 296, 362}, modeNamesX = {26, 86, 150, 212, 286, 349, 427},
|
|
modeNamesY = {158, 158, 153, 153, 153, 153, 158}, channelButtonsX = {5, 71, 137, 203, 269, 335, 404};
|
|
private final String[] modeNames = {"All", "Game", "Public", "Private", "Clan", "Trade", "Report Abuse"};
|
|
private final int[] hitmarks562 = {31, 32, 33, 34};
|
|
private final int[] tabClickX = {38, 33, 33, 33, 33, 33, 38, 38, 33, 33, 33, 33, 33, 38},
|
|
tabClickStart = {522, 560, 593, 625, 659, 692, 724, 522, 560, 593, 625, 659, 692, 724},
|
|
tabClickY = {169, 169, 169, 169, 169, 169, 169, 466, 466, 466, 466, 466, 466, 466};
|
|
private final int[] chatRights;
|
|
private final int[] currentExp;
|
|
private final int[] quakeMagnitudes;
|
|
private final boolean[] quakeDirectionActive;
|
|
private final int maxPlayers;
|
|
private final int internalLocalPlayerIndex;
|
|
private final int[] currentStats;
|
|
private final long[] ignoreListAsLongs;
|
|
private final int[] quake4PiOverPeriods;
|
|
private final int[] chatTypes;
|
|
private final String[] chatNames;
|
|
private final String[] chatMessages;
|
|
private final int[] anIntArray965 = {0xffff00, 0xff0000, 65280, 65535, 0xff00ff, 0xffffff};
|
|
private final int[] anIntArray968;
|
|
private final int[] anIntArray969;
|
|
private final int anInt975;
|
|
private final int[] anIntArray976;
|
|
private final int[] anIntArray977;
|
|
private final int[] anIntArray978;
|
|
private final int[] anIntArray979;
|
|
private final int[] textColourEffect;
|
|
private final int[] anIntArray981;
|
|
private final int[] anIntArray982;
|
|
private final String[] aStringArray983;
|
|
private final int[] characterDesignColours;
|
|
private final boolean aBoolean994;
|
|
private final int[] quakeTimes;
|
|
private final int[] maximumLevels;
|
|
private final int[] anIntArray1045;
|
|
private final int[] minimapLeft;
|
|
private final int[] anIntArray1057;
|
|
private final int barFillColor;
|
|
private final int[] anIntArray1065;
|
|
private final int[] archiveCRCs;
|
|
private final String[] playerOptions;
|
|
private final boolean[] playerOptionsHighPriority;
|
|
private final int[][][] localRegions;
|
|
private final int[] objectGroups = {0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3};
|
|
private final int[] quakeAmplitudes;
|
|
private final int[] tracks;
|
|
private final Sprite[] modIcons;
|
|
private final int[] minimapLineWidth;
|
|
private final int[] privateMessageIds;
|
|
private final int[] trackLoops;
|
|
private final int[] soundDelay;
|
|
private final boolean rsAlreadyLoaded;
|
|
public FileArchive mediaStreamLoader;
|
|
public boolean isPoisoned, clickedQuickPrayers;
|
|
public int digits = 0;
|
|
public int xpCounter, xpAddedPos, expAdded;
|
|
public int rights;
|
|
public String name;
|
|
public String defaultText;
|
|
public String clanname;
|
|
public int chatTypeView;
|
|
public int clanChatMode;
|
|
public int autoCastId = 0;
|
|
public String prayerBook;
|
|
public int localPlayerIndex;
|
|
public int anInt897;
|
|
public int[] settings;
|
|
public int anInt988;
|
|
public ResourceProvider resourceProvider;
|
|
public int regionX;
|
|
public int regionY;
|
|
public int anInt1132;
|
|
public int anInt1171;
|
|
public int anInt1210;
|
|
public int anInt1254;
|
|
public RSFont newSmallFont, newRegularFont, newBoldFont;
|
|
public RSFont newFancyFont;
|
|
public int anInt1279;
|
|
public int drawCount;
|
|
public int fullscreenInterfaceID;
|
|
public int anInt1044;// 377
|
|
public int anInt1129;// 377
|
|
public int anInt1315;// 377
|
|
public int anInt1500;// 377
|
|
public int anInt1501;// 377
|
|
private Fog fog = new Fog();
|
|
private int[][] xp_added = new int[10][3];
|
|
private Sprite[] skill_sprites = new Sprite[SkillConstants.SKILL_COUNT];
|
|
/**
|
|
* CRC32 is one of hash functions based on on the "polynomial" division
|
|
* idea. The CRC is acronym for Cyclic Redundancy Code (other variants
|
|
* instead "Code" is "Check" and "Checksum") algorithm. The number 32 is
|
|
* specifying the size of resulting hash value (checksum The value
|
|
* calculated from content of file.
|
|
*/
|
|
private CRC32 indexCrc = new CRC32();
|
|
private int cButtonHPos;
|
|
private int cButtonCPos;
|
|
private int setChannel;
|
|
private int currentTrackTime;
|
|
private long trackTimer;
|
|
@SuppressWarnings("unused")
|
|
private int currentTrackLoop;
|
|
private int poisonType = 0;
|
|
private int specialOrb = 0;
|
|
private ProducingGraphicsBuffer loginScreenAccessories;
|
|
private int specialEnabled = 0;
|
|
private boolean runHover, prayHover, hpHover, prayClicked, specialHover, worldHover, autocast;
|
|
@SuppressWarnings("unused")
|
|
private int currentTrackPlaying;
|
|
private ProducingGraphicsBuffer leftFrame;
|
|
private ProducingGraphicsBuffer topFrame;
|
|
private int ignoreCount;
|
|
private long loadingStartTime;
|
|
private int[][] anIntArrayArray825;
|
|
private int[] friendsNodeIDs;
|
|
public Deque[][][] groundItems;
|
|
private int[] anIntArray828;
|
|
private int[] anIntArray829;
|
|
private volatile boolean aBoolean831;
|
|
private Socket jaggrab;
|
|
private int loginScreenState;
|
|
private Buffer chatBuffer;
|
|
public Npc[] npcs;
|
|
private int npcCount;
|
|
private int[] npcIndices;
|
|
private int removedMobCount;
|
|
private int[] removedMobs;
|
|
private int lastOpcode;
|
|
private int secondLastOpcode;
|
|
private int thirdLastOpcode;
|
|
private String clickToContinueString;
|
|
private int privateChatMode;
|
|
private Buffer login;
|
|
private boolean aBoolean848;
|
|
private int[] anIntArray850;
|
|
private int[] anIntArray851;
|
|
private int[] anIntArray852;
|
|
private int[] anIntArray853;
|
|
private int hintIconDrawType;
|
|
public int xCameraPos;
|
|
public int zCameraPos;
|
|
public int yCameraPos;
|
|
public int yCameraCurve;
|
|
public int xCameraCurve;
|
|
private int myPrivilege;
|
|
private Sprite mapFlag;
|
|
private Sprite mapMarker;
|
|
private int weight;
|
|
private MouseDetection mouseDetection;
|
|
private volatile boolean drawFlames;
|
|
private String reportAbuseInput;
|
|
public boolean menuOpen;
|
|
private int anInt886;
|
|
private String inputString;
|
|
public Player[] players;
|
|
private int playerCount;
|
|
private int[] playerList;
|
|
private int mobsAwaitingUpdateCount;
|
|
private int[] mobsAwaitingUpdate;
|
|
private Buffer[] playerSynchronizationBuffers;
|
|
private int cameraRotation;
|
|
private int friendsCount;
|
|
private int friendServerStatus;
|
|
private int[][] anIntArrayArray901;
|
|
private byte[] aByteArray912;
|
|
private int anInt913;
|
|
private int crossX;
|
|
private int crossY;
|
|
private int crossIndex;
|
|
private int crossType;
|
|
public int plane;
|
|
private boolean loadingError;
|
|
private int[][] anIntArrayArray929;
|
|
private Sprite aClass30_Sub2_Sub1_Sub1_931;
|
|
private Sprite aClass30_Sub2_Sub1_Sub1_932;
|
|
private int hintIconPlayerId;
|
|
private int hintIconX;
|
|
private int hintIconY;
|
|
private int hintIconLocationArrowHeight;
|
|
private int hintIconLocationArrowRelX;
|
|
private int hintIconLocationArrowRelY;
|
|
private int tickDelta;
|
|
private SceneGraph scene;
|
|
private Sprite[] sideIcons;
|
|
private int menuScreenArea;
|
|
private int menuOffsetX;
|
|
private int menuOffsetY;
|
|
public int menuWidth;
|
|
public int menuHeight;
|
|
private long aLong953;
|
|
private boolean aBoolean954;
|
|
private long[] friendsListAsLongs;
|
|
private String[] clanList = new String[100];
|
|
private int currentSong;
|
|
private volatile boolean drawingFlames;
|
|
private int spriteDrawX;
|
|
private int spriteDrawY;
|
|
private IndexedImage titleBoxIndexedImage;
|
|
private IndexedImage titleButtonIndexedImage;
|
|
private boolean aBoolean972;
|
|
private int anInt984;
|
|
private int anInt985;
|
|
private Sprite[] hitMarks;
|
|
private int anInt989;
|
|
private int cinematicCamXViewpointLoc;
|
|
private int cinematicCamYViewpointLoc;
|
|
private int cinematicCamZViewpointLoc;
|
|
private int constCinematicCamRotationSpeed;
|
|
private int varCinematicCamRotationSpeedPromille;
|
|
private IsaacCipher encryption;
|
|
private Sprite multiOverlay;
|
|
private String amountOrNameInput;
|
|
private int daysSinceLastLogin;
|
|
private int packetSize;
|
|
private int opcode;
|
|
private int timeoutCounter;
|
|
private int anInt1010;
|
|
private int anInt1011;
|
|
private Deque projectiles;
|
|
private int anInt1014;
|
|
private int anInt1015;
|
|
private int anInt1016;
|
|
private boolean aBoolean1017;
|
|
private int openWalkableInterface;
|
|
private int minimapState;
|
|
private int duplicateClickCount;
|
|
private int loadingStage;
|
|
private Sprite scrollBar1;
|
|
private Sprite scrollBar2;
|
|
private int anInt1026;
|
|
private boolean aBoolean1031;
|
|
private Sprite[] mapFunctions;
|
|
public int regionBaseX;
|
|
public int regionBaseY;
|
|
private int previousAbsoluteX;
|
|
private int previousAbsoluteY;
|
|
private int loginFailures;
|
|
private int anInt1039;
|
|
private int anInt1040;
|
|
private int anInt1041;
|
|
public int dialogueId;
|
|
private int member;
|
|
private boolean maleCharacter;
|
|
private int anInt1048;
|
|
private String aString1049;
|
|
private FileArchive titleArchive;
|
|
private int flashingSidebarId;
|
|
private int multicombat;
|
|
private Deque incompleteAnimables;
|
|
private IndexedImage[] mapScenes;
|
|
private int trackCount;
|
|
private int friendsListAction;
|
|
private int mouseInvInterfaceIndex;
|
|
private int lastActiveInvInterface;
|
|
private int anInt1071;
|
|
private int[] minimapHintX;
|
|
private int[] minimapHintY;
|
|
private Sprite mapDotItem;
|
|
private Sprite mapDotNPC;
|
|
private Sprite mapDotPlayer;
|
|
private Sprite mapDotFriend;
|
|
private Sprite mapDotTeam;
|
|
private Sprite mapDotClan;
|
|
private int anInt1079;
|
|
private boolean validLocalMap;
|
|
private String[] friendsList;
|
|
private Buffer incoming;
|
|
private int anInt1084;
|
|
private int anInt1085;
|
|
private int activeInterfaceType;
|
|
private int anInt1087;
|
|
private int anInt1088;
|
|
public int[] firstMenuAction;
|
|
public int[] secondMenuAction;
|
|
public int[] menuActionTypes;
|
|
public int[] selectedMenuActions;
|
|
private Sprite[] headIcons;
|
|
private Sprite[] skullIcons;
|
|
private Sprite[] headIconsHint;
|
|
private int x;
|
|
private int y;
|
|
private int height;
|
|
private int speed;
|
|
private int angle;
|
|
private int systemUpdateTime;
|
|
private ProducingGraphicsBuffer topLeft1BackgroundTile;
|
|
private ProducingGraphicsBuffer bottomLeft1BackgroundTile;
|
|
private ProducingGraphicsBuffer flameLeftBackground;
|
|
private ProducingGraphicsBuffer flameRightBackground;
|
|
private ProducingGraphicsBuffer bottomLeft0BackgroundTile;
|
|
private ProducingGraphicsBuffer bottomRightImageProducer;
|
|
private ProducingGraphicsBuffer loginMusicImageProducer;
|
|
private ProducingGraphicsBuffer middleLeft1BackgroundTile;
|
|
private ProducingGraphicsBuffer aRSImageProducer_1115;
|
|
private int membersInt;
|
|
private String aString1121;
|
|
private Sprite compass;
|
|
private ProducingGraphicsBuffer chatSettingImageProducer;
|
|
public int cameraY;
|
|
public int menuActionRow;
|
|
public int spellSelected;
|
|
private int anInt1137;
|
|
public int spellUsableOn;
|
|
private String spellTooltip;
|
|
private Sprite[] minimapHint;
|
|
private boolean inPlayerOwnedHouse;
|
|
public int runEnergy = 100;
|
|
private boolean continuedDialogue;
|
|
private Sprite[] crosses;
|
|
private IndexedImage[] titleIndexedImages;
|
|
private int unreadMessages;
|
|
private boolean canMute;
|
|
private boolean constructedViewport;
|
|
private boolean oriented;
|
|
private ProducingGraphicsBuffer minimapImageProducer;
|
|
private int daysSinceRecovChange;
|
|
private BufferedConnection socketStream;
|
|
private int privateMessageCount;
|
|
private int minimapZoom;
|
|
private String myUsername;
|
|
private String myPassword;
|
|
private boolean genericLoadingError;
|
|
private int reportAbuseInterfaceID;
|
|
private Deque spawns;
|
|
private byte[][] localRegionMapData;
|
|
private int anInt1184;
|
|
private int cameraHorizontal;
|
|
private int anInt1186;
|
|
private int anInt1187;
|
|
public int overlayInterfaceId;
|
|
private int[] anIntArray1190;
|
|
private int[] anIntArray1191;
|
|
private Buffer outgoing;
|
|
private int anInt1193;
|
|
private int splitPrivateChat;
|
|
private IndexedImage mapBack;
|
|
private String[] menuActionText;
|
|
private Sprite flameLeftSprite;
|
|
private Sprite flameRightSprite;
|
|
private int minimapRotation;
|
|
public String promptInput;
|
|
private int anInt1213;
|
|
public int[][][] tileHeights;
|
|
private long serverSeed;
|
|
private int loginScreenCursorPos;
|
|
private long aLong1220;
|
|
private int hintIconNpcId;
|
|
private int inputDialogState;
|
|
private int nextSong;
|
|
private boolean fadeMusic;
|
|
private CollisionMap[] collisionMaps;
|
|
private int[] localRegionIds;
|
|
private int[] localRegionMapIds;
|
|
private int[] localRegionLandscapeIds;
|
|
private int anInt1237;
|
|
private int anInt1238;
|
|
private boolean aBoolean1242;
|
|
private int atInventoryLoopCycle;
|
|
private int atInventoryInterface;
|
|
private int atInventoryIndex;
|
|
private int atInventoryInterfaceType;
|
|
private byte[][] localRegionLandscapeData;
|
|
private int tradeMode;
|
|
private int anInt1249;
|
|
private int onTutorialIsland;
|
|
private int anInt1253;
|
|
private boolean welcomeScreenRaised;
|
|
private boolean messagePromptRaised;
|
|
public byte[][][] tileFlags;
|
|
private int prevSong;
|
|
public int destinationX;
|
|
public int destY;
|
|
private Sprite minimapImage;
|
|
private int anInt1264;
|
|
private int anInt1265;
|
|
private String firstLoginMessage;
|
|
private String secondLoginMessage;
|
|
public int localX;
|
|
public int localY;
|
|
private GameFont smallText;
|
|
private GameFont regularText;
|
|
private GameFont boldText;
|
|
private GameFont gameFont;
|
|
private int anInt1275;
|
|
private int backDialogueId;
|
|
private int cameraX;
|
|
private int[] bigX;
|
|
private int[] bigY;
|
|
private int itemSelected;
|
|
private int anInt1283;
|
|
private int anInt1284;
|
|
private int anInt1285;
|
|
private String selectedItemName;
|
|
private int publicChatMode;
|
|
private RebottedAPI api;
|
|
private APIData apiData;
|
|
public Client() {
|
|
xpAddedPos = xpCounter = expAdded = 0;
|
|
fullscreenInterfaceID = -1;
|
|
chatRights = new int[500];
|
|
soundVolume = new int[50];
|
|
chatTypeView = 0;
|
|
clanChatMode = 0;
|
|
cButtonHPos = -1;
|
|
currentTrackPlaying = -1;
|
|
cButtonCPos = 0;
|
|
server = Configuration.server_address;
|
|
anIntArrayArray825 = new int[104][104];
|
|
friendsNodeIDs = new int[200];
|
|
groundItems = new Deque[4][104][104];
|
|
aBoolean831 = false;
|
|
chatBuffer = new Buffer(new byte[5000]);
|
|
npcs = new Npc[16384];
|
|
npcIndices = new int[16384];
|
|
removedMobs = new int[1000];
|
|
login = Buffer.create();
|
|
aBoolean848 = true;
|
|
openInterfaceId = -1;
|
|
currentExp = new int[SkillConstants.SKILL_COUNT];
|
|
quakeMagnitudes = new int[5];
|
|
quakeDirectionActive = new boolean[5];
|
|
drawFlames = false;
|
|
reportAbuseInput = "";
|
|
localPlayerIndex = -1;
|
|
menuOpen = false;
|
|
inputString = "";
|
|
maxPlayers = 2048;
|
|
internalLocalPlayerIndex = 2047;
|
|
players = new Player[maxPlayers];
|
|
playerList = new int[maxPlayers];
|
|
mobsAwaitingUpdate = new int[maxPlayers];
|
|
playerSynchronizationBuffers = new Buffer[maxPlayers];
|
|
anInt897 = 1;
|
|
anIntArrayArray901 = new int[104][104];
|
|
aByteArray912 = new byte[16384];
|
|
currentStats = new int[SkillConstants.SKILL_COUNT];
|
|
ignoreListAsLongs = new long[100];
|
|
loadingError = false;
|
|
quake4PiOverPeriods = new int[5];
|
|
anIntArrayArray929 = new int[104][104];
|
|
chatTypes = new int[500];
|
|
chatNames = new String[500];
|
|
chatMessages = new String[500];
|
|
sideIcons = new Sprite[15];
|
|
aBoolean954 = true;
|
|
friendsListAsLongs = new long[200];
|
|
currentSong = -1;
|
|
drawingFlames = false;
|
|
spriteDrawX = -1;
|
|
spriteDrawY = -1;
|
|
anIntArray968 = new int[33];
|
|
anIntArray969 = new int[256];
|
|
indices = new FileStore[5];
|
|
settings = new int[2000];
|
|
aBoolean972 = false;
|
|
anInt975 = 50;
|
|
anIntArray976 = new int[anInt975];
|
|
anIntArray977 = new int[anInt975];
|
|
anIntArray978 = new int[anInt975];
|
|
anIntArray979 = new int[anInt975];
|
|
textColourEffect = new int[anInt975];
|
|
anIntArray981 = new int[anInt975];
|
|
anIntArray982 = new int[anInt975];
|
|
aStringArray983 = new String[anInt975];
|
|
anInt985 = -1;
|
|
hitMarks = new Sprite[20];
|
|
characterDesignColours = new int[5];
|
|
aBoolean994 = false;
|
|
amountOrNameInput = "";
|
|
projectiles = new Deque();
|
|
aBoolean1017 = false;
|
|
openWalkableInterface = -1;
|
|
quakeTimes = new int[5];
|
|
aBoolean1031 = false;
|
|
mapFunctions = new Sprite[100];
|
|
dialogueId = -1;
|
|
maximumLevels = new int[SkillConstants.SKILL_COUNT];
|
|
anIntArray1045 = new int[2000];
|
|
maleCharacter = true;
|
|
minimapLeft = new int[152];
|
|
minimapLineWidth = new int[152];
|
|
flashingSidebarId = -1;
|
|
incompleteAnimables = new Deque();
|
|
anIntArray1057 = new int[33];
|
|
aClass9_1059 = new Widget();
|
|
mapScenes = new IndexedImage[100];
|
|
barFillColor = 0x4d4233;
|
|
anIntArray1065 = new int[7];
|
|
minimapHintX = new int[1000];
|
|
minimapHintY = new int[1000];
|
|
validLocalMap = false;
|
|
friendsList = new String[200];
|
|
incoming = Buffer.create();
|
|
archiveCRCs = new int[9];
|
|
firstMenuAction = new int[500];
|
|
secondMenuAction = new int[500];
|
|
menuActionTypes = new int[500];
|
|
selectedMenuActions = new int[500];
|
|
headIcons = new Sprite[20];
|
|
skullIcons = new Sprite[20];
|
|
headIconsHint = new Sprite[20];
|
|
tabAreaAltered = false;
|
|
aString1121 = "";
|
|
playerOptions = new String[5];
|
|
playerOptionsHighPriority = new boolean[5];
|
|
localRegions = new int[4][13][13];
|
|
anInt1132 = 2;
|
|
minimapHint = new Sprite[1000];
|
|
inPlayerOwnedHouse = false;
|
|
continuedDialogue = false;
|
|
crosses = new Sprite[8];
|
|
Configuration.enableMusic = true;
|
|
loggedIn = false;
|
|
canMute = false;
|
|
constructedViewport = false;
|
|
oriented = false;
|
|
anInt1171 = 1;
|
|
myUsername = "packet";
|
|
myPassword = "";
|
|
genericLoadingError = false;
|
|
reportAbuseInterfaceID = -1;
|
|
spawns = new Deque();
|
|
anInt1184 = 128;
|
|
overlayInterfaceId = -1;
|
|
outgoing = Buffer.create();
|
|
menuActionText = new String[500];
|
|
quakeAmplitudes = new int[5];
|
|
tracks = new int[50];
|
|
anInt1210 = 2;
|
|
anInt1211 = 78;
|
|
promptInput = "";
|
|
modIcons = new Sprite[2];
|
|
tabId = 3;
|
|
updateChatbox = false;
|
|
fadeMusic = true;
|
|
collisionMaps = new CollisionMap[4];
|
|
privateMessageIds = new int[100];
|
|
trackLoops = new int[50];
|
|
aBoolean1242 = false;
|
|
soundDelay = new int[50];
|
|
rsAlreadyLoaded = false;
|
|
welcomeScreenRaised = false;
|
|
messagePromptRaised = false;
|
|
firstLoginMessage = "";
|
|
secondLoginMessage = "";
|
|
backDialogueId = -1;
|
|
anInt1279 = 2;
|
|
bigX = new int[4000];
|
|
bigY = new int[4000];
|
|
}
|
|
|
|
public static void frameMode(ScreenMode screenMode) {
|
|
if (frameMode != screenMode) {
|
|
frameMode = screenMode;
|
|
if (screenMode == ScreenMode.FIXED) {
|
|
frameWidth = 765;
|
|
frameHeight = 503;
|
|
cameraZoom = 600;
|
|
SceneGraph.viewDistance = 9;
|
|
changeChatArea = false;
|
|
changeTabArea = false;
|
|
} else if (screenMode == ScreenMode.RESIZABLE) {
|
|
frameWidth = 766;
|
|
frameHeight = 529;
|
|
cameraZoom = 850;
|
|
SceneGraph.viewDistance = 10;
|
|
} else if (screenMode == ScreenMode.FULLSCREEN) {
|
|
cameraZoom = 600;
|
|
SceneGraph.viewDistance = 10;
|
|
frameWidth = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
|
|
frameHeight = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
|
|
}
|
|
rebuildFrameSize(screenMode, frameWidth, frameHeight);
|
|
setBounds();
|
|
System.out.println("ScreenMode: " + screenMode.toString());
|
|
}
|
|
showChatComponents = screenMode == ScreenMode.FIXED || showChatComponents;
|
|
showTabComponents = screenMode == ScreenMode.FIXED || showTabComponents;
|
|
}
|
|
|
|
public static void rebuildFrameSize(ScreenMode screenMode, int screenWidth, int screenHeight) {
|
|
try {
|
|
screenAreaWidth = (screenMode == ScreenMode.FIXED) ? 512 : screenWidth;
|
|
screenAreaHeight = (screenMode == ScreenMode.FIXED) ? 334 : screenHeight;
|
|
frameWidth = screenWidth;
|
|
frameHeight = screenHeight;
|
|
instance.refreshFrameSize(screenMode == ScreenMode.FULLSCREEN, screenWidth, screenHeight,
|
|
screenMode == ScreenMode.RESIZABLE, screenMode != ScreenMode.FIXED);
|
|
setBounds();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static void setBounds() {
|
|
Rasterizer3D.reposition(frameWidth, frameHeight);
|
|
fullScreenTextureArray = Rasterizer3D.scanOffsets;
|
|
Rasterizer3D.reposition(
|
|
frameMode == ScreenMode.FIXED ? (chatboxImageProducer != null ? chatboxImageProducer.canvasWidth : 519)
|
|
: frameWidth,
|
|
frameMode == ScreenMode.FIXED ? (chatboxImageProducer != null ? chatboxImageProducer.canvasHeight : 165)
|
|
: frameHeight);
|
|
anIntArray1180 = Rasterizer3D.scanOffsets;
|
|
Rasterizer3D.reposition(
|
|
frameMode == ScreenMode.FIXED ? (tabImageProducer != null ? tabImageProducer.canvasWidth : 249)
|
|
: frameWidth,
|
|
frameMode == ScreenMode.FIXED ? (tabImageProducer != null ? tabImageProducer.canvasHeight : 335)
|
|
: frameHeight);
|
|
anIntArray1181 = Rasterizer3D.scanOffsets;
|
|
Rasterizer3D.reposition(screenAreaWidth, screenAreaHeight);
|
|
anIntArray1182 = Rasterizer3D.scanOffsets;
|
|
int[] ai = new int[9];
|
|
for (int i8 = 0; i8 < 9; i8++) {
|
|
int k8 = 128 + i8 * 32 + 15;
|
|
int l8 = 600 + k8 * 3;
|
|
int i9 = Rasterizer3D.anIntArray1470[k8];
|
|
ai[i8] = l8 * i9 >> 16;
|
|
}
|
|
if (frameMode == ScreenMode.RESIZABLE && (frameWidth >= 766) && (frameWidth <= 1025) && (frameHeight >= 504)
|
|
&& (frameHeight <= 850)) {
|
|
SceneGraph.viewDistance = 9;
|
|
cameraZoom = 575;
|
|
} else if (frameMode == ScreenMode.FIXED) {
|
|
cameraZoom = 600;
|
|
} else if (frameMode == ScreenMode.RESIZABLE || frameMode == ScreenMode.FULLSCREEN) {
|
|
SceneGraph.viewDistance = 10;
|
|
cameraZoom = 600;
|
|
}
|
|
SceneGraph.setupViewport(500, 800, screenAreaWidth, screenAreaHeight, ai);
|
|
if (loggedIn) {
|
|
gameScreenImageProducer = new ProducingGraphicsBuffer(screenAreaWidth, screenAreaHeight);
|
|
}
|
|
}
|
|
|
|
private static String intToKOrMilLongName(int i) {
|
|
String s = String.valueOf(i);
|
|
for (int k = s.length() - 3; k > 0; k -= 3)
|
|
s = s.substring(0, k) + "," + s.substring(k);
|
|
if (s.length() > 8)
|
|
s = "@gre@" + s.substring(0, s.length() - 8) + " million @whi@(" + s + ")";
|
|
else if (s.length() > 4)
|
|
s = "@cya@" + s.substring(0, s.length() - 4) + "K @whi@(" + s + ")";
|
|
return " " + s;
|
|
}
|
|
|
|
public static final byte[] ReadFile(String fileName) {
|
|
try {
|
|
byte[] abyte0;
|
|
File file = new File(fileName);
|
|
int i = (int) file.length();
|
|
abyte0 = new byte[i];
|
|
DataInputStream datainputstream = new DataInputStream(
|
|
new BufferedInputStream(new FileInputStream(fileName)));
|
|
datainputstream.readFully(abyte0, 0, i);
|
|
datainputstream.close();
|
|
return abyte0;
|
|
} catch (Exception e) {
|
|
System.out.println((new StringBuilder()).append("Read Error: ").append(fileName).toString());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static String capitalize(String s) {
|
|
for (int i = 0; i < s.length(); i++) {
|
|
if (i == 0) {
|
|
s = String.format("%s%s", Character.toUpperCase(s.charAt(0)), s.substring(1));
|
|
}
|
|
if (!Character.isLetterOrDigit(s.charAt(i))) {
|
|
if (i + 1 < s.length()) {
|
|
s = String.format("%s%s%s", s.subSequence(0, i + 1), Character.toUpperCase(s.charAt(i + 1)),
|
|
s.substring(i + 2));
|
|
}
|
|
}
|
|
}
|
|
return s;
|
|
}
|
|
|
|
public static String getFileNameWithoutExtension(String fileName) {
|
|
File tmpFile = new File(fileName);
|
|
tmpFile.getName();
|
|
int whereDot = tmpFile.getName().lastIndexOf('.');
|
|
if (0 < whereDot && whereDot <= tmpFile.getName().length() - 2) {
|
|
return tmpFile.getName().substring(0, whereDot);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static AbstractMap.SimpleEntry<Integer, Integer> getNextInteger(ArrayList<Integer> values) {
|
|
ArrayList<AbstractMap.SimpleEntry<Integer, Integer>> frequencies = new ArrayList<>();
|
|
int maxIndex = 0;
|
|
main:
|
|
for (int i = 0; i < values.size(); ++i) {
|
|
int value = values.get(i);
|
|
for (int j = 0; j < frequencies.size(); ++j) {
|
|
if (frequencies.get(j).getKey() == value) {
|
|
frequencies.get(j).setValue(frequencies.get(j).getValue() + 1);
|
|
if (frequencies.get(maxIndex).getValue() < frequencies.get(j).getValue()) {
|
|
maxIndex = j;
|
|
}
|
|
continue main;
|
|
}
|
|
}
|
|
frequencies.add(new AbstractMap.SimpleEntry<Integer, Integer>(value, 1));
|
|
}
|
|
return frequencies.get(maxIndex);
|
|
}
|
|
|
|
private static String intToKOrMil(int j) {
|
|
if (j < 0x186a0)
|
|
return String.valueOf(j);
|
|
if (j < 0x989680)
|
|
return j / 1000 + "K";
|
|
else
|
|
return j / 0xf4240 + "M";
|
|
}
|
|
|
|
private static void setHighMem() {
|
|
SceneGraph.lowMem = false;
|
|
Rasterizer3D.lowMem = false;
|
|
lowMemory = false;
|
|
MapRegion.lowMem = false;
|
|
ObjectDefinition.lowMemory = false;
|
|
}
|
|
|
|
private static void setLowMem() {
|
|
SceneGraph.lowMem = true;
|
|
Rasterizer3D.lowMem = true;
|
|
lowMemory = true;
|
|
MapRegion.lowMem = true;
|
|
ObjectDefinition.lowMemory = true;
|
|
}
|
|
|
|
public static void initFrame() {
|
|
try {
|
|
nodeID = 10;
|
|
portOffset = 0;
|
|
setHighMem();
|
|
isMembers = true;
|
|
SignLink.storeid = 32;
|
|
SignLink.startpriv(InetAddress.getLocalHost());
|
|
frameMode(Client.ScreenMode.FIXED);
|
|
instance = new Client();
|
|
System.out.println("Attempting to download latest bot API.");
|
|
final APILoader apiLoader = new APILoader(instance, "https://parabot-osrs.000webhostapp.com/RebottedAPI.jar");
|
|
if(apiLoader.getApiData() == null) {
|
|
System.err.println("There was a error downloading the API!");
|
|
System.exit(0);
|
|
}
|
|
instance.apiData = apiLoader.getApiData();
|
|
instance.api = apiLoader.getRebottedAPI();
|
|
botFrame = new BotFrame(instance, false);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void setTab(int id) {
|
|
tabId = id;
|
|
tabAreaAltered = true;
|
|
}
|
|
|
|
private static String combatDiffColor(int i, int j) {
|
|
int k = i - j;
|
|
if (k < -9)
|
|
return "@red@";
|
|
if (k < -6)
|
|
return "@or3@";
|
|
if (k < -3)
|
|
return "@or2@";
|
|
if (k < 0)
|
|
return "@or1@";
|
|
if (k > 9)
|
|
return "@gre@";
|
|
if (k > 6)
|
|
return "@gr3@";
|
|
if (k > 3)
|
|
return "@gr2@";
|
|
if (k > 0)
|
|
return "@gr1@";
|
|
else
|
|
return "@yel@";
|
|
}
|
|
|
|
private void addToXPCounter(int skill, int xp) {
|
|
int font_height = 24;
|
|
if (xp <= 0)
|
|
return;
|
|
|
|
xpCounter += xp;
|
|
|
|
int lowest_y_off = Integer.MAX_VALUE;
|
|
for (int i = 0; i < xp_added.length; i++)
|
|
if (xp_added[i][0] > -1)
|
|
lowest_y_off = Math.min(lowest_y_off, xp_added[i][2]);
|
|
|
|
if (Configuration.xp_merge && lowest_y_off != Integer.MAX_VALUE && lowest_y_off <= 0) {
|
|
for (int i = 0; i < xp_added.length; i++) {
|
|
if (xp_added[i][2] != lowest_y_off)
|
|
continue;
|
|
|
|
xp_added[i][0] |= (1 << skill);
|
|
xp_added[i][1] += xp;
|
|
return;
|
|
}
|
|
} else {
|
|
ArrayList<Integer> list = new ArrayList<Integer>();
|
|
int y = font_height;
|
|
|
|
boolean go_on = true;
|
|
while (go_on) {
|
|
go_on = false;
|
|
|
|
for (int i = 0; i < xp_added.length; i++) {
|
|
if (xp_added[i][0] == -1 || list.contains(new Integer(i)))
|
|
continue;
|
|
|
|
if (xp_added[i][2] < y) {
|
|
xp_added[i][2] = y;
|
|
y += font_height;
|
|
go_on = true;
|
|
list.add(new Integer(i));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (lowest_y_off == Integer.MAX_VALUE || lowest_y_off >= font_height)
|
|
lowest_y_off = 0;
|
|
else
|
|
lowest_y_off = 0;
|
|
|
|
for (int i = 0; i < xp_added.length; i++)
|
|
if (xp_added[i][0] == -1) {
|
|
xp_added[i][0] = (1 << skill);
|
|
xp_added[i][1] = xp;
|
|
xp_added[i][2] = lowest_y_off;
|
|
return;
|
|
}
|
|
}
|
|
System.out.println("Failed to add to exp counter.");
|
|
}
|
|
|
|
public void refreshFrameSize() {
|
|
if (frameMode == ScreenMode.RESIZABLE) {
|
|
if (frameWidth != (appletClient() ? getGameComponent().getWidth() : botFrame.getHeight())) {
|
|
frameWidth = (appletClient() ? getGameComponent().getWidth() : botFrame.getWidth());
|
|
screenAreaWidth = frameWidth;
|
|
setBounds();
|
|
}
|
|
if (frameHeight != (appletClient() ? getGameComponent().getHeight() : botFrame.getHeight())) {
|
|
frameHeight = (appletClient() ? getGameComponent().getHeight() : botFrame.getWidth());
|
|
screenAreaHeight = frameHeight;
|
|
setBounds();
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean getMousePositions() {
|
|
if (mouseInRegion(frameWidth - (frameWidth <= 1000 ? 240 : 420), frameHeight - (frameWidth <= 1000 ? 90 : 37),
|
|
frameWidth, frameHeight)) {
|
|
return false;
|
|
}
|
|
if (showChatComponents) {
|
|
if (changeChatArea) {
|
|
if (super.mouseX > 0 && super.mouseX < 494 && super.mouseY > frameHeight - 175
|
|
&& super.mouseY < frameHeight) {
|
|
return true;
|
|
} else {
|
|
if (super.mouseX > 494 && super.mouseX < 515 && super.mouseY > frameHeight - 175
|
|
&& super.mouseY < frameHeight) {
|
|
return false;
|
|
}
|
|
}
|
|
} else if (!changeChatArea) {
|
|
if (super.mouseX > 0 && super.mouseX < 519 && super.mouseY > frameHeight - 175
|
|
&& super.mouseY < frameHeight) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
if (mouseInRegion(frameWidth - 216, 0, frameWidth, 172)) {
|
|
return false;
|
|
}
|
|
if (!changeTabArea) {
|
|
if (super.mouseX > 0 && super.mouseY > 0 && super.mouseY < frameWidth && super.mouseY < frameHeight) {
|
|
return super.mouseX < frameWidth - 242 || super.mouseY < frameHeight - 335;
|
|
}
|
|
return false;
|
|
}
|
|
if (showTabComponents) {
|
|
if (frameWidth > 1000) {
|
|
return (super.mouseX < frameWidth - 420 || super.mouseX > frameWidth || super.mouseY < frameHeight - 37
|
|
|| super.mouseY > frameHeight)
|
|
&& (super.mouseX <= frameWidth - 225 || super.mouseX >= frameWidth
|
|
|| super.mouseY <= frameHeight - 37 - 274 || super.mouseY >= frameHeight);
|
|
} else {
|
|
return (super.mouseX < frameWidth - 210 || super.mouseX > frameWidth || super.mouseY < frameHeight - 74
|
|
|| super.mouseY > frameHeight)
|
|
&& (super.mouseX <= frameWidth - 225 || super.mouseX >= frameWidth
|
|
|| super.mouseY <= frameHeight - 74 - 274 || super.mouseY >= frameHeight);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public boolean mouseInRegion(int x1, int y1, int x2, int y2) {
|
|
return super.mouseX >= x1 && super.mouseX <= x2 && super.mouseY >= y1 && super.mouseY <= y2;
|
|
}
|
|
|
|
public boolean mouseMapPosition() {
|
|
return super.mouseX < frameWidth - 21 || super.mouseX > frameWidth || super.mouseY < 0 || super.mouseY > 21;
|
|
}
|
|
|
|
private void drawLoadingMessages(int used, String s, String s1) {
|
|
int width = regularText.getTextWidth(used == 1 ? s : s1);
|
|
int height = s1 == null ? 25 : 38;
|
|
Rasterizer2D.drawBox(1, 1, width + 6, height, 0);
|
|
Rasterizer2D.drawBox(1, 1, width + 6, 1, 0xffffff);
|
|
Rasterizer2D.drawBox(1, 1, 1, height, 0xffffff);
|
|
Rasterizer2D.drawBox(1, height, width + 6, 1, 0xffffff);
|
|
Rasterizer2D.drawBox(width + 6, 1, 1, height, 0xffffff);
|
|
regularText.drawText(0xffffff, s, 18, width / 2 + 5);
|
|
if (s1 != null) {
|
|
regularText.drawText(0xffffff, s1, 31, width / 2 + 5);
|
|
}
|
|
}
|
|
|
|
public final String formatCoins(int coins) {
|
|
if (coins >= 0 && coins < 10000)
|
|
return String.valueOf(coins);
|
|
if (coins >= 10000 && coins < 10000000)
|
|
return coins / 1000 + "K";
|
|
if (coins >= 10000000 && coins < 999999999)
|
|
return coins / 1000000 + "M";
|
|
if (coins >= 999999999)
|
|
return "*";
|
|
else
|
|
return "?";
|
|
}
|
|
|
|
private boolean menuHasAddFriend(int j) {
|
|
if (j < 0)
|
|
return false;
|
|
int k = menuActionTypes[j];
|
|
if (k >= 2000)
|
|
k -= 2000;
|
|
return k == 337;
|
|
}
|
|
|
|
public void drawChannelButtons() {
|
|
final int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 165;
|
|
SpriteCache.lookup(49).drawSprite(0, 143 + yOffset);
|
|
String[] text = {"On", "Friends", "Off", "Hide"};
|
|
int[] textColor = {65280, 0xffff00, 0xff0000, 65535};
|
|
switch (cButtonCPos) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
SpriteCache.lookup(16).drawSprite(channelButtonsX[cButtonCPos], 143 + yOffset);
|
|
break;
|
|
}
|
|
if (cButtonHPos == cButtonCPos) {
|
|
switch (cButtonHPos) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
SpriteCache.lookup(17).drawSprite(channelButtonsX[cButtonHPos], 143 + yOffset);
|
|
break;
|
|
}
|
|
} else {
|
|
switch (cButtonHPos) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
SpriteCache.lookup(15).drawSprite(channelButtonsX[cButtonHPos], 143 + yOffset);
|
|
break;
|
|
case 6:
|
|
SpriteCache.lookup(18).drawSprite(channelButtonsX[cButtonHPos], 143 + yOffset);
|
|
break;
|
|
}
|
|
}
|
|
int[] modes = {publicChatMode, privateChatMode, clanChatMode, tradeMode};
|
|
for (int i = 0; i < modeNamesX.length; i++) {
|
|
smallText.drawTextWithPotentialShadow(true, modeNamesX[i], 0xffffff, modeNames[i], modeNamesY[i] + yOffset);
|
|
}
|
|
for (int i = 0; i < modeX.length; i++) {
|
|
smallText.method382(textColor[modes[i]], modeX[i], text[modes[i]], 164 + yOffset, true);
|
|
}
|
|
}
|
|
|
|
private boolean chatStateCheck() {
|
|
return messagePromptRaised || inputDialogState != 0 || clickToContinueString != null || backDialogueId != -1
|
|
|| dialogueId != -1;
|
|
}
|
|
|
|
private void drawChatArea() {
|
|
int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 165;
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
chatboxImageProducer.initDrawingArea();
|
|
}
|
|
Rasterizer3D.scanOffsets = anIntArray1180;
|
|
if (chatStateCheck()) {
|
|
showChatComponents = true;
|
|
SpriteCache.lookup(20).drawSprite(0, yOffset);
|
|
}
|
|
if (showChatComponents) {
|
|
if (changeChatArea && !chatStateCheck()) {
|
|
Rasterizer2D.drawHorizontalLine(7, 7 + yOffset, 506, 0x575757);
|
|
Rasterizer2D.drawTransparentGradientBox(7, 7 + yOffset, 506, 135, 0, 0xFFFFFF, 20);
|
|
} else {
|
|
SpriteCache.lookup(20).drawSprite(0, yOffset);
|
|
}
|
|
}
|
|
if (!showChatComponents || changeChatArea) {
|
|
Rasterizer2D.drawTransparentBox(7, frameHeight - 23, 506, 24, 0, 100);
|
|
}
|
|
drawChannelButtons();
|
|
GameFont font = regularText;
|
|
if (messagePromptRaised) {
|
|
newBoldFont.drawCenteredString(aString1121, 259, 60 + yOffset, 0, -1);
|
|
newBoldFont.drawCenteredString(promptInput + "*", 259, 80 + yOffset, 128, -1);
|
|
} else if (inputDialogState == 1) {
|
|
newBoldFont.drawCenteredString("Enter amount:", 259, yOffset + 60, 0, -1);
|
|
newBoldFont.drawCenteredString(amountOrNameInput + "*", 259, 80 + yOffset, 128, -1);
|
|
} else if (inputDialogState == 2) {
|
|
newBoldFont.drawCenteredString("Enter Name:", 259, 60 + yOffset, 0, -1);
|
|
newBoldFont.drawCenteredString(amountOrNameInput + "*", 259, 80 + yOffset, 128, -1);
|
|
} else if (clickToContinueString != null) {
|
|
newBoldFont.drawCenteredString(clickToContinueString, 259, 60 + yOffset, 0, -1);
|
|
newBoldFont.drawCenteredString("Click to continue", 259, 80 + yOffset, 128, -1);
|
|
} else if (backDialogueId != -1) {
|
|
try {
|
|
drawInterface(0, 20, Widget.interfaceCache[backDialogueId], 20 + yOffset);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
} else if (dialogueId != -1) {
|
|
try {
|
|
drawInterface(0, 20, Widget.interfaceCache[dialogueId], 20 + yOffset);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
} else if (showChatComponents) {
|
|
int j77 = -3;
|
|
int j = 0;
|
|
int shadow = changeChatArea ? 0 : -1;
|
|
Rasterizer2D.setDrawingArea(122 + yOffset, 8, 497, 7 + yOffset);
|
|
for (int k = 0; k < 500; k++) {
|
|
if (chatMessages[k] != null) {
|
|
int chatType = chatTypes[k];
|
|
int yPos = (70 - j77 * 14) + anInt1089 + 5;
|
|
String s1 = chatNames[k];
|
|
byte data = 0;
|
|
if (s1 != null && s1.startsWith("@cr1@")) {
|
|
s1 = s1.substring(5);
|
|
data = 1;
|
|
} else if (s1 != null && s1.startsWith("@cr2@")) {
|
|
s1 = s1.substring(5);
|
|
data = 2;
|
|
} else if (s1 != null && s1.startsWith("@cr3@")) {
|
|
s1 = s1.substring(5);
|
|
data = 3;
|
|
}
|
|
if (chatType == 0) {
|
|
if (chatTypeView == 5 || chatTypeView == 0) {
|
|
newRegularFont.drawBasicString(chatMessages[k], 11, yPos + yOffset,
|
|
changeChatArea ? 0xFFFFFF : 0, shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
if ((chatType == 1 || chatType == 2)
|
|
&& (chatType == 1 || publicChatMode == 0 || publicChatMode == 1 && isFriendOrSelf(s1))) {
|
|
if (chatTypeView == 1 || chatTypeView == 0) {
|
|
int xPos = 11;
|
|
if (data == 1) {
|
|
modIcons[0].drawSprite(xPos + 1, yPos - 12 + yOffset);
|
|
xPos += 14;
|
|
} else if (data == 2) {
|
|
modIcons[1].drawSprite(xPos + 1, yPos - 12 + yOffset);
|
|
xPos += 14;
|
|
} else if (data == 3) {
|
|
modIcons[2].drawSprite(xPos + 1, yPos - 12 + yOffset);
|
|
xPos += 14;
|
|
}
|
|
newRegularFont.drawBasicString(s1 + ":", xPos, yPos + yOffset,
|
|
changeChatArea ? 0xFFFFFF : 0, shadow);
|
|
xPos += font.getTextWidth(s1) + 8;
|
|
newRegularFont.drawBasicString(chatMessages[k], xPos, yPos + yOffset,
|
|
changeChatArea ? 0x7FA9FF : 255, shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
if ((chatType == 3 || chatType == 7) && (splitPrivateChat == 0 || chatTypeView == 2)
|
|
&& (chatType == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s1))) {
|
|
if (chatTypeView == 2 || chatTypeView == 0) {
|
|
int k1 = 11;
|
|
newRegularFont.drawBasicString("From", k1, yPos + yOffset, changeChatArea ? 0 : 0xFFFFFF,
|
|
shadow);
|
|
k1 += font.getTextWidth("From ");
|
|
if (data == 1) {
|
|
modIcons[0].drawSprite(k1, yPos - 12 + yOffset);
|
|
k1 += 12;
|
|
} else if (data == 2) {
|
|
modIcons[1].drawSprite(k1, yPos - 12 + yOffset);
|
|
k1 += 12;
|
|
} else if (data == 3) {
|
|
modIcons[2].drawSprite(k1, yPos - 12 + yOffset);
|
|
k1 += 12;
|
|
}
|
|
newRegularFont.drawBasicString(s1 + ":", k1, yPos + yOffset, changeChatArea ? 0xFFFFFF : 0,
|
|
shadow);
|
|
k1 += font.getTextWidth(s1) + 8;
|
|
newRegularFont.drawBasicString(chatMessages[k], k1, yPos + yOffset, 0x800080, shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
if (chatType == 4 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s1))) {
|
|
if (chatTypeView == 3 || chatTypeView == 0) {
|
|
newRegularFont.drawBasicString(s1 + " " + chatMessages[k], 11, yPos + yOffset, 0x800080,
|
|
shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
if (chatType == 5 && splitPrivateChat == 0 && privateChatMode < 2) {
|
|
if (chatTypeView == 2 || chatTypeView == 0) {
|
|
newRegularFont.drawBasicString(s1 + " " + chatMessages[k], 11, yPos + yOffset, 0x800080,
|
|
shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
if (chatType == 6 && (splitPrivateChat == 0 || chatTypeView == 2) && privateChatMode < 2) {
|
|
if (chatTypeView == 2 || chatTypeView == 0) {
|
|
newRegularFont.drawBasicString("To " + s1 + ":", 11, yPos + yOffset,
|
|
changeChatArea ? 0xFFFFFF : 0, shadow);
|
|
newRegularFont.drawBasicString(chatMessages[k], 15 + font.getTextWidth("To :" + s1),
|
|
yPos + yOffset, 0x800080, shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
if (chatType == 8 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s1))) {
|
|
if (chatTypeView == 3 || chatTypeView == 0) {
|
|
newRegularFont.drawBasicString(s1 + " " + chatMessages[k], 11, yPos + yOffset, 0x7e3200,
|
|
shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
if (chatType == 11 && (clanChatMode == 0)) {
|
|
if (chatTypeView == 11) {
|
|
newRegularFont.drawBasicString(s1 + " " + chatMessages[k], 11, yPos + yOffset, 0x7e3200,
|
|
shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
if (chatType == 12) {
|
|
newRegularFont.drawBasicString(chatMessages[k] + "", 11, yPos + yOffset, 0x7e3200,
|
|
shadow);
|
|
j++;
|
|
}
|
|
}
|
|
}
|
|
if (chatType == 16) {
|
|
int j2 = 40;
|
|
int clanNameWidth = font.getTextWidth(clanname);
|
|
if (chatTypeView == 11 || chatTypeView == 0) {
|
|
switch (chatRights[k]) {
|
|
case 1:
|
|
j2 += clanNameWidth;
|
|
modIcons[0].drawSprite(j2 - 18, yPos - 12 + yOffset);
|
|
j2 += 14;
|
|
break;
|
|
|
|
case 2:
|
|
j2 += clanNameWidth;
|
|
modIcons[1].drawSprite(j2 - 18, yPos - 12 + yOffset);
|
|
j2 += 14;
|
|
break;
|
|
|
|
case 3:
|
|
j2 += clanNameWidth;
|
|
modIcons[1].drawSprite(j2 - 18, yPos - 12 + yOffset);
|
|
j2 += 14;
|
|
break;
|
|
|
|
default:
|
|
j2 += clanNameWidth;
|
|
break;
|
|
}
|
|
newRegularFont.drawBasicString("[", 8, yPos + yOffset, changeChatArea ? 0xFFFFFF : 0,
|
|
shadow);
|
|
newRegularFont.drawBasicString(clanname, 14, yPos + yOffset,
|
|
changeChatArea ? 0x7FA9FF : 255, shadow);
|
|
newRegularFont.drawBasicString("]", clanNameWidth + 14, yPos + yOffset,
|
|
changeChatArea ? 0xFFFFFF : 0, shadow);
|
|
newRegularFont.drawBasicString(chatNames[k] + ":", j2 - 17, yPos + yOffset,
|
|
changeChatArea ? 0xFFFFFF : 0, shadow);
|
|
j2 += font.getTextWidth(chatNames[k]) + 7;
|
|
newRegularFont.drawBasicString(chatMessages[k], j2 - 16, yPos + yOffset, 0x800080, shadow);
|
|
j++;
|
|
j77++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Rasterizer2D.defaultDrawingAreaSize();
|
|
anInt1211 = j * 14 + 7 + 5;
|
|
if (anInt1211 < 111) {
|
|
anInt1211 = 111;
|
|
}
|
|
drawScrollbar(114, anInt1211 - anInt1089 - 113, 7 + yOffset, 496, anInt1211, changeChatArea);
|
|
String s;
|
|
if (localPlayer != null && localPlayer.name != null) {
|
|
s = localPlayer.name;
|
|
} else {
|
|
s = StringUtils.formatUsername(capitalize(myUsername));
|
|
}
|
|
Rasterizer2D.setDrawingArea(140 + yOffset, 8, 509, 120 + yOffset);
|
|
int xOffset = 0;
|
|
if (myPrivilege > 0) {
|
|
modIcons[myPrivilege - 1].drawSprite(10, 122 + yOffset);
|
|
xOffset += 14;
|
|
}
|
|
newRegularFont.drawBasicString(s + ":", xOffset + 11, 133 + yOffset, changeChatArea ? 0xFFFFFF : 0, shadow);
|
|
newRegularFont.drawBasicString(inputString + "*", xOffset + 12 + font.getTextWidth(s + ": "), 133 + yOffset,
|
|
changeChatArea ? 0x7FA9FF : 255, shadow);
|
|
Rasterizer2D.drawHorizontalLine(7, 121 + yOffset, 506, changeChatArea ? 0x575757 : 0x807660);
|
|
Rasterizer2D.defaultDrawingAreaSize();
|
|
}
|
|
if (menuOpen) {
|
|
drawMenu(0, frameMode == ScreenMode.FIXED ? 338 : 0);
|
|
}
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
chatboxImageProducer.drawGraphics(338, super.graphics, 0);
|
|
}
|
|
gameScreenImageProducer.initDrawingArea();
|
|
Rasterizer3D.scanOffsets = anIntArray1182;
|
|
}
|
|
|
|
/**
|
|
* Initializes the client for startup
|
|
*/
|
|
public void initialize() {
|
|
try {
|
|
nodeID = 10;
|
|
portOffset = 0;
|
|
setHighMem();
|
|
isMembers = true;
|
|
SignLink.storeid = 32;
|
|
SignLink.startpriv(InetAddress.getLocalHost());
|
|
initClientFrame(frameWidth, frameHeight);
|
|
instance = this;
|
|
} catch (Exception exception) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
public void startRunnable(Runnable runnable, int priority) {
|
|
if (priority > 10)
|
|
priority = 10;
|
|
if (SignLink.mainapp != null) {
|
|
SignLink.startthread(runnable, priority);
|
|
} else {
|
|
super.startRunnable(runnable, priority);
|
|
}
|
|
}
|
|
|
|
public Socket openSocket(int port) throws IOException {
|
|
return new Socket(InetAddress.getByName(server), port);
|
|
}
|
|
|
|
private void processMenuClick() {
|
|
if (activeInterfaceType != 0)
|
|
return;
|
|
int j = super.clickMode3;
|
|
if (spellSelected == 1 && super.saveClickX >= 516 && super.saveClickY >= 160 && super.saveClickX <= 765
|
|
&& super.saveClickY <= 205)
|
|
j = 0;
|
|
if (menuOpen) {
|
|
if (j != 1) {
|
|
int k = super.mouseX;
|
|
int j1 = super.mouseY;
|
|
if (menuScreenArea == 0) {
|
|
k -= 4;
|
|
j1 -= 4;
|
|
}
|
|
if (menuScreenArea == 1) {
|
|
k -= 519;
|
|
j1 -= 168;
|
|
}
|
|
if (menuScreenArea == 2) {
|
|
k -= 17;
|
|
j1 -= 338;
|
|
}
|
|
if (menuScreenArea == 3) {
|
|
k -= 519;
|
|
j1 -= 0;
|
|
}
|
|
if (k < menuOffsetX - 10 || k > menuOffsetX + menuWidth + 10 || j1 < menuOffsetY - 10
|
|
|| j1 > menuOffsetY + menuHeight + 10) {
|
|
menuOpen = false;
|
|
if (menuScreenArea == 1) {
|
|
}
|
|
if (menuScreenArea == 2)
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
if (j == 1) {
|
|
int l = menuOffsetX;
|
|
int k1 = menuOffsetY;
|
|
int i2 = menuWidth;
|
|
int k2 = super.saveClickX;
|
|
int l2 = super.saveClickY;
|
|
switch (menuScreenArea) {
|
|
case 0:
|
|
k2 -= 4;
|
|
l2 -= 4;
|
|
break;
|
|
case 1:
|
|
k2 -= 519;
|
|
l2 -= 168;
|
|
break;
|
|
case 2:
|
|
k2 -= 5;
|
|
l2 -= 338;
|
|
break;
|
|
case 3:
|
|
k2 -= 519;
|
|
l2 -= 0;
|
|
break;
|
|
}
|
|
int i3 = -1;
|
|
for (int j3 = 0; j3 < menuActionRow; j3++) {
|
|
int k3 = k1 + 31 + (menuActionRow - 1 - j3) * 15;
|
|
if (k2 > l && k2 < l + i2 && l2 > k3 - 13 && l2 < k3 + 3)
|
|
i3 = j3;
|
|
}
|
|
if (i3 != -1)
|
|
processMenuActions(i3);
|
|
menuOpen = false;
|
|
if (menuScreenArea == 1) {
|
|
}
|
|
if (menuScreenArea == 2) {
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
} else {
|
|
if (j == 1 && menuActionRow > 0) {
|
|
int i1 = menuActionTypes[menuActionRow - 1];
|
|
if (i1 == 632 || i1 == 78 || i1 == 867 || i1 == 431 || i1 == 53 || i1 == 74 || i1 == 454 || i1 == 539
|
|
|| i1 == 493 || i1 == 847 || i1 == 447 || i1 == 1125) {
|
|
int l1 = firstMenuAction[menuActionRow - 1];
|
|
int j2 = secondMenuAction[menuActionRow - 1];
|
|
Widget class9 = Widget.interfaceCache[j2];
|
|
if (class9.aBoolean259 || class9.replaceItems) {
|
|
aBoolean1242 = false;
|
|
anInt989 = 0;
|
|
anInt1084 = j2;
|
|
anInt1085 = l1;
|
|
activeInterfaceType = 2;
|
|
anInt1087 = super.saveClickX;
|
|
anInt1088 = super.saveClickY;
|
|
if (Widget.interfaceCache[j2].parent == openInterfaceId)
|
|
activeInterfaceType = 1;
|
|
if (Widget.interfaceCache[j2].parent == backDialogueId)
|
|
activeInterfaceType = 3;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if (j == 1 && (anInt1253 == 1 || menuHasAddFriend(menuActionRow - 1)) && menuActionRow > 2)
|
|
j = 2;
|
|
if (j == 1 && menuActionRow > 0)
|
|
processMenuActions(menuActionRow - 1);
|
|
if (j == 2 && menuActionRow > 0)
|
|
determineMenuSize();
|
|
processMainScreenClick();
|
|
processTabClick();
|
|
processChatModeClick();
|
|
minimapHovers();
|
|
}
|
|
}
|
|
|
|
private void saveMidi(boolean flag, byte[] abyte0) {
|
|
SignLink.fadeMidi = flag ? 1 : 0;
|
|
SignLink.saveMidi(abyte0, abyte0.length);
|
|
}
|
|
|
|
private void updateWorldObjects() {
|
|
try {
|
|
anInt985 = -1;
|
|
incompleteAnimables.clear();
|
|
projectiles.clear();
|
|
Rasterizer3D.clearTextureCache();
|
|
unlinkCaches();
|
|
scene.initToNull();
|
|
System.gc();
|
|
for (int i = 0; i < 4; i++)
|
|
collisionMaps[i].initialize();
|
|
for (int l = 0; l < 4; l++) {
|
|
for (int k1 = 0; k1 < 104; k1++) {
|
|
for (int j2 = 0; j2 < 104; j2++)
|
|
tileFlags[l][k1][j2] = 0;
|
|
}
|
|
}
|
|
|
|
MapRegion objectManager = new MapRegion(tileFlags, tileHeights);
|
|
int k2 = localRegionMapData.length;
|
|
outgoing.writeOpcode(PacketConstants.IDLE);
|
|
if (!constructedViewport) {
|
|
for (int i3 = 0; i3 < k2; i3++) {
|
|
int i4 = (localRegionIds[i3] >> 8) * 64 - regionBaseX;
|
|
int k5 = (localRegionIds[i3] & 0xff) * 64 - regionBaseY;
|
|
byte[] abyte0 = localRegionMapData[i3];
|
|
if (abyte0 != null)
|
|
objectManager.method180(abyte0, k5, i4, (this.regionX - 6) * 8, (this.regionY - 6) * 8,
|
|
collisionMaps);
|
|
}
|
|
for (int j4 = 0; j4 < k2; j4++) {
|
|
int l5 = (localRegionIds[j4] >> 8) * 64 - regionBaseX;
|
|
int k7 = (localRegionIds[j4] & 0xff) * 64 - regionBaseY;
|
|
byte[] abyte2 = localRegionMapData[j4];
|
|
if (abyte2 == null && this.regionY < 800)
|
|
objectManager.initiateVertexHeights(k7, 64, 64, l5);
|
|
}
|
|
anInt1097++;
|
|
if (anInt1097 > 160) {
|
|
anInt1097 = 0;
|
|
// TODO anticheat?
|
|
outgoing.writeOpcode(238);
|
|
outgoing.writeByte(96);
|
|
}
|
|
outgoing.writeOpcode(PacketConstants.IDLE);
|
|
for (int i6 = 0; i6 < k2; i6++) {
|
|
byte[] abyte1 = localRegionLandscapeData[i6];
|
|
if (abyte1 != null) {
|
|
int l8 = (localRegionIds[i6] >> 8) * 64 - regionBaseX;
|
|
int k9 = (localRegionIds[i6] & 0xff) * 64 - regionBaseY;
|
|
objectManager.method190(l8, collisionMaps, k9, scene, abyte1);
|
|
}
|
|
}
|
|
|
|
}
|
|
if (constructedViewport) {
|
|
for (int j3 = 0; j3 < 4; j3++) {
|
|
for (int k4 = 0; k4 < 13; k4++) {
|
|
for (int j6 = 0; j6 < 13; j6++) {
|
|
int l7 = localRegions[j3][k4][j6];
|
|
if (l7 != -1) {
|
|
int i9 = l7 >> 24 & 3;
|
|
int l9 = l7 >> 1 & 3;
|
|
int j10 = l7 >> 14 & 0x3ff;
|
|
int l10 = l7 >> 3 & 0x7ff;
|
|
int j11 = (j10 / 8 << 8) + l10 / 8;
|
|
for (int l11 = 0; l11 < localRegionIds.length; l11++) {
|
|
if (localRegionIds[l11] != j11 || localRegionMapData[l11] == null)
|
|
continue;
|
|
objectManager.method179(i9, l9, collisionMaps, k4 * 8, (j10 & 7) * 8,
|
|
localRegionMapData[l11], (l10 & 7) * 8, j3, j6 * 8);
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int l4 = 0; l4 < 13; l4++) {
|
|
for (int k6 = 0; k6 < 13; k6++) {
|
|
int i8 = localRegions[0][l4][k6];
|
|
if (i8 == -1)
|
|
objectManager.initiateVertexHeights(k6 * 8, 8, 8, l4 * 8);
|
|
}
|
|
}
|
|
|
|
outgoing.writeOpcode(PacketConstants.IDLE);
|
|
for (int l6 = 0; l6 < 4; l6++) {
|
|
for (int j8 = 0; j8 < 13; j8++) {
|
|
for (int j9 = 0; j9 < 13; j9++) {
|
|
int i10 = localRegions[l6][j8][j9];
|
|
if (i10 != -1) {
|
|
int k10 = i10 >> 24 & 3;
|
|
int i11 = i10 >> 1 & 3;
|
|
int k11 = i10 >> 14 & 0x3ff;
|
|
int i12 = i10 >> 3 & 0x7ff;
|
|
int j12 = (k11 / 8 << 8) + i12 / 8;
|
|
for (int k12 = 0; k12 < localRegionIds.length; k12++) {
|
|
if (localRegionIds[k12] != j12 || localRegionLandscapeData[k12] == null)
|
|
continue;
|
|
objectManager.method183(collisionMaps, scene, k10, j8 * 8, (i12 & 7) * 8, l6,
|
|
localRegionLandscapeData[k12], (k11 & 7) * 8, i11, j9 * 8);
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
outgoing.writeOpcode(PacketConstants.IDLE);
|
|
objectManager.createRegionScene(collisionMaps, scene);
|
|
gameScreenImageProducer.initDrawingArea();
|
|
outgoing.writeOpcode(PacketConstants.IDLE);
|
|
int k3 = MapRegion.maximumPlane;
|
|
if (k3 > plane)
|
|
k3 = plane;
|
|
if (k3 < plane - 1)
|
|
k3 = plane - 1;
|
|
if (lowMemory)
|
|
scene.method275(MapRegion.maximumPlane);
|
|
else
|
|
scene.method275(0);
|
|
for (int i5 = 0; i5 < 104; i5++) {
|
|
for (int i7 = 0; i7 < 104; i7++)
|
|
updateGroundItems(i5, i7);
|
|
|
|
}
|
|
|
|
anInt1051++;
|
|
if (anInt1051 > 98) {
|
|
anInt1051 = 0;
|
|
// TODO anticheat?
|
|
outgoing.writeOpcode(150);
|
|
}
|
|
method63();
|
|
} catch (Exception exception) {
|
|
}
|
|
ObjectDefinition.baseModels.clear();
|
|
if (botFrame != null) {
|
|
// TODO region change? region id as payload?
|
|
outgoing.writeOpcode(PacketConstants.ENTER_REGION);
|
|
outgoing.writeInt(0x3f008edd);
|
|
}
|
|
if (lowMemory && SignLink.cache_dat != null) {
|
|
int j = resourceProvider.getVersionCount(0);
|
|
for (int i1 = 0; i1 < j; i1++) {
|
|
int l1 = resourceProvider.getModelIndex(i1);
|
|
if ((l1 & 0x79) == 0)
|
|
Model.method461(i1);
|
|
}
|
|
|
|
}
|
|
System.gc();
|
|
Rasterizer3D.initiateRequestBuffers();
|
|
resourceProvider.clearExtras();
|
|
int k = (this.regionX - 6) / 8 - 1;
|
|
int j1 = (this.regionX + 6) / 8 + 1;
|
|
int i2 = (this.regionY - 6) / 8 - 1;
|
|
int l2 = (this.regionY + 6) / 8 + 1;
|
|
if (inPlayerOwnedHouse) {
|
|
k = 49;
|
|
j1 = 50;
|
|
i2 = 49;
|
|
l2 = 50;
|
|
}
|
|
for (int l3 = k; l3 <= j1; l3++) {
|
|
for (int j5 = i2; j5 <= l2; j5++)
|
|
if (l3 == k || l3 == j1 || j5 == i2 || j5 == l2) {
|
|
int j7 = resourceProvider.resolve(0, j5, l3);
|
|
if (j7 != -1)
|
|
resourceProvider.loadExtra(j7, 3);
|
|
int k8 = resourceProvider.resolve(1, j5, l3);
|
|
if (k8 != -1)
|
|
resourceProvider.loadExtra(k8, 3);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void unlinkCaches() {
|
|
ObjectDefinition.baseModels.clear();
|
|
ObjectDefinition.models.clear();
|
|
NpcDefinition.modelCache.clear();
|
|
ItemDefinition.models.clear();
|
|
ItemDefinition.sprites.clear();
|
|
Player.models.clear();
|
|
Graphic.models.clear();
|
|
}
|
|
|
|
private void renderMapScene(int plane) {
|
|
int[] pixels = minimapImage.getMyPixels();
|
|
int length = pixels.length;
|
|
|
|
for (int pixel = 0; pixel < length; pixel++) {
|
|
pixels[pixel] = 0;
|
|
}
|
|
|
|
for (int y = 1; y < 103; y++) {
|
|
int i1 = 24628 + (103 - y) * 512 * 4;
|
|
for (int x = 1; x < 103; x++) {
|
|
if ((tileFlags[plane][x][y] & 0x18) == 0)
|
|
scene.drawTileOnMinimapSprite(pixels, i1, plane, x, y);
|
|
if (plane < 3 && (tileFlags[plane + 1][x][y] & 8) != 0)
|
|
scene.drawTileOnMinimapSprite(pixels, i1, plane + 1, x, y);
|
|
i1 += 4;
|
|
}
|
|
|
|
}
|
|
|
|
int j1 = 0xFFFFFF;
|
|
int l1 = 0xEE0000;
|
|
minimapImage.init();
|
|
|
|
for (int y = 1; y < 103; y++) {
|
|
for (int x = 1; x < 103; x++) {
|
|
if ((tileFlags[plane][x][y] & 0x18) == 0)
|
|
drawMapScenes(y, j1, x, l1, plane);
|
|
if (plane < 3 && (tileFlags[plane + 1][x][y] & 8) != 0)
|
|
drawMapScenes(y, j1, x, l1, plane + 1);
|
|
}
|
|
|
|
}
|
|
|
|
gameScreenImageProducer.initDrawingArea();
|
|
anInt1071 = 0;
|
|
|
|
for (int x = 0; x < 104; x++) {
|
|
for (int y = 0; y < 104; y++) {
|
|
int id = scene.getGroundDecorationUid(plane, x, y);
|
|
if (id != 0) {
|
|
id = id >> 14 & 0x7fff;
|
|
|
|
int function = ObjectDefinition.lookup(id).minimapFunction;
|
|
|
|
if (function >= 0) {
|
|
|
|
int viewportX = x;
|
|
int viewportY = y;
|
|
if (function >= 15 && function <= 67) {
|
|
function -= 2;
|
|
} else if (function >= 68 && function <= 84) {
|
|
function -= 1;
|
|
}
|
|
minimapHint[anInt1071] = mapFunctions[function];
|
|
minimapHintX[anInt1071] = viewportX;
|
|
minimapHintY[anInt1071] = viewportY;
|
|
anInt1071++;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (Configuration.dumpMapRegions) {
|
|
|
|
File directory = new File("MapImageDumps/");
|
|
if (!directory.exists()) {
|
|
directory.mkdir();
|
|
}
|
|
BufferedImage bufferedimage = new BufferedImage(minimapImage.getMyWidth(), minimapImage.getMyHeight(), 1);
|
|
bufferedimage.setRGB(0, 0, minimapImage.getMyWidth(), minimapImage.getMyHeight(),
|
|
minimapImage.getMyPixels(), 0, minimapImage.getMyWidth());
|
|
Graphics2D graphics2d = bufferedimage.createGraphics();
|
|
graphics2d.dispose();
|
|
try {
|
|
File file1 = new File("MapImageDumps/" + (directory.listFiles().length + 1) + ".png");
|
|
ImageIO.write(bufferedimage, "png", file1);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void updateGroundItems(int i, int j) {
|
|
Deque class19 = groundItems[plane][i][j];
|
|
if (class19 == null) {
|
|
scene.removeGroundItemTile(plane, i, j);
|
|
return;
|
|
}
|
|
int k = 0xfa0a1f01;
|
|
Object obj = null;
|
|
for (Item item = (Item) class19.reverseGetFirst(); item != null; item = (Item) class19.reverseGetNext()) {
|
|
ItemDefinition itemDef = ItemDefinition.lookup(item.ID);
|
|
int l = itemDef.value;
|
|
if (itemDef.stackable)
|
|
l *= item.itemCount + 1;
|
|
// notifyItemSpawn(item, i + baseX, j + baseY);
|
|
|
|
if (l > k) {
|
|
k = l;
|
|
obj = item;
|
|
}
|
|
}
|
|
|
|
class19.insertTail(((Linkable) (obj)));
|
|
Object obj1 = null;
|
|
Object obj2 = null;
|
|
for (Item class30_sub2_sub4_sub2_1 = (Item) class19
|
|
.reverseGetFirst(); class30_sub2_sub4_sub2_1 != null; class30_sub2_sub4_sub2_1 = (Item) class19
|
|
.reverseGetNext()) {
|
|
if (class30_sub2_sub4_sub2_1.ID != ((Item) (obj)).ID && obj1 == null)
|
|
obj1 = class30_sub2_sub4_sub2_1;
|
|
if (class30_sub2_sub4_sub2_1.ID != ((Item) (obj)).ID && class30_sub2_sub4_sub2_1.ID != ((Item) (obj1)).ID
|
|
&& obj2 == null)
|
|
obj2 = class30_sub2_sub4_sub2_1;
|
|
}
|
|
|
|
int i1 = i + (j << 7) + 0x60000000;
|
|
scene.addGroundItemTile(i, i1, ((Renderable) (obj1)), getCenterHeight(plane, j * 128 + 64, i * 128 + 64),
|
|
((Renderable) (obj2)), ((Renderable) (obj)), plane, j);
|
|
}
|
|
|
|
private void showNPCs(boolean flag) {
|
|
for (int j = 0; j < npcCount; j++) {
|
|
Npc npc = npcs[npcIndices[j]];
|
|
int k = 0x20000000 + (npcIndices[j] << 14);
|
|
if (npc == null || !npc.isVisible() || npc.desc.priorityRender != flag)
|
|
continue;
|
|
int l = npc.x >> 7;
|
|
int i1 = npc.y >> 7;
|
|
if (l < 0 || l >= 104 || i1 < 0 || i1 >= 104)
|
|
continue;
|
|
if (npc.size == 1 && (npc.x & 0x7f) == 64 && (npc.y & 0x7f) == 64) {
|
|
if (anIntArrayArray929[l][i1] == anInt1265)
|
|
continue;
|
|
anIntArrayArray929[l][i1] = anInt1265;
|
|
}
|
|
if (!npc.desc.clickable)
|
|
k += 0x80000000;
|
|
scene.addAnimableA(plane, npc.orientation, getCenterHeight(plane, npc.y, npc.x), k, npc.y,
|
|
(npc.size - 1) * 64 + 60, npc.x, npc, npc.animationStretches);
|
|
}
|
|
}
|
|
|
|
public void drawHoverBox(int xPos, int yPos, String text) {
|
|
String[] results = text.split("\n");
|
|
int height = (results.length * 16) + 6;
|
|
int width;
|
|
width = smallText.getTextWidth(results[0]) + 6;
|
|
for (int i = 1; i < results.length; i++)
|
|
if (width <= smallText.getTextWidth(results[i]) + 6)
|
|
width = smallText.getTextWidth(results[i]) + 6;
|
|
Rasterizer2D.drawBox(xPos, yPos, width, height, 0xFFFFA0);
|
|
Rasterizer2D.drawBoxOutline(xPos, yPos, width, height, 0);
|
|
yPos += 14;
|
|
for (int i = 0; i < results.length; i++) {
|
|
smallText.drawTextWithPotentialShadow(false, xPos + 3, 0, results[i], yPos);
|
|
yPos += 16;
|
|
}
|
|
}
|
|
|
|
private void buildInterfaceMenu(int i, Widget widget, int k, int l, int i1, int j1) {
|
|
if (widget == null)
|
|
widget = Widget.interfaceCache[21356]; // newer prayer
|
|
if (widget.type != 0 || widget.children == null || widget.invisible)
|
|
return;
|
|
if (k < i || i1 < l || k > i + widget.width || i1 > l + widget.height)
|
|
return;
|
|
int size = widget.children.length;
|
|
for (int l1 = 0; l1 < size; l1++) {
|
|
int i2 = widget.childX[l1] + i;
|
|
int j2 = (widget.childY[l1] + l) - j1;
|
|
Widget childInterface = Widget.interfaceCache[widget.children[l1]];
|
|
i2 += childInterface.x;
|
|
j2 += childInterface.anInt265;
|
|
if ((childInterface.hoverType >= 0 || childInterface.defaultHoverColor != 0) && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height)
|
|
if (childInterface.hoverType >= 0)
|
|
anInt886 = childInterface.hoverType;
|
|
else
|
|
anInt886 = childInterface.id;
|
|
if (childInterface.type == 8 && k >= i2 && i1 >= j2 && k < i2 + childInterface.width
|
|
&& i1 < j2 + childInterface.height) {
|
|
anInt1315 = childInterface.id;
|
|
}
|
|
if (childInterface.type == Widget.TYPE_CONTAINER) {
|
|
buildInterfaceMenu(i2, childInterface, k, j2, i1, childInterface.scrollPosition);
|
|
if (childInterface.scrollMax > childInterface.height)
|
|
method65(i2 + childInterface.width, childInterface.height, k, i1, childInterface, j2, true,
|
|
childInterface.scrollMax);
|
|
} else {
|
|
if (childInterface.optionType == Widget.OPTION_OK && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height) {
|
|
boolean flag = false;
|
|
if (childInterface.contentType != 0)
|
|
flag = buildFriendsListMenu(childInterface);
|
|
if (!flag) {
|
|
menuActionText[menuActionRow] = childInterface.tooltip;
|
|
menuActionTypes[menuActionRow] = 315;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
if (childInterface.optionType == Widget.OPTION_USABLE && spellSelected == 0 && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height) {
|
|
String s = childInterface.selectedActionName;
|
|
if (s.indexOf(" ") != -1)
|
|
s = s.substring(0, s.indexOf(" "));
|
|
if (childInterface.spellName.endsWith("Rush") || childInterface.spellName.endsWith("Burst")
|
|
|| childInterface.spellName.endsWith("Blitz")
|
|
|| childInterface.spellName.endsWith("Barrage")
|
|
|| childInterface.spellName.endsWith("strike") || childInterface.spellName.endsWith("bolt")
|
|
|| childInterface.spellName.equals("Crumble undead")
|
|
|| childInterface.spellName.endsWith("blast") || childInterface.spellName.endsWith("wave")
|
|
|| childInterface.spellName.equals("Claws of Guthix")
|
|
|| childInterface.spellName.equals("Flames of Zamorak")
|
|
|| childInterface.spellName.equals("Magic Dart")) {
|
|
menuActionText[menuActionRow] = "Autocast @gre@" + childInterface.spellName;
|
|
menuActionTypes[menuActionRow] = 104;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
menuActionText[menuActionRow] = s + " @gre@" + childInterface.spellName;
|
|
menuActionTypes[menuActionRow] = 626;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
if (childInterface.optionType == Widget.OPTION_CLOSE && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height) {
|
|
menuActionText[menuActionRow] = "Close";
|
|
menuActionTypes[menuActionRow] = 200;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
if (childInterface.optionType == Widget.OPTION_TOGGLE_SETTING && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height) {
|
|
menuActionText[menuActionRow] = childInterface.tooltip;
|
|
menuActionTypes[menuActionRow] = 169;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
|
|
if (childInterface.optionType == Widget.OPTION_RESET_SETTING && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height) {
|
|
menuActionText[menuActionRow] = childInterface.tooltip;
|
|
menuActionTypes[menuActionRow] = 646;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
|
|
if (childInterface.optionType == Widget.OPTION_CONTINUE && !continuedDialogue && k >= i2 && i1 >= j2
|
|
&& k < i2 + childInterface.width && i1 < j2 + childInterface.height) {
|
|
menuActionText[menuActionRow] = childInterface.tooltip;
|
|
menuActionTypes[menuActionRow] = 679;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
|
|
if (k >= i2 && i1 >= j2 && k < i2 + (childInterface.type == 4 ? 100 : childInterface.width)
|
|
&& i1 < j2 + childInterface.height) {
|
|
if (childInterface.actions != null) {
|
|
if ((childInterface.type == 4 && childInterface.defaultText.length() > 0)
|
|
|| childInterface.type == 5) {
|
|
for (int action = childInterface.actions.length - 1; action >= 0; action--) {
|
|
if (childInterface.actions[action] != null) {
|
|
menuActionText[menuActionRow] = childInterface.actions[action]
|
|
+ (childInterface.type == 4 ? " " + childInterface.defaultText : "");
|
|
menuActionTypes[menuActionRow] = 647;
|
|
firstMenuAction[menuActionRow] = action;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (childInterface.type == Widget.TYPE_INVENTORY) {
|
|
int k2 = 0;
|
|
for (int l2 = 0; l2 < childInterface.height; l2++) {
|
|
for (int i3 = 0; i3 < childInterface.width; i3++) {
|
|
int j3 = i2 + i3 * (32 + childInterface.spritePaddingX);
|
|
int k3 = j2 + l2 * (32 + childInterface.spritePaddingY);
|
|
if (k2 < 20) {
|
|
j3 += childInterface.spritesX[k2];
|
|
k3 += childInterface.spritesY[k2];
|
|
}
|
|
if (k >= j3 && i1 >= k3 && k < j3 + 32 && i1 < k3 + 32) {
|
|
mouseInvInterfaceIndex = k2;
|
|
lastActiveInvInterface = childInterface.id;
|
|
if (childInterface.inventoryItemId[k2] > 0) {
|
|
ItemDefinition itemDef = ItemDefinition
|
|
.lookup(childInterface.inventoryItemId[k2] - 1);
|
|
if (itemSelected == 1 && childInterface.hasActions) {
|
|
if (childInterface.id != anInt1284 || k2 != anInt1283) {
|
|
menuActionText[menuActionRow] = "Use " + selectedItemName + " with @lre@"
|
|
+ itemDef.name;
|
|
menuActionTypes[menuActionRow] = 870;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
} else if (spellSelected == 1 && childInterface.hasActions) {
|
|
if ((spellUsableOn & 0x10) == 16) {
|
|
menuActionText[menuActionRow] = spellTooltip + " @lre@" + itemDef.name;
|
|
menuActionTypes[menuActionRow] = 543;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
} else {
|
|
if (childInterface.hasActions) {
|
|
for (int l3 = 4; l3 >= 3; l3--)
|
|
if (itemDef.actions != null && itemDef.actions[l3] != null) {
|
|
menuActionText[menuActionRow] = itemDef.actions[l3] + " @lre@"
|
|
+ itemDef.name;
|
|
if (l3 == 3)
|
|
menuActionTypes[menuActionRow] = 493;
|
|
if (l3 == 4)
|
|
menuActionTypes[menuActionRow] = 847;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
} else if (l3 == 4) {
|
|
menuActionText[menuActionRow] = "Drop @lre@" + itemDef.name;
|
|
menuActionTypes[menuActionRow] = 847;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
if (childInterface.usableItems) {
|
|
menuActionText[menuActionRow] = "Use @lre@" + itemDef.name;
|
|
menuActionTypes[menuActionRow] = 447;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
if (childInterface.hasActions && itemDef.actions != null) {
|
|
for (int i4 = 2; i4 >= 0; i4--)
|
|
if (itemDef.actions[i4] != null) {
|
|
menuActionText[menuActionRow] = itemDef.actions[i4] + " @lre@"
|
|
+ itemDef.name;
|
|
if (i4 == 0)
|
|
menuActionTypes[menuActionRow] = 74;
|
|
if (i4 == 1)
|
|
menuActionTypes[menuActionRow] = 454;
|
|
if (i4 == 2)
|
|
menuActionTypes[menuActionRow] = 539;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
|
|
}
|
|
if (childInterface.actions != null) {
|
|
for (int type = 4; type >= 0; type--)
|
|
if (childInterface.actions[type] != null) {
|
|
menuActionText[menuActionRow] = childInterface.actions[type]
|
|
+ " @lre@" + itemDef.name;
|
|
if (type == 0)
|
|
menuActionTypes[menuActionRow] = 632;
|
|
if (type == 1)
|
|
menuActionTypes[menuActionRow] = 78;
|
|
if (type == 2)
|
|
menuActionTypes[menuActionRow] = 867;
|
|
if (type == 3)
|
|
menuActionTypes[menuActionRow] = 431;
|
|
if (type == 4)
|
|
menuActionTypes[menuActionRow] = 53;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
|
|
}
|
|
if (Configuration.enableIds && (myPrivilege >= 2 && myPrivilege <= 3)) {
|
|
menuActionText[menuActionRow] = "Examine @lre@" + itemDef.name
|
|
+ " @gre@(@whi@" + (childInterface.inventoryItemId[k2] - 1)
|
|
+ "@gre@)";
|
|
} else {
|
|
menuActionText[menuActionRow] = "Examine @lre@" + itemDef.name;
|
|
}
|
|
menuActionTypes[menuActionRow] = 1125;
|
|
selectedMenuActions[menuActionRow] = itemDef.id;
|
|
firstMenuAction[menuActionRow] = k2;
|
|
secondMenuAction[menuActionRow] = childInterface.id;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
}
|
|
k2++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void drawTransparentScrollBar(int x, int y, int height, int maxScroll, int pos) {
|
|
SpriteCache.lookup(29).drawARGBSprite(x, y, 120);
|
|
SpriteCache.lookup(30).drawARGBSprite(x, y + height - 16, 120);
|
|
Rasterizer2D.drawTransparentVerticalLine(x, y + 16, height - 32, 0xffffff, 64);
|
|
Rasterizer2D.drawTransparentVerticalLine(x + 15, y + 16, height - 32, 0xffffff, 64);
|
|
int barHeight = (height - 32) * height / maxScroll;
|
|
if (barHeight < 10) {
|
|
barHeight = 10;
|
|
}
|
|
int barPos = 0;
|
|
if (maxScroll != height) {
|
|
barPos = (height - 32 - barHeight) * pos / (maxScroll - height);
|
|
}
|
|
Rasterizer2D.drawTransparentBoxOutline(x, y + 16 + barPos, 16,
|
|
5 + y + 16 + barPos + barHeight - 5 - (y + 16 + barPos), 0xffffff, 32);
|
|
}
|
|
|
|
public void drawScrollbar(int height, int pos, int y, int x, int maxScroll, boolean transparent) {
|
|
if (transparent) {
|
|
drawTransparentScrollBar(x, y, height, maxScroll, pos);
|
|
} else {
|
|
scrollBar1.drawSprite(x, y);
|
|
scrollBar2.drawSprite(x, (y + height) - 16);
|
|
Rasterizer2D.drawBox(x, y + 16, 16, height - 32, 0x000001);
|
|
Rasterizer2D.drawBox(x, y + 16, 15, height - 32, 0x3d3426);
|
|
Rasterizer2D.drawBox(x, y + 16, 13, height - 32, 0x342d21);
|
|
Rasterizer2D.drawBox(x, y + 16, 11, height - 32, 0x2e281d);
|
|
Rasterizer2D.drawBox(x, y + 16, 10, height - 32, 0x29241b);
|
|
Rasterizer2D.drawBox(x, y + 16, 9, height - 32, 0x252019);
|
|
Rasterizer2D.drawBox(x, y + 16, 1, height - 32, 0x000001);
|
|
int k1 = ((height - 32) * height) / maxScroll;
|
|
if (k1 < 8) {
|
|
k1 = 8;
|
|
}
|
|
int l1 = ((height - 32 - k1) * pos) / (maxScroll - height);
|
|
Rasterizer2D.drawBox(x, y + 16 + l1, 16, k1, barFillColor);
|
|
Rasterizer2D.drawVerticalLine(x, y + 16 + l1, k1, 0x000001);
|
|
Rasterizer2D.drawVerticalLine(x + 1, y + 16 + l1, k1, 0x817051);
|
|
Rasterizer2D.drawVerticalLine(x + 2, y + 16 + l1, k1, 0x73654a);
|
|
Rasterizer2D.drawVerticalLine(x + 3, y + 16 + l1, k1, 0x6a5c43);
|
|
Rasterizer2D.drawVerticalLine(x + 4, y + 16 + l1, k1, 0x6a5c43);
|
|
Rasterizer2D.drawVerticalLine(x + 5, y + 16 + l1, k1, 0x655841);
|
|
Rasterizer2D.drawVerticalLine(x + 6, y + 16 + l1, k1, 0x655841);
|
|
Rasterizer2D.drawVerticalLine(x + 7, y + 16 + l1, k1, 0x61553e);
|
|
Rasterizer2D.drawVerticalLine(x + 8, y + 16 + l1, k1, 0x61553e);
|
|
Rasterizer2D.drawVerticalLine(x + 9, y + 16 + l1, k1, 0x5d513c);
|
|
Rasterizer2D.drawVerticalLine(x + 10, y + 16 + l1, k1, 0x5d513c);
|
|
Rasterizer2D.drawVerticalLine(x + 11, y + 16 + l1, k1, 0x594e3a);
|
|
Rasterizer2D.drawVerticalLine(x + 12, y + 16 + l1, k1, 0x594e3a);
|
|
Rasterizer2D.drawVerticalLine(x + 13, y + 16 + l1, k1, 0x514635);
|
|
Rasterizer2D.drawVerticalLine(x + 14, y + 16 + l1, k1, 0x4b4131);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 16 + l1, 15, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 15, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 14, 0x655841);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 13, 0x6a5c43);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 11, 0x6d5f48);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 10, 0x73654a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 7, 0x76684b);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 5, 0x7b6a4d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 4, 0x7e6e50);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 3, 0x817051);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 17 + l1, 2, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 15, 0x564b38);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 14, 0x5d513c);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 11, 0x625640);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 10, 0x655841);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 7, 0x6a5c43);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 5, 0x6e6046);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 4, 0x716247);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 3, 0x7b6a4d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 2, 0x817051);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 18 + l1, 1, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 15, 0x514635);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 14, 0x564b38);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 11, 0x5d513c);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 9, 0x61553e);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 7, 0x655841);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 5, 0x6a5c43);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 4, 0x6e6046);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 3, 0x73654a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 2, 0x817051);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 19 + l1, 1, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 15, 0x4b4131);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 14, 0x544936);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 13, 0x594e3a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 10, 0x5d513c);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 8, 0x61553e);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 6, 0x655841);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 4, 0x6a5c43);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 3, 0x73654a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 2, 0x817051);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 20 + l1, 1, 0x000001);
|
|
Rasterizer2D.drawVerticalLine(x + 15, y + 16 + l1, k1, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 15 + l1 + k1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 15, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 14, 0x3f372a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 10, 0x443c2d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 9, 0x483e2f);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 7, 0x4a402f);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 4, 0x4b4131);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 3, 0x564b38);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 14 + l1 + k1, 2, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 15, 0x443c2d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 11, 0x4b4131);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 9, 0x514635);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 7, 0x544936);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 6, 0x564b38);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 4, 0x594e3a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 3, 0x625640);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 2, 0x6a5c43);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 13 + l1 + k1, 1, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 15, 0x443c2d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 14, 0x4b4131);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 12, 0x544936);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 11, 0x564b38);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 10, 0x594e3a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 7, 0x5d513c);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 4, 0x61553e);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 3, 0x6e6046);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 2, 0x7b6a4d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 12 + l1 + k1, 1, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 16, 0x000001);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 15, 0x4b4131);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 14, 0x514635);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 13, 0x564b38);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 11, 0x594e3a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 9, 0x5d513c);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 7, 0x61553e);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 5, 0x655841);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 4, 0x6a5c43);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 3, 0x73654a);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 2, 0x7b6a4d);
|
|
Rasterizer2D.drawHorizontalLine(x, y + 11 + l1 + k1, 1, 0x000001);
|
|
}
|
|
}
|
|
|
|
private void updateNPCs(Buffer stream, int i) {
|
|
removedMobCount = 0;
|
|
mobsAwaitingUpdateCount = 0;
|
|
method139(stream);
|
|
updateNPCMovement(i, stream);
|
|
npcUpdateMask(stream);
|
|
for (int k = 0; k < removedMobCount; k++) {
|
|
int l = removedMobs[k];
|
|
if (npcs[l].time != tick) {
|
|
npcs[l].desc = null;
|
|
npcs[l] = null;
|
|
}
|
|
}
|
|
|
|
if (stream.currentPosition != i) {
|
|
SignLink.reporterror(
|
|
myUsername + " size mismatch in getnpcpos - pos:" + stream.currentPosition + " psize:" + i);
|
|
throw new RuntimeException("eek");
|
|
}
|
|
for (int i1 = 0; i1 < npcCount; i1++)
|
|
if (npcs[npcIndices[i1]] == null) {
|
|
SignLink.reporterror(myUsername + " null entry in npc list - pos:" + i1 + " size:" + npcCount);
|
|
throw new RuntimeException("eek");
|
|
}
|
|
|
|
}
|
|
|
|
public void processChatModeClick() {
|
|
final int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 503;
|
|
if (super.mouseX >= 5 && super.mouseX <= 61 && super.mouseY >= yOffset + 482 && super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 0;
|
|
updateChatbox = true;
|
|
} else if (super.mouseX >= 71 && super.mouseX <= 127 && super.mouseY >= yOffset + 482
|
|
&& super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 1;
|
|
updateChatbox = true;
|
|
} else if (super.mouseX >= 137 && super.mouseX <= 193 && super.mouseY >= yOffset + 482
|
|
&& super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 2;
|
|
updateChatbox = true;
|
|
} else if (super.mouseX >= 203 && super.mouseX <= 259 && super.mouseY >= yOffset + 482
|
|
&& super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 3;
|
|
updateChatbox = true;
|
|
} else if (super.mouseX >= 269 && super.mouseX <= 325 && super.mouseY >= yOffset + 482
|
|
&& super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 4;
|
|
updateChatbox = true;
|
|
} else if (super.mouseX >= 335 && super.mouseX <= 391 && super.mouseY >= yOffset + 482
|
|
&& super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 5;
|
|
updateChatbox = true;
|
|
} else if (super.mouseX >= 404 && super.mouseX <= 515 && super.mouseY >= yOffset + 482
|
|
&& super.mouseY <= yOffset + 503) {
|
|
cButtonHPos = 6;
|
|
updateChatbox = true;
|
|
} else {
|
|
cButtonHPos = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (super.clickMode3 == 1) {
|
|
if (super.saveClickX >= 5 && super.saveClickX <= 61 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if (setChannel != 0) {
|
|
cButtonCPos = 0;
|
|
chatTypeView = 0;
|
|
updateChatbox = true;
|
|
setChannel = 0;
|
|
} else {
|
|
showChatComponents = !showChatComponents;
|
|
}
|
|
} else {
|
|
cButtonCPos = 0;
|
|
chatTypeView = 0;
|
|
updateChatbox = true;
|
|
setChannel = 0;
|
|
}
|
|
} else if (super.saveClickX >= 71 && super.saveClickX <= 127 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if (setChannel != 1 && frameMode != ScreenMode.FIXED) {
|
|
cButtonCPos = 1;
|
|
chatTypeView = 5;
|
|
updateChatbox = true;
|
|
setChannel = 1;
|
|
} else {
|
|
showChatComponents = !showChatComponents;
|
|
}
|
|
} else {
|
|
cButtonCPos = 1;
|
|
chatTypeView = 5;
|
|
updateChatbox = true;
|
|
setChannel = 1;
|
|
}
|
|
} else if (super.saveClickX >= 137 && super.saveClickX <= 193 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if (setChannel != 2 && frameMode != ScreenMode.FIXED) {
|
|
cButtonCPos = 2;
|
|
chatTypeView = 1;
|
|
updateChatbox = true;
|
|
setChannel = 2;
|
|
} else {
|
|
showChatComponents = !showChatComponents;
|
|
}
|
|
} else {
|
|
cButtonCPos = 2;
|
|
chatTypeView = 1;
|
|
updateChatbox = true;
|
|
setChannel = 2;
|
|
}
|
|
} else if (super.saveClickX >= 203 && super.saveClickX <= 259 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if (setChannel != 3 && frameMode != ScreenMode.FIXED) {
|
|
cButtonCPos = 3;
|
|
chatTypeView = 2;
|
|
updateChatbox = true;
|
|
setChannel = 3;
|
|
} else {
|
|
showChatComponents = !showChatComponents;
|
|
}
|
|
} else {
|
|
cButtonCPos = 3;
|
|
chatTypeView = 2;
|
|
updateChatbox = true;
|
|
setChannel = 3;
|
|
}
|
|
} else if (super.saveClickX >= 269 && super.saveClickX <= 325 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if (setChannel != 4 && frameMode != ScreenMode.FIXED) {
|
|
cButtonCPos = 4;
|
|
chatTypeView = 11;
|
|
updateChatbox = true;
|
|
setChannel = 4;
|
|
} else {
|
|
showChatComponents = !showChatComponents;
|
|
}
|
|
} else {
|
|
cButtonCPos = 4;
|
|
chatTypeView = 11;
|
|
updateChatbox = true;
|
|
setChannel = 4;
|
|
}
|
|
} else if (super.saveClickX >= 335 && super.saveClickX <= 391 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if (setChannel != 5 && frameMode != ScreenMode.FIXED) {
|
|
cButtonCPos = 5;
|
|
chatTypeView = 3;
|
|
updateChatbox = true;
|
|
setChannel = 5;
|
|
} else {
|
|
showChatComponents = !showChatComponents;
|
|
}
|
|
} else {
|
|
cButtonCPos = 5;
|
|
chatTypeView = 3;
|
|
updateChatbox = true;
|
|
setChannel = 5;
|
|
}
|
|
} else if (super.saveClickX >= 404 && super.saveClickX <= 515 && super.saveClickY >= yOffset + 482
|
|
&& super.saveClickY <= yOffset + 505) {
|
|
if (openInterfaceId == -1) {
|
|
clearTopInterfaces();
|
|
reportAbuseInput = "";
|
|
canMute = false;
|
|
for (int i = 0; i < Widget.interfaceCache.length; i++) {
|
|
if (Widget.interfaceCache[i] == null || Widget.interfaceCache[i].contentType != 600) {
|
|
continue;
|
|
}
|
|
reportAbuseInterfaceID = openInterfaceId = Widget.interfaceCache[i].parent;
|
|
break;
|
|
}
|
|
} else {
|
|
sendMessage("Please close the interface you have open before using 'report abuse'", 0, "");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void updateVarp(int id) {
|
|
|
|
|
|
int parameter = Varp.variables[id].getActionId();
|
|
if (parameter == 0) {
|
|
return;
|
|
}
|
|
|
|
int state = settings[id];
|
|
System.out.println("Updating varp: " + id + " - " + Varp.variables[id].actionId + " State: " + state);
|
|
if (parameter == 1) {
|
|
|
|
if (state == 1) {
|
|
Rasterizer3D.setBrightness(0.9);
|
|
}
|
|
|
|
if (state == 2) {
|
|
Rasterizer3D.setBrightness(0.8);
|
|
}
|
|
|
|
if (state == 3) {
|
|
Rasterizer3D.setBrightness(0.7);
|
|
}
|
|
|
|
if (state == 4) {
|
|
Rasterizer3D.setBrightness(0.6);
|
|
}
|
|
|
|
ItemDefinition.sprites.clear();
|
|
welcomeScreenRaised = true;
|
|
}
|
|
|
|
if (parameter == 3) {
|
|
|
|
boolean previousPlayingMusic = Configuration.enableMusic;
|
|
|
|
if (state == 0) {
|
|
|
|
if (SignLink.music != null) {
|
|
adjustVolume(Configuration.enableMusic, 500);
|
|
}
|
|
|
|
Configuration.enableMusic = true;
|
|
}
|
|
if (state == 1) {
|
|
|
|
if (SignLink.music != null) {
|
|
adjustVolume(Configuration.enableMusic, 300);
|
|
}
|
|
|
|
Configuration.enableMusic = true;
|
|
}
|
|
if (state == 2) {
|
|
|
|
if (SignLink.music != null) {
|
|
adjustVolume(Configuration.enableMusic, 100);
|
|
}
|
|
|
|
Configuration.enableMusic = true;
|
|
}
|
|
if (state == 3) {
|
|
|
|
if (SignLink.music != null) {
|
|
adjustVolume(Configuration.enableMusic, 0);
|
|
}
|
|
|
|
Configuration.enableMusic = true;
|
|
}
|
|
if (state == 4)
|
|
Configuration.enableMusic = false;
|
|
if (Configuration.enableMusic != previousPlayingMusic && !lowMemory) {
|
|
if (Configuration.enableMusic) {
|
|
nextSong = currentSong;
|
|
fadeMusic = true;
|
|
resourceProvider.provide(2, nextSong);
|
|
} else {
|
|
stopMidi();
|
|
}
|
|
prevSong = 0;
|
|
}
|
|
}
|
|
|
|
if (parameter == 4) {
|
|
SoundPlayer.setVolume(state);
|
|
if (state == 0) {
|
|
aBoolean848 = true;
|
|
setWaveVolume(0);
|
|
}
|
|
if (state == 1) {
|
|
aBoolean848 = true;
|
|
setWaveVolume(-400);
|
|
}
|
|
if (state == 2) {
|
|
aBoolean848 = true;
|
|
setWaveVolume(-800);
|
|
}
|
|
if (state == 3) {
|
|
aBoolean848 = true;
|
|
setWaveVolume(-1200);
|
|
}
|
|
if (state == 4)
|
|
aBoolean848 = false;
|
|
}
|
|
|
|
if (parameter == 5) {
|
|
anInt1253 = state;
|
|
}
|
|
|
|
if (parameter == 6) {
|
|
anInt1249 = state;
|
|
}
|
|
|
|
if (parameter == 8) {
|
|
splitPrivateChat = state;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
if (parameter == 9) {
|
|
anInt913 = state;
|
|
}
|
|
|
|
}
|
|
|
|
public void updateEntities() {
|
|
try {
|
|
int messageLength = 0;
|
|
for (int j = -1; j < playerCount + npcCount; j++) {
|
|
Object obj;
|
|
if (j == -1)
|
|
obj = localPlayer;
|
|
else if (j < playerCount)
|
|
obj = players[playerList[j]];
|
|
else
|
|
obj = npcs[npcIndices[j - playerCount]];
|
|
if (obj == null || !((Mob) (obj)).isVisible())
|
|
continue;
|
|
if (obj instanceof Npc) {
|
|
NpcDefinition entityDef = ((Npc) obj).desc;
|
|
if (Configuration.namesAboveHeads) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
smallText.drawText(0x0099FF, entityDef.name + " - ID: ["+entityDef.id+"]", spriteDrawY - 5, spriteDrawX); // -15
|
|
// from
|
|
// original
|
|
}
|
|
if (entityDef.childrenIDs != null)
|
|
entityDef = entityDef.morph();
|
|
if (entityDef == null)
|
|
continue;
|
|
}
|
|
if (j < playerCount) {
|
|
int l = 30;
|
|
Player player = (Player) obj;
|
|
if (player.headIcon >= 0) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
if (spriteDrawX > -1) {
|
|
if (player.skullIcon < 2) {
|
|
skullIcons[player.skullIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l);
|
|
l += 25;
|
|
}
|
|
if (player.headIcon < 13) {
|
|
headIcons[player.headIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l);
|
|
l += 18;
|
|
}
|
|
}
|
|
}
|
|
if (j >= 0 && hintIconDrawType == 10 && hintIconPlayerId == playerList[j]) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
if (spriteDrawX > -1)
|
|
headIconsHint[player.hintIcon].drawSprite(spriteDrawX - 12, spriteDrawY - l);
|
|
}
|
|
if (Configuration.hpAboveHeads && Configuration.namesAboveHeads) {
|
|
newSmallFont.drawCenteredString(
|
|
(new StringBuilder()).append(((Mob) obj).currentHealth).append("/")
|
|
.append(((Mob) obj).maxHealth).toString(),
|
|
spriteDrawX, spriteDrawY - 29, 0x3399ff, 100);
|
|
} // draws HP above head
|
|
else if (Configuration.hpAboveHeads && !Configuration.namesAboveHeads) {
|
|
newSmallFont.drawCenteredString(
|
|
(new StringBuilder()).append(((Mob) obj).currentHealth).append("/")
|
|
.append(((Mob) obj).maxHealth).toString(),
|
|
spriteDrawX, spriteDrawY - 5, 0x3399ff, 100);
|
|
}
|
|
if (Configuration.namesAboveHeads) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
int col = 0x0000ff;
|
|
if (player.clanName == localPlayer.clanName)
|
|
col = 0x00ff00;
|
|
smallText.drawText(col, player.name, spriteDrawY - 15, spriteDrawX);
|
|
if (player.clanName != "")
|
|
smallText.drawText(col, "<" + player.clanName + ">", spriteDrawY - 5, spriteDrawX);
|
|
}
|
|
} else {
|
|
NpcDefinition entityDef_1 = ((Npc) obj).desc;
|
|
if (entityDef_1.headIcon >= 0 && entityDef_1.headIcon < headIcons.length) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
if (spriteDrawX > -1)
|
|
headIcons[entityDef_1.headIcon].drawSprite(spriteDrawX - 12, spriteDrawY - 30);
|
|
}
|
|
if (hintIconDrawType == 1 && hintIconNpcId == npcIndices[j - playerCount] && tick % 20 < 10) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
if (spriteDrawX > -1)
|
|
headIconsHint[0].drawSprite(spriteDrawX - 12, spriteDrawY - 28);
|
|
}
|
|
}
|
|
if (((Mob) (obj)).spokenText != null && (j >= playerCount || publicChatMode == 0 || publicChatMode == 3
|
|
|| publicChatMode == 1 && isFriendOrSelf(((Player) obj).name))) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height);
|
|
if (spriteDrawX > -1 && messageLength < anInt975) {
|
|
anIntArray979[messageLength] = boldText.method384(((Mob) (obj)).spokenText) / 2;
|
|
anIntArray978[messageLength] = boldText.verticalSpace;
|
|
anIntArray976[messageLength] = spriteDrawX;
|
|
anIntArray977[messageLength] = spriteDrawY;
|
|
textColourEffect[messageLength] = ((Mob) (obj)).textColour;
|
|
anIntArray981[messageLength] = ((Mob) (obj)).textEffect;
|
|
anIntArray982[messageLength] = ((Mob) (obj)).textCycle;
|
|
aStringArray983[messageLength++] = ((Mob) (obj)).spokenText;
|
|
if (anInt1249 == 0 && ((Mob) (obj)).textEffect >= 1 && ((Mob) (obj)).textEffect <= 3) {
|
|
anIntArray978[messageLength] += 10;
|
|
anIntArray977[messageLength] += 5;
|
|
}
|
|
if (anInt1249 == 0 && ((Mob) (obj)).textEffect == 4)
|
|
anIntArray979[messageLength] = 60;
|
|
if (anInt1249 == 0 && ((Mob) (obj)).textEffect == 5)
|
|
anIntArray978[messageLength] += 5;
|
|
}
|
|
}
|
|
if (((Mob) (obj)).loopCycleStatus > tick) {
|
|
try {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height + 15);
|
|
if (spriteDrawX > -1) {
|
|
int i1 = (((Mob) (obj)).currentHealth * 30) / ((Mob) (obj)).maxHealth;
|
|
|
|
if (i1 > 30) {
|
|
i1 = 30;
|
|
}
|
|
int hpPercent = (((Mob) (obj)).currentHealth * 56) / ((Mob) (obj)).maxHealth;
|
|
|
|
if (hpPercent > 56) {
|
|
hpPercent = 56;
|
|
}
|
|
if (!Configuration.hpBar554) {
|
|
Rasterizer2D.drawBox(spriteDrawX - 15, spriteDrawY - 3, i1, 5, 65280);
|
|
Rasterizer2D.drawBox((spriteDrawX - 15) + i1, spriteDrawY - 3, 30 - i1, 5, 0xff0000);
|
|
} else {
|
|
SpriteCache.lookup(41).drawSprite(spriteDrawX - 28, spriteDrawY - 3);
|
|
SpriteCache.set(40, new Sprite(SpriteCache.lookup(40), hpPercent, 7));
|
|
SpriteCache.lookup(40).drawSprite(spriteDrawX - 28, spriteDrawY - 3);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
}
|
|
}
|
|
if (!Configuration.hitmarks554) {
|
|
for (int j1 = 0; j1 < 4; j1++) {
|
|
if (((Mob) (obj)).hitsLoopCycle[j1] > tick) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height / 2);
|
|
if (spriteDrawX > -1) {
|
|
if (j1 == 1)
|
|
spriteDrawY -= 20;
|
|
if (j1 == 2) {
|
|
spriteDrawX -= 15;
|
|
spriteDrawY -= 10;
|
|
}
|
|
if (j1 == 3) {
|
|
spriteDrawX += 15;
|
|
spriteDrawY -= 10;
|
|
}
|
|
hitMarks[((Mob) (obj)).hitMarkTypes[j1]].drawSprite(spriteDrawX - 12, spriteDrawY - 12);
|
|
|
|
smallText.drawText(0,
|
|
Configuration.tenXHp ? String.valueOf(((Mob) (obj)).hitDamages[j1] * 10)
|
|
: String.valueOf(((Mob) (obj)).hitDamages[j1] * 1),
|
|
spriteDrawY + 4, spriteDrawX);
|
|
|
|
smallText.drawText(0xffffff,
|
|
Configuration.tenXHp ? String.valueOf(((Mob) (obj)).hitDamages[j1] * 10)
|
|
: String.valueOf(((Mob) (obj)).hitDamages[j1] * 1),
|
|
spriteDrawY + 3, spriteDrawX - 1);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
for (int j2 = 0; j2 < 4; j2++) {
|
|
if (((Mob) (obj)).hitsLoopCycle[j2] > tick) {
|
|
npcScreenPos(((Mob) (obj)), ((Mob) (obj)).height / 2);
|
|
if (spriteDrawX > -1) {
|
|
if (j2 == 0 && ((Mob) (obj)).hitDamages[j2] > 99)
|
|
((Mob) (obj)).hitMarkTypes[j2] = 3;
|
|
else if (j2 == 1 && ((Mob) (obj)).hitDamages[j2] > 99)
|
|
((Mob) (obj)).hitMarkTypes[j2] = 3;
|
|
else if (j2 == 2 && ((Mob) (obj)).hitDamages[j2] > 99)
|
|
((Mob) (obj)).hitMarkTypes[j2] = 3;
|
|
else if (j2 == 3 && ((Mob) (obj)).hitDamages[j2] > 99)
|
|
((Mob) (obj)).hitMarkTypes[j2] = 3;
|
|
if (j2 == 1) {
|
|
spriteDrawY -= 20;
|
|
}
|
|
if (j2 == 2) {
|
|
spriteDrawX -= (((Mob) (obj)).hitDamages[j2] > 99 ? 30 : 20);
|
|
spriteDrawY -= 10;
|
|
}
|
|
if (j2 == 3) {
|
|
spriteDrawX += (((Mob) (obj)).hitDamages[j2] > 99 ? 30 : 20);
|
|
spriteDrawY -= 10;
|
|
}
|
|
if (((Mob) (obj)).hitMarkTypes[j2] == 3) {
|
|
spriteDrawX -= 8;
|
|
}
|
|
SpriteCache.lookup(hitmarks562[((Mob) (obj)).hitMarkTypes[j2]])
|
|
.draw24BitSprite(spriteDrawX - 12, spriteDrawY - 12);
|
|
smallText.drawText(0xffffff, String.valueOf(((Mob) (obj)).hitDamages[j2]),
|
|
spriteDrawY + 3,
|
|
(((Mob) (obj)).hitMarkTypes[j2] == 3 ? spriteDrawX + 7 : spriteDrawX - 1));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int defaultText = 0; defaultText < messageLength; defaultText++) {
|
|
int k1 = anIntArray976[defaultText];
|
|
int l1 = anIntArray977[defaultText];
|
|
int j2 = anIntArray979[defaultText];
|
|
int k2 = anIntArray978[defaultText];
|
|
boolean flag = true;
|
|
while (flag) {
|
|
flag = false;
|
|
for (int l2 = 0; l2 < defaultText; l2++)
|
|
if (l1 + 2 > anIntArray977[l2] - anIntArray978[l2] && l1 - k2 < anIntArray977[l2] + 2
|
|
&& k1 - j2 < anIntArray976[l2] + anIntArray979[l2]
|
|
&& k1 + j2 > anIntArray976[l2] - anIntArray979[l2]
|
|
&& anIntArray977[l2] - anIntArray978[l2] < l1) {
|
|
l1 = anIntArray977[l2] - anIntArray978[l2];
|
|
flag = true;
|
|
}
|
|
|
|
}
|
|
spriteDrawX = anIntArray976[defaultText];
|
|
spriteDrawY = anIntArray977[defaultText] = l1;
|
|
String s = aStringArray983[defaultText];
|
|
if (anInt1249 == 0) {
|
|
int i3 = 0xffff00;
|
|
if (textColourEffect[defaultText] < 6)
|
|
i3 = anIntArray965[textColourEffect[defaultText]];
|
|
if (textColourEffect[defaultText] == 6)
|
|
i3 = anInt1265 % 20 >= 10 ? 0xffff00 : 0xff0000;
|
|
if (textColourEffect[defaultText] == 7)
|
|
i3 = anInt1265 % 20 >= 10 ? 65535 : 255;
|
|
if (textColourEffect[defaultText] == 8)
|
|
i3 = anInt1265 % 20 >= 10 ? 0x80ff80 : 45056;
|
|
if (textColourEffect[defaultText] == 9) {
|
|
int j3 = 150 - anIntArray982[defaultText];
|
|
if (j3 < 50)
|
|
i3 = 0xff0000 + 1280 * j3;
|
|
else if (j3 < 100)
|
|
i3 = 0xffff00 - 0x50000 * (j3 - 50);
|
|
else if (j3 < 150)
|
|
i3 = 65280 + 5 * (j3 - 100);
|
|
}
|
|
if (textColourEffect[defaultText] == 10) {
|
|
int k3 = 150 - anIntArray982[defaultText];
|
|
if (k3 < 50)
|
|
i3 = 0xff0000 + 5 * k3;
|
|
else if (k3 < 100)
|
|
i3 = 0xff00ff - 0x50000 * (k3 - 50);
|
|
else if (k3 < 150)
|
|
i3 = (255 + 0x50000 * (k3 - 100)) - 5 * (k3 - 100);
|
|
}
|
|
if (textColourEffect[defaultText] == 11) {
|
|
int l3 = 150 - anIntArray982[defaultText];
|
|
if (l3 < 50)
|
|
i3 = 0xffffff - 0x50005 * l3;
|
|
else if (l3 < 100)
|
|
i3 = 65280 + 0x50005 * (l3 - 50);
|
|
else if (l3 < 150)
|
|
i3 = 0xffffff - 0x50000 * (l3 - 100);
|
|
}
|
|
if (anIntArray981[defaultText] == 0) {
|
|
boldText.drawText(0, s, spriteDrawY + 1, spriteDrawX);
|
|
boldText.drawText(i3, s, spriteDrawY, spriteDrawX);
|
|
}
|
|
if (anIntArray981[defaultText] == 1) {
|
|
boldText.wave(0, s, spriteDrawX, anInt1265, spriteDrawY + 1);
|
|
boldText.wave(i3, s, spriteDrawX, anInt1265, spriteDrawY);
|
|
}
|
|
if (anIntArray981[defaultText] == 2) {
|
|
boldText.wave2(spriteDrawX, s, anInt1265, spriteDrawY + 1, 0);
|
|
boldText.wave2(spriteDrawX, s, anInt1265, spriteDrawY, i3);
|
|
}
|
|
if (anIntArray981[defaultText] == 3) {
|
|
boldText.shake(150 - anIntArray982[defaultText], s, anInt1265, spriteDrawY + 1, spriteDrawX, 0);
|
|
boldText.shake(150 - anIntArray982[defaultText], s, anInt1265, spriteDrawY, spriteDrawX, i3);
|
|
}
|
|
if (anIntArray981[defaultText] == 4) {
|
|
int i4 = boldText.method384(s);
|
|
int k4 = ((150 - anIntArray982[defaultText]) * (i4 + 100)) / 150;
|
|
Rasterizer2D.setDrawingArea(334, spriteDrawX - 50, spriteDrawX + 50, 0);
|
|
boldText.render(0, s, spriteDrawY + 1, (spriteDrawX + 50) - k4);
|
|
boldText.render(i3, s, spriteDrawY, (spriteDrawX + 50) - k4);
|
|
Rasterizer2D.defaultDrawingAreaSize();
|
|
}
|
|
if (anIntArray981[defaultText] == 5) {
|
|
int j4 = 150 - anIntArray982[defaultText];
|
|
int l4 = 0;
|
|
if (j4 < 25)
|
|
l4 = j4 - 25;
|
|
else if (j4 > 125)
|
|
l4 = j4 - 125;
|
|
Rasterizer2D.setDrawingArea(spriteDrawY + 5, 0, 512, spriteDrawY - boldText.verticalSpace - 1);
|
|
boldText.drawText(0, s, spriteDrawY + 1 + l4, spriteDrawX);
|
|
boldText.drawText(i3, s, spriteDrawY + l4, spriteDrawX);
|
|
Rasterizer2D.defaultDrawingAreaSize();
|
|
}
|
|
} else {
|
|
boldText.drawText(0, s, spriteDrawY + 1, spriteDrawX);
|
|
boldText.drawText(0xffff00, s, spriteDrawY, spriteDrawX);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
}
|
|
}
|
|
|
|
public void drawSideIcons() {
|
|
|
|
int xOffset = frameMode == ScreenMode.FIXED ? 0 : frameWidth - 247;
|
|
int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 336;
|
|
int[] x;
|
|
int[] y;
|
|
if(frameMode == ScreenMode.FIXED && !Configuration.OSRS_GAMEFRAME) {
|
|
x = GameFrameIds.REDONE_ICONS_X;
|
|
y = GameFrameIds.REDONE_ICONS_Y;
|
|
} else {
|
|
x = GameFrameIds.OSRS_ICONS_X;
|
|
y = GameFrameIds.OSRS_ICONS_Y;
|
|
}
|
|
if (frameMode == ScreenMode.FIXED || frameMode != ScreenMode.FIXED && !changeTabArea) {
|
|
for (int i = 0; i < GameFrameIds.SIDE_ICONS_ID.length; i++) {
|
|
if (tabInterfaceIDs[GameFrameIds.SIDE_ICONS_ID[i]] != -1) {
|
|
if (GameFrameIds.SIDE_ICONS_ID[i] != -1) {
|
|
sideIcons[GameFrameIds.SIDE_ICONS_ID[i]].drawSprite(x[i] + xOffset, y[i] + yOffset);
|
|
}
|
|
}
|
|
}
|
|
} else if (changeTabArea && frameWidth < 1000) {
|
|
int[] iconId = {0, 1, 2, 3, 4, 5, 6, -1, 8, 9, 7, 11, 12, 13};
|
|
int[] iconX = {219, 189, 156, 126, 93, 62, 30, 219, 189, 156, 124, 92, 59, 28};
|
|
int[] iconY = {67, 69, 67, 69, 72, 72, 69, 32, 29, 29, 32, 30, 33, 31, 32};
|
|
for (int i = 0; i < GameFrameIds.SIDE_ICONS_ID.length; i++) {
|
|
if (tabInterfaceIDs[GameFrameIds.SIDE_ICONS_ID[i]] != -1) {
|
|
if (iconId[i] != -1) {
|
|
sideIcons[iconId[i]].drawSprite(frameWidth - iconX[i], frameHeight - iconY[i]);
|
|
}
|
|
}
|
|
}
|
|
} else if (changeTabArea && frameWidth >= 1000) {
|
|
int[] iconId = {0, 1, 2, 3, 4, 5, 6, -1, 8, 9, 7, 11, 12, 13};
|
|
int[] iconX = {50, 80, 114, 143, 176, 208, 240, 242, 273, 306, 338, 370, 404, 433};
|
|
int[] iconY = {30, 32, 30, 32, 34, 34, 32, 32, 29, 29, 32, 31, 32, 32, 32};
|
|
for (int i = 0; i < GameFrameIds.SIDE_ICONS_ID.length; i++) {
|
|
if (tabInterfaceIDs[GameFrameIds.SIDE_ICONS_ID[i]] != -1) {
|
|
if (iconId[i] != -1) {
|
|
sideIcons[iconId[i]].drawSprite(frameWidth - 461 + iconX[i], frameHeight - iconY[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void drawRedStones() {
|
|
|
|
int xOffset = frameMode == ScreenMode.FIXED ? 0 : frameWidth - 247;
|
|
int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 336;
|
|
int[] stones;
|
|
int[] x;
|
|
int[] y;
|
|
if(frameMode == ScreenMode.FIXED && !Configuration.OSRS_GAMEFRAME) {
|
|
stones = GameFrameIds.REDONE_STONES_IDS;
|
|
x = GameFrameIds.REDONE_STONES_X;
|
|
y = GameFrameIds.REDONE_STONES_Y;
|
|
} else {
|
|
stones = GameFrameIds.OSRS_STONES_IDS;
|
|
x = GameFrameIds.OSRS_STONES_X;
|
|
y = GameFrameIds.OSRS_STONES_Y;
|
|
}
|
|
if (frameMode == ScreenMode.FIXED || frameMode != ScreenMode.FIXED && !changeTabArea) {
|
|
if (tabInterfaceIDs[tabId] != -1 && tabId != 15) {
|
|
SpriteCache.lookup(stones[tabId]).drawSprite(x[tabId] + xOffset,
|
|
y[tabId] + yOffset);
|
|
}
|
|
} else if (changeTabArea && frameWidth < 1000) {
|
|
int[] stoneX = {226, 194, 162, 130, 99, 65, 34, 219, 195, 161, 130, 98, 65, 33};
|
|
int[] stoneY = {73, 73, 73, 73, 73, 73, 73, -1, 37, 37, 37, 37, 37, 37, 37};
|
|
if (tabInterfaceIDs[tabId] != -1 && tabId != 10 && showTabComponents) {
|
|
if (tabId == 7) {
|
|
SpriteCache.lookup(39).drawSprite(frameWidth - 130, frameHeight - 37);
|
|
}
|
|
SpriteCache.lookup(39).drawSprite(frameWidth - stoneX[tabId], frameHeight - stoneY[tabId]);
|
|
}
|
|
} else if (changeTabArea && frameWidth >= 1000) {
|
|
int[] stoneX = {417, 385, 353, 321, 289, 256, 224, 129, 193, 161, 130, 98, 65, 33};
|
|
if (tabInterfaceIDs[tabId] != -1 && tabId != 10 && showTabComponents) {
|
|
SpriteCache.lookup(39).drawSprite(frameWidth - stoneX[tabId], frameHeight - 37);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void drawTabArea() {
|
|
final int xOffset = frameMode == ScreenMode.FIXED ? 0 : frameWidth - 241;
|
|
final int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 336;
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
tabImageProducer.initDrawingArea();
|
|
}
|
|
Rasterizer3D.scanOffsets = anIntArray1181;
|
|
final int fixedInventory;
|
|
if(Configuration.OSRS_GAMEFRAME) {
|
|
fixedInventory = GameFrameIds.OSRS_INVENTORY;
|
|
} else {
|
|
fixedInventory = GameFrameIds.REDONE_INVENTORY;
|
|
}
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
SpriteCache.lookup(fixedInventory).drawSprite(0, 0);
|
|
} else if (frameMode != ScreenMode.FIXED && !changeTabArea) {
|
|
Rasterizer2D.drawTransparentBox(frameWidth - 217, frameHeight - 304, 195, 270, 0x3E3529,
|
|
transparentTabArea ? 80 : 256);
|
|
SpriteCache.lookup(GameFrameIds.OSRS_INVENTORY_2).drawSprite(xOffset, yOffset);
|
|
} else {
|
|
if (frameWidth >= 1000) {
|
|
if (showTabComponents) {
|
|
Rasterizer2D.drawTransparentBox(frameWidth - 197, frameHeight - 304, 197, 265, 0x3E3529,
|
|
transparentTabArea ? 80 : 256);
|
|
SpriteCache.lookup(50).drawSprite(frameWidth - 204, frameHeight - 311);
|
|
}
|
|
for (int x = frameWidth - 417, y = frameHeight - 37, index = 0; x <= frameWidth - 30
|
|
&& index < 13; x += 32, index++) {
|
|
SpriteCache.lookup(46).drawSprite(x, y);
|
|
}
|
|
} else if (frameWidth < 1000) {
|
|
if (showTabComponents) {
|
|
Rasterizer2D.drawTransparentBox(frameWidth - 197, frameHeight - 341, 195, 265, 0x3E3529,
|
|
transparentTabArea ? 80 : 256);
|
|
SpriteCache.lookup(50).drawSprite(frameWidth - 204, frameHeight - 348);
|
|
}
|
|
for (int x = frameWidth - 226, y = frameHeight - 73, index = 0; x <= frameWidth - 32
|
|
&& index < 7; x += 32, index++) {
|
|
SpriteCache.lookup(46).drawSprite(x, y);
|
|
}
|
|
for (int x = frameWidth - 226, y = frameHeight - 37, index = 0; x <= frameWidth - 32
|
|
&& index < 7; x += 32, index++) {
|
|
SpriteCache.lookup(46).drawSprite(x, y);
|
|
}
|
|
}
|
|
}
|
|
if (overlayInterfaceId == -1) {
|
|
drawRedStones();
|
|
drawSideIcons();
|
|
}
|
|
if (showTabComponents) {
|
|
int x = frameMode == ScreenMode.FIXED ? 31 : frameWidth - 215;
|
|
int y = frameMode == ScreenMode.FIXED ? 37 : frameHeight - 299;
|
|
if (changeTabArea) {
|
|
x = frameWidth - 197;
|
|
y = frameWidth >= 1000 ? frameHeight - 303 : frameHeight - 340;
|
|
}
|
|
try {
|
|
if (overlayInterfaceId != -1) {
|
|
drawInterface(0, x, Widget.interfaceCache[overlayInterfaceId], y);
|
|
} else if (tabInterfaceIDs[tabId] != -1) {
|
|
drawInterface(0, x, Widget.interfaceCache[tabInterfaceIDs[tabId]], y);
|
|
}
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
}
|
|
if (menuOpen) {
|
|
drawMenu(frameMode == ScreenMode.FIXED ? 516 : 0, frameMode == ScreenMode.FIXED ? 168 : 0);
|
|
}
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
tabImageProducer.drawGraphics(168, super.graphics, 516);
|
|
gameScreenImageProducer.initDrawingArea();
|
|
}
|
|
Rasterizer3D.scanOffsets = anIntArray1182;
|
|
}
|
|
|
|
private void writeBackgroundTexture(int j) {
|
|
if (!lowMemory) {
|
|
if (Rasterizer3D.textureLastUsed[17] >= j) {
|
|
IndexedImage background = Rasterizer3D.textures[17];
|
|
int k = background.width * background.height - 1;
|
|
int j1 = background.width * tickDelta * 2;
|
|
byte[] raster = background.palettePixels;
|
|
byte[] abyte3 = aByteArray912;
|
|
for (int i2 = 0; i2 <= k; i2++)
|
|
abyte3[i2] = raster[i2 - j1 & k];
|
|
|
|
background.palettePixels = abyte3;
|
|
aByteArray912 = raster;
|
|
Rasterizer3D.requestTextureUpdate(17);
|
|
anInt854++;
|
|
if (anInt854 > 1235) {
|
|
anInt854 = 0;
|
|
// TODO anticheat?
|
|
outgoing.writeOpcode(226);
|
|
outgoing.writeByte(0);
|
|
int l2 = outgoing.currentPosition;
|
|
outgoing.writeShort(58722);
|
|
outgoing.writeByte(240);
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
outgoing.writeByte((int) (Math.random() * 256D));
|
|
if ((int) (Math.random() * 2D) == 0)
|
|
outgoing.writeShort(51825);
|
|
outgoing.writeByte((int) (Math.random() * 256D));
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
outgoing.writeShort(7130);
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
outgoing.writeShort(61657);
|
|
outgoing.writeBytes(outgoing.currentPosition - l2);
|
|
}
|
|
}
|
|
if (Rasterizer3D.textureLastUsed[24] >= j) {
|
|
IndexedImage background_1 = Rasterizer3D.textures[24];
|
|
int l = background_1.width * background_1.height - 1;
|
|
int k1 = background_1.width * tickDelta * 2;
|
|
byte[] abyte1 = background_1.palettePixels;
|
|
byte[] abyte4 = aByteArray912;
|
|
for (int j2 = 0; j2 <= l; j2++)
|
|
abyte4[j2] = abyte1[j2 - k1 & l];
|
|
|
|
background_1.palettePixels = abyte4;
|
|
aByteArray912 = abyte1;
|
|
Rasterizer3D.requestTextureUpdate(24);
|
|
}
|
|
if (Rasterizer3D.textureLastUsed[34] >= j) {
|
|
IndexedImage background_2 = Rasterizer3D.textures[34];
|
|
int i1 = background_2.width * background_2.height - 1;
|
|
int l1 = background_2.width * tickDelta * 2;
|
|
byte[] abyte2 = background_2.palettePixels;
|
|
byte[] abyte5 = aByteArray912;
|
|
for (int k2 = 0; k2 <= i1; k2++)
|
|
abyte5[k2] = abyte2[k2 - l1 & i1];
|
|
|
|
background_2.palettePixels = abyte5;
|
|
aByteArray912 = abyte2;
|
|
Rasterizer3D.requestTextureUpdate(34);
|
|
}
|
|
if (Rasterizer3D.textureLastUsed[40] >= j) {
|
|
IndexedImage background_2 = Rasterizer3D.textures[40];
|
|
int i1 = background_2.width * background_2.height - 1;
|
|
int l1 = background_2.width * tickDelta * 2;
|
|
byte[] abyte2 = background_2.palettePixels;
|
|
byte[] abyte5 = aByteArray912;
|
|
for (int k2 = 0; k2 <= i1; k2++)
|
|
abyte5[k2] = abyte2[k2 - l1 & i1];
|
|
|
|
background_2.palettePixels = abyte5;
|
|
aByteArray912 = abyte2;
|
|
Rasterizer3D.requestTextureUpdate(40);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void processMobChatText() {
|
|
for (int i = -1; i < playerCount; i++) {
|
|
int j;
|
|
if (i == -1)
|
|
j = internalLocalPlayerIndex;
|
|
else
|
|
j = playerList[i];
|
|
Player player = players[j];
|
|
if (player != null && player.textCycle > 0) {
|
|
player.textCycle--;
|
|
if (player.textCycle == 0)
|
|
player.spokenText = null;
|
|
}
|
|
}
|
|
for (int k = 0; k < npcCount; k++) {
|
|
int l = npcIndices[k];
|
|
Npc npc = npcs[l];
|
|
if (npc != null && npc.textCycle > 0) {
|
|
npc.textCycle--;
|
|
if (npc.textCycle == 0)
|
|
npc.spokenText = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void calculateCameraPosition() {
|
|
int i = x * 128 + 64;
|
|
int j = y * 128 + 64;
|
|
int k = getCenterHeight(plane, j, i) - height;
|
|
if (xCameraPos < i) {
|
|
xCameraPos += speed + ((i - xCameraPos) * angle) / 1000;
|
|
if (xCameraPos > i)
|
|
xCameraPos = i;
|
|
}
|
|
if (xCameraPos > i) {
|
|
xCameraPos -= speed + ((xCameraPos - i) * angle) / 1000;
|
|
if (xCameraPos < i)
|
|
xCameraPos = i;
|
|
}
|
|
if (zCameraPos < k) {
|
|
zCameraPos += speed + ((k - zCameraPos) * angle) / 1000;
|
|
if (zCameraPos > k)
|
|
zCameraPos = k;
|
|
}
|
|
if (zCameraPos > k) {
|
|
zCameraPos -= speed + ((zCameraPos - k) * angle) / 1000;
|
|
if (zCameraPos < k)
|
|
zCameraPos = k;
|
|
}
|
|
if (yCameraPos < j) {
|
|
yCameraPos += speed + ((j - yCameraPos) * angle) / 1000;
|
|
if (yCameraPos > j)
|
|
yCameraPos = j;
|
|
}
|
|
if (yCameraPos > j) {
|
|
yCameraPos -= speed + ((yCameraPos - j) * angle) / 1000;
|
|
if (yCameraPos < j)
|
|
yCameraPos = j;
|
|
}
|
|
i = cinematicCamXViewpointLoc * 128 + 64;
|
|
j = cinematicCamYViewpointLoc * 128 + 64;
|
|
k = getCenterHeight(plane, j, i) - cinematicCamZViewpointLoc;
|
|
int l = i - xCameraPos;
|
|
int i1 = k - zCameraPos;
|
|
int j1 = j - yCameraPos;
|
|
int k1 = (int) Math.sqrt(l * l + j1 * j1);
|
|
int l1 = (int) (Math.atan2(i1, k1) * 325.94900000000001D) & 0x7ff;
|
|
int i2 = (int) (Math.atan2(l, j1) * -325.94900000000001D) & 0x7ff;
|
|
if (l1 < 128)
|
|
l1 = 128;
|
|
if (l1 > 383)
|
|
l1 = 383;
|
|
if (yCameraCurve < l1) {
|
|
yCameraCurve += constCinematicCamRotationSpeed
|
|
+ ((l1 - yCameraCurve) * varCinematicCamRotationSpeedPromille) / 1000;
|
|
if (yCameraCurve > l1)
|
|
yCameraCurve = l1;
|
|
}
|
|
if (yCameraCurve > l1) {
|
|
yCameraCurve -= constCinematicCamRotationSpeed
|
|
+ ((yCameraCurve - l1) * varCinematicCamRotationSpeedPromille) / 1000;
|
|
if (yCameraCurve < l1)
|
|
yCameraCurve = l1;
|
|
}
|
|
int j2 = i2 - xCameraCurve;
|
|
if (j2 > 1024)
|
|
j2 -= 2048;
|
|
if (j2 < -1024)
|
|
j2 += 2048;
|
|
if (j2 > 0) {
|
|
xCameraCurve += constCinematicCamRotationSpeed + (j2 * varCinematicCamRotationSpeedPromille) / 1000;
|
|
xCameraCurve &= 0x7ff;
|
|
}
|
|
if (j2 < 0) {
|
|
xCameraCurve -= constCinematicCamRotationSpeed + (-j2 * varCinematicCamRotationSpeedPromille) / 1000;
|
|
xCameraCurve &= 0x7ff;
|
|
}
|
|
int k2 = i2 - xCameraCurve;
|
|
if (k2 > 1024)
|
|
k2 -= 2048;
|
|
if (k2 < -1024)
|
|
k2 += 2048;
|
|
if (k2 < 0 && j2 > 0 || k2 > 0 && j2 < 0)
|
|
xCameraCurve = i2;
|
|
}
|
|
|
|
public void drawMenu(int x, int y) {
|
|
int xPos = menuOffsetX - (x - 4);
|
|
int yPos = (-y + 4) + menuOffsetY;
|
|
int w = menuWidth;
|
|
int h = menuHeight + 1;
|
|
updateChatbox = true;
|
|
tabAreaAltered = true;
|
|
int menuColor = 0x5d5447;
|
|
Rasterizer2D.drawBox(xPos, yPos, w, h, menuColor);
|
|
Rasterizer2D.drawBox(xPos + 1, yPos + 1, w - 2, 16, 0);
|
|
Rasterizer2D.drawBoxOutline(xPos + 1, yPos + 18, w - 2, h - 19, 0);
|
|
boldText.render(menuColor, "Choose Option", yPos + 14, xPos + 3);
|
|
int mouseX = super.mouseX - (x);
|
|
int mouseY = (-y) + super.mouseY;
|
|
for (int i = 0; i < menuActionRow; i++) {
|
|
int textY = yPos + 31 + (menuActionRow - 1 - i) * 15;
|
|
int textColor = 0xffffff;
|
|
if (mouseX > xPos && mouseX < xPos + w && mouseY > textY - 13 && mouseY < textY + 3) {
|
|
Rasterizer2D.drawBox(xPos + 3, textY - 11, menuWidth - 6, 15, 0x6f695d);
|
|
textColor = 0xffff00;
|
|
}
|
|
boldText.drawTextWithPotentialShadow(true, xPos + 3, textColor, menuActionText[i], textY);
|
|
}
|
|
}
|
|
|
|
private void addFriend(long nameHash) {
|
|
try {
|
|
if (nameHash == 0L)
|
|
return;
|
|
if (friendsCount >= 100 && member != 1) {
|
|
sendMessage("Your friendlist is full. Max of 100 for free users, and 200 for members", 0, "");
|
|
return;
|
|
}
|
|
if (friendsCount >= 200) {
|
|
sendMessage("Your friendlist is full. Max of 100 for free users, and 200 for members", 0, "");
|
|
return;
|
|
}
|
|
String s = StringUtils.formatUsername(StringUtils.decodeBase37(nameHash));
|
|
for (int i = 0; i < friendsCount; i++)
|
|
if (friendsListAsLongs[i] == nameHash) {
|
|
sendMessage(s + " is already on your friend list", 0, "");
|
|
return;
|
|
}
|
|
for (int j = 0; j < ignoreCount; j++)
|
|
if (ignoreListAsLongs[j] == nameHash) {
|
|
sendMessage("Please remove " + s + " from your ignore list first", 0, "");
|
|
return;
|
|
}
|
|
|
|
if (s.equals(localPlayer.name)) {
|
|
return;
|
|
} else {
|
|
friendsList[friendsCount] = s;
|
|
friendsListAsLongs[friendsCount] = nameHash;
|
|
friendsNodeIDs[friendsCount] = 0;
|
|
friendsCount++;
|
|
outgoing.writeOpcode(PacketConstants.ADD_FRIEND);
|
|
outgoing.writeLong(nameHash);
|
|
return;
|
|
}
|
|
} catch (RuntimeException runtimeexception) {
|
|
SignLink.reporterror("15283, " + (byte) 68 + ", " + nameHash + ", " + runtimeexception.toString());
|
|
}
|
|
throw new RuntimeException();
|
|
}
|
|
|
|
private int getCenterHeight(int z, int y, int x) {
|
|
int worldX = x >> 7;
|
|
int worldY = y >> 7;
|
|
if (worldX < 0 || worldY < 0 || worldX > 103 || worldY > 103)
|
|
return 0;
|
|
int plane = z;
|
|
if (plane < 3 && (tileFlags[1][worldX][worldY] & 2) == 2)
|
|
plane++;
|
|
int sizeX = x & 0x7f;
|
|
int sizeY = y & 0x7f;
|
|
int i2 = tileHeights[plane][worldX][worldY] * (128 - sizeX)
|
|
+ tileHeights[plane][worldX + 1][worldY] * sizeX >> 7;
|
|
int j2 = tileHeights[plane][worldX][worldY + 1] * (128 - sizeX)
|
|
+ tileHeights[plane][worldX + 1][worldY + 1] * sizeX >> 7;
|
|
return i2 * (128 - sizeY) + j2 * sizeY >> 7;
|
|
}
|
|
|
|
private void resetLogout() {
|
|
try {
|
|
if (socketStream != null)
|
|
socketStream.close();
|
|
} catch (Exception _ex) {
|
|
}
|
|
socketStream = null;
|
|
loggedIn = false;
|
|
loginScreenState = 0;
|
|
myUsername = "packet";
|
|
myPassword = "";
|
|
unlinkCaches();
|
|
scene.initToNull();
|
|
for (int i = 0; i < 4; i++)
|
|
collisionMaps[i].initialize();
|
|
Arrays.fill(chatMessages, null);
|
|
System.gc();
|
|
stopMidi();
|
|
currentSong = -1;
|
|
nextSong = -1;
|
|
prevSong = 0;
|
|
frameMode(ScreenMode.FIXED);
|
|
}
|
|
|
|
private void changeCharacterGender() {
|
|
aBoolean1031 = true;
|
|
for (int j = 0; j < 7; j++) {
|
|
anIntArray1065[j] = -1;
|
|
for (int k = 0; k < IdentityKit.length; k++) {
|
|
if (IdentityKit.kits[k].validStyle || IdentityKit.kits[k].bodyPartId != j + (maleCharacter ? 0 : 7))
|
|
continue;
|
|
anIntArray1065[j] = k;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void updateNPCMovement(int i, Buffer stream) {
|
|
while (stream.bitPosition + 21 < i * 8) {
|
|
int k = stream.readBits(14);
|
|
if (k == 16383)
|
|
break;
|
|
if (npcs[k] == null)
|
|
npcs[k] = new Npc();
|
|
Npc npc = npcs[k];
|
|
npcIndices[npcCount++] = k;
|
|
npc.time = tick;
|
|
int l = stream.readBits(5);
|
|
if (l > 15)
|
|
l -= 32;
|
|
int i1 = stream.readBits(5);
|
|
if (i1 > 15)
|
|
i1 -= 32;
|
|
int j1 = stream.readBits(1);
|
|
npc.desc = NpcDefinition.lookup(stream.readBits(Configuration.npcBits));
|
|
int k1 = stream.readBits(1);
|
|
if (k1 == 1)
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = k;
|
|
npc.size = npc.desc.size;
|
|
npc.degreesToTurn = npc.desc.degreesToTurn;
|
|
npc.walkAnimIndex = npc.desc.walkAnim;
|
|
npc.turn180AnimIndex = npc.desc.turn180AnimIndex;
|
|
npc.turn90CWAnimIndex = npc.desc.turn90CWAnimIndex;
|
|
npc.turn90CCWAnimIndex = npc.desc.turn90CCWAnimIndex;
|
|
npc.idleAnimation = npc.desc.standAnim;
|
|
npc.setPos(localPlayer.pathX[0] + i1, localPlayer.pathY[0] + l, j1 == 1);
|
|
}
|
|
stream.disableBitAccess();
|
|
}
|
|
|
|
public void processGameLoop() {
|
|
if (rsAlreadyLoaded || loadingError || genericLoadingError)
|
|
return;
|
|
tick++;
|
|
if (!loggedIn) {
|
|
processLoginScreenInput();
|
|
} else {
|
|
mainGameProcessor();
|
|
}
|
|
processOnDemandQueue();
|
|
}
|
|
|
|
private void showOtherPlayers(boolean flag) {
|
|
if (localPlayer.x >> 7 == destinationX && localPlayer.y >> 7 == destY)
|
|
destinationX = 0;
|
|
int j = playerCount;
|
|
if (flag)
|
|
j = 1;
|
|
for (int l = 0; l < j; l++) {
|
|
Player player;
|
|
int i1;
|
|
if (flag) {
|
|
player = localPlayer;
|
|
i1 = internalLocalPlayerIndex << 14;
|
|
} else {
|
|
player = players[playerList[l]];
|
|
i1 = playerList[l] << 14;
|
|
}
|
|
if (player == null || !player.isVisible())
|
|
continue;
|
|
player.aBoolean1699 = (lowMemory && playerCount > 50 || playerCount > 200) && !flag
|
|
&& player.movementAnimation == player.idleAnimation;
|
|
int j1 = player.x >> 7;
|
|
int k1 = player.y >> 7;
|
|
if (j1 < 0 || j1 >= 104 || k1 < 0 || k1 >= 104)
|
|
continue;
|
|
if (player.playerModel != null && tick >= player.objectModelStart && tick < player.objectModelStop) {
|
|
player.aBoolean1699 = false;
|
|
player.anInt1709 = getCenterHeight(plane, player.y, player.x);
|
|
scene.addToScenePlayerAsObject(plane, player.y, player, player.orientation,
|
|
player.objectAnInt1722GreaterYLoc, player.x, player.anInt1709, player.objectAnInt1719LesserXLoc,
|
|
player.objectAnInt1721GreaterXLoc, i1, player.objectAnInt1720LesserYLoc);
|
|
continue;
|
|
}
|
|
if ((player.x & 0x7f) == 64 && (player.y & 0x7f) == 64) {
|
|
if (anIntArrayArray929[j1][k1] == anInt1265)
|
|
continue;
|
|
anIntArrayArray929[j1][k1] = anInt1265;
|
|
}
|
|
player.anInt1709 = getCenterHeight(plane, player.y, player.x);
|
|
scene.addAnimableA(plane, player.orientation, player.anInt1709, i1, player.y, 60, player.x, player,
|
|
player.animationStretches);
|
|
}
|
|
}
|
|
|
|
private boolean promptUserForInput(Widget widget) {
|
|
int contentType = widget.contentType;
|
|
if (friendServerStatus == 2) {
|
|
if (contentType == 201) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 1;
|
|
aString1121 = "Enter name of friend to add to list";
|
|
}
|
|
if (contentType == 202) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 2;
|
|
aString1121 = "Enter name of friend to delete from list";
|
|
}
|
|
}
|
|
if (contentType == 205) {
|
|
anInt1011 = 250;
|
|
return true;
|
|
}
|
|
if (contentType == 501) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 4;
|
|
aString1121 = "Enter name of player to add to list";
|
|
}
|
|
if (contentType == 502) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 5;
|
|
aString1121 = "Enter name of player to delete from list";
|
|
}
|
|
if (contentType == 550) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 6;
|
|
aString1121 = "Enter the name of the chat you wish to join";
|
|
}
|
|
if (contentType >= 300 && contentType <= 313) {
|
|
int k = (contentType - 300) / 2;
|
|
int j1 = contentType & 1;
|
|
int i2 = anIntArray1065[k];
|
|
if (i2 != -1) {
|
|
do {
|
|
if (j1 == 0 && --i2 < 0)
|
|
i2 = IdentityKit.length - 1;
|
|
if (j1 == 1 && ++i2 >= IdentityKit.length)
|
|
i2 = 0;
|
|
} while (IdentityKit.kits[i2].validStyle || IdentityKit.kits[i2].bodyPartId != k + (maleCharacter ? 0 : 7));
|
|
anIntArray1065[k] = i2;
|
|
aBoolean1031 = true;
|
|
}
|
|
}
|
|
if (contentType >= 314 && contentType <= 323) {
|
|
int l = (contentType - 314) / 2;
|
|
int k1 = contentType & 1;
|
|
int j2 = characterDesignColours[l];
|
|
if (k1 == 0 && --j2 < 0)
|
|
j2 = PLAYER_BODY_RECOLOURS[l].length - 1;
|
|
if (k1 == 1 && ++j2 >= PLAYER_BODY_RECOLOURS[l].length)
|
|
j2 = 0;
|
|
characterDesignColours[l] = j2;
|
|
aBoolean1031 = true;
|
|
}
|
|
if (contentType == 324 && !maleCharacter) {
|
|
maleCharacter = true;
|
|
changeCharacterGender();
|
|
}
|
|
if (contentType == 325 && maleCharacter) {
|
|
maleCharacter = false;
|
|
changeCharacterGender();
|
|
}
|
|
if (contentType == 326) {
|
|
outgoing.writeOpcode(PacketConstants.DESIGN_SCREEN);
|
|
outgoing.writeByte(maleCharacter ? 0 : 1);
|
|
for (int i1 = 0; i1 < 7; i1++)
|
|
outgoing.writeByte(anIntArray1065[i1]);
|
|
|
|
for (int l1 = 0; l1 < 5; l1++)
|
|
outgoing.writeByte(characterDesignColours[l1]);
|
|
|
|
return true;
|
|
}
|
|
|
|
if (contentType == 613) {
|
|
canMute = !canMute;
|
|
}
|
|
|
|
if (contentType >= 601 && contentType <= 612) {
|
|
clearTopInterfaces();
|
|
if (reportAbuseInput.length() > 0) {
|
|
outgoing.writeOpcode(PacketConstants.REPORT_PLAYER);
|
|
outgoing.writeLong(StringUtils.encodeBase37(reportAbuseInput));
|
|
outgoing.writeByte(contentType - 601);
|
|
outgoing.writeByte(canMute ? 1 : 0);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void parsePlayerSynchronizationMask(Buffer stream) {
|
|
for (int count = 0; count < mobsAwaitingUpdateCount; count++) {
|
|
int index = mobsAwaitingUpdate[count];
|
|
Player player = players[index];
|
|
|
|
int mask = stream.readUnsignedByte();
|
|
|
|
if ((mask & 0x40) != 0) {
|
|
mask += stream.readUnsignedByte() << 8;
|
|
}
|
|
|
|
appendPlayerUpdateMask(mask, index, stream, player);
|
|
}
|
|
}
|
|
|
|
private void drawMapScenes(int i, int k, int l, int i1, int j1) {
|
|
int k1 = scene.getWallObjectUid(j1, l, i);
|
|
if (k1 != 0) {
|
|
int l1 = scene.getMask(j1, l, i, k1);
|
|
int k2 = l1 >> 6 & 3;
|
|
int i3 = l1 & 0x1f;
|
|
int k3 = k;
|
|
if (k1 > 0)
|
|
k3 = i1;
|
|
int[] ai = minimapImage.getMyPixels();
|
|
int k4 = 24624 + l * 4 + (103 - i) * 512 * 4;
|
|
int i5 = k1 >> 14 & 0x7fff;
|
|
ObjectDefinition def = ObjectDefinition.lookup(i5);
|
|
if (def.mapscene != -1) {
|
|
IndexedImage background_2 = mapScenes[def.mapscene];
|
|
if (background_2 != null) {
|
|
int i6 = (def.objectSizeX * 4 - background_2.width) / 2;
|
|
int j6 = (def.objectSizeY * 4 - background_2.height) / 2;
|
|
background_2.draw(48 + l * 4 + i6, 48 + (104 - i - def.objectSizeY) * 4 + j6);
|
|
}
|
|
} else {
|
|
if (i3 == 0 || i3 == 2)
|
|
if (k2 == 0) {
|
|
ai[k4] = k3;
|
|
ai[k4 + 512] = k3;
|
|
ai[k4 + 1024] = k3;
|
|
ai[k4 + 1536] = k3;
|
|
} else if (k2 == 1) {
|
|
ai[k4] = k3;
|
|
ai[k4 + 1] = k3;
|
|
ai[k4 + 2] = k3;
|
|
ai[k4 + 3] = k3;
|
|
} else if (k2 == 2) {
|
|
ai[k4 + 3] = k3;
|
|
ai[k4 + 3 + 512] = k3;
|
|
ai[k4 + 3 + 1024] = k3;
|
|
ai[k4 + 3 + 1536] = k3;
|
|
} else if (k2 == 3) {
|
|
ai[k4 + 1536] = k3;
|
|
ai[k4 + 1536 + 1] = k3;
|
|
ai[k4 + 1536 + 2] = k3;
|
|
ai[k4 + 1536 + 3] = k3;
|
|
}
|
|
if (i3 == 3)
|
|
if (k2 == 0)
|
|
ai[k4] = k3;
|
|
else if (k2 == 1)
|
|
ai[k4 + 3] = k3;
|
|
else if (k2 == 2)
|
|
ai[k4 + 3 + 1536] = k3;
|
|
else if (k2 == 3)
|
|
ai[k4 + 1536] = k3;
|
|
if (i3 == 2)
|
|
if (k2 == 3) {
|
|
ai[k4] = k3;
|
|
ai[k4 + 512] = k3;
|
|
ai[k4 + 1024] = k3;
|
|
ai[k4 + 1536] = k3;
|
|
} else if (k2 == 0) {
|
|
ai[k4] = k3;
|
|
ai[k4 + 1] = k3;
|
|
ai[k4 + 2] = k3;
|
|
ai[k4 + 3] = k3;
|
|
} else if (k2 == 1) {
|
|
ai[k4 + 3] = k3;
|
|
ai[k4 + 3 + 512] = k3;
|
|
ai[k4 + 3 + 1024] = k3;
|
|
ai[k4 + 3 + 1536] = k3;
|
|
} else if (k2 == 2) {
|
|
ai[k4 + 1536] = k3;
|
|
ai[k4 + 1536 + 1] = k3;
|
|
ai[k4 + 1536 + 2] = k3;
|
|
ai[k4 + 1536 + 3] = k3;
|
|
}
|
|
}
|
|
}
|
|
k1 = scene.getGameObjectUid(j1, l, i);
|
|
if (k1 != 0) {
|
|
int i2 = scene.getMask(j1, l, i, k1);
|
|
int l2 = i2 >> 6 & 3;
|
|
int j3 = i2 & 0x1f;
|
|
int l3 = k1 >> 14 & 0x7fff;
|
|
ObjectDefinition class46_1 = ObjectDefinition.lookup(l3);
|
|
if (class46_1.mapscene != -1) {
|
|
IndexedImage background_1 = mapScenes[class46_1.mapscene];
|
|
if (background_1 != null) {
|
|
int j5 = (class46_1.objectSizeX * 4 - background_1.width) / 2;
|
|
int k5 = (class46_1.objectSizeY * 4 - background_1.height) / 2;
|
|
background_1.draw(48 + l * 4 + j5, 48 + (104 - i - class46_1.objectSizeY) * 4 + k5);
|
|
}
|
|
} else if (j3 == 9) {
|
|
int l4 = 0xeeeeee;
|
|
if (k1 > 0)
|
|
l4 = 0xee0000;
|
|
int[] ai1 = minimapImage.getMyPixels();
|
|
int l5 = 24624 + l * 4 + (103 - i) * 512 * 4;
|
|
if (l2 == 0 || l2 == 2) {
|
|
ai1[l5 + 1536] = l4;
|
|
ai1[l5 + 1024 + 1] = l4;
|
|
ai1[l5 + 512 + 2] = l4;
|
|
ai1[l5 + 3] = l4;
|
|
} else {
|
|
ai1[l5] = l4;
|
|
ai1[l5 + 512 + 1] = l4;
|
|
ai1[l5 + 1024 + 2] = l4;
|
|
ai1[l5 + 1536 + 3] = l4;
|
|
}
|
|
}
|
|
}
|
|
k1 = scene.getGroundDecorationUid(j1, l, i);
|
|
if (k1 != 0) {
|
|
int j2 = k1 >> 14 & 0x7fff;
|
|
ObjectDefinition class46 = ObjectDefinition.lookup(j2);
|
|
if (class46.mapscene != -1) {
|
|
IndexedImage background = mapScenes[class46.mapscene];
|
|
if (background != null) {
|
|
int i4 = (class46.objectSizeX * 4 - background.width) / 2;
|
|
int j4 = (class46.objectSizeY * 4 - background.height) / 2;
|
|
background.draw(48 + l * 4 + i4, 48 + (104 - i - class46.objectSizeY) * 4 + j4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void loadTitleScreen() {
|
|
titleBoxIndexedImage = new IndexedImage(titleArchive, "titlebox", 0);
|
|
titleButtonIndexedImage = new IndexedImage(titleArchive, "titlebutton", 0);
|
|
|
|
titleIndexedImages = new IndexedImage[12];
|
|
int icon = 0;
|
|
try {
|
|
icon = Integer.parseInt(getParameter("fl_icon"));
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
if (icon == 0) {
|
|
for (int index = 0; index < 12; index++) {
|
|
titleIndexedImages[index] = new IndexedImage(titleArchive, "runes", index);
|
|
}
|
|
|
|
} else {
|
|
for (int index = 0; index < 12; index++) {
|
|
titleIndexedImages[index] = new IndexedImage(titleArchive, "runes", 12 + (index & 3));
|
|
}
|
|
|
|
}
|
|
flameLeftSprite = new Sprite(128, 265);
|
|
flameRightSprite = new Sprite(128, 265);
|
|
|
|
System.arraycopy(flameLeftBackground.canvasRaster, 0, flameLeftSprite.getMyPixels(), 0, 33920);
|
|
|
|
System.arraycopy(flameRightBackground.canvasRaster, 0, flameRightSprite.getMyPixels(), 0, 33920);
|
|
|
|
anIntArray851 = new int[256];
|
|
|
|
for (int k1 = 0; k1 < 64; k1++)
|
|
anIntArray851[k1] = k1 * 0x40000;
|
|
|
|
for (int l1 = 0; l1 < 64; l1++)
|
|
anIntArray851[l1 + 64] = 0xff0000 + 1024 * l1;
|
|
|
|
for (int i2 = 0; i2 < 64; i2++)
|
|
anIntArray851[i2 + 128] = 0xffff00 + 4 * i2;
|
|
|
|
for (int j2 = 0; j2 < 64; j2++)
|
|
anIntArray851[j2 + 192] = 0xffffff;
|
|
|
|
anIntArray852 = new int[256];
|
|
for (int k2 = 0; k2 < 64; k2++)
|
|
anIntArray852[k2] = k2 * 1024;
|
|
|
|
for (int l2 = 0; l2 < 64; l2++)
|
|
anIntArray852[l2 + 64] = 65280 + 4 * l2;
|
|
|
|
for (int i3 = 0; i3 < 64; i3++)
|
|
anIntArray852[i3 + 128] = 65535 + 0x40000 * i3;
|
|
|
|
for (int j3 = 0; j3 < 64; j3++)
|
|
anIntArray852[j3 + 192] = 0xffffff;
|
|
|
|
anIntArray853 = new int[256];
|
|
for (int k3 = 0; k3 < 64; k3++)
|
|
anIntArray853[k3] = k3 * 4;
|
|
|
|
for (int l3 = 0; l3 < 64; l3++)
|
|
anIntArray853[l3 + 64] = 255 + 0x40000 * l3;
|
|
|
|
for (int i4 = 0; i4 < 64; i4++)
|
|
anIntArray853[i4 + 128] = 0xff00ff + 1024 * i4;
|
|
|
|
for (int j4 = 0; j4 < 64; j4++)
|
|
anIntArray853[j4 + 192] = 0xffffff;
|
|
|
|
anIntArray850 = new int[256];
|
|
anIntArray1190 = new int[32768];
|
|
anIntArray1191 = new int[32768];
|
|
randomizeBackground(null);
|
|
anIntArray828 = new int[32768];
|
|
anIntArray829 = new int[32768];
|
|
drawLoadingText(10, "Connecting to fileserver");
|
|
if (!aBoolean831) {
|
|
drawFlames = true;
|
|
aBoolean831 = true;
|
|
startRunnable(this, 2);
|
|
}
|
|
}
|
|
|
|
private void loadingStages() {
|
|
if (lowMemory && loadingStage == 2 && MapRegion.anInt131 != plane) {
|
|
gameScreenImageProducer.initDrawingArea();
|
|
drawLoadingMessages(1, "Loading - please wait.", null);
|
|
gameScreenImageProducer.drawGraphics(frameMode == ScreenMode.FIXED ? 4 : 0, super.graphics,
|
|
frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
loadingStage = 1;
|
|
loadingStartTime = System.currentTimeMillis();
|
|
}
|
|
if (loadingStage == 1) {
|
|
int j = method54();
|
|
if (j != 0 && System.currentTimeMillis() - loadingStartTime > 0x57e40L) {
|
|
SignLink.reporterror(myUsername + " glcfb " + serverSeed + "," + j + "," + lowMemory + "," + indices[0]
|
|
+ "," + resourceProvider.remaining() + "," + plane + "," + this.regionX + "," + this.regionY);
|
|
loadingStartTime = System.currentTimeMillis();
|
|
}
|
|
}
|
|
if (loadingStage == 2 && plane != anInt985) {
|
|
anInt985 = plane;
|
|
renderMapScene(plane);
|
|
}
|
|
}
|
|
|
|
private int method54() {
|
|
for (int i = 0; i < localRegionMapData.length; i++) {
|
|
if (localRegionMapData[i] == null && localRegionMapIds[i] != -1)
|
|
return -1;
|
|
if (localRegionLandscapeData[i] == null && localRegionLandscapeIds[i] != -1)
|
|
return -2;
|
|
}
|
|
boolean flag = true;
|
|
for (int j = 0; j < localRegionMapData.length; j++) {
|
|
byte[] abyte0 = localRegionLandscapeData[j];
|
|
if (abyte0 != null) {
|
|
int k = (localRegionIds[j] >> 8) * 64 - regionBaseX;
|
|
int l = (localRegionIds[j] & 0xff) * 64 - regionBaseY;
|
|
if (constructedViewport) {
|
|
k = 10;
|
|
l = 10;
|
|
}
|
|
flag &= MapRegion.method189(k, abyte0, l);
|
|
}
|
|
}
|
|
if (!flag)
|
|
return -3;
|
|
if (validLocalMap) {
|
|
return -4;
|
|
} else {
|
|
loadingStage = 2;
|
|
MapRegion.anInt131 = plane;
|
|
updateWorldObjects();
|
|
outgoing.writeOpcode(PacketConstants.LOADED_REGION);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
private void createProjectiles() {
|
|
for (Projectile class30_sub2_sub4_sub4 = (Projectile) projectiles
|
|
.reverseGetFirst(); class30_sub2_sub4_sub4 != null; class30_sub2_sub4_sub4 = (Projectile) projectiles
|
|
.reverseGetNext())
|
|
if (class30_sub2_sub4_sub4.projectileZ != plane || tick > class30_sub2_sub4_sub4.stopCycle)
|
|
class30_sub2_sub4_sub4.unlink();
|
|
else if (tick >= class30_sub2_sub4_sub4.startCycle) {
|
|
if (class30_sub2_sub4_sub4.target > 0) {
|
|
Npc npc = npcs[class30_sub2_sub4_sub4.target - 1];
|
|
if (npc != null && npc.x >= 0 && npc.x < 13312 && npc.y >= 0 && npc.y < 13312)
|
|
class30_sub2_sub4_sub4.calculateIncrements(tick, npc.y,
|
|
getCenterHeight(class30_sub2_sub4_sub4.projectileZ, npc.y, npc.x)
|
|
- class30_sub2_sub4_sub4.endHeight,
|
|
npc.x);
|
|
}
|
|
if (class30_sub2_sub4_sub4.target < 0) {
|
|
int j = -class30_sub2_sub4_sub4.target - 1;
|
|
Player player;
|
|
if (j == localPlayerIndex)
|
|
player = localPlayer;
|
|
else
|
|
player = players[j];
|
|
if (player != null && player.x >= 0 && player.x < 13312 && player.y >= 0 && player.y < 13312)
|
|
class30_sub2_sub4_sub4.calculateIncrements(tick, player.y,
|
|
getCenterHeight(class30_sub2_sub4_sub4.projectileZ, player.y, player.x)
|
|
- class30_sub2_sub4_sub4.endHeight,
|
|
player.x);
|
|
}
|
|
class30_sub2_sub4_sub4.progressCycles(tickDelta);
|
|
scene.addAnimableA(plane, class30_sub2_sub4_sub4.turnValue, (int) class30_sub2_sub4_sub4.cnterHeight,
|
|
-1, (int) class30_sub2_sub4_sub4.yPos, 60, (int) class30_sub2_sub4_sub4.xPos,
|
|
class30_sub2_sub4_sub4, false);
|
|
}
|
|
|
|
}
|
|
|
|
public AppletContext getAppletContext() {
|
|
if (SignLink.mainapp != null)
|
|
return SignLink.mainapp.getAppletContext();
|
|
else
|
|
return super.getAppletContext();
|
|
}
|
|
|
|
private void drawLogo() {
|
|
byte[] sprites = titleArchive.readFile("title.dat");
|
|
Sprite sprite = new Sprite(sprites, this);
|
|
flameLeftBackground.initDrawingArea();
|
|
sprite.method346(0, 0);
|
|
flameRightBackground.initDrawingArea();
|
|
sprite.method346(-637, 0);
|
|
topLeft1BackgroundTile.initDrawingArea();
|
|
sprite.method346(-128, 0);
|
|
bottomLeft1BackgroundTile.initDrawingArea();
|
|
sprite.method346(-202, -371);
|
|
loginBoxImageProducer.initDrawingArea();
|
|
sprite.method346(-202, -171);
|
|
loginScreenAccessories.initDrawingArea();
|
|
sprite.method346(0, -400);
|
|
bottomLeft0BackgroundTile.initDrawingArea();
|
|
sprite.method346(0, -265);
|
|
bottomRightImageProducer.initDrawingArea();
|
|
sprite.method346(-562, -265);
|
|
loginMusicImageProducer.initDrawingArea();
|
|
sprite.method346(-562, -265);
|
|
middleLeft1BackgroundTile.initDrawingArea();
|
|
sprite.method346(-128, -171);
|
|
aRSImageProducer_1115.initDrawingArea();
|
|
sprite.method346(-562, -171);
|
|
int[] ai = new int[sprite.getMyWidth()];
|
|
for (int j = 0; j < sprite.getMyHeight(); j++) {
|
|
for (int k = 0; k < sprite.getMyWidth(); k++)
|
|
ai[k] = sprite.getMyPixels()[(sprite.getMyWidth() - k - 1) + sprite.getMyWidth() * j];
|
|
|
|
System.arraycopy(ai, 0, sprite.getMyPixels(), sprite.getMyWidth() * j, sprite.getMyWidth());
|
|
}
|
|
flameLeftBackground.initDrawingArea();
|
|
sprite.method346(382, 0);
|
|
flameRightBackground.initDrawingArea();
|
|
sprite.method346(-255, 0);
|
|
topLeft1BackgroundTile.initDrawingArea();
|
|
sprite.method346(254, 0);
|
|
bottomLeft1BackgroundTile.initDrawingArea();
|
|
sprite.method346(180, -371);
|
|
loginBoxImageProducer.initDrawingArea();
|
|
sprite.method346(180, -171);
|
|
bottomLeft0BackgroundTile.initDrawingArea();
|
|
sprite.method346(382, -265);
|
|
bottomRightImageProducer.initDrawingArea();
|
|
sprite.method346(-180, -265);
|
|
loginMusicImageProducer.initDrawingArea();
|
|
sprite.method346(-180, -265);
|
|
middleLeft1BackgroundTile.initDrawingArea();
|
|
sprite.method346(254, -171);
|
|
aRSImageProducer_1115.initDrawingArea();
|
|
sprite.method346(-180, -171);
|
|
sprite = new Sprite(titleArchive, "logo", 0);
|
|
topLeft1BackgroundTile.initDrawingArea();
|
|
sprite.drawSprite(382 - sprite.getMyWidth() / 2 - 128, 18);
|
|
sprite = null;
|
|
System.gc();
|
|
}
|
|
|
|
private void processOnDemandQueue() {
|
|
do {
|
|
Resource resource;
|
|
do {
|
|
resource = resourceProvider.next();
|
|
if (resource == null)
|
|
return;
|
|
if (resource.dataType == 0) {
|
|
Model.method460(resource.buffer, resource.ID);
|
|
if (backDialogueId != -1)
|
|
updateChatbox = true;
|
|
}
|
|
if (resource.dataType == 1) {
|
|
Frame.load(resource.ID, resource.buffer);
|
|
}
|
|
if (resource.dataType == 2 && resource.ID == nextSong && resource.buffer != null)
|
|
saveMidi(fadeMusic, resource.buffer);
|
|
if (resource.dataType == 3 && loadingStage == 1) {
|
|
for (int i = 0; i < localRegionMapData.length; i++) {
|
|
if (localRegionMapIds[i] == resource.ID) {
|
|
localRegionMapData[i] = resource.buffer;
|
|
if (resource.buffer == null)
|
|
localRegionMapIds[i] = -1;
|
|
break;
|
|
}
|
|
if (localRegionLandscapeIds[i] != resource.ID)
|
|
continue;
|
|
localRegionLandscapeData[i] = resource.buffer;
|
|
if (resource.buffer == null)
|
|
localRegionLandscapeIds[i] = -1;
|
|
break;
|
|
}
|
|
|
|
}
|
|
} while (resource.dataType != 93 || !resourceProvider.landscapePresent(resource.ID));
|
|
MapRegion.passiveRequestGameObjectModels(new Buffer(resource.buffer), resourceProvider);
|
|
} while (true);
|
|
}
|
|
|
|
private void calcFlamesPosition() {
|
|
char c = '\u0100';
|
|
for (int j = 10; j < 117; j++) {
|
|
int k = (int) (Math.random() * 100D);
|
|
if (k < 50)
|
|
anIntArray828[j + (c - 2 << 7)] = 255;
|
|
}
|
|
for (int l = 0; l < 100; l++) {
|
|
int i1 = (int) (Math.random() * 124D) + 2;
|
|
int k1 = (int) (Math.random() * 128D) + 128;
|
|
int k2 = i1 + (k1 << 7);
|
|
anIntArray828[k2] = 192;
|
|
}
|
|
|
|
for (int j1 = 1; j1 < c - 1; j1++) {
|
|
for (int l1 = 1; l1 < 127; l1++) {
|
|
int l2 = l1 + (j1 << 7);
|
|
anIntArray829[l2] = (anIntArray828[l2 - 1] + anIntArray828[l2 + 1] + anIntArray828[l2 - 128]
|
|
+ anIntArray828[l2 + 128]) / 4;
|
|
}
|
|
|
|
}
|
|
|
|
anInt1275 += 128;
|
|
if (anInt1275 > anIntArray1190.length) {
|
|
anInt1275 -= anIntArray1190.length;
|
|
int i2 = (int) (Math.random() * 12D);
|
|
randomizeBackground(titleIndexedImages[i2]);
|
|
}
|
|
for (int j2 = 1; j2 < c - 1; j2++) {
|
|
for (int i3 = 1; i3 < 127; i3++) {
|
|
int k3 = i3 + (j2 << 7);
|
|
int i4 = anIntArray829[k3 + 128] - anIntArray1190[k3 + anInt1275 & anIntArray1190.length - 1] / 5;
|
|
if (i4 < 0)
|
|
i4 = 0;
|
|
anIntArray828[k3] = i4;
|
|
}
|
|
|
|
}
|
|
|
|
System.arraycopy(anIntArray969, 1, anIntArray969, 0, c - 1);
|
|
|
|
anIntArray969[c - 1] = (int) (Math.sin((double) tick / 14D) * 16D + Math.sin((double) tick / 15D) * 14D
|
|
+ Math.sin((double) tick / 16D) * 12D);
|
|
if (anInt1040 > 0)
|
|
anInt1040 -= 4;
|
|
if (anInt1041 > 0)
|
|
anInt1041 -= 4;
|
|
if (anInt1040 == 0 && anInt1041 == 0) {
|
|
int l3 = (int) (Math.random() * 2000D);
|
|
if (l3 == 0)
|
|
anInt1040 = 1024;
|
|
if (l3 == 1)
|
|
anInt1041 = 1024;
|
|
}
|
|
}
|
|
|
|
private void resetAnimation(int i) {
|
|
Widget class9 = Widget.interfaceCache[i];
|
|
for (int j = 0; j < class9.children.length; j++) {
|
|
if (class9.children[j] == -1)
|
|
break;
|
|
Widget class9_1 = Widget.interfaceCache[class9.children[j]];
|
|
if (class9_1.type == 1)
|
|
resetAnimation(class9_1.id);
|
|
class9_1.currentFrame = 0;
|
|
class9_1.lastFrameTime = 0;
|
|
}
|
|
}
|
|
|
|
private void drawHeadIcon() {
|
|
if (hintIconDrawType != 2)
|
|
return;
|
|
calcEntityScreenPos((hintIconX - regionBaseX << 7) + hintIconLocationArrowRelX, hintIconLocationArrowHeight * 2,
|
|
(hintIconY - regionBaseY << 7) + hintIconLocationArrowRelY);
|
|
if (spriteDrawX > -1 && tick % 20 < 10)
|
|
headIconsHint[0].drawSprite(spriteDrawX - 12, spriteDrawY - 28);
|
|
}
|
|
|
|
private void mainGameProcessor() {
|
|
refreshFrameSize();
|
|
if (systemUpdateTime > 1) {
|
|
systemUpdateTime--;
|
|
}
|
|
if (anInt1011 > 0) {
|
|
anInt1011--;
|
|
}
|
|
for (int j = 0; j < 5; j++) {
|
|
if (!readPacket()) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!loggedIn) {
|
|
return;
|
|
}
|
|
|
|
synchronized (mouseDetection.syncObject) {
|
|
if (flagged) {
|
|
if (super.clickMode3 != 0 || mouseDetection.coordsIndex >= 40) {
|
|
// botting
|
|
outgoing.writeOpcode(PacketConstants.FLAG_ACCOUNT);
|
|
outgoing.writeByte(0);
|
|
int j2 = outgoing.currentPosition;
|
|
int j3 = 0;
|
|
for (int j4 = 0; j4 < mouseDetection.coordsIndex; j4++) {
|
|
if (j2 - outgoing.currentPosition >= 240)
|
|
break;
|
|
j3++;
|
|
int l4 = mouseDetection.coordsY[j4];
|
|
if (l4 < 0)
|
|
l4 = 0;
|
|
else if (l4 > 502)
|
|
l4 = 502;
|
|
int k5 = mouseDetection.coordsX[j4];
|
|
if (k5 < 0)
|
|
k5 = 0;
|
|
else if (k5 > 764)
|
|
k5 = 764;
|
|
int i6 = l4 * 765 + k5;
|
|
if (mouseDetection.coordsY[j4] == -1 && mouseDetection.coordsX[j4] == -1) {
|
|
k5 = -1;
|
|
l4 = -1;
|
|
i6 = 0x7ffff;
|
|
}
|
|
if (k5 == anInt1237 && l4 == anInt1238) {
|
|
if (duplicateClickCount < 2047)
|
|
duplicateClickCount++;
|
|
} else {
|
|
int j6 = k5 - anInt1237;
|
|
anInt1237 = k5;
|
|
int k6 = l4 - anInt1238;
|
|
anInt1238 = l4;
|
|
if (duplicateClickCount < 8 && j6 >= -32 && j6 <= 31 && k6 >= -32 && k6 <= 31) {
|
|
j6 += 32;
|
|
k6 += 32;
|
|
outgoing.writeShort((duplicateClickCount << 12) + (j6 << 6) + k6);
|
|
duplicateClickCount = 0;
|
|
} else if (duplicateClickCount < 8) {
|
|
outgoing.writeTriByte(0x800000 + (duplicateClickCount << 19) + i6);
|
|
duplicateClickCount = 0;
|
|
} else {
|
|
outgoing.writeInt(0xc0000000 + (duplicateClickCount << 19) + i6);
|
|
duplicateClickCount = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
outgoing.writeBytes(outgoing.currentPosition - j2);
|
|
if (j3 >= mouseDetection.coordsIndex) {
|
|
mouseDetection.coordsIndex = 0;
|
|
} else {
|
|
mouseDetection.coordsIndex -= j3;
|
|
for (int i5 = 0; i5 < mouseDetection.coordsIndex; i5++) {
|
|
mouseDetection.coordsX[i5] = mouseDetection.coordsX[i5 + j3];
|
|
mouseDetection.coordsY[i5] = mouseDetection.coordsY[i5 + j3];
|
|
}
|
|
|
|
}
|
|
}
|
|
} else {
|
|
mouseDetection.coordsIndex = 0;
|
|
}
|
|
}
|
|
if (super.clickMode3 != 0) {
|
|
long l = (super.aLong29 - aLong1220) / 50L;
|
|
if (l > 4095L)
|
|
l = 4095L;
|
|
aLong1220 = super.aLong29;
|
|
int k2 = super.saveClickY;
|
|
if (k2 < 0)
|
|
k2 = 0;
|
|
else if (k2 > 502)
|
|
k2 = 502;
|
|
int k3 = super.saveClickX;
|
|
if (k3 < 0)
|
|
k3 = 0;
|
|
else if (k3 > 764)
|
|
k3 = 764;
|
|
int k4 = k2 * 765 + k3;
|
|
int j5 = 0;
|
|
if (super.clickMode3 == 2)
|
|
j5 = 1;
|
|
int l5 = (int) l;
|
|
outgoing.writeOpcode(PacketConstants.MOUSE_CLICK);
|
|
outgoing.writeInt((l5 << 20) + (j5 << 19) + k4);
|
|
}
|
|
|
|
if (anInt1016 > 0) {
|
|
anInt1016--;
|
|
}
|
|
|
|
if (super.keyArray[1] == 1 || super.keyArray[2] == 1 || super.keyArray[3] == 1 || super.keyArray[4] == 1)
|
|
aBoolean1017 = true;
|
|
if (aBoolean1017 && anInt1016 <= 0) {
|
|
anInt1016 = 20;
|
|
aBoolean1017 = false;
|
|
outgoing.writeOpcode(PacketConstants.CAMERA_MOVEMENT);
|
|
outgoing.writeShort(anInt1184);
|
|
outgoing.writeShortA(cameraHorizontal);
|
|
}
|
|
if (super.awtFocus && !aBoolean954) {
|
|
aBoolean954 = true;
|
|
outgoing.writeOpcode(PacketConstants.FOCUS_CHANGE);
|
|
outgoing.writeByte(1);
|
|
}
|
|
if (!super.awtFocus && aBoolean954) {
|
|
aBoolean954 = false;
|
|
outgoing.writeOpcode(PacketConstants.FOCUS_CHANGE);
|
|
outgoing.writeByte(0);
|
|
}
|
|
loadingStages();
|
|
method115();
|
|
timeoutCounter++;
|
|
if (timeoutCounter > 750)
|
|
dropClient();
|
|
processPlayerMovement();
|
|
processNpcMovement();
|
|
processTrackUpdates();
|
|
processMobChatText();
|
|
tickDelta++;
|
|
if (crossType != 0) {
|
|
crossIndex += 20;
|
|
if (crossIndex >= 400)
|
|
crossType = 0;
|
|
}
|
|
if (atInventoryInterfaceType != 0) {
|
|
atInventoryLoopCycle++;
|
|
if (atInventoryLoopCycle >= 15) {
|
|
if (atInventoryInterfaceType == 2) {
|
|
}
|
|
if (atInventoryInterfaceType == 3)
|
|
updateChatbox = true;
|
|
atInventoryInterfaceType = 0;
|
|
}
|
|
}
|
|
if (activeInterfaceType != 0) {
|
|
anInt989++;
|
|
if (super.mouseX > anInt1087 + 5 || super.mouseX < anInt1087 - 5 || super.mouseY > anInt1088 + 5
|
|
|| super.mouseY < anInt1088 - 5)
|
|
aBoolean1242 = true;
|
|
if (super.clickMode2 == 0) {
|
|
if (activeInterfaceType == 2) {
|
|
}
|
|
if (activeInterfaceType == 3)
|
|
updateChatbox = true;
|
|
activeInterfaceType = 0;
|
|
if (aBoolean1242 && anInt989 >= 15) {
|
|
lastActiveInvInterface = -1;
|
|
processRightClick();
|
|
if (lastActiveInvInterface == anInt1084 && mouseInvInterfaceIndex != anInt1085) {
|
|
Widget childInterface = Widget.interfaceCache[anInt1084];
|
|
int j1 = 0;
|
|
if (anInt913 == 1 && childInterface.contentType == 206)
|
|
j1 = 1;
|
|
if (childInterface.inventoryItemId[mouseInvInterfaceIndex] <= 0)
|
|
j1 = 0;
|
|
if (childInterface.replaceItems) {
|
|
int l2 = anInt1085;
|
|
int l3 = mouseInvInterfaceIndex;
|
|
childInterface.inventoryItemId[l3] = childInterface.inventoryItemId[l2];
|
|
childInterface.inventoryAmounts[l3] = childInterface.inventoryAmounts[l2];
|
|
childInterface.inventoryItemId[l2] = -1;
|
|
childInterface.inventoryAmounts[l2] = 0;
|
|
} else if (j1 == 1) {
|
|
int i3 = anInt1085;
|
|
for (int i4 = mouseInvInterfaceIndex; i3 != i4; )
|
|
if (i3 > i4) {
|
|
childInterface.swapInventoryItems(i3, i3 - 1);
|
|
i3--;
|
|
} else if (i3 < i4) {
|
|
childInterface.swapInventoryItems(i3, i3 + 1);
|
|
i3++;
|
|
}
|
|
|
|
} else {
|
|
childInterface.swapInventoryItems(anInt1085, mouseInvInterfaceIndex);
|
|
}
|
|
outgoing.writeOpcode(PacketConstants.MOVE_ITEM);
|
|
outgoing.writeLEShortA(anInt1084);
|
|
outgoing.writeNegatedByte(j1);
|
|
outgoing.writeLEShortA(anInt1085);
|
|
outgoing.writeLEShort(mouseInvInterfaceIndex);
|
|
}
|
|
} else if ((anInt1253 == 1 || menuHasAddFriend(menuActionRow - 1)) && menuActionRow > 2)
|
|
determineMenuSize();
|
|
else if (menuActionRow > 0)
|
|
processMenuActions(menuActionRow - 1);
|
|
atInventoryLoopCycle = 10;
|
|
super.clickMode3 = 0;
|
|
}
|
|
}
|
|
if (SceneGraph.clickedTileX != -1) {
|
|
int k = SceneGraph.clickedTileX;
|
|
int k1 = SceneGraph.clickedTileY;
|
|
boolean flag = doWalkTo(0, 0, 0, 0, localPlayer.pathY[0], 0, 0, k1, localPlayer.pathX[0], true, k);
|
|
SceneGraph.clickedTileX = -1;
|
|
if (flag) {
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 1;
|
|
crossIndex = 0;
|
|
}
|
|
}
|
|
if (super.clickMode3 == 1 && clickToContinueString != null) {
|
|
clickToContinueString = null;
|
|
updateChatbox = true;
|
|
super.clickMode3 = 0;
|
|
}
|
|
processMenuClick();
|
|
if (super.clickMode2 == 1 || super.clickMode3 == 1)
|
|
anInt1213++;
|
|
if (anInt1500 != 0 || anInt1044 != 0 || anInt1129 != 0) {
|
|
if (anInt1501 < 0 && !menuOpen) {
|
|
anInt1501++;
|
|
if (anInt1501 == 0) {
|
|
if (anInt1500 != 0) {
|
|
updateChatbox = true;
|
|
}
|
|
if (anInt1044 != 0) {
|
|
}
|
|
}
|
|
}
|
|
} else if (anInt1501 > 0) {
|
|
anInt1501--;
|
|
}
|
|
if (loadingStage == 2)
|
|
checkForGameUsages();
|
|
if (loadingStage == 2 && oriented)
|
|
calculateCameraPosition();
|
|
for (int i1 = 0; i1 < 5; i1++)
|
|
quakeTimes[i1]++;
|
|
|
|
manageTextInputs();
|
|
anInt1010++;
|
|
if (anInt1010 > 50)
|
|
outgoing.writeOpcode(PacketConstants.IDLE);
|
|
try {
|
|
if (socketStream != null && outgoing.currentPosition > 0) {
|
|
socketStream.queueBytes(outgoing.currentPosition, outgoing.payload);
|
|
outgoing.currentPosition = 0;
|
|
anInt1010 = 0;
|
|
}
|
|
} catch (IOException _ex) {
|
|
dropClient();
|
|
} catch (Exception exception) {
|
|
resetLogout();
|
|
}
|
|
}
|
|
|
|
private void method63() {
|
|
SpawnedObject spawnedObject = (SpawnedObject) spawns.reverseGetFirst();
|
|
for (; spawnedObject != null; spawnedObject = (SpawnedObject) spawns.reverseGetNext())
|
|
if (spawnedObject.getLongetivity == -1) {
|
|
spawnedObject.delay = 0;
|
|
method89(spawnedObject);
|
|
} else {
|
|
spawnedObject.unlink();
|
|
}
|
|
|
|
}
|
|
|
|
private void setupLoginScreen() {
|
|
if (topLeft1BackgroundTile != null)
|
|
return;
|
|
super.fullGameScreen = null;
|
|
chatboxImageProducer = null;
|
|
minimapImageProducer = null;
|
|
tabImageProducer = null;
|
|
gameScreenImageProducer = null;
|
|
chatSettingImageProducer = null;
|
|
flameLeftBackground = new ProducingGraphicsBuffer(128, 265);
|
|
Rasterizer2D.clear();
|
|
flameRightBackground = new ProducingGraphicsBuffer(128, 265);
|
|
Rasterizer2D.clear();
|
|
topLeft1BackgroundTile = new ProducingGraphicsBuffer(509, 171);
|
|
Rasterizer2D.clear();
|
|
bottomLeft1BackgroundTile = new ProducingGraphicsBuffer(360, 132);
|
|
Rasterizer2D.clear();
|
|
loginBoxImageProducer = new ProducingGraphicsBuffer(360, 200);
|
|
Rasterizer2D.clear();
|
|
loginScreenAccessories = new ProducingGraphicsBuffer(300, 800);
|
|
Rasterizer2D.clear();
|
|
bottomLeft0BackgroundTile = new ProducingGraphicsBuffer(202, 238);
|
|
Rasterizer2D.clear();
|
|
bottomRightImageProducer = new ProducingGraphicsBuffer(203, 238);
|
|
Rasterizer2D.clear();
|
|
loginMusicImageProducer = new ProducingGraphicsBuffer(203, 238);
|
|
Rasterizer2D.clear();
|
|
middleLeft1BackgroundTile = new ProducingGraphicsBuffer(74, 94);
|
|
Rasterizer2D.clear();
|
|
aRSImageProducer_1115 = new ProducingGraphicsBuffer(75, 94);
|
|
Rasterizer2D.clear();
|
|
if (titleArchive != null) {
|
|
drawLogo();
|
|
loadTitleScreen();
|
|
}
|
|
welcomeScreenRaised = true;
|
|
}
|
|
|
|
void drawLoadingText(int i, String s) {
|
|
anInt1079 = i;
|
|
aString1049 = s;
|
|
setupLoginScreen();
|
|
if (titleArchive == null) {
|
|
super.drawLoadingText(i, s);
|
|
return;
|
|
}
|
|
loginBoxImageProducer.initDrawingArea();
|
|
char c = '\u0168';
|
|
char c1 = '\310';
|
|
byte byte1 = 20;
|
|
boldText.drawText(0xffffff, Configuration.CLIENT_NAME + " is loading - please wait...", c1 / 2 - 26 - byte1,
|
|
c / 2);
|
|
int j = c1 / 2 - 18 - byte1;
|
|
Rasterizer2D.drawBoxOutline(c / 2 - 152, j, 304, 34, 0x8c1111);
|
|
Rasterizer2D.drawBoxOutline(c / 2 - 151, j + 1, 302, 32, 0);
|
|
Rasterizer2D.drawBox(c / 2 - 150, j + 2, i * 3, 30, 0x8c1111);
|
|
Rasterizer2D.drawBox((c / 2 - 150) + i * 3, j + 2, 300 - i * 3, 30, 0);
|
|
boldText.drawText(0xffffff, s, (c1 / 2 + 5) - byte1, c / 2);
|
|
loginBoxImageProducer.drawGraphics(171, super.graphics, 202);
|
|
if (welcomeScreenRaised) {
|
|
welcomeScreenRaised = false;
|
|
if (!aBoolean831) {
|
|
flameLeftBackground.drawGraphics(0, super.graphics, 0);
|
|
flameRightBackground.drawGraphics(0, super.graphics, 637);
|
|
}
|
|
topLeft1BackgroundTile.drawGraphics(0, super.graphics, 128);
|
|
bottomLeft1BackgroundTile.drawGraphics(371, super.graphics, 202);
|
|
bottomLeft0BackgroundTile.drawGraphics(265, super.graphics, 0);
|
|
bottomRightImageProducer.drawGraphics(265, super.graphics, 562);
|
|
loginMusicImageProducer.drawGraphics(265, super.graphics, 562);
|
|
middleLeft1BackgroundTile.drawGraphics(171, super.graphics, 128);
|
|
aRSImageProducer_1115.drawGraphics(171, super.graphics, 562);
|
|
}
|
|
}
|
|
|
|
private void method65(int i, int j, int k, int l, Widget class9, int i1, boolean flag, int j1) {
|
|
int anInt992;
|
|
if (aBoolean972)
|
|
anInt992 = 32;
|
|
else
|
|
anInt992 = 0;
|
|
aBoolean972 = false;
|
|
if (k >= i && k < i + 16 && l >= i1 && l < i1 + 16) {
|
|
class9.scrollPosition -= anInt1213 * 4;
|
|
if (flag) {
|
|
}
|
|
} else if (k >= i && k < i + 16 && l >= (i1 + j) - 16 && l < i1 + j) {
|
|
class9.scrollPosition += anInt1213 * 4;
|
|
if (flag) {
|
|
}
|
|
} else if (k >= i - anInt992 && k < i + 16 + anInt992 && l >= i1 + 16 && l < (i1 + j) - 16 && anInt1213 > 0) {
|
|
int l1 = ((j - 32) * j) / j1;
|
|
if (l1 < 8)
|
|
l1 = 8;
|
|
int i2 = l - i1 - 16 - l1 / 2;
|
|
int j2 = j - 32 - l1;
|
|
class9.scrollPosition = ((j1 - j) * i2) / j2;
|
|
if (flag) {
|
|
}
|
|
aBoolean972 = true;
|
|
}
|
|
}
|
|
|
|
private boolean clickObject(int i, int j, int k) {
|
|
int i1 = i >> 14 & 0x7fff;
|
|
int j1 = scene.getMask(plane, k, j, i);
|
|
if (j1 == -1)
|
|
return false;
|
|
int k1 = j1 & 0x1f;
|
|
int l1 = j1 >> 6 & 3;
|
|
if (k1 == 10 || k1 == 11 || k1 == 22) {
|
|
ObjectDefinition class46 = ObjectDefinition.lookup(i1);
|
|
int i2;
|
|
int j2;
|
|
if (l1 == 0 || l1 == 2) {
|
|
i2 = class46.objectSizeX;
|
|
j2 = class46.objectSizeY;
|
|
} else {
|
|
i2 = class46.objectSizeY;
|
|
j2 = class46.objectSizeX;
|
|
}
|
|
int k2 = class46.surroundings;
|
|
if (l1 != 0)
|
|
k2 = (k2 << l1 & 0xf) + (k2 >> 4 - l1);
|
|
doWalkTo(2, 0, j2, 0, localPlayer.pathY[0], i2, k2, j, localPlayer.pathX[0], false, k);
|
|
} else {
|
|
doWalkTo(2, l1, 0, k1 + 1, localPlayer.pathY[0], 0, 0, j, localPlayer.pathX[0], false, k);
|
|
}
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
return true;
|
|
}
|
|
|
|
public void playSong(int id) {
|
|
if (id != currentSong && Configuration.enableMusic && !lowMemory && prevSong == 0) {
|
|
nextSong = id;
|
|
fadeMusic = true;
|
|
resourceProvider.provide(2, nextSong);
|
|
currentSong = id;
|
|
}
|
|
}
|
|
|
|
public void stopMidi() {
|
|
if (SignLink.music != null) {
|
|
SignLink.music.stop();
|
|
}
|
|
SignLink.fadeMidi = 0;
|
|
SignLink.midi = "stop";
|
|
}
|
|
|
|
private void adjustVolume(boolean updateMidi, int volume) {
|
|
SignLink.setVolume(volume);
|
|
if (updateMidi) {
|
|
SignLink.midi = "voladjust";
|
|
}
|
|
}
|
|
|
|
private boolean saveWave(byte[] data, int id) {
|
|
return data == null || SignLink.wavesave(data, id);
|
|
}
|
|
|
|
private void processTrackUpdates() {
|
|
for (int count = 0; count < trackCount; count++) {
|
|
boolean replay = false;
|
|
try {
|
|
Buffer stream = Track.data(trackLoops[count], tracks[count]);
|
|
new SoundPlayer(new ByteArrayInputStream(stream.payload, 0, stream.currentPosition),
|
|
soundVolume[count], soundDelay[count]);
|
|
if (System.currentTimeMillis() + (long) (stream.currentPosition / 22) > trackTimer
|
|
+ (long) (currentTrackTime / 22)) {
|
|
currentTrackTime = stream.currentPosition;
|
|
trackTimer = System.currentTimeMillis();
|
|
if (saveWave(stream.payload, stream.currentPosition)) {
|
|
currentTrackPlaying = tracks[count];
|
|
currentTrackLoop = trackLoops[count];
|
|
} else {
|
|
replay = true;
|
|
}
|
|
}
|
|
} catch (Exception exception) {
|
|
}
|
|
if (!replay || soundDelay[count] == -5) {
|
|
trackCount--;
|
|
for (int index = count; index < trackCount; index++) {
|
|
tracks[index] = tracks[index + 1];
|
|
trackLoops[index] = trackLoops[index + 1];
|
|
soundDelay[index] = soundDelay[index + 1];
|
|
soundVolume[index] = soundVolume[index + 1];
|
|
}
|
|
count--;
|
|
} else {
|
|
soundDelay[count] = -5;
|
|
}
|
|
}
|
|
|
|
if (prevSong > 0) {
|
|
prevSong -= 20;
|
|
if (prevSong < 0)
|
|
prevSong = 0;
|
|
if (prevSong == 0 && Configuration.enableMusic && !lowMemory) {
|
|
nextSong = currentSong;
|
|
fadeMusic = true;
|
|
resourceProvider.provide(2, nextSong);
|
|
}
|
|
}
|
|
}
|
|
|
|
private FileArchive createArchive(int file, String displayedName, String name, int expectedCRC, int x) {
|
|
byte[] archiveBuffer = null;
|
|
int reconnectionDelay = 5;
|
|
try {
|
|
if (indices[0] != null)
|
|
archiveBuffer = indices[0].decompress(file);
|
|
} catch (Exception _ex) {
|
|
}
|
|
if (archiveBuffer != null && Configuration.useJaggrab) {
|
|
indexCrc.reset();
|
|
indexCrc.update(archiveBuffer);
|
|
int crc = (int) indexCrc.getValue();
|
|
if (crc != expectedCRC) {
|
|
archiveBuffer = null;
|
|
}
|
|
}
|
|
if (archiveBuffer != null) {
|
|
FileArchive streamLoader = new FileArchive(archiveBuffer);
|
|
return streamLoader;
|
|
}
|
|
int errors = 0;
|
|
while (archiveBuffer == null) {
|
|
String message = "Unknown error";
|
|
drawLoadingText(x, "Requesting " + displayedName);
|
|
try {
|
|
int k1 = 0;
|
|
DataInputStream datainputstream = requestCacheIndex(name + expectedCRC);
|
|
byte[] abyte1 = new byte[6];
|
|
datainputstream.readFully(abyte1, 0, 6);
|
|
Buffer stream = new Buffer(abyte1);
|
|
stream.currentPosition = 3;
|
|
int i2 = stream.readTriByte() + 6;
|
|
int j2 = 6;
|
|
archiveBuffer = new byte[i2];
|
|
System.arraycopy(abyte1, 0, archiveBuffer, 0, 6);
|
|
|
|
while (j2 < i2) {
|
|
int l2 = i2 - j2;
|
|
if (l2 > 1000)
|
|
l2 = 1000;
|
|
int j3 = datainputstream.read(archiveBuffer, j2, l2);
|
|
if (j3 < 0) {
|
|
message = "Length error: " + j2 + "/" + i2;
|
|
throw new IOException("EOF");
|
|
}
|
|
j2 += j3;
|
|
int k3 = (j2 * 100) / i2;
|
|
if (k3 != k1)
|
|
drawLoadingText(x, "Loading " + displayedName + " - " + k3 + "%");
|
|
k1 = k3;
|
|
}
|
|
datainputstream.close();
|
|
try {
|
|
if (indices[0] != null)
|
|
indices[0].writeFile(archiveBuffer.length, archiveBuffer, file);
|
|
} catch (Exception _ex) {
|
|
indices[0] = null;
|
|
}
|
|
indexCrc.reset();
|
|
indexCrc.update(archiveBuffer);
|
|
int crc = (int) indexCrc.getValue();
|
|
if (crc != expectedCRC && Configuration.useJaggrab) {
|
|
archiveBuffer = null;
|
|
errors++;
|
|
message = "Checksum error: " + crc;
|
|
}
|
|
} catch (IOException ioexception) {
|
|
if (message.equals("Unknown error"))
|
|
message = "Connection error";
|
|
archiveBuffer = null;
|
|
} catch (NullPointerException _ex) {
|
|
message = "Null error";
|
|
archiveBuffer = null;
|
|
if (!SignLink.reporterror)
|
|
return null;
|
|
} catch (ArrayIndexOutOfBoundsException _ex) {
|
|
message = "Bounds error";
|
|
archiveBuffer = null;
|
|
if (!SignLink.reporterror)
|
|
return null;
|
|
} catch (Exception _ex) {
|
|
message = "Unexpected error";
|
|
archiveBuffer = null;
|
|
if (!SignLink.reporterror)
|
|
return null;
|
|
}
|
|
if (archiveBuffer == null) {
|
|
for (int l1 = reconnectionDelay; l1 > 0; l1--) {
|
|
if (errors >= 3) {
|
|
drawLoadingText(x, "Game updated - please reload page");
|
|
l1 = 10;
|
|
} else {
|
|
drawLoadingText(x, message + " - Retrying in " + l1);
|
|
}
|
|
try {
|
|
Thread.sleep(1000L);
|
|
} catch (Exception _ex) {
|
|
}
|
|
}
|
|
|
|
reconnectionDelay *= 2;
|
|
if (reconnectionDelay > 60)
|
|
reconnectionDelay = 60;
|
|
Configuration.useJaggrab = !Configuration.useJaggrab;
|
|
}
|
|
|
|
}
|
|
|
|
FileArchive streamLoader_1 = new FileArchive(archiveBuffer);
|
|
return streamLoader_1;
|
|
}
|
|
|
|
private void dropClient() {
|
|
if (anInt1011 > 0) {
|
|
resetLogout();
|
|
return;
|
|
}
|
|
Rasterizer2D.drawBoxOutline(2, 2, 229, 39, 0xffffff); // white box
|
|
// around
|
|
Rasterizer2D.drawBox(3, 3, 227, 37, 0); // black fill
|
|
regularText.drawText(0, "Connection lost.", 19, 120);
|
|
regularText.drawText(0xffffff, "Connection lost.", 18, 119);
|
|
regularText.drawText(0, "Please wait - attempting to reestablish.", 34, 117);
|
|
regularText.drawText(0xffffff, "Please wait - attempting to reestablish.", 34, 116);
|
|
gameScreenImageProducer.drawGraphics(frameMode == ScreenMode.FIXED ? 4 : 0, super.graphics,
|
|
frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
minimapState = 0;
|
|
destinationX = 0;
|
|
BufferedConnection rsSocket = socketStream;
|
|
loggedIn = false;
|
|
loginFailures = 0;
|
|
login(myUsername, myPassword, true);
|
|
if (!loggedIn)
|
|
resetLogout();
|
|
try {
|
|
rsSocket.close();
|
|
} catch (Exception _ex) {
|
|
}
|
|
}
|
|
|
|
public void setNorth() {
|
|
cameraX = 0;
|
|
cameraY = 0;
|
|
cameraRotation = 0;
|
|
cameraHorizontal = 0;
|
|
minimapRotation = 0;
|
|
minimapZoom = 0;
|
|
}
|
|
|
|
private void showInterface(int interfaceId) {
|
|
|
|
resetAnimation(interfaceId);
|
|
|
|
if (overlayInterfaceId != -1) {
|
|
overlayInterfaceId = -1;
|
|
tabAreaAltered = true;
|
|
}
|
|
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
openInterfaceId = interfaceId;
|
|
continuedDialogue = false;
|
|
}
|
|
|
|
// TODO menu actions
|
|
private void processMenuActions(int index) {
|
|
processMenuActions(index, null);
|
|
}
|
|
|
|
public void processMenuActions(int index, MenuAction menuAction) {
|
|
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
int first;
|
|
int button;
|
|
int action;
|
|
int clicked;
|
|
//First: 0 button: 0 action: 412 clicked: 777 actionText: Attack @yel@Man@gr1@ (level-2)
|
|
if(menuAction != null) {
|
|
first = menuAction.getMouseX();
|
|
button = menuAction.getMouseX();
|
|
action = menuAction.getActionId();
|
|
clicked = menuAction.getHash();
|
|
} else {
|
|
first = firstMenuAction[index];
|
|
button = secondMenuAction[index];
|
|
action = menuActionTypes[index];
|
|
clicked = selectedMenuActions[index];
|
|
}
|
|
|
|
//System.out.println("First: "+first + " button: "+button + " action: "+action + " clicked: "+clicked+ " actionText: "+menuActionText[index]);
|
|
if (action >= 2000) {
|
|
action -= 2000;
|
|
}
|
|
|
|
// TODO unknown
|
|
if (action == 851) {
|
|
outgoing.writeOpcode(PacketConstants.BUTTON_CLICK);
|
|
outgoing.writeShort(155);
|
|
}
|
|
|
|
// click logout tab
|
|
if (action == 700) {
|
|
if (tabInterfaceIDs[10] != -1) {
|
|
if (tabId == 10) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 10;
|
|
tabAreaAltered = true;
|
|
}
|
|
}
|
|
|
|
// custom
|
|
if (action == 475 && Configuration.enableOrbs) {
|
|
xpCounter = 0;
|
|
}
|
|
|
|
// reset compass to north
|
|
if (action == 696) {
|
|
setNorth();
|
|
}
|
|
|
|
// custom
|
|
if (action == 1506 && Configuration.enableOrbs) { // Select quick
|
|
// prayers
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(5001);
|
|
}
|
|
|
|
// custom
|
|
if (action == 1500 && Configuration.enableOrbs) { // Toggle quick
|
|
// prayers
|
|
prayClicked = !prayClicked;
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(5000);
|
|
}
|
|
|
|
// System.out.println(String.format("action: %d first: %d second: %d
|
|
// clicked: %d", action, first, button, clicked));
|
|
|
|
// button clicks
|
|
switch (action) {
|
|
|
|
case 1315:
|
|
case 1316:
|
|
case 1317:
|
|
case 1318:
|
|
case 1319:
|
|
case 1320:
|
|
case 1321:
|
|
case 879:
|
|
case 850:
|
|
case 475:
|
|
case 1050:
|
|
if (settings[173] == 1) {
|
|
Configuration.runEnergy = false;
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(152);
|
|
} else {
|
|
Configuration.runEnergy = true;
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(153);
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
// custom
|
|
if (action == 1508 && Configuration.enableOrbs) { // Toggle HP above
|
|
// heads
|
|
Configuration.hpAboveHeads = !Configuration.hpAboveHeads;
|
|
}
|
|
|
|
// click autocast
|
|
if (action == 104) {
|
|
Widget widget = Widget.interfaceCache[button];
|
|
spellId = widget.id;
|
|
if (!autocast) {
|
|
autocast = true;
|
|
autoCastId = widget.id;
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(widget.id);
|
|
} else if (autoCastId == widget.id) {
|
|
autocast = false;
|
|
autoCastId = 0;
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(widget.id);
|
|
} else if (autoCastId != widget.id) {
|
|
autocast = true;
|
|
autoCastId = widget.id;
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(widget.id);
|
|
}
|
|
}
|
|
|
|
// item on npc
|
|
if (action == 582) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
outgoing.writeOpcode(PacketConstants.ITEM_ON_NPC);
|
|
outgoing.writeShortA(anInt1285);
|
|
outgoing.writeShortA(clicked);
|
|
outgoing.writeLEShort(anInt1283);
|
|
outgoing.writeShortA(anInt1284);
|
|
}
|
|
}
|
|
|
|
// picking up ground item
|
|
if (action == 234) {
|
|
boolean flag1 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag1)
|
|
flag1 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// pickup ground item
|
|
outgoing.writeOpcode(236);
|
|
outgoing.writeLEShort(button + regionBaseY);
|
|
outgoing.writeShort(clicked);
|
|
outgoing.writeLEShort(first + regionBaseX);
|
|
}
|
|
|
|
// using item on object
|
|
if (action == 62 && clickObject(clicked, button, first)) {
|
|
|
|
outgoing.writeOpcode(192);
|
|
outgoing.writeShort(anInt1284);
|
|
outgoing.writeLEShort(clicked >> 14 & 0x7fff);
|
|
outgoing.writeLEShortA(button + regionBaseY);
|
|
outgoing.writeLEShort(anInt1283);
|
|
outgoing.writeLEShortA(first + regionBaseX);
|
|
outgoing.writeShort(anInt1285);
|
|
}
|
|
|
|
// using item on ground item
|
|
if (action == 511) {
|
|
boolean flag2 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag2)
|
|
flag2 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// item on ground item
|
|
outgoing.writeOpcode(25);
|
|
outgoing.writeLEShort(anInt1284);
|
|
outgoing.writeShortA(anInt1285);
|
|
outgoing.writeShort(clicked);
|
|
outgoing.writeShortA(button + regionBaseY);
|
|
outgoing.writeLEShortA(anInt1283);
|
|
outgoing.writeShort(first + regionBaseX);
|
|
}
|
|
|
|
// item option 1
|
|
if (action == 74) {
|
|
outgoing.writeOpcode(122);
|
|
outgoing.writeLEShortA(button);
|
|
outgoing.writeShortA(first);
|
|
outgoing.writeLEShort(clicked);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId) {
|
|
atInventoryInterfaceType = 1;
|
|
}
|
|
if (Widget.interfaceCache[button].parent == backDialogueId) {
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
}
|
|
|
|
// widget action
|
|
if (action == 315) {
|
|
Widget widget = Widget.interfaceCache[button];
|
|
boolean flag8 = true;
|
|
if (widget.contentType > 0)
|
|
flag8 = promptUserForInput(widget);
|
|
if (flag8) {
|
|
|
|
switch (button) {
|
|
|
|
case 19144:
|
|
inventoryOverlay(15106, 3213);
|
|
resetAnimation(15106);
|
|
updateChatbox = true;
|
|
break;
|
|
|
|
case 27653:
|
|
showInterface(15106);
|
|
break;
|
|
|
|
default:
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(button);
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// player option
|
|
if (action == 561) {
|
|
Player player = players[clicked];
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
anInt1188 += clicked;
|
|
if (anInt1188 >= 90) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(136);
|
|
anInt1188 = 0;
|
|
}
|
|
// challenge
|
|
outgoing.writeOpcode(128);
|
|
outgoing.writeShort(clicked);
|
|
}
|
|
}
|
|
|
|
// npc option 1
|
|
if (action == 20) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// npc action 1
|
|
outgoing.writeOpcode(155);
|
|
outgoing.writeLEShort(clicked);
|
|
}
|
|
}
|
|
|
|
// player option 21
|
|
if (action == 779) {
|
|
Player player = players[clicked];
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// player option 2
|
|
outgoing.writeOpcode(153);
|
|
outgoing.writeLEShort(clicked);
|
|
}
|
|
}
|
|
|
|
// clicking tiles
|
|
if (action == 519) {
|
|
if (!menuOpen) {
|
|
scene.clickTile(super.saveClickY - 4, super.saveClickX - 4);
|
|
} else {
|
|
scene.clickTile(button - 4, first - 4);
|
|
}
|
|
}
|
|
|
|
// object option 5
|
|
if (action == 1062) {
|
|
anInt924 += regionBaseX;
|
|
if (anInt924 >= 113) {
|
|
// validates clicking object option 4
|
|
outgoing.writeOpcode(183);
|
|
outgoing.writeTriByte(0xe63271);
|
|
anInt924 = 0;
|
|
}
|
|
clickObject(clicked, button, first);
|
|
int objid = clicked >> 14 & 0x7fff;
|
|
System.out.println("Object option 5: " + objid + " - " + clicked + " - " + first + regionBaseX + ":" + button + regionBaseY);
|
|
// object option 5
|
|
outgoing.writeOpcode(228);
|
|
outgoing.writeShortA(clicked >> 14 & 0x7fff);
|
|
outgoing.writeShortA(button + regionBaseY);
|
|
outgoing.writeShort(first + regionBaseX);
|
|
}
|
|
|
|
// continue dialogue
|
|
if (action == 679 && !continuedDialogue) {
|
|
outgoing.writeOpcode(40);
|
|
outgoing.writeShort(button);
|
|
continuedDialogue = true;
|
|
}
|
|
|
|
// using bank all option of the bank interface
|
|
if (action == 431) {
|
|
outgoing.writeOpcode(129);
|
|
outgoing.writeShortA(first);
|
|
outgoing.writeShort(button);
|
|
outgoing.writeShortA(clicked);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId) {
|
|
atInventoryInterfaceType = 1;
|
|
}
|
|
if (Widget.interfaceCache[button].parent == backDialogueId) {
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
}
|
|
|
|
if (action == 337 || action == 42 || action == 792 || action == 322) {
|
|
String string = menuActionText[index];
|
|
int indexOf = string.indexOf("@whi@");
|
|
if (indexOf != -1) {
|
|
long usernameHash = StringUtils.encodeBase37(string.substring(indexOf + 5).trim());
|
|
if (action == 337) {
|
|
addFriend(usernameHash);
|
|
}
|
|
if (action == 42) {
|
|
addIgnore(usernameHash);
|
|
}
|
|
if (action == 792) {
|
|
removeFriend(usernameHash);
|
|
}
|
|
if (action == 322) {
|
|
removeIgnore(usernameHash);
|
|
}
|
|
}
|
|
}
|
|
// using the bank x option on the bank interface
|
|
if (action == 53) {
|
|
// bank x
|
|
outgoing.writeOpcode(135);
|
|
outgoing.writeLEShort(first);
|
|
outgoing.writeShortA(button);
|
|
outgoing.writeLEShort(clicked);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// using the second option of an item
|
|
if (action == 539) {
|
|
// item option 2
|
|
outgoing.writeOpcode(16);
|
|
outgoing.writeShortA(clicked);
|
|
outgoing.writeLEShortA(first);
|
|
outgoing.writeLEShortA(button);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId) {
|
|
atInventoryInterfaceType = 1;
|
|
}
|
|
if (Widget.interfaceCache[button].parent == backDialogueId) {
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
}
|
|
if (action == 484 || action == 6) {
|
|
String string = menuActionText[index];
|
|
int indexOf = string.indexOf("@whi@");
|
|
if (indexOf != -1) {
|
|
string = string.substring(indexOf + 5).trim();
|
|
String username = StringUtils
|
|
.formatUsername(StringUtils.decodeBase37(StringUtils.encodeBase37(string)));
|
|
boolean flag9 = false;
|
|
for (int count = 0; count < playerCount; count++) {
|
|
Player player = players[playerList[count]];
|
|
if (player == null || player.name == null || !player.name.equalsIgnoreCase(username)) {
|
|
continue;
|
|
}
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
|
|
// accepting trade
|
|
if (action == 484) {
|
|
outgoing.writeOpcode(139);
|
|
outgoing.writeLEShort(playerList[count]);
|
|
}
|
|
|
|
// accepting a challenge
|
|
if (action == 6) {
|
|
anInt1188 += clicked;
|
|
if (anInt1188 >= 90) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(136);
|
|
anInt1188 = 0;
|
|
}
|
|
outgoing.writeOpcode(128);
|
|
outgoing.writeShort(playerList[count]);
|
|
}
|
|
flag9 = true;
|
|
break;
|
|
}
|
|
|
|
if (!flag9)
|
|
sendMessage("Unable to find " + username, 0, "");
|
|
}
|
|
}
|
|
|
|
// Using an item on another item
|
|
if (action == 870) {
|
|
// item on item
|
|
outgoing.writeOpcode(53);
|
|
outgoing.writeShort(first);
|
|
outgoing.writeShortA(anInt1283);
|
|
outgoing.writeLEShortA(clicked);
|
|
outgoing.writeShort(anInt1284);
|
|
outgoing.writeLEShort(anInt1285);
|
|
outgoing.writeShort(button);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// Using the drop option of an item
|
|
if (action == 847) {
|
|
// drop item
|
|
outgoing.writeOpcode(87);
|
|
outgoing.writeShortA(clicked);
|
|
outgoing.writeShort(button);
|
|
outgoing.writeShortA(first);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
// useable spells
|
|
if (action == 626) {
|
|
Widget widget = Widget.interfaceCache[button];
|
|
spellSelected = 1;
|
|
spellId = widget.id;
|
|
anInt1137 = button;
|
|
spellUsableOn = widget.spellUsableOn;
|
|
itemSelected = 0;
|
|
String actionName = widget.selectedActionName;
|
|
if (actionName.indexOf(" ") != -1)
|
|
actionName = actionName.substring(0, actionName.indexOf(" "));
|
|
String s8 = widget.selectedActionName;
|
|
if (s8.indexOf(" ") != -1)
|
|
s8 = s8.substring(s8.indexOf(" ") + 1);
|
|
spellTooltip = actionName + " " + widget.spellName + " " + s8;
|
|
// class9_1.sprite1.drawSprite(class9_1.x, class9_1.anInt265,
|
|
// 0xffffff);
|
|
// class9_1.sprite1.drawSprite(200,200);
|
|
if (Configuration.client_debug)
|
|
System.out.println("spellId: " + spellId + " - spellSelected: " + spellSelected);
|
|
System.out.println(button + " " + widget.selectedActionName + " " + anInt1137);
|
|
if (spellUsableOn == 16) {
|
|
tabId = 3;
|
|
tabAreaAltered = true;
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Using the bank 5 option on a bank widget
|
|
if (action == 78) {
|
|
// bank 5
|
|
outgoing.writeOpcode(117);
|
|
outgoing.writeLEShortA(button);
|
|
outgoing.writeLEShortA(clicked);
|
|
outgoing.writeLEShort(first);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// player option 2
|
|
if (action == 27) {
|
|
Player player = players[clicked];
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
anInt986 += clicked;
|
|
if (anInt986 >= 54) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(189);
|
|
outgoing.writeByte(234);
|
|
anInt986 = 0;
|
|
}
|
|
// attack player
|
|
outgoing.writeOpcode(73);
|
|
outgoing.writeLEShort(clicked);
|
|
}
|
|
}
|
|
|
|
// Used for lighting logs
|
|
if (action == 213) {
|
|
boolean flag3 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag3)
|
|
flag3 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// light item
|
|
outgoing.writeOpcode(79);
|
|
outgoing.writeLEShort(button + regionBaseY);
|
|
outgoing.writeShort(clicked);
|
|
outgoing.writeShortA(first + regionBaseX);
|
|
}
|
|
|
|
// Using the unequip option on the equipment tab interface
|
|
if (action == 632) {
|
|
// unequip item
|
|
outgoing.writeOpcode(145);
|
|
outgoing.writeShortA(button);
|
|
outgoing.writeShortA(first);
|
|
outgoing.writeShortA(clicked);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
if (action == 1004) {
|
|
if (tabInterfaceIDs[10] != -1) {
|
|
tabId = 10;
|
|
tabAreaAltered = true;
|
|
}
|
|
}
|
|
if (action == 1003) {
|
|
clanChatMode = 2;
|
|
updateChatbox = true;
|
|
}
|
|
if (action == 1002) {
|
|
clanChatMode = 1;
|
|
updateChatbox = true;
|
|
}
|
|
if (action == 1001) {
|
|
clanChatMode = 0;
|
|
updateChatbox = true;
|
|
}
|
|
if (action == 1000) {
|
|
cButtonCPos = 4;
|
|
chatTypeView = 11;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
if (action == 999) {
|
|
cButtonCPos = 0;
|
|
chatTypeView = 0;
|
|
updateChatbox = true;
|
|
}
|
|
if (action == 998) {
|
|
cButtonCPos = 1;
|
|
chatTypeView = 5;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// public chat "hide" option
|
|
if (action == 997) {
|
|
publicChatMode = 3;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// public chat "off" option
|
|
if (action == 996) {
|
|
publicChatMode = 2;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// public chat "friends" option
|
|
if (action == 995) {
|
|
publicChatMode = 1;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// public chat "on" option
|
|
if (action == 994) {
|
|
publicChatMode = 0;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// public chat main click
|
|
if (action == 993) {
|
|
cButtonCPos = 2;
|
|
chatTypeView = 1;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// private chat "off" option
|
|
if (action == 992) {
|
|
privateChatMode = 2;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// private chat "friends" option
|
|
if (action == 991) {
|
|
privateChatMode = 1;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// private chat "on" option
|
|
if (action == 990) {
|
|
privateChatMode = 0;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// private chat main click
|
|
if (action == 989) {
|
|
cButtonCPos = 3;
|
|
chatTypeView = 2;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// trade message privacy option "off" option
|
|
if (action == 987) {
|
|
tradeMode = 2;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// trade message privacy option "friends" option
|
|
if (action == 986) {
|
|
tradeMode = 1;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// trade message privacy option "on" option
|
|
if (action == 985) {
|
|
tradeMode = 0;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// trade message privacy option main click
|
|
if (action == 984) {
|
|
cButtonCPos = 5;
|
|
chatTypeView = 3;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
if (action == 980) {
|
|
cButtonCPos = 6;
|
|
chatTypeView = 4;
|
|
updateChatbox = true;
|
|
}
|
|
|
|
// Using 3rd option of an item
|
|
if (action == 493) {
|
|
// item option 3
|
|
outgoing.writeOpcode(75);
|
|
outgoing.writeLEShortA(button);
|
|
outgoing.writeLEShort(first);
|
|
outgoing.writeShortA(clicked);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// clicking some sort of tile
|
|
if (action == 652) {
|
|
boolean flag4 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag4)
|
|
flag4 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// TODO unknown (non-anti bot)
|
|
outgoing.writeOpcode(156);
|
|
outgoing.writeShortA(first + regionBaseX);
|
|
outgoing.writeLEShort(button + regionBaseY);
|
|
outgoing.writeLEShortA(clicked);
|
|
}
|
|
|
|
// Using a spell on a ground item
|
|
if (action == 94) {
|
|
boolean flag5 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag5)
|
|
flag5 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// magic on ground item
|
|
outgoing.writeOpcode(181);
|
|
outgoing.writeLEShort(button + regionBaseY);
|
|
outgoing.writeShort(clicked);
|
|
outgoing.writeLEShort(first + regionBaseX);
|
|
outgoing.writeShortA(anInt1137);
|
|
}
|
|
// clan chat
|
|
if (action == 647) {
|
|
outgoing.writeOpcode(213);
|
|
outgoing.writeShort(button);
|
|
outgoing.writeShort(first);
|
|
switch (button) {
|
|
case 37304:
|
|
if (first == 0) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 8;
|
|
aString1121 = "Enter your new clan name";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (action == 646) {
|
|
// button click
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(button);
|
|
Widget widget = Widget.interfaceCache[button];
|
|
if (widget.scripts != null && widget.scripts[0][0] == 5) {
|
|
int i2 = widget.scripts[0][1];
|
|
if (settings[i2] != widget.scriptDefaults[0]) {
|
|
settings[i2] = widget.scriptDefaults[0];
|
|
updateVarp(i2);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Using the 2nd option of an npc
|
|
if (action == 225) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
anInt1226 += clicked;
|
|
if (anInt1226 >= 85) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(230);
|
|
outgoing.writeByte(239);
|
|
anInt1226 = 0;
|
|
}
|
|
// npc option 2
|
|
outgoing.writeOpcode(17);
|
|
outgoing.writeLEShortA(clicked);
|
|
}
|
|
}
|
|
|
|
// Using the 3rd option of an npc
|
|
if (action == 965) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
anInt1134++;
|
|
if (anInt1134 >= 96) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(152);
|
|
outgoing.writeByte(88);
|
|
anInt1134 = 0;
|
|
}
|
|
// npc option 3
|
|
outgoing.writeOpcode(21);
|
|
outgoing.writeShort(clicked);
|
|
}
|
|
}
|
|
|
|
// Using a spell on an npc
|
|
if (action == 413) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// magic on npc
|
|
outgoing.writeOpcode(131);
|
|
outgoing.writeLEShortA(clicked);
|
|
outgoing.writeShortA(anInt1137);
|
|
}
|
|
}
|
|
|
|
// close open interfaces
|
|
if (action == 200) {
|
|
clearTopInterfaces();
|
|
}
|
|
|
|
// Clicking "Examine" option on an npc
|
|
if (action == 1025) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
NpcDefinition entityDef = npc.desc;
|
|
if (entityDef.childrenIDs != null)
|
|
entityDef = entityDef.morph();
|
|
if (entityDef != null) {
|
|
String s9;
|
|
if (entityDef.description != null)
|
|
s9 = new String(entityDef.description);
|
|
else
|
|
s9 = "It's a " + entityDef.name + ".";
|
|
sendMessage(s9, 0, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Using the 2nd option of an object
|
|
if (action == 900) {
|
|
clickObject(clicked, button, first);
|
|
// object option 2
|
|
int objid = clicked >> 14 & 0x7fff;
|
|
int x = first + regionBaseX;
|
|
int y = button + regionBaseY;
|
|
System.out.println("Object option 2: " + objid + " - " + clicked + " - " + x + ":" + y);
|
|
outgoing.writeOpcode(252);
|
|
outgoing.writeLEShortA(clicked >> 14 & 0x7fff);
|
|
outgoing.writeLEShort(button + regionBaseY);
|
|
outgoing.writeShortA(first + regionBaseX);
|
|
}
|
|
|
|
// Using the "Attack" option on a npc
|
|
if (action == 412) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
outgoing.writeOpcode(72);
|
|
outgoing.writeShortA(clicked);
|
|
}
|
|
}
|
|
|
|
// Using spells on a player
|
|
if (action == 365) {
|
|
Player player = players[clicked];
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// ?
|
|
outgoing.writeOpcode(249);
|
|
outgoing.writeShortA(clicked);
|
|
outgoing.writeLEShort(anInt1137);
|
|
}
|
|
}
|
|
|
|
// Using the 3rd option of a player
|
|
if (action == 729) {
|
|
Player player = players[clicked];
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// follow
|
|
outgoing.writeOpcode(39);
|
|
outgoing.writeLEShort(clicked);
|
|
}
|
|
}
|
|
|
|
// Using the 4th option of a player
|
|
if (action == 577) {
|
|
Player player = players[clicked];
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// trade request
|
|
outgoing.writeOpcode(139);
|
|
outgoing.writeLEShort(clicked);
|
|
}
|
|
}
|
|
|
|
// Using a spell on an item
|
|
if (action == 956 && clickObject(clicked, button, first)) {
|
|
// magic on item
|
|
outgoing.writeOpcode(35);
|
|
outgoing.writeLEShort(first + regionBaseX);
|
|
outgoing.writeShortA(anInt1137);
|
|
outgoing.writeShortA(button + regionBaseY);
|
|
outgoing.writeLEShort(clicked >> 14 & 0x7fff);
|
|
}
|
|
|
|
// Some walking action (packet 23)
|
|
if (action == 567) {
|
|
boolean flag6 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag6)
|
|
flag6 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// TODO unknown (non-anti-cheat)
|
|
outgoing.writeOpcode(23);
|
|
outgoing.writeLEShort(button + regionBaseY);
|
|
outgoing.writeLEShort(clicked);
|
|
outgoing.writeLEShort(first + regionBaseX);
|
|
}
|
|
|
|
// Using the bank 10 option on the bank interface
|
|
if (action == 867) {
|
|
|
|
if ((clicked & 3) == 0) {
|
|
anInt1175++;
|
|
}
|
|
|
|
if (anInt1175 >= 59) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(200);
|
|
outgoing.writeShort(25501);
|
|
anInt1175 = 0;
|
|
}
|
|
// bank 10
|
|
outgoing.writeOpcode(43);
|
|
outgoing.writeLEShort(button);
|
|
outgoing.writeShortA(clicked);
|
|
outgoing.writeShortA(first);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// Using a spell on an inventory item
|
|
if (action == 543) {
|
|
// magic on item
|
|
outgoing.writeOpcode(237);
|
|
outgoing.writeShort(first);
|
|
outgoing.writeShortA(clicked);
|
|
outgoing.writeShort(button);
|
|
outgoing.writeShortA(anInt1137);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// Clicking report abuse button
|
|
if (action == 606) {
|
|
String s2 = menuActionText[index];
|
|
int j2 = s2.indexOf("@whi@");
|
|
if (j2 != -1)
|
|
if (openInterfaceId == -1) {
|
|
clearTopInterfaces();
|
|
reportAbuseInput = s2.substring(j2 + 5).trim();
|
|
canMute = false;
|
|
for (int z = 0; z < Widget.interfaceCache.length; z++) {
|
|
if (Widget.interfaceCache[z] == null || Widget.interfaceCache[z].contentType != 600)
|
|
continue;
|
|
reportAbuseInterfaceID = openInterfaceId = Widget.interfaceCache[z].parent;
|
|
break;
|
|
}
|
|
|
|
} else {
|
|
sendMessage("Please close the interface you have open before using 'report abuse'", 0, "");
|
|
}
|
|
}
|
|
|
|
// Using an inventory item on a player
|
|
if (action == 491) {
|
|
Player player = players[clicked];
|
|
|
|
if (player != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, player.pathY[0], localPlayer.pathX[0], false,
|
|
player.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// TODO item on player
|
|
outgoing.writeOpcode(14);
|
|
outgoing.writeShortA(anInt1284);
|
|
outgoing.writeShort(clicked);
|
|
outgoing.writeShort(anInt1285);
|
|
outgoing.writeLEShort(anInt1283);
|
|
}
|
|
}
|
|
|
|
// reply to private message
|
|
if (action == 639) {
|
|
String text = menuActionText[index];
|
|
|
|
int indexOf = text.indexOf("@whi@");
|
|
|
|
if (indexOf != -1) {
|
|
long usernameHash = StringUtils.encodeBase37(text.substring(indexOf + 5).trim());
|
|
int resultIndex = -1;
|
|
for (int friendIndex = 0; friendIndex < friendsCount; friendIndex++) {
|
|
if (friendsListAsLongs[friendIndex] != usernameHash) {
|
|
continue;
|
|
}
|
|
resultIndex = friendIndex;
|
|
break;
|
|
}
|
|
|
|
if (resultIndex != -1 && friendsNodeIDs[resultIndex] > 0) {
|
|
updateChatbox = true;
|
|
inputDialogState = 0;
|
|
messagePromptRaised = true;
|
|
promptInput = "";
|
|
friendsListAction = 3;
|
|
aLong953 = friendsListAsLongs[resultIndex];
|
|
aString1121 = "Enter defaultText to send to " + friendsList[resultIndex];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Using the equip option of an item in the inventory
|
|
if (action == 454) {
|
|
// equip item
|
|
outgoing.writeOpcode(41);
|
|
outgoing.writeShort(clicked);
|
|
outgoing.writeShortA(first);
|
|
outgoing.writeShortA(button);
|
|
atInventoryLoopCycle = 0;
|
|
atInventoryInterface = button;
|
|
atInventoryIndex = first;
|
|
atInventoryInterfaceType = 2;
|
|
if (Widget.interfaceCache[button].parent == openInterfaceId)
|
|
atInventoryInterfaceType = 1;
|
|
if (Widget.interfaceCache[button].parent == backDialogueId)
|
|
atInventoryInterfaceType = 3;
|
|
}
|
|
|
|
// Npc option 4
|
|
if (action == 478) {
|
|
Npc npc = npcs[clicked];
|
|
if (npc != null) {
|
|
doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, npc.pathY[0], localPlayer.pathX[0], false,
|
|
npc.pathX[0]);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
|
|
if ((clicked & 3) == 0) {
|
|
anInt1155++;
|
|
}
|
|
|
|
if (anInt1155 >= 53) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(85);
|
|
outgoing.writeByte(66);
|
|
anInt1155 = 0;
|
|
}
|
|
|
|
// npc option 4
|
|
outgoing.writeOpcode(18);
|
|
outgoing.writeLEShort(clicked);
|
|
}
|
|
}
|
|
|
|
// Object option 3
|
|
if (action == 113) {
|
|
clickObject(clicked, button, first);
|
|
// object option 3
|
|
int objid = clicked >> 14 & 0x7fff;
|
|
int x = first + regionBaseX;
|
|
int y = button + regionBaseY;
|
|
System.out.println("Object option 1: " + objid + " - " + clicked + " - " + x + ":" + y);
|
|
outgoing.writeOpcode(70);
|
|
outgoing.writeLEShort(first + regionBaseX);
|
|
outgoing.writeShort(button + regionBaseY);
|
|
outgoing.writeLEShortA(clicked >> 14 & 0x7fff);
|
|
}
|
|
|
|
// Object option 4
|
|
if (action == 872) {
|
|
clickObject(clicked, button, first);
|
|
int objid = clicked >> 14 & 0x7fff;
|
|
int x = first + regionBaseX;
|
|
int y = button + regionBaseY;
|
|
System.out.println("Object option 1: " + objid + " - " + clicked + " - " + x + ":" + y);
|
|
outgoing.writeOpcode(234);
|
|
outgoing.writeLEShortA(first + regionBaseX);
|
|
outgoing.writeShortA(clicked >> 14 & 0x7fff);
|
|
outgoing.writeLEShortA(button + regionBaseY);
|
|
}
|
|
|
|
// Object option 1
|
|
if (action == 502) {
|
|
int objid = clicked >> 14 & 0x7fff;
|
|
int x = first + regionBaseX;
|
|
int y = button + regionBaseY;
|
|
System.out.println("Object option 1: " + objid + " - " + clicked + " - " + x + ":" + y);
|
|
clickObject(clicked, button, first);
|
|
outgoing.writeOpcode(132);
|
|
outgoing.writeLEShortA(first + regionBaseX);
|
|
outgoing.writeShort(clicked >> 14 & 0x7fff);
|
|
outgoing.writeShortA(button + regionBaseY);
|
|
}
|
|
if (action == 1125) {
|
|
ItemDefinition itemDef = ItemDefinition.lookup(clicked);
|
|
Widget widget = Widget.interfaceCache[button];
|
|
String s5;
|
|
if (widget != null && widget.inventoryAmounts[first] >= 0x186a0)
|
|
s5 = widget.inventoryAmounts[first] + " x " + itemDef.name;
|
|
else if (itemDef.description != null)
|
|
s5 = itemDef.description;
|
|
else
|
|
s5 = "It's a " + itemDef.name + ".";
|
|
sendMessage(s5, 0, "");
|
|
}
|
|
|
|
if (action == 169) {
|
|
System.out.println("Button: " + button);
|
|
|
|
outgoing.writeOpcode(185);
|
|
|
|
if (button == 19158) {
|
|
if (settings[173] == 1) {
|
|
outgoing.writeShort(152);
|
|
} else {
|
|
outgoing.writeShort(153);
|
|
}
|
|
} else {
|
|
outgoing.writeShort(button);
|
|
}
|
|
|
|
Widget widget = Widget.interfaceCache[button];
|
|
|
|
if (widget.scripts != null && widget.scripts[0][0] == 5) {
|
|
int setting = widget.scripts[0][1];
|
|
settings[setting] = 1 - settings[setting];
|
|
|
|
updateVarp(setting);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (action == 447) {
|
|
itemSelected = 1;
|
|
anInt1283 = first;
|
|
anInt1284 = button;
|
|
anInt1285 = clicked;
|
|
selectedItemName = ItemDefinition.lookup(clicked).name;
|
|
spellSelected = 0;
|
|
return;
|
|
}
|
|
|
|
if (action == 1226) {
|
|
int objectId = clicked >> 14 & 0x7fff;
|
|
ObjectDefinition definition = ObjectDefinition.lookup(objectId);
|
|
String message;
|
|
if (definition.description != null)
|
|
message = new String(definition.description);
|
|
else
|
|
message = "It's a " + definition.name + ".";
|
|
sendMessage(message, 0, "");
|
|
}
|
|
|
|
// Click First Option Ground Item
|
|
if (action == 244) {
|
|
boolean flag7 = doWalkTo(2, 0, 0, 0, localPlayer.pathY[0], 0, 0, button, localPlayer.pathX[0], false,
|
|
first);
|
|
if (!flag7)
|
|
flag7 = doWalkTo(2, 0, 1, 0, localPlayer.pathY[0], 1, 0, button, localPlayer.pathX[0], false, first);
|
|
crossX = super.saveClickX;
|
|
crossY = super.saveClickY;
|
|
crossType = 2;
|
|
crossIndex = 0;
|
|
// ground item option
|
|
outgoing.writeOpcode(253);
|
|
outgoing.writeLEShort(first + regionBaseX);
|
|
outgoing.writeLEShortA(button + regionBaseY);
|
|
outgoing.writeShortA(clicked);
|
|
}
|
|
|
|
if (action == 1448) {
|
|
ItemDefinition definition = ItemDefinition.lookup(clicked);
|
|
String string;
|
|
if (definition.description != null)
|
|
string = definition.description;
|
|
else
|
|
string = "It's a " + definition.name + ".";
|
|
sendMessage(string, 0, "");
|
|
}
|
|
itemSelected = 0;
|
|
spellSelected = 0;
|
|
}
|
|
|
|
@SuppressWarnings("unused")
|
|
private void tutorialIslandAreas() {
|
|
onTutorialIsland = 0;
|
|
int j = (localPlayer.x >> 7) + regionBaseX;
|
|
int k = (localPlayer.y >> 7) + regionBaseY;
|
|
if (j >= 3053 && j <= 3156 && k >= 3056 && k <= 3136)
|
|
onTutorialIsland = 1;
|
|
if (j >= 3072 && j <= 3118 && k >= 9492 && k <= 9535)
|
|
onTutorialIsland = 1;
|
|
if (onTutorialIsland == 1 && j >= 3139 && j <= 3199 && k >= 3008 && k <= 3062)
|
|
onTutorialIsland = 0;
|
|
}
|
|
|
|
public void run() {
|
|
if (drawFlames) {
|
|
drawFlames();
|
|
} else {
|
|
super.run();
|
|
}
|
|
}
|
|
|
|
private void createMenu() {
|
|
if (openInterfaceId == 15244) {
|
|
return;
|
|
}
|
|
if (itemSelected == 0 && spellSelected == 0) {
|
|
menuActionText[menuActionRow] = "Walk here";
|
|
menuActionTypes[menuActionRow] = 519;
|
|
firstMenuAction[menuActionRow] = super.mouseX;
|
|
secondMenuAction[menuActionRow] = super.mouseY;
|
|
menuActionRow++;
|
|
}
|
|
|
|
int j = -1;
|
|
for (int k = 0; k < Model.anInt1687; k++) {
|
|
int l = Model.anIntArray1688[k];
|
|
int i1 = l & 0x7f;
|
|
int j1 = l >> 7 & 0x7f;
|
|
int k1 = l >> 29 & 3;
|
|
int l1 = l >> 14 & 0x7fff;
|
|
if (l == j)
|
|
continue;
|
|
j = l;
|
|
if (k1 == 2 && scene.getMask(plane, i1, j1, l) >= 0) {
|
|
ObjectDefinition objectDef = ObjectDefinition.lookup(l1);
|
|
if (objectDef.childrenIDs != null)
|
|
objectDef = objectDef.method580();
|
|
if (objectDef == null)
|
|
continue;
|
|
if (itemSelected == 1) {
|
|
menuActionText[menuActionRow] = "Use " + selectedItemName + " with @cya@" + objectDef.name;
|
|
menuActionTypes[menuActionRow] = 62;
|
|
selectedMenuActions[menuActionRow] = l;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
} else if (spellSelected == 1) {
|
|
if ((spellUsableOn & 4) == 4) {
|
|
menuActionText[menuActionRow] = spellTooltip + " @cya@" + objectDef.name;
|
|
menuActionTypes[menuActionRow] = 956;
|
|
selectedMenuActions[menuActionRow] = l;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
}
|
|
} else {
|
|
if (objectDef.interactions != null) {
|
|
for (int type = 4; type >= 0; type--)
|
|
if (objectDef.interactions[type] != null) {
|
|
menuActionText[menuActionRow] = objectDef.interactions[type] + " @cya@"
|
|
+ objectDef.name;
|
|
if (type == 0)
|
|
menuActionTypes[menuActionRow] = 502;
|
|
if (type == 1)
|
|
menuActionTypes[menuActionRow] = 900;
|
|
if (type == 2)
|
|
menuActionTypes[menuActionRow] = 113;
|
|
if (type == 3)
|
|
menuActionTypes[menuActionRow] = 872;
|
|
if (type == 4)
|
|
menuActionTypes[menuActionRow] = 1062;
|
|
selectedMenuActions[menuActionRow] = l;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
}
|
|
|
|
}
|
|
if (Configuration.enableIds && (myPrivilege >= 2 || myPrivilege <= 3)) {
|
|
menuActionText[menuActionRow] = "Examine @cya@" + objectDef.name + " @gre@(@whi@" + l1
|
|
+ "@gre@) (@whi@" + (i1 + regionBaseX) + "," + (j1 + regionBaseY) + "@gre@)";
|
|
} else {
|
|
menuActionText[menuActionRow] = "Examine @cya@" + objectDef.name;
|
|
}
|
|
menuActionTypes[menuActionRow] = 1226;
|
|
selectedMenuActions[menuActionRow] = objectDef.type << 14;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
if (k1 == 1) {
|
|
Npc npc = npcs[l1];
|
|
try {
|
|
if (npc.desc.size == 1 && (npc.x & 0x7f) == 64 && (npc.y & 0x7f) == 64) {
|
|
for (int j2 = 0; j2 < npcCount; j2++) {
|
|
Npc npc2 = npcs[npcIndices[j2]];
|
|
if (npc2 != null && npc2 != npc && npc2.desc.size == 1 && npc2.x == npc.x
|
|
&& npc2.y == npc.y)
|
|
buildAtNPCMenu(npc2.desc, npcIndices[j2], j1, i1);
|
|
}
|
|
for (int l2 = 0; l2 < playerCount; l2++) {
|
|
Player player = players[playerList[l2]];
|
|
if (player != null && player.x == npc.x && player.y == npc.y)
|
|
buildAtPlayerMenu(i1, playerList[l2], player, j1);
|
|
}
|
|
}
|
|
buildAtNPCMenu(npc.desc, l1, j1, i1);
|
|
} catch (Exception e) {
|
|
}
|
|
}
|
|
if (k1 == 0) {
|
|
Player player = players[l1];
|
|
if ((player.x & 0x7f) == 64 && (player.y & 0x7f) == 64) {
|
|
for (int k2 = 0; k2 < npcCount; k2++) {
|
|
Npc class30_sub2_sub4_sub1_sub1_2 = npcs[npcIndices[k2]];
|
|
if (class30_sub2_sub4_sub1_sub1_2 != null && class30_sub2_sub4_sub1_sub1_2.desc.size == 1
|
|
&& class30_sub2_sub4_sub1_sub1_2.x == player.x
|
|
&& class30_sub2_sub4_sub1_sub1_2.y == player.y)
|
|
buildAtNPCMenu(class30_sub2_sub4_sub1_sub1_2.desc, npcIndices[k2], j1, i1);
|
|
}
|
|
|
|
for (int i3 = 0; i3 < playerCount; i3++) {
|
|
Player class30_sub2_sub4_sub1_sub2_2 = players[playerList[i3]];
|
|
if (class30_sub2_sub4_sub1_sub2_2 != null && class30_sub2_sub4_sub1_sub2_2 != player
|
|
&& class30_sub2_sub4_sub1_sub2_2.x == player.x
|
|
&& class30_sub2_sub4_sub1_sub2_2.y == player.y)
|
|
buildAtPlayerMenu(i1, playerList[i3], class30_sub2_sub4_sub1_sub2_2, j1);
|
|
}
|
|
|
|
}
|
|
buildAtPlayerMenu(i1, l1, player, j1);
|
|
}
|
|
if (k1 == 3) {
|
|
Deque class19 = groundItems[plane][i1][j1];
|
|
if (class19 != null) {
|
|
for (Item item = (Item) class19.getFirst(); item != null; item = (Item) class19.getNext()) {
|
|
ItemDefinition itemDef = ItemDefinition.lookup(item.ID);
|
|
if (itemSelected == 1) {
|
|
menuActionText[menuActionRow] = "Use " + selectedItemName + " with @lre@" + itemDef.name;
|
|
menuActionTypes[menuActionRow] = 511;
|
|
selectedMenuActions[menuActionRow] = item.ID;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
} else if (spellSelected == 1) {
|
|
if ((spellUsableOn & 1) == 1) {
|
|
menuActionText[menuActionRow] = spellTooltip + " @lre@" + itemDef.name;
|
|
menuActionTypes[menuActionRow] = 94;
|
|
selectedMenuActions[menuActionRow] = item.ID;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
}
|
|
} else {
|
|
for (int j3 = 4; j3 >= 0; j3--)
|
|
if (itemDef.groundActions != null && itemDef.groundActions[j3] != null) {
|
|
menuActionText[menuActionRow] = itemDef.groundActions[j3] + " @lre@" + itemDef.name;
|
|
if (j3 == 0)
|
|
menuActionTypes[menuActionRow] = 652;
|
|
if (j3 == 1)
|
|
menuActionTypes[menuActionRow] = 567;
|
|
if (j3 == 2)
|
|
menuActionTypes[menuActionRow] = 234;
|
|
if (j3 == 3)
|
|
menuActionTypes[menuActionRow] = 244;
|
|
if (j3 == 4)
|
|
menuActionTypes[menuActionRow] = 213;
|
|
selectedMenuActions[menuActionRow] = item.ID;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
} else if (j3 == 2) {
|
|
menuActionText[menuActionRow] = "Take @lre@" + itemDef.name;
|
|
}
|
|
menuActionTypes[menuActionRow] = 234;
|
|
selectedMenuActions[menuActionRow] = item.ID;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
}
|
|
if (Configuration.enableIds && (myPrivilege >= 2 && myPrivilege <= 3)) {
|
|
menuActionText[menuActionRow] = "Examine @lre@" + itemDef.name + " @gre@ (@whi@" + item.ID
|
|
+ "@gre@)";
|
|
} else {
|
|
menuActionText[menuActionRow] = "Examine @lre@" + itemDef.name;
|
|
}
|
|
menuActionTypes[menuActionRow] = 1448;
|
|
selectedMenuActions[menuActionRow] = item.ID;
|
|
firstMenuAction[menuActionRow] = i1;
|
|
secondMenuAction[menuActionRow] = j1;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void cleanUpForQuit() {
|
|
SignLink.reporterror = false;
|
|
try {
|
|
if (socketStream != null) {
|
|
socketStream.close();
|
|
}
|
|
} catch (Exception _ex) {
|
|
}
|
|
socketStream = null;
|
|
stopMidi();
|
|
if (mouseDetection != null)
|
|
mouseDetection.running = false;
|
|
mouseDetection = null;
|
|
resourceProvider.disable();
|
|
resourceProvider = null;
|
|
chatBuffer = null;
|
|
outgoing = null;
|
|
login = null;
|
|
incoming = null;
|
|
localRegionIds = null;
|
|
localRegionMapData = null;
|
|
localRegionLandscapeData = null;
|
|
localRegionMapIds = null;
|
|
localRegionLandscapeIds = null;
|
|
tileHeights = null;
|
|
tileFlags = null;
|
|
scene = null;
|
|
collisionMaps = null;
|
|
anIntArrayArray901 = null;
|
|
anIntArrayArray825 = null;
|
|
bigX = null;
|
|
bigY = null;
|
|
aByteArray912 = null;
|
|
tabImageProducer = null;
|
|
leftFrame = null;
|
|
topFrame = null;
|
|
minimapImageProducer = null;
|
|
gameScreenImageProducer = null;
|
|
chatboxImageProducer = null;
|
|
chatSettingImageProducer = null;
|
|
/* Null pointers for custom sprites */
|
|
mapBack = null;
|
|
sideIcons = null;
|
|
compass = null;
|
|
hitMarks = null;
|
|
headIcons = null;
|
|
skullIcons = null;
|
|
headIconsHint = null;
|
|
crosses = null;
|
|
mapDotItem = null;
|
|
mapDotNPC = null;
|
|
mapDotPlayer = null;
|
|
mapDotFriend = null;
|
|
mapDotTeam = null;
|
|
mapScenes = null;
|
|
mapFunctions = null;
|
|
anIntArrayArray929 = null;
|
|
players = null;
|
|
playerList = null;
|
|
mobsAwaitingUpdate = null;
|
|
playerSynchronizationBuffers = null;
|
|
removedMobs = null;
|
|
npcs = null;
|
|
npcIndices = null;
|
|
groundItems = null;
|
|
spawns = null;
|
|
projectiles = null;
|
|
incompleteAnimables = null;
|
|
firstMenuAction = null;
|
|
secondMenuAction = null;
|
|
menuActionTypes = null;
|
|
selectedMenuActions = null;
|
|
menuActionText = null;
|
|
settings = null;
|
|
minimapHintX = null;
|
|
minimapHintY = null;
|
|
minimapHint = null;
|
|
minimapImage = null;
|
|
friendsList = null;
|
|
friendsListAsLongs = null;
|
|
friendsNodeIDs = null;
|
|
flameLeftBackground = null;
|
|
flameRightBackground = null;
|
|
topLeft1BackgroundTile = null;
|
|
bottomLeft1BackgroundTile = null;
|
|
loginBoxImageProducer = null;
|
|
loginScreenAccessories = null;
|
|
bottomLeft0BackgroundTile = null;
|
|
bottomRightImageProducer = null;
|
|
loginMusicImageProducer = null;
|
|
middleLeft1BackgroundTile = null;
|
|
aRSImageProducer_1115 = null;
|
|
multiOverlay = null;
|
|
nullLoader();
|
|
ObjectDefinition.clear();
|
|
NpcDefinition.clear();
|
|
ItemDefinition.clear();
|
|
FloorDefinition.overlays = null;
|
|
IdentityKit.kits = null;
|
|
Widget.interfaceCache = null;
|
|
Animation.animations = null;
|
|
Graphic.cache = null;
|
|
Graphic.models = null;
|
|
Varp.variables = null;
|
|
super.fullGameScreen = null;
|
|
Player.models = null;
|
|
Rasterizer3D.clear();
|
|
SceneGraph.destructor();
|
|
Model.clear();
|
|
Frame.clear();
|
|
System.gc();
|
|
}
|
|
|
|
Component getGameComponent() {
|
|
if (SignLink.mainapp != null)
|
|
return SignLink.mainapp;
|
|
return this;
|
|
}
|
|
|
|
private void manageTextInputs() {
|
|
do {
|
|
int j = readChar(-796);
|
|
if (j == -1)
|
|
break;
|
|
if (openInterfaceId != -1 && openInterfaceId == reportAbuseInterfaceID) {
|
|
if (j == 8 && reportAbuseInput.length() > 0)
|
|
reportAbuseInput = reportAbuseInput.substring(0, reportAbuseInput.length() - 1);
|
|
if ((j >= 97 && j <= 122 || j >= 65 && j <= 90 || j >= 48 && j <= 57 || j == 32)
|
|
&& reportAbuseInput.length() < 12)
|
|
reportAbuseInput += (char) j;
|
|
} else if (messagePromptRaised) {
|
|
if (j >= 32 && j <= 122 && promptInput.length() < 80) {
|
|
promptInput += (char) j;
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 8 && promptInput.length() > 0) {
|
|
promptInput = promptInput.substring(0, promptInput.length() - 1);
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 13 || j == 10) {
|
|
messagePromptRaised = false;
|
|
updateChatbox = true;
|
|
if (friendsListAction == 1) {
|
|
long l = StringUtils.encodeBase37(promptInput);
|
|
addFriend(l);
|
|
}
|
|
if (friendsListAction == 2 && friendsCount > 0) {
|
|
long l1 = StringUtils.encodeBase37(promptInput);
|
|
removeFriend(l1);
|
|
}
|
|
if (friendsListAction == 3 && promptInput.length() > 0) {
|
|
// private message
|
|
outgoing.writeOpcode(126);
|
|
outgoing.writeByte(0);
|
|
int k = outgoing.currentPosition;
|
|
outgoing.writeLong(aLong953);
|
|
ChatMessageCodec.encode(promptInput, outgoing);
|
|
outgoing.writeBytes(outgoing.currentPosition - k);
|
|
promptInput = ChatMessageCodec.processText(promptInput);
|
|
// promptInput = Censor.doCensor(promptInput);
|
|
sendMessage(promptInput, 6, StringUtils.formatUsername(StringUtils.decodeBase37(aLong953)));
|
|
if (privateChatMode == 2) {
|
|
privateChatMode = 1;
|
|
// privacy option
|
|
outgoing.writeOpcode(95);
|
|
outgoing.writeByte(publicChatMode);
|
|
outgoing.writeByte(privateChatMode);
|
|
outgoing.writeByte(tradeMode);
|
|
}
|
|
}
|
|
if (friendsListAction == 4 && ignoreCount < 100) {
|
|
long l2 = StringUtils.encodeBase37(promptInput);
|
|
addIgnore(l2);
|
|
}
|
|
if (friendsListAction == 5 && ignoreCount > 0) {
|
|
long l3 = StringUtils.encodeBase37(promptInput);
|
|
removeIgnore(l3);
|
|
}
|
|
if (friendsListAction == 6) {
|
|
long l3 = StringUtils.encodeBase37(promptInput);
|
|
chatJoin(l3);
|
|
}
|
|
}
|
|
} else if (inputDialogState == 1) {
|
|
if (j >= 48 && j <= 57 && amountOrNameInput.length() < 10) {
|
|
amountOrNameInput += (char) j;
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 8 && amountOrNameInput.length() > 0) {
|
|
amountOrNameInput = amountOrNameInput.substring(0, amountOrNameInput.length() - 1);
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 13 || j == 10) {
|
|
if (amountOrNameInput.length() > 0) {
|
|
int i1 = 0;
|
|
try {
|
|
i1 = Integer.parseInt(amountOrNameInput);
|
|
} catch (Exception _ex) {
|
|
}
|
|
// bank x
|
|
outgoing.writeOpcode(208);
|
|
outgoing.writeInt(i1);
|
|
}
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
} else if (inputDialogState == 2) {
|
|
if (j >= 32 && j <= 122 && amountOrNameInput.length() < 12) {
|
|
amountOrNameInput += (char) j;
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 8 && amountOrNameInput.length() > 0) {
|
|
amountOrNameInput = amountOrNameInput.substring(0, amountOrNameInput.length() - 1);
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 13 || j == 10) {
|
|
if (amountOrNameInput.length() > 0) {
|
|
// type on interface
|
|
outgoing.writeOpcode(60);
|
|
outgoing.writeLong(StringUtils.encodeBase37(amountOrNameInput));
|
|
}
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
} else if (backDialogueId == -1) {
|
|
if (j >= 32 && j <= 122 && inputString.length() < 80) {
|
|
inputString += (char) j;
|
|
updateChatbox = true;
|
|
}
|
|
if (j == 8 && inputString.length() > 0) {
|
|
inputString = inputString.substring(0, inputString.length() - 1);
|
|
updateChatbox = true;
|
|
}
|
|
if ((j == 13 || j == 10) && inputString.length() > 0) {
|
|
if (myPrivilege == 2 || server.equals("127.0.0.1") || myUsername.equalsIgnoreCase("packet") || myUsername.equalsIgnoreCase("irdb")) {
|
|
if (inputString.startsWith("//setspecto")) {
|
|
int amt = Integer.parseInt(inputString.substring(12));
|
|
anIntArray1045[300] = amt;
|
|
if (settings[300] != amt) {
|
|
settings[300] = amt;
|
|
updateVarp(300);
|
|
if (dialogueId != -1)
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
if (inputString.equals("::fps")) {
|
|
fpsOn = !fpsOn;
|
|
}
|
|
|
|
if (inputString.equals("::dumpitems")) {
|
|
File dir = new File("./dump/item_images/");
|
|
|
|
if (!dir.exists()) {
|
|
dir.mkdirs();
|
|
}
|
|
|
|
for (int itemId = 0; itemId < ItemDefinition.itemCount; itemId++) {
|
|
try {
|
|
tabAreaAltered = true;
|
|
|
|
Widget widget = Widget.interfaceCache[3214];
|
|
for (int value = 0; value < 1; value++) {
|
|
widget.inventoryItemId[value] = itemId + 1;
|
|
widget.inventoryAmounts[value] = 1;
|
|
}
|
|
|
|
ItemDefinition item = ItemDefinition.lookup(itemId);
|
|
|
|
Sprite sprite = ItemDefinition.getSprite(itemId, 0, 0);
|
|
|
|
if (item == null) {
|
|
continue;
|
|
}
|
|
|
|
if ((item.name == "Dwarf Remains" || sprite == null) && itemId != 0) {
|
|
continue;
|
|
}
|
|
|
|
File outputfile = new File(dir, item.id + ".png");
|
|
BufferedImage bufferedImage = new BufferedImage(sprite.getMyWidth(),
|
|
sprite.getMyHeight(), BufferedImage.TYPE_INT_RGB);
|
|
bufferedImage.setRGB(0, 0, sprite.getMyWidth(), sprite.getMyHeight(),
|
|
sprite.getMyPixels(), 0, sprite.getMyWidth());
|
|
|
|
Image image = ImageUtils.makeColorTransparent(bufferedImage, Color.BLACK);
|
|
|
|
BufferedImage transparent = ImageUtils.imageToBufferedImage(image);
|
|
|
|
ImageIO.write(transparent, "png", outputfile);
|
|
|
|
} catch (IOException e) {
|
|
}
|
|
}
|
|
}
|
|
|
|
// can open interfaces without it crashing
|
|
if (inputString.startsWith("::int")) {
|
|
String[] split = inputString.split(" ");
|
|
|
|
try {
|
|
int interfaceId = Integer.parseInt(split[1]);
|
|
|
|
Client.openInterfaceId = interfaceId;
|
|
|
|
System.out.println("opening interfaceId: " + interfaceId);
|
|
|
|
} catch (Exception ex) {
|
|
continue;
|
|
}
|
|
|
|
}
|
|
if(inputString.equalsIgnoreCase("::zoom"))
|
|
cameraZoom = cameraZoom-10;
|
|
if (inputString.equals("::roofs"))
|
|
Configuration.enableRoofs = !Configuration.enableRoofs;
|
|
|
|
if (inputString.equals("::ids"))
|
|
Configuration.enableIds = !Configuration.enableIds;
|
|
|
|
if (inputString.startsWith("::finterface")) {
|
|
try {
|
|
String[] args = inputString.split(" ");
|
|
int id1 = Integer.parseInt(args[1]);
|
|
int id2 = Integer.parseInt(args[2]);
|
|
fullscreenInterfaceID = id1;
|
|
openInterfaceId = id2;
|
|
sendMessage("Opened Interface", 0, "");
|
|
} catch (Exception e) {
|
|
sendMessage("Interface Failed to load", 0, "");
|
|
}
|
|
}
|
|
|
|
if (inputString.equals("::music"))
|
|
Configuration.enableMusic = !Configuration.enableMusic;
|
|
|
|
if (inputString.equals("::10xhp")) {
|
|
Configuration.tenXHp = !Configuration.tenXHp;
|
|
loadAllOrbs(frameMode == ScreenMode.FIXED ? 0 : frameWidth - 217);
|
|
}
|
|
|
|
if (inputString.equals("::hp"))
|
|
Configuration.hpAboveHeads = !Configuration.hpAboveHeads;
|
|
|
|
if (inputString.equals("::names"))
|
|
Configuration.namesAboveHeads = !Configuration.namesAboveHeads;
|
|
|
|
if (inputString.equals("::orbs"))
|
|
Configuration.enableOrbs = !Configuration.enableOrbs;
|
|
|
|
if (inputString.equals("::rint")) {
|
|
GameFont gameFont = new GameFont(true, "q8_full", titleArchive);
|
|
GameFont[] fonts = {smallText, regularText, boldText, gameFont};
|
|
FileArchive interfaces = createArchive(3, "interface", "interface", archiveCRCs[3], 35);
|
|
FileArchive graphics = createArchive(4, "2d graphics", "media", archiveCRCs[4], 40);
|
|
Widget.load(interfaces, fonts, graphics);
|
|
System.out.println("Reloaded interfaces.");
|
|
}
|
|
|
|
if (inputString.equals("::fog"))
|
|
Configuration.enableFog = !Configuration.enableFog;
|
|
|
|
if (inputString.equals("::fixed")) {
|
|
frameMode(ScreenMode.FIXED);
|
|
}
|
|
|
|
if (inputString.equals("::osrs")) {
|
|
Configuration.OSRS_GAMEFRAME = true;
|
|
drawRedStones();
|
|
drawSideIcons();
|
|
drawTabArea();
|
|
}
|
|
if (inputString.equals("::06")) {
|
|
Configuration.OSRS_GAMEFRAME = false;
|
|
drawRedStones();
|
|
drawSideIcons();
|
|
drawTabArea();
|
|
}
|
|
|
|
if (inputString.equals("::resize")) {
|
|
frameMode(ScreenMode.RESIZABLE);
|
|
}
|
|
|
|
if (inputString.equals("::full")) {
|
|
frameMode(ScreenMode.FULLSCREEN);
|
|
}
|
|
|
|
if (inputString.equals("::width")) {
|
|
System.out.println(frameWidth);
|
|
}
|
|
|
|
if (inputString.equals("::chat")) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
changeChatArea = !changeChatArea;
|
|
}
|
|
}
|
|
|
|
if (inputString.equals("::tab")) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
changeTabArea = !changeTabArea;
|
|
}
|
|
}
|
|
|
|
if (inputString.equals("::optab")) {
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
transparentTabArea = !transparentTabArea;
|
|
}
|
|
}
|
|
|
|
if (inputString.equals("::height")) {
|
|
System.out.println(frameHeight);
|
|
}
|
|
|
|
if (inputString.equals("::data")) {
|
|
Configuration.clientData = !Configuration.clientData;
|
|
}
|
|
|
|
if (inputString.equals("::noclip")) {
|
|
for (int plane = 0; plane < 4; plane++) {
|
|
for (int x = 1; x < 103; x++) {
|
|
for (int y = 1; y < 103; y++) {
|
|
collisionMaps[plane].adjacencies[x][y] = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (inputString.startsWith("/")) {
|
|
inputString = "::" + inputString;
|
|
}
|
|
|
|
if (inputString.startsWith("::")) {
|
|
// command
|
|
outgoing.writeOpcode(103);
|
|
outgoing.writeByte(inputString.length() - 1);
|
|
outgoing.writeString(inputString.substring(2));
|
|
} else {
|
|
String text = inputString.toLowerCase();
|
|
int colorCode = 0;
|
|
if (text.startsWith("yellow:")) {
|
|
colorCode = 0;
|
|
inputString = inputString.substring(7);
|
|
} else if (text.startsWith("red:")) {
|
|
colorCode = 1;
|
|
inputString = inputString.substring(4);
|
|
} else if (text.startsWith("green:")) {
|
|
colorCode = 2;
|
|
inputString = inputString.substring(6);
|
|
} else if (text.startsWith("cyan:")) {
|
|
colorCode = 3;
|
|
inputString = inputString.substring(5);
|
|
} else if (text.startsWith("purple:")) {
|
|
colorCode = 4;
|
|
inputString = inputString.substring(7);
|
|
} else if (text.startsWith("white:")) {
|
|
colorCode = 5;
|
|
inputString = inputString.substring(6);
|
|
} else if (text.startsWith("flash1:")) {
|
|
colorCode = 6;
|
|
inputString = inputString.substring(7);
|
|
} else if (text.startsWith("flash2:")) {
|
|
colorCode = 7;
|
|
inputString = inputString.substring(7);
|
|
} else if (text.startsWith("flash3:")) {
|
|
colorCode = 8;
|
|
inputString = inputString.substring(7);
|
|
} else if (text.startsWith("glow1:")) {
|
|
colorCode = 9;
|
|
inputString = inputString.substring(6);
|
|
} else if (text.startsWith("glow2:")) {
|
|
colorCode = 10;
|
|
inputString = inputString.substring(6);
|
|
} else if (text.startsWith("glow3:")) {
|
|
colorCode = 11;
|
|
inputString = inputString.substring(6);
|
|
}
|
|
text = inputString.toLowerCase();
|
|
int effectCode = 0;
|
|
if (text.startsWith("wave:")) {
|
|
effectCode = 1;
|
|
inputString = inputString.substring(5);
|
|
} else if (text.startsWith("wave2:")) {
|
|
effectCode = 2;
|
|
inputString = inputString.substring(6);
|
|
} else if (text.startsWith("shake:")) {
|
|
effectCode = 3;
|
|
inputString = inputString.substring(6);
|
|
} else if (text.startsWith("scroll:")) {
|
|
effectCode = 4;
|
|
inputString = inputString.substring(7);
|
|
} else if (text.startsWith("slide:")) {
|
|
effectCode = 5;
|
|
inputString = inputString.substring(6);
|
|
}
|
|
// chat
|
|
outgoing.writeOpcode(4);
|
|
outgoing.writeByte(0);
|
|
int bufPos = outgoing.currentPosition;
|
|
outgoing.writeByteS(effectCode);
|
|
outgoing.writeByteS(colorCode);
|
|
chatBuffer.currentPosition = 0;
|
|
ChatMessageCodec.encode(inputString, chatBuffer);
|
|
outgoing.writeReverseDataA(chatBuffer.payload, 0, chatBuffer.currentPosition);
|
|
outgoing.writeBytes(outgoing.currentPosition - bufPos);
|
|
inputString = ChatMessageCodec.processText(inputString);
|
|
// inputString = Censor.doCensor(inputString);
|
|
localPlayer.spokenText = inputString;
|
|
localPlayer.textColour = colorCode;
|
|
localPlayer.textEffect = effectCode;
|
|
localPlayer.textCycle = 150;
|
|
if (myPrivilege == 2) {
|
|
sendMessage(localPlayer.spokenText, 2, "@cr2@" + localPlayer.name);
|
|
} else if (myPrivilege == 1) {
|
|
sendMessage(localPlayer.spokenText, 2, "@cr1@" + localPlayer.name);
|
|
} else {
|
|
sendMessage(localPlayer.spokenText, 2, localPlayer.name);
|
|
}
|
|
if (publicChatMode == 2) {
|
|
publicChatMode = 3;
|
|
// privacy option
|
|
outgoing.writeOpcode(95);
|
|
outgoing.writeByte(publicChatMode);
|
|
outgoing.writeByte(privateChatMode);
|
|
outgoing.writeByte(tradeMode);
|
|
}
|
|
}
|
|
inputString = "";
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
} while (true);
|
|
}
|
|
|
|
private void buildPublicChat(int j) {
|
|
int l = 0;
|
|
for (int message = 0; message < 500; message++) {
|
|
|
|
if (chatMessages[message] == null) {
|
|
continue;
|
|
}
|
|
|
|
if (chatTypeView != 1) {
|
|
continue;
|
|
}
|
|
|
|
int privacyOptionType = chatTypes[message];
|
|
|
|
String crownName = chatNames[message];
|
|
|
|
int k1 = (70 - l * 14 + 42) + anInt1089 + 4 + 5;
|
|
|
|
if (k1 < -23) {
|
|
break;
|
|
}
|
|
|
|
if (crownName != null && crownName.startsWith("@cr1@")) {
|
|
crownName = crownName.substring(5);
|
|
}
|
|
|
|
if (crownName != null && crownName.startsWith("@cr2@")) {
|
|
crownName = crownName.substring(5);
|
|
}
|
|
|
|
if (crownName != null && crownName.startsWith("@cr3@")) {
|
|
crownName = crownName.substring(5);
|
|
}
|
|
|
|
if ((privacyOptionType == 1 || privacyOptionType == 2) && (privacyOptionType == 1 || publicChatMode == 0
|
|
|| publicChatMode == 1 && isFriendOrSelf(crownName))) {
|
|
if (j > k1 - 14 && j <= k1 && !crownName.equals(localPlayer.name)) {
|
|
if (myPrivilege >= 1) {
|
|
menuActionText[menuActionRow] = "Report abuse @whi@" + crownName;
|
|
menuActionTypes[menuActionRow] = 606;
|
|
menuActionRow++;
|
|
}
|
|
menuActionText[menuActionRow] = "Add ignore @whi@" + crownName;
|
|
menuActionTypes[menuActionRow] = 42;
|
|
menuActionRow++;
|
|
menuActionText[menuActionRow] = "Add friend @whi@" + crownName;
|
|
menuActionTypes[menuActionRow] = 337;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void buildFriendChat(int j) {
|
|
int l = 0;
|
|
for (int i1 = 0; i1 < 500; i1++) {
|
|
if (chatMessages[i1] == null)
|
|
continue;
|
|
if (chatTypeView != 2)
|
|
continue;
|
|
int j1 = chatTypes[i1];
|
|
String s = chatNames[i1];
|
|
int k1 = (70 - l * 14 + 42) + anInt1089 + 4 + 5;
|
|
if (k1 < -23)
|
|
break;
|
|
if (s != null && s.startsWith("@cr1@"))
|
|
s = s.substring(5);
|
|
if (s != null && s.startsWith("@cr2@"))
|
|
s = s.substring(5);
|
|
if (s != null && s.startsWith("@cr3@"))
|
|
s = s.substring(5);
|
|
if ((j1 == 5 || j1 == 6) && (splitPrivateChat == 0 || chatTypeView == 2)
|
|
&& (j1 == 6 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s)))
|
|
l++;
|
|
if ((j1 == 3 || j1 == 7) && (splitPrivateChat == 0 || chatTypeView == 2)
|
|
&& (j1 == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
if (myPrivilege >= 1) {
|
|
menuActionText[menuActionRow] = "Report abuse @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 606;
|
|
menuActionRow++;
|
|
}
|
|
menuActionText[menuActionRow] = "Add ignore @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 42;
|
|
menuActionRow++;
|
|
menuActionText[menuActionRow] = "Add friend @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 337;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void buildDuelorTrade(int j) {
|
|
int l = 0;
|
|
for (int i1 = 0; i1 < 500; i1++) {
|
|
if (chatMessages[i1] == null)
|
|
continue;
|
|
if (chatTypeView != 3 && chatTypeView != 4)
|
|
continue;
|
|
int j1 = chatTypes[i1];
|
|
String s = chatNames[i1];
|
|
int k1 = (70 - l * 14 + 42) + anInt1089 + 4 + 5;
|
|
if (k1 < -23)
|
|
break;
|
|
if (s != null && s.startsWith("@cr1@"))
|
|
s = s.substring(5);
|
|
if (s != null && s.startsWith("@cr2@"))
|
|
s = s.substring(5);
|
|
if (s != null && s.startsWith("@cr3@"))
|
|
s = s.substring(5);
|
|
if (chatTypeView == 3 && j1 == 4 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
menuActionText[menuActionRow] = "Accept trade @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 484;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
if (chatTypeView == 4 && j1 == 8 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
menuActionText[menuActionRow] = "Accept challenge @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 6;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
if (j1 == 12) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
menuActionText[menuActionRow] = "Go-to @blu@" + s;
|
|
menuActionTypes[menuActionRow] = 915;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void buildChatAreaMenu(int j) {
|
|
int l = 0;
|
|
for (int i1 = 0; i1 < 500; i1++) {
|
|
if (chatMessages[i1] == null)
|
|
continue;
|
|
int j1 = chatTypes[i1];
|
|
int k1 = (70 - l * 14 + 42) + anInt1089 + 4 + 5;
|
|
String s = chatNames[i1];
|
|
if (chatTypeView == 1) {
|
|
buildPublicChat(j);
|
|
break;
|
|
}
|
|
if (chatTypeView == 2) {
|
|
buildFriendChat(j);
|
|
break;
|
|
}
|
|
if (chatTypeView == 3 || chatTypeView == 4) {
|
|
buildDuelorTrade(j);
|
|
break;
|
|
}
|
|
if (chatTypeView == 5) {
|
|
break;
|
|
}
|
|
if (s != null && s.startsWith("@cr1@")) {
|
|
s = s.substring(5);
|
|
}
|
|
if (s != null && s.startsWith("@cr2@")) {
|
|
s = s.substring(5);
|
|
}
|
|
if (s != null && s.startsWith("@cr3@")) {
|
|
s = s.substring(5);
|
|
}
|
|
if (j1 == 0)
|
|
l++;
|
|
if ((j1 == 1 || j1 == 2) && (j1 == 1 || publicChatMode == 0 || publicChatMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1 && !s.equals(localPlayer.name)) {
|
|
if (myPrivilege >= 1) {
|
|
menuActionText[menuActionRow] = "Report abuse @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 606;
|
|
menuActionRow++;
|
|
}
|
|
menuActionText[menuActionRow] = "Add ignore @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 42;
|
|
menuActionRow++;
|
|
menuActionText[menuActionRow] = "Add friend @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 337;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
if ((j1 == 3 || j1 == 7) && splitPrivateChat == 0
|
|
&& (j1 == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
if (myPrivilege >= 1) {
|
|
menuActionText[menuActionRow] = "Report abuse @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 606;
|
|
menuActionRow++;
|
|
}
|
|
menuActionText[menuActionRow] = "Add ignore @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 42;
|
|
menuActionRow++;
|
|
menuActionText[menuActionRow] = "Add friend @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 337;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
if (j1 == 4 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
menuActionText[menuActionRow] = "Accept trade @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 484;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
if ((j1 == 5 || j1 == 6) && splitPrivateChat == 0 && privateChatMode < 2)
|
|
l++;
|
|
if (j1 == 8 && (tradeMode == 0 || tradeMode == 1 && isFriendOrSelf(s))) {
|
|
if (j > k1 - 14 && j <= k1) {
|
|
menuActionText[menuActionRow] = "Accept challenge @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 6;
|
|
menuActionRow++;
|
|
}
|
|
l++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public int getXPForLevel(int level) {
|
|
int points = 0;
|
|
int output = 0;
|
|
for (int lvl = 1; lvl <= level; lvl++) {
|
|
points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0));
|
|
if (lvl >= level) {
|
|
return output;
|
|
}
|
|
output = (int) Math.floor(points / 4);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* interface_handle_auto_content
|
|
*/
|
|
private void drawFriendsListOrWelcomeScreen(Widget widget) {
|
|
int index = widget.contentType;
|
|
if (index >= 1 && index <= 100 || index >= 701 && index <= 800) {
|
|
if (index == 1 && friendServerStatus == 0) {
|
|
widget.defaultText = "Loading friend list";
|
|
widget.optionType = 0;
|
|
return;
|
|
}
|
|
if (index == 1 && friendServerStatus == 1) {
|
|
widget.defaultText = "Connecting to friendserver";
|
|
widget.optionType = 0;
|
|
return;
|
|
}
|
|
if (index == 2 && friendServerStatus != 2) {
|
|
widget.defaultText = "Please wait...";
|
|
widget.optionType = 0;
|
|
return;
|
|
}
|
|
int k = friendsCount;
|
|
if (friendServerStatus != 2)
|
|
k = 0;
|
|
if (index > 700)
|
|
index -= 601;
|
|
else
|
|
index--;
|
|
if (index >= k) {
|
|
widget.defaultText = "";
|
|
widget.optionType = 0;
|
|
return;
|
|
} else {
|
|
widget.defaultText = friendsList[index];
|
|
widget.optionType = 1;
|
|
return;
|
|
}
|
|
}
|
|
if (index >= 101 && index <= 200 || index >= 801 && index <= 900) {
|
|
int l = friendsCount;
|
|
if (friendServerStatus != 2)
|
|
l = 0;
|
|
if (index > 800)
|
|
index -= 701;
|
|
else
|
|
index -= 101;
|
|
if (index >= l) {
|
|
widget.defaultText = "";
|
|
widget.optionType = 0;
|
|
return;
|
|
}
|
|
if (friendsNodeIDs[index] == 0)
|
|
widget.defaultText = "@red@Offline";
|
|
else if (friendsNodeIDs[index] == nodeID)
|
|
widget.defaultText = "@gre@Online"/*
|
|
* + (friendsNodeIDs[j] - 9)
|
|
*/;
|
|
else
|
|
widget.defaultText = "@red@Offline"/*
|
|
* + (friendsNodeIDs[j] - 9)
|
|
*/;
|
|
widget.optionType = 1;
|
|
return;
|
|
}
|
|
|
|
if (index == 203) {
|
|
int i1 = friendsCount;
|
|
if (friendServerStatus != 2)
|
|
i1 = 0;
|
|
widget.scrollMax = i1 * 15 + 20;
|
|
if (widget.scrollMax <= widget.height)
|
|
widget.scrollMax = widget.height + 1;
|
|
return;
|
|
}
|
|
if (index >= 401 && index <= 500) {
|
|
if ((index -= 401) == 0 && friendServerStatus == 0) {
|
|
widget.defaultText = "Loading ignore list";
|
|
widget.optionType = 0;
|
|
return;
|
|
}
|
|
if (index == 1 && friendServerStatus == 0) {
|
|
widget.defaultText = "Please wait...";
|
|
widget.optionType = 0;
|
|
return;
|
|
}
|
|
int j1 = ignoreCount;
|
|
if (friendServerStatus == 0)
|
|
j1 = 0;
|
|
if (index >= j1) {
|
|
widget.defaultText = "";
|
|
widget.optionType = 0;
|
|
return;
|
|
} else {
|
|
widget.defaultText = StringUtils.formatUsername(StringUtils.decodeBase37(ignoreListAsLongs[index]));
|
|
widget.optionType = 1;
|
|
return;
|
|
}
|
|
}
|
|
if (index == 503) {
|
|
widget.scrollMax = ignoreCount * 15 + 20;
|
|
if (widget.scrollMax <= widget.height)
|
|
widget.scrollMax = widget.height + 1;
|
|
return;
|
|
}
|
|
if (index == 327) {
|
|
widget.modelRotation1 = 150;
|
|
widget.modelRotation2 = (int) (Math.sin((double) tick / 40D) * 256D) & 0x7ff;
|
|
if (aBoolean1031) {
|
|
for (int k1 = 0; k1 < 7; k1++) {
|
|
int l1 = anIntArray1065[k1];
|
|
if (l1 >= 0 && !IdentityKit.kits[l1].bodyLoaded())
|
|
return;
|
|
}
|
|
|
|
aBoolean1031 = false;
|
|
Model[] aclass30_sub2_sub4_sub6s = new Model[7];
|
|
int i2 = 0;
|
|
for (int j2 = 0; j2 < 7; j2++) {
|
|
int k2 = anIntArray1065[j2];
|
|
if (k2 >= 0)
|
|
aclass30_sub2_sub4_sub6s[i2++] = IdentityKit.kits[k2].bodyModel();
|
|
}
|
|
|
|
Model model = new Model(i2, aclass30_sub2_sub4_sub6s);
|
|
for (int l2 = 0; l2 < 5; l2++)
|
|
if (characterDesignColours[l2] != 0) {
|
|
model.recolor(PLAYER_BODY_RECOLOURS[l2][0],
|
|
PLAYER_BODY_RECOLOURS[l2][characterDesignColours[l2]]);
|
|
if (l2 == 1)
|
|
model.recolor(anIntArray1204[0], anIntArray1204[characterDesignColours[l2]]);
|
|
}
|
|
|
|
model.skin();
|
|
model.applyTransform(Animation.animations[localPlayer.idleAnimation].primaryFrames[0]);
|
|
model.light(64, 850, -30, -50, -30, true);
|
|
widget.defaultMediaType = 5;
|
|
widget.defaultMedia = 0;
|
|
Widget.method208(aBoolean994, model);
|
|
}
|
|
return;
|
|
}
|
|
if (index == 328) {
|
|
Widget rsInterface = widget;
|
|
int verticleTilt = 150;
|
|
int animationSpeed = (int) (Math.sin((double) tick / 40D) * 256D) & 0x7ff;
|
|
rsInterface.modelRotation1 = verticleTilt;
|
|
rsInterface.modelRotation2 = animationSpeed;
|
|
if (aBoolean1031) {
|
|
Model characterDisplay = localPlayer.getAnimatedModel();
|
|
for (int l2 = 0; l2 < 5; l2++)
|
|
if (characterDesignColours[l2] != 0) {
|
|
characterDisplay.recolor(PLAYER_BODY_RECOLOURS[l2][0],
|
|
PLAYER_BODY_RECOLOURS[l2][characterDesignColours[l2]]);
|
|
if (l2 == 1)
|
|
characterDisplay.recolor(anIntArray1204[0], anIntArray1204[characterDesignColours[l2]]);
|
|
}
|
|
int staticFrame = localPlayer.idleAnimation;
|
|
characterDisplay.skin();
|
|
characterDisplay.applyTransform(Animation.animations[staticFrame].primaryFrames[0]);
|
|
// characterDisplay.light(64, 850, -30, -50, -30, true);
|
|
rsInterface.defaultMediaType = 5;
|
|
rsInterface.defaultMedia = 0;
|
|
Widget.method208(aBoolean994, characterDisplay);
|
|
}
|
|
return;
|
|
}
|
|
if (index == 324) {
|
|
if (aClass30_Sub2_Sub1_Sub1_931 == null) {
|
|
aClass30_Sub2_Sub1_Sub1_931 = widget.disabledSprite;
|
|
aClass30_Sub2_Sub1_Sub1_932 = widget.enabledSprite;
|
|
}
|
|
if (maleCharacter) {
|
|
widget.disabledSprite = aClass30_Sub2_Sub1_Sub1_932;
|
|
return;
|
|
} else {
|
|
widget.disabledSprite = aClass30_Sub2_Sub1_Sub1_931;
|
|
return;
|
|
}
|
|
}
|
|
if (index == 325) {
|
|
if (aClass30_Sub2_Sub1_Sub1_931 == null) {
|
|
aClass30_Sub2_Sub1_Sub1_931 = widget.disabledSprite;
|
|
aClass30_Sub2_Sub1_Sub1_932 = widget.enabledSprite;
|
|
}
|
|
if (maleCharacter) {
|
|
widget.disabledSprite = aClass30_Sub2_Sub1_Sub1_931;
|
|
return;
|
|
} else {
|
|
widget.disabledSprite = aClass30_Sub2_Sub1_Sub1_932;
|
|
return;
|
|
}
|
|
}
|
|
if (index == 600) {
|
|
widget.defaultText = reportAbuseInput;
|
|
if (tick % 20 < 10) {
|
|
widget.defaultText += "|";
|
|
return;
|
|
} else {
|
|
widget.defaultText += " ";
|
|
return;
|
|
}
|
|
}
|
|
if (index == 613)
|
|
if (myPrivilege >= 1) {
|
|
if (canMute) {
|
|
widget.textColor = 0xff0000;
|
|
widget.defaultText = "Moderator option: Mute player for 48 hours: <ON>";
|
|
} else {
|
|
widget.textColor = 0xffffff;
|
|
widget.defaultText = "Moderator option: Mute player for 48 hours: <OFF>";
|
|
}
|
|
} else {
|
|
widget.defaultText = "";
|
|
}
|
|
if (index == 650 || index == 655)
|
|
if (anInt1193 != 0) {
|
|
String s;
|
|
if (daysSinceLastLogin == 0)
|
|
s = "earlier today";
|
|
else if (daysSinceLastLogin == 1)
|
|
s = "yesterday";
|
|
else
|
|
s = daysSinceLastLogin + " days ago";
|
|
widget.defaultText = "You last logged in " + s + " from: " + SignLink.dns;
|
|
} else {
|
|
widget.defaultText = "";
|
|
}
|
|
if (index == 651) {
|
|
if (unreadMessages == 0) {
|
|
widget.defaultText = "0 unread messages";
|
|
widget.textColor = 0xffff00;
|
|
}
|
|
if (unreadMessages == 1) {
|
|
widget.defaultText = "1 unread defaultText";
|
|
widget.textColor = 65280;
|
|
}
|
|
if (unreadMessages > 1) {
|
|
widget.defaultText = unreadMessages + " unread messages";
|
|
widget.textColor = 65280;
|
|
}
|
|
}
|
|
if (index == 652)
|
|
if (daysSinceRecovChange == 201) {
|
|
if (membersInt == 1)
|
|
widget.defaultText = "@yel@This is a non-members world: @whi@Since you are a member we";
|
|
else
|
|
widget.defaultText = "";
|
|
} else if (daysSinceRecovChange == 200) {
|
|
widget.defaultText = "You have not yet set any password recovery questions.";
|
|
} else {
|
|
String s1;
|
|
if (daysSinceRecovChange == 0)
|
|
s1 = "Earlier today";
|
|
else if (daysSinceRecovChange == 1)
|
|
s1 = "Yesterday";
|
|
else
|
|
s1 = daysSinceRecovChange + " days ago";
|
|
widget.defaultText = s1 + " you changed your recovery questions";
|
|
}
|
|
if (index == 653)
|
|
if (daysSinceRecovChange == 201) {
|
|
if (membersInt == 1)
|
|
widget.defaultText = "@whi@recommend you use a members world instead. You may use";
|
|
else
|
|
widget.defaultText = "";
|
|
} else if (daysSinceRecovChange == 200)
|
|
widget.defaultText = "We strongly recommend you do so now to secure your account.";
|
|
else
|
|
widget.defaultText = "If you do not remember making this change then cancel it immediately";
|
|
if (index == 654) {
|
|
if (daysSinceRecovChange == 201)
|
|
if (membersInt == 1) {
|
|
widget.defaultText = "@whi@this world but member benefits are unavailable whilst here.";
|
|
return;
|
|
} else {
|
|
widget.defaultText = "";
|
|
return;
|
|
}
|
|
if (daysSinceRecovChange == 200) {
|
|
widget.defaultText = "Do this from the 'account management' area on our front webpage";
|
|
return;
|
|
}
|
|
widget.defaultText = "Do this from the 'account management' area on our front webpage";
|
|
}
|
|
}
|
|
|
|
private void drawSplitPrivateChat() {
|
|
if (splitPrivateChat == 0) {
|
|
return;
|
|
}
|
|
GameFont textDrawingArea = regularText;
|
|
int i = 0;
|
|
if (systemUpdateTime != 0) {
|
|
i = 1;
|
|
}
|
|
for (int j = 0; j < 100; j++) {
|
|
if (chatMessages[j] != null) {
|
|
int k = chatTypes[j];
|
|
String s = chatNames[j];
|
|
byte byte1 = 0;
|
|
if (s != null && s.startsWith("@cr1@")) {
|
|
s = s.substring(5);
|
|
byte1 = 1;
|
|
}
|
|
if (s != null && s.startsWith("@cr2@")) {
|
|
s = s.substring(5);
|
|
byte1 = 2;
|
|
}
|
|
if ((k == 3 || k == 7)
|
|
&& (k == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(s))) {
|
|
int l = 329 - i * 13;
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
l = frameHeight - 170 - i * 13;
|
|
}
|
|
int k1 = 4;
|
|
textDrawingArea.render(0, "From", l, k1);
|
|
textDrawingArea.render(65535, "From", l - 1, k1);
|
|
k1 += textDrawingArea.getTextWidth("From ");
|
|
if (byte1 == 1) {
|
|
modIcons[0].drawSprite(k1, l - 12);
|
|
k1 += 12;
|
|
}
|
|
if (byte1 == 2) {
|
|
modIcons[1].drawSprite(k1, l - 12);
|
|
k1 += 12;
|
|
}
|
|
textDrawingArea.render(0, s + ": " + chatMessages[j], l, k1);
|
|
textDrawingArea.render(65535, s + ": " + chatMessages[j], l - 1, k1);
|
|
if (++i >= 5) {
|
|
return;
|
|
}
|
|
}
|
|
if (k == 5 && privateChatMode < 2) {
|
|
int i1 = 329 - i * 13;
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
i1 = frameHeight - 170 - i * 13;
|
|
}
|
|
textDrawingArea.render(0, chatMessages[j], i1, 4);
|
|
textDrawingArea.render(65535, chatMessages[j], i1 - 1, 4);
|
|
if (++i >= 5) {
|
|
return;
|
|
}
|
|
}
|
|
if (k == 6 && privateChatMode < 2) {
|
|
int j1 = 329 - i * 13;
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
j1 = frameHeight - 170 - i * 13;
|
|
}
|
|
textDrawingArea.render(0, "To " + s + ": " + chatMessages[j], j1, 4);
|
|
textDrawingArea.render(65535, "To " + s + ": " + chatMessages[j], j1 - 1, 4);
|
|
if (++i >= 5) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void sendMessage(String message, int type, String name) {
|
|
|
|
if (type == 0 && dialogueId != -1) {
|
|
clickToContinueString = message;
|
|
super.clickMode3 = 0;
|
|
}
|
|
|
|
if (backDialogueId == -1) {
|
|
updateChatbox = true;
|
|
}
|
|
|
|
for (int index = 499; index > 0; index--) {
|
|
chatTypes[index] = chatTypes[index - 1];
|
|
chatNames[index] = chatNames[index - 1];
|
|
chatMessages[index] = chatMessages[index - 1];
|
|
chatRights[index] = chatRights[index - 1];
|
|
}
|
|
|
|
chatTypes[0] = type;
|
|
chatNames[0] = name;
|
|
chatMessages[0] = message;
|
|
chatRights[0] = rights;
|
|
}
|
|
|
|
private final void minimapHovers() {
|
|
final boolean fixed = frameMode == ScreenMode.FIXED;
|
|
hpHover = fixed
|
|
? hpHover = super.mouseX >= 516 && super.mouseX <= 571 && super.mouseY >= 41 && super.mouseY < 72
|
|
: super.mouseX >= frameWidth - 216 && super.mouseX <= 159 && super.mouseY >= 13 && super.mouseY < 47;
|
|
prayHover = fixed
|
|
? prayHover = super.mouseX >= 518 && super.mouseX <= 572 && super.mouseY >= 85 && super.mouseY < 117
|
|
: super.mouseX >= frameWidth - 207 && super.mouseX <= frameWidth - 151 && super.mouseY >= 105
|
|
&& super.mouseY < 139;
|
|
runHover = fixed
|
|
? runHover = super.mouseX >= 540 && super.mouseX <= 593 && super.mouseY >= 123 && super.mouseY < 154
|
|
: super.mouseX >= frameWidth - 174 && super.mouseX <= frameWidth - 120 && super.mouseY >= 132
|
|
&& super.mouseY < 165;
|
|
worldHover = fixed ? super.mouseX >= 718 && super.mouseX <= 748 && super.mouseY >= 22 && super.mouseY <= 50
|
|
: super.mouseX >= frameWidth - 117 && super.mouseX <= frameWidth - 86 && super.mouseY >= 153
|
|
&& super.mouseY <= 186;
|
|
specialHover = fixed ? super.mouseX >= 670 && super.mouseX <= 727 && super.mouseY >= 133 && super.mouseY <= 164
|
|
: super.mouseX >= frameWidth - 62 && super.mouseX <= frameWidth - 5 && super.mouseY >= 151
|
|
&& super.mouseY <= 184;
|
|
}
|
|
|
|
private void processTabClick() {
|
|
if (super.clickMode3 == 1) {
|
|
if (frameMode == ScreenMode.FIXED || frameMode != ScreenMode.FIXED && !changeTabArea) {
|
|
int xOffset = frameMode == ScreenMode.FIXED ? 0 : frameWidth - 765;
|
|
int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 503;
|
|
for (int i = 0; i < tabClickX.length; i++) {
|
|
if (super.mouseX >= tabClickStart[i] + xOffset
|
|
&& super.mouseX <= tabClickStart[i] + tabClickX[i] + xOffset
|
|
&& super.mouseY >= tabClickY[i] + yOffset && super.mouseY < tabClickY[i] + 37 + yOffset
|
|
&& tabInterfaceIDs[i] != -1) {
|
|
tabId = i;
|
|
tabAreaAltered = true;
|
|
break;
|
|
}
|
|
}
|
|
} else if (changeTabArea && frameWidth < 1000) {
|
|
if (super.saveClickX >= frameWidth - 226 && super.saveClickX <= frameWidth - 195
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[0] != -1) {
|
|
if (tabId == 0) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 0;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 194 && super.saveClickX <= frameWidth - 163
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[1] != -1) {
|
|
if (tabId == 1) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 1;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 162 && super.saveClickX <= frameWidth - 131
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[2] != -1) {
|
|
if (tabId == 2) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 2;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 129 && super.saveClickX <= frameWidth - 98
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[3] != -1) {
|
|
if (tabId == 3) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 3;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 97 && super.saveClickX <= frameWidth - 66
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[4] != -1) {
|
|
if (tabId == 4) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 4;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 65 && super.saveClickX <= frameWidth - 34
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[5] != -1) {
|
|
if (tabId == 5) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 5;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 33 && super.saveClickX <= frameWidth
|
|
&& super.saveClickY >= frameHeight - 72 && super.saveClickY < frameHeight - 40
|
|
&& tabInterfaceIDs[6] != -1) {
|
|
if (tabId == 6) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 6;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
|
|
if (super.saveClickX >= frameWidth - 194 && super.saveClickX <= frameWidth - 163
|
|
&& super.saveClickY >= frameHeight - 37 && super.saveClickY < frameHeight - 0
|
|
&& tabInterfaceIDs[8] != -1) {
|
|
if (tabId == 8) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 8;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 162 && super.saveClickX <= frameWidth - 131
|
|
&& super.saveClickY >= frameHeight - 37 && super.saveClickY < frameHeight - 0
|
|
&& tabInterfaceIDs[9] != -1) {
|
|
if (tabId == 9) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 9;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 129 && super.saveClickX <= frameWidth - 98
|
|
&& super.saveClickY >= frameHeight - 37 && super.saveClickY < frameHeight - 0
|
|
&& tabInterfaceIDs[10] != -1) {
|
|
if (tabId == 7) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 7;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 97 && super.saveClickX <= frameWidth - 66
|
|
&& super.saveClickY >= frameHeight - 37 && super.saveClickY < frameHeight - 0
|
|
&& tabInterfaceIDs[11] != -1) {
|
|
if (tabId == 11) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 11;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 65 && super.saveClickX <= frameWidth - 34
|
|
&& super.saveClickY >= frameHeight - 37 && super.saveClickY < frameHeight - 0
|
|
&& tabInterfaceIDs[12] != -1) {
|
|
if (tabId == 12) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 12;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
if (super.saveClickX >= frameWidth - 33 && super.saveClickX <= frameWidth
|
|
&& super.saveClickY >= frameHeight - 37 && super.saveClickY < frameHeight - 0
|
|
&& tabInterfaceIDs[13] != -1) {
|
|
if (tabId == 13) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 13;
|
|
tabAreaAltered = true;
|
|
|
|
}
|
|
} else if (changeTabArea && frameWidth >= 1000) {
|
|
if (super.mouseY >= frameHeight - 37 && super.mouseY <= frameHeight) {
|
|
if (super.mouseX >= frameWidth - 417 && super.mouseX <= frameWidth - 386) {
|
|
if (tabId == 0) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 0;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 385 && super.mouseX <= frameWidth - 354) {
|
|
if (tabId == 1) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 1;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 353 && super.mouseX <= frameWidth - 322) {
|
|
if (tabId == 2) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 2;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 321 && super.mouseX <= frameWidth - 290) {
|
|
if (tabId == 3) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 3;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 289 && super.mouseX <= frameWidth - 258) {
|
|
if (tabId == 4) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 4;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 257 && super.mouseX <= frameWidth - 226) {
|
|
if (tabId == 5) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 5;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 225 && super.mouseX <= frameWidth - 194) {
|
|
if (tabId == 6) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 6;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 193 && super.mouseX <= frameWidth - 163) {
|
|
if (tabId == 8) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 8;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 162 && super.mouseX <= frameWidth - 131) {
|
|
if (tabId == 9) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 9;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 130 && super.mouseX <= frameWidth - 99) {
|
|
if (tabId == 7) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 7;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 98 && super.mouseX <= frameWidth - 67) {
|
|
if (tabId == 11) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 11;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 66 && super.mouseX <= frameWidth - 45) {
|
|
if (tabId == 12) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 12;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (super.mouseX >= frameWidth - 31 && super.mouseX <= frameWidth) {
|
|
if (tabId == 13) {
|
|
showTabComponents = !showTabComponents;
|
|
} else {
|
|
showTabComponents = true;
|
|
}
|
|
tabId = 13;
|
|
tabAreaAltered = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void setupGameplayScreen() {
|
|
if (chatboxImageProducer != null) {
|
|
return;
|
|
}
|
|
|
|
nullLoader();
|
|
super.fullGameScreen = null;
|
|
topLeft1BackgroundTile = null;
|
|
bottomLeft1BackgroundTile = null;
|
|
loginBoxImageProducer = null;
|
|
loginScreenAccessories = null;
|
|
flameLeftBackground = null;
|
|
flameRightBackground = null;
|
|
bottomLeft0BackgroundTile = null;
|
|
bottomRightImageProducer = null;
|
|
loginMusicImageProducer = null;
|
|
middleLeft1BackgroundTile = null;
|
|
aRSImageProducer_1115 = null;
|
|
chatboxImageProducer = new ProducingGraphicsBuffer(519, 165);// chatback
|
|
minimapImageProducer = new ProducingGraphicsBuffer(249, 168);// mapback
|
|
Rasterizer2D.clear();
|
|
SpriteCache.lookup(19).drawSprite(0, 0);
|
|
tabImageProducer = new ProducingGraphicsBuffer(249, 335);// inventory
|
|
gameScreenImageProducer = new ProducingGraphicsBuffer(512, 334);// gamescreen
|
|
Rasterizer2D.clear();
|
|
chatSettingImageProducer = new ProducingGraphicsBuffer(249, 45);
|
|
welcomeScreenRaised = true;
|
|
}
|
|
|
|
private void refreshMinimap(Sprite sprite, int j, int k) {
|
|
int l = k * k + j * j;
|
|
if (l > 4225 && l < 0x15f90) {
|
|
int i1 = cameraHorizontal + minimapRotation & 0x7ff;
|
|
int j1 = Model.SINE[i1];
|
|
int k1 = Model.COSINE[i1];
|
|
j1 = (j1 * 256) / (minimapZoom + 256);
|
|
k1 = (k1 * 256) / (minimapZoom + 256);
|
|
} else {
|
|
markMinimap(sprite, k, j);
|
|
}
|
|
}
|
|
|
|
public void rightClickChatButtons() {
|
|
if (mouseY >= frameHeight - 22 && mouseY <= frameHeight) {
|
|
if (super.mouseX >= 5 && super.mouseX <= 61) {
|
|
menuActionText[1] = "View All";
|
|
menuActionTypes[1] = 999;
|
|
menuActionRow = 2;
|
|
} else if (super.mouseX >= 71 && super.mouseX <= 127) {
|
|
menuActionText[1] = "View Game";
|
|
menuActionTypes[1] = 998;
|
|
menuActionRow = 2;
|
|
} else if (super.mouseX >= 137 && super.mouseX <= 193) {
|
|
menuActionText[1] = "Hide public";
|
|
menuActionTypes[1] = 997;
|
|
menuActionText[2] = "Off public";
|
|
menuActionTypes[2] = 996;
|
|
menuActionText[3] = "Friends public";
|
|
menuActionTypes[3] = 995;
|
|
menuActionText[4] = "On public";
|
|
menuActionTypes[4] = 994;
|
|
menuActionText[5] = "View public";
|
|
menuActionTypes[5] = 993;
|
|
menuActionRow = 6;
|
|
} else if (super.mouseX >= 203 && super.mouseX <= 259) {
|
|
menuActionText[1] = "Off private";
|
|
menuActionTypes[1] = 992;
|
|
menuActionText[2] = "Friends private";
|
|
menuActionTypes[2] = 991;
|
|
menuActionText[3] = "On private";
|
|
menuActionTypes[3] = 990;
|
|
menuActionText[4] = "View private";
|
|
menuActionTypes[4] = 989;
|
|
menuActionRow = 5;
|
|
} else if (super.mouseX >= 269 && super.mouseX <= 325) {
|
|
menuActionText[1] = "Off clan chat";
|
|
menuActionTypes[1] = 1003;
|
|
menuActionText[2] = "Friends clan chat";
|
|
menuActionTypes[2] = 1002;
|
|
menuActionText[3] = "On clan chat";
|
|
menuActionTypes[3] = 1001;
|
|
menuActionText[4] = "View clan chat";
|
|
menuActionTypes[4] = 1000;
|
|
menuActionRow = 5;
|
|
} else if (super.mouseX >= 335 && super.mouseX <= 391) {
|
|
menuActionText[1] = "Off trade";
|
|
menuActionTypes[1] = 987;
|
|
menuActionText[2] = "Friends trade";
|
|
menuActionTypes[2] = 986;
|
|
menuActionText[3] = "On trade";
|
|
menuActionTypes[3] = 985;
|
|
menuActionText[4] = "View trade";
|
|
menuActionTypes[4] = 984;
|
|
menuActionRow = 5;
|
|
} else if (super.mouseX >= 404 && super.mouseX <= 515) {
|
|
menuActionText[1] = "Report Abuse";
|
|
menuActionTypes[1] = 606;
|
|
menuActionRow = 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void processRightClick() {
|
|
if (activeInterfaceType != 0) {
|
|
return;
|
|
}
|
|
menuActionText[0] = "Cancel";
|
|
menuActionTypes[0] = 1107;
|
|
menuActionRow = 1;
|
|
if (showChatComponents) {
|
|
buildSplitPrivateChatMenu();
|
|
}
|
|
anInt886 = 0;
|
|
anInt1315 = 0;
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
if (super.mouseX > 4 && super.mouseY > 4 && super.mouseX < 516 && super.mouseY < 338) {
|
|
if (openInterfaceId != -1) {
|
|
buildInterfaceMenu(4, Widget.interfaceCache[openInterfaceId], super.mouseX, 4, super.mouseY, 0);
|
|
} else {
|
|
createMenu();
|
|
}
|
|
}
|
|
} else if (frameMode != ScreenMode.FIXED) {
|
|
if (getMousePositions()) {
|
|
if (super.mouseX > (frameWidth / 2) - 356 && super.mouseY > (frameHeight / 2) - 230
|
|
&& super.mouseX < ((frameWidth / 2) + 356) && super.mouseY < (frameHeight / 2) + 230
|
|
&& openInterfaceId != -1) {
|
|
buildInterfaceMenu((frameWidth / 2) - 356, Widget.interfaceCache[openInterfaceId], super.mouseX,
|
|
(frameHeight / 2) - 230, super.mouseY, 0);
|
|
} else {
|
|
createMenu();
|
|
}
|
|
}
|
|
}
|
|
if (anInt886 != anInt1026) {
|
|
anInt1026 = anInt886;
|
|
}
|
|
if (anInt1315 != anInt1129) {
|
|
anInt1129 = anInt1315;
|
|
}
|
|
anInt886 = 0;
|
|
anInt1315 = 0;
|
|
if (!changeTabArea) {
|
|
final int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 503;
|
|
final int xOffset = frameMode == ScreenMode.FIXED ? 0 : frameWidth - 765;
|
|
if (super.mouseX > 548 + xOffset && super.mouseX < 740 + xOffset && super.mouseY > 207 + yOffset
|
|
&& super.mouseY < 468 + yOffset) {
|
|
if (overlayInterfaceId != -1) {
|
|
buildInterfaceMenu(548 + xOffset, Widget.interfaceCache[overlayInterfaceId], super.mouseX,
|
|
207 + yOffset, super.mouseY, 0);
|
|
} else if (tabInterfaceIDs[tabId] != -1) {
|
|
buildInterfaceMenu(548 + xOffset, Widget.interfaceCache[tabInterfaceIDs[tabId]], super.mouseX,
|
|
207 + yOffset, super.mouseY, 0);
|
|
}
|
|
}
|
|
} else if (changeTabArea) {
|
|
final int yOffset = frameWidth >= 1000 ? 37 : 74;
|
|
if (super.mouseX > frameWidth - 197 && super.mouseY > frameHeight - yOffset - 267
|
|
&& super.mouseX < frameWidth - 7 && super.mouseY < frameHeight - yOffset - 7 && showTabComponents) {
|
|
if (overlayInterfaceId != -1) {
|
|
buildInterfaceMenu(frameWidth - 197, Widget.interfaceCache[overlayInterfaceId], super.mouseX,
|
|
frameHeight - yOffset - 267, super.mouseY, 0);
|
|
} else if (tabInterfaceIDs[tabId] != -1) {
|
|
buildInterfaceMenu(frameWidth - 197, Widget.interfaceCache[tabInterfaceIDs[tabId]], super.mouseX,
|
|
frameHeight - yOffset - 267, super.mouseY, 0);
|
|
}
|
|
}
|
|
}
|
|
if (anInt886 != anInt1048) {
|
|
tabAreaAltered = true;
|
|
anInt1048 = anInt886;
|
|
}
|
|
if (anInt1315 != anInt1044) {
|
|
tabAreaAltered = true;
|
|
anInt1044 = anInt1315;
|
|
}
|
|
anInt886 = 0;
|
|
anInt1315 = 0;
|
|
if (super.mouseX > 0 && super.mouseY > (frameMode == ScreenMode.FIXED ? 338 : frameHeight - 165)
|
|
&& super.mouseX < 490 && super.mouseY < (frameMode == ScreenMode.FIXED ? 463 : frameHeight - 40)
|
|
&& showChatComponents) {
|
|
if (backDialogueId != -1) {
|
|
buildInterfaceMenu(20, Widget.interfaceCache[backDialogueId], super.mouseX,
|
|
(frameMode == ScreenMode.FIXED ? 358 : frameHeight - 145), super.mouseY, 0);
|
|
} else if (super.mouseY < (frameMode == ScreenMode.FIXED ? 463 : frameHeight - 40) && super.mouseX < 490) {
|
|
buildChatAreaMenu(super.mouseY - (frameMode == ScreenMode.FIXED ? 338 : frameHeight - 165));
|
|
}
|
|
}
|
|
if (backDialogueId != -1 && anInt886 != anInt1039) {
|
|
updateChatbox = true;
|
|
anInt1039 = anInt886;
|
|
}
|
|
if (backDialogueId != -1 && anInt1315 != anInt1500) {
|
|
updateChatbox = true;
|
|
anInt1500 = anInt1315;
|
|
}
|
|
if (super.mouseX > 4 && super.mouseY > 480 && super.mouseX < 516 && super.mouseY < frameHeight) {
|
|
rightClickChatButtons();
|
|
}
|
|
processMinimapActions();
|
|
boolean flag = false;
|
|
while (!flag) {
|
|
flag = true;
|
|
for (int j = 0; j < menuActionRow - 1; j++) {
|
|
if (menuActionTypes[j] < 1000 && menuActionTypes[j + 1] > 1000) {
|
|
String s = menuActionText[j];
|
|
menuActionText[j] = menuActionText[j + 1];
|
|
menuActionText[j + 1] = s;
|
|
int k = menuActionTypes[j];
|
|
menuActionTypes[j] = menuActionTypes[j + 1];
|
|
menuActionTypes[j + 1] = k;
|
|
k = firstMenuAction[j];
|
|
firstMenuAction[j] = firstMenuAction[j + 1];
|
|
firstMenuAction[j + 1] = k;
|
|
k = secondMenuAction[j];
|
|
secondMenuAction[j] = secondMenuAction[j + 1];
|
|
secondMenuAction[j + 1] = k;
|
|
k = selectedMenuActions[j];
|
|
selectedMenuActions[j] = selectedMenuActions[j + 1];
|
|
selectedMenuActions[j + 1] = k;
|
|
flag = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private int method83(int i, int j, int k) {
|
|
int l = 256 - k;
|
|
return ((i & 0xff00ff) * l + (j & 0xff00ff) * k & 0xff00ff00)
|
|
+ ((i & 0xff00) * l + (j & 0xff00) * k & 0xff0000) >> 8;
|
|
}
|
|
|
|
/**
|
|
* The login method for the 317 protocol.
|
|
*
|
|
* @param name The name of the user trying to login.
|
|
* @param password The password of the user trying to login.
|
|
* @param reconnecting The flag for the user indicating to attempt to reconnect.
|
|
*/
|
|
private void login(String name, String password, boolean reconnecting) {
|
|
SignLink.setError(name);
|
|
try {
|
|
if(name.length() < 3) {
|
|
firstLoginMessage = "";
|
|
secondLoginMessage = "Your username is too short.";
|
|
return;
|
|
}
|
|
if(password.length() < 3) {
|
|
firstLoginMessage = "";
|
|
secondLoginMessage = "Your password is too short.";
|
|
return;
|
|
}
|
|
if (!reconnecting) {
|
|
firstLoginMessage = "";
|
|
secondLoginMessage = "Connecting to server...";
|
|
drawLoginScreen(true);
|
|
}
|
|
socketStream = new BufferedConnection(this, openSocket(43594));
|
|
long encoded = StringUtils.encodeBase37(name);
|
|
int nameHash = (int) (encoded >> 16 & 31L);
|
|
outgoing.currentPosition = 0;
|
|
|
|
outgoing.writeByte(14);
|
|
outgoing.writeByte(nameHash);
|
|
socketStream.queueBytes(2, outgoing.payload);
|
|
|
|
for (int j = 0; j < 8; j++) {
|
|
socketStream.read();
|
|
}
|
|
/*
|
|
* Returns numeric values indicated the state of a users login
|
|
* session.
|
|
*/
|
|
int response = socketStream.read();
|
|
int copy = response;
|
|
|
|
if (response == 0) {
|
|
socketStream.flushInputStream(incoming.payload, 8);
|
|
incoming.currentPosition = 0;
|
|
serverSeed = incoming.readLong(); // aka server session key
|
|
int[] seed = new int[4];
|
|
seed[0] = (int) (Math.random() * 99999999D);
|
|
seed[1] = (int) (Math.random() * 99999999D);
|
|
seed[2] = (int) (serverSeed >> 32);
|
|
seed[3] = (int) serverSeed;
|
|
outgoing.currentPosition = 0;
|
|
outgoing.writeByte(10);
|
|
outgoing.writeInt(seed[0]);
|
|
outgoing.writeInt(seed[1]);
|
|
outgoing.writeInt(seed[2]);
|
|
outgoing.writeInt(seed[3]);
|
|
outgoing.writeInt(314268572);
|
|
outgoing.writeString(name);
|
|
outgoing.writeString(password);
|
|
outgoing.encodeRSA(Configuration.RSA_EXPONENT, Configuration.RSA_MODULUS);
|
|
login.currentPosition = 0;
|
|
login.writeByte(
|
|
reconnecting ? ProtocolConstants.RECONNECTION_OPCODE : ProtocolConstants.NEW_CONNECTION_OPCODE);
|
|
login.writeByte(outgoing.currentPosition + 36 + 1 + 1 + 2); // size
|
|
|
|
login.writeByte(255);
|
|
login.writeShort(1);
|
|
|
|
login.writeByte(0); // client version
|
|
|
|
for (int index = 0; index < 9; index++) {
|
|
login.writeInt(archiveCRCs[index]);
|
|
}
|
|
|
|
login.writeBytes(outgoing.payload, outgoing.currentPosition, 0);
|
|
outgoing.encryption = new IsaacCipher(seed);
|
|
for (int index = 0; index < 4; index++)
|
|
seed[index] += 50;
|
|
|
|
encryption = new IsaacCipher(seed);
|
|
socketStream.queueBytes(login.currentPosition, login.payload);
|
|
response = socketStream.read();
|
|
}
|
|
if (response == 1) {
|
|
try {
|
|
Thread.sleep(2000L);
|
|
} catch (Exception _ex) {
|
|
}
|
|
login(name, password, reconnecting);
|
|
return;
|
|
}
|
|
if (response == 2) {
|
|
botFrame.setTitle(Configuration.CLIENT_NAME + " - ["+StringUtils.capitalizeEachWord(myUsername)+"]");
|
|
myPrivilege = socketStream.read();
|
|
flagged = socketStream.read() == 1;
|
|
aLong1220 = 0L;
|
|
duplicateClickCount = 0;
|
|
mouseDetection.coordsIndex = 0;
|
|
super.awtFocus = true;
|
|
aBoolean954 = true;
|
|
loggedIn = true;
|
|
outgoing.currentPosition = 0;
|
|
incoming.currentPosition = 0;
|
|
opcode = -1;
|
|
lastOpcode = -1;
|
|
secondLastOpcode = -1;
|
|
thirdLastOpcode = -1;
|
|
packetSize = 0;
|
|
timeoutCounter = 0;
|
|
systemUpdateTime = 0;
|
|
anInt1011 = 0;
|
|
hintIconDrawType = 0;
|
|
menuActionRow = 0;
|
|
menuOpen = false;
|
|
super.idleTime = 0;
|
|
for (int index = 0; index < 100; index++)
|
|
chatMessages[index] = null;
|
|
itemSelected = 0;
|
|
spellSelected = 0;
|
|
loadingStage = 0;
|
|
trackCount = 0;
|
|
setNorth();
|
|
minimapState = 0;
|
|
anInt985 = -1;
|
|
destinationX = 0;
|
|
destY = 0;
|
|
playerCount = 0;
|
|
npcCount = 0;
|
|
for (int index = 0; index < maxPlayers; index++) {
|
|
players[index] = null;
|
|
playerSynchronizationBuffers[index] = null;
|
|
}
|
|
for (int index = 0; index < 16384; index++)
|
|
npcs[index] = null;
|
|
localPlayer = players[internalLocalPlayerIndex] = new Player();
|
|
projectiles.clear();
|
|
incompleteAnimables.clear();
|
|
for (int z = 0; z < 4; z++) {
|
|
for (int x = 0; x < 104; x++) {
|
|
for (int y = 0; y < 104; y++)
|
|
groundItems[z][x][y] = null;
|
|
}
|
|
}
|
|
spawns = new Deque();
|
|
fullscreenInterfaceID = -1;
|
|
friendServerStatus = 0;
|
|
friendsCount = 0;
|
|
dialogueId = -1;
|
|
backDialogueId = -1;
|
|
openInterfaceId = -1;
|
|
overlayInterfaceId = -1;
|
|
openWalkableInterface = -1;
|
|
continuedDialogue = false;
|
|
tabId = 3;
|
|
inputDialogState = 0;
|
|
menuOpen = false;
|
|
messagePromptRaised = false;
|
|
clickToContinueString = null;
|
|
multicombat = 0;
|
|
flashingSidebarId = -1;
|
|
maleCharacter = true;
|
|
changeCharacterGender();
|
|
for (int index = 0; index < 5; index++)
|
|
characterDesignColours[index] = 0;
|
|
for (int index = 0; index < 5; index++) {
|
|
playerOptions[index] = null;
|
|
playerOptionsHighPriority[index] = false;
|
|
}
|
|
anInt1175 = 0;
|
|
anInt1134 = 0;
|
|
anInt986 = 0;
|
|
anInt1288 = 0;
|
|
anInt924 = 0;
|
|
anInt1188 = 0;
|
|
anInt1155 = 0;
|
|
anInt1226 = 0;
|
|
sendConfiguration(429, 1);
|
|
this.stopMidi();
|
|
setupGameplayScreen();
|
|
return;
|
|
}
|
|
if (response == 3) {
|
|
firstLoginMessage = "";
|
|
secondLoginMessage = "Invalid username or password.";
|
|
return;
|
|
}
|
|
if (response == 4) {
|
|
firstLoginMessage = "Your account has been disabled.";
|
|
secondLoginMessage = "Please check your defaultText-center for details.";
|
|
return;
|
|
}
|
|
if (response == 5) {
|
|
firstLoginMessage = "Your account is already logged in.";
|
|
secondLoginMessage = "Try again in 60 secs...";
|
|
return;
|
|
}
|
|
if (response == 6) {
|
|
firstLoginMessage = Configuration.CLIENT_NAME + " has been updated!";
|
|
secondLoginMessage = "Please reload this page.";
|
|
return;
|
|
}
|
|
if (response == 7) {
|
|
firstLoginMessage = "This world is full.";
|
|
secondLoginMessage = "Please use a different world.";
|
|
return;
|
|
}
|
|
if (response == 8) {
|
|
firstLoginMessage = "Unable to connect.";
|
|
secondLoginMessage = "Login server offline.";
|
|
return;
|
|
}
|
|
if (response == 9) {
|
|
firstLoginMessage = "Login limit exceeded.";
|
|
secondLoginMessage = "Too many connections from your address.";
|
|
return;
|
|
}
|
|
if (response == 10) {
|
|
firstLoginMessage = "Unable to connect.";
|
|
secondLoginMessage = "Bad session id.";
|
|
return;
|
|
}
|
|
if (response == 11) {
|
|
secondLoginMessage = "Login server rejected session.";
|
|
secondLoginMessage = "Please try again.";
|
|
return;
|
|
}
|
|
if (response == 12) {
|
|
firstLoginMessage = "You need a members account to login to this world.";
|
|
secondLoginMessage = "Please subscribe, or use a different world.";
|
|
return;
|
|
}
|
|
if (response == 13) {
|
|
firstLoginMessage = "Could not complete login.";
|
|
secondLoginMessage = "Please try using a different world.";
|
|
return;
|
|
}
|
|
if (response == 14) {
|
|
firstLoginMessage = "The server is being updated.";
|
|
secondLoginMessage = "Please wait 1 minute and try again.";
|
|
return;
|
|
}
|
|
if (response == 15) {
|
|
loggedIn = true;
|
|
outgoing.currentPosition = 0;
|
|
incoming.currentPosition = 0;
|
|
opcode = -1;
|
|
lastOpcode = -1;
|
|
secondLastOpcode = -1;
|
|
thirdLastOpcode = -1;
|
|
packetSize = 0;
|
|
timeoutCounter = 0;
|
|
systemUpdateTime = 0;
|
|
menuActionRow = 0;
|
|
menuOpen = false;
|
|
loadingStartTime = System.currentTimeMillis();
|
|
return;
|
|
}
|
|
if (response == 16) {
|
|
firstLoginMessage = "Login attempts exceeded.";
|
|
secondLoginMessage = "Please wait 1 minute and try again.";
|
|
return;
|
|
}
|
|
if (response == 17) {
|
|
firstLoginMessage = "You are standing in a members-only area.";
|
|
secondLoginMessage = "To play on this world move to a free area first";
|
|
return;
|
|
}
|
|
if (response == 20) {
|
|
firstLoginMessage = "Invalid loginserver requested";
|
|
secondLoginMessage = "Please try using a different world.";
|
|
return;
|
|
}
|
|
if (response == 21) {
|
|
for (int k1 = socketStream.read(); k1 >= 0; k1--) {
|
|
firstLoginMessage = "You have only just left another world";
|
|
secondLoginMessage = "Your profile will be transferred in: " + k1 + " seconds";
|
|
drawLoginScreen(true);
|
|
try {
|
|
Thread.sleep(1000L);
|
|
} catch (Exception _ex) {
|
|
}
|
|
}
|
|
login(name, password, reconnecting);
|
|
return;
|
|
}
|
|
if (response == 22) {
|
|
firstLoginMessage = "Your computer has been UUID banned.";
|
|
secondLoginMessage = "Please appeal on the forums.";
|
|
return;
|
|
}
|
|
if (response == -1) {
|
|
if (copy == 0) {
|
|
if (loginFailures < 2) {
|
|
try {
|
|
Thread.sleep(2000L);
|
|
} catch (Exception _ex) {
|
|
}
|
|
loginFailures++;
|
|
login(name, password, reconnecting);
|
|
return;
|
|
} else {
|
|
firstLoginMessage = "No response from loginserver";
|
|
secondLoginMessage = "Please wait 1 minute and try again.";
|
|
return;
|
|
}
|
|
} else {
|
|
firstLoginMessage = "No response from server";
|
|
secondLoginMessage = "Please try using a different world.";
|
|
return;
|
|
}
|
|
} else {
|
|
System.out.println("response:" + response);
|
|
firstLoginMessage = "Unexpected server response";
|
|
secondLoginMessage = "Please try using a different world.";
|
|
return;
|
|
}
|
|
} catch (IOException _ex) {
|
|
firstLoginMessage = "";
|
|
} catch (Exception e) {
|
|
System.out.println("Error while generating uid. Skipping step.");
|
|
e.printStackTrace();
|
|
}
|
|
secondLoginMessage = "Error connecting to server.";
|
|
}
|
|
|
|
public boolean doWalkTo(int type, int j, int k, int i1, int j1, int k1, int l1, int i2, int j2, boolean flag, int k2) {
|
|
byte byte0 = 104;
|
|
byte byte1 = 104;
|
|
for (int l2 = 0; l2 < byte0; l2++) {
|
|
for (int i3 = 0; i3 < byte1; i3++) {
|
|
anIntArrayArray901[l2][i3] = 0;
|
|
anIntArrayArray825[l2][i3] = 0x5f5e0ff;
|
|
}
|
|
}
|
|
int j3 = j2;
|
|
int k3 = j1;
|
|
anIntArrayArray901[j2][j1] = 99;
|
|
anIntArrayArray825[j2][j1] = 0;
|
|
int l3 = 0;
|
|
int i4 = 0;
|
|
bigX[l3] = j2;
|
|
bigY[l3++] = j1;
|
|
boolean flag1 = false;
|
|
int j4 = bigX.length;
|
|
int[][] ai = collisionMaps[plane].adjacencies;
|
|
while (i4 != l3) {
|
|
j3 = bigX[i4];
|
|
k3 = bigY[i4];
|
|
i4 = (i4 + 1) % j4;
|
|
if (j3 == k2 && k3 == i2) {
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
if (i1 != 0) {
|
|
if ((i1 < 5 || i1 == 10) && collisionMaps[plane].method219(k2, j3, k3, j, i1 - 1, i2)) {
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
if (i1 < 10 && collisionMaps[plane].method220(k2, i2, k3, i1 - 1, j, j3)) {
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (k1 != 0 && k != 0 && collisionMaps[plane].method221(i2, k2, j3, k, l1, k1, k3)) {
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
int l4 = anIntArrayArray825[j3][k3] + 1;
|
|
if (j3 > 0 && anIntArrayArray901[j3 - 1][k3] == 0 && (ai[j3 - 1][k3] & 0x1280108) == 0) {
|
|
bigX[l3] = j3 - 1;
|
|
bigY[l3] = k3;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3 - 1][k3] = 2;
|
|
anIntArrayArray825[j3 - 1][k3] = l4;
|
|
}
|
|
if (j3 < byte0 - 1 && anIntArrayArray901[j3 + 1][k3] == 0 && (ai[j3 + 1][k3] & 0x1280180) == 0) {
|
|
bigX[l3] = j3 + 1;
|
|
bigY[l3] = k3;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3 + 1][k3] = 8;
|
|
anIntArrayArray825[j3 + 1][k3] = l4;
|
|
}
|
|
if (k3 > 0 && anIntArrayArray901[j3][k3 - 1] == 0 && (ai[j3][k3 - 1] & 0x1280102) == 0) {
|
|
bigX[l3] = j3;
|
|
bigY[l3] = k3 - 1;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3][k3 - 1] = 1;
|
|
anIntArrayArray825[j3][k3 - 1] = l4;
|
|
}
|
|
if (k3 < byte1 - 1 && anIntArrayArray901[j3][k3 + 1] == 0 && (ai[j3][k3 + 1] & 0x1280120) == 0) {
|
|
bigX[l3] = j3;
|
|
bigY[l3] = k3 + 1;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3][k3 + 1] = 4;
|
|
anIntArrayArray825[j3][k3 + 1] = l4;
|
|
}
|
|
if (j3 > 0 && k3 > 0 && anIntArrayArray901[j3 - 1][k3 - 1] == 0 && (ai[j3 - 1][k3 - 1] & 0x128010e) == 0
|
|
&& (ai[j3 - 1][k3] & 0x1280108) == 0 && (ai[j3][k3 - 1] & 0x1280102) == 0) {
|
|
bigX[l3] = j3 - 1;
|
|
bigY[l3] = k3 - 1;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3 - 1][k3 - 1] = 3;
|
|
anIntArrayArray825[j3 - 1][k3 - 1] = l4;
|
|
}
|
|
if (j3 < byte0 - 1 && k3 > 0 && anIntArrayArray901[j3 + 1][k3 - 1] == 0
|
|
&& (ai[j3 + 1][k3 - 1] & 0x1280183) == 0 && (ai[j3 + 1][k3] & 0x1280180) == 0
|
|
&& (ai[j3][k3 - 1] & 0x1280102) == 0) {
|
|
bigX[l3] = j3 + 1;
|
|
bigY[l3] = k3 - 1;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3 + 1][k3 - 1] = 9;
|
|
anIntArrayArray825[j3 + 1][k3 - 1] = l4;
|
|
}
|
|
if (j3 > 0 && k3 < byte1 - 1 && anIntArrayArray901[j3 - 1][k3 + 1] == 0
|
|
&& (ai[j3 - 1][k3 + 1] & 0x1280138) == 0 && (ai[j3 - 1][k3] & 0x1280108) == 0
|
|
&& (ai[j3][k3 + 1] & 0x1280120) == 0) {
|
|
bigX[l3] = j3 - 1;
|
|
bigY[l3] = k3 + 1;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3 - 1][k3 + 1] = 6;
|
|
anIntArrayArray825[j3 - 1][k3 + 1] = l4;
|
|
}
|
|
if (j3 < byte0 - 1 && k3 < byte1 - 1 && anIntArrayArray901[j3 + 1][k3 + 1] == 0
|
|
&& (ai[j3 + 1][k3 + 1] & 0x12801e0) == 0 && (ai[j3 + 1][k3] & 0x1280180) == 0
|
|
&& (ai[j3][k3 + 1] & 0x1280120) == 0) {
|
|
bigX[l3] = j3 + 1;
|
|
bigY[l3] = k3 + 1;
|
|
l3 = (l3 + 1) % j4;
|
|
anIntArrayArray901[j3 + 1][k3 + 1] = 12;
|
|
anIntArrayArray825[j3 + 1][k3 + 1] = l4;
|
|
}
|
|
}
|
|
anInt1264 = 0;
|
|
if (!flag1) {
|
|
if (flag) {
|
|
int i5 = 100;
|
|
for (int k5 = 1; k5 < 2; k5++) {
|
|
for (int i6 = k2 - k5; i6 <= k2 + k5; i6++) {
|
|
for (int l6 = i2 - k5; l6 <= i2 + k5; l6++) {
|
|
if (i6 >= 0 && l6 >= 0 && i6 < 104 && l6 < 104 && anIntArrayArray825[i6][l6] < i5) {
|
|
i5 = anIntArrayArray825[i6][l6];
|
|
j3 = i6;
|
|
k3 = l6;
|
|
anInt1264 = 1;
|
|
flag1 = true;
|
|
}
|
|
}
|
|
}
|
|
if (flag1)
|
|
break;
|
|
}
|
|
}
|
|
if (!flag1)
|
|
return false;
|
|
}
|
|
i4 = 0;
|
|
bigX[i4] = j3;
|
|
bigY[i4++] = k3;
|
|
int l5;
|
|
for (int j5 = l5 = anIntArrayArray901[j3][k3]; j3 != j2 || k3 != j1; j5 = anIntArrayArray901[j3][k3]) {
|
|
if (j5 != l5) {
|
|
l5 = j5;
|
|
bigX[i4] = j3;
|
|
bigY[i4++] = k3;
|
|
}
|
|
if ((j5 & 2) != 0)
|
|
j3++;
|
|
else if ((j5 & 8) != 0)
|
|
j3--;
|
|
if ((j5 & 1) != 0)
|
|
k3++;
|
|
else if ((j5 & 4) != 0)
|
|
k3--;
|
|
}
|
|
if (i4 > 0) {
|
|
int k4 = i4;
|
|
if (k4 > 25)
|
|
k4 = 25;
|
|
i4--;
|
|
int k6 = bigX[i4];
|
|
int i7 = bigY[i4];
|
|
anInt1288 += k4;
|
|
if (anInt1288 >= 92) {
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(36);
|
|
outgoing.writeInt(0);
|
|
anInt1288 = 0;
|
|
}
|
|
if (type == 0) {
|
|
// regular walk
|
|
outgoing.writeOpcode(164);
|
|
outgoing.writeByte(k4 + k4 + 3);
|
|
}
|
|
if (type == 1) {
|
|
// map walk
|
|
outgoing.writeOpcode(248);
|
|
outgoing.writeByte(k4 + k4 + 3 + 14);
|
|
}
|
|
if (type == 2) {
|
|
// walk on command
|
|
outgoing.writeOpcode(98);
|
|
outgoing.writeByte(k4 + k4 + 3);
|
|
}
|
|
outgoing.writeLEShortA(k6 + regionBaseX);
|
|
destinationX = bigX[0];
|
|
destY = bigY[0];
|
|
for (int j7 = 1; j7 < k4; j7++) {
|
|
i4--;
|
|
outgoing.writeByte(bigX[i4] - k6);
|
|
outgoing.writeByte(bigY[i4] - i7);
|
|
}
|
|
outgoing.writeLEShort(i7 + regionBaseY);
|
|
outgoing.writeNegatedByte(super.keyArray[5] != 1 ? 0 : 1);
|
|
return true;
|
|
}
|
|
return type != 1;
|
|
}
|
|
|
|
private void npcUpdateMask(Buffer stream) {
|
|
for (int j = 0; j < mobsAwaitingUpdateCount; j++) {
|
|
int k = mobsAwaitingUpdate[j];
|
|
Npc npc = npcs[k];
|
|
int mask = stream.readUnsignedByte();
|
|
if ((mask & 0x10) != 0) {
|
|
int i1 = stream.readLEUShort();
|
|
if (i1 == 65535)
|
|
i1 = -1;
|
|
int i2 = stream.readUnsignedByte();
|
|
if (i1 == npc.emoteAnimation && i1 != -1) {
|
|
int l2 = Animation.animations[i1].replayMode;
|
|
if (l2 == 1) {
|
|
npc.displayedEmoteFrames = 0;
|
|
npc.emoteTimeRemaining = 0;
|
|
npc.animationDelay = i2;
|
|
npc.currentAnimationLoops = 0;
|
|
}
|
|
if (l2 == 2)
|
|
npc.currentAnimationLoops = 0;
|
|
} else if (i1 == -1 || npc.emoteAnimation == -1
|
|
|| Animation.animations[i1].priority >= Animation.animations[npc.emoteAnimation].priority) {
|
|
npc.emoteAnimation = i1;
|
|
npc.displayedEmoteFrames = 0;
|
|
npc.emoteTimeRemaining = 0;
|
|
npc.animationDelay = i2;
|
|
npc.currentAnimationLoops = 0;
|
|
npc.anInt1542 = npc.remainingPath;
|
|
}
|
|
}
|
|
if ((mask & 8) != 0) {
|
|
int damage = stream.readUByteA();
|
|
int type = stream.readNegUByte();
|
|
npc.updateHitData(type, damage, tick);
|
|
npc.loopCycleStatus = tick + 300;
|
|
npc.currentHealth = stream.readUByteA();
|
|
npc.maxHealth = stream.readUnsignedByte();
|
|
}
|
|
if ((mask & 0x80) != 0) {
|
|
npc.graphic = stream.readUShort();
|
|
int k1 = stream.readInt();
|
|
npc.graphicHeight = k1 >> 16;
|
|
npc.graphicDelay = tick + (k1 & 0xffff);
|
|
npc.currentAnimation = 0;
|
|
npc.anInt1522 = 0;
|
|
if (npc.graphicDelay > tick)
|
|
npc.currentAnimation = -1;
|
|
if (npc.graphic == 65535)
|
|
npc.graphic = -1;
|
|
}
|
|
if ((mask & 0x20) != 0) {
|
|
npc.interactingEntity = stream.readUShort();
|
|
if (npc.interactingEntity == 65535)
|
|
npc.interactingEntity = -1;
|
|
}
|
|
if ((mask & 1) != 0) {
|
|
npc.spokenText = stream.readString();
|
|
npc.textCycle = 100;
|
|
}
|
|
if ((mask & 0x40) != 0) {
|
|
int damage = stream.readNegUByte();
|
|
int type = stream.readUByteS();
|
|
npc.updateHitData(type, damage, tick);
|
|
npc.loopCycleStatus = tick + 300;
|
|
npc.currentHealth = stream.readUByteS();
|
|
npc.maxHealth = stream.readNegUByte();
|
|
}
|
|
if ((mask & 2) != 0) {
|
|
npc.desc = NpcDefinition.lookup(stream.readLEUShortA());
|
|
npc.size = npc.desc.size;
|
|
npc.degreesToTurn = npc.desc.degreesToTurn;
|
|
npc.walkAnimIndex = npc.desc.walkAnim;
|
|
npc.turn180AnimIndex = npc.desc.turn180AnimIndex;
|
|
npc.turn90CWAnimIndex = npc.desc.turn90CWAnimIndex;
|
|
npc.turn90CCWAnimIndex = npc.desc.turn90CCWAnimIndex;
|
|
npc.idleAnimation = npc.desc.standAnim;
|
|
}
|
|
if ((mask & 4) != 0) {
|
|
npc.faceX = stream.readLEUShort();
|
|
npc.faceY = stream.readLEUShort();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void buildAtNPCMenu(NpcDefinition entityDef, int i, int j, int k) {
|
|
if (openInterfaceId == 15244) {
|
|
return;
|
|
}
|
|
if (menuActionRow >= 400)
|
|
return;
|
|
if (entityDef.childrenIDs != null)
|
|
entityDef = entityDef.morph();
|
|
if (entityDef == null)
|
|
return;
|
|
if (!entityDef.clickable)
|
|
return;
|
|
String s = entityDef.name;
|
|
|
|
if (entityDef.combatLevel != 0)
|
|
s = s + combatDiffColor(localPlayer.combatLevel, entityDef.combatLevel) + " (level-" + entityDef.combatLevel
|
|
+ ")";
|
|
if (itemSelected == 1) {
|
|
menuActionText[menuActionRow] = "Use " + selectedItemName + " with @yel@" + s;
|
|
menuActionTypes[menuActionRow] = 582;
|
|
selectedMenuActions[menuActionRow] = i;
|
|
firstMenuAction[menuActionRow] = k;
|
|
secondMenuAction[menuActionRow] = j;
|
|
menuActionRow++;
|
|
return;
|
|
}
|
|
if (spellSelected == 1) {
|
|
if ((spellUsableOn & 2) == 2) {
|
|
menuActionText[menuActionRow] = spellTooltip + " @yel@" + s;
|
|
menuActionTypes[menuActionRow] = 413;
|
|
selectedMenuActions[menuActionRow] = i;
|
|
firstMenuAction[menuActionRow] = k;
|
|
secondMenuAction[menuActionRow] = j;
|
|
menuActionRow++;
|
|
}
|
|
} else {
|
|
if (entityDef.actions != null) {
|
|
for (int l = 4; l >= 0; l--)
|
|
if (entityDef.actions[l] != null && !entityDef.actions[l].equalsIgnoreCase("attack")) {
|
|
menuActionText[menuActionRow] = entityDef.actions[l] + " @yel@" + s;
|
|
if (l == 0)
|
|
menuActionTypes[menuActionRow] = 20;
|
|
if (l == 1)
|
|
menuActionTypes[menuActionRow] = 412;
|
|
if (l == 2)
|
|
menuActionTypes[menuActionRow] = 225;
|
|
if (l == 3)
|
|
menuActionTypes[menuActionRow] = 965;
|
|
if (l == 4)
|
|
menuActionTypes[menuActionRow] = 478;
|
|
selectedMenuActions[menuActionRow] = i;
|
|
firstMenuAction[menuActionRow] = k;
|
|
secondMenuAction[menuActionRow] = j;
|
|
menuActionRow++;
|
|
}
|
|
|
|
}
|
|
if (entityDef.actions != null) {
|
|
for (int i1 = 4; i1 >= 0; i1--)
|
|
if (entityDef.actions[i1] != null && entityDef.actions[i1].equalsIgnoreCase("attack")) {
|
|
char c = '\0';
|
|
if (entityDef.combatLevel > localPlayer.combatLevel)
|
|
c = '\u07D0';
|
|
menuActionText[menuActionRow] = entityDef.actions[i1] + " @yel@" + s;
|
|
if (i1 == 0)
|
|
menuActionTypes[menuActionRow] = 20 + c;
|
|
if (i1 == 1)
|
|
menuActionTypes[menuActionRow] = 412 + c;
|
|
if (i1 == 2)
|
|
menuActionTypes[menuActionRow] = 225 + c;
|
|
if (i1 == 3)
|
|
menuActionTypes[menuActionRow] = 965 + c;
|
|
if (i1 == 4)
|
|
menuActionTypes[menuActionRow] = 478 + c;
|
|
selectedMenuActions[menuActionRow] = i;
|
|
firstMenuAction[menuActionRow] = k;
|
|
secondMenuAction[menuActionRow] = j;
|
|
menuActionRow++;
|
|
}
|
|
|
|
}
|
|
if (Configuration.enableIds && (myPrivilege >= 2 && myPrivilege <= 3)) {
|
|
menuActionText[menuActionRow] = "Examine @yel@" + s + " @gre@(@whi@" + entityDef.interfaceType
|
|
+ "@gre@)";
|
|
} else {
|
|
menuActionText[menuActionRow] = "Examine @yel@" + s;
|
|
}
|
|
menuActionTypes[menuActionRow] = 1025;
|
|
selectedMenuActions[menuActionRow] = i;
|
|
firstMenuAction[menuActionRow] = k;
|
|
secondMenuAction[menuActionRow] = j;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
|
|
private void buildAtPlayerMenu(int i, int j, Player player, int k) {
|
|
if (openInterfaceId == 15244) {
|
|
return;
|
|
}
|
|
if (player == localPlayer)
|
|
return;
|
|
if (menuActionRow >= 400)
|
|
return;
|
|
String s;
|
|
if (player.skill == 0)
|
|
s = player.name + combatDiffColor(localPlayer.combatLevel, player.combatLevel) + " (level-"
|
|
+ player.combatLevel + ")";
|
|
else
|
|
s = player.name + " (skill-" + player.skill + ")";
|
|
if (itemSelected == 1) {
|
|
menuActionText[menuActionRow] = "Use " + selectedItemName + " with @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 491;
|
|
selectedMenuActions[menuActionRow] = j;
|
|
firstMenuAction[menuActionRow] = i;
|
|
secondMenuAction[menuActionRow] = k;
|
|
menuActionRow++;
|
|
} else if (spellSelected == 1) {
|
|
if ((spellUsableOn & 8) == 8) {
|
|
menuActionText[menuActionRow] = spellTooltip + " @whi@" + s;
|
|
menuActionTypes[menuActionRow] = 365;
|
|
selectedMenuActions[menuActionRow] = j;
|
|
firstMenuAction[menuActionRow] = i;
|
|
secondMenuAction[menuActionRow] = k;
|
|
menuActionRow++;
|
|
}
|
|
} else {
|
|
for (int type = 4; type >= 0; type--) {
|
|
if (playerOptions[type] != null) {
|
|
menuActionText[menuActionRow] = playerOptions[type] + " @whi@" + s;
|
|
char c = '\0';
|
|
if (playerOptions[type].equalsIgnoreCase("attack")) {
|
|
if (player.combatLevel > localPlayer.combatLevel)
|
|
c = '\u07D0';
|
|
if (localPlayer.team != 0 && player.team != 0)
|
|
if (localPlayer.team == player.team) {
|
|
c = '\u07D0';
|
|
} else {
|
|
c = '\0';
|
|
}
|
|
} else if (playerOptionsHighPriority[type])
|
|
c = '\u07D0';
|
|
if (type == 0) {
|
|
menuActionTypes[menuActionRow] = 561 + c;
|
|
}
|
|
if (type == 1) {
|
|
menuActionTypes[menuActionRow] = 779 + c;
|
|
}
|
|
if (type == 2) {
|
|
menuActionTypes[menuActionRow] = 27 + c;
|
|
}
|
|
if (type == 3) {
|
|
menuActionTypes[menuActionRow] = 577 + c;
|
|
}
|
|
if (type == 4) {
|
|
menuActionTypes[menuActionRow] = 729 + c;
|
|
}
|
|
selectedMenuActions[menuActionRow] = j;
|
|
firstMenuAction[menuActionRow] = i;
|
|
secondMenuAction[menuActionRow] = k;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
}
|
|
for (int row = 0; row < menuActionRow; row++) {
|
|
if (menuActionTypes[row] == 519) {
|
|
menuActionText[row] = "Walk here @whi@" + s;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void method89(SpawnedObject class30_sub1) {
|
|
int i = 0;
|
|
int j = -1;
|
|
int k = 0;
|
|
int l = 0;
|
|
if (class30_sub1.group == 0)
|
|
i = scene.getWallObjectUid(class30_sub1.plane, class30_sub1.x, class30_sub1.y);
|
|
if (class30_sub1.group == 1)
|
|
i = scene.getWallDecorationUid(class30_sub1.plane, class30_sub1.x, class30_sub1.y);
|
|
if (class30_sub1.group == 2)
|
|
i = scene.getGameObjectUid(class30_sub1.plane, class30_sub1.x, class30_sub1.y);
|
|
if (class30_sub1.group == 3)
|
|
i = scene.getGroundDecorationUid(class30_sub1.plane, class30_sub1.x, class30_sub1.y);
|
|
if (i != 0) {
|
|
int i1 = scene.getMask(class30_sub1.plane, class30_sub1.x, class30_sub1.y, i);
|
|
j = i >> 14 & 0x7fff;
|
|
k = i1 & 0x1f;
|
|
l = i1 >> 6;
|
|
}
|
|
class30_sub1.getPreviousId = j;
|
|
class30_sub1.previousType = k;
|
|
class30_sub1.previousOrientation = l;
|
|
}
|
|
|
|
void startUp() {
|
|
drawLoadingText(20, "Starting up");
|
|
SpriteCache.load();
|
|
if (SignLink.cache_dat != null) {
|
|
for (int i = 0; i < 5; i++)
|
|
indices[i] = new FileStore(SignLink.cache_dat, SignLink.indices[i], i + 1);
|
|
}
|
|
try {
|
|
|
|
if (Configuration.useJaggrab) {
|
|
requestCrcs();
|
|
}
|
|
titleArchive = createArchive(1, "title screen", "title", archiveCRCs[1], 25);
|
|
smallText = new GameFont(false, "p11_full", titleArchive);
|
|
regularText = new GameFont(false, "p12_full", titleArchive);
|
|
boldText = new GameFont(false, "b12_full", titleArchive);
|
|
newSmallFont = new RSFont(false, "p11_full", titleArchive);
|
|
newRegularFont = new RSFont(false, "p12_full", titleArchive);
|
|
newBoldFont = new RSFont(false, "b12_full", titleArchive);
|
|
newFancyFont = new RSFont(true, "q8_full", titleArchive);
|
|
gameFont = new GameFont(true, "q8_full", titleArchive);
|
|
drawLogo();
|
|
loadTitleScreen();
|
|
FileArchive configArchive = createArchive(2, "config", "config", archiveCRCs[2], 30);
|
|
FileArchive interfaceArchive = createArchive(3, "interface", "interface", archiveCRCs[3], 35);
|
|
FileArchive mediaArchive = createArchive(4, "2d graphics", "media", archiveCRCs[4], 40);
|
|
this.mediaStreamLoader = mediaArchive;
|
|
FileArchive textureArchive = createArchive(6, "textures", "textures", archiveCRCs[6], 45);
|
|
FileArchive wordencArchive = createArchive(7, "chat system", "wordenc", archiveCRCs[7], 50);
|
|
|
|
@SuppressWarnings("unused")
|
|
FileArchive soundArchive = createArchive(8, "sound effects", "sounds", archiveCRCs[8], 55);
|
|
tileFlags = new byte[4][104][104];
|
|
tileHeights = new int[4][105][105];
|
|
scene = new SceneGraph(tileHeights);
|
|
|
|
for (int j = 0; j < 4; j++)
|
|
collisionMaps[j] = new CollisionMap();
|
|
|
|
minimapImage = new Sprite(512, 512);
|
|
FileArchive streamLoader_6 = createArchive(5, "update list", "versionlist", archiveCRCs[5], 60);
|
|
drawLoadingText(60, "Connecting to update server");
|
|
resourceProvider = new ResourceProvider();
|
|
resourceProvider.initialize(streamLoader_6, this);
|
|
Frame.animationlist = new Frame[2500][0];
|
|
Model.method459(resourceProvider.getModelCount(), resourceProvider);
|
|
drawLoadingText(80, "Unpacking media");
|
|
|
|
FileArchive soundEffectArchive = createArchive(8, "sound effects", "sounds", archiveCRCs[8], 55);
|
|
byte[] soundData = soundEffectArchive.readFile("sounds.dat");
|
|
|
|
Buffer stream = new Buffer(soundData);
|
|
Track.unpack(stream);
|
|
|
|
if (Configuration.repackIndexOne) {
|
|
CacheUtils.repackCacheIndex(this, Store.MODEL);
|
|
}
|
|
|
|
if (Configuration.repackIndexTwo) {
|
|
CacheUtils.repackCacheIndex(this, Store.ANIMATION);
|
|
}
|
|
|
|
if (Configuration.repackIndexThree) {
|
|
CacheUtils.repackCacheIndex(this, Store.MUSIC);
|
|
}
|
|
|
|
if (Configuration.repackIndexFour) {
|
|
CacheUtils.repackCacheIndex(this, Store.MAP);
|
|
}
|
|
|
|
if (Configuration.dumpIndexOne) {
|
|
CacheUtils.dumpCacheIndex(this, Store.MODEL);
|
|
}
|
|
|
|
if (Configuration.dumpIndexTwo) {
|
|
CacheUtils.dumpCacheIndex(this, Store.ANIMATION);
|
|
}
|
|
|
|
if (Configuration.dumpIndexThree) {
|
|
CacheUtils.dumpCacheIndex(this, Store.MUSIC);
|
|
}
|
|
|
|
if (Configuration.repackIndexFour) {
|
|
CacheUtils.dumpCacheIndex(this, Store.MAP);
|
|
}
|
|
|
|
for (int imageId = 73, index = 0; imageId < SkillConstants.SKILL_COUNT; imageId++, index++) {
|
|
skill_sprites[index] = SpriteCache.lookup(imageId);
|
|
}
|
|
|
|
Sprite[] clanIcons = new Sprite[9];
|
|
|
|
for (int index = 0; index < clanIcons.length; index++) {
|
|
clanIcons[index] = SpriteCache.lookup(index + 218);
|
|
}
|
|
|
|
RSFont.unpackImages(modIcons, clanIcons);
|
|
multiOverlay = new Sprite(mediaArchive, "overlay_multiway", 0);
|
|
mapBack = new IndexedImage(mediaArchive, "mapback", 0);
|
|
for (int j3 = 0; j3 <= 14; j3++)
|
|
sideIcons[j3] = new Sprite(mediaArchive, "sideicons", j3);
|
|
compass = new Sprite(mediaArchive, "compass", 0);
|
|
try {
|
|
for (int k3 = 0; k3 < 100; k3++)
|
|
mapScenes[k3] = new IndexedImage(mediaArchive, "mapscene", k3);
|
|
} catch (Exception _ex) {
|
|
}
|
|
try {
|
|
for (int l3 = 0; l3 < 100; l3++)
|
|
mapFunctions[l3] = new Sprite(mediaArchive, "mapfunction", l3);
|
|
} catch (Exception _ex) {
|
|
}
|
|
try {
|
|
for (int i4 = 0; i4 < 20; i4++)
|
|
hitMarks[i4] = new Sprite(mediaArchive, "hitmarks", i4);
|
|
} catch (Exception _ex) {
|
|
}
|
|
try {
|
|
for (int h1 = 0; h1 < 6; h1++)
|
|
headIconsHint[h1] = new Sprite(mediaArchive, "headicons_hint", h1);
|
|
} catch (Exception _ex) {
|
|
}
|
|
try {
|
|
for (int j4 = 0; j4 < 8; j4++)
|
|
headIcons[j4] = new Sprite(mediaArchive, "headicons_prayer", j4);
|
|
for (int j45 = 0; j45 < 3; j45++)
|
|
skullIcons[j45] = new Sprite(mediaArchive, "headicons_pk", j45);
|
|
} catch (Exception _ex) {
|
|
}
|
|
mapFlag = new Sprite(mediaArchive, "mapmarker", 0);
|
|
mapMarker = new Sprite(mediaArchive, "mapmarker", 1);
|
|
for (int k4 = 0; k4 < 8; k4++)
|
|
crosses[k4] = new Sprite(mediaArchive, "cross", k4);
|
|
mapDotItem = new Sprite(mediaArchive, "mapdots", 0);
|
|
mapDotNPC = new Sprite(mediaArchive, "mapdots", 1);
|
|
mapDotPlayer = new Sprite(mediaArchive, "mapdots", 2);
|
|
mapDotFriend = new Sprite(mediaArchive, "mapdots", 3);
|
|
mapDotTeam = new Sprite(mediaArchive, "mapdots", 4);
|
|
mapDotClan = new Sprite(mediaArchive, "mapdots", 5);
|
|
scrollBar1 = new Sprite(mediaArchive, "scrollbar", 0);
|
|
scrollBar2 = new Sprite(mediaArchive, "scrollbar", 1);
|
|
for (int l4 = 0; l4 < 2; l4++)
|
|
modIcons[l4] = new Sprite(mediaArchive, "mod_icons", l4);
|
|
Sprite sprite = new Sprite(mediaArchive, "screenframe", 0);
|
|
leftFrame = new ProducingGraphicsBuffer(sprite.getMyWidth(), sprite.getMyHeight());
|
|
sprite.method346(0, 0);
|
|
sprite = new Sprite(mediaArchive, "screenframe", 1);
|
|
topFrame = new ProducingGraphicsBuffer(sprite.getMyWidth(), sprite.getMyHeight());
|
|
sprite.method346(0, 0);
|
|
int i5 = (int) (Math.random() * 21D) - 10;
|
|
int j5 = (int) (Math.random() * 21D) - 10;
|
|
int k5 = (int) (Math.random() * 21D) - 10;
|
|
int l5 = (int) (Math.random() * 41D) - 20;
|
|
for (int i6 = 0; i6 < 100; i6++) {
|
|
if (mapFunctions[i6] != null)
|
|
mapFunctions[i6].method344(i5 + l5, j5 + l5, k5 + l5);
|
|
if (mapScenes[i6] != null)
|
|
mapScenes[i6].offsetColor(i5 + l5, j5 + l5, k5 + l5);
|
|
}
|
|
drawLoadingText(83, "Unpacking textures");
|
|
Rasterizer3D.loadTextures(textureArchive);
|
|
Rasterizer3D.setBrightness(0.80000000000000004D);
|
|
Rasterizer3D.initiateRequestBuffers();
|
|
drawLoadingText(86, "Unpacking config");
|
|
Animation.init(configArchive);
|
|
ObjectDefinition.init(configArchive);
|
|
FloorDefinition.unpackConfig(configArchive);
|
|
ItemDefinition.init(configArchive);
|
|
NpcDefinition.init(configArchive);
|
|
IdentityKit.init(configArchive);
|
|
Graphic.init(configArchive);
|
|
Varp.init(configArchive);
|
|
Varbit.init(configArchive);
|
|
ItemDefinition.isMembers = isMembers;
|
|
drawLoadingText(95, "Unpacking interfaces");
|
|
GameFont[] gameFonts = {smallText, regularText, boldText, gameFont};
|
|
Widget.load(interfaceArchive, gameFonts, mediaArchive);
|
|
drawLoadingText(100, "Preparing game engine");
|
|
for (int j6 = 0; j6 < 33; j6++) {
|
|
int k6 = 999;
|
|
int i7 = 0;
|
|
for (int k7 = 0; k7 < 34; k7++) {
|
|
if (mapBack.palettePixels[k7 + j6 * mapBack.width] == 0) {
|
|
if (k6 == 999)
|
|
k6 = k7;
|
|
continue;
|
|
}
|
|
if (k6 == 999)
|
|
continue;
|
|
i7 = k7;
|
|
break;
|
|
}
|
|
anIntArray968[j6] = k6;
|
|
anIntArray1057[j6] = i7 - k6;
|
|
}
|
|
for (int l6 = 1; l6 < 153; l6++) {
|
|
int j7 = 999;
|
|
int l7 = 0;
|
|
for (int j8 = 24; j8 < 177; j8++) {
|
|
if (mapBack.palettePixels[j8 + l6 * mapBack.width] == 0 && (j8 > 34 || l6 > 34)) {
|
|
if (j7 == 999) {
|
|
j7 = j8;
|
|
}
|
|
continue;
|
|
}
|
|
if (j7 == 999) {
|
|
continue;
|
|
}
|
|
l7 = j8;
|
|
break;
|
|
}
|
|
minimapLeft[l6 - 1] = j7 - 24;
|
|
minimapLineWidth[l6 - 1] = l7 - j7;
|
|
}
|
|
setBounds();
|
|
MessageCensor.load(wordencArchive);
|
|
mouseDetection = new MouseDetection(this);
|
|
startRunnable(mouseDetection, 10);
|
|
SceneObject.clientInstance = this;
|
|
ObjectDefinition.clientInstance = this;
|
|
NpcDefinition.clientInstance = this;
|
|
return;
|
|
} catch (Exception exception) {
|
|
exception.printStackTrace();
|
|
SignLink.reporterror("loaderror " + aString1049 + " " + anInt1079);
|
|
}
|
|
loadingError = true;
|
|
}
|
|
|
|
private void updatePlayerList(Buffer stream, int packetSize) {
|
|
while (stream.bitPosition + 10 < packetSize * 8) {
|
|
int index = stream.readBits(11);
|
|
if (index == 2047) {
|
|
break;
|
|
}
|
|
if (players[index] == null) {
|
|
players[index] = new Player();
|
|
if (playerSynchronizationBuffers[index] != null) {
|
|
players[index].updateAppearance(playerSynchronizationBuffers[index]);
|
|
}
|
|
}
|
|
playerList[playerCount++] = index;
|
|
Player player = players[index];
|
|
player.time = tick;
|
|
|
|
int update = stream.readBits(1);
|
|
|
|
if (update == 1)
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = index;
|
|
|
|
int discardWalkingQueue = stream.readBits(1);
|
|
|
|
int y = stream.readBits(5);
|
|
|
|
if (y > 15) {
|
|
y -= 32;
|
|
}
|
|
|
|
int x = stream.readBits(5);
|
|
|
|
if (x > 15) {
|
|
x -= 32;
|
|
}
|
|
|
|
player.setPos(localPlayer.pathX[0] + x, localPlayer.pathY[0] + y, discardWalkingQueue == 1);
|
|
}
|
|
stream.disableBitAccess();
|
|
}
|
|
|
|
public boolean inCircle(int circleX, int circleY, int clickX, int clickY, int radius) {
|
|
return java.lang.Math.pow((circleX + radius - clickX), 2)
|
|
+ java.lang.Math.pow((circleY + radius - clickY), 2) < java.lang.Math.pow(radius, 2);
|
|
}
|
|
|
|
private void processMainScreenClick() {
|
|
if (openInterfaceId == 15244) {
|
|
return;
|
|
}
|
|
if (minimapState != 0) {
|
|
return;
|
|
}
|
|
if (super.clickMode3 == 1) {
|
|
int i = super.saveClickX - 25 - 547;
|
|
int j = super.saveClickY - 5 - 3;
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
i = super.saveClickX - (frameWidth - 182 + 24);
|
|
j = super.saveClickY - 8;
|
|
}
|
|
if (inCircle(0, 0, i, j, 76) && mouseMapPosition() && !runHover) {
|
|
i -= 73;
|
|
j -= 75;
|
|
int k = cameraHorizontal + minimapRotation & 0x7ff;
|
|
int i1 = Rasterizer3D.anIntArray1470[k];
|
|
int j1 = Rasterizer3D.COSINE[k];
|
|
i1 = i1 * (minimapZoom + 256) >> 8;
|
|
j1 = j1 * (minimapZoom + 256) >> 8;
|
|
int k1 = j * i1 + i * j1 >> 11;
|
|
int l1 = j * j1 - i * i1 >> 11;
|
|
int i2 = localPlayer.x + k1 >> 7;
|
|
int j2 = localPlayer.y - l1 >> 7;
|
|
boolean flag1 = doWalkTo(1, 0, 0, 0, localPlayer.pathY[0], 0, 0, j2, localPlayer.pathX[0], true, i2);
|
|
if (flag1) {
|
|
outgoing.writeByte(i);
|
|
outgoing.writeByte(j);
|
|
outgoing.writeShort(cameraHorizontal);
|
|
outgoing.writeByte(57);
|
|
outgoing.writeByte(minimapRotation);
|
|
outgoing.writeByte(minimapZoom);
|
|
outgoing.writeByte(89);
|
|
outgoing.writeShort(localPlayer.x);
|
|
outgoing.writeShort(localPlayer.y);
|
|
outgoing.writeByte(anInt1264);
|
|
outgoing.writeByte(63);
|
|
}
|
|
}
|
|
anInt1117++;
|
|
if (anInt1117 > 1151) {
|
|
anInt1117 = 0;
|
|
// anti-cheat
|
|
outgoing.writeOpcode(246);
|
|
outgoing.writeByte(0);
|
|
int bufPos = outgoing.currentPosition;
|
|
|
|
if ((int) (Math.random() * 2D) == 0) {
|
|
outgoing.writeByte(101);
|
|
}
|
|
|
|
outgoing.writeByte(197);
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
outgoing.writeByte((int) (Math.random() * 256D));
|
|
outgoing.writeByte(67);
|
|
outgoing.writeShort(14214);
|
|
|
|
if ((int) (Math.random() * 2D) == 0) {
|
|
outgoing.writeShort(29487);
|
|
}
|
|
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
|
|
if ((int) (Math.random() * 2D) == 0) {
|
|
outgoing.writeByte(220);
|
|
}
|
|
|
|
outgoing.writeByte(180);
|
|
outgoing.writeBytes(outgoing.currentPosition - bufPos);
|
|
}
|
|
}
|
|
}
|
|
|
|
private String interfaceIntToString(int j) {
|
|
if (j < 0x3b9ac9ff)
|
|
return String.valueOf(j);
|
|
else
|
|
return "*";
|
|
}
|
|
|
|
private void showErrorScreen() {
|
|
Graphics g = getGameComponent().getGraphics();
|
|
g.setColor(Color.black);
|
|
g.fillRect(0, 0, 765, 503);
|
|
method4(1);
|
|
if (loadingError) {
|
|
aBoolean831 = false;
|
|
g.setFont(new Font("Helvetica", 1, 16));
|
|
g.setColor(Color.yellow);
|
|
int k = 35;
|
|
g.drawString("Sorry, an error has occured whilst loading " + Configuration.CLIENT_NAME, 30, k);
|
|
k += 50;
|
|
g.setColor(Color.white);
|
|
g.drawString("To fix this try the following (in order):", 30, k);
|
|
k += 50;
|
|
g.setColor(Color.white);
|
|
g.setFont(new Font("Helvetica", 1, 12));
|
|
g.drawString("1: Try closing ALL open web-browser windows, and reloading", 30, k);
|
|
k += 30;
|
|
g.drawString("2: Try clearing your web-browsers cache from tools->internet options", 30, k);
|
|
k += 30;
|
|
g.drawString("3: Try using a different game-world", 30, k);
|
|
k += 30;
|
|
g.drawString("4: Try rebooting your computer", 30, k);
|
|
k += 30;
|
|
g.drawString("5: Try selecting a different version of Java from the play-game menu", 30, k);
|
|
}
|
|
if (genericLoadingError) {
|
|
aBoolean831 = false;
|
|
g.setFont(new Font("Helvetica", 1, 20));
|
|
g.setColor(Color.white);
|
|
g.drawString("Error - unable to load game!", 50, 50);
|
|
g.drawString("To play " + Configuration.CLIENT_NAME + " make sure you play from", 50, 100);
|
|
g.drawString("http://www.UrlHere.com", 50, 150);
|
|
}
|
|
if (rsAlreadyLoaded) {
|
|
aBoolean831 = false;
|
|
g.setColor(Color.yellow);
|
|
int l = 35;
|
|
g.drawString("Error a copy of " + Configuration.CLIENT_NAME + " already appears to be loaded", 30, l);
|
|
l += 50;
|
|
g.setColor(Color.white);
|
|
g.drawString("To fix this try the following (in order):", 30, l);
|
|
l += 50;
|
|
g.setColor(Color.white);
|
|
g.setFont(new Font("Helvetica", 1, 12));
|
|
g.drawString("1: Try closing ALL open web-browser windows, and reloading", 30, l);
|
|
l += 30;
|
|
g.drawString("2: Try rebooting your computer, and reloading", 30, l);
|
|
l += 30;
|
|
}
|
|
}
|
|
|
|
public URL getCodeBase() {
|
|
try {
|
|
return new URL(server + ":" + (80 + portOffset));
|
|
} catch (Exception _ex) {
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private void processNpcMovement() {
|
|
for (int j = 0; j < npcCount; j++) {
|
|
int k = npcIndices[j];
|
|
Npc npc = npcs[k];
|
|
if (npc != null)
|
|
processMovement(npc);
|
|
}
|
|
}
|
|
|
|
private void processMovement(Mob mob) {
|
|
if (mob.x < 128 || mob.y < 128 || mob.x >= 13184 || mob.y >= 13184) {
|
|
mob.emoteAnimation = -1;
|
|
mob.graphic = -1;
|
|
mob.startForceMovement = 0;
|
|
mob.endForceMovement = 0;
|
|
mob.x = mob.pathX[0] * 128 + mob.size * 64;
|
|
mob.y = mob.pathY[0] * 128 + mob.size * 64;
|
|
mob.resetPath();
|
|
}
|
|
if (mob == localPlayer && (mob.x < 1536 || mob.y < 1536 || mob.x >= 11776 || mob.y >= 11776)) {
|
|
mob.emoteAnimation = -1;
|
|
mob.graphic = -1;
|
|
mob.startForceMovement = 0;
|
|
mob.endForceMovement = 0;
|
|
mob.x = mob.pathX[0] * 128 + mob.size * 64;
|
|
mob.y = mob.pathY[0] * 128 + mob.size * 64;
|
|
mob.resetPath();
|
|
}
|
|
if (mob.startForceMovement > tick) {
|
|
mob.nextPreForcedStep();
|
|
} else if (mob.endForceMovement >= tick) {
|
|
mob.nextForcedMovementStep();
|
|
} else {
|
|
mob.nextStep();
|
|
}
|
|
appendFocusDestination(mob);
|
|
mob.updateAnimation();
|
|
}
|
|
|
|
private void appendFocusDestination(Mob entity) {
|
|
if (entity.degreesToTurn == 0)
|
|
return;
|
|
if (entity.interactingEntity != -1 && entity.interactingEntity < 32768) {
|
|
Npc npc = npcs[entity.interactingEntity];
|
|
if (npc != null) {
|
|
int i1 = entity.x - npc.x;
|
|
int k1 = entity.y - npc.y;
|
|
if (i1 != 0 || k1 != 0)
|
|
entity.nextStepOrientation = (int) (Math.atan2(i1, k1) * 325.94900000000001D) & 0x7ff;
|
|
}
|
|
}
|
|
if (entity.interactingEntity >= 32768) {
|
|
int j = entity.interactingEntity - 32768;
|
|
if (j == localPlayerIndex)
|
|
j = internalLocalPlayerIndex;
|
|
Player player = players[j];
|
|
if (player != null) {
|
|
int l1 = entity.x - player.x;
|
|
int i2 = entity.y - player.y;
|
|
if (l1 != 0 || i2 != 0)
|
|
entity.nextStepOrientation = (int) (Math.atan2(l1, i2) * 325.94900000000001D) & 0x7ff;
|
|
}
|
|
}
|
|
if ((entity.faceX != 0 || entity.faceY != 0) && (entity.remainingPath == 0 || entity.anInt1503 > 0)) {
|
|
int k = entity.x - (entity.faceX - regionBaseX - regionBaseX) * 64;
|
|
int j1 = entity.y - (entity.faceY - regionBaseY - regionBaseY) * 64;
|
|
if (k != 0 || j1 != 0)
|
|
entity.nextStepOrientation = (int) (Math.atan2(k, j1) * 325.94900000000001D) & 0x7ff;
|
|
entity.faceX = 0;
|
|
entity.faceY = 0;
|
|
}
|
|
int l = entity.nextStepOrientation - entity.orientation & 0x7ff;
|
|
if (l != 0) {
|
|
if (l < entity.degreesToTurn || l > 2048 - entity.degreesToTurn)
|
|
entity.orientation = entity.nextStepOrientation;
|
|
else if (l > 1024)
|
|
entity.orientation -= entity.degreesToTurn;
|
|
else
|
|
entity.orientation += entity.degreesToTurn;
|
|
entity.orientation &= 0x7ff;
|
|
if (entity.movementAnimation == entity.idleAnimation && entity.orientation != entity.nextStepOrientation) {
|
|
if (entity.standTurnAnimIndex != -1) {
|
|
entity.movementAnimation = entity.standTurnAnimIndex;
|
|
return;
|
|
}
|
|
entity.movementAnimation = entity.walkAnimIndex;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void drawGameScreen() {
|
|
if (fullscreenInterfaceID != -1 && (loadingStage == 2 || super.fullGameScreen != null)) {
|
|
if (loadingStage == 2) {
|
|
try {
|
|
processWidgetAnimations(tickDelta, fullscreenInterfaceID);
|
|
if (openInterfaceId != -1) {
|
|
processWidgetAnimations(tickDelta, openInterfaceId);
|
|
}
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
tickDelta = 0;
|
|
resetAllImageProducers();
|
|
super.fullGameScreen.initDrawingArea();
|
|
Rasterizer3D.scanOffsets = fullScreenTextureArray;
|
|
Rasterizer2D.clear();
|
|
welcomeScreenRaised = true;
|
|
if (openInterfaceId != -1) {
|
|
Widget rsInterface_1 = Widget.interfaceCache[openInterfaceId];
|
|
if (rsInterface_1.width == 512 && rsInterface_1.height == 334 && rsInterface_1.type == 0) {
|
|
rsInterface_1.width = 765;
|
|
rsInterface_1.height = 503;
|
|
}
|
|
try {
|
|
drawInterface(0, 0, rsInterface_1, 8);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
}
|
|
Widget rsInterface = Widget.interfaceCache[fullscreenInterfaceID];
|
|
if (rsInterface.width == 512 && rsInterface.height == 334 && rsInterface.type == 0) {
|
|
rsInterface.width = 765;
|
|
rsInterface.height = 503;
|
|
}
|
|
try {
|
|
drawInterface(0, 0, rsInterface, 8);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
if (!menuOpen) {
|
|
processRightClick();
|
|
drawTooltip();
|
|
} else {
|
|
drawMenu(frameMode == ScreenMode.FIXED ? 4 : 0, frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
}
|
|
}
|
|
drawCount++;
|
|
super.fullGameScreen.drawGraphics(0, super.graphics, 0);
|
|
return;
|
|
} else {
|
|
if (drawCount != 0) {
|
|
setupGameplayScreen();
|
|
}
|
|
}
|
|
if (welcomeScreenRaised) {
|
|
welcomeScreenRaised = false;
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
topFrame.drawGraphics(0, super.graphics, 0);
|
|
leftFrame.drawGraphics(4, super.graphics, 0);
|
|
}
|
|
updateChatbox = true;
|
|
tabAreaAltered = true;
|
|
if (loadingStage != 2) {
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
gameScreenImageProducer.drawGraphics(frameMode == ScreenMode.FIXED ? 4 : 0, super.graphics,
|
|
frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
minimapImageProducer.drawGraphics(0, super.graphics, 516);
|
|
}
|
|
}
|
|
}
|
|
if (overlayInterfaceId != -1) {
|
|
try {
|
|
processWidgetAnimations(tickDelta, overlayInterfaceId);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
}
|
|
drawTabArea();
|
|
if (backDialogueId == -1) {
|
|
aClass9_1059.scrollPosition = anInt1211 - anInt1089 - 110;
|
|
if (super.mouseX >= 496 && super.mouseX <= 511
|
|
&& super.mouseY > (frameMode == ScreenMode.FIXED ? 345 : frameHeight - 158))
|
|
method65(494, 110, super.mouseX,
|
|
super.mouseY - (frameMode == ScreenMode.FIXED ? 345 : frameHeight - 158), aClass9_1059, 0,
|
|
false, anInt1211);
|
|
int i = anInt1211 - 110 - aClass9_1059.scrollPosition;
|
|
if (i < 0) {
|
|
i = 0;
|
|
}
|
|
if (i > anInt1211 - 110) {
|
|
i = anInt1211 - 110;
|
|
}
|
|
if (anInt1089 != i) {
|
|
anInt1089 = i;
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
if (backDialogueId != -1) {
|
|
boolean flag2 = false;
|
|
|
|
try {
|
|
flag2 = processWidgetAnimations(tickDelta, backDialogueId);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
if (flag2) {
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
if (atInventoryInterfaceType == 3)
|
|
updateChatbox = true;
|
|
if (activeInterfaceType == 3)
|
|
updateChatbox = true;
|
|
if (clickToContinueString != null)
|
|
updateChatbox = true;
|
|
if (menuOpen && menuScreenArea == 2)
|
|
updateChatbox = true;
|
|
if (updateChatbox) {
|
|
drawChatArea();
|
|
updateChatbox = false;
|
|
}
|
|
if (loadingStage == 2)
|
|
moveCameraWithPlayer();
|
|
if (loadingStage == 2) {
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
drawMinimap();
|
|
minimapImageProducer.drawGraphics(0, super.graphics, 516);
|
|
}
|
|
}
|
|
if (flashingSidebarId != -1)
|
|
tabAreaAltered = true;
|
|
if (tabAreaAltered) {
|
|
if (flashingSidebarId != -1 && flashingSidebarId == tabId) {
|
|
flashingSidebarId = -1;
|
|
// flashing sidebar
|
|
outgoing.writeOpcode(120);
|
|
outgoing.writeByte(tabId);
|
|
}
|
|
tabAreaAltered = false;
|
|
chatSettingImageProducer.initDrawingArea();
|
|
gameScreenImageProducer.initDrawingArea();
|
|
}
|
|
tickDelta = 0;
|
|
}
|
|
|
|
private boolean buildFriendsListMenu(Widget class9) {
|
|
int i = class9.contentType;
|
|
if (i >= 1 && i <= 200 || i >= 701 && i <= 900) {
|
|
if (i >= 801)
|
|
i -= 701;
|
|
else if (i >= 701)
|
|
i -= 601;
|
|
else if (i >= 101)
|
|
i -= 101;
|
|
else
|
|
i--;
|
|
menuActionText[menuActionRow] = "Remove @whi@" + friendsList[i];
|
|
menuActionTypes[menuActionRow] = 792;
|
|
menuActionRow++;
|
|
menuActionText[menuActionRow] = "Message @whi@" + friendsList[i];
|
|
menuActionTypes[menuActionRow] = 639;
|
|
menuActionRow++;
|
|
return true;
|
|
}
|
|
if (i >= 401 && i <= 500) {
|
|
menuActionText[menuActionRow] = "Remove @whi@" + class9.defaultText;
|
|
menuActionTypes[menuActionRow] = 322;
|
|
menuActionRow++;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private void createStationaryGraphics() {
|
|
AnimableObject class30_sub2_sub4_sub3 = (AnimableObject) incompleteAnimables.reverseGetFirst();
|
|
for (; class30_sub2_sub4_sub3 != null; class30_sub2_sub4_sub3 = (AnimableObject) incompleteAnimables
|
|
.reverseGetNext())
|
|
if (class30_sub2_sub4_sub3.anInt1560 != plane || class30_sub2_sub4_sub3.aBoolean1567)
|
|
class30_sub2_sub4_sub3.unlink();
|
|
else if (tick >= class30_sub2_sub4_sub3.anInt1564) {
|
|
class30_sub2_sub4_sub3.method454(tickDelta);
|
|
if (class30_sub2_sub4_sub3.aBoolean1567)
|
|
class30_sub2_sub4_sub3.unlink();
|
|
else
|
|
scene.addAnimableA(class30_sub2_sub4_sub3.anInt1560, 0, class30_sub2_sub4_sub3.anInt1563, -1,
|
|
class30_sub2_sub4_sub3.anInt1562, 60, class30_sub2_sub4_sub3.anInt1561,
|
|
class30_sub2_sub4_sub3, false);
|
|
}
|
|
|
|
}
|
|
|
|
public void drawBlackBox(int xPos, int yPos) {
|
|
Rasterizer2D.drawBox(xPos - 2, yPos - 1, 1, 71, 0x726451);
|
|
Rasterizer2D.drawBox(xPos + 174, yPos, 1, 69, 0x726451);
|
|
Rasterizer2D.drawBox(xPos - 2, yPos - 2, 178, 1, 0x726451);
|
|
Rasterizer2D.drawBox(xPos, yPos + 68, 174, 1, 0x726451);
|
|
Rasterizer2D.drawBox(xPos - 1, yPos - 1, 1, 71, 0x2E2B23);
|
|
Rasterizer2D.drawBox(xPos + 175, yPos - 1, 1, 71, 0x2E2B23);
|
|
Rasterizer2D.drawBox(xPos, yPos - 1, 175, 1, 0x2E2B23);
|
|
Rasterizer2D.drawBox(xPos, yPos + 69, 175, 1, 0x2E2B23);
|
|
Rasterizer2D.drawTransparentBox(xPos, yPos, 174, 68, 0, 220);
|
|
}
|
|
|
|
private void drawInterface(int scroll_y, int x, Widget rsInterface, int y) throws Exception {
|
|
if (rsInterface == null)
|
|
rsInterface = Widget.interfaceCache[21356];
|
|
if (rsInterface.type != 0 || rsInterface.children == null)
|
|
return;
|
|
if (rsInterface.invisible && anInt1026 != rsInterface.id && anInt1048 != rsInterface.id
|
|
&& anInt1039 != rsInterface.id)
|
|
return;
|
|
int clipLeft = Rasterizer2D.leftX;
|
|
int clipTop = Rasterizer2D.topY;
|
|
int clipRight = Rasterizer2D.bottomX;
|
|
int clipBottom = Rasterizer2D.bottomY;
|
|
Rasterizer2D.setDrawingArea(y + rsInterface.height, x, x + rsInterface.width, y);
|
|
int childCount = rsInterface.children.length;
|
|
int alpha = rsInterface.transparency;
|
|
for (int childId = 0; childId < childCount; childId++) {
|
|
int _x = rsInterface.childX[childId] + x;
|
|
int currentY = (rsInterface.childY[childId] + y) - scroll_y;
|
|
Widget childInterface = Widget.interfaceCache[rsInterface.children[childId]];
|
|
_x += childInterface.x;
|
|
currentY += childInterface.anInt265;
|
|
if (childInterface.contentType > 0)
|
|
drawFriendsListOrWelcomeScreen(childInterface);
|
|
// here
|
|
int[] IDs = {1196, 1199, 1206, 1215, 1224, 1231, 1240, 1249, 1258, 1267, 1274, 1283, 1573, 1290, 1299,
|
|
1308, 1315, 1324, 1333, 1340, 1349, 1358, 1367, 1374, 1381, 1388, 1397, 1404, 1583, 12038, 1414,
|
|
1421, 1430, 1437, 1446, 1453, 1460, 1469, 15878, 1602, 1613, 1624, 7456, 1478, 1485, 1494, 1503,
|
|
1512, 1521, 1530, 1544, 1553, 1563, 1593, 1635, 12426, 12436, 12446, 12456, 6004, 18471,
|
|
/* Ancients */
|
|
12940, 12988, 13036, 12902, 12862, 13046, 12964, 13012, 13054, 12920, 12882, 13062, 12952, 13000,
|
|
13070, 12912, 12872, 13080, 12976, 13024, 13088, 12930, 12892, 13096};
|
|
for (int m5 = 0; m5 < IDs.length; m5++) {
|
|
if (childInterface.id == IDs[m5] + 1) {
|
|
if (m5 > 61)
|
|
drawBlackBox(_x + 1, currentY);
|
|
else
|
|
drawBlackBox(_x, currentY + 1);
|
|
}
|
|
}
|
|
int[] runeChildren = {1202, 1203, 1209, 1210, 1211, 1218, 1219, 1220, 1227, 1228, 1234, 1235, 1236, 1243,
|
|
1244, 1245, 1252, 1253, 1254, 1261, 1262, 1263, 1270, 1271, 1277, 1278, 1279, 1286, 1287, 1293,
|
|
1294, 1295, 1302, 1303, 1304, 1311, 1312, 1318, 1319, 1320, 1327, 1328, 1329, 1336, 1337, 1343,
|
|
1344, 1345, 1352, 1353, 1354, 1361, 1362, 1363, 1370, 1371, 1377, 1378, 1384, 1385, 1391, 1392,
|
|
1393, 1400, 1401, 1407, 1408, 1410, 1417, 1418, 1424, 1425, 1426, 1433, 1434, 1440, 1441, 1442,
|
|
1449, 1450, 1456, 1457, 1463, 1464, 1465, 1472, 1473, 1474, 1481, 1482, 1488, 1489, 1490, 1497,
|
|
1498, 1499, 1506, 1507, 1508, 1515, 1516, 1517, 1524, 1525, 1526, 1533, 1534, 1535, 1547, 1548,
|
|
1549, 1556, 1557, 1558, 1566, 1567, 1568, 1576, 1577, 1578, 1586, 1587, 1588, 1596, 1597, 1598,
|
|
1605, 1606, 1607, 1616, 1617, 1618, 1627, 1628, 1629, 1638, 1639, 1640, 6007, 6008, 6011, 8673,
|
|
8674, 12041, 12042, 12429, 12430, 12431, 12439, 12440, 12441, 12449, 12450, 12451, 12459, 12460,
|
|
15881, 15882, 15885, 18474, 18475, 18478};
|
|
for (int r = 0; r < runeChildren.length; r++)
|
|
if (childInterface.id == runeChildren[r])
|
|
childInterface.modelZoom = 775;
|
|
if (childInterface.type == Widget.TYPE_CONTAINER) {
|
|
if (childInterface.scrollPosition > childInterface.scrollMax - childInterface.height)
|
|
childInterface.scrollPosition = childInterface.scrollMax - childInterface.height;
|
|
if (childInterface.scrollPosition < 0)
|
|
childInterface.scrollPosition = 0;
|
|
drawInterface(childInterface.scrollPosition, _x, childInterface, currentY);
|
|
if (childInterface.scrollMax > childInterface.height)
|
|
drawScrollbar(childInterface.height, childInterface.scrollPosition, currentY,
|
|
_x + childInterface.width, childInterface.scrollMax, false);
|
|
} else if (childInterface.type != 1)
|
|
if (childInterface.type == Widget.TYPE_INVENTORY) {
|
|
int item = 0;
|
|
for (int row = 0; row < childInterface.height; row++) {
|
|
for (int column = 0; column < childInterface.width; column++) {
|
|
int tileX = _x + column * (32 + childInterface.spritePaddingX);
|
|
int tileY = currentY + row * (32 + childInterface.spritePaddingY);
|
|
if (item < 20) {
|
|
tileX += childInterface.spritesX[item];
|
|
tileY += childInterface.spritesY[item];
|
|
}
|
|
if (childInterface.inventoryItemId[item] > 0) {
|
|
int differenceX = 0;
|
|
int differenceY = 0;
|
|
int itemId = childInterface.inventoryItemId[item] - 1;
|
|
if (tileX > Rasterizer2D.leftX - 32 && tileX < Rasterizer2D.bottomX
|
|
&& tileY > Rasterizer2D.topY - 32 && tileY < Rasterizer2D.bottomY
|
|
|| activeInterfaceType != 0 && anInt1085 == item) {
|
|
int l9 = 0;
|
|
if (itemSelected == 1 && anInt1283 == item && anInt1284 == childInterface.id)
|
|
l9 = 0xffffff;
|
|
Sprite item_icon = ItemDefinition.getSprite(itemId,
|
|
childInterface.inventoryAmounts[item], l9);
|
|
if (item_icon != null) {
|
|
if (activeInterfaceType != 0 && anInt1085 == item
|
|
&& anInt1084 == childInterface.id) {
|
|
differenceX = super.mouseX - anInt1087;
|
|
differenceY = super.mouseY - anInt1088;
|
|
if (differenceX < 5 && differenceX > -5)
|
|
differenceX = 0;
|
|
if (differenceY < 5 && differenceY > -5)
|
|
differenceY = 0;
|
|
if (anInt989 < 10) {
|
|
differenceX = 0;
|
|
differenceY = 0;
|
|
}
|
|
item_icon.drawSprite1(tileX + differenceX, tileY + differenceY);
|
|
if (tileY + differenceY < Rasterizer2D.topY
|
|
&& rsInterface.scrollPosition > 0) {
|
|
int i10 = (tickDelta * (Rasterizer2D.topY - tileY - differenceY)) / 3;
|
|
if (i10 > tickDelta * 10)
|
|
i10 = tickDelta * 10;
|
|
if (i10 > rsInterface.scrollPosition)
|
|
i10 = rsInterface.scrollPosition;
|
|
rsInterface.scrollPosition -= i10;
|
|
anInt1088 += i10;
|
|
}
|
|
if (tileY + differenceY + 32 > Rasterizer2D.bottomY
|
|
&& rsInterface.scrollPosition < rsInterface.scrollMax
|
|
- rsInterface.height) {
|
|
int j10 = (tickDelta
|
|
* ((tileY + differenceY + 32) - Rasterizer2D.bottomY)) / 3;
|
|
if (j10 > tickDelta * 10)
|
|
j10 = tickDelta * 10;
|
|
if (j10 > rsInterface.scrollMax - rsInterface.height
|
|
- rsInterface.scrollPosition)
|
|
j10 = rsInterface.scrollMax - rsInterface.height
|
|
- rsInterface.scrollPosition;
|
|
rsInterface.scrollPosition += j10;
|
|
anInt1088 -= j10;
|
|
}
|
|
} else if (atInventoryInterfaceType != 0 && atInventoryIndex == item
|
|
&& atInventoryInterface == childInterface.id)
|
|
item_icon.drawSprite1(tileX, tileY);
|
|
else
|
|
item_icon.drawSprite(tileX, tileY);
|
|
if (item_icon.getMaxWidth() == 33
|
|
|| childInterface.inventoryAmounts[item] != 1) {
|
|
int k10 = childInterface.inventoryAmounts[item];
|
|
|
|
smallText.render(0, intToKOrMil(k10), tileY + 10 + differenceY,
|
|
tileX + 1 + differenceX);
|
|
if (k10 >= 1)
|
|
smallText.render(0xFFFF00, intToKOrMil(k10), tileY + 9 + differenceY,
|
|
tileX + differenceX);
|
|
if (k10 >= 100000)
|
|
smallText.render(0xFFFFFF, intToKOrMil(k10), tileY + 9 + differenceY,
|
|
tileX + differenceX);
|
|
if (k10 >= 10000000)
|
|
smallText.render(0x00FF80, intToKOrMil(k10), tileY + 9 + differenceY,
|
|
tileX + differenceX);
|
|
}
|
|
}
|
|
}
|
|
} else if (childInterface.sprites != null && item < 20) {
|
|
Sprite image = childInterface.sprites[item];
|
|
if (image != null)
|
|
image.drawSprite(tileX, tileY);
|
|
}
|
|
item++;
|
|
}
|
|
}
|
|
} else if (childInterface.type == Widget.TYPE_RECTANGLE) {
|
|
boolean hover = false;
|
|
if (anInt1039 == childInterface.id || anInt1048 == childInterface.id
|
|
|| anInt1026 == childInterface.id)
|
|
hover = true;
|
|
int colour;
|
|
if (interfaceIsSelected(childInterface)) {
|
|
colour = childInterface.secondaryColor;
|
|
if (hover && childInterface.secondaryHoverColor != 0)
|
|
colour = childInterface.secondaryHoverColor;
|
|
} else {
|
|
colour = childInterface.textColor;
|
|
if (hover && childInterface.defaultHoverColor != 0)
|
|
colour = childInterface.defaultHoverColor;
|
|
}
|
|
if (childInterface.opacity == 0) {
|
|
if (childInterface.filled)
|
|
Rasterizer2D.drawBox(_x, currentY, childInterface.width, childInterface.height, colour);
|
|
else
|
|
Rasterizer2D.drawBoxOutline(_x, currentY, childInterface.width, childInterface.height,
|
|
colour);
|
|
} else if (childInterface.filled)
|
|
Rasterizer2D.drawTransparentBox(_x, currentY, childInterface.width, childInterface.height,
|
|
colour, 256 - (childInterface.opacity & 0xff));
|
|
else
|
|
Rasterizer2D.drawTransparentBoxOutline(_x, currentY, childInterface.width,
|
|
childInterface.height, colour, 256 - (childInterface.opacity & 0xff));
|
|
} else if (childInterface.type == Widget.TYPE_TEXT) {
|
|
GameFont textDrawingArea = childInterface.textDrawingAreas;
|
|
String text = childInterface.defaultText;
|
|
boolean flag1 = false;
|
|
if (anInt1039 == childInterface.id || anInt1048 == childInterface.id
|
|
|| anInt1026 == childInterface.id)
|
|
flag1 = true;
|
|
int colour;
|
|
if (interfaceIsSelected(childInterface)) {
|
|
colour = childInterface.secondaryColor;
|
|
if (flag1 && childInterface.secondaryHoverColor != 0)
|
|
colour = childInterface.secondaryHoverColor;
|
|
if (childInterface.secondaryText.length() > 0)
|
|
text = childInterface.secondaryText;
|
|
} else {
|
|
colour = childInterface.textColor;
|
|
if (flag1 && childInterface.defaultHoverColor != 0)
|
|
colour = childInterface.defaultHoverColor;
|
|
}
|
|
if (childInterface.optionType == Widget.OPTION_CONTINUE && continuedDialogue) {
|
|
text = "Please wait...";
|
|
colour = childInterface.textColor;
|
|
}
|
|
if (Rasterizer2D.width == 516) {
|
|
if (colour == 0xffff00)
|
|
colour = 255;
|
|
if (colour == 49152)
|
|
colour = 0xffffff;
|
|
}
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
if ((backDialogueId != -1 || dialogueId != -1
|
|
|| childInterface.defaultText.contains("Click here to continue"))
|
|
&& (rsInterface.id == backDialogueId || rsInterface.id == dialogueId)) {
|
|
if (colour == 0xffff00) {
|
|
colour = 255;
|
|
}
|
|
if (colour == 49152) {
|
|
colour = 0xffffff;
|
|
}
|
|
}
|
|
}
|
|
if ((childInterface.parent == 1151) || (childInterface.parent == 12855)) {
|
|
switch (colour) {
|
|
case 16773120:
|
|
colour = 0xFE981F;
|
|
break;
|
|
case 7040819:
|
|
colour = 0xAF6A1A;
|
|
break;
|
|
}
|
|
}
|
|
for (int drawY = currentY + textDrawingArea.verticalSpace; text
|
|
.length() > 0; drawY += textDrawingArea.verticalSpace) {
|
|
if (text.indexOf("%") != -1) {
|
|
do {
|
|
int index = text.indexOf("%1");
|
|
if (index == -1)
|
|
break;
|
|
if (childInterface.id < 4000 || childInterface.id > 5000 && childInterface.id != 13921
|
|
&& childInterface.id != 13922 && childInterface.id != 12171
|
|
&& childInterface.id != 12172) {
|
|
text = text.substring(0, index) + formatCoins(executeScript(childInterface, 0))
|
|
+ text.substring(index + 2);
|
|
} else {
|
|
text = text.substring(0, index)
|
|
+ interfaceIntToString(executeScript(childInterface, 0))
|
|
+ text.substring(index + 2);
|
|
}
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%2");
|
|
if (index == -1) {
|
|
break;
|
|
}
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 1))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%3");
|
|
|
|
if (index == -1) {
|
|
break;
|
|
}
|
|
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 2))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%4");
|
|
|
|
if (index == -1) {
|
|
break;
|
|
}
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 3))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%5");
|
|
|
|
if (index == -1) {
|
|
break;
|
|
}
|
|
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 4))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
}
|
|
|
|
int line = text.indexOf("\\n");
|
|
|
|
String drawn;
|
|
|
|
if (line != -1) {
|
|
drawn = text.substring(0, line);
|
|
text = text.substring(line + 2);
|
|
} else {
|
|
drawn = text;
|
|
text = "";
|
|
}
|
|
RSFont font = null;
|
|
if (textDrawingArea == smallText) {
|
|
font = newSmallFont;
|
|
} else if (textDrawingArea == regularText) {
|
|
font = newRegularFont;
|
|
} else if (textDrawingArea == boldText) {
|
|
font = newBoldFont;
|
|
} else if (textDrawingArea == gameFont) {
|
|
font = newFancyFont;
|
|
}
|
|
if (childInterface.centerText) {
|
|
font.drawCenteredString(drawn, _x + childInterface.width / 2, drawY, colour,
|
|
childInterface.textShadow ? 0 : -1);
|
|
} else {
|
|
font.drawBasicString(drawn, _x, drawY, colour, childInterface.textShadow ? 0 : -1);
|
|
}
|
|
}
|
|
} else if (childInterface.type == Widget.TYPE_SPRITE) {
|
|
Sprite sprite;
|
|
|
|
if (interfaceIsSelected(childInterface)) {
|
|
sprite = childInterface.enabledSprite;
|
|
} else {
|
|
sprite = childInterface.disabledSprite;
|
|
}
|
|
|
|
if (spellSelected == 1 && childInterface.id == spellId && spellId != 0 && sprite != null) {
|
|
sprite.drawSprite(_x, currentY, 0xffffff);
|
|
} else {
|
|
if (sprite != null) {
|
|
if (childInterface.drawsTransparent) {
|
|
sprite.drawTransparentSprite(_x, currentY, alpha);
|
|
} else {
|
|
sprite.drawSprite(_x, currentY);
|
|
}
|
|
}
|
|
}
|
|
if (autocast && childInterface.id == autoCastId)
|
|
SpriteCache.lookup(43).drawSprite(_x - 3, currentY - 3);
|
|
if (sprite != null)
|
|
if (childInterface.drawsTransparent) {
|
|
sprite.drawSprite1(_x, currentY);
|
|
} else {
|
|
sprite.drawSprite(_x, currentY);
|
|
}
|
|
} else if (childInterface.type == Widget.TYPE_MODEL) {
|
|
int centreX = Rasterizer3D.originViewX;
|
|
int centreY = Rasterizer3D.originViewY;
|
|
Rasterizer3D.originViewX = _x + childInterface.width / 2;
|
|
Rasterizer3D.originViewY = currentY + childInterface.height / 2;
|
|
int sine = Rasterizer3D.anIntArray1470[childInterface.modelRotation1]
|
|
* childInterface.modelZoom >> 16;
|
|
int cosine = Rasterizer3D.COSINE[childInterface.modelRotation1] * childInterface.modelZoom >> 16;
|
|
boolean selected = interfaceIsSelected(childInterface);
|
|
int emoteAnimation;
|
|
if (selected)
|
|
emoteAnimation = childInterface.secondaryAnimationId;
|
|
else
|
|
emoteAnimation = childInterface.defaultAnimationId;
|
|
Model model;
|
|
if (emoteAnimation == -1) {
|
|
model = childInterface.method209(-1, -1, selected);
|
|
} else {
|
|
Animation animation = Animation.animations[emoteAnimation];
|
|
model = childInterface.method209(animation.secondaryFrames[childInterface.currentFrame],
|
|
animation.primaryFrames[childInterface.currentFrame], selected);
|
|
}
|
|
if (model != null)
|
|
model.method482(childInterface.modelRotation2, 0, childInterface.modelRotation1, 0, sine,
|
|
cosine);
|
|
Rasterizer3D.originViewX = centreX;
|
|
Rasterizer3D.originViewY = centreY;
|
|
} else if (childInterface.type == Widget.TYPE_ITEM_LIST) {
|
|
GameFont font = childInterface.textDrawingAreas;
|
|
int slot = 0;
|
|
for (int row = 0; row < childInterface.height; row++) {
|
|
for (int column = 0; column < childInterface.width; column++) {
|
|
if (childInterface.inventoryItemId[slot] > 0) {
|
|
ItemDefinition item = ItemDefinition.lookup(childInterface.inventoryItemId[slot] - 1);
|
|
String name = item.name;
|
|
if (item.stackable || childInterface.inventoryAmounts[slot] != 1)
|
|
name = name + " x" + intToKOrMilLongName(childInterface.inventoryAmounts[slot]);
|
|
int __x = _x + column * (115 + childInterface.spritePaddingX);
|
|
int __y = currentY + row * (12 + childInterface.spritePaddingY);
|
|
if (childInterface.centerText)
|
|
font.method382(childInterface.textColor, __x + childInterface.width / 2, name, __y,
|
|
childInterface.textShadow);
|
|
else
|
|
font.drawTextWithPotentialShadow(childInterface.textShadow, __x,
|
|
childInterface.textColor, name, __y);
|
|
}
|
|
slot++;
|
|
}
|
|
}
|
|
} else if (childInterface.type == 9) {
|
|
drawHoverBox(_x, currentY, childInterface.popupString);
|
|
} else if (childInterface.type == 8 && (anInt1500 == childInterface.id || anInt1044 == childInterface.id
|
|
|| anInt1129 == childInterface.id) && anInt1501 == 0 && !menuOpen) {
|
|
int boxWidth = 0;
|
|
int boxHeight = 0;
|
|
GameFont font = regularText;
|
|
for (String text = childInterface.defaultText; text.length() > 0; ) {
|
|
if (text.indexOf("%") != -1) {
|
|
do {
|
|
int index = text.indexOf("%1");
|
|
if (index == -1)
|
|
break;
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 0))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%2");
|
|
if (index == -1)
|
|
break;
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 1))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%3");
|
|
if (index == -1)
|
|
break;
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 2))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%4");
|
|
if (index == -1)
|
|
break;
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 3))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
do {
|
|
int index = text.indexOf("%5");
|
|
if (index == -1)
|
|
break;
|
|
text = text.substring(0, index) + interfaceIntToString(executeScript(childInterface, 4))
|
|
+ text.substring(index + 2);
|
|
} while (true);
|
|
}
|
|
int line = text.indexOf("\\n");
|
|
String drawn;
|
|
if (line != -1) {
|
|
drawn = text.substring(0, line);
|
|
text = text.substring(line + 2);
|
|
} else {
|
|
drawn = text;
|
|
text = "";
|
|
}
|
|
int j10 = font.getTextWidth(drawn);
|
|
if (j10 > boxWidth) {
|
|
boxWidth = j10;
|
|
}
|
|
boxHeight += font.verticalSpace + 1;
|
|
}
|
|
boxWidth += 6;
|
|
boxHeight += 7;
|
|
int xPos = (_x + childInterface.width) - 5 - boxWidth;
|
|
int yPos = currentY + childInterface.height + 5;
|
|
if (xPos < _x + 5) {
|
|
xPos = _x + 5;
|
|
}
|
|
if (xPos + boxWidth > x + rsInterface.width) {
|
|
xPos = (x + rsInterface.width) - boxWidth;
|
|
}
|
|
if (yPos + boxHeight > y + rsInterface.height) {
|
|
yPos = (currentY - boxHeight);
|
|
}
|
|
Rasterizer2D.drawBox(xPos, yPos, boxWidth, boxHeight, 0xFFFFA0);
|
|
Rasterizer2D.drawBoxOutline(xPos, yPos, boxWidth, boxHeight, 0);
|
|
String s2 = childInterface.defaultText;
|
|
for (int j11 = yPos + font.verticalSpace + 2; s2.length() > 0; j11 += font.verticalSpace + 1) {// verticalSpace
|
|
if (s2.indexOf("%") != -1) {
|
|
do {
|
|
int k7 = s2.indexOf("%1");
|
|
if (k7 == -1)
|
|
break;
|
|
s2 = s2.substring(0, k7) + interfaceIntToString(executeScript(childInterface, 0))
|
|
+ s2.substring(k7 + 2);
|
|
} while (true);
|
|
do {
|
|
int l7 = s2.indexOf("%2");
|
|
if (l7 == -1)
|
|
break;
|
|
s2 = s2.substring(0, l7) + interfaceIntToString(executeScript(childInterface, 1))
|
|
+ s2.substring(l7 + 2);
|
|
} while (true);
|
|
do {
|
|
int i8 = s2.indexOf("%3");
|
|
if (i8 == -1)
|
|
break;
|
|
s2 = s2.substring(0, i8) + interfaceIntToString(executeScript(childInterface, 2))
|
|
+ s2.substring(i8 + 2);
|
|
} while (true);
|
|
do {
|
|
int j8 = s2.indexOf("%4");
|
|
if (j8 == -1)
|
|
break;
|
|
s2 = s2.substring(0, j8) + interfaceIntToString(executeScript(childInterface, 3))
|
|
+ s2.substring(j8 + 2);
|
|
} while (true);
|
|
do {
|
|
int k8 = s2.indexOf("%5");
|
|
if (k8 == -1)
|
|
break;
|
|
s2 = s2.substring(0, k8) + interfaceIntToString(executeScript(childInterface, 4))
|
|
+ s2.substring(k8 + 2);
|
|
} while (true);
|
|
}
|
|
int l11 = s2.indexOf("\\n");
|
|
String s5;
|
|
if (l11 != -1) {
|
|
s5 = s2.substring(0, l11);
|
|
s2 = s2.substring(l11 + 2);
|
|
} else {
|
|
s5 = s2;
|
|
s2 = "";
|
|
}
|
|
if (childInterface.centerText) {
|
|
font.method382(yPos, xPos + childInterface.width / 2, s5, j11, false);
|
|
} else {
|
|
if (s5.contains("\\r")) {
|
|
String text = s5.substring(0, s5.indexOf("\\r"));
|
|
String text2 = s5.substring(s5.indexOf("\\r") + 2);
|
|
font.drawTextWithPotentialShadow(false, xPos + 3, 0, text, j11);
|
|
int rightX = boxWidth + xPos - font.getTextWidth(text2) - 2;
|
|
font.drawTextWithPotentialShadow(false, rightX, 0, text2, j11);
|
|
System.out.println("Box: " + boxWidth + "");
|
|
} else
|
|
font.drawTextWithPotentialShadow(false, xPos + 3, 0, s5, j11);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Rasterizer2D.setDrawingArea(clipBottom, clipLeft, clipRight, clipTop);
|
|
}
|
|
|
|
private void randomizeBackground(IndexedImage background) {
|
|
int j = 256;
|
|
for (int k = 0; k < anIntArray1190.length; k++)
|
|
anIntArray1190[k] = 0;
|
|
|
|
for (int l = 0; l < 5000; l++) {
|
|
int i1 = (int) (Math.random() * 128D * (double) j);
|
|
anIntArray1190[i1] = (int) (Math.random() * 256D);
|
|
}
|
|
for (int j1 = 0; j1 < 20; j1++) {
|
|
for (int k1 = 1; k1 < j - 1; k1++) {
|
|
for (int i2 = 1; i2 < 127; i2++) {
|
|
int k2 = i2 + (k1 << 7);
|
|
anIntArray1191[k2] = (anIntArray1190[k2 - 1] + anIntArray1190[k2 + 1] + anIntArray1190[k2 - 128]
|
|
+ anIntArray1190[k2 + 128]) / 4;
|
|
}
|
|
|
|
}
|
|
int[] ai = anIntArray1190;
|
|
anIntArray1190 = anIntArray1191;
|
|
anIntArray1191 = ai;
|
|
}
|
|
if (background != null) {
|
|
int l1 = 0;
|
|
for (int j2 = 0; j2 < background.height; j2++) {
|
|
for (int l2 = 0; l2 < background.width; l2++)
|
|
if (background.palettePixels[l1++] != 0) {
|
|
int i3 = l2 + 16 + background.drawOffsetX;
|
|
int j3 = j2 + 16 + background.drawOffsetY;
|
|
int k3 = i3 + (j3 << 7);
|
|
anIntArray1190[k3] = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void appendPlayerUpdateMask(int mask, int index, Buffer buffer, Player player) {
|
|
if ((mask & 0x400) != 0) {
|
|
player.initialX = buffer.readUByteS();
|
|
player.initialY = buffer.readUByteS();
|
|
player.destinationX = buffer.readUByteS();
|
|
player.destinationY = buffer.readUByteS();
|
|
player.startForceMovement = buffer.readLEUShortA() + tick;
|
|
player.endForceMovement = buffer.readUShortA() + tick;
|
|
player.direction = buffer.readUByteS();
|
|
player.resetPath();
|
|
}
|
|
if ((mask & 0x100) != 0) {
|
|
player.graphic = buffer.readLEUShort();
|
|
int info = buffer.readInt();
|
|
player.graphicHeight = info >> 16;
|
|
player.graphicDelay = tick + (info & 0xffff);
|
|
player.currentAnimation = 0;
|
|
player.anInt1522 = 0;
|
|
if (player.graphicDelay > tick)
|
|
player.currentAnimation = -1;
|
|
if (player.graphic == 65535)
|
|
player.graphic = -1;
|
|
}
|
|
if ((mask & 8) != 0) {
|
|
int animation = buffer.readLEUShort();
|
|
if (animation == 65535) {
|
|
animation = -1;
|
|
}
|
|
int delay = buffer.readNegUByte();
|
|
if (animation == player.emoteAnimation && animation != -1) {
|
|
int replayMode = Animation.animations[animation].replayMode;
|
|
if (replayMode == 1) {
|
|
player.displayedEmoteFrames = 0;
|
|
player.emoteTimeRemaining = 0;
|
|
player.animationDelay = delay;
|
|
player.currentAnimationLoops = 0;
|
|
}
|
|
if (replayMode == 2)
|
|
player.currentAnimationLoops = 0;
|
|
} else if (animation == -1 || player.emoteAnimation == -1
|
|
|| Animation.animations[animation].priority >= Animation.animations[player.emoteAnimation].priority) {
|
|
player.emoteAnimation = animation;
|
|
player.displayedEmoteFrames = 0;
|
|
player.emoteTimeRemaining = 0;
|
|
player.animationDelay = delay;
|
|
player.currentAnimationLoops = 0;
|
|
player.anInt1542 = player.remainingPath;
|
|
}
|
|
}
|
|
if ((mask & 4) != 0) {
|
|
player.spokenText = buffer.readString();
|
|
if (player.spokenText.charAt(0) == '~') {
|
|
player.spokenText = player.spokenText.substring(1);
|
|
sendMessage(player.spokenText, 2, player.name);
|
|
} else if (player == localPlayer)
|
|
sendMessage(player.spokenText, 2, player.name);
|
|
player.textColour = 0;
|
|
player.textEffect = 0;
|
|
player.textCycle = 150;
|
|
}
|
|
if ((mask & 0x80) != 0) {
|
|
int textInfo = buffer.readLEUShort();
|
|
int privilege = buffer.readUnsignedByte();
|
|
int offset = buffer.readNegUByte();
|
|
int off = buffer.currentPosition;
|
|
if (player.name != null && player.visible) {
|
|
long name = StringUtils.encodeBase37(player.name);
|
|
boolean ignored = false;
|
|
if (privilege <= 1) {
|
|
for (int count = 0; count < ignoreCount; count++) {
|
|
if (ignoreListAsLongs[count] != name)
|
|
continue;
|
|
ignored = true;
|
|
break;
|
|
}
|
|
|
|
}
|
|
if (!ignored && onTutorialIsland == 0)
|
|
try {
|
|
chatBuffer.currentPosition = 0;
|
|
buffer.readReverseData(chatBuffer.payload, offset, 0);
|
|
chatBuffer.currentPosition = 0;
|
|
String text = ChatMessageCodec.decode(offset, chatBuffer);
|
|
// s = Censor.doCensor(s);
|
|
player.spokenText = text;
|
|
player.textColour = textInfo >> 8;
|
|
player.privelage = privilege;
|
|
player.textEffect = textInfo & 0xff;
|
|
player.textCycle = 150;
|
|
if (privilege == 2 || privilege == 3)
|
|
sendMessage(text, 1, "@cr2@" + player.name);
|
|
else if (privilege == 1)
|
|
sendMessage(text, 1, "@cr1@" + player.name);
|
|
else
|
|
sendMessage(text, 2, player.name);
|
|
} catch (Exception exception) {
|
|
SignLink.reporterror("cde2");
|
|
}
|
|
}
|
|
buffer.currentPosition = off + offset;
|
|
}
|
|
if ((mask & 1) != 0) {
|
|
player.interactingEntity = buffer.readLEUShort();
|
|
if (player.interactingEntity == 65535)
|
|
player.interactingEntity = -1;
|
|
}
|
|
if ((mask & 0x10) != 0) {
|
|
int length = buffer.readNegUByte();
|
|
byte[] data = new byte[length];
|
|
Buffer appearanceBuffer = new Buffer(data);
|
|
buffer.readBytes(length, 0, data);
|
|
playerSynchronizationBuffers[index] = appearanceBuffer;
|
|
player.updateAppearance(appearanceBuffer);
|
|
}
|
|
if ((mask & 2) != 0) {
|
|
player.faceX = buffer.readLEUShortA();
|
|
player.faceY = buffer.readLEUShort();
|
|
}
|
|
if ((mask & 0x20) != 0) {
|
|
int damage = buffer.readUnsignedByte();
|
|
int type = buffer.readUByteA();
|
|
player.updateHitData(type, damage, tick);
|
|
player.loopCycleStatus = tick + 300;
|
|
player.currentHealth = buffer.readNegUByte();
|
|
player.maxHealth = buffer.readUnsignedByte();
|
|
}
|
|
if ((mask & 0x200) != 0) {
|
|
int damage = buffer.readUnsignedByte();
|
|
int type = buffer.readUByteS();
|
|
player.updateHitData(type, damage, tick);
|
|
player.loopCycleStatus = tick + 300;
|
|
player.currentHealth = buffer.readUnsignedByte();
|
|
player.maxHealth = buffer.readNegUByte();
|
|
}
|
|
}
|
|
|
|
private void checkForGameUsages() {
|
|
try {
|
|
int j = localPlayer.x + cameraX;
|
|
int k = localPlayer.y + cameraY;
|
|
if (anInt1014 - j < -500 || anInt1014 - j > 500 || anInt1015 - k < -500 || anInt1015 - k > 500) {
|
|
anInt1014 = j;
|
|
anInt1015 = k;
|
|
}
|
|
if (anInt1014 != j)
|
|
anInt1014 += (j - anInt1014) / 16;
|
|
if (anInt1015 != k)
|
|
anInt1015 += (k - anInt1015) / 16;
|
|
if (super.keyArray[1] == 1)
|
|
anInt1186 += (-24 - anInt1186) / 2;
|
|
else if (super.keyArray[2] == 1)
|
|
anInt1186 += (24 - anInt1186) / 2;
|
|
else
|
|
anInt1186 /= 2;
|
|
if (super.keyArray[3] == 1)
|
|
anInt1187 += (12 - anInt1187) / 2;
|
|
else if (super.keyArray[4] == 1)
|
|
anInt1187 += (-12 - anInt1187) / 2;
|
|
else
|
|
anInt1187 /= 2;
|
|
cameraHorizontal = cameraHorizontal + anInt1186 / 2 & 0x7ff;
|
|
anInt1184 += anInt1187 / 2;
|
|
if (anInt1184 < 128)
|
|
anInt1184 = 128;
|
|
if (anInt1184 > 383)
|
|
anInt1184 = 383;
|
|
int l = anInt1014 >> 7;
|
|
int i1 = anInt1015 >> 7;
|
|
int j1 = getCenterHeight(plane, anInt1015, anInt1014);
|
|
int k1 = 0;
|
|
if (l > 3 && i1 > 3 && l < 100 && i1 < 100) {
|
|
for (int l1 = l - 4; l1 <= l + 4; l1++) {
|
|
for (int k2 = i1 - 4; k2 <= i1 + 4; k2++) {
|
|
int l2 = plane;
|
|
if (l2 < 3 && (tileFlags[1][l1][k2] & 2) == 2)
|
|
l2++;
|
|
int i3 = j1 - tileHeights[l2][l1][k2];
|
|
if (i3 > k1)
|
|
k1 = i3;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
anInt1005++;
|
|
if (anInt1005 > 1512) {
|
|
anInt1005 = 0;
|
|
// TODO unknown (anti-cheat)
|
|
outgoing.writeOpcode(77);
|
|
outgoing.writeByte(0);
|
|
int bufPos = outgoing.currentPosition;
|
|
outgoing.writeByte((int) (Math.random() * 256D));
|
|
outgoing.writeByte(101);
|
|
outgoing.writeByte(233);
|
|
outgoing.writeShort(45092);
|
|
|
|
if ((int) (Math.random() * 2D) == 0) {
|
|
outgoing.writeShort(35784);
|
|
}
|
|
|
|
outgoing.writeByte((int) (Math.random() * 256D));
|
|
outgoing.writeByte(64);
|
|
outgoing.writeByte(38);
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
outgoing.writeShort((int) (Math.random() * 65536D));
|
|
outgoing.writeBytes(outgoing.currentPosition - bufPos);
|
|
}
|
|
int j2 = k1 * 192;
|
|
if (j2 > 0x17f00)
|
|
j2 = 0x17f00;
|
|
if (j2 < 32768)
|
|
j2 = 32768;
|
|
if (j2 > anInt984) {
|
|
anInt984 += (j2 - anInt984) / 24;
|
|
return;
|
|
}
|
|
if (j2 < anInt984) {
|
|
anInt984 += (j2 - anInt984) / 80;
|
|
}
|
|
} catch (Exception _ex) {
|
|
SignLink.reporterror("glfc_ex " + localPlayer.x + "," + localPlayer.y + "," + anInt1014 + "," + anInt1015
|
|
+ "," + this.regionX + "," + this.regionY + "," + regionBaseX + "," + regionBaseY);
|
|
throw new RuntimeException("eek");
|
|
}
|
|
}
|
|
|
|
public void processDrawing() {
|
|
if (rsAlreadyLoaded || loadingError || genericLoadingError) {
|
|
showErrorScreen();
|
|
return;
|
|
}
|
|
if (!loggedIn)
|
|
drawLoginScreen(false);
|
|
else
|
|
drawGameScreen();
|
|
anInt1213 = 0;
|
|
}
|
|
|
|
private boolean isFriendOrSelf(String s) {
|
|
if (s == null)
|
|
return false;
|
|
for (int i = 0; i < friendsCount; i++)
|
|
if (s.equalsIgnoreCase(friendsList[i]))
|
|
return true;
|
|
return s.equalsIgnoreCase(localPlayer.name);
|
|
}
|
|
|
|
private void setWaveVolume(int i) {
|
|
SignLink.wavevol = i;
|
|
}
|
|
|
|
private void draw3dScreen() {
|
|
if (showChatComponents) {
|
|
drawSplitPrivateChat();
|
|
}
|
|
if (crossType == 1) {
|
|
int offSet = frameMode == ScreenMode.FIXED ? 4 : 0;
|
|
crosses[crossIndex / 100].drawSprite(crossX - 8 - offSet, crossY - 8 - offSet);
|
|
anInt1142++;
|
|
if (anInt1142 > 67) {
|
|
anInt1142 = 0;
|
|
// TODO unknown (drawing game screen)
|
|
outgoing.writeOpcode(78);
|
|
}
|
|
}
|
|
if (crossType == 2) {
|
|
int offSet = frameMode == ScreenMode.FIXED ? 4 : 0;
|
|
crosses[4 + crossIndex / 100].drawSprite(crossX - 8 - offSet, crossY - 8 - offSet);
|
|
}
|
|
if (openWalkableInterface != -1) {
|
|
try {
|
|
processWidgetAnimations(tickDelta, openWalkableInterface);
|
|
if (openWalkableInterface == 197 && frameMode != ScreenMode.FIXED) {
|
|
skullIcons[0].drawSprite(frameWidth - 157, 168);
|
|
String text = Widget.interfaceCache[199].defaultText.replace("@yel@", "");
|
|
regularText.drawChatInput(0xE1981D, frameWidth - 165, text, 207, true);
|
|
} else if (openWalkableInterface == 201 && frameMode != ScreenMode.FIXED) {
|
|
drawInterface(0, frameWidth - 560, Widget.interfaceCache[openWalkableInterface], -109);
|
|
} else {
|
|
drawInterface(0, frameMode == ScreenMode.FIXED ? 0 : (frameWidth / 2) - 356,
|
|
Widget.interfaceCache[openWalkableInterface],
|
|
frameMode == ScreenMode.FIXED ? 0 : (frameHeight / 2) - 230);
|
|
}
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
}
|
|
if (openInterfaceId != -1) {
|
|
try {
|
|
processWidgetAnimations(tickDelta, openInterfaceId);
|
|
drawInterface(0, frameMode == ScreenMode.FIXED ? 0 : (frameWidth / 2) - 356,
|
|
Widget.interfaceCache[openInterfaceId],
|
|
frameMode == ScreenMode.FIXED ? 0 : (frameHeight / 2) - 230);
|
|
} catch (Exception ex) {
|
|
|
|
}
|
|
}
|
|
if (!menuOpen) {
|
|
processRightClick();
|
|
drawTooltip();
|
|
} else if (menuScreenArea == 0) {
|
|
drawMenu(frameMode == ScreenMode.FIXED ? 4 : 0, frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
}
|
|
if (multicombat == 1) {
|
|
multiOverlay.drawSprite(frameMode == ScreenMode.FIXED ? 472 : frameWidth - 85,
|
|
frameMode == ScreenMode.FIXED ? 296 : 186);
|
|
}
|
|
int x = regionBaseX + (localPlayer.x - 6 >> 7);
|
|
int y = regionBaseY + (localPlayer.y - 6 >> 7);
|
|
final String screenMode = frameMode == ScreenMode.FIXED ? "Fixed" : "Resizable";
|
|
if (Configuration.clientData) {
|
|
int textColour = 0xffff00;
|
|
int fpsColour = 0xffff00;
|
|
if (super.fps < 15) {
|
|
fpsColour = 0xff0000;
|
|
}
|
|
// regularText.render(textColour,
|
|
// "frameWidth: " + (mouseX - frameWidth) + ", frameHeight: " +
|
|
// (mouseY - frameHeight),
|
|
// frameHeight - 271, 5);
|
|
regularText.render(textColour, "Client Zoom: " + cameraZoom, 90,
|
|
frameMode == ScreenMode.FIXED ? 5 : frameWidth - 5);
|
|
regularText.render(fpsColour, "Fps: " + super.fps, 12,
|
|
frameMode == ScreenMode.FIXED ? 470 : frameWidth - 265);
|
|
Runtime runtime = Runtime.getRuntime();
|
|
int clientMemory = (int) ((runtime.totalMemory() - runtime.freeMemory()) / 1024L);
|
|
regularText.render(textColour, "Mem: " + clientMemory + "k", 27,
|
|
frameMode == ScreenMode.FIXED ? 428 : frameWidth - 265);
|
|
regularText.render(textColour, "Mouse X: " + super.mouseX + " , Mouse Y: " + super.mouseY, 30,
|
|
frameMode == ScreenMode.FIXED ? 5 : frameWidth - 5);
|
|
regularText.render(textColour, "Coords: " + x + ", " + y, 45,
|
|
frameMode == ScreenMode.FIXED ? 5 : frameWidth - 5);
|
|
regularText.render(textColour, "Client Mode: " + screenMode + "", 60,
|
|
frameMode == ScreenMode.FIXED ? 5 : frameWidth - 5);
|
|
regularText.render(textColour, "Client Resolution: " + botFrame.getWidth() + "x" + botFrame.getHeight(), 75,
|
|
frameMode == ScreenMode.FIXED ? 5 : frameWidth - 5);
|
|
}
|
|
if (systemUpdateTime != 0) {
|
|
int seconds = systemUpdateTime / 50;
|
|
int minutes = seconds / 60;
|
|
int yOffset = frameMode == ScreenMode.FIXED ? 0 : frameHeight - 498;
|
|
seconds %= 60;
|
|
if (seconds < 10)
|
|
regularText.render(0xffff00, "System update in: " + minutes + ":0" + seconds, 329 + yOffset, 4);
|
|
else
|
|
regularText.render(0xffff00, "System update in: " + minutes + ":" + seconds, 329 + yOffset, 4);
|
|
anInt849++;
|
|
if (anInt849 > 75) {
|
|
anInt849 = 0;
|
|
// TODO unknown (system updating)
|
|
outgoing.writeOpcode(148);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void addIgnore(long l) {
|
|
try {
|
|
if (l == 0L)
|
|
return;
|
|
if (ignoreCount >= 100) {
|
|
sendMessage("Your ignore list is full. Max of 100 hit", 0, "");
|
|
return;
|
|
}
|
|
String s = StringUtils.formatUsername(StringUtils.decodeBase37(l));
|
|
for (int j = 0; j < ignoreCount; j++)
|
|
if (ignoreListAsLongs[j] == l) {
|
|
sendMessage(s + " is already on your ignore list", 0, "");
|
|
return;
|
|
}
|
|
for (int k = 0; k < friendsCount; k++)
|
|
if (friendsListAsLongs[k] == l) {
|
|
sendMessage("Please remove " + s + " from your friend list first", 0, "");
|
|
return;
|
|
}
|
|
|
|
ignoreListAsLongs[ignoreCount++] = l;
|
|
// add ignore
|
|
outgoing.writeOpcode(133);
|
|
outgoing.writeLong(l);
|
|
return;
|
|
} catch (RuntimeException runtimeexception) {
|
|
SignLink.reporterror("45688, " + l + ", " + 4 + ", " + runtimeexception.toString());
|
|
}
|
|
throw new RuntimeException();
|
|
}
|
|
|
|
private void processPlayerMovement() {
|
|
for (int index = -1; index < playerCount; index++) {
|
|
|
|
int playerIndex;
|
|
|
|
if (index == -1) {
|
|
playerIndex = internalLocalPlayerIndex;
|
|
} else {
|
|
playerIndex = playerList[index];
|
|
}
|
|
|
|
Player player = players[playerIndex];
|
|
|
|
if (player != null) {
|
|
processMovement(player);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void method115() {
|
|
if (loadingStage == 2) {
|
|
for (SpawnedObject spawnedObject = (SpawnedObject) spawns
|
|
.reverseGetFirst(); spawnedObject != null; spawnedObject = (SpawnedObject) spawns
|
|
.reverseGetNext()) {
|
|
if (spawnedObject.getLongetivity > 0)
|
|
spawnedObject.getLongetivity--;
|
|
if (spawnedObject.getLongetivity == 0) {
|
|
if (spawnedObject.getPreviousId < 0
|
|
|| MapRegion.modelReady(spawnedObject.getPreviousId, spawnedObject.previousType)) {
|
|
removeObject(spawnedObject.y, spawnedObject.plane, spawnedObject.previousOrientation,
|
|
spawnedObject.previousType, spawnedObject.x, spawnedObject.group,
|
|
spawnedObject.getPreviousId);
|
|
spawnedObject.unlink();
|
|
}
|
|
} else {
|
|
if (spawnedObject.delay > 0)
|
|
spawnedObject.delay--;
|
|
if (spawnedObject.delay == 0 && spawnedObject.x >= 1 && spawnedObject.y >= 1
|
|
&& spawnedObject.x <= 102 && spawnedObject.y <= 102
|
|
&& (spawnedObject.id < 0 || MapRegion.modelReady(spawnedObject.id, spawnedObject.type))) {
|
|
removeObject(spawnedObject.y, spawnedObject.plane, spawnedObject.orientation,
|
|
spawnedObject.type, spawnedObject.x, spawnedObject.group, spawnedObject.id);
|
|
spawnedObject.delay = -1;
|
|
if (spawnedObject.id == spawnedObject.getPreviousId && spawnedObject.getPreviousId == -1)
|
|
spawnedObject.unlink();
|
|
else if (spawnedObject.id == spawnedObject.getPreviousId
|
|
&& spawnedObject.orientation == spawnedObject.previousOrientation
|
|
&& spawnedObject.type == spawnedObject.previousType)
|
|
spawnedObject.unlink();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private void determineMenuSize() {
|
|
int boxLength = boldText.getTextWidth("Choose option");
|
|
for (int row = 0; row < menuActionRow; row++) {
|
|
int actionLength = boldText.getTextWidth(menuActionText[row]);
|
|
if (actionLength > boxLength)
|
|
boxLength = actionLength;
|
|
}
|
|
boxLength += 8;
|
|
int offset = 15 * menuActionRow + 21;
|
|
if (super.saveClickX > 0 && super.saveClickY > 0 && super.saveClickX < frameWidth
|
|
&& super.saveClickY < frameHeight) {
|
|
int xClick = super.saveClickX - boxLength / 2;
|
|
if (xClick + boxLength > frameWidth - 4) {
|
|
xClick = frameWidth - 4 - boxLength;
|
|
}
|
|
if (xClick < 0) {
|
|
xClick = 0;
|
|
}
|
|
int yClick = super.saveClickY - 0;
|
|
if (yClick + offset > frameHeight - 6) {
|
|
yClick = frameHeight - 6 - offset;
|
|
}
|
|
if (yClick < 0) {
|
|
yClick = 0;
|
|
}
|
|
menuOpen = true;
|
|
menuOffsetX = xClick;
|
|
menuOffsetY = yClick;
|
|
menuWidth = boxLength;
|
|
menuHeight = 15 * menuActionRow + 22;
|
|
}
|
|
}
|
|
|
|
private void updateLocalPlayerMovement(Buffer stream) {
|
|
stream.initBitAccess();
|
|
|
|
int update = stream.readBits(1);
|
|
|
|
if (update == 0) {
|
|
return;
|
|
}
|
|
|
|
int type = stream.readBits(2);
|
|
|
|
if (type == 0) {
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = internalLocalPlayerIndex;
|
|
}
|
|
if (type == 1) {
|
|
int direction = stream.readBits(3);
|
|
localPlayer.moveInDir(false, direction);
|
|
int updateRequired = stream.readBits(1);
|
|
|
|
if (updateRequired == 1) {
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = internalLocalPlayerIndex;
|
|
}
|
|
}
|
|
if (type == 2) {
|
|
int firstDirection = stream.readBits(3);
|
|
localPlayer.moveInDir(true, firstDirection);
|
|
|
|
int secondDirection = stream.readBits(3);
|
|
localPlayer.moveInDir(true, secondDirection);
|
|
|
|
int updateRequired = stream.readBits(1);
|
|
|
|
if (updateRequired == 1) {
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = internalLocalPlayerIndex;
|
|
}
|
|
}
|
|
if (type == 3) {
|
|
plane = stream.readBits(2);
|
|
int teleport = stream.readBits(1);
|
|
int updateRequired = stream.readBits(1);
|
|
|
|
if (updateRequired == 1) {
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = internalLocalPlayerIndex;
|
|
}
|
|
|
|
int y = stream.readBits(7);
|
|
int x = stream.readBits(7);
|
|
localPlayer.setPos(x, y, teleport == 1);
|
|
}
|
|
}
|
|
|
|
private void nullLoader() {
|
|
aBoolean831 = false;
|
|
while (drawingFlames) {
|
|
aBoolean831 = false;
|
|
try {
|
|
Thread.sleep(50L);
|
|
} catch (Exception _ex) {
|
|
}
|
|
}
|
|
titleBoxIndexedImage = null;
|
|
titleButtonIndexedImage = null;
|
|
titleIndexedImages = null;
|
|
anIntArray850 = null;
|
|
anIntArray851 = null;
|
|
anIntArray852 = null;
|
|
anIntArray853 = null;
|
|
anIntArray1190 = null;
|
|
anIntArray1191 = null;
|
|
anIntArray828 = null;
|
|
anIntArray829 = null;
|
|
flameLeftSprite = null;
|
|
flameRightSprite = null;
|
|
}
|
|
|
|
private boolean processWidgetAnimations(int tick, int interfaceId) throws Exception {
|
|
boolean redrawRequired = false;
|
|
Widget widget = Widget.interfaceCache[interfaceId];
|
|
|
|
if (widget == null || widget.children == null) {
|
|
return false;
|
|
}
|
|
|
|
for (int element : widget.children) {
|
|
if (element == -1) {
|
|
break;
|
|
}
|
|
|
|
Widget child = Widget.interfaceCache[element];
|
|
|
|
if (child.type == Widget.TYPE_MODEL_LIST) {
|
|
redrawRequired |= processWidgetAnimations(tick, child.id);
|
|
}
|
|
|
|
if (child.type == 6 && (child.defaultAnimationId != -1 || child.secondaryAnimationId != -1)) {
|
|
boolean updated = interfaceIsSelected(child);
|
|
|
|
int animationId = updated ? child.secondaryAnimationId : child.defaultAnimationId;
|
|
|
|
if (animationId != -1) {
|
|
Animation animation = Animation.animations[animationId];
|
|
for (child.lastFrameTime += tick; child.lastFrameTime > animation.duration(child.currentFrame); ) {
|
|
child.lastFrameTime -= animation.duration(child.currentFrame) + 1;
|
|
child.currentFrame++;
|
|
if (child.currentFrame >= animation.frameCount) {
|
|
child.currentFrame -= animation.loopOffset;
|
|
if (child.currentFrame < 0 || child.currentFrame >= animation.frameCount)
|
|
child.currentFrame = 0;
|
|
}
|
|
redrawRequired = true;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
return redrawRequired;
|
|
}
|
|
|
|
private int setCameraLocation() {
|
|
if (!Configuration.enableRoofs)
|
|
return plane;
|
|
int j = 3;
|
|
if (yCameraCurve < 310) {
|
|
int k = xCameraPos >> 7;
|
|
int l = yCameraPos >> 7;
|
|
int i1 = localPlayer.x >> 7;
|
|
int j1 = localPlayer.y >> 7;
|
|
if ((tileFlags[plane][k][l] & 4) != 0)
|
|
j = plane;
|
|
int k1;
|
|
if (i1 > k)
|
|
k1 = i1 - k;
|
|
else
|
|
k1 = k - i1;
|
|
int l1;
|
|
if (j1 > l)
|
|
l1 = j1 - l;
|
|
else
|
|
l1 = l - j1;
|
|
if (k1 > l1) {
|
|
int i2 = (l1 * 0x10000) / k1;
|
|
int k2 = 32768;
|
|
while (k != i1) {
|
|
if (k < i1)
|
|
k++;
|
|
else if (k > i1)
|
|
k--;
|
|
if ((tileFlags[plane][k][l] & 4) != 0)
|
|
j = plane;
|
|
k2 += i2;
|
|
if (k2 >= 0x10000) {
|
|
k2 -= 0x10000;
|
|
if (l < j1)
|
|
l++;
|
|
else if (l > j1)
|
|
l--;
|
|
if ((tileFlags[plane][k][l] & 4) != 0)
|
|
j = plane;
|
|
}
|
|
}
|
|
} else {
|
|
int j2 = (k1 * 0x10000) / l1;
|
|
int l2 = 32768;
|
|
while (l != j1) {
|
|
if (l < j1)
|
|
l++;
|
|
else if (l > j1)
|
|
l--;
|
|
if ((tileFlags[plane][k][l] & 4) != 0)
|
|
j = plane;
|
|
l2 += j2;
|
|
if (l2 >= 0x10000) {
|
|
l2 -= 0x10000;
|
|
if (k < i1)
|
|
k++;
|
|
else if (k > i1)
|
|
k--;
|
|
if ((tileFlags[plane][k][l] & 4) != 0)
|
|
j = plane;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ((tileFlags[plane][localPlayer.x >> 7][localPlayer.y >> 7] & 4) != 0)
|
|
j = plane;
|
|
return j;
|
|
}
|
|
|
|
private int resetCameraHeight() {
|
|
int orientation = getCenterHeight(plane, yCameraPos, xCameraPos);
|
|
if (orientation - zCameraPos < 800 && (tileFlags[plane][xCameraPos >> 7][yCameraPos >> 7] & 4) != 0)
|
|
return plane;
|
|
else
|
|
return 3;
|
|
}
|
|
|
|
private void removeFriend(long name) {
|
|
try {
|
|
if (name == 0L)
|
|
return;
|
|
for (int index = 0; index < friendsCount; index++) {
|
|
if (friendsListAsLongs[index] != name)
|
|
continue;
|
|
friendsCount--;
|
|
for (int count = index; count < friendsCount; count++) {
|
|
friendsList[count] = friendsList[count + 1];
|
|
friendsNodeIDs[count] = friendsNodeIDs[count + 1];
|
|
friendsListAsLongs[count] = friendsListAsLongs[count + 1];
|
|
}
|
|
// remove friend
|
|
outgoing.writeOpcode(215);
|
|
outgoing.writeLong(name);
|
|
break;
|
|
}
|
|
} catch (RuntimeException runtimeexception) {
|
|
SignLink.reporterror("18622, " + false + ", " + name + ", " + runtimeexception.toString());
|
|
throw new RuntimeException();
|
|
}
|
|
}
|
|
|
|
private void removeIgnore(long name) {
|
|
try {
|
|
if (name == 0L)
|
|
return;
|
|
for (int index = 0; index < ignoreCount; index++)
|
|
if (ignoreListAsLongs[index] == name) {
|
|
ignoreCount--;
|
|
System.arraycopy(ignoreListAsLongs, index + 1, ignoreListAsLongs, index, ignoreCount - index);
|
|
|
|
// remove ignore
|
|
outgoing.writeOpcode(74);
|
|
outgoing.writeLong(name);
|
|
return;
|
|
}
|
|
|
|
return;
|
|
} catch (RuntimeException runtimeexception) {
|
|
SignLink.reporterror("47229, " + 3 + ", " + name + ", " + runtimeexception.toString());
|
|
}
|
|
throw new RuntimeException();
|
|
}
|
|
|
|
private void chatJoin(long l) {
|
|
try {
|
|
if (l == 0L)
|
|
return;
|
|
// type on interface
|
|
outgoing.writeOpcode(60);
|
|
outgoing.writeLong(l);
|
|
return;
|
|
} catch (RuntimeException runtimeexception) {
|
|
SignLink.reporterror("47229, " + 3 + ", " + l + ", " + runtimeexception.toString());
|
|
}
|
|
throw new RuntimeException();
|
|
|
|
}
|
|
|
|
public final void requestCrcs() {
|
|
int delay = 5;
|
|
archiveCRCs[8] = 0;
|
|
int k = 0;
|
|
System.out.println("1");
|
|
while (archiveCRCs[8] == 0) {
|
|
System.out.println("2");
|
|
String error = "Unknown problem";
|
|
drawLoadingText(20, "Connecting to web server");
|
|
try (DataInputStream in = requestCacheIndex("crc" + (int) (Math.random() * 99999999D) + "-" + 317)) {
|
|
System.out.println("3");
|
|
Buffer buffer = new Buffer(new byte[40]);
|
|
in.readFully(buffer.payload, 0, 40);
|
|
in.close();
|
|
for (int index = 0; index < 9; index++) {
|
|
archiveCRCs[index] = buffer.readInt();
|
|
}
|
|
|
|
int expected = buffer.readInt();
|
|
int calculated = 1234;
|
|
for (int index = 0; index < 9; index++) {
|
|
calculated = (calculated << 1) + archiveCRCs[index];
|
|
}
|
|
|
|
if (expected != calculated) {
|
|
error = "checksum problem";
|
|
archiveCRCs[8] = 0;
|
|
}
|
|
} catch (EOFException ex) {
|
|
error = "EOF problem";
|
|
archiveCRCs[8] = 0;
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace();
|
|
error = "connection problem";
|
|
archiveCRCs[8] = 0;
|
|
} catch (Exception ex) {
|
|
error = "logic problem";
|
|
archiveCRCs[8] = 0;
|
|
if (!SignLink.reporterror) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (archiveCRCs[8] == 0) {
|
|
k++;
|
|
for (int remaining = delay; remaining > 0; remaining--) {
|
|
if (k >= 10) {
|
|
drawLoadingText(10, "Game updated - please reload page");
|
|
remaining = 10;
|
|
} else {
|
|
drawLoadingText(10, error + " - Will retry in " + remaining + " secs.");
|
|
}
|
|
try {
|
|
Thread.sleep(1000L);
|
|
} catch (InterruptedException ex) {
|
|
}
|
|
}
|
|
|
|
delay *= 2;
|
|
if (delay > 60) {
|
|
delay = 60;
|
|
}
|
|
Configuration.useJaggrab = !Configuration.useJaggrab;
|
|
}
|
|
}
|
|
}
|
|
|
|
public String getParameter(String s) {
|
|
if (SignLink.mainapp != null)
|
|
return SignLink.mainapp.getParameter(s);
|
|
else
|
|
return super.getParameter(s);
|
|
}
|
|
|
|
private int executeScript(Widget widget, int id) {
|
|
if (widget.scripts == null || id >= widget.scripts.length)
|
|
return -2;
|
|
try {
|
|
int[] script = widget.scripts[id];
|
|
int accumulator = 0;
|
|
int counter = 0;
|
|
int operator = 0;
|
|
do {
|
|
int instruction = script[counter++];
|
|
int value = 0;
|
|
byte next = 0;
|
|
|
|
if (instruction == 0) {
|
|
return accumulator;
|
|
}
|
|
|
|
if (instruction == 1) {
|
|
value = currentStats[script[counter++]];
|
|
}
|
|
|
|
if (instruction == 2) {
|
|
value = maximumLevels[script[counter++]];
|
|
}
|
|
|
|
if (instruction == 3) {
|
|
value = currentExp[script[counter++]];
|
|
}
|
|
|
|
if (instruction == 4) {
|
|
Widget other = Widget.interfaceCache[script[counter++]];
|
|
int item = script[counter++];
|
|
if (item >= 0 && item < ItemDefinition.itemCount
|
|
&& (!ItemDefinition.lookup(item).members || isMembers)) {
|
|
for (int slot = 0; slot < other.inventoryItemId.length; slot++)
|
|
if (other.inventoryItemId[slot] == item + 1)
|
|
value += other.inventoryAmounts[slot];
|
|
|
|
}
|
|
}
|
|
if (instruction == 5) {
|
|
value = settings[script[counter++]];
|
|
}
|
|
|
|
if (instruction == 6) {
|
|
value = SKILL_EXPERIENCE[maximumLevels[script[counter++]] - 1];
|
|
}
|
|
|
|
if (instruction == 7) {
|
|
value = (settings[script[counter++]] * 100) / 46875;
|
|
}
|
|
|
|
if (instruction == 8) {
|
|
value = localPlayer.combatLevel;
|
|
}
|
|
|
|
if (instruction == 9) {
|
|
for (int skill = 0; skill < SkillConstants.SKILL_COUNT; skill++)
|
|
if (SkillConstants.ENABLED_SKILLS[skill])
|
|
value += maximumLevels[skill];
|
|
|
|
}
|
|
|
|
if (instruction == 10) {
|
|
Widget other = Widget.interfaceCache[script[counter++]];
|
|
int item = script[counter++] + 1;
|
|
if (item >= 0 && item < ItemDefinition.itemCount && isMembers) {
|
|
for (int stored = 0; stored < other.inventoryItemId.length; stored++) {
|
|
if (other.inventoryItemId[stored] != item)
|
|
continue;
|
|
value = 0x3b9ac9ff;
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (instruction == 11) {
|
|
value = runEnergy;
|
|
}
|
|
|
|
if (instruction == 12) {
|
|
value = weight;
|
|
}
|
|
|
|
if (instruction == 13) {
|
|
int bool = settings[script[counter++]];
|
|
int shift = script[counter++];
|
|
value = (bool & 1 << shift) == 0 ? 0 : 1;
|
|
}
|
|
|
|
if (instruction == 14) {
|
|
int index = script[counter++];
|
|
Varbit bits = Varbit.varbits[index];
|
|
int setting = bits.getSetting();
|
|
int low = bits.getLow();
|
|
int high = bits.getHigh();
|
|
int mask = BIT_MASKS[high - low];
|
|
value = settings[setting] >> low & mask;
|
|
}
|
|
|
|
if (instruction == 15) {
|
|
next = 1;
|
|
}
|
|
|
|
if (instruction == 16) {
|
|
next = 2;
|
|
}
|
|
|
|
if (instruction == 17) {
|
|
next = 3;
|
|
}
|
|
|
|
if (instruction == 18) {
|
|
value = (localPlayer.x >> 7) + regionBaseX;
|
|
}
|
|
|
|
if (instruction == 19) {
|
|
value = (localPlayer.y >> 7) + regionBaseY;
|
|
}
|
|
|
|
if (instruction == 20) {
|
|
value = script[counter++];
|
|
}
|
|
|
|
if (next == 0) {
|
|
|
|
if (operator == 0) {
|
|
accumulator += value;
|
|
}
|
|
|
|
if (operator == 1) {
|
|
accumulator -= value;
|
|
}
|
|
|
|
if (operator == 2 && value != 0) {
|
|
accumulator /= value;
|
|
}
|
|
|
|
if (operator == 3) {
|
|
accumulator *= value;
|
|
}
|
|
operator = 0;
|
|
} else {
|
|
operator = next;
|
|
}
|
|
} while (true);
|
|
} catch (Exception _ex) {
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
private void drawTooltip() {
|
|
if (menuActionRow < 2 && itemSelected == 0 && spellSelected == 0)
|
|
return;
|
|
String s;
|
|
if (itemSelected == 1 && menuActionRow < 2)
|
|
s = "Use " + selectedItemName + " with...";
|
|
else if (spellSelected == 1 && menuActionRow < 2)
|
|
s = spellTooltip + "...";
|
|
else
|
|
s = menuActionText[menuActionRow - 1];
|
|
if (menuActionRow > 2)
|
|
s = s + "@whi@ / " + (menuActionRow - 2) + " more options";
|
|
boldText.method390(4, 0xffffff, s, tick / 1000, 15);
|
|
}
|
|
|
|
private void markMinimap(Sprite sprite, int x, int y) {
|
|
if (sprite == null) {
|
|
return;
|
|
}
|
|
int angle = cameraHorizontal + minimapRotation & 0x7ff;
|
|
int l = x * x + y * y;
|
|
if (l > 6400) {
|
|
return;
|
|
}
|
|
int sineAngle = Model.SINE[angle];
|
|
int cosineAngle = Model.COSINE[angle];
|
|
sineAngle = (sineAngle * 256) / (minimapZoom + 256);
|
|
cosineAngle = (cosineAngle * 256) / (minimapZoom + 256);
|
|
int spriteOffsetX = y * sineAngle + x * cosineAngle >> 16;
|
|
int spriteOffsetY = y * cosineAngle - x * sineAngle >> 16;
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
sprite.drawSprite(((94 + spriteOffsetX) - sprite.getMaxWidth() / 2) + 4 + 30,
|
|
83 - spriteOffsetY - sprite.getMaxHeight() / 2 - 4 + 5);
|
|
} else {
|
|
sprite.drawSprite(((77 + spriteOffsetX) - sprite.getMaxWidth() / 2) + 4 + 5 + (frameWidth - 167),
|
|
85 - spriteOffsetY - sprite.getMaxHeight() / 2);
|
|
}
|
|
}
|
|
|
|
private void drawMinimap() {
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
minimapImageProducer.initDrawingArea();
|
|
}
|
|
if (minimapState == 2) {
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
SpriteCache.lookup(19).drawSprite(0, 0);
|
|
} else {
|
|
SpriteCache.lookup(44).drawSprite(frameWidth - 181, 0);
|
|
SpriteCache.lookup(45).drawSprite(frameWidth - 158, 7);
|
|
}
|
|
if (frameMode == ScreenMode.FIXED
|
|
? super.mouseX >= 519 && super.mouseX <= 536 && super.mouseY >= 22 && super.mouseY <= 41
|
|
: super.mouseX >= frameWidth - 185 && super.mouseX <= frameWidth - 158 && super.mouseY >= 40
|
|
&& super.mouseY <= 66) {
|
|
SpriteCache.lookup(23).drawSprite(
|
|
Configuration.enableOrbs && frameMode == ScreenMode.FIXED ? 0 : frameWidth - 185,
|
|
frameMode == ScreenMode.FIXED ? 21 : 41);
|
|
} else {
|
|
SpriteCache.lookup(22).drawSprite(
|
|
Configuration.enableOrbs && frameMode == ScreenMode.FIXED ? 0 : frameWidth - 185,
|
|
frameMode == ScreenMode.FIXED ? 21 : 41);
|
|
}
|
|
if (frameMode != ScreenMode.FIXED && changeTabArea) {
|
|
if (super.mouseX >= frameWidth - 26 && super.mouseX <= frameWidth - 1 && super.mouseY >= 2
|
|
&& super.mouseY <= 24 || tabId == 15) {
|
|
SpriteCache.lookup(27).drawSprite(frameWidth - 25, 2);
|
|
} else {
|
|
SpriteCache.lookup(27).drawARGBSprite(frameWidth - 25, 2, 165);
|
|
}
|
|
}
|
|
loadAllOrbs(frameMode == ScreenMode.FIXED ? 0 : frameWidth - 217);
|
|
compass.rotate(33, cameraHorizontal, anIntArray1057, 256, anIntArray968,
|
|
(frameMode == ScreenMode.FIXED ? 25 : 24), 4,
|
|
(frameMode == ScreenMode.FIXED ? 29 : frameWidth - 176), 33, 25);
|
|
if (menuOpen) {
|
|
drawMenu(frameMode == ScreenMode.FIXED ? 516 : 0, 0);
|
|
}
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
minimapImageProducer.initDrawingArea();
|
|
}
|
|
return;
|
|
}
|
|
int angle = cameraHorizontal + minimapRotation & 0x7ff;
|
|
int centreX = 48 + localPlayer.x / 32;
|
|
int centreY = 464 - localPlayer.y / 32;
|
|
minimapImage.rotate(151, angle, minimapLineWidth, 256 + minimapZoom, minimapLeft, centreY,
|
|
(frameMode == ScreenMode.FIXED ? 9 : 7), (frameMode == ScreenMode.FIXED ? 54 : frameWidth - 158), 146,
|
|
centreX);
|
|
for (int icon = 0; icon < anInt1071; icon++) {
|
|
int mapX = (minimapHintX[icon] * 4 + 2) - localPlayer.x / 32;
|
|
int mapY = (minimapHintY[icon] * 4 + 2) - localPlayer.y / 32;
|
|
markMinimap(minimapHint[icon], mapX, mapY);
|
|
}
|
|
for (int x = 0; x < 104; x++) {
|
|
for (int y = 0; y < 104; y++) {
|
|
Deque class19 = groundItems[plane][x][y];
|
|
if (class19 != null) {
|
|
int mapX = (x * 4 + 2) - localPlayer.x / 32;
|
|
int mapY = (y * 4 + 2) - localPlayer.y / 32;
|
|
markMinimap(mapDotItem, mapX, mapY);
|
|
}
|
|
}
|
|
}
|
|
for (int n = 0; n < npcCount; n++) {
|
|
Npc npc = npcs[npcIndices[n]];
|
|
if (npc != null && npc.isVisible()) {
|
|
NpcDefinition entityDef = npc.desc;
|
|
if (entityDef.childrenIDs != null) {
|
|
entityDef = entityDef.morph();
|
|
}
|
|
if (entityDef != null && entityDef.drawMinimapDot && entityDef.clickable) {
|
|
int mapX = npc.x / 32 - localPlayer.x / 32;
|
|
int mapY = npc.y / 32 - localPlayer.y / 32;
|
|
markMinimap(mapDotNPC, mapX, mapY);
|
|
}
|
|
}
|
|
}
|
|
for (int p = 0; p < playerCount; p++) {
|
|
Player player = players[playerList[p]];
|
|
if (player != null && player.isVisible()) {
|
|
int mapX = player.x / 32 - localPlayer.x / 32;
|
|
int mapY = player.y / 32 - localPlayer.y / 32;
|
|
boolean friend = false;
|
|
boolean clanMember = false;
|
|
for (int clan = 0; clan < clanList.length; clan++) {
|
|
if (clanList[clan] == null) {
|
|
continue;
|
|
}
|
|
if (!clanList[clan].equalsIgnoreCase(player.name)) {
|
|
continue;
|
|
}
|
|
clanMember = true;
|
|
break;
|
|
}
|
|
long nameHash = StringUtils.encodeBase37(player.name);
|
|
for (int f = 0; f < friendsCount; f++) {
|
|
if (nameHash != friendsListAsLongs[f] || friendsNodeIDs[f] == 0) {
|
|
continue;
|
|
}
|
|
friend = true;
|
|
break;
|
|
}
|
|
boolean team = false;
|
|
if (localPlayer.team != 0 && player.team != 0 && localPlayer.team == player.team) {
|
|
team = true;
|
|
}
|
|
if (friend) {
|
|
markMinimap(mapDotFriend, mapX, mapY);
|
|
} else if (clanMember) {
|
|
markMinimap(mapDotClan, mapX, mapY);
|
|
} else if (team) {
|
|
markMinimap(mapDotTeam, mapX, mapY);
|
|
} else {
|
|
markMinimap(mapDotPlayer, mapX, mapY);
|
|
}
|
|
}
|
|
}
|
|
if (hintIconDrawType != 0 && tick % 20 < 10) {
|
|
if (hintIconDrawType == 1 && hintIconNpcId >= 0 && hintIconNpcId < npcs.length) {
|
|
Npc npc = npcs[hintIconNpcId];
|
|
if (npc != null) {
|
|
int mapX = npc.x / 32 - localPlayer.x / 32;
|
|
int mapY = npc.y / 32 - localPlayer.y / 32;
|
|
refreshMinimap(mapMarker, mapY, mapX);
|
|
}
|
|
}
|
|
if (hintIconDrawType == 2) {
|
|
int mapX = ((hintIconX - regionBaseX) * 4 + 2) - localPlayer.x / 32;
|
|
int mapY = ((hintIconY - regionBaseY) * 4 + 2) - localPlayer.y / 32;
|
|
refreshMinimap(mapMarker, mapY, mapX);
|
|
}
|
|
if (hintIconDrawType == 10 && hintIconPlayerId >= 0 && hintIconPlayerId < players.length) {
|
|
Player player = players[hintIconPlayerId];
|
|
if (player != null) {
|
|
int mapX = player.x / 32 - localPlayer.x / 32;
|
|
int mapY = player.y / 32 - localPlayer.y / 32;
|
|
refreshMinimap(mapMarker, mapY, mapX);
|
|
}
|
|
}
|
|
}
|
|
if (destinationX != 0) {
|
|
int mapX = (destinationX * 4 + 2) - localPlayer.x / 32;
|
|
int mapY = (destY * 4 + 2) - localPlayer.y / 32;
|
|
markMinimap(mapFlag, mapX, mapY);
|
|
}
|
|
Rasterizer2D.drawBox((frameMode == ScreenMode.FIXED ? 127 : frameWidth - 88),
|
|
(frameMode == ScreenMode.FIXED ? 83 : 80), 3, 3, 0xffffff);
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
SpriteCache.lookup(19).drawSprite(0, 0);
|
|
} else {
|
|
SpriteCache.lookup(44).drawSprite(frameWidth - 181, 0);
|
|
}
|
|
compass.rotate(33, cameraHorizontal, anIntArray1057, 256, anIntArray968,
|
|
(frameMode == ScreenMode.FIXED ? 25 : 24), 4, (frameMode == ScreenMode.FIXED ? 29 : frameWidth - 176),
|
|
33, 25);
|
|
if (frameMode == ScreenMode.FIXED
|
|
? super.mouseX >= 519 && super.mouseX <= 536 && super.mouseY >= 22 && super.mouseY <= 41
|
|
: super.mouseX >= frameWidth - 185 && super.mouseX <= frameWidth - 158 && super.mouseY >= 40
|
|
&& super.mouseY <= 66) {
|
|
SpriteCache.lookup(23).drawSprite(
|
|
Configuration.enableOrbs && frameMode == ScreenMode.FIXED ? 0 : frameWidth - 185,
|
|
frameMode == ScreenMode.FIXED ? 21 : 41);
|
|
} else {
|
|
SpriteCache.lookup(22).drawSprite(
|
|
Configuration.enableOrbs && frameMode == ScreenMode.FIXED ? 0 : frameWidth - 185,
|
|
frameMode == ScreenMode.FIXED ? 21 : 41);
|
|
}
|
|
if (frameMode != ScreenMode.FIXED && changeTabArea) {
|
|
if (super.mouseX >= frameWidth - 26 && super.mouseX <= frameWidth - 1 && super.mouseY >= 2
|
|
&& super.mouseY <= 24 || tabId == 10) {
|
|
SpriteCache.lookup(27).drawSprite(frameWidth - 25, 2);
|
|
} else {
|
|
SpriteCache.lookup(27).drawARGBSprite(frameWidth - 25, 2, 165);
|
|
}
|
|
}
|
|
loadAllOrbs(frameMode == ScreenMode.FIXED ? 0 : frameWidth - 217);
|
|
if (menuOpen) {
|
|
drawMenu(frameMode == ScreenMode.FIXED ? 516 : 0, 0);
|
|
}
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
gameScreenImageProducer.initDrawingArea();
|
|
}
|
|
}
|
|
|
|
private void loadAllOrbs(int xOffset) {
|
|
if(Configuration.enableOrbs) {
|
|
loadHpOrb(xOffset);
|
|
loadPrayerOrb(xOffset);
|
|
loadRunOrb(xOffset);
|
|
loadSpecialOrb(xOffset);
|
|
if (frameMode == ScreenMode.FIXED) {
|
|
SpriteCache.lookup(worldHover ? 54 : 53).drawSprite(202, 20);
|
|
} else {
|
|
SpriteCache.lookup(worldHover ? 52 : 51).drawSprite(frameWidth - 118, 154);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void loadHpOrb(int xOffset) {
|
|
int hover = poisonType == 0 ? 8 : 7;
|
|
Sprite bg = SpriteCache.lookup(hpHover ? hover : 7);
|
|
int id = 0;
|
|
if (poisonType == 0)
|
|
id = 0;
|
|
if (poisonType == 1)
|
|
id = 177;
|
|
if (poisonType == 2)
|
|
id = 5;
|
|
Sprite fg = SpriteCache.lookup(id);
|
|
bg.drawSprite(0 + xOffset, 41);
|
|
fg.drawSprite(27 + xOffset, 45);
|
|
int level = currentStats[3];
|
|
int max = maximumLevels[3];
|
|
double percent = level / (double) max;
|
|
SpriteCache.lookup(14).setMyHeight((int) (26 * (1 - percent)));
|
|
SpriteCache.lookup(14).drawSprite(27 + xOffset, 45);
|
|
if (percent <= .25) {
|
|
SpriteCache.lookup(9).drawSprite1(33 + xOffset, 52, 200 + (int) (50 * Math.sin(tick / 7.0)));
|
|
} else {
|
|
SpriteCache.lookup(9).drawSprite(33 + xOffset, 52);
|
|
}
|
|
smallText.method382(getOrbTextColor((int) (percent * 100)), 15 + xOffset, "" + level, 67, true);
|
|
}
|
|
|
|
private void loadPrayerOrb(int xOffset) {
|
|
Sprite bg = SpriteCache.lookup(prayHover ? 8 : 7);
|
|
Sprite fg = SpriteCache.lookup(prayClicked ? 2 : 1);
|
|
bg.drawSprite(0 + xOffset, 85);
|
|
fg.drawSprite(27 + xOffset, 89);
|
|
int level = currentStats[5];
|
|
int max = maximumLevels[5];
|
|
double percent = level / (double) max;
|
|
SpriteCache.lookup(14).setMyHeight((int) (26 * (1 - percent)));
|
|
SpriteCache.lookup(14).drawSprite(27 + xOffset, 89);
|
|
if (percent <= .25) {
|
|
SpriteCache.lookup(10).drawSprite1(30 + xOffset, 92, 200 + (int) (50 * Math.sin(tick / 7.0)));
|
|
} else {
|
|
SpriteCache.lookup(10).drawSprite(30 + xOffset, 92);
|
|
}
|
|
smallText.method382(getOrbTextColor((int) (percent * 100)), 16 + xOffset, level + "", 111, true);
|
|
}
|
|
|
|
private void loadRunOrb(int xOffset) {
|
|
Sprite bg = SpriteCache.lookup(runHover ? 8 : 7);
|
|
Sprite fg = SpriteCache.lookup(settings[173] == 1 ? 4 : 3);
|
|
bg.drawSprite(24 + xOffset, 122);
|
|
fg.drawSprite(51 + xOffset, 126);
|
|
int level = runEnergy;
|
|
double percent = level / (double) 100;
|
|
SpriteCache.lookup(14).setMyHeight((int) (26 * (1 - percent)));
|
|
SpriteCache.lookup(14).drawSprite(51 + xOffset, 126);
|
|
if (percent <= .25) {
|
|
SpriteCache.lookup(settings[173] == 1 ? 12 : 11).drawSprite1(58 + xOffset, 130,
|
|
200 + (int) (50 * Math.sin(tick / 7.0)));
|
|
} else {
|
|
SpriteCache.lookup(settings[173] == 1 ? 12 : 11).drawSprite(58 + xOffset, 130);
|
|
}
|
|
smallText.method382(getOrbTextColor((int) (percent * 100)), 40 + xOffset, level + "", 148, true);
|
|
}
|
|
|
|
private void loadSpecialOrb(int xOffset) {
|
|
Sprite image = SpriteCache.lookup(specialHover ? 56 : 42);
|
|
Sprite fill = SpriteCache.lookup(specialEnabled == 0 ? 5 : 6);
|
|
Sprite sword = SpriteCache.lookup(55);
|
|
double percent = specialOrb / (double) 100;
|
|
boolean isFixed = frameMode == ScreenMode.FIXED;
|
|
image.drawSprite((isFixed ? 170 : 160) + xOffset, isFixed ? 122 : 148);
|
|
fill.drawSprite((isFixed ? 174 : 163) + xOffset, isFixed ? 126 : 151);
|
|
SpriteCache.lookup(14).setMyHeight((int) (26 * (1 - percent)));
|
|
SpriteCache.lookup(14).drawSprite(175 + xOffset, 127);
|
|
sword.drawSprite((isFixed ? 179 : 168) + xOffset, isFixed ? 131 : 156);
|
|
smallText.method382(getOrbTextColor((int) (percent * 100)), (isFixed ? 212 : 202) + xOffset, specialOrb + "",
|
|
isFixed ? 148 : 173, true);
|
|
}
|
|
|
|
private void npcScreenPos(Mob entity, int i) {
|
|
calcEntityScreenPos(entity.x, i, entity.y);
|
|
}
|
|
|
|
private void calcEntityScreenPos(int i, int j, int l) {
|
|
if (i < 128 || l < 128 || i > 13056 || l > 13056) {
|
|
spriteDrawX = -1;
|
|
spriteDrawY = -1;
|
|
return;
|
|
}
|
|
int i1 = getCenterHeight(plane, l, i) - j;
|
|
i -= xCameraPos;
|
|
i1 -= zCameraPos;
|
|
l -= yCameraPos;
|
|
int j1 = Model.SINE[yCameraCurve];
|
|
int k1 = Model.COSINE[yCameraCurve];
|
|
int l1 = Model.SINE[xCameraCurve];
|
|
int i2 = Model.COSINE[xCameraCurve];
|
|
int j2 = l * l1 + i * i2 >> 16;
|
|
l = l * i2 - i * l1 >> 16;
|
|
i = j2;
|
|
j2 = i1 * k1 - l * j1 >> 16;
|
|
l = i1 * j1 + l * k1 >> 16;
|
|
i1 = j2;
|
|
if (l >= 50) {
|
|
spriteDrawX = Rasterizer3D.originViewX + (i << SceneGraph.viewDistance) / l;
|
|
spriteDrawY = Rasterizer3D.originViewY + (i1 << SceneGraph.viewDistance) / l;
|
|
} else {
|
|
spriteDrawX = -1;
|
|
spriteDrawY = -1;
|
|
}
|
|
}
|
|
|
|
private void buildSplitPrivateChatMenu() {
|
|
if (splitPrivateChat == 0)
|
|
return;
|
|
int message = 0;
|
|
if (systemUpdateTime != 0)
|
|
message = 1;
|
|
for (int index = 0; index < 100; index++)
|
|
if (chatMessages[index] != null) {
|
|
int type = chatTypes[index];
|
|
String name = chatNames[index];
|
|
if (name != null && name.startsWith("@cr1@")) {
|
|
name = name.substring(5);
|
|
}
|
|
if (name != null && name.startsWith("@cr2@")) {
|
|
name = name.substring(5);
|
|
}
|
|
if ((type == 3 || type == 7)
|
|
&& (type == 7 || privateChatMode == 0 || privateChatMode == 1 && isFriendOrSelf(name))) {
|
|
int offSet = frameMode == ScreenMode.FIXED ? 4 : 0;
|
|
int y = 329 - message * 13;
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
y = frameHeight - 170 - message * 13;
|
|
}
|
|
if (super.mouseX > 4 && super.mouseY - offSet > y - 10 && super.mouseY - offSet <= y + 3) {
|
|
int i1 = regularText.getTextWidth("From: " + name + chatMessages[index]) + 25;
|
|
if (i1 > 450)
|
|
i1 = 450;
|
|
if (super.mouseX < 4 + i1) {
|
|
if (myPrivilege >= 1) {
|
|
menuActionText[menuActionRow] = "Report abuse @whi@" + name;
|
|
menuActionTypes[menuActionRow] = 2606;
|
|
menuActionRow++;
|
|
}
|
|
menuActionText[menuActionRow] = "Add ignore @whi@" + name;
|
|
menuActionTypes[menuActionRow] = 2042;
|
|
menuActionRow++;
|
|
menuActionText[menuActionRow] = "Add friend @whi@" + name;
|
|
menuActionTypes[menuActionRow] = 2337;
|
|
menuActionRow++;
|
|
}
|
|
}
|
|
if (++message >= 5)
|
|
return;
|
|
}
|
|
if ((type == 5 || type == 6) && privateChatMode < 2 && ++message >= 5)
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
private void requestSpawnObject(int longetivity, int id, int orientation, int group, int y, int type, int plane,
|
|
int x, int delay) {
|
|
SpawnedObject object = null;
|
|
for (SpawnedObject node = (SpawnedObject) spawns.reverseGetFirst(); node != null; node = (SpawnedObject) spawns
|
|
.reverseGetNext()) {
|
|
if (node.plane != plane || node.x != x || node.y != y || node.group != group)
|
|
continue;
|
|
object = node;
|
|
break;
|
|
}
|
|
|
|
if (object == null) {
|
|
object = new SpawnedObject();
|
|
object.plane = plane;
|
|
object.group = group;
|
|
object.x = x;
|
|
object.y = y;
|
|
method89(object);
|
|
spawns.insertHead(object);
|
|
}
|
|
object.id = id;
|
|
object.type = type;
|
|
object.orientation = orientation;
|
|
object.delay = delay;
|
|
object.getLongetivity = longetivity;
|
|
}
|
|
|
|
private boolean interfaceIsSelected(Widget widget) {
|
|
if (widget.scriptOperators == null)
|
|
return false;
|
|
for (int i = 0; i < widget.scriptOperators.length; i++) {
|
|
int j = executeScript(widget, i);
|
|
int k = widget.scriptDefaults[i];
|
|
if (widget.scriptOperators[i] == 2) {
|
|
if (j >= k)
|
|
return false;
|
|
} else if (widget.scriptOperators[i] == 3) {
|
|
if (j <= k)
|
|
return false;
|
|
} else if (widget.scriptOperators[i] == 4) {
|
|
if (j == k)
|
|
return false;
|
|
} else if (j != k)
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private DataInputStream requestCacheIndex(String request) throws IOException {
|
|
if (!Configuration.useJaggrab) {
|
|
if (SignLink.mainapp != null) {
|
|
return SignLink.openUrl(request);
|
|
}
|
|
return new DataInputStream(new URL(getCodeBase(), request).openStream());
|
|
}
|
|
if (jaggrab != null) {
|
|
try {
|
|
jaggrab.close();
|
|
} catch (Exception _ex) {
|
|
}
|
|
jaggrab = null;
|
|
}
|
|
jaggrab = openSocket(43595);
|
|
jaggrab.setSoTimeout(10000);
|
|
java.io.InputStream inputstream = jaggrab.getInputStream();
|
|
OutputStream outputstream = jaggrab.getOutputStream();
|
|
outputstream.write(("JAGGRAB /" + request + "\n\n").getBytes());
|
|
return new DataInputStream(inputstream);
|
|
}
|
|
|
|
private void doFlamesDrawing() {
|
|
char c = '\u0100';
|
|
if (anInt1040 > 0) {
|
|
for (int i = 0; i < 256; i++)
|
|
if (anInt1040 > 768)
|
|
anIntArray850[i] = method83(anIntArray851[i], anIntArray852[i], 1024 - anInt1040);
|
|
else if (anInt1040 > 256)
|
|
anIntArray850[i] = anIntArray852[i];
|
|
else
|
|
anIntArray850[i] = method83(anIntArray852[i], anIntArray851[i], 256 - anInt1040);
|
|
|
|
} else if (anInt1041 > 0) {
|
|
for (int j = 0; j < 256; j++)
|
|
if (anInt1041 > 768)
|
|
anIntArray850[j] = method83(anIntArray851[j], anIntArray853[j], 1024 - anInt1041);
|
|
else if (anInt1041 > 256)
|
|
anIntArray850[j] = anIntArray853[j];
|
|
else
|
|
anIntArray850[j] = method83(anIntArray853[j], anIntArray851[j], 256 - anInt1041);
|
|
|
|
} else {
|
|
System.arraycopy(anIntArray851, 0, anIntArray850, 0, 256);
|
|
|
|
}
|
|
System.arraycopy(flameLeftSprite.getMyPixels(), 0, flameLeftBackground.canvasRaster, 0, 33920);
|
|
|
|
int i1 = 0;
|
|
int j1 = 1152;
|
|
for (int k1 = 1; k1 < c - 1; k1++) {
|
|
int l1 = (anIntArray969[k1] * (c - k1)) / c;
|
|
int j2 = 22 + l1;
|
|
if (j2 < 0)
|
|
j2 = 0;
|
|
i1 += j2;
|
|
for (int l2 = j2; l2 < 128; l2++) {
|
|
int j3 = anIntArray828[i1++];
|
|
if (j3 != 0) {
|
|
int l3 = j3;
|
|
int j4 = 256 - j3;
|
|
j3 = anIntArray850[j3];
|
|
int l4 = flameLeftBackground.canvasRaster[j1];
|
|
flameLeftBackground.canvasRaster[j1++] = ((j3 & 0xff00ff) * l3 + (l4 & 0xff00ff) * j4 & 0xff00ff00)
|
|
+ ((j3 & 0xff00) * l3 + (l4 & 0xff00) * j4 & 0xff0000) >> 8;
|
|
} else {
|
|
j1++;
|
|
}
|
|
}
|
|
|
|
j1 += j2;
|
|
}
|
|
|
|
flameLeftBackground.drawGraphics(0, super.graphics, 0);
|
|
System.arraycopy(flameRightSprite.getMyPixels(), 0, flameRightBackground.canvasRaster, 0, 33920);
|
|
|
|
i1 = 0;
|
|
j1 = 1176;
|
|
for (int k2 = 1; k2 < c - 1; k2++) {
|
|
int i3 = (anIntArray969[k2] * (c - k2)) / c;
|
|
int k3 = 103 - i3;
|
|
j1 += i3;
|
|
for (int i4 = 0; i4 < k3; i4++) {
|
|
int k4 = anIntArray828[i1++];
|
|
if (k4 != 0) {
|
|
int i5 = k4;
|
|
int j5 = 256 - k4;
|
|
k4 = anIntArray850[k4];
|
|
int k5 = flameRightBackground.canvasRaster[j1];
|
|
flameRightBackground.canvasRaster[j1++] = ((k4 & 0xff00ff) * i5 + (k5 & 0xff00ff) * j5 & 0xff00ff00)
|
|
+ ((k4 & 0xff00) * i5 + (k5 & 0xff00) * j5 & 0xff0000) >> 8;
|
|
} else {
|
|
j1++;
|
|
}
|
|
}
|
|
|
|
i1 += 128 - k3;
|
|
j1 += 128 - k3 - i3;
|
|
}
|
|
|
|
flameRightBackground.drawGraphics(0, super.graphics, 637);
|
|
}
|
|
|
|
private void updateOtherPlayerMovement(Buffer stream) {
|
|
int count = stream.readBits(8);
|
|
|
|
if (count < playerCount) {
|
|
for (int index = count; index < playerCount; index++) {
|
|
removedMobs[removedMobCount++] = playerList[index];
|
|
}
|
|
}
|
|
if (count > playerCount) {
|
|
SignLink.reporterror(myUsername + " Too many players");
|
|
throw new RuntimeException("eek");
|
|
}
|
|
playerCount = 0;
|
|
for (int globalIndex = 0; globalIndex < count; globalIndex++) {
|
|
int index = playerList[globalIndex];
|
|
Player player = players[index];
|
|
|
|
int updateRequired = stream.readBits(1);
|
|
|
|
if (updateRequired == 0) {
|
|
playerList[playerCount++] = index;
|
|
player.time = tick;
|
|
} else {
|
|
int movementType = stream.readBits(2);
|
|
if (movementType == 0) {
|
|
playerList[playerCount++] = index;
|
|
player.time = tick;
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = index;
|
|
} else if (movementType == 1) {
|
|
playerList[playerCount++] = index;
|
|
player.time = tick;
|
|
|
|
int direction = stream.readBits(3);
|
|
|
|
player.moveInDir(false, direction);
|
|
|
|
int update = stream.readBits(1);
|
|
|
|
if (update == 1) {
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = index;
|
|
}
|
|
} else if (movementType == 2) {
|
|
playerList[playerCount++] = index;
|
|
player.time = tick;
|
|
|
|
int firstDirection = stream.readBits(3);
|
|
player.moveInDir(true, firstDirection);
|
|
|
|
int secondDirection = stream.readBits(3);
|
|
player.moveInDir(true, secondDirection);
|
|
|
|
int update = stream.readBits(1);
|
|
if (update == 1) {
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = index;
|
|
}
|
|
} else if (movementType == 3) {
|
|
removedMobs[removedMobCount++] = index;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void loginScreenAccessories() {
|
|
/**
|
|
* World-selection
|
|
*/
|
|
setupLoginScreen();
|
|
|
|
loginScreenAccessories.drawGraphics(400, super.graphics, 0);
|
|
loginScreenAccessories.initDrawingArea();
|
|
SpriteCache.lookup(57).drawSprite(6, 63);
|
|
if (!Configuration.worldSwitch) {
|
|
boldText.method382(0xffffff, 55, "World 301", 78, true);
|
|
smallText.method382(0xffffff, 55, "Click to switch", 92, true);
|
|
Configuration.server_address = "localhost";
|
|
Configuration.server_port = 43594;
|
|
} else {
|
|
boldText.method382(0xffffff, 55, "World 302", 78, true);
|
|
smallText.method382(0xffffff, 55, "Click to switch", 92, true);
|
|
Configuration.server_address = "localhost";
|
|
Configuration.server_port = 5555;
|
|
}
|
|
|
|
loginMusicImageProducer.drawGraphics(265, super.graphics, 562);
|
|
loginMusicImageProducer.initDrawingArea();
|
|
if (Configuration.enableMusic) {
|
|
SpriteCache.lookup(58).drawSprite(158, 196);
|
|
} else {
|
|
SpriteCache.lookup(59).drawSprite(158, 196);
|
|
stopMidi();
|
|
}
|
|
|
|
}
|
|
|
|
public void drawMusicSprites() {
|
|
|
|
int musicState = 0;
|
|
bottomRightImageProducer.initDrawingArea();
|
|
switch (musicState) {
|
|
case 0:
|
|
SpriteCache.lookup(58).drawSprite(158, 196);
|
|
break;
|
|
|
|
case 1:
|
|
SpriteCache.lookup(59).drawSprite(158, 196);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void drawLoginScreen(boolean flag) {
|
|
setupLoginScreen();
|
|
loginBoxImageProducer.initDrawingArea();
|
|
titleBoxIndexedImage.draw(0, 0);
|
|
// regularText.render(0xffffff, "Mouse X: " + super.mouseX +
|
|
// " , Mouse Y: " + super.mouseY, 30, frameMode == ScreenMode.FIXED ? 5
|
|
// : frameWidth - 5);
|
|
char c = '\u0168';
|
|
char c1 = '\310';
|
|
if (Configuration.enableMusic && !lowMemory) {
|
|
playSong(SoundConstants.SCAPE_RUNE);
|
|
}
|
|
if (loginScreenState == 0) {
|
|
int i = c1 / 2 + 80;
|
|
smallText.method382(0x75a9a9, c / 2, resourceProvider.loadingMessage, i, true);
|
|
i = c1 / 2 - 20;
|
|
boldText.method382(0xffff00, c / 2, "Welcome to " + Configuration.CLIENT_NAME, i, true);
|
|
i += 30;
|
|
int l = c / 2 - 80;
|
|
int k1 = c1 / 2 + 20;
|
|
titleButtonIndexedImage.draw(l - 73, k1 - 20);
|
|
boldText.method382(0xffffff, l, "New User", k1 + 5, true);
|
|
l = c / 2 + 80;
|
|
titleButtonIndexedImage.draw(l - 73, k1 - 20);
|
|
boldText.method382(0xffffff, l, "Existing User", k1 + 5, true);
|
|
}
|
|
if (loginScreenState == 2) {
|
|
int j = c1 / 2 - 40;
|
|
if (firstLoginMessage.length() > 0) {
|
|
boldText.method382(0xffff00, c / 2, firstLoginMessage, j - 15, true);
|
|
boldText.method382(0xffff00, c / 2, secondLoginMessage, j, true);
|
|
j += 30;
|
|
} else {
|
|
boldText.method382(0xffff00, c / 2, secondLoginMessage, j - 7, true);
|
|
j += 30;
|
|
}
|
|
boldText.drawTextWithPotentialShadow(true, c / 2 - 90, 0xffffff,
|
|
"Login: " + myUsername + ((loginScreenCursorPos == 0) & (tick % 40 < 20) ? "@yel@|" : ""), j);
|
|
j += 15;
|
|
boldText.drawTextWithPotentialShadow(true, c / 2 - 88, 0xffffff,
|
|
"Password: " + StringUtils.passwordAsterisks(myPassword)
|
|
+ ((loginScreenCursorPos == 1) & (tick % 40 < 20) ? "@yel@|" : ""),
|
|
j);
|
|
j += 15;
|
|
if (!flag) {
|
|
int i1 = c / 2 - 80;
|
|
int l1 = c1 / 2 + 50;
|
|
titleButtonIndexedImage.draw(i1 - 73, l1 - 20);
|
|
boldText.method382(0xffffff, i1, "Login", l1 + 5, true);
|
|
i1 = c / 2 + 80;
|
|
titleButtonIndexedImage.draw(i1 - 73, l1 - 20);
|
|
boldText.method382(0xffffff, i1, "Cancel", l1 + 5, true);
|
|
}
|
|
}
|
|
if (loginScreenState == 3) {
|
|
loginScreenState = 0;
|
|
MiscUtils.launchURL(Configuration.REGISTER_ACCOUNT);
|
|
}
|
|
loginBoxImageProducer.drawGraphics(171, super.graphics, 202);
|
|
if (welcomeScreenRaised) {
|
|
welcomeScreenRaised = false;
|
|
topLeft1BackgroundTile.drawGraphics(0, super.graphics, 128);
|
|
bottomLeft1BackgroundTile.drawGraphics(371, super.graphics, 202);
|
|
bottomLeft0BackgroundTile.drawGraphics(265, super.graphics, 0);
|
|
bottomRightImageProducer.drawGraphics(265, super.graphics, 562);
|
|
middleLeft1BackgroundTile.drawGraphics(171, super.graphics, 128);
|
|
aRSImageProducer_1115.drawGraphics(171, super.graphics, 562);
|
|
}
|
|
loginScreenAccessories();
|
|
}
|
|
|
|
private void drawFlames() {
|
|
drawingFlames = true;
|
|
try {
|
|
long l = System.currentTimeMillis();
|
|
int i = 0;
|
|
int j = 20;
|
|
while (aBoolean831) {
|
|
calcFlamesPosition();
|
|
calcFlamesPosition();
|
|
doFlamesDrawing();
|
|
if (++i > 10) {
|
|
long l1 = System.currentTimeMillis();
|
|
int k = (int) (l1 - l) / 10 - j;
|
|
j = 40 - k;
|
|
if (j < 5)
|
|
j = 5;
|
|
i = 0;
|
|
l = l1;
|
|
}
|
|
try {
|
|
Thread.sleep(j);
|
|
} catch (Exception _ex) {
|
|
}
|
|
}
|
|
} catch (Exception _ex) {
|
|
}
|
|
drawingFlames = false;
|
|
}
|
|
|
|
public void raiseWelcomeScreen() {
|
|
welcomeScreenRaised = true;
|
|
}
|
|
|
|
private void parseRegionPackets(Buffer stream, int packetType) {
|
|
if (packetType == PacketConstants.SEND_ALTER_GROUND_ITEM_COUNT) {
|
|
int offset = stream.readUnsignedByte();
|
|
int xLoc = localX + (offset >> 4 & 7);
|
|
int yLoc = localY + (offset & 7);
|
|
int itemId = stream.readUShort();
|
|
int oldItemCount = stream.readUShort();
|
|
int newItemCount = stream.readUShort();
|
|
if (xLoc >= 0 && yLoc >= 0 && xLoc < 104 && yLoc < 104) {
|
|
Deque groundItemsDeque = groundItems[plane][xLoc][yLoc];
|
|
if (groundItemsDeque != null) {
|
|
for (Item groundItem = (Item) groundItemsDeque
|
|
.reverseGetFirst(); groundItem != null; groundItem = (Item) groundItemsDeque
|
|
.reverseGetNext()) {
|
|
if (groundItem.ID != (itemId & 0x7fff) || groundItem.itemCount != oldItemCount)
|
|
continue;
|
|
groundItem.itemCount = newItemCount;
|
|
break;
|
|
}
|
|
|
|
updateGroundItems(xLoc, yLoc);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == 105) {
|
|
int l = stream.readUnsignedByte();
|
|
int k3 = localX + (l >> 4 & 7);
|
|
int j6 = localY + (l & 7);
|
|
int i9 = stream.readUShort();
|
|
int l11 = stream.readUnsignedByte();
|
|
int i14 = l11 >> 4 & 0xf;
|
|
int i16 = l11 & 7;
|
|
if (localPlayer.pathX[0] >= k3 - i14 && localPlayer.pathX[0] <= k3 + i14 && localPlayer.pathY[0] >= j6 - i14
|
|
&& localPlayer.pathY[0] <= j6 + i14 && aBoolean848 && !lowMemory && trackCount < 50) {
|
|
tracks[trackCount] = i9;
|
|
trackLoops[trackCount] = i16;
|
|
soundDelay[trackCount] = Track.delays[i9];
|
|
trackCount++;
|
|
}
|
|
}
|
|
if (packetType == 215) {
|
|
int i1 = stream.readUShortA();
|
|
int l3 = stream.readUByteS();
|
|
int k6 = localX + (l3 >> 4 & 7);
|
|
int j9 = localY + (l3 & 7);
|
|
int i12 = stream.readUShortA();
|
|
int j14 = stream.readUShort();
|
|
if (k6 >= 0 && j9 >= 0 && k6 < 104 && j9 < 104 && i12 != localPlayerIndex) {
|
|
Item class30_sub2_sub4_sub2_2 = new Item();
|
|
class30_sub2_sub4_sub2_2.ID = i1;
|
|
class30_sub2_sub4_sub2_2.itemCount = j14;
|
|
if (groundItems[plane][k6][j9] == null)
|
|
groundItems[plane][k6][j9] = new Deque();
|
|
groundItems[plane][k6][j9].insertHead(class30_sub2_sub4_sub2_2);
|
|
updateGroundItems(k6, j9);
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.SEND_REMOVE_GROUND_ITEM) {
|
|
int offset = stream.readUByteA();
|
|
int xLoc = localX + (offset >> 4 & 7);
|
|
int yLoc = localY + (offset & 7);
|
|
int itemId = stream.readUShort();
|
|
if (xLoc >= 0 && yLoc >= 0 && xLoc < 104 && yLoc < 104) {
|
|
Deque groundItemsDeque = groundItems[plane][xLoc][yLoc];
|
|
if (groundItemsDeque != null) {
|
|
for (Item item = (Item) groundItemsDeque
|
|
.reverseGetFirst(); item != null; item = (Item) groundItemsDeque.reverseGetNext()) {
|
|
if (item.ID != (itemId & 0x7fff))
|
|
continue;
|
|
item.unlink();
|
|
break;
|
|
}
|
|
|
|
if (groundItemsDeque.reverseGetFirst() == null)
|
|
groundItems[plane][xLoc][yLoc] = null;
|
|
updateGroundItems(xLoc, yLoc);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.ANIMATE_OBJECT) {
|
|
int offset = stream.readUByteS();
|
|
int xLoc = localX + (offset >> 4 & 7);
|
|
int yLoc = localY + (offset & 7);
|
|
int objectTypeFace = stream.readUByteS();
|
|
int objectType = objectTypeFace >> 2;
|
|
int objectFace = objectTypeFace & 3;
|
|
int objectGenre = objectGroups[objectType];
|
|
int animId = stream.readUShortA();
|
|
if (xLoc >= 0 && yLoc >= 0 && xLoc < 103 && yLoc < 103) {
|
|
int heightA = tileHeights[plane][xLoc][yLoc];
|
|
int heightB = tileHeights[plane][xLoc + 1][yLoc];
|
|
int heightC = tileHeights[plane][xLoc + 1][yLoc + 1];
|
|
int heightD = tileHeights[plane][xLoc][yLoc + 1];
|
|
if (objectGenre == 0) {// WallObject
|
|
WallObject wallObjectObject = scene.getWallObject(plane, xLoc, yLoc);
|
|
if (wallObjectObject != null) {
|
|
int objectId = wallObjectObject.uid >> 14 & 0x7fff;
|
|
if (objectType == 2) {
|
|
wallObjectObject.renderable1 = new SceneObject(objectId, 4 + objectFace, 2, heightB,
|
|
heightC, heightA, heightD, animId, false);
|
|
wallObjectObject.renderable2 = new SceneObject(objectId, objectFace + 1 & 3, 2, heightB,
|
|
heightC, heightA, heightD, animId, false);
|
|
} else {
|
|
wallObjectObject.renderable1 = new SceneObject(objectId, objectFace, objectType, heightB,
|
|
heightC, heightA, heightD, animId, false);
|
|
}
|
|
}
|
|
}
|
|
if (objectGenre == 1) { // WallDecoration
|
|
WallDecoration wallDecoration = scene.getWallDecoration(xLoc, yLoc, plane);
|
|
if (wallDecoration != null)
|
|
wallDecoration.renderable = new SceneObject(wallDecoration.uid >> 14 & 0x7fff, 0, 4, heightB,
|
|
heightC, heightA, heightD, animId, false);
|
|
}
|
|
if (objectGenre == 2) { // TiledObject
|
|
GameObject tiledObject = scene.getGameObject(xLoc, yLoc, plane);
|
|
if (objectType == 11)
|
|
objectType = 10;
|
|
if (tiledObject != null)
|
|
tiledObject.renderable = new SceneObject(tiledObject.uid >> 14 & 0x7fff, objectFace, objectType,
|
|
heightB, heightC, heightA, heightD, animId, false);
|
|
}
|
|
if (objectGenre == 3) { // GroundDecoration
|
|
GroundDecoration groundDecoration = scene.getGroundDecoration(yLoc, xLoc, plane);
|
|
if (groundDecoration != null)
|
|
groundDecoration.renderable = new SceneObject(groundDecoration.uid >> 14 & 0x7fff, objectFace,
|
|
22, heightB, heightC, heightA, heightD, animId, false);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.TRANSFORM_PLAYER_TO_OBJECT) {
|
|
int offset = stream.readUByteS();
|
|
int xLoc = localX + (offset >> 4 & 7);
|
|
int yLoc = localY + (offset & 7);
|
|
int playerIndex = stream.readUShort();
|
|
byte byte0GreaterXLoc = stream.readByteS();
|
|
int startDelay = stream.readLEUShort();
|
|
byte byte1GreaterYLoc = stream.readNegByte();
|
|
int stopDelay = stream.readUShort();
|
|
int objectTypeFace = stream.readUByteS();
|
|
int objectType = objectTypeFace >> 2;
|
|
int objectFace = objectTypeFace & 3;
|
|
int objectGenre = objectGroups[objectType];
|
|
byte byte2LesserXLoc = stream.readSignedByte();
|
|
int objectId = stream.readUShort();
|
|
byte byte3LesserYLoc = stream.readNegByte();
|
|
Player player;
|
|
if (playerIndex == localPlayerIndex)
|
|
player = localPlayer;
|
|
else
|
|
player = players[playerIndex];
|
|
if (player != null) {
|
|
ObjectDefinition objectDefinition = ObjectDefinition.lookup(objectId);
|
|
int heightA = tileHeights[plane][xLoc][yLoc];
|
|
int heightB = tileHeights[plane][xLoc + 1][yLoc];
|
|
int heightC = tileHeights[plane][xLoc + 1][yLoc + 1];
|
|
int heightD = tileHeights[plane][xLoc][yLoc + 1];
|
|
Model model = objectDefinition.modelAt(objectType, objectFace, heightA, heightB, heightC, heightD, -1);
|
|
if (model != null) {
|
|
requestSpawnObject(stopDelay + 1, -1, 0, objectGenre, yLoc, 0, plane, xLoc, startDelay + 1);
|
|
player.objectModelStart = startDelay + tick;
|
|
player.objectModelStop = stopDelay + tick;
|
|
player.playerModel = model;
|
|
int playerSizeX = objectDefinition.objectSizeX;
|
|
int playerSizeY = objectDefinition.objectSizeY;
|
|
if (objectFace == 1 || objectFace == 3) {
|
|
playerSizeX = objectDefinition.objectSizeY;
|
|
playerSizeY = objectDefinition.objectSizeX;
|
|
}
|
|
player.objectXPos = xLoc * 128 + playerSizeX * 64;
|
|
player.objectYPos = yLoc * 128 + playerSizeY * 64;
|
|
player.objectCenterHeight = getCenterHeight(plane, player.objectYPos, player.objectXPos);
|
|
if (byte2LesserXLoc > byte0GreaterXLoc) {
|
|
byte tmp = byte2LesserXLoc;
|
|
byte2LesserXLoc = byte0GreaterXLoc;
|
|
byte0GreaterXLoc = tmp;
|
|
}
|
|
if (byte3LesserYLoc > byte1GreaterYLoc) {
|
|
byte tmp = byte3LesserYLoc;
|
|
byte3LesserYLoc = byte1GreaterYLoc;
|
|
byte1GreaterYLoc = tmp;
|
|
}
|
|
player.objectAnInt1719LesserXLoc = xLoc + byte2LesserXLoc;
|
|
player.objectAnInt1721GreaterXLoc = xLoc + byte0GreaterXLoc;
|
|
player.objectAnInt1720LesserYLoc = yLoc + byte3LesserYLoc;
|
|
player.objectAnInt1722GreaterYLoc = yLoc + byte1GreaterYLoc;
|
|
}
|
|
}
|
|
}
|
|
if (packetType == PacketConstants.SEND_OBJECT) {
|
|
int offset = stream.readUByteA();
|
|
int x = localX + (offset >> 4 & 7);
|
|
int y = localY + (offset & 7);
|
|
int id = stream.readLEUShort();
|
|
int objectTypeFace = stream.readUByteS();
|
|
int type = objectTypeFace >> 2;
|
|
int orientation = objectTypeFace & 3;
|
|
int group = objectGroups[type];
|
|
if (x >= 0 && y >= 0 && x < 104 && y < 104) {
|
|
requestSpawnObject(-1, id, orientation, group, y, type, plane, x, 0);
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.SEND_GFX) {
|
|
int offset = stream.readUnsignedByte();
|
|
int xLoc = localX + (offset >> 4 & 7);
|
|
int yLoc = localY + (offset & 7);
|
|
int gfxId = stream.readUShort();
|
|
int gfxHeight = stream.readUnsignedByte();
|
|
int gfxDelay = stream.readUShort();
|
|
if (xLoc >= 0 && yLoc >= 0 && xLoc < 104 && yLoc < 104) {
|
|
xLoc = xLoc * 128 + 64;
|
|
yLoc = yLoc * 128 + 64;
|
|
AnimableObject loneGfx = new AnimableObject(plane, tick, gfxDelay, gfxId,
|
|
getCenterHeight(plane, yLoc, xLoc) - gfxHeight, yLoc, xLoc);
|
|
incompleteAnimables.insertHead(loneGfx);
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.SEND_GROUND_ITEM) {
|
|
int itemId = stream.readLEUShortA();
|
|
int itemCount = stream.readUShort();
|
|
int offset = stream.readUnsignedByte();
|
|
int xLoc = localX + (offset >> 4 & 7);
|
|
int yLoc = localY + (offset & 7);
|
|
if (xLoc >= 0 && yLoc >= 0 && xLoc < 104 && yLoc < 104) {
|
|
Item groundItem = new Item();
|
|
groundItem.ID = itemId;
|
|
groundItem.itemCount = itemCount;
|
|
if (groundItems[plane][xLoc][yLoc] == null)
|
|
groundItems[plane][xLoc][yLoc] = new Deque();
|
|
groundItems[plane][xLoc][yLoc].insertHead(groundItem);
|
|
updateGroundItems(xLoc, yLoc);
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.SEND_REMOVE_OBJECT) {
|
|
int objectTypeFace = stream.readNegUByte();
|
|
int type = objectTypeFace >> 2;
|
|
int orientation = objectTypeFace & 3;
|
|
int group = objectGroups[type];
|
|
int offset = stream.readUnsignedByte();
|
|
int x = localX + (offset >> 4 & 7);
|
|
int y = localY + (offset & 7);
|
|
if (x >= 0 && y >= 0 && x < 104 && y < 104) {
|
|
requestSpawnObject(-1, -1, orientation, group, y, type, plane, x, 0);
|
|
}
|
|
return;
|
|
}
|
|
if (packetType == PacketConstants.SEND_PROJECTILE) {
|
|
int offset = stream.readUnsignedByte();
|
|
int x1 = localX + (offset >> 4 & 7);
|
|
int y1 = localY + (offset & 7);
|
|
int x2 = x1 + stream.readSignedByte();
|
|
int y2 = y1 + stream.readSignedByte();
|
|
int target = stream.readShort();
|
|
int gfxMoving = stream.readUShort();
|
|
int startHeight = stream.readUnsignedByte() * 4;
|
|
int endHeight = stream.readUnsignedByte() * 4;
|
|
int startDelay = stream.readUShort();
|
|
int speed = stream.readUShort();
|
|
int initialSlope = stream.readUnsignedByte();
|
|
int frontOffset = stream.readUnsignedByte();
|
|
if (x1 >= 0 && y1 >= 0 && x1 < 104 && y1 < 104 && x2 >= 0 && y2 >= 0 && x2 < 104 && y2 < 104
|
|
&& gfxMoving != 65535) {
|
|
x1 = x1 * 128 + 64;
|
|
y1 = y1 * 128 + 64;
|
|
x2 = x2 * 128 + 64;
|
|
y2 = y2 * 128 + 64;
|
|
Projectile projectile = new Projectile(initialSlope, endHeight, startDelay + tick, speed + tick,
|
|
frontOffset, plane, getCenterHeight(plane, y1, x1) - startHeight, y1, x1, target, gfxMoving);
|
|
projectile.calculateIncrements(startDelay + tick, y2, getCenterHeight(plane, y2, x2) - endHeight, x2);
|
|
projectiles.insertHead(projectile);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void method139(Buffer stream) {
|
|
stream.initBitAccess();
|
|
int k = stream.readBits(8);
|
|
if (k < npcCount) {
|
|
for (int l = k; l < npcCount; l++)
|
|
removedMobs[removedMobCount++] = npcIndices[l];
|
|
|
|
}
|
|
if (k > npcCount) {
|
|
SignLink.reporterror(myUsername + " Too many npcs");
|
|
throw new RuntimeException("eek");
|
|
}
|
|
npcCount = 0;
|
|
for (int i1 = 0; i1 < k; i1++) {
|
|
int j1 = npcIndices[i1];
|
|
Npc npc = npcs[j1];
|
|
int k1 = stream.readBits(1);
|
|
if (k1 == 0) {
|
|
npcIndices[npcCount++] = j1;
|
|
npc.time = tick;
|
|
} else {
|
|
int l1 = stream.readBits(2);
|
|
if (l1 == 0) {
|
|
npcIndices[npcCount++] = j1;
|
|
npc.time = tick;
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = j1;
|
|
} else if (l1 == 1) {
|
|
npcIndices[npcCount++] = j1;
|
|
npc.time = tick;
|
|
int i2 = stream.readBits(3);
|
|
npc.moveInDir(false, i2);
|
|
int k2 = stream.readBits(1);
|
|
if (k2 == 1)
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = j1;
|
|
} else if (l1 == 2) {
|
|
npcIndices[npcCount++] = j1;
|
|
npc.time = tick;
|
|
int j2 = stream.readBits(3);
|
|
npc.moveInDir(true, j2);
|
|
int l2 = stream.readBits(3);
|
|
npc.moveInDir(true, l2);
|
|
int i3 = stream.readBits(1);
|
|
if (i3 == 1)
|
|
mobsAwaitingUpdate[mobsAwaitingUpdateCount++] = j1;
|
|
} else if (l1 == 3)
|
|
removedMobs[removedMobCount++] = j1;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void processLoginScreenInput() {
|
|
if (loginScreenState == 0) {
|
|
if (super.clickMode3 == 1 && super.saveClickX >= 722 && super.saveClickX <= 751 && super.saveClickY >= 463
|
|
&& super.saveClickY <= 493) {
|
|
Configuration.enableMusic = !Configuration.enableMusic;
|
|
}
|
|
|
|
if (super.clickMode3 == 1 && super.saveClickX >= 7 && super.saveClickX <= 104 && super.saveClickY >= 464
|
|
&& super.saveClickY <= 493) {
|
|
Configuration.worldSwitch = !Configuration.worldSwitch;
|
|
}
|
|
|
|
int i = super.myWidth / 2 - 80;
|
|
int l = super.myHeight / 2 + 20;
|
|
l += 20;
|
|
if (super.clickMode3 == 1 && super.saveClickX >= i - 75 && super.saveClickX <= i + 75
|
|
&& super.saveClickY >= l - 20 && super.saveClickY <= l + 20) {
|
|
loginScreenState = 3;
|
|
loginScreenCursorPos = 0;
|
|
}
|
|
i = super.myWidth / 2 + 80;
|
|
if (super.clickMode3 == 1 && super.saveClickX >= i - 75 && super.saveClickX <= i + 75
|
|
&& super.saveClickY >= l - 20 && super.saveClickY <= l + 20) {
|
|
firstLoginMessage = "";
|
|
secondLoginMessage = "Enter your username & password.";
|
|
loginScreenState = 2;
|
|
loginScreenCursorPos = 0;
|
|
}
|
|
} else if (loginScreenState == 2) {
|
|
|
|
if (super.clickMode3 == 1 && super.saveClickX >= 722 && super.saveClickX <= 751 && super.saveClickY >= 463
|
|
&& super.saveClickY <= 493) {
|
|
Configuration.enableMusic = !Configuration.enableMusic;
|
|
}
|
|
if (super.clickMode3 == 1 && super.saveClickX >= 7 && super.saveClickX <= 104 && super.saveClickY >= 464
|
|
&& super.saveClickY <= 493) {
|
|
Configuration.worldSwitch = !Configuration.worldSwitch;
|
|
}
|
|
int j = super.myHeight / 2 - 40;
|
|
j += 30;
|
|
j += 25;
|
|
if (super.clickMode3 == 1 && super.saveClickY >= j - 15 && super.saveClickY < j)
|
|
loginScreenCursorPos = 0;
|
|
j += 15;
|
|
if (super.clickMode3 == 1 && super.saveClickY >= j - 15 && super.saveClickY < j)
|
|
loginScreenCursorPos = 1;
|
|
j += 15;
|
|
int i1 = super.myWidth / 2 - 80;
|
|
int k1 = super.myHeight / 2 + 50;
|
|
k1 += 20;
|
|
if (super.clickMode3 == 1 && super.saveClickX >= i1 - 75 && super.saveClickX <= i1 + 75
|
|
&& super.saveClickY >= k1 - 20 && super.saveClickY <= k1 + 20) {
|
|
loginFailures = 0;
|
|
login(myUsername, myPassword, false);
|
|
if (loggedIn)
|
|
return;
|
|
}
|
|
i1 = super.myWidth / 2 + 80;
|
|
if (super.clickMode3 == 1 && super.saveClickX >= i1 - 75 && super.saveClickX <= i1 + 75
|
|
&& super.saveClickY >= k1 - 20 && super.saveClickY <= k1 + 20) {
|
|
loginScreenState = 0;
|
|
}
|
|
do {
|
|
int l1 = readChar(-796);
|
|
if (l1 == -1)
|
|
break;
|
|
boolean flag1 = false;
|
|
for (int i2 = 0; i2 < validUserPassChars.length(); i2++) {
|
|
if (l1 != validUserPassChars.charAt(i2))
|
|
continue;
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
|
|
if (loginScreenCursorPos == 0) {
|
|
if (l1 == 8 && myUsername.length() > 0)
|
|
myUsername = myUsername.substring(0, myUsername.length() - 1);
|
|
if (l1 == 9 || l1 == 10 || l1 == 13)
|
|
loginScreenCursorPos = 1;
|
|
if (flag1)
|
|
myUsername += (char) l1;
|
|
if (myUsername.length() > 12)
|
|
myUsername = myUsername.substring(0, 12);
|
|
} else if (loginScreenCursorPos == 1) {
|
|
if (l1 == 8 && myPassword.length() > 0)
|
|
myPassword = myPassword.substring(0, myPassword.length() - 1);
|
|
if (l1 == 9 || l1 == 10 || l1 == 13)
|
|
loginScreenCursorPos = 0;
|
|
if (flag1)
|
|
myPassword += (char) l1;
|
|
if (myPassword.length() > 20)
|
|
myPassword = myPassword.substring(0, 20);
|
|
}
|
|
} while (true);
|
|
return;
|
|
} else if (loginScreenState == 3) {
|
|
int k = super.myWidth / 2;
|
|
int j1 = super.myHeight / 2 + 50;
|
|
j1 += 20;
|
|
if (super.clickMode3 == 1 && super.saveClickX >= k - 75 && super.saveClickX <= k + 75
|
|
&& super.saveClickY >= j1 - 20 && super.saveClickY <= j1 + 20)
|
|
loginScreenState = 0;
|
|
}
|
|
}
|
|
|
|
private void removeObject(int y, int z, int k, int l, int x, int group, int previousId) {
|
|
if (x >= 1 && y >= 1 && x <= 102 && y <= 102) {
|
|
if (lowMemory && z != plane)
|
|
return;
|
|
int key = 0;
|
|
if (group == 0)
|
|
key = scene.getWallObjectUid(z, x, y);
|
|
if (group == 1)
|
|
key = scene.getWallDecorationUid(z, x, y);
|
|
if (group == 2)
|
|
key = scene.getGameObjectUid(z, x, y);
|
|
if (group == 3)
|
|
key = scene.getGroundDecorationUid(z, x, y);
|
|
if (key != 0) {
|
|
int config = scene.getMask(z, x, y, key);
|
|
int id = key >> 14 & 0x7fff;
|
|
int objectType = config & 0x1f;
|
|
int orientation = config >> 6;
|
|
if (group == 0) {
|
|
scene.removeWallObject(x, z, y);
|
|
ObjectDefinition objectDef = ObjectDefinition.lookup(id);
|
|
if (objectDef.solid)
|
|
collisionMaps[z].removeObject(orientation, objectType, objectDef.impenetrable, x, y);
|
|
}
|
|
if (group == 1)
|
|
scene.removeWallDecoration(y, z, x);
|
|
if (group == 2) {
|
|
scene.removeTiledObject(z, x, y);
|
|
ObjectDefinition objectDef = ObjectDefinition.lookup(id);
|
|
if (x + objectDef.objectSizeX > 103 || y + objectDef.objectSizeX > 103
|
|
|| x + objectDef.objectSizeY > 103 || y + objectDef.objectSizeY > 103)
|
|
return;
|
|
if (objectDef.solid)
|
|
collisionMaps[z].removeObject(orientation, objectDef.objectSizeX, x, y, objectDef.objectSizeY,
|
|
objectDef.impenetrable);
|
|
}
|
|
if (group == 3) {
|
|
scene.removeGroundDecoration(z, y, x);
|
|
ObjectDefinition objectDef = ObjectDefinition.lookup(id);
|
|
if (objectDef.solid && objectDef.isInteractive)
|
|
collisionMaps[z].removeFloorDecoration(y, x);
|
|
}
|
|
}
|
|
if (previousId >= 0) {
|
|
int plane = z;
|
|
if (plane < 3 && (tileFlags[1][x][y] & 2) == 2)
|
|
plane++;
|
|
MapRegion.placeObject(scene, k, y, l, plane, collisionMaps[z], tileHeights, x, previousId, z);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void updatePlayers(int packetSize, Buffer stream) {
|
|
removedMobCount = 0;
|
|
mobsAwaitingUpdateCount = 0;
|
|
updateLocalPlayerMovement(stream);
|
|
updateOtherPlayerMovement(stream);
|
|
updatePlayerList(stream, packetSize);
|
|
parsePlayerSynchronizationMask(stream);
|
|
for (int count = 0; count < removedMobCount; count++) {
|
|
int index = removedMobs[count];
|
|
|
|
if (players[index].time != tick) {
|
|
players[index] = null;
|
|
}
|
|
}
|
|
|
|
if (stream.currentPosition != packetSize) {
|
|
SignLink.reporterror(
|
|
"Error packet size mismatch in getplayer pos:" + stream.currentPosition + " psize:" + packetSize);
|
|
throw new RuntimeException("eek");
|
|
}
|
|
for (int count = 0; count < playerCount; count++) {
|
|
if (players[playerList[count]] == null) {
|
|
SignLink.reporterror(myUsername + " null entry in pl list - pos:" + count + " size:" + playerCount);
|
|
throw new RuntimeException("eek");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void setCameraPos(int j, int k, int l, int i1, int j1, int k1) {
|
|
int l1 = 2048 - k & 0x7ff;
|
|
int i2 = 2048 - j1 & 0x7ff;
|
|
int j2 = 0;
|
|
int k2 = 0;
|
|
int l2 = j;
|
|
if (l1 != 0) {
|
|
int i3 = Model.SINE[l1];
|
|
int k3 = Model.COSINE[l1];
|
|
int i4 = k2 * k3 - l2 * i3 >> 16;
|
|
l2 = k2 * i3 + l2 * k3 >> 16;
|
|
k2 = i4;
|
|
}
|
|
if (i2 != 0) {
|
|
int j3 = Model.SINE[i2];
|
|
int l3 = Model.COSINE[i2];
|
|
int j4 = l2 * j3 + j2 * l3 >> 16;
|
|
l2 = l2 * l3 - j2 * j3 >> 16;
|
|
j2 = j4;
|
|
}
|
|
xCameraPos = l - j2;
|
|
zCameraPos = i1 - k2;
|
|
yCameraPos = k1 - l2;
|
|
yCameraCurve = k;
|
|
xCameraCurve = j1;
|
|
}
|
|
|
|
/**
|
|
* This method updates default messages upon login to the desired text of
|
|
* the interface text.
|
|
*/
|
|
public void updateStrings(String message, int index) {
|
|
switch (index) {
|
|
case 1675:
|
|
sendString(message, 17508);
|
|
break;// Stab
|
|
case 1676:
|
|
sendString(message, 17509);
|
|
break;// Slash
|
|
case 1677:
|
|
sendString(message, 17510);
|
|
break;// Crush
|
|
case 1678:
|
|
sendString(message, 17511);
|
|
break;// Magic
|
|
case 1679:
|
|
sendString(message, 17512);
|
|
break;// Range
|
|
case 1680:
|
|
// sendString(message, 17513);
|
|
break;// Stab
|
|
case 1681:
|
|
// sendString(message, 17514);
|
|
break;// Slash
|
|
case 1682:
|
|
// sendString(message, 17515);
|
|
break;// Crush
|
|
case 1683:
|
|
sendString(message, 17516);
|
|
break;// Magic
|
|
case 1684:
|
|
sendString(message, 17517);
|
|
break;// Range
|
|
case 1686:
|
|
sendString(message, 17518);
|
|
break;// Strength
|
|
case 1687:
|
|
sendString(message, 17519);
|
|
break;// Prayer
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sends a string
|
|
*/
|
|
public void sendString(String text, int index) {
|
|
Widget.interfaceCache[index].defaultText = text;
|
|
if (Widget.interfaceCache[index].parent == tabInterfaceIDs[tabId]) {
|
|
}
|
|
}
|
|
|
|
public void sendButtonClick(int button, int toggle, int type) {
|
|
Widget widget = Widget.interfaceCache[button];
|
|
|
|
System.out.println(String.format("button: %d toggle: %d type: %d", button, toggle, type));
|
|
|
|
switch (type) {
|
|
case 135:
|
|
boolean flag8 = true;
|
|
|
|
if (widget.contentType > 0) {
|
|
flag8 = promptUserForInput(widget);
|
|
}
|
|
|
|
if (flag8) {
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(button);
|
|
}
|
|
break;
|
|
|
|
// case reset setting widget
|
|
case 646:
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(button);
|
|
|
|
if (widget.scripts != null && widget.scripts[0][0] == 5) {
|
|
if (settings[toggle] != widget.scriptDefaults[0]) {
|
|
settings[toggle] = widget.scriptDefaults[0];
|
|
updateVarp(toggle);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 169:
|
|
outgoing.writeOpcode(185);
|
|
outgoing.writeShort(button);
|
|
if (widget.scripts != null && widget.scripts[0][0] == 5) {
|
|
settings[toggle] = 1 - settings[toggle];
|
|
updateVarp(toggle);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
System.out.println("button: " + button + " - toggle: " + toggle + " - type: " + type);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets button configurations on interfaces.
|
|
*/
|
|
public void sendConfiguration(int id, int state) {
|
|
anIntArray1045[id] = state;
|
|
if (settings[id] != state) {
|
|
settings[id] = state;
|
|
updateVarp(id);
|
|
if (dialogueId != -1)
|
|
updateChatbox = true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Clears the screen of all open interfaces.
|
|
*/
|
|
public void clearScreen() {
|
|
if (overlayInterfaceId != -1) {
|
|
overlayInterfaceId = -1;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
openInterfaceId = -1;
|
|
continuedDialogue = false;
|
|
}
|
|
|
|
/**
|
|
* Displays an interface over the sidebar area.
|
|
*/
|
|
public void inventoryOverlay(int interfaceId, int sideInterfaceId) {
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
openInterfaceId = interfaceId;
|
|
overlayInterfaceId = sideInterfaceId;
|
|
tabAreaAltered = true;
|
|
continuedDialogue = false;
|
|
}
|
|
|
|
private boolean readPacket() {
|
|
|
|
if (socketStream == null) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
|
|
int available = socketStream.available();
|
|
|
|
if (available == 0) {
|
|
return false;
|
|
}
|
|
if (opcode == -1) {
|
|
socketStream.flushInputStream(incoming.payload, 1);
|
|
opcode = incoming.payload[0] & 0xff;
|
|
if (encryption != null)
|
|
opcode = opcode - encryption.getNextKey() & 0xff;
|
|
packetSize = PacketConstants.PACKET_SIZES[opcode];
|
|
available--;
|
|
}
|
|
if (packetSize == -1)
|
|
if (available > 0) {
|
|
socketStream.flushInputStream(incoming.payload, 1);
|
|
packetSize = incoming.payload[0] & 0xff;
|
|
available--;
|
|
} else {
|
|
return false;
|
|
}
|
|
if (packetSize == -2)
|
|
if (available > 1) {
|
|
socketStream.flushInputStream(incoming.payload, 2);
|
|
incoming.currentPosition = 0;
|
|
packetSize = incoming.readUShort();
|
|
available -= 2;
|
|
} else {
|
|
return false;
|
|
}
|
|
if (available < packetSize)
|
|
return false;
|
|
incoming.currentPosition = 0;
|
|
socketStream.flushInputStream(incoming.payload, packetSize);
|
|
timeoutCounter = 0;
|
|
thirdLastOpcode = secondLastOpcode;
|
|
secondLastOpcode = lastOpcode;
|
|
lastOpcode = opcode;
|
|
|
|
if (opcode == PacketConstants.PLAYER_UPDATING) {
|
|
updatePlayers(packetSize, incoming);
|
|
validLocalMap = false;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == 124) {
|
|
int skillId = incoming.readUShort();
|
|
int gainedXP = incoming.readUShort();
|
|
addToXPCounter(skillId, gainedXP);
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == 183) {
|
|
try {
|
|
specialEnabled = incoming.readNegUByte();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.OPEN_WELCOME_SCREEN) {
|
|
daysSinceRecovChange = incoming.readNegUByte();
|
|
unreadMessages = incoming.readUShortA();
|
|
membersInt = incoming.readUnsignedByte();
|
|
anInt1193 = incoming.readIMEInt();
|
|
daysSinceLastLogin = incoming.readUShort();
|
|
if (anInt1193 != 0 && openInterfaceId == -1) {
|
|
SignLink.dnslookup(StringUtils.decodeIp(anInt1193));
|
|
clearTopInterfaces();
|
|
char character = '\u028A';
|
|
if (daysSinceRecovChange != 201 || membersInt == 1)
|
|
character = '\u028F';
|
|
reportAbuseInput = "";
|
|
canMute = false;
|
|
for (int interfaceId = 0; interfaceId < Widget.interfaceCache.length; interfaceId++) {
|
|
if (Widget.interfaceCache[interfaceId] == null
|
|
|| Widget.interfaceCache[interfaceId].contentType != character)
|
|
continue;
|
|
openInterfaceId = Widget.interfaceCache[interfaceId].parent;
|
|
|
|
}
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.DELETE_GROUND_ITEM) {
|
|
localX = incoming.readNegUByte();
|
|
localY = incoming.readUByteS();
|
|
for (int x = localX; x < localX + 8; x++) {
|
|
for (int y = localY; y < localY + 8; y++)
|
|
if (groundItems[plane][x][y] != null) {
|
|
groundItems[plane][x][y] = null;
|
|
updateGroundItems(x, y);
|
|
}
|
|
}
|
|
for (SpawnedObject object = (SpawnedObject) spawns
|
|
.reverseGetFirst(); object != null; object = (SpawnedObject) spawns.reverseGetNext())
|
|
if (object.x >= localX && object.x < localX + 8 && object.y >= localY && object.y < localY + 8
|
|
&& object.plane == plane)
|
|
object.getLongetivity = 0;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SHOW_PLAYER_HEAD_ON_INTERFACE) {
|
|
int playerHeadModelId = incoming.readLEUShortA();
|
|
Widget.interfaceCache[playerHeadModelId].defaultMediaType = 3;
|
|
if (localPlayer.npcDefinition == null)
|
|
Widget.interfaceCache[playerHeadModelId].defaultMedia = (localPlayer.appearanceColors[0] << 25)
|
|
+ (localPlayer.appearanceColors[4] << 20) + (localPlayer.equipment[0] << 15)
|
|
+ (localPlayer.equipment[8] << 10) + (localPlayer.equipment[11] << 5)
|
|
+ localPlayer.equipment[1];
|
|
else
|
|
Widget.interfaceCache[playerHeadModelId].defaultMedia = (int) (0x12345678L
|
|
+ localPlayer.npcDefinition.interfaceType);
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.CLAN_CHAT) {
|
|
try {
|
|
name = incoming.readString();
|
|
defaultText = incoming.readString();
|
|
clanname = incoming.readString();
|
|
rights = incoming.readUShort();
|
|
System.out.println(clanname);
|
|
sendMessage(defaultText, 16, name);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.RESET_CAMERA) {
|
|
oriented = false;
|
|
for (int l = 0; l < 5; l++)
|
|
quakeDirectionActive[l] = false;
|
|
xpCounter = 0;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.CLEAN_ITEMS_OF_INTERFACE) {
|
|
int id = incoming.readLEUShort();
|
|
Widget widget = Widget.interfaceCache[id];
|
|
for (int slot = 0; slot < widget.inventoryItemId.length; slot++) {
|
|
widget.inventoryItemId[slot] = -1;
|
|
widget.inventoryItemId[slot] = 0;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SHOW_IGNORE_NAMES) {
|
|
ignoreCount = packetSize / 8;
|
|
for (int index = 0; index < ignoreCount; index++)
|
|
ignoreListAsLongs[index] = incoming.readLong();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SPIN_CAMERA) {
|
|
oriented = true;
|
|
x = incoming.readUnsignedByte();
|
|
y = incoming.readUnsignedByte();
|
|
height = incoming.readUShort();
|
|
speed = incoming.readUnsignedByte();
|
|
angle = incoming.readUnsignedByte();
|
|
if (angle >= 100) {
|
|
xCameraPos = x * 128 + 64;
|
|
yCameraPos = y * 128 + 64;
|
|
zCameraPos = getCenterHeight(plane, yCameraPos, xCameraPos) - height;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_SKILL) {
|
|
int skill = incoming.readUnsignedByte();
|
|
int experience = incoming.readMEInt();
|
|
int level = incoming.readUnsignedByte();
|
|
if (skill < currentExp.length) {
|
|
int xp = experience - currentExp[skill];
|
|
if (currentExp[skill] > -1)
|
|
addToXPCounter(skill, xp);
|
|
currentExp[skill] = experience;
|
|
currentStats[skill] = level;
|
|
maximumLevels[skill] = 1;
|
|
for (int index = 0; index < 98; index++)
|
|
if (experience >= SKILL_EXPERIENCE[index])
|
|
maximumLevels[skill] = index + 2;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_SIDE_TAB) {
|
|
int id = incoming.readUShort();
|
|
int tab = incoming.readUByteA();
|
|
if (id == 65535)
|
|
id = -1;
|
|
tabInterfaceIDs[tab] = id;
|
|
tabAreaAltered = true;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.PLAY_SONG) {
|
|
int id = incoming.readLEUShort();
|
|
if (id == 65535)
|
|
id = -1;
|
|
if (id != currentSong && Configuration.enableMusic && !lowMemory && prevSong == 0) {
|
|
nextSong = id;
|
|
fadeMusic = true;
|
|
resourceProvider.provide(2, nextSong);
|
|
}
|
|
currentSong = id;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.NEXT_OR_PREVIOUS_SONG) {
|
|
int id = incoming.readLEUShortA();
|
|
int delay = incoming.readUShortA();
|
|
if (Configuration.enableMusic && !lowMemory) {
|
|
nextSong = id;
|
|
fadeMusic = false;
|
|
resourceProvider.provide(2, nextSong);
|
|
prevSong = delay;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.LOGOUT) {
|
|
resetLogout();
|
|
opcode = -1;
|
|
return false;
|
|
}
|
|
|
|
if (opcode == PacketConstants.MOVE_COMPONENT) {
|
|
int horizontalOffset = incoming.readShort();
|
|
int verticalOffset = incoming.readLEShort();
|
|
int id = incoming.readLEUShort();
|
|
Widget widget = Widget.interfaceCache[id];
|
|
widget.x = horizontalOffset;
|
|
widget.anInt265 = verticalOffset;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_MAP_REGION || opcode == PacketConstants.SEND_REGION_MAP_REGION) {
|
|
int regionX = this.regionX;
|
|
int regionY = this.regionY;
|
|
if (opcode == 73) {
|
|
regionX = incoming.readUShortA();
|
|
regionY = incoming.readUShort();
|
|
constructedViewport = false;
|
|
} else if (opcode == 241) {
|
|
regionY = incoming.readUShortA();
|
|
incoming.initBitAccess();
|
|
for (int z = 0; z < 4; z++) {
|
|
for (int x = 0; x < 13; x++) {
|
|
for (int y = 0; y < 13; y++) {
|
|
|
|
int visible = incoming.readBits(1);
|
|
|
|
if (visible == 1) {
|
|
localRegions[z][x][y] = incoming.readBits(26);
|
|
} else {
|
|
localRegions[z][x][y] = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
incoming.disableBitAccess();
|
|
regionX = incoming.readUShort();
|
|
constructedViewport = true;
|
|
}
|
|
if (this.regionX == regionX && this.regionY == regionY && loadingStage == 2) {
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
this.regionX = regionX;
|
|
this.regionY = regionY;
|
|
regionBaseX = (this.regionX - 6) * 8;
|
|
regionBaseY = (this.regionY - 6) * 8;
|
|
inPlayerOwnedHouse = (this.regionX / 8 == 48 || this.regionX / 8 == 49) && this.regionY / 8 == 48;
|
|
if (this.regionX / 8 == 48 && this.regionY / 8 == 148)
|
|
inPlayerOwnedHouse = true;
|
|
loadingStage = 1;
|
|
loadingStartTime = System.currentTimeMillis();
|
|
gameScreenImageProducer.initDrawingArea();
|
|
drawLoadingMessages(1, "Loading - please wait.", null);
|
|
gameScreenImageProducer.drawGraphics(frameMode == ScreenMode.FIXED ? 4 : 0, super.graphics,
|
|
frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
if (opcode == 73) {
|
|
int regionCount = 0;
|
|
for (int x = (this.regionX - 6) / 8; x <= (this.regionX + 6) / 8; x++) {
|
|
for (int y = (this.regionY - 6) / 8; y <= (this.regionY + 6) / 8; y++)
|
|
regionCount++;
|
|
}
|
|
localRegionMapData = new byte[regionCount][];
|
|
localRegionLandscapeData = new byte[regionCount][];
|
|
localRegionIds = new int[regionCount];
|
|
localRegionMapIds = new int[regionCount];
|
|
localRegionLandscapeIds = new int[regionCount];
|
|
regionCount = 0;
|
|
|
|
for (int x = (this.regionX - 6) / 8; x <= (this.regionX + 6) / 8; x++) {
|
|
for (int y = (this.regionY - 6) / 8; y <= (this.regionY + 6) / 8; y++) {
|
|
localRegionIds[regionCount] = (x << 8) + y;
|
|
if (inPlayerOwnedHouse
|
|
&& (y == 49 || y == 149 || y == 147 || x == 50 || x == 49 && y == 47)) {
|
|
localRegionMapIds[regionCount] = -1;
|
|
localRegionLandscapeIds[regionCount] = -1;
|
|
regionCount++;
|
|
} else {
|
|
int map = localRegionMapIds[regionCount] = resourceProvider.resolve(0, y, x);
|
|
if (map != -1) {
|
|
resourceProvider.provide(3, map);
|
|
}
|
|
|
|
int landscape = localRegionLandscapeIds[regionCount] = resourceProvider.resolve(1, y,
|
|
x);
|
|
if (landscape != -1) {
|
|
resourceProvider.provide(3, landscape);
|
|
}
|
|
regionCount++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (opcode == 241) {
|
|
int regionCount = 0;
|
|
|
|
int[] regionIds = new int[676];
|
|
|
|
for (int z = 0; z < 4; z++) {
|
|
for (int x = 0; x < 13; x++) {
|
|
for (int y = 0; y < 13; y++) {
|
|
|
|
int data = localRegions[z][x][y];
|
|
|
|
if (data != -1) {
|
|
int constructedRegionX = data >> 14 & 0x3ff;
|
|
int constructedRegionY = data >> 3 & 0x7ff;
|
|
int region = (constructedRegionX / 8 << 8) + constructedRegionY / 8;
|
|
for (int index = 0; index < regionCount; index++) {
|
|
if (regionIds[index] != region) {
|
|
continue;
|
|
}
|
|
region = -1;
|
|
break;
|
|
}
|
|
if (region != -1) {
|
|
regionIds[regionCount++] = region;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
localRegionMapData = new byte[regionCount][];
|
|
localRegionLandscapeData = new byte[regionCount][];
|
|
localRegionIds = new int[regionCount];
|
|
localRegionMapIds = new int[regionCount];
|
|
localRegionLandscapeIds = new int[regionCount];
|
|
for (int index = 0; index < regionCount; index++) {
|
|
int id = localRegionIds[index] = regionIds[index];
|
|
int constructedRegionX = id >> 8 & 0xff;
|
|
int constructedRegionY = id & 0xff;
|
|
int map = localRegionMapIds[index] = resourceProvider.resolve(0, constructedRegionY,
|
|
constructedRegionX);
|
|
|
|
if (map != -1) {
|
|
resourceProvider.provide(3, map);
|
|
}
|
|
|
|
int landscape = localRegionLandscapeIds[index] = resourceProvider.resolve(1, constructedRegionY,
|
|
constructedRegionX);
|
|
|
|
if (landscape != -1) {
|
|
resourceProvider.provide(3, landscape);
|
|
}
|
|
|
|
}
|
|
}
|
|
int dx = regionBaseX - previousAbsoluteX;
|
|
int dy = regionBaseY - previousAbsoluteY;
|
|
previousAbsoluteX = regionBaseX;
|
|
previousAbsoluteY = regionBaseY;
|
|
for (int index = 0; index < 16384; index++) {
|
|
Npc npc = npcs[index];
|
|
if (npc != null) {
|
|
for (int point = 0; point < 10; point++) {
|
|
npc.pathX[point] -= dx;
|
|
npc.pathY[point] -= dy;
|
|
}
|
|
npc.x -= dx * 128;
|
|
npc.y -= dy * 128;
|
|
}
|
|
}
|
|
for (int index = 0; index < maxPlayers; index++) {
|
|
Player player = players[index];
|
|
if (player != null) {
|
|
for (int point = 0; point < 10; point++) {
|
|
player.pathX[point] -= dx;
|
|
player.pathY[point] -= dy;
|
|
}
|
|
player.x -= dx * 128;
|
|
player.y -= dy * 128;
|
|
}
|
|
}
|
|
validLocalMap = true;
|
|
byte startX = 0;
|
|
byte endX = 104;
|
|
byte stepX = 1;
|
|
if (dx < 0) {
|
|
startX = 103;
|
|
endX = -1;
|
|
stepX = -1;
|
|
}
|
|
byte startY = 0;
|
|
byte endY = 104;
|
|
byte stepY = 1;
|
|
|
|
if (dy < 0) {
|
|
startY = 103;
|
|
endY = -1;
|
|
stepY = -1;
|
|
}
|
|
for (int x = startX; x != endX; x += stepX) {
|
|
for (int y = startY; y != endY; y += stepY) {
|
|
int shiftedX = x + dx;
|
|
int shiftedY = y + dy;
|
|
for (int plane = 0; plane < 4; plane++)
|
|
if (shiftedX >= 0 && shiftedY >= 0 && shiftedX < 104 && shiftedY < 104) {
|
|
groundItems[plane][x][y] = groundItems[plane][shiftedX][shiftedY];
|
|
} else {
|
|
groundItems[plane][x][y] = null;
|
|
}
|
|
}
|
|
}
|
|
for (SpawnedObject object = (SpawnedObject) spawns
|
|
.reverseGetFirst(); object != null; object = (SpawnedObject) spawns.reverseGetNext()) {
|
|
object.x -= dx;
|
|
object.y -= dy;
|
|
if (object.x < 0 || object.y < 0 || object.x >= 104 || object.y >= 104)
|
|
object.unlink();
|
|
}
|
|
if (destinationX != 0) {
|
|
destinationX -= dx;
|
|
destY -= dy;
|
|
}
|
|
oriented = false;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_WALKABLE_INTERFACE) {
|
|
int interfaceId = incoming.readLEShort();
|
|
if (interfaceId >= 0)
|
|
resetAnimation(interfaceId);
|
|
openWalkableInterface = interfaceId;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_MINIMAP_STATE) {
|
|
minimapState = incoming.readUnsignedByte();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SHOW_NPC_HEAD_ON_INTERFACE) {
|
|
int npcId = incoming.readLEUShortA();
|
|
int interfaceId = incoming.readLEUShortA();
|
|
Widget.interfaceCache[interfaceId].defaultMediaType = 2;
|
|
Widget.interfaceCache[interfaceId].defaultMedia = npcId;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SYSTEM_UPDATE) {
|
|
systemUpdateTime = incoming.readLEUShort() * 30;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_MULTIPLE_MAP_PACKETS) {
|
|
localY = incoming.readUnsignedByte();
|
|
localX = incoming.readNegUByte();
|
|
while (incoming.currentPosition < packetSize) {
|
|
int k3 = incoming.readUnsignedByte();
|
|
parseRegionPackets(incoming, k3);
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_EARTHQUAKE) {
|
|
int quakeDirection = incoming.readUnsignedByte();
|
|
int quakeMagnitude = incoming.readUnsignedByte();
|
|
int quakeAmplitude = incoming.readUnsignedByte();
|
|
int fourPiOverPeriod = incoming.readUnsignedByte();
|
|
quakeDirectionActive[quakeDirection] = true;
|
|
quakeMagnitudes[quakeDirection] = quakeMagnitude;
|
|
quakeAmplitudes[quakeDirection] = quakeAmplitude;
|
|
quake4PiOverPeriods[quakeDirection] = fourPiOverPeriod;
|
|
quakeTimes[quakeDirection] = 0;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.PLAY_SOUND_EFFECT) {
|
|
int soundId = incoming.readUShort();
|
|
int type = incoming.readUnsignedByte();
|
|
int delay = incoming.readUShort();
|
|
int volume = incoming.readUShort();
|
|
tracks[trackCount] = soundId;
|
|
trackLoops[trackCount] = type;
|
|
soundDelay[trackCount] = delay + Track.delays[soundId];
|
|
soundVolume[trackCount] = volume;
|
|
trackCount++;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_PLAYER_OPTION) {
|
|
int slot = incoming.readNegUByte();
|
|
int lowPriority = incoming.readUByteA();
|
|
String message = incoming.readString();
|
|
if (slot >= 1 && slot <= 5) {
|
|
if (message.equalsIgnoreCase("null"))
|
|
message = null;
|
|
playerOptions[slot - 1] = message;
|
|
playerOptionsHighPriority[slot - 1] = lowPriority == 0;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.CLEAR_MINIMAP_FLAG) {
|
|
destinationX = 0;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_MESSAGE) {
|
|
String message = incoming.readString();
|
|
if (message.endsWith(":tradereq:")) {
|
|
String name = message.substring(0, message.indexOf(":"));
|
|
long encodedName = StringUtils.encodeBase37(name);
|
|
boolean ignored = false;
|
|
for (int index = 0; index < ignoreCount; index++) {
|
|
if (ignoreListAsLongs[index] != encodedName)
|
|
continue;
|
|
ignored = true;
|
|
|
|
}
|
|
if (!ignored && onTutorialIsland == 0)
|
|
sendMessage("wishes to trade with you.", 4, name);
|
|
} else if (message.endsWith(":clan:")) {
|
|
String name = message.substring(0, message.indexOf(":"));
|
|
StringUtils.encodeBase37(name);
|
|
sendMessage("Clan: ", 8, name);
|
|
} else if (message.endsWith("#url#")) {
|
|
String link = message.substring(0, message.indexOf("#"));
|
|
sendMessage("Join us at: ", 9, link);
|
|
} else if (message.endsWith(":duelreq:")) {
|
|
String name = message.substring(0, message.indexOf(":"));
|
|
long encodedName = StringUtils.encodeBase37(name);
|
|
boolean ignored = false;
|
|
for (int count = 0; count < ignoreCount; count++) {
|
|
if (ignoreListAsLongs[count] != encodedName)
|
|
continue;
|
|
ignored = true;
|
|
|
|
}
|
|
if (!ignored && onTutorialIsland == 0)
|
|
sendMessage("wishes to duel with you.", 8, name);
|
|
} else if (message.endsWith(":chalreq:")) {
|
|
String name = message.substring(0, message.indexOf(":"));
|
|
long encodedName = StringUtils.encodeBase37(name);
|
|
boolean ignored = false;
|
|
for (int index = 0; index < ignoreCount; index++) {
|
|
if (ignoreListAsLongs[index] != encodedName)
|
|
continue;
|
|
ignored = true;
|
|
|
|
}
|
|
if (!ignored && onTutorialIsland == 0) {
|
|
String msg = message.substring(message.indexOf(":") + 1, message.length() - 9);
|
|
sendMessage(msg, 8, name);
|
|
}
|
|
} else if (message.endsWith(":resetautocast:")) {
|
|
autocast = false;
|
|
autoCastId = 0;
|
|
SpriteCache.lookup(43).drawSprite(-100, -100);
|
|
} else {
|
|
sendMessage(message, 0, "");
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.STOP_ALL_ANIMATIONS) {
|
|
for (int index = 0; index < players.length; index++) {
|
|
if (players[index] != null)
|
|
players[index].emoteAnimation = -1;
|
|
}
|
|
for (int index = 0; index < npcs.length; index++) {
|
|
if (npcs[index] != null)
|
|
npcs[index].emoteAnimation = -1;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.ADD_SET_FRIEND) {
|
|
long encodedName = incoming.readLong();
|
|
int world = incoming.readUnsignedByte();
|
|
String name = StringUtils.formatUsername(StringUtils.decodeBase37(encodedName));
|
|
for (int playerIndex = 0; playerIndex < friendsCount; playerIndex++) {
|
|
if (encodedName != friendsListAsLongs[playerIndex])
|
|
continue;
|
|
if (friendsNodeIDs[playerIndex] != world) {
|
|
friendsNodeIDs[playerIndex] = world;
|
|
if (world >= 2) {
|
|
sendMessage(name + " has logged in.", 5, "");
|
|
}
|
|
if (world <= 1) {
|
|
sendMessage(name + " has logged out.", 5, "");
|
|
}
|
|
}
|
|
name = null;
|
|
|
|
}
|
|
if (name != null && friendsCount < 200) {
|
|
friendsListAsLongs[friendsCount] = encodedName;
|
|
friendsList[friendsCount] = name;
|
|
friendsNodeIDs[friendsCount] = world;
|
|
friendsCount++;
|
|
}
|
|
for (boolean stopSorting = false; !stopSorting; ) {
|
|
stopSorting = true;
|
|
for (int friendIndex = 0; friendIndex < friendsCount - 1; friendIndex++)
|
|
if (friendsNodeIDs[friendIndex] != nodeID && friendsNodeIDs[friendIndex + 1] == nodeID
|
|
|| friendsNodeIDs[friendIndex] == 0 && friendsNodeIDs[friendIndex + 1] != 0) {
|
|
int tempFriendNodeId = friendsNodeIDs[friendIndex];
|
|
friendsNodeIDs[friendIndex] = friendsNodeIDs[friendIndex + 1];
|
|
friendsNodeIDs[friendIndex + 1] = tempFriendNodeId;
|
|
String tempFriendName = friendsList[friendIndex];
|
|
friendsList[friendIndex] = friendsList[friendIndex + 1];
|
|
friendsList[friendIndex + 1] = tempFriendName;
|
|
long tempFriendLong = friendsListAsLongs[friendIndex];
|
|
friendsListAsLongs[friendIndex] = friendsListAsLongs[friendIndex + 1];
|
|
friendsListAsLongs[friendIndex + 1] = tempFriendLong;
|
|
stopSorting = false;
|
|
}
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_RUN_ENERGY) {
|
|
runEnergy = incoming.readUnsignedByte();
|
|
System.out.println("setting runEnergy: " + runEnergy);
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_HINT_ICON) {
|
|
// the first byte, which indicates the type of mob
|
|
hintIconDrawType = incoming.readUnsignedByte();
|
|
if (hintIconDrawType == 1) // NPC Hint Arrow
|
|
// the world index or slot of the npc in the server (which
|
|
// is also the same for the client (should))
|
|
hintIconNpcId = incoming.readUShort();
|
|
if (hintIconDrawType >= 2 && hintIconDrawType <= 6) { // Location
|
|
// Hint
|
|
// Arrow
|
|
if (hintIconDrawType == 2) { // Center
|
|
hintIconLocationArrowRelX = 64;
|
|
hintIconLocationArrowRelY = 64;
|
|
}
|
|
if (hintIconDrawType == 3) { // West side
|
|
hintIconLocationArrowRelX = 0;
|
|
hintIconLocationArrowRelY = 64;
|
|
}
|
|
if (hintIconDrawType == 4) { // East side
|
|
hintIconLocationArrowRelX = 128;
|
|
hintIconLocationArrowRelY = 64;
|
|
}
|
|
if (hintIconDrawType == 5) { // South side
|
|
hintIconLocationArrowRelX = 64;
|
|
hintIconLocationArrowRelY = 0;
|
|
}
|
|
if (hintIconDrawType == 6) { // North side
|
|
hintIconLocationArrowRelX = 64;
|
|
hintIconLocationArrowRelY = 128;
|
|
}
|
|
hintIconDrawType = 2;
|
|
// x offset
|
|
hintIconX = incoming.readUShort();
|
|
|
|
// y offset
|
|
hintIconY = incoming.readUShort();
|
|
|
|
// z offset
|
|
hintIconLocationArrowHeight = incoming.readUnsignedByte();
|
|
}
|
|
if (hintIconDrawType == 10) // Player Hint Arrow
|
|
hintIconPlayerId = incoming.readUShort();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_DUO_INTERFACE) { // Send Duo
|
|
// Interface:
|
|
// Main +
|
|
// Sidebar
|
|
int mainInterfaceId = incoming.readUShortA();
|
|
int sidebarOverlayInterfaceId = incoming.readUShort();
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
openInterfaceId = mainInterfaceId;
|
|
overlayInterfaceId = sidebarOverlayInterfaceId;
|
|
tabAreaAltered = true;
|
|
continuedDialogue = false;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == 79) {
|
|
int id = incoming.readLEUShort();
|
|
int scrollPosition = incoming.readUShortA();
|
|
Widget widget = Widget.interfaceCache[id];
|
|
if (widget != null && widget.type == 0) {
|
|
if (scrollPosition < 0)
|
|
scrollPosition = 0;
|
|
if (scrollPosition > widget.scrollMax - widget.height)
|
|
scrollPosition = widget.scrollMax - widget.height;
|
|
widget.scrollPosition = scrollPosition;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == 68) {
|
|
for (int k5 = 0; k5 < settings.length; k5++)
|
|
if (settings[k5] != anIntArray1045[k5]) {
|
|
settings[k5] = anIntArray1045[k5];
|
|
updateVarp(k5);
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_RECEIVED_PRIVATE_MESSAGE) {
|
|
long encodedName = incoming.readLong();
|
|
int messageId = incoming.readInt();
|
|
int rights = incoming.readUnsignedByte();
|
|
boolean ignoreRequest = false;
|
|
for (int index = 0; index < 100; index++) {
|
|
if (privateMessageIds[index] != messageId)
|
|
continue;
|
|
ignoreRequest = true;
|
|
|
|
}
|
|
if (rights <= 1) {
|
|
for (int index = 0; index < ignoreCount; index++) {
|
|
if (ignoreListAsLongs[index] != encodedName)
|
|
continue;
|
|
ignoreRequest = true;
|
|
|
|
}
|
|
}
|
|
if (!ignoreRequest && onTutorialIsland == 0)
|
|
try {
|
|
privateMessageIds[privateMessageCount] = messageId;
|
|
privateMessageCount = (privateMessageCount + 1) % 100;
|
|
String message = ChatMessageCodec.decode(packetSize - 13, incoming);
|
|
// if(l21 != 3)
|
|
// s9 = Censor.doCensor(s9);
|
|
if (rights == 2 || rights == 3)
|
|
sendMessage(message, 7,
|
|
"@cr2@" + StringUtils.formatUsername(StringUtils.decodeBase37(encodedName)));
|
|
else if (rights == 1)
|
|
sendMessage(message, 7,
|
|
"@cr1@" + StringUtils.formatUsername(StringUtils.decodeBase37(encodedName)));
|
|
else
|
|
sendMessage(message, 3, StringUtils.formatUsername(StringUtils.decodeBase37(encodedName)));
|
|
} catch (Exception ex) {
|
|
SignLink.reporterror("cde1");
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_REGION) {
|
|
localY = incoming.readNegUByte();
|
|
localX = incoming.readNegUByte();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == 24) {
|
|
flashingSidebarId = incoming.readUByteS();
|
|
if (flashingSidebarId == tabId) {
|
|
if (flashingSidebarId == 3)
|
|
tabId = 1;
|
|
else
|
|
tabId = 3;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_ITEM_TO_INTERFACE) {
|
|
int widget = incoming.readLEUShort();
|
|
int scale = incoming.readUShort();
|
|
int item = incoming.readUShort();
|
|
if (item == 65535) {
|
|
Widget.interfaceCache[widget].defaultMediaType = 0;
|
|
opcode = -1;
|
|
return true;
|
|
} else {
|
|
ItemDefinition definition = ItemDefinition.lookup(item);
|
|
Widget.interfaceCache[widget].defaultMediaType = 4;
|
|
Widget.interfaceCache[widget].defaultMedia = item;
|
|
Widget.interfaceCache[widget].modelRotation1 = definition.rotationY;
|
|
Widget.interfaceCache[widget].modelRotation2 = definition.rotationY;
|
|
Widget.interfaceCache[widget].modelZoom = (definition.modelZoom * 100) / scale;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (opcode == PacketConstants.SHOW_HIDE_INTERFACE_CONTAINER) {
|
|
boolean hide = incoming.readUnsignedByte() == 1;
|
|
int id = incoming.readUShort();
|
|
Widget.interfaceCache[id].invisible = hide;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_SOLO_NON_WALKABLE_SIDEBAR_INTERFACE) {
|
|
int id = incoming.readLEUShort();
|
|
resetAnimation(id);
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
overlayInterfaceId = id;
|
|
tabAreaAltered = true;
|
|
openInterfaceId = -1;
|
|
continuedDialogue = false;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == 137) {
|
|
try {
|
|
int special = incoming.readUnsignedByte();
|
|
specialOrb = special;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SET_INTERFACE_TEXT) {
|
|
try {
|
|
String text = incoming.readString();
|
|
int id = incoming.readUShortA();
|
|
if (text.startsWith("www.")) {
|
|
MiscUtils.launchURL(text);
|
|
}
|
|
if (text.startsWith(":quicks:")) // TODO what is this
|
|
// abomination?
|
|
clickedQuickPrayers = text.substring(8).equalsIgnoreCase("on");
|
|
if (text.startsWith(":prayer:")) // TODO and what is this
|
|
// abomination?
|
|
prayerBook = text.substring(8);
|
|
updateStrings(text, id);
|
|
sendString(text, id);
|
|
if (id >= 18144 && id <= 18244) {
|
|
clanList[id - 18144] = text;
|
|
}
|
|
} catch (Exception e) {
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.UPDATE_CHAT_MODES) {
|
|
publicChatMode = incoming.readUnsignedByte();
|
|
privateChatMode = incoming.readUnsignedByte();
|
|
tradeMode = incoming.readUnsignedByte();
|
|
updateChatbox = true;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_PLAYER_WEIGHT) {
|
|
weight = incoming.readShort();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_MODEL_TO_INTERFACE) {
|
|
int id = incoming.readLEUShortA();
|
|
int model = incoming.readUShort();
|
|
Widget.interfaceCache[id].defaultMediaType = 1;
|
|
Widget.interfaceCache[id].defaultMedia = model;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_CHANGE_INTERFACE_COLOUR) {
|
|
int id = incoming.readLEUShortA();
|
|
int color = incoming.readLEUShortA();
|
|
int red = color >> 10 & 0x1f;
|
|
int green = color >> 5 & 0x1f;
|
|
int blue = color & 0x1f;
|
|
Widget.interfaceCache[id].textColor = (red << 19) + (green << 11) + (blue << 3);
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_UPDATE_ITEMS) {
|
|
int interfaceId = incoming.readUShort();
|
|
Widget widget = Widget.interfaceCache[interfaceId];
|
|
int itemCount = incoming.readUShort();
|
|
for (int j22 = 0; j22 < itemCount; j22++) {
|
|
int amount = incoming.readUnsignedByte();
|
|
if (amount == 255) {
|
|
amount = incoming.readIMEInt();
|
|
}
|
|
widget.inventoryItemId[j22] = incoming.readLEUShortA();
|
|
widget.inventoryAmounts[j22] = amount;
|
|
}
|
|
for (int slot = itemCount; slot < widget.inventoryItemId.length; slot++) {
|
|
widget.inventoryItemId[slot] = 0;
|
|
widget.inventoryAmounts[slot] = 0;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SET_MODEL_INTERFACE_ZOOM) {
|
|
int scale = incoming.readUShortA();
|
|
int id = incoming.readUShort();
|
|
int pitch = incoming.readUShort();
|
|
int roll = incoming.readLEUShortA();
|
|
Widget.interfaceCache[id].modelRotation1 = pitch;
|
|
Widget.interfaceCache[id].modelRotation2 = roll;
|
|
Widget.interfaceCache[id].modelZoom = scale;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SET_FRIENDSERVER_STATUS) {
|
|
friendServerStatus = incoming.readUnsignedByte();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.MOVE_CAMERA) { // Gradually turn
|
|
// camera to spatial
|
|
// point.
|
|
oriented = true;
|
|
cinematicCamXViewpointLoc = incoming.readUnsignedByte();
|
|
cinematicCamYViewpointLoc = incoming.readUnsignedByte();
|
|
cinematicCamZViewpointLoc = incoming.readUShort();
|
|
constCinematicCamRotationSpeed = incoming.readUnsignedByte();
|
|
varCinematicCamRotationSpeedPromille = incoming.readUnsignedByte();
|
|
if (varCinematicCamRotationSpeedPromille >= 100) {
|
|
int cinCamXViewpointPos = cinematicCamXViewpointLoc * 128 + 64;
|
|
int cinCamYViewpointPos = cinematicCamYViewpointLoc * 128 + 64;
|
|
int cinCamZViewpointPos = getCenterHeight(plane, cinCamYViewpointPos, cinCamXViewpointPos)
|
|
- cinematicCamZViewpointLoc;
|
|
int dXPos = cinCamXViewpointPos - xCameraPos;
|
|
int dYPos = cinCamYViewpointPos - yCameraPos;
|
|
int dZPos = cinCamZViewpointPos - zCameraPos;
|
|
int flatDistance = (int) Math.sqrt(dXPos * dXPos + dYPos * dYPos);
|
|
yCameraCurve = (int) (Math.atan2(dZPos, flatDistance) * 325.94900000000001D) & 0x7ff;
|
|
xCameraCurve = (int) (Math.atan2(dXPos, dYPos) * -325.94900000000001D) & 0x7ff;
|
|
if (yCameraCurve < 128)
|
|
yCameraCurve = 128;
|
|
if (yCameraCurve > 383)
|
|
yCameraCurve = 383;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_INITIALIZE_PACKET) {
|
|
member = incoming.readUByteA();
|
|
localPlayerIndex = incoming.readLEUShortA();
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.NPC_UPDATING) {
|
|
updateNPCs(incoming, packetSize);
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_ENTER_AMOUNT) {
|
|
messagePromptRaised = false;
|
|
inputDialogState = 1;
|
|
amountOrNameInput = "";
|
|
updateChatbox = true;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_ENTER_NAME) { // Send Enter Name
|
|
// Dialogue
|
|
// (still allows
|
|
// numbers)
|
|
messagePromptRaised = false;
|
|
inputDialogState = 2;
|
|
amountOrNameInput = "";
|
|
updateChatbox = true;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_NON_WALKABLE_INTERFACE) {
|
|
int interfaceId = incoming.readUShort();
|
|
resetAnimation(interfaceId);
|
|
if (overlayInterfaceId != -1) {
|
|
overlayInterfaceId = -1;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
if (interfaceId == 15244) {
|
|
fullscreenInterfaceID = 17511;
|
|
openInterfaceId = 15244;
|
|
}
|
|
openInterfaceId = interfaceId;
|
|
continuedDialogue = false;
|
|
opcode = -1;
|
|
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_WALKABLE_CHATBOX_INTERFACE) {
|
|
dialogueId = incoming.readLEShortA();
|
|
updateChatbox = true;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_CONFIG_INT) {
|
|
int id = incoming.readLEUShort();
|
|
int value = incoming.readMEInt();
|
|
anIntArray1045[id] = value;
|
|
if (settings[id] != value) {
|
|
settings[id] = value;
|
|
updateVarp(id);
|
|
if (dialogueId != -1)
|
|
updateChatbox = true;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_CONFIG_BYTE) {
|
|
int id = incoming.readLEUShort();
|
|
byte value = incoming.readSignedByte();
|
|
anIntArray1045[id] = value;
|
|
if (settings[id] != value) {
|
|
settings[id] = value;
|
|
updateVarp(id);
|
|
if (dialogueId != -1)
|
|
updateChatbox = true;
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_MULTICOMBAT_ICON) {
|
|
multicombat = incoming.readUnsignedByte(); // 1 is active
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_ANIMATE_INTERFACE) {
|
|
int id = incoming.readUShort();
|
|
int animation = incoming.readShort();
|
|
Widget widget = Widget.interfaceCache[id];
|
|
widget.defaultAnimationId = animation;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.CLOSE_INTERFACE) {
|
|
if (overlayInterfaceId != -1) {
|
|
overlayInterfaceId = -1;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
}
|
|
if (inputDialogState != 0) {
|
|
inputDialogState = 0;
|
|
updateChatbox = true;
|
|
}
|
|
openInterfaceId = -1;
|
|
continuedDialogue = false;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
if (opcode == PacketConstants.UPDATE_SPECIFIC_ITEM) {
|
|
int interfaceId = incoming.readUShort();
|
|
Widget widget = Widget.interfaceCache[interfaceId];
|
|
while (incoming.currentPosition < packetSize) {
|
|
int slot = incoming.readUSmart();
|
|
int id = incoming.readUShort();
|
|
int amount = incoming.readUnsignedByte();
|
|
if (amount == 255)
|
|
amount = incoming.readInt();
|
|
if (slot >= 0 && slot < widget.inventoryItemId.length) {
|
|
widget.inventoryItemId[slot] = id;
|
|
widget.inventoryAmounts[slot] = amount;
|
|
}
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SEND_GFX || opcode == PacketConstants.SEND_GROUND_ITEM
|
|
|| opcode == PacketConstants.SEND_ALTER_GROUND_ITEM_COUNT
|
|
|| opcode == PacketConstants.SEND_REMOVE_OBJECT || opcode == 105
|
|
|| opcode == PacketConstants.SEND_PROJECTILE || opcode == PacketConstants.TRANSFORM_PLAYER_TO_OBJECT
|
|
|| opcode == PacketConstants.SEND_OBJECT || opcode == PacketConstants.SEND_REMOVE_GROUND_ITEM
|
|
|| opcode == PacketConstants.ANIMATE_OBJECT || opcode == 215) {
|
|
parseRegionPackets(incoming, opcode);
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
if (opcode == PacketConstants.SWITCH_TAB) {
|
|
tabId = incoming.readNegUByte();
|
|
tabAreaAltered = true;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
if (opcode == PacketConstants.SEND_NONWALKABLE_CHATBOX_INTERFACE) {
|
|
int id = incoming.readLEUShort();
|
|
resetAnimation(id);
|
|
if (overlayInterfaceId != -1) {
|
|
overlayInterfaceId = -1;
|
|
tabAreaAltered = true;
|
|
}
|
|
backDialogueId = id;
|
|
updateChatbox = true;
|
|
openInterfaceId = -1;
|
|
continuedDialogue = false;
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
SignLink.reporterror(
|
|
"T1 - " + opcode + "," + packetSize + " - " + secondLastOpcode + "," + thirdLastOpcode);
|
|
// resetLogout();
|
|
} catch (IOException _ex) {
|
|
dropClient();
|
|
} catch (Exception exception) {
|
|
String s2 = "T2 - " + opcode + "," + secondLastOpcode + "," + thirdLastOpcode + " - " + packetSize + ","
|
|
+ (regionBaseX + localPlayer.pathX[0]) + "," + (regionBaseY + localPlayer.pathY[0]) + " - ";
|
|
for (int j15 = 0; j15 < packetSize && j15 < 50; j15++)
|
|
s2 = s2 + incoming.payload[j15] + ",";
|
|
SignLink.reporterror(s2);
|
|
// resetLogout();
|
|
}
|
|
opcode = -1;
|
|
return true;
|
|
}
|
|
|
|
private void moveCameraWithPlayer() {
|
|
anInt1265++;
|
|
showOtherPlayers(true);
|
|
showNPCs(true);
|
|
showOtherPlayers(false);
|
|
showNPCs(false);
|
|
createProjectiles();
|
|
createStationaryGraphics();
|
|
if (!oriented) {
|
|
int i = anInt1184;
|
|
if (anInt984 / 256 > i)
|
|
i = anInt984 / 256;
|
|
if (quakeDirectionActive[4] && quakeAmplitudes[4] + 128 > i)
|
|
i = quakeAmplitudes[4] + 128;
|
|
int k = cameraHorizontal + cameraRotation & 0x7ff;
|
|
setCameraPos(
|
|
cameraZoom + i * ((SceneGraph.viewDistance == 9) && (frameMode == ScreenMode.RESIZABLE) ? 2
|
|
: SceneGraph.viewDistance == 10 ? 5 : 3),
|
|
i, anInt1014, getCenterHeight(plane, localPlayer.y, localPlayer.x) - 50, k, anInt1015);
|
|
}
|
|
int j;
|
|
if (!oriented)
|
|
j = setCameraLocation();
|
|
else
|
|
j = resetCameraHeight();
|
|
int l = xCameraPos;
|
|
int i1 = zCameraPos;
|
|
int j1 = yCameraPos;
|
|
int k1 = yCameraCurve;
|
|
int l1 = xCameraCurve;
|
|
for (int i2 = 0; i2 < 5; i2++)
|
|
if (quakeDirectionActive[i2]) {
|
|
int j2 = (int) ((Math.random() * (double) (quakeMagnitudes[i2] * 2 + 1) - (double) quakeMagnitudes[i2])
|
|
+ Math.sin((double) quakeTimes[i2] * ((double) quake4PiOverPeriods[i2] / 100D))
|
|
* (double) quakeAmplitudes[i2]);
|
|
if (i2 == 0)
|
|
xCameraPos += j2;
|
|
if (i2 == 1)
|
|
zCameraPos += j2;
|
|
if (i2 == 2)
|
|
yCameraPos += j2;
|
|
if (i2 == 3)
|
|
xCameraCurve = xCameraCurve + j2 & 0x7ff;
|
|
if (i2 == 4) {
|
|
yCameraCurve += j2;
|
|
if (yCameraCurve < 128)
|
|
yCameraCurve = 128;
|
|
if (yCameraCurve > 383)
|
|
yCameraCurve = 383;
|
|
}
|
|
}
|
|
int k2 = Rasterizer3D.lastTextureRetrievalCount;
|
|
Model.aBoolean1684 = true;
|
|
Model.anInt1687 = 0;
|
|
Model.anInt1685 = super.mouseX - (frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
Model.anInt1686 = super.mouseY - (frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
Rasterizer2D.clear();
|
|
scene.render(xCameraPos, yCameraPos, xCameraCurve, zCameraPos, j, yCameraCurve);
|
|
scene.clearGameObjectCache();
|
|
if (Configuration.enableFog) {
|
|
double fogDistance = Math.sqrt(Math.pow(zCameraPos, 2));
|
|
int fogStartDistance = 1330;
|
|
int fogEndDistance = 2100;
|
|
fog.setFogDistance((float) fogDistance);
|
|
fog.renderFog(false, fogStartDistance, fogEndDistance, 3);
|
|
}
|
|
updateEntities();
|
|
drawHeadIcon();
|
|
writeBackgroundTexture(k2);
|
|
draw3dScreen();
|
|
if (frameMode != ScreenMode.FIXED) {
|
|
drawChatArea();
|
|
drawMinimap();
|
|
drawTabArea();
|
|
}
|
|
gameScreenImageProducer.drawGraphics(frameMode == ScreenMode.FIXED ? 4 : 0, super.graphics,
|
|
frameMode == ScreenMode.FIXED ? 4 : 0);
|
|
xCameraPos = l;
|
|
zCameraPos = i1;
|
|
yCameraPos = j1;
|
|
yCameraCurve = k1;
|
|
xCameraCurve = l1;
|
|
}
|
|
|
|
private void processMinimapActions() {
|
|
if (openInterfaceId == 15244) {
|
|
return;
|
|
}
|
|
final boolean fixed = frameMode == ScreenMode.FIXED;
|
|
if (fixed ? super.mouseX >= 542 && super.mouseX <= 579 && super.mouseY >= 2 && super.mouseY <= 38
|
|
: super.mouseX >= frameWidth - 180 && super.mouseX <= frameWidth - 139 && super.mouseY >= 0
|
|
&& super.mouseY <= 40) {
|
|
menuActionText[1] = "Face North";
|
|
menuActionTypes[1] = 696;
|
|
menuActionRow = 2;
|
|
}
|
|
if (frameMode != ScreenMode.FIXED && changeTabArea) {
|
|
if (super.mouseX >= frameWidth - 26 && super.mouseX <= frameWidth - 1 && super.mouseY >= 2
|
|
&& super.mouseY <= 24) {
|
|
menuActionText[1] = "Logout";
|
|
menuActionTypes[1] = 700;
|
|
menuActionRow = 2;
|
|
}
|
|
}
|
|
if (worldHover && Configuration.enableOrbs) {
|
|
menuActionText[1] = "World Map";
|
|
menuActionTypes[1] = 850;
|
|
menuActionRow = 2;
|
|
}
|
|
if (specialHover && Configuration.enableOrbs) {
|
|
menuActionText[1] = "Use Special Attack";
|
|
menuActionTypes[1] = 851;
|
|
menuActionRow = 2;
|
|
}
|
|
if (hpHover && Configuration.enableOrbs) {
|
|
menuActionText[1] = Configuration.hpAboveHeads ? "Turn HP Above Heads on" : "Turn HP Above Heads off";
|
|
menuActionTypes[1] = 1508;
|
|
menuActionRow = 2;
|
|
}
|
|
if (prayHover && Configuration.enableOrbs) {
|
|
menuActionText[2] = prayClicked ? "Turn quick-prayers off" : "Turn quick-prayers on";
|
|
menuActionTypes[2] = 1500;
|
|
menuActionRow = 2;
|
|
menuActionText[1] = "Select quick-prayers";
|
|
menuActionTypes[1] = 1506;
|
|
menuActionRow = 3;
|
|
}
|
|
if (runHover && Configuration.enableOrbs) {
|
|
menuActionText[1] = settings[173] == 1 ? "Toggle Run" : "Toggle Run";
|
|
menuActionTypes[1] = 1050;
|
|
menuActionRow = 2;
|
|
|
|
}
|
|
}
|
|
|
|
public int getOrbTextColor(int statusInt) {
|
|
if (statusInt >= 75 && statusInt <= Integer.MAX_VALUE)
|
|
return 0x00FF00;
|
|
else if (statusInt >= 50 && statusInt <= 74)
|
|
return 0xFFFF00;
|
|
else if (statusInt >= 25 && statusInt <= 49)
|
|
return 0xFF981F;
|
|
else
|
|
return 0xFF0000;
|
|
}
|
|
|
|
public int getOrbFill(int statusInt) {
|
|
if (statusInt <= Integer.MAX_VALUE && statusInt >= 97)
|
|
return 0;
|
|
else if (statusInt <= 96 && statusInt >= 93)
|
|
return 1;
|
|
else if (statusInt <= 92 && statusInt >= 89)
|
|
return 2;
|
|
else if (statusInt <= 88 && statusInt >= 85)
|
|
return 3;
|
|
else if (statusInt <= 84 && statusInt >= 81)
|
|
return 4;
|
|
else if (statusInt <= 80 && statusInt >= 77)
|
|
return 5;
|
|
else if (statusInt <= 76 && statusInt >= 73)
|
|
return 6;
|
|
else if (statusInt <= 72 && statusInt >= 69)
|
|
return 7;
|
|
else if (statusInt <= 68 && statusInt >= 65)
|
|
return 8;
|
|
else if (statusInt <= 64 && statusInt >= 61)
|
|
return 9;
|
|
else if (statusInt <= 60 && statusInt >= 57)
|
|
return 10;
|
|
else if (statusInt <= 56 && statusInt >= 53)
|
|
return 11;
|
|
else if (statusInt <= 52 && statusInt >= 49)
|
|
return 12;
|
|
else if (statusInt <= 48 && statusInt >= 45)
|
|
return 13;
|
|
else if (statusInt <= 44 && statusInt >= 41)
|
|
return 14;
|
|
else if (statusInt <= 40 && statusInt >= 37)
|
|
return 15;
|
|
else if (statusInt <= 36 && statusInt >= 33)
|
|
return 16;
|
|
else if (statusInt <= 32 && statusInt >= 29)
|
|
return 17;
|
|
else if (statusInt <= 28 && statusInt >= 25)
|
|
return 18;
|
|
else if (statusInt <= 24 && statusInt >= 21)
|
|
return 19;
|
|
else if (statusInt <= 20 && statusInt >= 17)
|
|
return 20;
|
|
else if (statusInt <= 16 && statusInt >= 13)
|
|
return 21;
|
|
else if (statusInt <= 12 && statusInt >= 9)
|
|
return 22;
|
|
else if (statusInt <= 8 && statusInt >= 7)
|
|
return 23;
|
|
else if (statusInt <= 6 && statusInt >= 5)
|
|
return 24;
|
|
else if (statusInt <= 4 && statusInt >= 3)
|
|
return 25;
|
|
else if (statusInt <= 2 && statusInt >= 1)
|
|
return 26;
|
|
else if (statusInt <= 0)
|
|
return 27;
|
|
return 0;
|
|
}
|
|
|
|
public void clearTopInterfaces() {
|
|
// close interface
|
|
outgoing.writeOpcode(130);
|
|
if (overlayInterfaceId != -1) {
|
|
overlayInterfaceId = -1;
|
|
continuedDialogue = false;
|
|
tabAreaAltered = true;
|
|
}
|
|
if (backDialogueId != -1) {
|
|
backDialogueId = -1;
|
|
updateChatbox = true;
|
|
continuedDialogue = false;
|
|
}
|
|
openInterfaceId = -1;
|
|
fullscreenInterfaceID = -1;
|
|
}
|
|
|
|
public void resetAllImageProducers() {
|
|
if (super.fullGameScreen != null) {
|
|
return;
|
|
}
|
|
chatboxImageProducer = null;
|
|
minimapImageProducer = null;
|
|
tabImageProducer = null;
|
|
gameScreenImageProducer = null;
|
|
chatSettingImageProducer = null;
|
|
topLeft1BackgroundTile = null;
|
|
bottomLeft1BackgroundTile = null;
|
|
loginBoxImageProducer = null;
|
|
flameLeftBackground = null;
|
|
flameRightBackground = null;
|
|
bottomLeft0BackgroundTile = null;
|
|
bottomRightImageProducer = null;
|
|
loginMusicImageProducer = null;
|
|
middleLeft1BackgroundTile = null;
|
|
aRSImageProducer_1115 = null;
|
|
super.fullGameScreen = new ProducingGraphicsBuffer(765, 503);
|
|
welcomeScreenRaised = true;
|
|
}
|
|
|
|
public void mouseWheelDragged(int i, int j) {
|
|
if (!mouseWheelDown) {
|
|
return;
|
|
}
|
|
this.anInt1186 += i * 3;
|
|
this.anInt1187 += (j << 1);
|
|
}
|
|
|
|
public RebottedAPI getApi() {
|
|
return api;
|
|
}
|
|
|
|
public APIData getApiData() {
|
|
return apiData;
|
|
}
|
|
|
|
public enum ScreenMode {
|
|
FIXED, RESIZABLE, FULLSCREEN
|
|
}
|
|
}
|