Files
runelite/runescape-client/src/main/java/Archive.java
Owain van Brakel 7c7bf0901a project: Rev 202
2021-12-14 18:20:58 +01:00

655 lines
17 KiB
Java

import java.util.zip.CRC32;
import net.runelite.mapping.Export;
import net.runelite.mapping.Implements;
import net.runelite.mapping.ObfuscatedGetter;
import net.runelite.mapping.ObfuscatedName;
import net.runelite.mapping.ObfuscatedSignature;
@ObfuscatedName("kz")
@Implements("Archive")
public class Archive extends AbstractArchive {
@ObfuscatedName("n")
@Export("Archive_crc")
static CRC32 Archive_crc;
@ObfuscatedName("p")
@ObfuscatedSignature(
descriptor = "Lmy;"
)
@Export("archiveDisk")
ArchiveDisk archiveDisk;
@ObfuscatedName("m")
@ObfuscatedSignature(
descriptor = "Lmy;"
)
@Export("masterDisk")
ArchiveDisk masterDisk;
@ObfuscatedName("t")
@ObfuscatedGetter(
intValue = 1081704419
)
@Export("index")
int index;
@ObfuscatedName("s")
volatile boolean field3821;
@ObfuscatedName("j")
boolean field3822;
@ObfuscatedName("w")
@Export("validGroups")
volatile boolean[] validGroups;
@ObfuscatedName("r")
@ObfuscatedGetter(
intValue = -515391075
)
@Export("indexCrc")
int indexCrc;
@ObfuscatedName("o")
@ObfuscatedGetter(
intValue = -98227937
)
@Export("indexVersion")
int indexVersion;
@ObfuscatedName("v")
@ObfuscatedGetter(
intValue = 29264523
)
int field3816;
static {
Archive_crc = new CRC32();
}
@ObfuscatedSignature(
descriptor = "(Lmy;Lmy;IZZZ)V"
)
public Archive(ArchiveDisk var1, ArchiveDisk var2, int var3, boolean var4, boolean var5, boolean var6) {
super(var4, var5);
this.field3821 = false;
this.field3822 = false;
this.field3816 = -1;
this.archiveDisk = var1;
this.masterDisk = var2;
this.index = var3;
this.field3822 = var6;
int var8 = this.index;
if (WorldMapLabel.NetCache_reference != null) {
WorldMapLabel.NetCache_reference.offset = var8 * 8 + 5;
int var9 = WorldMapLabel.NetCache_reference.readInt();
int var10 = WorldMapLabel.NetCache_reference.readInt();
this.loadIndex(var9, var10);
} else {
class269.requestNetFile((Archive)null, 255, 255, 0, (byte)0, true);
NetCache.NetCache_archives[var8] = this;
}
}
@ObfuscatedName("c")
@ObfuscatedSignature(
descriptor = "(I)Z",
garbageValue = "782340670"
)
public boolean method5540() {
return this.field3821;
}
@ObfuscatedName("b")
@ObfuscatedSignature(
descriptor = "(I)I",
garbageValue = "1520569672"
)
@Export("percentage")
public int percentage() {
if (this.field3821) {
return 100;
} else if (super.groups != null) {
return 99;
} else {
int var1 = IsaacCipher.method7886(255, this.index);
if (var1 >= 100) {
var1 = 99;
}
return var1;
}
}
@ObfuscatedName("p")
@ObfuscatedSignature(
descriptor = "(II)V",
garbageValue = "-2090166080"
)
@Export("loadRegionFromGroup")
void loadRegionFromGroup(int var1) {
PendingSpawn.method2225(this.index, var1);
}
@ObfuscatedName("m")
@ObfuscatedSignature(
descriptor = "(II)V",
garbageValue = "2024016984"
)
@Export("loadGroup")
void loadGroup(int var1) {
if (this.archiveDisk != null && this.validGroups != null && this.validGroups[var1]) {
class10.method122(var1, this.archiveDisk, this);
} else {
class269.requestNetFile(this, this.index, var1, super.groupCrcs[var1], (byte)2, true);
}
}
@ObfuscatedName("t")
@ObfuscatedSignature(
descriptor = "(III)V",
garbageValue = "-877437608"
)
@Export("loadIndex")
void loadIndex(int var1, int var2) {
this.indexCrc = var1;
this.indexVersion = var2;
if (this.masterDisk != null) {
class10.method122(this.index, this.masterDisk, this);
} else {
class269.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true);
}
}
@ObfuscatedName("s")
@ObfuscatedSignature(
descriptor = "(I[BZZI)V",
garbageValue = "388189625"
)
@Export("write")
void write(int var1, byte[] var2, boolean var3, boolean var4) {
if (var3) {
if (this.field3821) {
throw new RuntimeException();
}
if (this.masterDisk != null) {
NPCComposition.method3321(this.index, var2, this.masterDisk);
}
this.decodeIndex(var2);
this.loadAllLocal();
} else {
var2[var2.length - 2] = (byte)(super.groupVersions[var1] >> 8);
var2[var2.length - 1] = (byte)super.groupVersions[var1];
if (this.archiveDisk != null) {
NPCComposition.method3321(var1, var2, this.archiveDisk);
this.validGroups[var1] = true;
}
if (var4) {
Object[] var5 = super.groups;
Object var7;
if (var2 == null) {
var7 = null;
} else if (var2.length > 136) {
DirectByteArrayCopier var8 = new DirectByteArrayCopier();
var8.set(var2);
var7 = var8;
} else {
var7 = var2;
}
var5[var1] = var7;
}
}
}
@ObfuscatedName("j")
@ObfuscatedSignature(
descriptor = "(Lmy;I[BZB)V",
garbageValue = "1"
)
@Export("load")
public void load(ArchiveDisk var1, int var2, byte[] var3, boolean var4) {
int var5;
if (var1 == this.masterDisk) {
if (this.field3821) {
throw new RuntimeException();
}
if (var3 == null) {
class269.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true);
return;
}
Archive_crc.reset();
Archive_crc.update(var3, 0, var3.length);
var5 = (int)Archive_crc.getValue();
if (var5 != this.indexCrc) {
class269.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true);
return;
}
Buffer var11 = new Buffer(ViewportMouse.decompressBytes(var3));
int var12 = var11.readUnsignedByte();
if (var12 != 5 && var12 != 6) {
throw new RuntimeException(var12 + "," + this.index + "," + var2);
}
int var8 = 0;
if (var12 >= 6) {
var8 = var11.readInt();
}
if (var8 != this.indexVersion) {
class269.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true);
return;
}
this.decodeIndex(var3);
this.loadAllLocal();
} else {
if (!var4 && var2 == this.field3816) {
this.field3821 = true;
}
if (var3 == null || var3.length <= 2) {
this.validGroups[var2] = false;
if (this.field3822 || var4) {
class269.requestNetFile(this, this.index, var2, super.groupCrcs[var2], (byte)2, var4);
}
return;
}
Archive_crc.reset();
Archive_crc.update(var3, 0, var3.length - 2);
var5 = (int)Archive_crc.getValue();
int var6 = ((var3[var3.length - 2] & 255) << 8) + (var3[var3.length - 1] & 255);
if (var5 != super.groupCrcs[var2] || var6 != super.groupVersions[var2]) {
this.validGroups[var2] = false;
if (this.field3822 || var4) {
class269.requestNetFile(this, this.index, var2, super.groupCrcs[var2], (byte)2, var4);
}
return;
}
this.validGroups[var2] = true;
if (var4) {
Object[] var7 = super.groups;
Object var9;
if (var3 == null) {
var9 = null;
} else if (var3.length > 136) {
DirectByteArrayCopier var10 = new DirectByteArrayCopier();
var10.set(var3);
var9 = var10;
} else {
var9 = var3;
}
var7[var2] = var9;
}
}
}
@ObfuscatedName("w")
@ObfuscatedSignature(
descriptor = "(I)V",
garbageValue = "955312949"
)
@Export("loadAllLocal")
void loadAllLocal() {
this.validGroups = new boolean[super.groups.length];
int var1;
for (var1 = 0; var1 < this.validGroups.length; ++var1) {
this.validGroups[var1] = false;
}
if (this.archiveDisk == null) {
this.field3821 = true;
} else {
this.field3816 = -1;
for (var1 = 0; var1 < this.validGroups.length; ++var1) {
if (super.fileCounts[var1] > 0) {
ArchiveDisk var2 = this.archiveDisk;
ArchiveDiskAction var4 = new ArchiveDiskAction();
var4.type = 1;
var4.key = (long)var1;
var4.archiveDisk = var2;
var4.archive = this;
synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) {
ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.addFirst(var4);
}
class174.method3383();
this.field3816 = var1;
}
}
if (this.field3816 == -1) {
this.field3821 = true;
}
}
}
@ObfuscatedName("n")
@ObfuscatedSignature(
descriptor = "(IB)I",
garbageValue = "35"
)
@Export("groupLoadPercent")
int groupLoadPercent(int var1) {
if (super.groups[var1] != null) {
return 100;
} else {
return this.validGroups[var1] ? 100 : IsaacCipher.method7886(this.index, var1);
}
}
@ObfuscatedName("r")
@ObfuscatedSignature(
descriptor = "(II)Z",
garbageValue = "-1796808817"
)
public boolean method5570(int var1) {
return this.validGroups[var1];
}
@ObfuscatedName("o")
@ObfuscatedSignature(
descriptor = "(II)Z",
garbageValue = "832467152"
)
public boolean method5584(int var1) {
return this.getGroupFileIds(var1) != null;
}
@ObfuscatedName("v")
@ObfuscatedSignature(
descriptor = "(I)I",
garbageValue = "838378005"
)
@Export("loadPercent")
public int loadPercent() {
int var1 = 0;
int var2 = 0;
int var3;
for (var3 = 0; var3 < super.groups.length; ++var3) {
if (super.fileCounts[var3] > 0) {
var1 += 100;
var2 += this.groupLoadPercent(var3);
}
}
if (var1 == 0) {
return 100;
} else {
var3 = var2 * 100 / var1;
return var3;
}
}
@ObfuscatedName("hi")
@ObfuscatedSignature(
descriptor = "(Lck;IILgj;B)V",
garbageValue = "95"
)
static final void method5586(Player var0, int var1, int var2, class185 var3) {
int var4 = var0.pathX[0];
int var5 = var0.pathY[0];
int var6 = var0.transformedSize();
if (var4 >= var6 && var4 < 104 - var6 && var5 >= var6 && var5 < 104 - var6) {
if (var1 >= var6 && var1 < 104 - var6 && var2 >= var6 && var2 < 104 - var6) {
int var8 = var0.transformedSize();
Client.field754.approxDestinationX = var1;
Client.field754.approxDestinationY = var2;
Client.field754.field2117 = 1;
Client.field754.field2114 = 1;
ApproximateRouteStrategy var9 = Client.field754;
ApproximateRouteStrategy var10 = var9;
CollisionMap var11 = Client.collisionMaps[var0.plane];
int[] var12 = Client.field755;
int[] var13 = Client.field756;
int var14;
int var15;
for (var14 = 0; var14 < 128; ++var14) {
for (var15 = 0; var15 < 128; ++var15) {
class186.directions[var14][var15] = 0;
class186.distances[var14][var15] = 99999999;
}
}
int var16;
int var17;
byte var19;
int var20;
int var21;
int var23;
int var25;
int var26;
int var27;
boolean var34;
int var36;
int var37;
int var39;
if (var8 == 1) {
var16 = var4;
var17 = var5;
byte var18 = 64;
var19 = 64;
var20 = var4 - var18;
var21 = var5 - var19;
class186.directions[var18][var19] = 99;
class186.distances[var18][var19] = 0;
byte var22 = 0;
var23 = 0;
class186.bufferX[var22] = var4;
var39 = var22 + 1;
class186.bufferY[var22] = var5;
int[][] var24 = var11.flags;
boolean var35;
while (true) {
if (var39 == var23) {
class186.field2129 = var16;
class186.field2130 = var17;
var35 = false;
break;
}
var16 = class186.bufferX[var23];
var17 = class186.bufferY[var23];
var23 = var23 + 1 & 4095;
var36 = var16 - var20;
var37 = var17 - var21;
var25 = var16 - var11.xInset;
var26 = var17 - var11.yInset;
if (var10.hasArrived(1, var16, var17, var11)) {
class186.field2129 = var16;
class186.field2130 = var17;
var35 = true;
break;
}
var27 = class186.distances[var36][var37] + 1;
if (var36 > 0 && class186.directions[var36 - 1][var37] == 0 && (var24[var25 - 1][var26] & 19136776) == 0) {
class186.bufferX[var39] = var16 - 1;
class186.bufferY[var39] = var17;
var39 = var39 + 1 & 4095;
class186.directions[var36 - 1][var37] = 2;
class186.distances[var36 - 1][var37] = var27;
}
if (var36 < 127 && class186.directions[var36 + 1][var37] == 0 && (var24[var25 + 1][var26] & 19136896) == 0) {
class186.bufferX[var39] = var16 + 1;
class186.bufferY[var39] = var17;
var39 = var39 + 1 & 4095;
class186.directions[var36 + 1][var37] = 8;
class186.distances[var36 + 1][var37] = var27;
}
if (var37 > 0 && class186.directions[var36][var37 - 1] == 0 && (var24[var25][var26 - 1] & 19136770) == 0) {
class186.bufferX[var39] = var16;
class186.bufferY[var39] = var17 - 1;
var39 = var39 + 1 & 4095;
class186.directions[var36][var37 - 1] = 1;
class186.distances[var36][var37 - 1] = var27;
}
if (var37 < 127 && class186.directions[var36][var37 + 1] == 0 && (var24[var25][var26 + 1] & 19136800) == 0) {
class186.bufferX[var39] = var16;
class186.bufferY[var39] = var17 + 1;
var39 = var39 + 1 & 4095;
class186.directions[var36][var37 + 1] = 4;
class186.distances[var36][var37 + 1] = var27;
}
if (var36 > 0 && var37 > 0 && class186.directions[var36 - 1][var37 - 1] == 0 && (var24[var25 - 1][var26 - 1] & 19136782) == 0 && (var24[var25 - 1][var26] & 19136776) == 0 && (var24[var25][var26 - 1] & 19136770) == 0) {
class186.bufferX[var39] = var16 - 1;
class186.bufferY[var39] = var17 - 1;
var39 = var39 + 1 & 4095;
class186.directions[var36 - 1][var37 - 1] = 3;
class186.distances[var36 - 1][var37 - 1] = var27;
}
if (var36 < 127 && var37 > 0 && class186.directions[var36 + 1][var37 - 1] == 0 && (var24[var25 + 1][var26 - 1] & 19136899) == 0 && (var24[var25 + 1][var26] & 19136896) == 0 && (var24[var25][var26 - 1] & 19136770) == 0) {
class186.bufferX[var39] = var16 + 1;
class186.bufferY[var39] = var17 - 1;
var39 = var39 + 1 & 4095;
class186.directions[var36 + 1][var37 - 1] = 9;
class186.distances[var36 + 1][var37 - 1] = var27;
}
if (var36 > 0 && var37 < 127 && class186.directions[var36 - 1][var37 + 1] == 0 && (var24[var25 - 1][var26 + 1] & 19136824) == 0 && (var24[var25 - 1][var26] & 19136776) == 0 && (var24[var25][var26 + 1] & 19136800) == 0) {
class186.bufferX[var39] = var16 - 1;
class186.bufferY[var39] = var17 + 1;
var39 = var39 + 1 & 4095;
class186.directions[var36 - 1][var37 + 1] = 6;
class186.distances[var36 - 1][var37 + 1] = var27;
}
if (var36 < 127 && var37 < 127 && class186.directions[var36 + 1][var37 + 1] == 0 && (var24[var25 + 1][var26 + 1] & 19136992) == 0 && (var24[var25 + 1][var26] & 19136896) == 0 && (var24[var25][var26 + 1] & 19136800) == 0) {
class186.bufferX[var39] = var16 + 1;
class186.bufferY[var39] = var17 + 1;
var39 = var39 + 1 & 4095;
class186.directions[var36 + 1][var37 + 1] = 12;
class186.distances[var36 + 1][var37 + 1] = var27;
}
}
var34 = var35;
} else if (var8 == 2) {
var34 = Clock.method3132(var4, var5, var9, var11);
} else {
var34 = UserComparator2.method7617(var4, var5, var8, var9, var11);
}
int var7;
label346: {
var15 = var4 - 64;
var16 = var5 - 64;
var17 = class186.field2129;
var36 = class186.field2130;
if (!var34) {
var37 = Integer.MAX_VALUE;
var20 = Integer.MAX_VALUE;
byte var38 = 10;
var39 = var10.approxDestinationX;
var23 = var10.approxDestinationY;
int var33 = var10.field2117;
var25 = var10.field2114;
for (var26 = var39 - var38; var26 <= var38 + var39; ++var26) {
for (var27 = var23 - var38; var27 <= var23 + var38; ++var27) {
int var28 = var26 - var15;
int var29 = var27 - var16;
if (var28 >= 0 && var29 >= 0 && var28 < 128 && var29 < 128 && class186.distances[var28][var29] < 100) {
int var30 = 0;
if (var26 < var39) {
var30 = var39 - var26;
} else if (var26 > var39 + var33 - 1) {
var30 = var26 - (var39 + var33 - 1);
}
int var31 = 0;
if (var27 < var23) {
var31 = var23 - var27;
} else if (var27 > var25 + var23 - 1) {
var31 = var27 - (var23 + var25 - 1);
}
int var32 = var30 * var30 + var31 * var31;
if (var32 < var37 || var32 == var37 && class186.distances[var28][var29] < var20) {
var37 = var32;
var20 = class186.distances[var28][var29];
var17 = var26;
var36 = var27;
}
}
}
}
if (var37 == Integer.MAX_VALUE) {
var7 = -1;
break label346;
}
}
if (var4 == var17 && var36 == var5) {
var7 = 0;
} else {
var19 = 0;
class186.bufferX[var19] = var17;
var37 = var19 + 1;
class186.bufferY[var19] = var36;
for (var20 = var21 = class186.directions[var17 - var15][var36 - var16]; var17 != var4 || var36 != var5; var20 = class186.directions[var17 - var15][var36 - var16]) {
if (var20 != var21) {
var21 = var20;
class186.bufferX[var37] = var17;
class186.bufferY[var37++] = var36;
}
if ((var20 & 2) != 0) {
++var17;
} else if ((var20 & 8) != 0) {
--var17;
}
if ((var20 & 1) != 0) {
++var36;
} else if ((var20 & 4) != 0) {
--var36;
}
}
var39 = 0;
while (var37-- > 0) {
var12[var39] = class186.bufferX[var37];
var13[var39++] = class186.bufferY[var37];
if (var39 >= var12.length) {
break;
}
}
var7 = var39;
}
}
var14 = var7;
if (var7 >= 1) {
for (var15 = 0; var15 < var14 - 1; ++var15) {
var0.method2177(Client.field755[var15], Client.field756[var15], var3);
}
}
}
}
}
}