Files
runelite/runescape-client/src/main/java/PlayerAppearance.java
Kyle b5c6468d19 Revert "project: 184 (#1670)"
This reverts commit 42acd14658.
2019-09-28 17:11:53 +01:00

689 lines
21 KiB
Java

import java.io.IOException;
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("hr")
@Implements("PlayerAppearance")
public class PlayerAppearance {
@ObfuscatedName("m")
public static short[][] field2519;
@ObfuscatedName("y")
public static short[] field2525;
@ObfuscatedName("c")
@Export("equipmentIndices")
static final int[] equipmentIndices;
@ObfuscatedName("b")
@ObfuscatedSignature(
signature = "Lem;"
)
@Export("PlayerAppearance_cachedModels")
static EvictingDualNodeHashTable PlayerAppearance_cachedModels;
@ObfuscatedName("z")
@Export("equipment")
int[] equipment;
@ObfuscatedName("n")
@Export("bodyColors")
int[] bodyColors;
@ObfuscatedName("v")
@Export("isFemale")
public boolean isFemale;
@ObfuscatedName("u")
@ObfuscatedGetter(
intValue = 297413953
)
@Export("npcTransformId")
public int npcTransformId;
@ObfuscatedName("r")
@ObfuscatedGetter(
longValue = 720398240330286877L
)
long field2526;
@ObfuscatedName("p")
@ObfuscatedGetter(
longValue = -4457276035074261541L
)
long field2522;
static {
equipmentIndices = new int[]{8, 11, 4, 6, 9, 7, 10};
PlayerAppearance_cachedModels = new EvictingDualNodeHashTable(260);
}
@ObfuscatedName("z")
@ObfuscatedSignature(
signature = "([I[IZII)V",
garbageValue = "16711680"
)
@Export("update")
public void update(int[] var1, int[] var2, boolean var3, int var4) {
if (var1 == null) {
var1 = new int[12];
for (int var5 = 0; var5 < 7; ++var5) {
for (int var6 = 0; var6 < DevicePcmPlayerProvider.KitDefinition_fileCount; ++var6) {
KitDefinition var7 = class216.KitDefinition_get(var6);
if (var7 != null && !var7.nonSelectable && var5 + (var3 ? 7 : 0) == var7.bodypartID) {
var1[equipmentIndices[var5]] = var6 + 256;
break;
}
}
}
}
this.equipment = var1;
this.bodyColors = var2;
this.isFemale = var3;
this.npcTransformId = var4;
this.setHash();
}
@ObfuscatedName("n")
@ObfuscatedSignature(
signature = "(IZI)V",
garbageValue = "-317022193"
)
@Export("changeAppearance")
public void changeAppearance(int var1, boolean var2) {
if (var1 != 1 || !this.isFemale) {
int var3 = this.equipment[equipmentIndices[var1]];
if (var3 != 0) {
var3 -= 256;
KitDefinition var4;
do {
if (!var2) {
--var3;
if (var3 < 0) {
var3 = DevicePcmPlayerProvider.KitDefinition_fileCount - 1;
}
} else {
++var3;
if (var3 >= DevicePcmPlayerProvider.KitDefinition_fileCount) {
var3 = 0;
}
}
var4 = class216.KitDefinition_get(var3);
} while(var4 == null || var4.nonSelectable || var4.bodypartID != var1 + (this.isFemale ? 7 : 0));
this.equipment[equipmentIndices[var1]] = var3 + 256;
this.setHash();
}
}
}
@ObfuscatedName("v")
@ObfuscatedSignature(
signature = "(IZI)V",
garbageValue = "-278552632"
)
public void method3965(int var1, boolean var2) {
int var3 = this.bodyColors[var1];
if (!var2) {
do {
--var3;
if (var3 < 0) {
var3 = field2519[var1].length - 1;
}
} while(!NetCache.method4284(var1, var3));
} else {
do {
++var3;
if (var3 >= field2519[var1].length) {
var3 = 0;
}
} while(!NetCache.method4284(var1, var3));
}
this.bodyColors[var1] = var3;
this.setHash();
}
@ObfuscatedName("u")
@ObfuscatedSignature(
signature = "(ZI)V",
garbageValue = "-1564425789"
)
@Export("changeSex")
public void changeSex(boolean var1) {
if (this.isFemale != var1) {
this.update((int[])null, this.bodyColors, var1, -1);
}
}
@ObfuscatedName("r")
@ObfuscatedSignature(
signature = "(Lkl;I)V",
garbageValue = "-1319583567"
)
@Export("write")
public void write(Buffer var1) {
var1.writeByte(this.isFemale ? 1 : 0);
int var2;
for (var2 = 0; var2 < 7; ++var2) {
int var3 = this.equipment[equipmentIndices[var2]];
if (var3 == 0) {
var1.writeByte(-1);
} else {
var1.writeByte(var3 - 256);
}
}
for (var2 = 0; var2 < 5; ++var2) {
var1.writeByte(this.bodyColors[var2]);
}
}
@ObfuscatedName("p")
@ObfuscatedSignature(
signature = "(I)V",
garbageValue = "-1673165778"
)
@Export("setHash")
void setHash() {
long var1 = this.field2526;
int var3 = this.equipment[5];
int var4 = this.equipment[9];
this.equipment[5] = var4;
this.equipment[9] = var3;
this.field2526 = 0L;
int var5;
for (var5 = 0; var5 < 12; ++var5) {
this.field2526 <<= 4;
if (this.equipment[var5] >= 256) {
this.field2526 += (long)(this.equipment[var5] - 256);
}
}
if (this.equipment[0] >= 256) {
this.field2526 += (long)(this.equipment[0] - 256 >> 4);
}
if (this.equipment[1] >= 256) {
this.field2526 += (long)(this.equipment[1] - 256 >> 8);
}
for (var5 = 0; var5 < 5; ++var5) {
this.field2526 <<= 3;
this.field2526 += (long)this.bodyColors[var5];
}
this.field2526 <<= 1;
this.field2526 += (long)(this.isFemale ? 1 : 0);
this.equipment[5] = var3;
this.equipment[9] = var4;
if (var1 != 0L && this.field2526 != var1) {
PlayerAppearance_cachedModels.remove(var1);
}
}
@ObfuscatedName("q")
@ObfuscatedSignature(
signature = "(Lix;ILix;IB)Ldh;",
garbageValue = "2"
)
@Export("getModel")
public Model getModel(SequenceDefinition var1, int var2, SequenceDefinition var3, int var4) {
if (this.npcTransformId != -1) {
return PacketBufferNode.getNpcDefinition(this.npcTransformId).getModel(var1, var2, var3, var4);
} else {
long var5 = this.field2526;
int[] var7 = this.equipment;
if (var1 != null && (var1.shield >= 0 || var1.weapon >= 0)) {
var7 = new int[12];
for (int var15 = 0; var15 < 12; ++var15) {
var7[var15] = this.equipment[var15];
}
if (var1.shield >= 0) {
var5 += (long)(var1.shield - this.equipment[5] << 40);
var7[5] = var1.shield;
}
if (var1.weapon >= 0) {
var5 += (long)(var1.weapon - this.equipment[3] << 48);
var7[3] = var1.weapon;
}
}
Model var8 = (Model)PlayerAppearance_cachedModels.get(var5);
if (var8 == null) {
boolean var9 = false;
int var11;
for (int var10 = 0; var10 < 12; ++var10) {
var11 = var7[var10];
if (var11 >= 256 && var11 < 512 && !class216.KitDefinition_get(var11 - 256).ready()) {
var9 = true;
}
if (var11 >= 512 && !Occluder.ItemDefinition_get(var11 - 512).hasNoValidModel(this.isFemale)) {
var9 = true;
}
}
if (var9) {
if (-1L != this.field2522) {
var8 = (Model)PlayerAppearance_cachedModels.get(this.field2522);
}
if (var8 == null) {
return null;
}
}
if (var8 == null) {
ModelData[] var16 = new ModelData[12];
var11 = 0;
int var13;
for (int var12 = 0; var12 < 12; ++var12) {
var13 = var7[var12];
ModelData var14;
if (var13 >= 256 && var13 < 512) {
var14 = class216.KitDefinition_get(var13 - 256).getModelData();
if (var14 != null) {
var16[var11++] = var14;
}
}
if (var13 >= 512) {
var14 = Occluder.ItemDefinition_get(var13 - 512).method4593(this.isFemale);
if (var14 != null) {
var16[var11++] = var14;
}
}
}
ModelData var18 = new ModelData(var16, var11);
for (var13 = 0; var13 < 5; ++var13) {
if (this.bodyColors[var13] < field2519[var13].length) {
var18.recolor(HorizontalAlignment.field3447[var13], field2519[var13][this.bodyColors[var13]]);
}
if (this.bodyColors[var13] < DevicePcmPlayerProvider.field390[var13].length) {
var18.recolor(field2525[var13], DevicePcmPlayerProvider.field390[var13][this.bodyColors[var13]]);
}
}
var8 = var18.toModel(64, 850, -30, -50, -30);
PlayerAppearance_cachedModels.put(var8, var5);
this.field2522 = var5;
}
}
if (var1 == null && var3 == null) {
return var8;
} else {
Model var17;
if (var1 != null && var3 != null) {
var17 = var1.applyTransformations(var8, var2, var3, var4);
} else if (var1 != null) {
var17 = var1.transformActorModel(var8, var2);
} else {
var17 = var3.transformActorModel(var8, var4);
}
return var17;
}
}
}
@ObfuscatedName("m")
@ObfuscatedSignature(
signature = "(B)Ldw;",
garbageValue = "65"
)
@Export("getModelData")
ModelData getModelData() {
if (this.npcTransformId != -1) {
return PacketBufferNode.getNpcDefinition(this.npcTransformId).getModelData();
} else {
boolean var1 = false;
int var3;
for (int var2 = 0; var2 < 12; ++var2) {
var3 = this.equipment[var2];
if (var3 >= 256 && var3 < 512 && !class216.KitDefinition_get(var3 - 256).method4411()) {
var1 = true;
}
if (var3 >= 512 && !Occluder.ItemDefinition_get(var3 - 512).method4611(this.isFemale)) {
var1 = true;
}
}
if (var1) {
return null;
} else {
ModelData[] var7 = new ModelData[12];
var3 = 0;
int var5;
for (int var4 = 0; var4 < 12; ++var4) {
var5 = this.equipment[var4];
ModelData var6;
if (var5 >= 256 && var5 < 512) {
var6 = class216.KitDefinition_get(var5 - 256).getKitDefinitionModels();
if (var6 != null) {
var7[var3++] = var6;
}
}
if (var5 >= 512) {
var6 = Occluder.ItemDefinition_get(var5 - 512).method4595(this.isFemale);
if (var6 != null) {
var7[var3++] = var6;
}
}
}
ModelData var8 = new ModelData(var7, var3);
for (var5 = 0; var5 < 5; ++var5) {
if (this.bodyColors[var5] < field2519[var5].length) {
var8.recolor(HorizontalAlignment.field3447[var5], field2519[var5][this.bodyColors[var5]]);
}
if (this.bodyColors[var5] < DevicePcmPlayerProvider.field390[var5].length) {
var8.recolor(field2525[var5], DevicePcmPlayerProvider.field390[var5][this.bodyColors[var5]]);
}
}
return var8;
}
}
}
@ObfuscatedName("y")
@ObfuscatedSignature(
signature = "(I)I",
garbageValue = "-2085645902"
)
@Export("getChatHeadId")
public int getChatHeadId() {
return this.npcTransformId == -1 ? (this.equipment[0] << 15) + this.equipment[1] + (this.equipment[11] << 5) + (this.equipment[8] << 10) + (this.bodyColors[0] << 25) + (this.bodyColors[4] << 20) : 305419896 + PacketBufferNode.getNpcDefinition(this.npcTransformId).id;
}
@ObfuscatedName("z")
@ObfuscatedSignature(
signature = "(I)Z",
garbageValue = "-1021250910"
)
public static boolean method3998() {
long var0 = class30.method566();
int var2 = (int)(var0 - NetCache.field3142);
NetCache.field3142 = var0;
if (var2 > 200) {
var2 = 200;
}
NetCache.NetCache_loadTime += var2;
if (NetCache.NetCache_pendingResponsesCount == 0 && NetCache.NetCache_pendingPriorityResponsesCount == 0 && NetCache.NetCache_pendingWritesCount == 0 && NetCache.NetCache_pendingPriorityWritesCount == 0) {
return true;
} else if (NetCache.NetCache_socket == null) {
return false;
} else {
try {
if (NetCache.NetCache_loadTime > 30000) {
throw new IOException();
} else {
NetFileRequest var3;
Buffer var4;
while (NetCache.NetCache_pendingPriorityResponsesCount < 200 && NetCache.NetCache_pendingPriorityWritesCount > 0) {
var3 = (NetFileRequest)NetCache.NetCache_pendingPriorityWrites.first();
var4 = new Buffer(4);
var4.writeByte(1);
var4.writeMedium((int)var3.key);
NetCache.NetCache_socket.write(var4.array, 0, 4);
NetCache.NetCache_pendingPriorityResponses.put(var3, var3.key);
--NetCache.NetCache_pendingPriorityWritesCount;
++NetCache.NetCache_pendingPriorityResponsesCount;
}
while (NetCache.NetCache_pendingResponsesCount < 200 && NetCache.NetCache_pendingWritesCount > 0) {
var3 = (NetFileRequest)NetCache.NetCache_pendingWritesQueue.removeLast();
var4 = new Buffer(4);
var4.writeByte(0);
var4.writeMedium((int)var3.key);
NetCache.NetCache_socket.write(var4.array, 0, 4);
var3.removeDual();
NetCache.NetCache_pendingResponses.put(var3, var3.key);
--NetCache.NetCache_pendingWritesCount;
++NetCache.NetCache_pendingResponsesCount;
}
for (int var15 = 0; var15 < 100; ++var15) {
int var16 = NetCache.NetCache_socket.available();
if (var16 < 0) {
throw new IOException();
}
if (var16 == 0) {
break;
}
NetCache.NetCache_loadTime = 0;
byte var5 = 0;
if (WorldMapEvent.NetCache_currentResponse == null) {
var5 = 8;
} else if (NetCache.field3140 == 0) {
var5 = 1;
}
int var6;
int var7;
int var8;
int var10;
byte[] var10000;
int var10001;
Buffer var22;
if (var5 > 0) {
var6 = var5 - NetCache.NetCache_responseHeaderBuffer.offset;
if (var6 > var16) {
var6 = var16;
}
NetCache.NetCache_socket.read(NetCache.NetCache_responseHeaderBuffer.array, NetCache.NetCache_responseHeaderBuffer.offset, var6);
if (NetCache.field3156 != 0) {
for (var7 = 0; var7 < var6; ++var7) {
var10000 = NetCache.NetCache_responseHeaderBuffer.array;
var10001 = NetCache.NetCache_responseHeaderBuffer.offset + var7;
var10000[var10001] ^= NetCache.field3156;
}
}
var22 = NetCache.NetCache_responseHeaderBuffer;
var22.offset += var6;
if (NetCache.NetCache_responseHeaderBuffer.offset < var5) {
break;
}
if (WorldMapEvent.NetCache_currentResponse == null) {
NetCache.NetCache_responseHeaderBuffer.offset = 0;
var7 = NetCache.NetCache_responseHeaderBuffer.readUnsignedByte();
var8 = NetCache.NetCache_responseHeaderBuffer.readUnsignedShort();
int var9 = NetCache.NetCache_responseHeaderBuffer.readUnsignedByte();
var10 = NetCache.NetCache_responseHeaderBuffer.readInt();
long var11 = (long)(var8 + (var7 << 16));
NetFileRequest var13 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.get(var11);
UserComparator10.field1957 = true;
if (var13 == null) {
var13 = (NetFileRequest)NetCache.NetCache_pendingResponses.get(var11);
UserComparator10.field1957 = false;
}
if (var13 == null) {
throw new IOException();
}
int var14 = var9 == 0 ? 5 : 9;
WorldMapEvent.NetCache_currentResponse = var13;
FaceNormal.NetCache_responseArchiveBuffer = new Buffer(var10 + var14 + WorldMapEvent.NetCache_currentResponse.padding);
FaceNormal.NetCache_responseArchiveBuffer.writeByte(var9);
FaceNormal.NetCache_responseArchiveBuffer.writeInt(var10);
NetCache.field3140 = 8;
NetCache.NetCache_responseHeaderBuffer.offset = 0;
} else if (NetCache.field3140 == 0) {
if (NetCache.NetCache_responseHeaderBuffer.array[0] == -1) {
NetCache.field3140 = 1;
NetCache.NetCache_responseHeaderBuffer.offset = 0;
} else {
WorldMapEvent.NetCache_currentResponse = null;
}
}
} else {
var6 = FaceNormal.NetCache_responseArchiveBuffer.array.length - WorldMapEvent.NetCache_currentResponse.padding;
var7 = 512 - NetCache.field3140;
if (var7 > var6 - FaceNormal.NetCache_responseArchiveBuffer.offset) {
var7 = var6 - FaceNormal.NetCache_responseArchiveBuffer.offset;
}
if (var7 > var16) {
var7 = var16;
}
NetCache.NetCache_socket.read(FaceNormal.NetCache_responseArchiveBuffer.array, FaceNormal.NetCache_responseArchiveBuffer.offset, var7);
if (NetCache.field3156 != 0) {
for (var8 = 0; var8 < var7; ++var8) {
var10000 = FaceNormal.NetCache_responseArchiveBuffer.array;
var10001 = var8 + FaceNormal.NetCache_responseArchiveBuffer.offset;
var10000[var10001] ^= NetCache.field3156;
}
}
var22 = FaceNormal.NetCache_responseArchiveBuffer;
var22.offset += var7;
NetCache.field3140 += var7;
if (var6 == FaceNormal.NetCache_responseArchiveBuffer.offset) {
if (16711935L == WorldMapEvent.NetCache_currentResponse.key) {
AbstractWorldMapIcon.NetCache_reference = FaceNormal.NetCache_responseArchiveBuffer;
for (var8 = 0; var8 < 256; ++var8) {
Archive var17 = NetCache.NetCache_archives[var8];
if (var17 != null) {
AbstractWorldMapIcon.NetCache_reference.offset = var8 * 8 + 5;
var10 = AbstractWorldMapIcon.NetCache_reference.readInt();
int var18 = AbstractWorldMapIcon.NetCache_reference.readInt();
var17.loadIndex(var10, var18);
}
}
} else {
NetCache.NetCache_crc.reset();
NetCache.NetCache_crc.update(FaceNormal.NetCache_responseArchiveBuffer.array, 0, var6);
var8 = (int)NetCache.NetCache_crc.getValue();
if (var8 != WorldMapEvent.NetCache_currentResponse.crc) {
try {
NetCache.NetCache_socket.close();
} catch (Exception var20) {
}
++NetCache.NetCache_crcMismatches;
NetCache.NetCache_socket = null;
NetCache.field3156 = (byte)((int)(Math.random() * 255.0D + 1.0D));
return false;
}
NetCache.NetCache_crcMismatches = 0;
NetCache.NetCache_ioExceptions = 0;
WorldMapEvent.NetCache_currentResponse.archive.write((int)(WorldMapEvent.NetCache_currentResponse.key & 65535L), FaceNormal.NetCache_responseArchiveBuffer.array, (WorldMapEvent.NetCache_currentResponse.key & 16711680L) == 16711680L, UserComparator10.field1957);
}
WorldMapEvent.NetCache_currentResponse.remove();
if (UserComparator10.field1957) {
--NetCache.NetCache_pendingPriorityResponsesCount;
} else {
--NetCache.NetCache_pendingResponsesCount;
}
NetCache.field3140 = 0;
WorldMapEvent.NetCache_currentResponse = null;
FaceNormal.NetCache_responseArchiveBuffer = null;
} else {
if (NetCache.field3140 != 512) {
break;
}
NetCache.field3140 = 0;
}
}
}
return true;
}
} catch (IOException var21) {
try {
NetCache.NetCache_socket.close();
} catch (Exception var19) {
}
++NetCache.NetCache_ioExceptions;
NetCache.NetCache_socket = null;
return false;
}
}
}
@ObfuscatedName("z")
@ObfuscatedSignature(
signature = "(B)[Lin;",
garbageValue = "101"
)
static HorizontalAlignment[] method4000() {
return new HorizontalAlignment[]{HorizontalAlignment.field3442, HorizontalAlignment.field3444, HorizontalAlignment.HorizontalAlignment_centered};
}
@ObfuscatedName("ai")
@ObfuscatedSignature(
signature = "(II)I",
garbageValue = "1781991052"
)
static int method3966(int var0) {
return (int)Math.pow(2.0D, (double)(7.0F + (float)var0 / 256.0F));
}
@ObfuscatedName("go")
@ObfuscatedSignature(
signature = "(IIII)V",
garbageValue = "1898502945"
)
@Export("worldToScreen")
static final void worldToScreen(int var0, int var1, int var2) {
if (var0 >= 128 && var1 >= 128 && var0 <= 13056 && var1 <= 13056) {
int var3 = MusicPatchPcmStream.getTileHeight(var0, var1, WorldMapRectangle.plane) - var2;
var0 -= GrandExchangeOfferOwnWorldComparator.cameraX;
var3 -= Varcs.cameraY;
var1 -= WorldMapIcon_1.cameraZ;
int var4 = Rasterizer3D.Rasterizer3D_sine[IgnoreList.cameraPitch];
int var5 = Rasterizer3D.Rasterizer3D_cosine[IgnoreList.cameraPitch];
int var6 = Rasterizer3D.Rasterizer3D_sine[WorldMapSection2.cameraYaw];
int var7 = Rasterizer3D.Rasterizer3D_cosine[WorldMapSection2.cameraYaw];
int var8 = var6 * var1 + var0 * var7 >> 16;
var1 = var7 * var1 - var0 * var6 >> 16;
var0 = var8;
var8 = var3 * var5 - var4 * var1 >> 16;
var1 = var5 * var1 + var4 * var3 >> 16;
if (var1 >= 50) {
Client.viewportTempX = var0 * Client.viewportZoom / var1 + Client.viewportWidth / 2;
Client.viewportTempY = Client.viewportHeight / 2 + var8 * Client.viewportZoom / var1;
} else {
Client.viewportTempX = -1;
Client.viewportTempY = -1;
}
} else {
Client.viewportTempX = -1;
Client.viewportTempY = -1;
}
}
}