Merge pull request #3134 from open-osrs/upstream-2002

This commit is contained in:
Owain van Brakel
2022-02-23 18:20:52 +01:00
committed by GitHub
35 changed files with 590 additions and 447 deletions
+2 -2
View File
@@ -25,9 +25,9 @@
object ProjectVersions { object ProjectVersions {
const val launcherVersion = "2.2.0" const val launcherVersion = "2.2.0"
const val rlVersion = "1.8.11" const val rlVersion = "1.8.12"
const val openosrsVersion = "4.20.1" const val openosrsVersion = "4.20.2"
const val rsversion = 203 const val rsversion = 203
const val cacheversion = 165 const val cacheversion = 165
@@ -1088,325 +1088,314 @@ public class ModelLoader
} }
void decodeOldFormat(ModelDefinition def, byte[] var1) void decodeOldFormat(ModelDefinition def, byte[] inputData)
{ {
boolean var2 = false; boolean usesFaceRenderTypes = false;
boolean var3 = false; boolean usesFaceTextures = false;
InputStream var4 = new InputStream(var1); InputStream stream1 = new InputStream(inputData);
InputStream var5 = new InputStream(var1); InputStream stream2 = new InputStream(inputData);
InputStream var6 = new InputStream(var1); InputStream stream3 = new InputStream(inputData);
InputStream var7 = new InputStream(var1); InputStream stream4 = new InputStream(inputData);
InputStream var8 = new InputStream(var1); InputStream stream5 = new InputStream(inputData);
var4.setOffset(var1.length - 18); stream1.setOffset(inputData.length - 18);
int var9 = var4.readUnsignedShort(); int vertexCount = stream1.readUnsignedShort();
int var10 = var4.readUnsignedShort(); int faceCount = stream1.readUnsignedShort();
int var11 = var4.readUnsignedByte(); int textureCount = stream1.readUnsignedByte();
int var12 = var4.readUnsignedByte(); int isTextured = stream1.readUnsignedByte();
int var13 = var4.readUnsignedByte(); int faceRenderPriority = stream1.readUnsignedByte();
int var14 = var4.readUnsignedByte(); int hasFaceTransparencies = stream1.readUnsignedByte();
int var15 = var4.readUnsignedByte(); int hasPackedTransparencyVertexGroups = stream1.readUnsignedByte();
int var16 = var4.readUnsignedByte(); int hasPackedVertexGroups = stream1.readUnsignedByte();
int var17 = var4.readUnsignedShort(); int vertexXDataByteCount = stream1.readUnsignedShort();
int var18 = var4.readUnsignedShort(); int vertexYDataByteCount = stream1.readUnsignedShort();
int var19 = var4.readUnsignedShort(); int vertezZDataByteCount = stream1.readUnsignedShort();
int var20 = var4.readUnsignedShort(); int faceIndexDataByteCount = stream1.readUnsignedShort();
byte var21 = 0; byte offsetOfVertexFlags = 0;
int var22 = var21 + var9; int dataOffset = offsetOfVertexFlags + vertexCount;
int var23 = var22; int offsetOfFaceIndexCompressionTypes = dataOffset;
var22 += var10; dataOffset += faceCount;
int var24 = var22; int offsetOfFaceRenderPriorities = dataOffset;
if (var13 == 255) if (faceRenderPriority == 255)
{ {
var22 += var10; dataOffset += faceCount;
} }
int var25 = var22; int offsetOfPackedTransparencyVertexGroups = dataOffset;
if (var15 == 1) if (hasPackedTransparencyVertexGroups == 1)
{ {
var22 += var10; dataOffset += faceCount;
} }
int var26 = var22; int offsetOfFaceTextureFlags = dataOffset;
if (var12 == 1) if (isTextured == 1)
{ {
var22 += var10; dataOffset += faceCount;
} }
int var27 = var22; int offsetOfPackedVertexGroups = dataOffset;
if (var16 == 1) if (hasPackedVertexGroups == 1)
{ {
var22 += var9; dataOffset += vertexCount;
} }
int var28 = var22; int offsetOfFaceTransparencies = dataOffset;
if (var14 == 1) if (hasFaceTransparencies == 1)
{ {
var22 += var10; dataOffset += faceCount;
} }
int var29 = var22; int offsetOfFaceIndexData = dataOffset;
var22 += var20; dataOffset += faceIndexDataByteCount;
int var30 = var22; int offsetOfFaceColorsOrFaceTextures = dataOffset;
var22 += var10 * 2; dataOffset += faceCount * 2;
int var31 = var22; int offsetOfTextureIndices = dataOffset;
var22 += var11 * 6; dataOffset += textureCount * 6;
int var32 = var22; int offsetOfVertexXData = dataOffset;
var22 += var17; dataOffset += vertexXDataByteCount;
int var33 = var22; int offsetOfVertexYData = dataOffset;
var22 += var18; dataOffset += vertexYDataByteCount;
int var10000 = var22 + var19; int offsetOfVertexZData = dataOffset;
def.vertexCount = var9; def.vertexCount = vertexCount;
def.faceCount = var10; def.faceCount = faceCount;
def.numTextureFaces = var11; def.numTextureFaces = textureCount;
def.vertexX = new int[var9]; def.vertexX = new int[vertexCount];
def.vertexY = new int[var9]; def.vertexY = new int[vertexCount];
def.vertexZ = new int[var9]; def.vertexZ = new int[vertexCount];
def.faceIndices1 = new int[var10]; def.faceIndices1 = new int[faceCount];
def.faceIndices2 = new int[var10]; def.faceIndices2 = new int[faceCount];
def.faceIndices3 = new int[var10]; def.faceIndices3 = new int[faceCount];
if (var11 > 0) if (textureCount > 0)
{ {
def.textureRenderTypes = new byte[var11]; def.textureRenderTypes = new byte[textureCount];
def.texIndices1 = new short[var11]; def.texIndices1 = new short[textureCount];
def.texIndices2 = new short[var11]; def.texIndices2 = new short[textureCount];
def.texIndices3 = new short[var11]; def.texIndices3 = new short[textureCount];
} }
if (var16 == 1) if (hasPackedVertexGroups == 1)
{ {
def.packedVertexGroups = new int[var9]; def.packedVertexGroups = new int[vertexCount];
} }
if (var12 == 1) if (isTextured == 1)
{ {
def.faceRenderTypes = new byte[var10]; def.faceRenderTypes = new byte[faceCount];
def.textureCoords = new byte[var10]; def.textureCoords = new byte[faceCount];
def.faceTextures = new short[var10]; def.faceTextures = new short[faceCount];
} }
if (var13 == 255) if (faceRenderPriority == 255)
{ {
def.faceRenderPriorities = new byte[var10]; def.faceRenderPriorities = new byte[faceCount];
} }
else else
{ {
def.priority = (byte) var13; def.priority = (byte) faceRenderPriority;
} }
if (var14 == 1) if (hasFaceTransparencies == 1)
{ {
def.faceTransparencies = new byte[var10]; def.faceTransparencies = new byte[faceCount];
} }
if (var15 == 1) if (hasPackedTransparencyVertexGroups == 1)
{ {
def.packedTransparencyVertexGroups = new int[var10]; def.packedTransparencyVertexGroups = new int[faceCount];
} }
def.faceColors = new short[var10]; def.faceColors = new short[faceCount];
var4.setOffset(var21); stream1.setOffset(offsetOfVertexFlags);
var5.setOffset(var32); stream2.setOffset(offsetOfVertexXData);
var6.setOffset(var33); stream3.setOffset(offsetOfVertexYData);
var7.setOffset(var22); stream4.setOffset(offsetOfVertexZData);
var8.setOffset(var27); stream5.setOffset(offsetOfPackedVertexGroups);
int var35 = 0; int previousVertexX = 0;
int var36 = 0; int previousVertexY = 0;
int var37 = 0; int previousVertexZ = 0;
int var38; for (int i = 0; i < vertexCount; ++i)
int var39;
int var40;
int var41;
int var42;
for (var38 = 0; var38 < var9; ++var38)
{ {
var39 = var4.readUnsignedByte(); int vertexFlags = stream1.readUnsignedByte();
var40 = 0; int deltaX = 0;
if ((var39 & 1) != 0) if ((vertexFlags & 1) != 0)
{ {
var40 = var5.readShortSmart(); deltaX = stream2.readShortSmart();
} }
var41 = 0; int deltaY = 0;
if ((var39 & 2) != 0) if ((vertexFlags & 2) != 0)
{ {
var41 = var6.readShortSmart(); deltaY = stream3.readShortSmart();
} }
var42 = 0; int deltaZ = 0;
if ((var39 & 4) != 0) if ((vertexFlags & 4) != 0)
{ {
var42 = var7.readShortSmart(); deltaZ = stream4.readShortSmart();
} }
def.vertexX[var38] = var35 + var40; def.vertexX[i] = previousVertexX + deltaX;
def.vertexY[var38] = var36 + var41; def.vertexY[i] = previousVertexY + deltaY;
def.vertexZ[var38] = var37 + var42; def.vertexZ[i] = previousVertexZ + deltaZ;
var35 = def.vertexX[var38]; previousVertexX = def.vertexX[i];
var36 = def.vertexY[var38]; previousVertexY = def.vertexY[i];
var37 = def.vertexZ[var38]; previousVertexZ = def.vertexZ[i];
if (var16 == 1) if (hasPackedVertexGroups == 1)
{ {
def.packedVertexGroups[var38] = var8.readUnsignedByte(); def.packedVertexGroups[i] = stream5.readUnsignedByte();
} }
} }
var4.setOffset(var30); stream1.setOffset(offsetOfFaceColorsOrFaceTextures);
var5.setOffset(var26); stream2.setOffset(offsetOfFaceTextureFlags);
var6.setOffset(var24); stream3.setOffset(offsetOfFaceRenderPriorities);
var7.setOffset(var28); stream4.setOffset(offsetOfFaceTransparencies);
var8.setOffset(var25); stream5.setOffset(offsetOfPackedTransparencyVertexGroups);
for (var38 = 0; var38 < var10; ++var38) for (int i = 0; i < faceCount; ++i)
{ {
def.faceColors[var38] = (short) var4.readUnsignedShort(); def.faceColors[i] = (short) stream1.readUnsignedShort();
if (var12 == 1) if (isTextured == 1)
{ {
var39 = var5.readUnsignedByte(); int faceTextureFlags = stream2.readUnsignedByte();
if ((var39 & 1) == 1) if ((faceTextureFlags & 1) == 1)
{ {
def.faceRenderTypes[var38] = 1; def.faceRenderTypes[i] = 1;
var2 = true; usesFaceRenderTypes = true;
} }
else else
{ {
def.faceRenderTypes[var38] = 0; def.faceRenderTypes[i] = 0;
} }
if ((var39 & 2) == 2) if ((faceTextureFlags & 2) == 2)
{ {
def.textureCoords[var38] = (byte) (var39 >> 2); def.textureCoords[i] = (byte) (faceTextureFlags >> 2);
def.faceTextures[var38] = def.faceColors[var38]; def.faceTextures[i] = def.faceColors[i];
def.faceColors[var38] = 127; def.faceColors[i] = 127;
if (def.faceTextures[var38] != -1) if (def.faceTextures[i] != -1)
{ {
var3 = true; usesFaceTextures = true;
} }
} }
else else
{ {
def.textureCoords[var38] = -1; def.textureCoords[i] = -1;
def.faceTextures[var38] = -1; def.faceTextures[i] = -1;
} }
} }
if (var13 == 255) if (faceRenderPriority == 255)
{ {
def.faceRenderPriorities[var38] = var6.readByte(); def.faceRenderPriorities[i] = stream3.readByte();
} }
if (var14 == 1) if (hasFaceTransparencies == 1)
{ {
def.faceTransparencies[var38] = var7.readByte(); def.faceTransparencies[i] = stream4.readByte();
} }
if (var15 == 1) if (hasPackedTransparencyVertexGroups == 1)
{ {
def.packedTransparencyVertexGroups[var38] = var8.readUnsignedByte(); def.packedTransparencyVertexGroups[i] = stream5.readUnsignedByte();
} }
} }
var4.setOffset(var29); stream1.setOffset(offsetOfFaceIndexData);
var5.setOffset(var23); stream2.setOffset(offsetOfFaceIndexCompressionTypes);
var38 = 0; int previousIndex1 = 0;
var39 = 0; int previousIndex2 = 0;
var40 = 0; int previousIndex3 = 0;
var41 = 0;
int var43; for (int i = 0; i < faceCount; ++i)
int var44;
for (var42 = 0; var42 < var10; ++var42)
{ {
var43 = var5.readUnsignedByte(); int faceIndexCompressionType = stream2.readUnsignedByte();
if (var43 == 1) if (faceIndexCompressionType == 1)
{ {
var38 = var4.readShortSmart() + var41; previousIndex1 = stream1.readShortSmart() + previousIndex3;
var39 = var4.readShortSmart() + var38; previousIndex2 = stream1.readShortSmart() + previousIndex1;
var40 = var4.readShortSmart() + var39; previousIndex3 = stream1.readShortSmart() + previousIndex2;
var41 = var40; def.faceIndices1[i] = previousIndex1;
def.faceIndices1[var42] = var38; def.faceIndices2[i] = previousIndex2;
def.faceIndices2[var42] = var39; def.faceIndices3[i] = previousIndex3;
def.faceIndices3[var42] = var40;
} }
if (var43 == 2) if (faceIndexCompressionType == 2)
{ {
var39 = var40; previousIndex2 = previousIndex3;
var40 = var4.readShortSmart() + var41; previousIndex3 = stream1.readShortSmart() + previousIndex3;
var41 = var40; def.faceIndices1[i] = previousIndex1;
def.faceIndices1[var42] = var38; def.faceIndices2[i] = previousIndex2;
def.faceIndices2[var42] = var39; def.faceIndices3[i] = previousIndex3;
def.faceIndices3[var42] = var40;
} }
if (var43 == 3) if (faceIndexCompressionType == 3)
{ {
var38 = var40; previousIndex1 = previousIndex3;
var40 = var4.readShortSmart() + var41; previousIndex3 = stream1.readShortSmart() + previousIndex3;
var41 = var40; def.faceIndices1[i] = previousIndex1;
def.faceIndices1[var42] = var38; def.faceIndices2[i] = previousIndex2;
def.faceIndices2[var42] = var39; def.faceIndices3[i] = previousIndex3;
def.faceIndices3[var42] = var40;
} }
if (var43 == 4) if (faceIndexCompressionType == 4)
{ {
var44 = var38; int swap = previousIndex1;
var38 = var39; previousIndex1 = previousIndex2;
var39 = var44; previousIndex2 = swap;
var40 = var4.readShortSmart() + var41; previousIndex3 = stream1.readShortSmart() + previousIndex3;
var41 = var40; def.faceIndices1[i] = previousIndex1;
def.faceIndices1[var42] = var38; def.faceIndices2[i] = previousIndex2;
def.faceIndices2[var42] = var44; def.faceIndices3[i] = previousIndex3;
def.faceIndices3[var42] = var40;
} }
} }
var4.setOffset(var31); stream1.setOffset(offsetOfTextureIndices);
for (var42 = 0; var42 < var11; ++var42) for (int i = 0; i < textureCount; ++i)
{ {
def.textureRenderTypes[var42] = 0; def.textureRenderTypes[i] = 0;
def.texIndices1[var42] = (short) var4.readUnsignedShort(); def.texIndices1[i] = (short) stream1.readUnsignedShort();
def.texIndices2[var42] = (short) var4.readUnsignedShort(); def.texIndices2[i] = (short) stream1.readUnsignedShort();
def.texIndices3[var42] = (short) var4.readUnsignedShort(); def.texIndices3[i] = (short) stream1.readUnsignedShort();
} }
if (def.textureCoords != null) if (def.textureCoords != null)
{ {
boolean var45 = false; boolean usesTextureCoords = false;
for (var43 = 0; var43 < var10; ++var43) for (int i = 0; i < faceCount; ++i)
{ {
var44 = def.textureCoords[var43] & 255; int coord = def.textureCoords[i] & 255;
if (var44 != 255) if (coord != 255)
{ {
if (def.faceIndices1[var43] == (def.texIndices1[var44] & '\uffff') && def.faceIndices2[var43] == (def.texIndices2[var44] & '\uffff') && def.faceIndices3[var43] == (def.texIndices3[var44] & '\uffff')) if (def.faceIndices1[i] == (def.texIndices1[coord] & '\uffff') && def.faceIndices2[i] == (def.texIndices2[coord] & '\uffff') && def.faceIndices3[i] == (def.texIndices3[coord] & '\uffff'))
{ {
def.textureCoords[var43] = -1; def.textureCoords[i] = -1;
} }
else else
{ {
var45 = true; usesTextureCoords = true;
} }
} }
} }
if (!var45) if (!usesTextureCoords)
{ {
def.textureCoords = null; def.textureCoords = null;
} }
} }
if (!var3) if (!usesFaceTextures)
{ {
def.faceTextures = null; def.faceTextures = null;
} }
if (!var2) if (!usesFaceRenderTypes)
{ {
def.faceRenderTypes = null; def.faceRenderTypes = null;
} }
} }
} }
@@ -12370,5 +12370,37 @@ public final class ItemID
public static final int STRONGBONES_BONE = 26593; public static final int STRONGBONES_BONE = 26593;
public static final int GRUBFOOT = 26594; public static final int GRUBFOOT = 26594;
public static final int ZANIK_26595 = 26595; public static final int ZANIK_26595 = 26595;
public static final int NOTES_26596 = 26596;
public static final int DESERT_BAIT = 26598;
public static final int TINY_FISH = 26600;
public static final int OSMANS_REPORT = 26602;
public static final int TREASURE_CLUE_ONE = 26605;
public static final int TREASURE_CLUE_TWO = 26607;
public static final int TREASURE_CLUE_THREE = 26609;
public static final int ZEKES_CHALLENGE_SCROLL = 26611;
public static final int CAPT_ARNAVS_CHEST = 26613;
public static final int BUCKET_COOKOUT = 26615;
public static final int BUCKET_OF_WATER_COOKOUT = 26617;
public static final int POT_COOKOUT = 26619;
public static final int POT_OF_FLOUR_COOKOUT = 26621;
public static final int TOMATO_COOKOUT = 26623;
public static final int CHEESE_COOKOUT = 26625;
public static final int BANANA_COOKOUT = 26627;
public static final int PIZZA_BASE_COOKOUT = 26629;
public static final int INCOMPLETE_PIZZA_COOKOUT = 26631;
public static final int UNCOOKED_PIZZA_COOKOUT = 26633;
public static final int PLAIN_PIZZA_COOKOUT = 26635;
public static final int BURNT_PIZZA_COOKOUT = 26637;
public static final int BREAD_DOUGH_COOKOUT = 26639;
public static final int BREAD_COOKOUT = 26641;
public static final int BURNT_BREAD_COOKOUT = 26643;
public static final int BANANA_PIZZA_COOKOUT = 26645;
public static final int BURNT_BANANA_PIZZA_COOKOUT = 26647;
public static final int SKIS = 26649;
public static final int LOOT_KEY = 26651;
public static final int LOOT_KEY_26652 = 26652;
public static final int LOOT_KEY_26653 = 26653;
public static final int LOOT_KEY_26654 = 26654;
public static final int LOOT_KEY_26655 = 26655;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -8747,8 +8747,8 @@ public final class NpcID
public static final int ZAMORAKIAN_ACOLYTE = 10379; public static final int ZAMORAKIAN_ACOLYTE = 10379;
public static final int ZAMORAKIAN_ACOLYTE_10380 = 10380; public static final int ZAMORAKIAN_ACOLYTE_10380 = 10380;
public static final int ZAMORAKIAN_ACOLYTE_10381 = 10381; public static final int ZAMORAKIAN_ACOLYTE_10381 = 10381;
public static final int REFUGEE = 10382; public static final int SKULLY = 10382;
public static final int REFUGEE_10383 = 10383; public static final int REFUGEE = 10383;
public static final int REFUGEE_10384 = 10384; public static final int REFUGEE_10384 = 10384;
public static final int REFUGEE_10385 = 10385; public static final int REFUGEE_10385 = 10385;
public static final int PHABELLE_BILE = 10386; public static final int PHABELLE_BILE = 10386;
@@ -9620,5 +9620,15 @@ public final class NpcID
public static final int DIPFLIP = 11383; public static final int DIPFLIP = 11383;
public static final int OLDAK_11384 = 11384; public static final int OLDAK_11384 = 11384;
public static final int OLDAK_11385 = 11385; public static final int OLDAK_11385 = 11385;
public static final int LARRY_LEPRECHAUN = 11399;
public static final int FISHING_SPOT_11400 = 11400;
public static final int BIG_DAVE_11401 = 11401;
public static final int CAPT_ARNAV_11402 = 11402;
public static final int MY_ARM_11403 = 11403;
public static final int COOK_11404 = 11404;
public static final int WISE_OLD_MAN_11405 = 11405;
public static final int HANS_11406 = 11406;
public static final int HASSAN_11407 = 11407;
public static final int LEPRECHAUN = 11408;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -14015,5 +14015,33 @@ public final class NullItemID
public static final int NULL_26584 = 26584; public static final int NULL_26584 = 26584;
public static final int NULL_26586 = 26586; public static final int NULL_26586 = 26586;
public static final int NULL_26588 = 26588; public static final int NULL_26588 = 26588;
public static final int NULL_26597 = 26597;
public static final int NULL_26599 = 26599;
public static final int NULL_26601 = 26601;
public static final int NULL_26603 = 26603;
public static final int NULL_26604 = 26604;
public static final int NULL_26606 = 26606;
public static final int NULL_26608 = 26608;
public static final int NULL_26610 = 26610;
public static final int NULL_26612 = 26612;
public static final int NULL_26614 = 26614;
public static final int NULL_26616 = 26616;
public static final int NULL_26618 = 26618;
public static final int NULL_26620 = 26620;
public static final int NULL_26622 = 26622;
public static final int NULL_26624 = 26624;
public static final int NULL_26626 = 26626;
public static final int NULL_26628 = 26628;
public static final int NULL_26630 = 26630;
public static final int NULL_26632 = 26632;
public static final int NULL_26634 = 26634;
public static final int NULL_26636 = 26636;
public static final int NULL_26638 = 26638;
public static final int NULL_26640 = 26640;
public static final int NULL_26642 = 26642;
public static final int NULL_26644 = 26644;
public static final int NULL_26646 = 26646;
public static final int NULL_26648 = 26648;
public static final int NULL_26650 = 26650;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -21428,5 +21428,6 @@ public final class NullObjectID
public static final int NULL_43465 = 43465; public static final int NULL_43465 = 43465;
public static final int NULL_43466 = 43466; public static final int NULL_43466 = 43466;
public static final int NULL_43467 = 43467; public static final int NULL_43467 = 43467;
public static final int NULL_43486 = 43486;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -22025,5 +22025,23 @@ public final class ObjectID
public static final int LARGE_DOOR_43459 = 43459; public static final int LARGE_DOOR_43459 = 43459;
public static final int LARGE_DOOR_43460 = 43460; public static final int LARGE_DOOR_43460 = 43460;
public static final int CAVE_ENTRANCE_43462 = 43462; public static final int CAVE_ENTRANCE_43462 = 43462;
public static final int BANNER_43468 = 43468;
public static final int BANNER_43469 = 43469;
public static final int BANNER_43470 = 43470;
public static final int BANNER_43471 = 43471;
public static final int PARTY_BALLOONS = 43472;
public static final int PARTY_BALLOONS_43473 = 43473;
public static final int PARTY_BALLOONS_43474 = 43474;
public static final int PARTY_BALLOONS_43475 = 43475;
public static final int PARTY_BALLOONS_43476 = 43476;
public static final int SINK_43477 = 43477;
public static final int BARREL_OF_FLOUR_43478 = 43478;
public static final int CLAY_OVEN_43479 = 43479;
public static final int COOKING_SHELF_UTENSILS = 43480;
public static final int JUDGES_TABLE = 43481;
public static final int TABLE_43482 = 43482;
public static final int CUPBOARD_43483 = 43483;
public static final int LOOT_CHEST = 43484;
public static final int LOOT_CHEST_43485 = 43485;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -665,7 +665,16 @@ public enum Varbits
* 0 = on * 0 = on
* 1 = off * 1 = off
*/ */
BOSS_HEALTH_OVERLAY(12389); BOSS_HEALTH_OVERLAY(12389),
/**
* Whether the PVP kill-death stats widget should be drawn while in the wilderness or in PVP worlds.
*
* 0 = Disabled
* 1 = Enabled
*/
SHOW_PVP_KDR_STATS(4143),
;
/** /**
* The raw varbit ID. * The raw varbit ID.
@@ -314,6 +314,8 @@ public class Notifier
commands.add("notify-send"); commands.add("notify-send");
commands.add(title); commands.add(title);
commands.add(message); commands.add(message);
commands.add("-a");
commands.add(SHELL_ESCAPE.escape(appName));
commands.add("-i"); commands.add("-i");
commands.add(SHELL_ESCAPE.escape(notifyIconPath.toAbsolutePath().toString())); commands.add(SHELL_ESCAPE.escape(notifyIconPath.toAbsolutePath().toString()));
commands.add("-u"); commands.add("-u");
@@ -326,7 +326,9 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
new CrypticClue("A graceful man of many colours, his crates must be full of many delights.", "Hill Giant", CRATE_42067, new WorldPoint(1506, 3590, 2), "Kill any Hill Giant for a medium key. Then search the crate on the top floor of Osten's clothing shop in Shayzien."), new CrypticClue("A graceful man of many colours, his crates must be full of many delights.", "Hill Giant", CRATE_42067, new WorldPoint(1506, 3590, 2), "Kill any Hill Giant for a medium key. Then search the crate on the top floor of Osten's clothing shop in Shayzien."),
new CrypticClue("Search the basket of apples in an orchard, south of the unknown grave surrounded by white roses.", APPLE_BASKET, new WorldPoint(1718, 3626, 0), "Search the middle apple basket in the apple orchard north of Hosidius."), new CrypticClue("Search the basket of apples in an orchard, south of the unknown grave surrounded by white roses.", APPLE_BASKET, new WorldPoint(1718, 3626, 0), "Search the middle apple basket in the apple orchard north of Hosidius."),
new CrypticClue("Dig in the lair of red wings, within the temple of the Sun and Moon.", new WorldPoint(1820, 9935, 0), "Forthos Dungeon. In the center of the red dragons."), new CrypticClue("Dig in the lair of red wings, within the temple of the Sun and Moon.", new WorldPoint(1820, 9935, 0), "Forthos Dungeon. In the center of the red dragons."),
new CrypticClue("Within the town of Lumbridge lives a man named Bob. He walks out of his door and takes 1 step east, 7 steps north, 5 steps west and 1 step south. Once he arrives, he digs a hole and buries his treasure.", new WorldPoint(3230, 3209, 0), "Just west of the bush outside Bob's axe shop in Lumbridge.") new CrypticClue("Within the town of Lumbridge lives a man named Bob. He walks out of his door and takes 1 step east, 7 steps north, 5 steps west and 1 step south. Once he arrives, he digs a hole and buries his treasure.", new WorldPoint(3230, 3209, 0), "Just west of the bush outside Bob's axe shop in Lumbridge."),
new CrypticClue("Try not to let yourself be dazzled when you search these drawers.", DRAWERS_350, new WorldPoint(2561, 3323, 0), "Search the western drawers in Jimmy Dazzler's home near the East Ardougne Rat Pits."),
new CrypticClue("The Big High War God left his mark on this place.", new WorldPoint(3572, 4372, 0), "Dig anywhere in Yu'biusk. Fairy ring BLQ.")
); );
private final String text; private final String text;
@@ -54,6 +54,7 @@ public enum FairyRings
BKR("Mort Myre Swamp, south of Canifis"), BKR("Mort Myre Swamp, south of Canifis"),
BKS("Zanaris"), BKS("Zanaris"),
BLP("TzHaar area"), BLP("TzHaar area"),
BLQ("Yu'biusk"),
BLR("Legends' Guild"), BLR("Legends' Guild"),
// C // C
@@ -353,6 +353,8 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
System.setProperty("jogl.debug", "true"); System.setProperty("jogl.debug", "true");
} }
System.setProperty("jogamp.gluegen.UseNativeExeFile", "true");
GLProfile.initSingleton(); GLProfile.initSingleton();
invokeOnMainThread(() -> invokeOnMainThread(() ->
@@ -434,8 +434,9 @@ class SceneUploader
len += 3; len += 3;
continue; continue;
} }
// HSL override is not applied to flat shade faces or to textured faces
else if (faceTextures == null || faceTextures[face] == -1) // HSL override is not applied to textured faces
if (faceTextures == null || faceTextures[face] == -1)
{ {
if (overrideAmount > 0) if (overrideAmount > 0)
{ {
@@ -525,8 +526,9 @@ class SceneUploader
} }
return 3; return 3;
} }
// HSL override is not applied to flat shade faces or to textured faces
else if (faceTextures == null || faceTextures[face] == -1) // HSL override is not applied to textured faces
if (faceTextures == null || faceTextures[face] == -1)
{ {
if (overrideAmount > 0) if (overrideAmount > 0)
{ {
@@ -205,6 +205,8 @@ public class LootTrackerPlugin extends Plugin
private static final String HALLOWED_SEPULCHRE_COFFIN_EVENT = "Coffin (Hallowed Sepulchre)"; private static final String HALLOWED_SEPULCHRE_COFFIN_EVENT = "Coffin (Hallowed Sepulchre)";
private static final Set<Integer> HALLOWED_SEPULCHRE_MAP_REGIONS = ImmutableSet.of(8797, 10077, 9308, 10074, 9050); // one map region per floor private static final Set<Integer> HALLOWED_SEPULCHRE_MAP_REGIONS = ImmutableSet.of(8797, 10077, 9308, 10074, 9050); // one map region per floor
private static final String HALLOWED_SACK_EVENT = "Hallowed Sack";
// Last man standing map regions // Last man standing map regions
private static final Set<Integer> LAST_MAN_STANDING_REGIONS = ImmutableSet.of(13658, 13659, 13660, 13914, 13915, 13916, 13918, 13919, 13920, 14174, 14175, 14176, 14430, 14431, 14432); private static final Set<Integer> LAST_MAN_STANDING_REGIONS = ImmutableSet.of(13658, 13659, 13660, 13914, 13915, 13916, 13918, 13919, 13920, 14174, 14175, 14176, 14430, 14431, 14432);
@@ -791,6 +793,7 @@ public class LootTrackerPlugin extends Plugin
if (CHEST_EVENT_TYPES.containsValue(eventType) if (CHEST_EVENT_TYPES.containsValue(eventType)
|| SHADE_CHEST_OBJECTS.containsValue(eventType) || SHADE_CHEST_OBJECTS.containsValue(eventType)
|| HALLOWED_SEPULCHRE_COFFIN_EVENT.equals(eventType) || HALLOWED_SEPULCHRE_COFFIN_EVENT.equals(eventType)
|| HALLOWED_SACK_EVENT.equals(eventType)
|| HERBIBOAR_EVENT.equals(eventType) || HERBIBOAR_EVENT.equals(eventType)
|| HESPORI_EVENT.equals(eventType) || HESPORI_EVENT.equals(eventType)
|| WINTERTODT_SUPPLY_CRATE_EVENT.equals(eventType) || WINTERTODT_SUPPLY_CRATE_EVENT.equals(eventType)
@@ -876,6 +879,10 @@ public class LootTrackerPlugin extends Plugin
setEvent(LootRecordType.EVENT, MAHOGANY_CRATE_EVENT, client.getBoostedSkillLevel(Skill.CONSTRUCTION)); setEvent(LootRecordType.EVENT, MAHOGANY_CRATE_EVENT, client.getBoostedSkillLevel(Skill.CONSTRUCTION));
takeInventorySnapshot(); takeInventorySnapshot();
break; break;
case ItemID.HALLOWED_SACK:
setEvent(LootRecordType.EVENT, HALLOWED_SACK_EVENT);
takeInventorySnapshot();
break;
} }
} }
} }
@@ -41,4 +41,5 @@ public class ScreenMarker
private Color color; private Color color;
private Color fill; private Color fill;
private boolean visible; private boolean visible;
private boolean labelled;
} }
@@ -29,7 +29,7 @@ import java.awt.event.MouseEvent;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import net.runelite.client.input.MouseAdapter; import net.runelite.client.input.MouseAdapter;
public class ScreenMarkerMouseListener extends MouseAdapter class ScreenMarkerMouseListener extends MouseAdapter
{ {
private final ScreenMarkerPlugin plugin; private final ScreenMarkerPlugin plugin;
@@ -78,7 +78,8 @@ public class ScreenMarkerOverlay extends Overlay
screenMarkerRenderable.setColor(marker.getColor()); screenMarkerRenderable.setColor(marker.getColor());
screenMarkerRenderable.setFill(marker.getFill()); screenMarkerRenderable.setFill(marker.getFill());
screenMarkerRenderable.setStroke(new BasicStroke(marker.getBorderThickness())); screenMarkerRenderable.setStroke(new BasicStroke(marker.getBorderThickness()));
screenMarkerRenderable.setPreferredSize(preferredSize); screenMarkerRenderable.setSize(preferredSize);
screenMarkerRenderable.setLabel(marker.isLabelled() ? marker.getName() : "");
return screenMarkerRenderable.render(graphics); return screenMarkerRenderable.render(graphics);
} }
} }
@@ -203,7 +203,8 @@ public class ScreenMarkerPlugin extends Plugin
pluginPanel.getSelectedBorderThickness(), pluginPanel.getSelectedBorderThickness(),
pluginPanel.getSelectedColor(), pluginPanel.getSelectedColor(),
pluginPanel.getSelectedFillColor(), pluginPanel.getSelectedFillColor(),
true true,
false
); );
// Set overlay creator bounds to current position and default size // Set overlay creator bounds to current position and default size
@@ -27,44 +27,29 @@ package net.runelite.client.plugins.screenmarkers;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Stroke; import java.awt.Stroke;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity; import net.runelite.client.ui.overlay.RenderableEntity;
public class ScreenMarkerRenderable implements LayoutableRenderableEntity @Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
class ScreenMarkerRenderable implements RenderableEntity
{ {
@Getter(AccessLevel.PACKAGE) private Dimension size;
@Setter
private Point preferredLocation;
@Getter(AccessLevel.PACKAGE)
@Setter
private Dimension preferredSize;
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
private int borderThickness; private int borderThickness;
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
private Color color; private Color color;
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
private Color fill; private Color fill;
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
private Stroke stroke; private Stroke stroke;
private String label;
@Getter
private final Rectangle bounds = new Rectangle();
@Override @Override
public Dimension render(Graphics2D graphics) public Dimension render(Graphics2D graphics)
{ {
int thickness = borderThickness; int thickness = borderThickness;
int width = preferredSize.width; int width = size.width;
int height = preferredSize.height; int height = size.height;
//draw the fill //draw the fill
graphics.setColor(fill); graphics.setColor(fill);
@@ -76,7 +61,12 @@ public class ScreenMarkerRenderable implements LayoutableRenderableEntity
graphics.setColor(color); graphics.setColor(color);
graphics.setStroke(stroke); graphics.setStroke(stroke);
graphics.drawRect(offset, offset, width - thickness, height - thickness); graphics.drawRect(offset, offset, width - thickness, height - thickness);
bounds.setSize(preferredSize);
return preferredSize; if (!label.isEmpty())
{
graphics.drawString(label, 0, 0);
}
return size;
} }
} }
@@ -53,6 +53,7 @@ import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.components.FlatTextField; import net.runelite.client.ui.components.FlatTextField;
import net.runelite.client.ui.components.colorpicker.RuneliteColorPicker; import net.runelite.client.ui.components.colorpicker.RuneliteColorPicker;
import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
class ScreenMarkerPanel extends JPanel class ScreenMarkerPanel extends JPanel
@@ -73,10 +74,10 @@ class ScreenMarkerPanel extends JPanel
private static final ImageIcon NO_FILL_COLOR_ICON; private static final ImageIcon NO_FILL_COLOR_ICON;
private static final ImageIcon NO_FILL_COLOR_HOVER_ICON; private static final ImageIcon NO_FILL_COLOR_HOVER_ICON;
private static final ImageIcon FULL_OPACITY_ICON; private static final ImageIcon LABEL_ICON;
private static final ImageIcon FULL_OPACITY_HOVER_ICON; private static final ImageIcon LABEL_HOVER_ICON;
private static final ImageIcon NO_OPACITY_ICON; private static final ImageIcon NO_LABEL_ICON;
private static final ImageIcon NO_OPACITY_HOVER_ICON; private static final ImageIcon NO_LABEL_HOVER_ICON;
private static final ImageIcon VISIBLE_ICON; private static final ImageIcon VISIBLE_ICON;
private static final ImageIcon VISIBLE_HOVER_ICON; private static final ImageIcon VISIBLE_HOVER_ICON;
@@ -91,7 +92,7 @@ class ScreenMarkerPanel extends JPanel
private final JLabel borderColorIndicator = new JLabel(); private final JLabel borderColorIndicator = new JLabel();
private final JLabel fillColorIndicator = new JLabel(); private final JLabel fillColorIndicator = new JLabel();
private final JLabel opacityIndicator = new JLabel(); private final JLabel labelIndicator = new JLabel();
private final JLabel visibilityLabel = new JLabel(); private final JLabel visibilityLabel = new JLabel();
private final JLabel deleteLabel = new JLabel(); private final JLabel deleteLabel = new JLabel();
@@ -104,6 +105,7 @@ class ScreenMarkerPanel extends JPanel
private final JSpinner thicknessSpinner = new JSpinner(spinnerModel); private final JSpinner thicknessSpinner = new JSpinner(spinnerModel);
private boolean visible; private boolean visible;
private boolean showLabel;
static static
{ {
@@ -123,13 +125,13 @@ class ScreenMarkerPanel extends JPanel
NO_FILL_COLOR_ICON = new ImageIcon(fillImgHover); NO_FILL_COLOR_ICON = new ImageIcon(fillImgHover);
NO_FILL_COLOR_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(fillImgHover, -100)); NO_FILL_COLOR_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(fillImgHover, -100));
final BufferedImage opacityImg = ImageUtil.loadImageResource(ScreenMarkerPlugin.class, "opacity_icon.png"); final BufferedImage labelImg = ImageUtil.loadImageResource(ScreenMarkerPlugin.class, "label_icon.png");
final BufferedImage opacityImgHover = ImageUtil.luminanceOffset(opacityImg, -150); final BufferedImage labelImgHover = ImageUtil.luminanceOffset(labelImg, -150);
FULL_OPACITY_ICON = new ImageIcon(opacityImg); LABEL_ICON = new ImageIcon(labelImg);
FULL_OPACITY_HOVER_ICON = new ImageIcon(opacityImgHover); LABEL_HOVER_ICON = new ImageIcon(labelImgHover);
NO_OPACITY_ICON = new ImageIcon(opacityImgHover); NO_LABEL_ICON = new ImageIcon(labelImgHover);
NO_OPACITY_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(opacityImgHover, -100)); NO_LABEL_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(labelImgHover, -100));
final BufferedImage visibleImg = ImageUtil.loadImageResource(ScreenMarkerPlugin.class, "visible_icon.png"); final BufferedImage visibleImg = ImageUtil.loadImageResource(ScreenMarkerPlugin.class, "visible_icon.png");
VISIBLE_ICON = new ImageIcon(visibleImg); VISIBLE_ICON = new ImageIcon(visibleImg);
@@ -149,6 +151,7 @@ class ScreenMarkerPanel extends JPanel
this.plugin = plugin; this.plugin = plugin;
this.marker = marker; this.marker = marker;
this.visible = marker.getMarker().isVisible(); this.visible = marker.getMarker().isVisible();
this.showLabel = marker.getMarker().isLabelled();
setLayout(new BorderLayout()); setLayout(new BorderLayout());
setBackground(ColorScheme.DARKER_GRAY_COLOR); setBackground(ColorScheme.DARKER_GRAY_COLOR);
@@ -331,50 +334,37 @@ class ScreenMarkerPanel extends JPanel
thicknessSpinner.setValue(marker.getMarker().getBorderThickness()); thicknessSpinner.setValue(marker.getMarker().getBorderThickness());
thicknessSpinner.setPreferredSize(new Dimension(50, 20)); thicknessSpinner.setPreferredSize(new Dimension(50, 20));
thicknessSpinner.addChangeListener(ce -> updateThickness(true)); thicknessSpinner.addChangeListener(ce -> updateThickness(true));
thicknessSpinner.setToolTipText("Border thickness");
opacityIndicator.setToolTipText("Toggle background transparency"); labelIndicator.addMouseListener(new MouseAdapter()
opacityIndicator.addMouseListener(new MouseAdapter()
{ {
@Override @Override
public void mousePressed(MouseEvent mouseEvent) public void mousePressed(MouseEvent mouseEvent)
{ {
final Color fill = marker.getMarker().getFill(); toggleLabelling(!showLabel);
if (fill.getAlpha() == 0)
{
marker.getMarker().setFill(new Color(fill.getRed(), fill.getGreen(), fill.getBlue(), DEFAULT_FILL_OPACITY));
}
else
{
marker.getMarker().setFill(new Color(fill.getRed(), fill.getGreen(), fill.getBlue(), 0));
}
updateFill();
plugin.updateConfig();
} }
@Override @Override
public void mouseEntered(MouseEvent mouseEvent) public void mouseEntered(MouseEvent mouseEvent)
{ {
opacityIndicator.setIcon(marker.getMarker().getFill().getAlpha() == 0 ? NO_OPACITY_HOVER_ICON : FULL_OPACITY_HOVER_ICON); labelIndicator.setIcon(showLabel ? LABEL_HOVER_ICON : NO_LABEL_HOVER_ICON);
} }
@Override @Override
public void mouseExited(MouseEvent mouseEvent) public void mouseExited(MouseEvent mouseEvent)
{ {
opacityIndicator.setIcon(marker.getMarker().getFill().getAlpha() == 0 ? NO_OPACITY_ICON : FULL_OPACITY_ICON); labelIndicator.setIcon(showLabel ? LABEL_ICON : NO_LABEL_ICON);
} }
}); });
leftActions.add(borderColorIndicator); leftActions.add(borderColorIndicator);
leftActions.add(fillColorIndicator); leftActions.add(fillColorIndicator);
leftActions.add(opacityIndicator); leftActions.add(labelIndicator);
leftActions.add(thicknessSpinner); leftActions.add(thicknessSpinner);
JPanel rightActions = new JPanel(new FlowLayout(FlowLayout.RIGHT, 8, 0)); JPanel rightActions = new JPanel(new FlowLayout(FlowLayout.RIGHT, 8, 0));
rightActions.setBackground(ColorScheme.DARKER_GRAY_COLOR); rightActions.setBackground(ColorScheme.DARKER_GRAY_COLOR);
visibilityLabel.setToolTipText(visible ? "Hide screen marker" : "Show screen marker");
visibilityLabel.addMouseListener(new MouseAdapter() visibilityLabel.addMouseListener(new MouseAdapter()
{ {
@Override @Override
@@ -439,7 +429,7 @@ class ScreenMarkerPanel extends JPanel
updateFill(); updateFill();
updateBorder(); updateBorder();
updateBorder(); updateBorder();
updateLabelling();
} }
private void preview(boolean on) private void preview(boolean on)
@@ -460,6 +450,14 @@ class ScreenMarkerPanel extends JPanel
updateVisibility(); updateVisibility();
} }
private void toggleLabelling(boolean on)
{
showLabel = on;
marker.getMarker().setLabelled(showLabel);
plugin.updateConfig();
updateLabelling();
}
private void save() private void save()
{ {
marker.getMarker().setName(nameInput.getText()); marker.getMarker().setName(nameInput.getText());
@@ -505,6 +503,13 @@ class ScreenMarkerPanel extends JPanel
private void updateVisibility() private void updateVisibility()
{ {
visibilityLabel.setIcon(visible ? VISIBLE_ICON : INVISIBLE_ICON); visibilityLabel.setIcon(visible ? VISIBLE_ICON : INVISIBLE_ICON);
visibilityLabel.setToolTipText(visible ? "Hide screen marker" : "Show screen marker");
}
private void updateLabelling()
{
labelIndicator.setIcon(showLabel ? LABEL_ICON : NO_LABEL_ICON);
labelIndicator.setToolTipText(showLabel ? "Hide label" : "Show label");
} }
private void updateFill() private void updateFill()
@@ -523,7 +528,6 @@ class ScreenMarkerPanel extends JPanel
} }
fillColorIndicator.setIcon(isFullyTransparent ? NO_FILL_COLOR_ICON : FILL_COLOR_ICON); fillColorIndicator.setIcon(isFullyTransparent ? NO_FILL_COLOR_ICON : FILL_COLOR_ICON);
opacityIndicator.setIcon(isFullyTransparent ? NO_OPACITY_ICON : FULL_OPACITY_ICON);
} }
private void updateBorder() private void updateBorder()
@@ -543,9 +547,10 @@ class ScreenMarkerPanel extends JPanel
private void openFillColorPicker() private void openFillColorPicker()
{ {
final Color fillColor = marker.getMarker().getFill();
RuneliteColorPicker colorPicker = plugin.getColorPickerManager().create( RuneliteColorPicker colorPicker = plugin.getColorPickerManager().create(
SwingUtilities.windowForComponent(this), SwingUtilities.windowForComponent(this),
marker.getMarker().getFill(), fillColor.getAlpha() == 0 ? ColorUtil.colorWithAlpha(fillColor, DEFAULT_FILL_OPACITY) : fillColor,
marker.getMarker().getName() + " Fill", marker.getMarker().getName() + " Fill",
false); false);
colorPicker.setLocation(getLocationOnScreen()); colorPicker.setLocation(getLocationOnScreen());
@@ -56,7 +56,7 @@ public class WidgetOverlay extends Overlay
new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_KNIGHT_INFO_CONTAINER, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_KNIGHT_INFO_CONTAINER, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_ACTIVITY_SHIELD_INFO_CONTAINER, OverlayPosition.TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_ACTIVITY_SHIELD_INFO_CONTAINER, OverlayPosition.TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT), new PvpKDRWidgetOverlay(client, WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER), new WidgetOverlay(client, WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER),
new WidgetOverlay(client, WidgetInfo.PYRAMID_PLUNDER_DATA, OverlayPosition.TOP_CENTER), new WidgetOverlay(client, WidgetInfo.PYRAMID_PLUNDER_DATA, OverlayPosition.TOP_CENTER),
@@ -257,4 +257,24 @@ public class WidgetOverlay extends Overlay
return position; return position;
} }
} }
private static class PvpKDRWidgetOverlay extends WidgetOverlay
{
private PvpKDRWidgetOverlay(Client client, WidgetInfo widgetInfo, OverlayPosition overlayPosition)
{
super(client, widgetInfo, overlayPosition);
}
@Override
public Dimension render(Graphics2D graphics)
{
// Don't draw widget overlay if the PVP KDR stats text will be empty
if (client.getVar(Varbits.SHOW_PVP_KDR_STATS) == 1)
{
return super.render(graphics);
}
return null;
}
}
} }
@@ -60,17 +60,17 @@ public class LinkBrowser
return; return;
} }
if (attemptDesktopBrowse(url))
{
log.debug("Opened url through Desktop#browse to {}", url);
return;
}
if (shouldAttemptXdg && attemptXdgOpen(url)) if (shouldAttemptXdg && attemptXdgOpen(url))
{ {
log.debug("Opened url through xdg-open to {}", url); log.debug("Opened url through xdg-open to {}", url);
return; return;
} }
if (attemptDesktopBrowse(url))
{
log.debug("Opened url through Desktop#browse to {}", url);
return;
}
log.warn("LinkBrowser.browse() could not open {}", url); log.warn("LinkBrowser.browse() could not open {}", url);
showMessageBox("Unable to open link. Press 'OK' and the link will be copied to your clipboard.", url); showMessageBox("Unable to open link. Press 'OK' and the link will be copied to your clipboard.", url);
@@ -91,18 +91,18 @@ public class LinkBrowser
return; return;
} }
if (shouldAttemptXdg && attemptXdgOpen(directory))
{
log.debug("Opened directory through xdg-open to {}", directory);
return;
}
if (attemptDesktopOpen(directory)) if (attemptDesktopOpen(directory))
{ {
log.debug("Opened directory through Desktop#open to {}", directory); log.debug("Opened directory through Desktop#open to {}", directory);
return; return;
} }
if (shouldAttemptXdg && attemptXdgOpen(directory))
{
log.debug("Opened directory through xdg-open to {}", directory);
return;
}
log.warn("LinkBrowser.open() could not open {}", directory); log.warn("LinkBrowser.open() could not open {}", directory);
showMessageBox("Unable to open folder. Press 'OK' and the folder directory will be copied to your clipboard.", directory); showMessageBox("Unable to open folder. Press 'OK' and the folder directory will be copied to your clipboard.", directory);
}).start(); }).start();
@@ -261,7 +261,8 @@
21056, 21056,
21057, 21057,
21058, 21058,
26276 26276,
26596
], ],
"glarials urn": [ "glarials urn": [
296, 296,
@@ -2454,16 +2455,23 @@
"bucket": [ "bucket": [
1925, 1925,
8986, 8986,
9660 9660,
26615
], ],
"bucket of water": [ "bucket of water": [
1929, 1929,
6712, 6712,
9659 9659,
26617
],
"pot": [
1931,
26619
], ],
"pot of flour": [ "pot of flour": [
1933, 1933,
2516 2516,
26621
], ],
"swamp paste": [ "swamp paste": [
1941, 1941,
@@ -2490,6 +2498,10 @@
11029, 11029,
11030 11030
], ],
"banana": [
1963,
26627
],
"cabbage": [ "cabbage": [
1965, 1965,
1967, 1967,
@@ -2508,6 +2520,14 @@
1980, 1980,
7728 7728
], ],
"tomato": [
1982,
26623
],
"cheese": [
1985,
26625
],
"jug of bad wine": [ "jug of bad wine": [
1991, 1991,
1992 1992
@@ -2686,9 +2706,22 @@
2281, 2281,
9533 9533
], ],
"pizza base": [
2283,
26629
],
"incomplete pizza": [
2285,
26631
],
"uncooked pizza": [
2287,
26633
],
"plain pizza": [ "plain pizza": [
2289, 2289,
2291 2291,
26635
], ],
"meat pizza": [ "meat pizza": [
2293, 2293,
@@ -2702,6 +2735,22 @@
2301, 2301,
2303 2303
], ],
"burnt pizza": [
2305,
26637
],
"bread dough": [
2307,
26639
],
"bread": [
2309,
26641
],
"burnt bread": [
2311,
26643
],
"redberry pie": [ "redberry pie": [
2325, 2325,
2333 2333
@@ -10341,5 +10390,12 @@
26583, 26583,
26585, 26585,
26587 26587
],
"loot key": [
26651,
26652,
26653,
26654,
26655
] ]
} }
@@ -62,52 +62,21 @@ int priority_map(int p, int distance, int _min10, int avg1, int avg2, int avg3)
return 17; return 17;
} }
default: default:
return -1; // this can't happen unless an invalid priority is sent. just assume 0.
return 0;
} }
} }
// calculate the number of faces with a lower adjusted priority than // calculate the number of faces with a lower adjusted priority than
// the given adjusted priority // the given adjusted priority
int count_prio_offset(__local struct shared_data *shared, int priority) { int count_prio_offset(__local struct shared_data *shared, int priority) {
// this shouldn't ever be outside of (0, 17) because it is the return value from priority_map
priority = clamp(priority, 0, 17);
int total = 0; int total = 0;
switch (priority) { for (int i = 0; i < priority; i++) {
case 17: total += shared->totalMappedNum[i];
total += shared->totalMappedNum[16];
case 16:
total += shared->totalMappedNum[15];
case 15:
total += shared->totalMappedNum[14];
case 14:
total += shared->totalMappedNum[13];
case 13:
total += shared->totalMappedNum[12];
case 12:
total += shared->totalMappedNum[11];
case 11:
total += shared->totalMappedNum[10];
case 10:
total += shared->totalMappedNum[9];
case 9:
total += shared->totalMappedNum[8];
case 8:
total += shared->totalMappedNum[7];
case 7:
total += shared->totalMappedNum[6];
case 6:
total += shared->totalMappedNum[5];
case 5:
total += shared->totalMappedNum[4];
case 4:
total += shared->totalMappedNum[3];
case 3:
total += shared->totalMappedNum[2];
case 2:
total += shared->totalMappedNum[1];
case 1:
total += shared->totalMappedNum[0];
case 0:
return total;
} }
return total;
} }
void get_face( void get_face(
@@ -62,52 +62,21 @@ int priority_map(int p, int distance, int _min10, int avg1, int avg2, int avg3)
return 17; return 17;
} }
default: default:
return -1; // this can't happen unless an invalid priority is sent. just assume 0.
return 0;
} }
} }
// calculate the number of faces with a lower adjusted priority than // calculate the number of faces with a lower adjusted priority than
// the given adjusted priority // the given adjusted priority
int count_prio_offset(int priority) { int count_prio_offset(int priority) {
// this shouldn't ever be outside of (0, 17) because it is the return value from priority_map
priority = clamp(priority, 0, 17);
int total = 0; int total = 0;
switch (priority) { for (int i = 0; i < priority; i++) {
case 17: total += totalMappedNum[i];
total += totalMappedNum[16];
case 16:
total += totalMappedNum[15];
case 15:
total += totalMappedNum[14];
case 14:
total += totalMappedNum[13];
case 13:
total += totalMappedNum[12];
case 12:
total += totalMappedNum[11];
case 11:
total += totalMappedNum[10];
case 10:
total += totalMappedNum[9];
case 9:
total += totalMappedNum[8];
case 8:
total += totalMappedNum[7];
case 7:
total += totalMappedNum[6];
case 6:
total += totalMappedNum[5];
case 5:
total += totalMappedNum[4];
case 4:
total += totalMappedNum[3];
case 3:
total += totalMappedNum[2];
case 2:
total += totalMappedNum[1];
case 1:
total += totalMappedNum[0];
case 0:
return total;
} }
return total;
} }
void get_face(uint localId, modelinfo minfo, int cameraYaw, int cameraPitch, void get_face(uint localId, modelinfo minfo, int cameraYaw, int cameraPitch,
Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

@@ -8,7 +8,7 @@ runelite.wiki.link=https://github.com/open-osrs/runelite/wiki
runelite.patreon.link=https://www.patreon.com/openosrs runelite.patreon.link=https://www.patreon.com/openosrs
runelite.wiki.troubleshooting.link=https://github.com/open-osrs/runelite/wiki/Troubleshooting-problems-with-the-client runelite.wiki.troubleshooting.link=https://github.com/open-osrs/runelite/wiki/Troubleshooting-problems-with-the-client
runelite.wiki.building.link=https://github.com/open-osrs/runelite/wiki/Building-with-IntelliJ-IDEA#client-failing-to-start runelite.wiki.building.link=https://github.com/open-osrs/runelite/wiki/Building-with-IntelliJ-IDEA#client-failing-to-start
runelite.dnschange.link=https://1.1.1.1/dns/ runelite.dnschange.link=https://1.1.1.1/dns/#setup-instructions
runelite.jav_config=https://oldschool.runescape.com/jav_config.ws runelite.jav_config=https://oldschool.runescape.com/jav_config.ws
runelite.jav_config_backup=https://static.runelite.net/jav_config.ws runelite.jav_config_backup=https://static.runelite.net/jav_config.ws
runelite.pluginhub.url=https://repo.runelite.net/plugins runelite.pluginhub.url=https://repo.runelite.net/plugins
@@ -1 +1 @@
BC3DDC3675375E1FD9AD64DEBF4FDA5B4102FE542088C310881120DC47270566 7A4628DC7933B4340CEC5F1B3C75ED1857FEDB5E683829499A07E5C364F633FA
@@ -90,13 +90,13 @@ LABEL60:
iload 0 iload 0
iconst 84 iconst 84
if_icmpeq LABEL76 if_icmpeq LABEL76
jump LABEL815 jump LABEL829
LABEL76: LABEL76:
invoke 1984 invoke 1984
iload 2 iload 2
iconst 0 iconst 0
if_icmpgt LABEL81 if_icmpgt LABEL81
jump LABEL814 jump LABEL828
LABEL81: LABEL81:
iload 3 iload 3
iconst 1 iconst 1
@@ -699,7 +699,7 @@ LABEL587:
sconst "You are not chatting as a guest in a clan channel at the moment." sconst "You are not chatting as a guest in a clan channel at the moment."
mes mes
LABEL589: LABEL589:
jump LABEL810 jump LABEL824
LABEL590: LABEL590:
iload 5 iload 5
iconst 41 iconst 41
@@ -792,7 +792,7 @@ LABEL662:
sconst "You are not chatting in the channel of your own Iron Group at the moment." sconst "You are not chatting in the channel of your own Iron Group at the moment."
mes mes
LABEL664: LABEL664:
jump LABEL810 jump LABEL824
LABEL665: LABEL665:
iload 5 iload 5
iconst 9 iconst 9
@@ -852,7 +852,7 @@ LABEL706:
iconst -1 iconst -1
invoke 5517 invoke 5517
LABEL712: LABEL712:
jump LABEL810 jump LABEL824
LABEL713: LABEL713:
iload 5 iload 5
iconst 2 iconst 2
@@ -868,17 +868,17 @@ LABEL717:
iconst 0 iconst 0
iload 9 iload 9
invoke 5517 invoke 5517
jump LABEL810 jump LABEL824
LABEL727: LABEL727:
iload 4 iload 4
iconst 1 iconst 1
if_icmpeq LABEL731 if_icmpeq LABEL731
jump LABEL804 jump LABEL818
LABEL731: LABEL731:
iload 2 iload 2
iconst 2 iconst 2
if_icmpgt LABEL735 if_icmpgt LABEL735
jump LABEL797 jump LABEL811
LABEL735: LABEL735:
get_varc_string 335 get_varc_string 335
sconst "::toggleroof" sconst "::toggleroof"
@@ -886,61 +886,80 @@ LABEL735:
string_indexof_string string_indexof_string
iconst 0 iconst 0
if_icmpeq LABEL742 if_icmpeq LABEL742
jump LABEL756 jump LABEL770
LABEL742: LABEL742:
getremoveroofs getremoveroofs
iconst 1 iconst 1
if_icmpeq LABEL746 if_icmpeq LABEL746
jump LABEL751 jump LABEL758
LABEL746: LABEL746:
iconst 0 iconst 0
setremoveroofs setremoveroofs
get_varbit 12378
iconst 0
if_icmpeq LABEL752
jump LABEL755
LABEL752:
sconst "Roofs will only be removed selectively." sconst "Roofs will only be removed selectively."
mes mes
jump LABEL755 jump LABEL757
LABEL751: LABEL755:
sconst "Roofs will only be removed selectively. This setting will not be saved."
mes
LABEL757:
jump LABEL769
LABEL758:
iconst 1 iconst 1
setremoveroofs setremoveroofs
get_varbit 12378
iconst 1
if_icmpeq LABEL764
jump LABEL767
LABEL764:
sconst "Roofs are now all hidden." sconst "Roofs are now all hidden."
mes mes
LABEL755: jump LABEL769
jump LABEL796 LABEL767:
LABEL756: sconst "Roofs are now all hidden. This setting will not be saved."
mes
LABEL769:
jump LABEL810
LABEL770:
get_varc_string 335 get_varc_string 335
sconst "::wiki " sconst "::wiki "
iconst 0 iconst 0
string_indexof_string string_indexof_string
iconst 0 iconst 0
if_icmpeq LABEL768 if_icmpeq LABEL782
get_varc_string 335 get_varc_string 335
sconst "::wiki" sconst "::wiki"
compare compare
iconst 0 iconst 0
if_icmpeq LABEL768 if_icmpeq LABEL782
sconst "runeliteCommand" ; load callback name sconst "runeliteCommand" ; load callback name
runelite_callback ; invoke callback runelite_callback ; invoke callback
jump LABEL771 jump LABEL785
LABEL768: LABEL782:
get_varc_string 335 get_varc_string 335
invoke 3299 invoke 3299
jump LABEL796 jump LABEL810
LABEL771: LABEL785:
get_varc_string 335 get_varc_string 335
sconst "::bank" sconst "::bank"
iconst 0 iconst 0
string_indexof_string string_indexof_string
iconst 0 iconst 0
if_icmpeq LABEL778 if_icmpeq LABEL792
jump LABEL785 jump LABEL799
LABEL778: LABEL792:
sconst "Hey, everyone, I just tried to do something very silly!" sconst "Hey, everyone, I just tried to do something very silly!"
iconst 0 iconst 0
iconst -1 iconst -1
iconst 0 iconst 0
iconst -1 iconst -1
invoke 5517 invoke 5517
jump LABEL796 jump LABEL810
LABEL785: LABEL799:
get_varc_string 335 get_varc_string 335
invoke 224 invoke 224
set_varc_string 335 set_varc_string 335
@@ -952,97 +971,97 @@ LABEL785:
iload 2 iload 2
substring substring
docheat docheat
LABEL796: LABEL810:
jump LABEL803 jump LABEL817
LABEL797: LABEL811:
get_varc_string 335 get_varc_string 335
iconst 0 iconst 0
iconst -1 iconst -1
iconst 0 iconst 0
iconst -1 iconst -1
invoke 5517 invoke 5517
LABEL803: LABEL817:
jump LABEL810 jump LABEL824
LABEL804: LABEL818:
get_varc_string 335 get_varc_string 335
iconst 0 iconst 0
iconst -1 iconst -1
iconst 1 iconst 1
iload 9 iload 9
invoke 5517 invoke 5517
LABEL810: LABEL824:
get_varc_string 335 get_varc_string 335
invoke 77 invoke 77
sconst "" sconst ""
set_varc_string 335 set_varc_string 335
LABEL814: LABEL828:
jump LABEL890 jump LABEL904
LABEL815: LABEL829:
iload 0 iload 0
iconst 104 iconst 104
if_icmpeq LABEL819 if_icmpeq LABEL833
jump LABEL825 jump LABEL839
LABEL819: LABEL833:
iload 3 iload 3
iconst 1 iconst 1
if_icmpeq LABEL823 if_icmpeq LABEL837
jump LABEL824 jump LABEL838
LABEL823: LABEL837:
invoke 75 invoke 75
LABEL824: LABEL838:
jump LABEL890 jump LABEL904
LABEL825: LABEL839:
iload 0 iload 0
iconst 105 iconst 105
if_icmpeq LABEL829 if_icmpeq LABEL843
jump LABEL835 jump LABEL849
LABEL829: LABEL843:
iload 3 iload 3
iconst 1 iconst 1
if_icmpeq LABEL833 if_icmpeq LABEL847
jump LABEL834 jump LABEL848
LABEL833: LABEL847:
invoke 76 invoke 76
LABEL834: LABEL848:
jump LABEL890 jump LABEL904
LABEL835: LABEL849:
iload 0 iload 0
iconst 80 iconst 80
if_icmpeq LABEL839 if_icmpeq LABEL853
jump LABEL884 jump LABEL898
LABEL839: LABEL853:
iconst 40697936 iconst 40697936
iconst 1 iconst 1
cc_find cc_find
iconst 1 iconst 1
if_icmpeq LABEL845 if_icmpeq LABEL859
jump LABEL846 jump LABEL860
LABEL845: LABEL859:
return return
LABEL846: LABEL860:
get_varc_string 356 get_varc_string 356
string_length string_length
iconst 0 iconst 0
if_icmpgt LABEL851 if_icmpgt LABEL865
jump LABEL871 jump LABEL885
LABEL851: LABEL865:
get_varc_string 356 get_varc_string 356
friend_test friend_test
iconst 1 iconst 1
if_icmpeq LABEL856 if_icmpeq LABEL870
jump LABEL859 jump LABEL873
LABEL856: LABEL870:
get_varc_string 356 get_varc_string 356
invoke 107 invoke 107
return return
LABEL859: LABEL873:
get_varc_int 60 get_varc_int 60
clientclock clientclock
if_icmpgt LABEL863 if_icmpgt LABEL877
jump LABEL864 jump LABEL878
LABEL863: LABEL877:
return return
LABEL864: LABEL878:
clientclock clientclock
iconst 50 iconst 50
add add
@@ -1050,14 +1069,14 @@ LABEL864:
sconst "That player was not found on your Friends list." sconst "That player was not found on your Friends list."
mes mes
return return
LABEL871: LABEL885:
get_varc_int 60 get_varc_int 60
clientclock clientclock
if_icmpgt LABEL875 if_icmpgt LABEL889
jump LABEL876 jump LABEL890
LABEL875: LABEL889:
return return
LABEL876: LABEL890:
clientclock clientclock
iconst 50 iconst 50
add add
@@ -1065,8 +1084,8 @@ LABEL876:
sconst "You haven't received any messages to which you can reply." sconst "You haven't received any messages to which you can reply."
mes mes
return return
jump LABEL890 jump LABEL904
LABEL884: LABEL898:
get_varc_string 335 get_varc_string 335
iconst 0 iconst 0
iload 0 iload 0
@@ -1078,9 +1097,9 @@ LABEL884:
runelite_callback ; runelite_callback ;
if_icmpeq SKIPSETVARC ; skip setting varc with input if_icmpeq SKIPSETVARC ; skip setting varc with input
set_varc_string 335 set_varc_string 335
jump LABEL890 ; jump over SKIPSETVARC jump LABEL904 ; jump over SKIPSETVARC
SKIPSETVARC: SKIPSETVARC:
pop_string ; pop message pop_string ; pop message
LABEL890: LABEL904:
invoke 223 invoke 223
return return
@@ -117,7 +117,7 @@ public abstract class ShellPanel extends JPanel
topPanel.add(run); topPanel.add(run);
JButton clear = new JButton("🗑"); JButton clear = new JButton("🗑");
run.setToolTipText("Clear console"); clear.setToolTipText("Clear console");
clear.addActionListener(ev -> console.setText("")); clear.addActionListener(ev -> console.setText(""));
topPanel.add(clear); topPanel.add(clear);
@@ -0,0 +1,4 @@
package net.runelite.rs.api;
public interface RSOAuthApi
{}
@@ -1,3 +0,0 @@
package net.runelite.rs.api;
public interface RSOAuthTokens {}
@@ -0,0 +1,4 @@
package net.runelite.rs.api;
public interface RSOtlTokenRequester
{}
@@ -0,0 +1,4 @@
package net.runelite.rs.api;
public interface RSOtlTokenResponse
{}