mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-11 17:10:21 -07:00
487 lines
23 KiB
Java
487 lines
23 KiB
Java
package org.runite.client;
|
|
|
|
import java.util.Objects;
|
|
|
|
public final class PlayerRendering {
|
|
|
|
|
|
static final int[] PLAYER_RENDER_LOG = new int[4];
|
|
static DataBuffer playerRenderBuffer = new DataBuffer(new byte[5000]);
|
|
|
|
static void renderPlayers() {
|
|
try {
|
|
Unsorted.maskUpdateCount = 0;
|
|
Class139.anInt1829 = 0;
|
|
|
|
updateLocalPosition();
|
|
PLAYER_RENDER_LOG[0] = BufferedDataStream.incomingBuffer.index;
|
|
|
|
renderLocalPlayers();
|
|
PLAYER_RENDER_LOG[1] = BufferedDataStream.incomingBuffer.index;
|
|
|
|
addLocalPlayers();
|
|
PLAYER_RENDER_LOG[2] = BufferedDataStream.incomingBuffer.index;
|
|
|
|
parsePlayerMasks();
|
|
PLAYER_RENDER_LOG[3] = BufferedDataStream.incomingBuffer.index;
|
|
|
|
int var1;
|
|
for (var1 = 0; Class139.anInt1829 > var1; ++var1) {
|
|
int var2 = Class3_Sub7.anIntArray2292[var1];
|
|
if (Class44.anInt719 != Unsorted.players[var2].anInt2838) {
|
|
if (0 < Unsorted.players[var2].anInt3969) {
|
|
Class162.method2203(Unsorted.players[var2]);
|
|
}
|
|
|
|
Unsorted.players[var2] = null;
|
|
}
|
|
}
|
|
|
|
if (BufferedDataStream.incomingBuffer.index == Unsorted.incomingPacketLength) {
|
|
for (var1 = 0; var1 < Class159.localPlayerCount; ++var1) {
|
|
if (null == Unsorted.players[Class56.localPlayerIndexes[var1]]) {
|
|
// throw new RuntimeException("gpp2 pos:" + var1 + " size:" + Class159.anInt2022);
|
|
// System.err.println("gpp2 pos:" + var1 + " size:" + Class159.anInt2022);
|
|
System.err.println("Local player was null - index: " + Class56.localPlayerIndexes[var1] + ", list index: " + var1 + ", list size: " + Class159.localPlayerCount);
|
|
}
|
|
}
|
|
|
|
} else {
|
|
System.err.println("Player rendering packet size mismatch - size log: self=" + PLAYER_RENDER_LOG[0] + ", local=" + PLAYER_RENDER_LOG[1] + ", add global=" + PLAYER_RENDER_LOG[2] + ", masks=" + PLAYER_RENDER_LOG[3] + ".");
|
|
// System.err.println("gpp1 pos:" + GraphicDefinition.incomingBuffer.index + " psize:" + Class130.incomingPacketLength);
|
|
// throw new RuntimeException("gpp1 pos:" + Class28.incomingBuffer.index + " psize:" + Class130.incomingPacketLength);
|
|
}
|
|
} catch (RuntimeException var3) {
|
|
throw ClientErrorException.clientError(var3, "fb.B(" + (byte) -122 + ')');
|
|
}
|
|
}
|
|
|
|
static void renderLocalPlayers() {
|
|
try {
|
|
int localPlayerAmount = BufferedDataStream.incomingBuffer.getBits(8);
|
|
int var2;
|
|
if (localPlayerAmount < Class159.localPlayerCount) {
|
|
for (var2 = localPlayerAmount; Class159.localPlayerCount > var2; ++var2) {
|
|
Class3_Sub7.anIntArray2292[Class139.anInt1829++] = Class56.localPlayerIndexes[var2];
|
|
}
|
|
}
|
|
|
|
if (Class159.localPlayerCount >= localPlayerAmount) {
|
|
Class159.localPlayerCount = 0;
|
|
var2 = 0;
|
|
|
|
for (; localPlayerAmount > var2; ++var2) {
|
|
int var3 = Class56.localPlayerIndexes[var2];
|
|
Player var4 = Unsorted.players[var3];
|
|
int update = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (update == 0) {
|
|
Class56.localPlayerIndexes[Class159.localPlayerCount++] = var3;
|
|
var4.anInt2838 = Class44.anInt719;
|
|
} else {
|
|
int type = BufferedDataStream.incomingBuffer.getBits(2);
|
|
if (type == 0) {
|
|
Class56.localPlayerIndexes[Class159.localPlayerCount++] = var3;
|
|
var4.anInt2838 = Class44.anInt719;
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = var3;
|
|
} else {
|
|
int var7;
|
|
int var8;
|
|
if (type == 1) {
|
|
Class56.localPlayerIndexes[Class159.localPlayerCount++] = var3;
|
|
var4.anInt2838 = Class44.anInt719;
|
|
var7 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
var4.walkStep(1, (byte) 46, var7);
|
|
var8 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (var8 == 1) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = var3;
|
|
}
|
|
} else if (type == 2) {
|
|
Class56.localPlayerIndexes[Class159.localPlayerCount++] = var3;
|
|
var4.anInt2838 = Class44.anInt719;
|
|
if (BufferedDataStream.incomingBuffer.getBits(1) == 1) {
|
|
var7 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
var4.walkStep(2, (byte) -92, var7);
|
|
var8 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
var4.walkStep(2, (byte) 88, var8);
|
|
} else {
|
|
var7 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
var4.walkStep(0, (byte) 113, var7);
|
|
}
|
|
|
|
var7 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (1 == var7) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = var3;
|
|
}
|
|
} else if (type == 3) {
|
|
Class3_Sub7.anIntArray2292[Class139.anInt1829++] = var3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} else {
|
|
throw new RuntimeException("gppov1");
|
|
}
|
|
} catch (RuntimeException var9) {
|
|
throw ClientErrorException.clientError(var9, "dc.B(" + false + ')');
|
|
}
|
|
}
|
|
|
|
static void addLocalPlayers() {
|
|
try {
|
|
while (true) {
|
|
if (BufferedDataStream.incomingBuffer.method815(Unsorted.incomingPacketLength) >= 11) {
|
|
int index = BufferedDataStream.incomingBuffer.getBits(11);
|
|
if (index != 2047) {
|
|
boolean var2 = false;
|
|
if (null == Unsorted.players[index]) {
|
|
Unsorted.players[index] = new Player();
|
|
var2 = true;
|
|
if (null != Class65.aClass3_Sub30Array986[index]) {
|
|
Unsorted.players[index].parseAppearance(-54, Class65.aClass3_Sub30Array986[index]);
|
|
}
|
|
}
|
|
|
|
Class56.localPlayerIndexes[Class159.localPlayerCount++] = index;
|
|
Player var3 = Unsorted.players[index];
|
|
var3.anInt2838 = Class44.anInt719;
|
|
int var4 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (var4 == 1) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = index;
|
|
}
|
|
|
|
int var5 = BufferedDataStream.incomingBuffer.getBits(5);
|
|
int var6 = Class27.anIntArray510[BufferedDataStream.incomingBuffer.getBits(3)];
|
|
if (var5 > 15) {
|
|
var5 -= 32;
|
|
}
|
|
|
|
if (var2) {
|
|
var3.anInt2806 = var3.anInt2785 = var6;
|
|
}
|
|
|
|
int var7 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
int var8 = BufferedDataStream.incomingBuffer.getBits(5);
|
|
if (var8 > 15) {
|
|
var8 -= 32;
|
|
}
|
|
|
|
var3.method1981(var5 + Class102.player.anIntArray2767[0], var7 == 1, Class102.player.anIntArray2755[0] + var8);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
BufferedDataStream.incomingBuffer.method818();
|
|
return;
|
|
}
|
|
} catch (RuntimeException var9) {
|
|
throw ClientErrorException.clientError(var9, "se.D(" + -59 + ')');
|
|
}
|
|
}
|
|
|
|
static void parsePlayerMasks() {
|
|
int var1 = 0;
|
|
|
|
while (var1 < Unsorted.maskUpdateCount) {
|
|
int var2 = Class21.maskUpdateIndexes[var1];
|
|
Player var3 = Unsorted.players[var2];
|
|
int var4 = BufferedDataStream.incomingBuffer.readUnsignedByte();
|
|
if ((16 & var4) != 0) {
|
|
var4 += BufferedDataStream.incomingBuffer.readUnsignedByte() << 8;
|
|
}
|
|
|
|
parsePlayerMask(var4, var2, var3);
|
|
++var1;
|
|
}
|
|
}
|
|
|
|
static void parsePlayerMask(int var0, int var1, Player var3) {
|
|
try {
|
|
int var4;
|
|
int chatIcon;
|
|
int var7;
|
|
//Ordinal: 0 Chat
|
|
if (0 != (var0 & 128)) {
|
|
var4 = BufferedDataStream.incomingBuffer.readUnsignedShortLE();
|
|
chatIcon = BufferedDataStream.incomingBuffer.readUnsignedByte();
|
|
int var6 = BufferedDataStream.incomingBuffer.readUnsignedByte();
|
|
var7 = BufferedDataStream.incomingBuffer.index;
|
|
boolean var8 = (32768 & var4) != 0;
|
|
if (null != var3.displayName && var3.class52 != null) {
|
|
long var9 = var3.displayName.toLong();
|
|
boolean var11 = false;
|
|
if (chatIcon <= 1) {
|
|
if (!var8 && (Class3_Sub15.aBoolean2433 && !Class121.aBoolean1641 || TextureOperation31.aBoolean3166)) {
|
|
var11 = true;
|
|
} else {
|
|
for (int var12 = 0; var12 < Class3_Sub28_Sub5.anInt3591; ++var12) {
|
|
if (Class114.ignores[var12] == var9) {
|
|
var11 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!var11 && 0 == PacketParser.inTutorialIsland) {
|
|
playerRenderBuffer.index = 0;
|
|
BufferedDataStream.incomingBuffer.readBytesReverse(var6, playerRenderBuffer.buffer);
|
|
playerRenderBuffer.index = 0;
|
|
int var13 = -1;
|
|
RSString message;
|
|
if (var8) {
|
|
QuickChat var14 = QuickChat.method2156(playerRenderBuffer);
|
|
var4 &= 32767;
|
|
var13 = var14.anInt149;
|
|
message = var14.aQuickChatDefinition_151.method555(playerRenderBuffer);
|
|
} else {
|
|
message = Font.method686(Objects.requireNonNull(Class32.method992(playerRenderBuffer).properlyCapitalize()));
|
|
}
|
|
|
|
var3.textSpoken = message.trim(1);
|
|
var3.textEffect = var4 & 0xFF;
|
|
var3.textCycle = 150;
|
|
var3.textColor = var4 >> 8;
|
|
if (chatIcon >= 2) {
|
|
MessageManager.sendGameMessage(var13, var8 ? 17 : 1, message, null, RSString.stringCombiner(new RSString[]{RSString.parse("<img=" + (chatIcon - 1) + ">"), var3.getName()}));
|
|
} else if (chatIcon == 1) {
|
|
MessageManager.sendGameMessage(var13, var8 ? 17 : 1, message, null, RSString.stringCombiner(new RSString[]{RSString.parse("<img=0>"), var3.getName()}));
|
|
} else {
|
|
MessageManager.sendGameMessage(var13, var8 ? 17 : 2, message, null, var3.getName());
|
|
}
|
|
}
|
|
}
|
|
BufferedDataStream.incomingBuffer.index = var7 + var6;
|
|
}
|
|
|
|
//Ordinal: 1 Hit
|
|
if ((var0 & 1) != 0) {
|
|
var4 = BufferedDataStream.incomingBuffer.getSmart();
|
|
chatIcon = BufferedDataStream.incomingBuffer.readUnsignedByte128();
|
|
var3.addHit(chatIcon, Class44.anInt719, var4);
|
|
var3.anInt2781 = 300 + Class44.anInt719;
|
|
var3.anInt2775 = BufferedDataStream.incomingBuffer.readUnsigned128Byte();
|
|
}
|
|
|
|
//Ordinal: 2 Animation
|
|
if ((var0 & 8) != 0) {
|
|
var4 = BufferedDataStream.incomingBuffer.readUnsignedShort();
|
|
if (var4 == 65535) {
|
|
var4 = -1;
|
|
}
|
|
|
|
chatIcon = BufferedDataStream.incomingBuffer.readUnsignedByte();
|
|
method628(chatIcon, var4, var3);
|
|
}
|
|
|
|
//Ordinal: 3 Appearance
|
|
if (0 != (4 & var0)) {
|
|
var4 = BufferedDataStream.incomingBuffer.readUnsignedByte128();
|
|
byte[] var16 = new byte[var4];
|
|
DataBuffer var19 = new DataBuffer(var16);
|
|
BufferedDataStream.incomingBuffer.readBytes(var16, var4);
|
|
Class65.aClass3_Sub30Array986[var1] = var19;
|
|
var3.parseAppearance(-15, var19);
|
|
}
|
|
|
|
//Ordinal: 4 Face entity
|
|
if ((2 & var0) != 0) {
|
|
var3.anInt2772 = BufferedDataStream.incomingBuffer.readUnsignedShort128();
|
|
if (var3.anInt2772 == 65535) {
|
|
var3.anInt2772 = -1;
|
|
}
|
|
}
|
|
|
|
//Ordinal: 5 Force movement
|
|
if ((1024 & var0) != 0) {
|
|
var3.anInt2784 = BufferedDataStream.incomingBuffer.readUnsignedNegativeByte();
|
|
var3.anInt2835 = BufferedDataStream.incomingBuffer.readUnsignedByte();
|
|
var3.anInt2823 = BufferedDataStream.incomingBuffer.readUnsignedByte128();
|
|
var3.anInt2798 = BufferedDataStream.incomingBuffer.readUnsignedByte();
|
|
var3.anInt2800 = BufferedDataStream.incomingBuffer.readUnsignedShortLE() + Class44.anInt719;
|
|
var3.anInt2790 = BufferedDataStream.incomingBuffer.readUnsignedShortLE() - -Class44.anInt719;
|
|
var3.anInt2840 = BufferedDataStream.incomingBuffer.readUnsignedNegativeByte();
|
|
var3.anInt2816 = 1;
|
|
var3.anInt2811 = 0;
|
|
}
|
|
|
|
//Ordinal: 6 Force chat
|
|
if ((var0 & 32) != 0) {
|
|
var3.textSpoken = BufferedDataStream.incomingBuffer.readString();
|
|
if (var3.textSpoken.charAt(0, (byte) -45) == 126) {
|
|
var3.textSpoken = var3.textSpoken.substring(1);
|
|
BufferedDataStream.addChatMessage(var3.getName(), 2, var3.textSpoken, (byte) -79 ^ 78);
|
|
} else if (var3 == Class102.player) {
|
|
BufferedDataStream.addChatMessage(var3.getName(), 2, var3.textSpoken, (byte) -79 + 78);
|
|
}
|
|
|
|
var3.textEffect = 0;
|
|
var3.textColor = 0;
|
|
var3.textCycle = 150;
|
|
}
|
|
|
|
//Ordinal: 7 Hit 2
|
|
if ((var0 & 512) != 0) {
|
|
var4 = BufferedDataStream.incomingBuffer.getSmart();
|
|
chatIcon = BufferedDataStream.incomingBuffer.readUnsigned128Byte();
|
|
var3.addHit(chatIcon, Class44.anInt719, var4);
|
|
}
|
|
|
|
//Ordinal: 8
|
|
if ((2048 & var0) != 0) {
|
|
var4 = BufferedDataStream.incomingBuffer.readUnsignedNegativeByte();
|
|
int[] var18 = new int[var4];
|
|
int[] var17 = new int[var4];
|
|
int[] var20 = new int[var4];
|
|
|
|
for (int var22 = 0; var22 < var4; ++var22) {
|
|
int var23 = BufferedDataStream.incomingBuffer.readUnsignedShortLE();
|
|
if (65535 == var23) {
|
|
var23 = -1;
|
|
}
|
|
|
|
var18[var22] = var23;
|
|
var17[var22] = BufferedDataStream.incomingBuffer.readUnsignedByte128();
|
|
var20[var22] = BufferedDataStream.incomingBuffer.readUnsignedShort();
|
|
}
|
|
|
|
Class75_Sub1.method1342(var17, var18, var3, var20);
|
|
}
|
|
|
|
//Ordinal: 9 Graphic
|
|
if ((256 & var0) != 0) {
|
|
var4 = BufferedDataStream.incomingBuffer.readUnsignedShortLE();
|
|
if (var4 == 65535) {
|
|
var4 = -1;
|
|
}
|
|
|
|
chatIcon = BufferedDataStream.incomingBuffer.readIntV2();
|
|
boolean var21 = true;
|
|
if (var4 != -1 && var3.anInt2842 != -1 && SequenceDefinition.getAnimationDefinition(GraphicDefinition.getGraphicDefinition((byte) 42, var4).anInt542).forcedPriority < SequenceDefinition.getAnimationDefinition(GraphicDefinition.getGraphicDefinition((byte) 42, var3.anInt2842).anInt542).forcedPriority) {
|
|
var21 = false;
|
|
}
|
|
|
|
if (var21) {
|
|
var3.anInt2759 = (chatIcon & 65535) + Class44.anInt719;
|
|
var3.anInt2761 = 0;
|
|
var3.anInt2805 = 0;
|
|
var3.anInt2842 = var4;
|
|
if (Class44.anInt719 < var3.anInt2759) {
|
|
var3.anInt2805 = -1;
|
|
}
|
|
|
|
var3.anInt2799 = chatIcon >> 16;
|
|
var3.anInt2826 = 1;
|
|
if (var3.anInt2842 != -1 && Class44.anInt719 == var3.anInt2759) {
|
|
var7 = GraphicDefinition.getGraphicDefinition((byte) 42, var3.anInt2842).anInt542;
|
|
if (var7 != -1) {
|
|
SequenceDefinition var24 = SequenceDefinition.getAnimationDefinition(var7);
|
|
if (var24.frames != null) {
|
|
Unsorted.method1470(var3.anInt2829, var24, 183921384, var3.anInt2819, var3 == Class102.player, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Ordinal: 10 Face location
|
|
if ((var0 & 64) != 0) {
|
|
var3.anInt2786 = BufferedDataStream.incomingBuffer.readUnsignedShort();
|
|
var3.anInt2762 = BufferedDataStream.incomingBuffer.readUnsignedShortLE128();
|
|
}
|
|
|
|
} catch (RuntimeException var15) {
|
|
throw ClientErrorException.clientError(var15, "gk.A(" + var0 + ',' + var1 + ',' + (byte) -79 + ',' + (var3 != null ? "{...}" : "null") + ')');
|
|
}
|
|
}
|
|
|
|
static void method628(int var1, int var2, Player var3) {
|
|
try {
|
|
|
|
if (var3.anInt2771 == var2 && var2 != -1) {
|
|
SequenceDefinition var4 = SequenceDefinition.getAnimationDefinition(var2);
|
|
int var5 = var4.delayType;
|
|
if (1 == var5) {
|
|
var3.anInt2828 = var1;
|
|
var3.anInt2760 = 0;
|
|
var3.anInt2776 = 1;
|
|
var3.anInt2832 = 0;
|
|
var3.anInt2773 = 0;
|
|
Unsorted.method1470(var3.anInt2829, var4, 183921384, var3.anInt2819, Class102.player == var3, var3.anInt2832);
|
|
}
|
|
|
|
if (var5 == 2) {
|
|
var3.anInt2773 = 0;
|
|
}
|
|
} else if (-1 == var2 || var3.anInt2771 == -1 || SequenceDefinition.getAnimationDefinition(var2).forcedPriority >= SequenceDefinition.getAnimationDefinition(var3.anInt2771).forcedPriority) {
|
|
var3.anInt2776 = 1;
|
|
var3.anInt2832 = 0;
|
|
var3.anInt2828 = var1;
|
|
var3.anInt2811 = var3.anInt2816;
|
|
var3.anInt2773 = 0;
|
|
var3.anInt2760 = 0;
|
|
var3.anInt2771 = var2;
|
|
if (var3.anInt2771 != -1) {
|
|
Unsorted.method1470(var3.anInt2829, SequenceDefinition.getAnimationDefinition(var3.anInt2771), 183921384, var3.anInt2819, var3 == Class102.player, var3.anInt2832);
|
|
}
|
|
}
|
|
|
|
} catch (RuntimeException var6) {
|
|
throw ClientErrorException.clientError(var6, "pa.C(" + 0 + ',' + var1 + ',' + var2 + ',' + (var3 != null ? "{...}" : "null") + ')');
|
|
}
|
|
}
|
|
|
|
public static void updateLocalPosition() {
|
|
try {
|
|
BufferedDataStream.incomingBuffer.setBitAccess();
|
|
int opcode = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (opcode != 0) {
|
|
int type = BufferedDataStream.incomingBuffer.getBits(2);
|
|
if (type == 0) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = 2047;
|
|
} else {
|
|
int var4;
|
|
int var5;
|
|
if (type == 1) { //Walk
|
|
var4 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
Class102.player.walkStep(1, (byte) -128, var4);
|
|
var5 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (var5 == 1) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = 2047;
|
|
}
|
|
|
|
} else if (type == 2) {
|
|
if (BufferedDataStream.incomingBuffer.getBits(1) == 1) {
|
|
var4 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
Class102.player.walkStep(2, (byte) -104, var4);
|
|
var5 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
Class102.player.walkStep(2, (byte) -126, var5);
|
|
} else {
|
|
var4 = BufferedDataStream.incomingBuffer.getBits(3);
|
|
Class102.player.walkStep(0, (byte) -109, var4);
|
|
}
|
|
|
|
var4 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (var4 == 1) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = 2047;
|
|
}
|
|
|
|
} else if (type == 3) {
|
|
var4 = BufferedDataStream.incomingBuffer.getBits(7);
|
|
var5 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
WorldListCountry.localPlane = BufferedDataStream.incomingBuffer.getBits(2);
|
|
int var6 = BufferedDataStream.incomingBuffer.getBits(1);
|
|
if (var6 == 1) {
|
|
Class21.maskUpdateIndexes[Unsorted.maskUpdateCount++] = 2047;
|
|
}
|
|
|
|
int var7 = BufferedDataStream.incomingBuffer.getBits(7);
|
|
Class102.player.method1981(var7, var5 == 1, var4);
|
|
}
|
|
}
|
|
}
|
|
} catch (RuntimeException var8) {
|
|
throw ClientErrorException.clientError(var8, "bg.G(" + (byte) 81 + ')');
|
|
}
|
|
}
|
|
}
|