mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2026-08-17 08:25:14 -06:00
161 lines
5.6 KiB
Java
161 lines
5.6 KiB
Java
package rt4;
|
|
|
|
import org.openrs2.deob.annotation.OriginalArg;
|
|
import org.openrs2.deob.annotation.OriginalClass;
|
|
import org.openrs2.deob.annotation.OriginalMember;
|
|
import org.openrs2.deob.annotation.Pc;
|
|
|
|
@OriginalClass("client!cn")
|
|
public final class AttachLocRequest extends Node {
|
|
|
|
@OriginalMember(owner = "client!ka", name = "q", descriptor = "Lclient!ih;")
|
|
public static final LinkedList queue = new LinkedList();
|
|
|
|
@OriginalMember(owner = "client!cn", name = "p", descriptor = "I")
|
|
public int setLoops;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "r", descriptor = "I")
|
|
public int x0Delta;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "t", descriptor = "I")
|
|
public int locId;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "u", descriptor = "I")
|
|
public int x;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "v", descriptor = "I")
|
|
public int x1Delta;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "w", descriptor = "I")
|
|
public int entityId;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "D", descriptor = "I")
|
|
public int z0Delta;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "E", descriptor = "I")
|
|
public int shape;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "H", descriptor = "I")
|
|
public int z1Delta;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "M", descriptor = "I")
|
|
public int z;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "N", descriptor = "I")
|
|
public int resetLoops;
|
|
|
|
@OriginalMember(owner = "client!cn", name = "O", descriptor = "I")
|
|
public int angle;
|
|
|
|
@OriginalMember(owner = "client!ph", name = "a", descriptor = "(B)V")
|
|
public static void loop() {
|
|
while (true) {
|
|
@Pc(17) AttachLocRequest request = (AttachLocRequest) queue.removeHead();
|
|
if (request == null) {
|
|
return;
|
|
}
|
|
@Pc(40) PathingEntity entity;
|
|
@Pc(29) int playerId;
|
|
if (request.entityId < 0) {
|
|
playerId = -request.entityId - 1;
|
|
if (playerId == PlayerList.selfId) {
|
|
entity = PlayerList.self;
|
|
} else {
|
|
entity = PlayerList.players[playerId];
|
|
}
|
|
} else {
|
|
playerId = request.entityId - 1;
|
|
entity = NpcList.npcs[playerId];
|
|
}
|
|
if (entity != null) {
|
|
@Pc(63) LocType type = LocTypeList.get(request.locId);
|
|
if (Player.level < 3) {
|
|
}
|
|
@Pc(86) int width;
|
|
@Pc(83) int length;
|
|
if (request.angle == 1 || request.angle == 3) {
|
|
length = type.width;
|
|
width = type.length;
|
|
} else {
|
|
width = type.width;
|
|
length = type.length;
|
|
}
|
|
@Pc(103) int centerX1 = (width + 1 >> 1) + request.x;
|
|
@Pc(110) int centerX0 = (width >> 1) + request.x;
|
|
@Pc(117) int centerZ0 = (length >> 1) + request.z;
|
|
@Pc(126) int centerZ1 = (length + 1 >> 1) + request.z;
|
|
@Pc(130) int[][] tileHeights = SceneGraph.tileHeights[Player.level];
|
|
@Pc(157) int y = tileHeights[centerX1][centerZ1] + tileHeights[centerX0][centerZ1] + tileHeights[centerX0][centerZ0] + tileHeights[centerX1][centerZ0] >> 2;
|
|
@Pc(159) Entity attachment = null;
|
|
@Pc(164) int layer = Loc.LAYERS[request.shape];
|
|
if (layer == 0) {
|
|
@Pc(176) Wall wall = SceneGraph.getWall(Player.level, request.x, request.z);
|
|
if (wall != null) {
|
|
attachment = wall.primary;
|
|
}
|
|
} else if (layer == 1) {
|
|
@Pc(231) WallDecor wallDecor = SceneGraph.getWallDecor(Player.level, request.x, request.z);
|
|
if (wallDecor != null) {
|
|
attachment = wallDecor.primary;
|
|
}
|
|
} else if (layer == 2) {
|
|
@Pc(198) Scenery scenery = SceneGraph.getScenery(Player.level, request.x, request.z);
|
|
if (scenery != null) {
|
|
attachment = scenery.entity;
|
|
}
|
|
} else if (layer == 3) {
|
|
@Pc(216) GroundDecor groundDecor = SceneGraph.getGroundDecor(Player.level, request.x, request.z);
|
|
if (groundDecor != null) {
|
|
attachment = groundDecor.entity;
|
|
}
|
|
}
|
|
if (attachment != null) {
|
|
ChangeLocRequest.push(Player.level, request.z, 0, request.x, request.resetLoops + 1, -1, layer, 0, request.setLoops + 1);
|
|
entity.attachmentResetAt = request.resetLoops + client.loop;
|
|
entity.attachmentZFine = length * 64 + request.z * 128;
|
|
entity.attachmentXFine = width * 64 + request.x * 128;
|
|
entity.attachment = attachment;
|
|
@Pc(292) int x0Delta = request.x0Delta;
|
|
entity.attachmentY = y;
|
|
entity.attachmentSetAt = client.loop + request.setLoops;
|
|
@Pc(304) int x1Delta = request.x1Delta;
|
|
@Pc(307) int z0Delta = request.z0Delta;
|
|
@Pc(310) int z1Delta = request.z1Delta;
|
|
@Pc(316) int temp;
|
|
if (x0Delta > x1Delta) {
|
|
temp = x0Delta;
|
|
x0Delta = x1Delta;
|
|
x1Delta = temp;
|
|
}
|
|
entity.attachmentX1 = request.x + x1Delta;
|
|
if (z0Delta > z1Delta) {
|
|
temp = z0Delta;
|
|
z0Delta = z1Delta;
|
|
z1Delta = temp;
|
|
}
|
|
entity.attachmentZ0 = request.z + z0Delta;
|
|
entity.attachmentZ1 = z1Delta + request.z;
|
|
entity.atachmentX0 = request.x + x0Delta;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!nh", name = "a", descriptor = "(IIIIIIIIIIIII)V")
|
|
public static void push(@OriginalArg(0) int x1Delta, @OriginalArg(1) int setLoops, @OriginalArg(2) int entityId, @OriginalArg(3) int resetLoops, @OriginalArg(4) int z, @OriginalArg(5) int z1Delta, @OriginalArg(6) int angle, @OriginalArg(7) int x0Delta, @OriginalArg(8) int x, @OriginalArg(9) int shape, @OriginalArg(11) int z0Delta, @OriginalArg(12) int locId) {
|
|
@Pc(7) AttachLocRequest req = new AttachLocRequest();
|
|
req.angle = angle;
|
|
req.resetLoops = resetLoops;
|
|
req.setLoops = setLoops;
|
|
req.z1Delta = z1Delta;
|
|
req.entityId = entityId;
|
|
req.x = x;
|
|
req.z0Delta = z0Delta;
|
|
req.z = z;
|
|
req.locId = locId;
|
|
req.x0Delta = x0Delta;
|
|
req.x1Delta = x1Delta;
|
|
req.shape = shape;
|
|
queue.addTail(req);
|
|
}
|
|
}
|