mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2026-08-17 08:25:14 -06:00
Refactored PathFinder class
This commit is contained in:
parent
ff0e890dcd
commit
36b0d99c42
21 changed files with 842 additions and 843 deletions
|
|
@ -1,8 +1,665 @@
|
|||
package rt4;
|
||||
|
||||
import org.openrs2.deob.annotation.OriginalArg;
|
||||
import org.openrs2.deob.annotation.OriginalMember;
|
||||
import org.openrs2.deob.annotation.Pc;
|
||||
|
||||
public class PathFinder {
|
||||
@OriginalMember(owner = "client!li", name = "h", descriptor = "[Lclient!mj;")
|
||||
public static final CollisionMap[] collisionMaps = new CollisionMap[4];
|
||||
@OriginalMember(owner = "client!lf", name = "a", descriptor = "[[I")
|
||||
public static final int[][] parents = new int[104][104];
|
||||
@OriginalMember(owner = "client!nd", name = "q", descriptor = "[[I")
|
||||
public static final int[][] costs = new int[104][104];
|
||||
@OriginalMember(owner = "client!vc", name = "eb", descriptor = "[I")
|
||||
public static final int[] queueX = new int[4096];
|
||||
@OriginalMember(owner = "client!gk", name = "c", descriptor = "[I")
|
||||
public static final int[] queueZ = new int[4096];
|
||||
@OriginalMember(owner = "client!s", name = "d", descriptor = "I")
|
||||
public static int anInt4364 = 0;
|
||||
|
||||
@OriginalMember(owner = "client!hn", name = "a", descriptor = "(IIIZIIIIIIII)Z")
|
||||
public static boolean findPath(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) boolean arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10) {
|
||||
if (PlayerList.self.getSize() == 2) {
|
||||
return findPath2(arg6, arg7, arg4, arg0, arg9, arg3, arg2, arg1, arg5, arg8, arg10);
|
||||
} else if (PlayerList.self.getSize() <= 2) {
|
||||
return findPathN(arg5, arg4, arg10, arg9, arg8, arg2, arg1, arg3, arg7, arg0, arg6);
|
||||
} else {
|
||||
return findPath1(arg9, arg6, arg8, arg1, PlayerList.self.getSize(), arg5, arg7, arg4, arg10, arg2, arg3, arg0);
|
||||
}
|
||||
}
|
||||
|
||||
@OriginalMember(owner = "client!aa", name = "a", descriptor = "(IIIIIZIIIIII)Z")
|
||||
public static boolean findPath2(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(11) int arg10) {
|
||||
@Pc(3) int x;
|
||||
@Pc(8) int z;
|
||||
for (x = 0; x < 104; x++) {
|
||||
for (z = 0; z < 104; z++) {
|
||||
parents[x][z] = 0;
|
||||
costs[x][z] = 99999999;
|
||||
}
|
||||
}
|
||||
parents[arg10][arg3] = 99;
|
||||
costs[arg10][arg3] = 0;
|
||||
z = arg3;
|
||||
x = arg10;
|
||||
@Pc(53) byte local53 = 0;
|
||||
queueX[0] = arg10;
|
||||
@Pc(59) boolean local59 = false;
|
||||
@Pc(61) int local61 = 0;
|
||||
@Pc(64) int queueWriterIndex = local53 + 1;
|
||||
queueZ[0] = arg3;
|
||||
@Pc(71) int[][] flags = collisionMaps[Player.level].flags;
|
||||
@Pc(193) int cost;
|
||||
while (local61 != queueWriterIndex) {
|
||||
x = queueX[local61];
|
||||
z = queueZ[local61];
|
||||
local61 = local61 + 1 & 0xFFF;
|
||||
if (arg8 == x && arg4 == z) {
|
||||
local59 = true;
|
||||
break;
|
||||
}
|
||||
if (arg1 != 0) {
|
||||
if ((arg1 < 5 || arg1 == 10) && collisionMaps[Player.level].isAtWall(arg4, x, z, arg8, arg1 - 1, 2, arg7)) {
|
||||
local59 = true;
|
||||
break;
|
||||
}
|
||||
if (arg1 < 10 && collisionMaps[Player.level].isAtWallDecor(arg4, arg1 - 1, arg8, z, 2, arg7, x)) {
|
||||
local59 = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (arg0 != 0 && arg6 != 0 && collisionMaps[Player.level].isInsideOrOutsideRect(arg8, z, x, 2, arg0, arg2, arg4, arg6)) {
|
||||
local59 = true;
|
||||
break;
|
||||
}
|
||||
cost = costs[x][z] + 1;
|
||||
if (x > 0 && parents[x - 1][z] == 0 && (flags[x - 1][z] & 0x12C010E) == 0 && (flags[x - 1][z + 1] & 0x12C0138) == 0) {
|
||||
queueX[queueWriterIndex] = x - 1;
|
||||
queueZ[queueWriterIndex] = z;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
parents[x - 1][z] = 2;
|
||||
costs[x - 1][z] = cost;
|
||||
}
|
||||
if (x < 102 && parents[x + 1][z] == 0 && (flags[x + 2][z] & 0x12C0183) == 0 && (flags[x + 2][z + 1] & 0x12C01E0) == 0) {
|
||||
queueX[queueWriterIndex] = x + 1;
|
||||
queueZ[queueWriterIndex] = z;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
parents[x + 1][z] = 8;
|
||||
costs[x + 1][z] = cost;
|
||||
}
|
||||
if (z > 0 && parents[x][z - 1] == 0 && (flags[x][z - 1] & 0x12C010E) == 0 && (flags[x + 1][z - 1] & 0x12C0183) == 0) {
|
||||
queueX[queueWriterIndex] = x;
|
||||
queueZ[queueWriterIndex] = z - 1;
|
||||
parents[x][z - 1] = 1;
|
||||
costs[x][z - 1] = cost;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
}
|
||||
if (z < 102 && parents[x][z + 1] == 0 && (flags[x][z + 2] & 0x12C0138) == 0 && (flags[x + 1][z + 2] & 0x12C01E0) == 0) {
|
||||
queueX[queueWriterIndex] = x;
|
||||
queueZ[queueWriterIndex] = z + 1;
|
||||
parents[x][z + 1] = 4;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
costs[x][z + 1] = cost;
|
||||
}
|
||||
if (x > 0 && z > 0 && parents[x - 1][z - 1] == 0 && (flags[x - 1][z] & 0x12C0138) == 0 && (flags[x - 1][z - 1] & 0x12C010E) == 0 && (flags[x][z - 1] & 0x12C0183) == 0) {
|
||||
queueX[queueWriterIndex] = x - 1;
|
||||
queueZ[queueWriterIndex] = z - 1;
|
||||
parents[x - 1][z - 1] = 3;
|
||||
costs[x - 1][z - 1] = cost;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
}
|
||||
if (x < 102 && z > 0 && parents[x + 1][z - 1] == 0 && (flags[x + 1][z - 1] & 0x12C010E) == 0 && (flags[x + 2][z - 1] & 0x12C0183) == 0 && (flags[x + 2][z] & 0x12C01E0) == 0) {
|
||||
queueX[queueWriterIndex] = x + 1;
|
||||
queueZ[queueWriterIndex] = z - 1;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
parents[x + 1][z - 1] = 9;
|
||||
costs[x + 1][z - 1] = cost;
|
||||
}
|
||||
if (x > 0 && z < 102 && parents[x - 1][z + 1] == 0 && (flags[x - 1][z + 1] & 0x12C010E) == 0 && (flags[x - 1][z + 2] & 0x12C0138) == 0 && (flags[x][z + 2] & 0x12C01E0) == 0) {
|
||||
queueX[queueWriterIndex] = x - 1;
|
||||
queueZ[queueWriterIndex] = z + 1;
|
||||
parents[x - 1][z + 1] = 6;
|
||||
costs[x - 1][z + 1] = cost;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
}
|
||||
if (x < 102 && z < 102 && parents[x + 1][z + 1] == 0 && (flags[x + 1][z + 2] & 0x12C0138) == 0 && (flags[x + 2][z + 2] & 0x12C01E0) == 0 && (flags[x + 2][z + 1] & 0x12C0183) == 0) {
|
||||
queueX[queueWriterIndex] = x + 1;
|
||||
queueZ[queueWriterIndex] = z + 1;
|
||||
queueWriterIndex = queueWriterIndex + 1 & 0xFFF;
|
||||
parents[x + 1][z + 1] = 12;
|
||||
costs[x + 1][z + 1] = cost;
|
||||
}
|
||||
}
|
||||
anInt4364 = 0;
|
||||
@Pc(921) int local921;
|
||||
if (!local59) {
|
||||
if (!arg5) {
|
||||
return false;
|
||||
}
|
||||
cost = 1000;
|
||||
local921 = 100;
|
||||
for (@Pc(928) int local928 = arg8 - 10; local928 <= arg8 + 10; local928++) {
|
||||
for (@Pc(942) int local942 = arg4 - 10; local942 <= arg4 + 10; local942++) {
|
||||
if (local928 >= 0 && local942 >= 0 && local928 < 104 && local942 < 104 && costs[local928][local942] < 100) {
|
||||
@Pc(978) int local978 = 0;
|
||||
@Pc(980) int local980 = 0;
|
||||
if (local928 < arg8) {
|
||||
local978 = arg8 - local928;
|
||||
} else if (local928 > arg0 + arg8 - 1) {
|
||||
local978 = local928 + 1 - arg0 - arg8;
|
||||
}
|
||||
if (arg4 > local942) {
|
||||
local980 = arg4 - local942;
|
||||
} else if (local942 > arg4 + arg6 - 1) {
|
||||
local980 = local942 + 1 - arg4 - arg6;
|
||||
}
|
||||
@Pc(1057) int local1057 = local978 * local978 + local980 * local980;
|
||||
if (local1057 < cost || cost == local1057 && costs[local928][local942] < local921) {
|
||||
z = local942;
|
||||
local921 = costs[local928][local942];
|
||||
cost = local1057;
|
||||
x = local928;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cost == 1000) {
|
||||
return false;
|
||||
}
|
||||
if (arg10 == x && z == arg3) {
|
||||
return false;
|
||||
}
|
||||
anInt4364 = 1;
|
||||
}
|
||||
@Pc(1121) byte local1121 = 0;
|
||||
queueX[0] = x;
|
||||
local61 = local1121 + 1;
|
||||
queueZ[0] = z;
|
||||
cost = local921 = parents[x][z];
|
||||
while (arg10 != x || arg3 != z) {
|
||||
if (local921 != cost) {
|
||||
queueX[local61] = x;
|
||||
queueZ[local61++] = z;
|
||||
local921 = cost;
|
||||
}
|
||||
if ((cost & 0x2) != 0) {
|
||||
x++;
|
||||
} else if ((cost & 0x8) != 0) {
|
||||
x--;
|
||||
}
|
||||
if ((cost & 0x1) != 0) {
|
||||
z++;
|
||||
} else if ((cost & 0x4) != 0) {
|
||||
z--;
|
||||
}
|
||||
cost = parents[x][z];
|
||||
}
|
||||
if (local61 > 0) {
|
||||
ClientProt.method3502(local61, arg9);
|
||||
return true;
|
||||
} else if (arg9 == 1) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@OriginalMember(owner = "client!di", name = "a", descriptor = "(IIIIIIIIZIII)Z")
|
||||
public static boolean findPathN(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) boolean arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10) {
|
||||
@Pc(3) int local3;
|
||||
@Pc(10) int local10;
|
||||
for (local3 = 0; local3 < 104; local3++) {
|
||||
for (local10 = 0; local10 < 104; local10++) {
|
||||
parents[local3][local10] = 0;
|
||||
costs[local3][local10] = 99999999;
|
||||
}
|
||||
}
|
||||
local3 = arg2;
|
||||
parents[arg2][arg9] = 99;
|
||||
local10 = arg9;
|
||||
costs[arg2][arg9] = 0;
|
||||
@Pc(51) byte local51 = 0;
|
||||
@Pc(53) boolean local53 = false;
|
||||
@Pc(64) int local64 = 0;
|
||||
queueX[0] = arg2;
|
||||
@Pc(71) int local71 = local51 + 1;
|
||||
queueZ[0] = arg9;
|
||||
@Pc(78) int[][] local78 = collisionMaps[Player.level].flags;
|
||||
@Pc(198) int local198;
|
||||
while (local71 != local64) {
|
||||
local10 = queueZ[local64];
|
||||
local3 = queueX[local64];
|
||||
local64 = local64 + 1 & 0xFFF;
|
||||
if (local3 == arg0 && local10 == arg3) {
|
||||
local53 = true;
|
||||
break;
|
||||
}
|
||||
if (arg8 != 0) {
|
||||
if ((arg8 < 5 || arg8 == 10) && collisionMaps[Player.level].isAtWall(arg3, local3, local10, arg0, arg8 - 1, 1, arg6)) {
|
||||
local53 = true;
|
||||
break;
|
||||
}
|
||||
if (arg8 < 10 && collisionMaps[Player.level].isAtWallDecor(arg3, arg8 - 1, arg0, local10, 1, arg6, local3)) {
|
||||
local53 = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (arg10 != 0 && arg5 != 0 && collisionMaps[Player.level].isInsideOrOutsideRect(arg0, local10, local3, 1, arg10, arg1, arg3, arg5)) {
|
||||
local53 = true;
|
||||
break;
|
||||
}
|
||||
local198 = costs[local3][local10] + 1;
|
||||
if (local3 > 0 && parents[local3 - 1][local10] == 0 && (local78[local3 - 1][local10] & 0x12C0108) == 0) {
|
||||
queueX[local71] = local3 - 1;
|
||||
queueZ[local71] = local10;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
parents[local3 - 1][local10] = 2;
|
||||
costs[local3 - 1][local10] = local198;
|
||||
}
|
||||
if (local3 < 103 && parents[local3 + 1][local10] == 0 && (local78[local3 + 1][local10] & 0x12C0180) == 0) {
|
||||
queueX[local71] = local3 + 1;
|
||||
queueZ[local71] = local10;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
parents[local3 + 1][local10] = 8;
|
||||
costs[local3 + 1][local10] = local198;
|
||||
}
|
||||
if (local10 > 0 && parents[local3][local10 - 1] == 0 && (local78[local3][local10 - 1] & 0x12C0102) == 0) {
|
||||
queueX[local71] = local3;
|
||||
queueZ[local71] = local10 - 1;
|
||||
parents[local3][local10 - 1] = 1;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
costs[local3][local10 - 1] = local198;
|
||||
}
|
||||
if (local10 < 103 && parents[local3][local10 + 1] == 0 && (local78[local3][local10 + 1] & 0x12C0120) == 0) {
|
||||
queueX[local71] = local3;
|
||||
queueZ[local71] = local10 + 1;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
parents[local3][local10 + 1] = 4;
|
||||
costs[local3][local10 + 1] = local198;
|
||||
}
|
||||
if (local3 > 0 && local10 > 0 && parents[local3 - 1][local10 - 1] == 0 && (local78[local3 - 1][local10 - 1] & 0x12C010E) == 0 && (local78[local3 - 1][local10] & 0x12C0108) == 0 && (local78[local3][local10 - 1] & 0x12C0102) == 0) {
|
||||
queueX[local71] = local3 - 1;
|
||||
queueZ[local71] = local10 - 1;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
parents[local3 - 1][local10 - 1] = 3;
|
||||
costs[local3 - 1][local10 - 1] = local198;
|
||||
}
|
||||
if (local3 < 103 && local10 > 0 && parents[local3 + 1][local10 - 1] == 0 && (local78[local3 + 1][local10 - 1] & 0x12C0183) == 0 && (local78[local3 + 1][local10] & 0x12C0180) == 0 && (local78[local3][local10 - 1] & 0x12C0102) == 0) {
|
||||
queueX[local71] = local3 + 1;
|
||||
queueZ[local71] = local10 - 1;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
parents[local3 + 1][local10 - 1] = 9;
|
||||
costs[local3 + 1][local10 - 1] = local198;
|
||||
}
|
||||
if (local3 > 0 && local10 < 103 && parents[local3 - 1][local10 + 1] == 0 && (local78[local3 - 1][local10 + 1] & 0x12C0138) == 0 && (local78[local3 - 1][local10] & 0x12C0108) == 0 && (local78[local3][local10 + 1] & 0x12C0120) == 0) {
|
||||
queueX[local71] = local3 - 1;
|
||||
queueZ[local71] = local10 + 1;
|
||||
parents[local3 - 1][local10 + 1] = 6;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
costs[local3 - 1][local10 + 1] = local198;
|
||||
}
|
||||
if (local3 < 103 && local10 < 103 && parents[local3 + 1][local10 + 1] == 0 && (local78[local3 + 1][local10 + 1] & 0x12C01E0) == 0 && (local78[local3 + 1][local10] & 0x12C0180) == 0 && (local78[local3][local10 + 1] & 0x12C0120) == 0) {
|
||||
queueX[local71] = local3 + 1;
|
||||
queueZ[local71] = local10 + 1;
|
||||
parents[local3 + 1][local10 + 1] = 12;
|
||||
local71 = local71 + 1 & 0xFFF;
|
||||
costs[local3 + 1][local10 + 1] = local198;
|
||||
}
|
||||
}
|
||||
anInt4364 = 0;
|
||||
@Pc(839) int local839;
|
||||
if (!local53) {
|
||||
if (!arg7) {
|
||||
return false;
|
||||
}
|
||||
local198 = 1000;
|
||||
local839 = 100;
|
||||
for (@Pc(846) int local846 = arg0 - 10; local846 <= arg0 + 10; local846++) {
|
||||
for (@Pc(856) int local856 = arg3 - 10; local856 <= arg3 + 10; local856++) {
|
||||
if (local846 >= 0 && local856 >= 0 && local846 < 104 && local856 < 104 && costs[local846][local856] < 100) {
|
||||
@Pc(894) int local894 = 0;
|
||||
if (local856 < arg3) {
|
||||
local894 = arg3 - local856;
|
||||
} else if (arg5 + arg3 - 1 < local856) {
|
||||
local894 = local856 + 1 - arg3 - arg5;
|
||||
}
|
||||
@Pc(927) int local927 = 0;
|
||||
if (local846 < arg0) {
|
||||
local927 = arg0 - local846;
|
||||
} else if (local846 > arg10 + arg0 - 1) {
|
||||
local927 = local846 + 1 - arg10 - arg0;
|
||||
}
|
||||
@Pc(968) int local968 = local894 * local894 + local927 * local927;
|
||||
if (local968 < local198 || local968 == local198 && costs[local846][local856] < local839) {
|
||||
local10 = local856;
|
||||
local198 = local968;
|
||||
local3 = local846;
|
||||
local839 = costs[local846][local856];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (local198 == 1000) {
|
||||
return false;
|
||||
}
|
||||
if (arg2 == local3 && local10 == arg9) {
|
||||
return false;
|
||||
}
|
||||
anInt4364 = 1;
|
||||
}
|
||||
@Pc(1032) byte local1032 = 0;
|
||||
queueX[0] = local3;
|
||||
local64 = local1032 + 1;
|
||||
queueZ[0] = local10;
|
||||
local198 = local839 = parents[local3][local10];
|
||||
while (arg2 != local3 || local10 != arg9) {
|
||||
if (local839 != local198) {
|
||||
local839 = local198;
|
||||
queueX[local64] = local3;
|
||||
queueZ[local64++] = local10;
|
||||
}
|
||||
if ((local198 & 0x2) != 0) {
|
||||
local3++;
|
||||
} else if ((local198 & 0x8) != 0) {
|
||||
local3--;
|
||||
}
|
||||
if ((local198 & 0x1) != 0) {
|
||||
local10++;
|
||||
} else if ((local198 & 0x4) != 0) {
|
||||
local10--;
|
||||
}
|
||||
local198 = parents[local3][local10];
|
||||
}
|
||||
if (local64 > 0) {
|
||||
ClientProt.method3502(local64, arg4);
|
||||
return true;
|
||||
} else if (arg4 == 1) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@OriginalMember(owner = "client!hh", name = "a", descriptor = "(IBIIIIIIIIIZI)Z")
|
||||
public static boolean findPath1(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) boolean arg10, @OriginalArg(12) int arg11) {
|
||||
@Pc(3) int local3;
|
||||
@Pc(10) int local10;
|
||||
for (local3 = 0; local3 < 104; local3++) {
|
||||
for (local10 = 0; local10 < 104; local10++) {
|
||||
parents[local3][local10] = 0;
|
||||
costs[local3][local10] = 99999999;
|
||||
}
|
||||
}
|
||||
local3 = arg8;
|
||||
local10 = arg11;
|
||||
parents[arg8][arg11] = 99;
|
||||
costs[arg8][arg11] = 0;
|
||||
@Pc(53) byte local53 = 0;
|
||||
queueX[0] = arg8;
|
||||
@Pc(65) int local65 = local53 + 1;
|
||||
queueZ[0] = arg11;
|
||||
@Pc(69) int local69 = 0;
|
||||
@Pc(71) boolean local71 = false;
|
||||
@Pc(76) int[][] local76 = collisionMaps[Player.level].flags;
|
||||
@Pc(201) int local201;
|
||||
@Pc(242) int local242;
|
||||
label397: while (local69 != local65) {
|
||||
local3 = queueX[local69];
|
||||
local10 = queueZ[local69];
|
||||
local69 = local69 + 1 & 0xFFF;
|
||||
if (arg5 == local3 && local10 == arg0) {
|
||||
local71 = true;
|
||||
break;
|
||||
}
|
||||
if (arg6 != 0) {
|
||||
if ((arg6 < 5 || arg6 == 10) && collisionMaps[Player.level].isAtWall(arg0, local3, local10, arg5, arg6 - 1, arg4, arg3)) {
|
||||
local71 = true;
|
||||
break;
|
||||
}
|
||||
if (arg6 < 10 && collisionMaps[Player.level].isAtWallDecor(arg0, arg6 - 1, arg5, local10, arg4, arg3, local3)) {
|
||||
local71 = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (arg1 != 0 && arg9 != 0 && collisionMaps[Player.level].isInsideOrOutsideRect(arg5, local10, local3, arg4, arg1, arg7, arg0, arg9)) {
|
||||
local71 = true;
|
||||
break;
|
||||
}
|
||||
local201 = costs[local3][local10] + 1;
|
||||
if (local3 > 0 && parents[local3 - 1][local10] == 0 && (local76[local3 - 1][local10] & 0x12C010E) == 0 && (local76[local3 - 1][arg4 + local10 - 1] & 0x12C0138) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (arg4 - 1 <= local242) {
|
||||
queueX[local65] = local3 - 1;
|
||||
queueZ[local65] = local10;
|
||||
parents[local3 - 1][local10] = 2;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
costs[local3 - 1][local10] = local201;
|
||||
break;
|
||||
}
|
||||
if ((local76[local3 - 1][local10 + local242] & 0x12C013E) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local3 < 102 && parents[local3 + 1][local10] == 0 && (local76[local3 + arg4][local10] & 0x12C0183) == 0 && (local76[arg4 + local3][local10 + arg4 - 1] & 0x12C01E0) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (local242 >= arg4 - 1) {
|
||||
queueX[local65] = local3 + 1;
|
||||
queueZ[local65] = local10;
|
||||
parents[local3 + 1][local10] = 8;
|
||||
costs[local3 + 1][local10] = local201;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
break;
|
||||
}
|
||||
if ((local76[arg4 + local3][local10 + local242] & 0x12C01E3) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local10 > 0 && parents[local3][local10 - 1] == 0 && (local76[local3][local10 - 1] & 0x12C010E) == 0 && (local76[arg4 + local3 - 1][local10 - 1] & 0x12C0183) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (arg4 - 1 <= local242) {
|
||||
queueX[local65] = local3;
|
||||
queueZ[local65] = local10 - 1;
|
||||
parents[local3][local10 - 1] = 1;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
costs[local3][local10 - 1] = local201;
|
||||
break;
|
||||
}
|
||||
if ((local76[local3 + local242][local10 - 1] & 0x12C018F) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local10 < 102 && parents[local3][local10 + 1] == 0 && (local76[local3][local10 + arg4] & 0x12C0138) == 0 && (local76[local3 + arg4 - 1][arg4 + local10] & 0x12C01E0) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (local242 >= arg4 - 1) {
|
||||
queueX[local65] = local3;
|
||||
queueZ[local65] = local10 + 1;
|
||||
parents[local3][local10 + 1] = 4;
|
||||
costs[local3][local10 + 1] = local201;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
break;
|
||||
}
|
||||
if ((local76[local3 + local242][arg4 + local10] & 0x12C01F8) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local3 > 0 && local10 > 0 && parents[local3 - 1][local10 - 1] == 0 && (local76[local3 - 1][arg4 + local10 - 1 - 1] & 0x12C0138) == 0 && (local76[local3 - 1][local10 - 1] & 0x12C010E) == 0 && (local76[arg4 + local3 - 1 - 1][local10 - 1] & 0x12C0183) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (arg4 - 1 <= local242) {
|
||||
queueX[local65] = local3 - 1;
|
||||
queueZ[local65] = local10 - 1;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
parents[local3 - 1][local10 - 1] = 3;
|
||||
costs[local3 - 1][local10 - 1] = local201;
|
||||
break;
|
||||
}
|
||||
if ((local76[local3 - 1][local10 + local242 - 1] & 0x12C013E) != 0 || (local76[local242 + local3 - 1][local10 - 1] & 0x12C018F) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local3 < 102 && local10 > 0 && parents[local3 + 1][local10 - 1] == 0 && (local76[local3 + 1][local10 - 1] & 0x12C010E) == 0 && (local76[arg4 + local3][local10 - 1] & 0x12C0183) == 0 && (local76[local3 + arg4][local10 + arg4 - 1 - 1] & 0x12C01E0) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (local242 >= arg4 - 1) {
|
||||
queueX[local65] = local3 + 1;
|
||||
queueZ[local65] = local10 - 1;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
parents[local3 + 1][local10 - 1] = 9;
|
||||
costs[local3 + 1][local10 - 1] = local201;
|
||||
break;
|
||||
}
|
||||
if ((local76[local3 + arg4][local10 + local242 - 1] & 0x12C01E3) != 0 || (local76[local242 + local3 + 1][local10 - 1] & 0x12C018F) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local3 > 0 && local10 < 102 && parents[local3 - 1][local10 + 1] == 0 && (local76[local3 - 1][local10 + 1] & 0x12C010E) == 0 && (local76[local3 - 1][local10 + arg4] & 0x12C0138) == 0 && (local76[local3][local10 + arg4] & 0x12C01E0) == 0) {
|
||||
local242 = 1;
|
||||
while (true) {
|
||||
if (arg4 - 1 <= local242) {
|
||||
queueX[local65] = local3 - 1;
|
||||
queueZ[local65] = local10 + 1;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
parents[local3 - 1][local10 + 1] = 6;
|
||||
costs[local3 - 1][local10 + 1] = local201;
|
||||
break;
|
||||
}
|
||||
if ((local76[local3 - 1][local10 + local242 + 1] & 0x12C013E) != 0 || (local76[local242 + local3 - 1][arg4 + local10] & 0x12C01F8) != 0) {
|
||||
break;
|
||||
}
|
||||
local242++;
|
||||
}
|
||||
}
|
||||
if (local3 < 102 && local10 < 102 && parents[local3 + 1][local10 + 1] == 0 && (local76[local3 + 1][local10 + arg4] & 0x12C0138) == 0 && (local76[local3 + arg4][local10 + arg4] & 0x12C01E0) == 0 && (local76[arg4 + local3][local10 + 1] & 0x12C0183) == 0) {
|
||||
for (local242 = 1; local242 < arg4 - 1; local242++) {
|
||||
if ((local76[local242 + local3 + 1][local10 + arg4] & 0x12C01F8) != 0 || (local76[arg4 + local3][local242 + local10 + 1] & 0x12C01E3) != 0) {
|
||||
continue label397;
|
||||
}
|
||||
}
|
||||
queueX[local65] = local3 + 1;
|
||||
queueZ[local65] = local10 + 1;
|
||||
parents[local3 + 1][local10 + 1] = 12;
|
||||
costs[local3 + 1][local10 + 1] = local201;
|
||||
local65 = local65 + 1 & 0xFFF;
|
||||
}
|
||||
}
|
||||
anInt4364 = 0;
|
||||
if (!local71) {
|
||||
if (!arg10) {
|
||||
return false;
|
||||
}
|
||||
local201 = 1000;
|
||||
local242 = 100;
|
||||
for (@Pc(1247) int local1247 = arg5 - 10; local1247 <= arg5 + 10; local1247++) {
|
||||
for (@Pc(1257) int local1257 = arg0 - 10; local1257 <= arg0 + 10; local1257++) {
|
||||
if (local1247 >= 0 && local1257 >= 0 && local1247 < 104 && local1257 < 104 && costs[local1247][local1257] < 100) {
|
||||
@Pc(1295) int local1295 = 0;
|
||||
if (arg5 > local1247) {
|
||||
local1295 = arg5 - local1247;
|
||||
} else if (arg5 + arg1 - 1 < local1247) {
|
||||
local1295 = local1247 + 1 - arg1 - arg5;
|
||||
}
|
||||
@Pc(1334) int local1334 = 0;
|
||||
if (local1257 < arg0) {
|
||||
local1334 = arg0 - local1257;
|
||||
} else if (arg0 + arg9 - 1 < local1257) {
|
||||
local1334 = local1257 + 1 - arg0 - arg9;
|
||||
}
|
||||
@Pc(1377) int local1377 = local1295 * local1295 + local1334 * local1334;
|
||||
if (local1377 < local201 || local1377 == local201 && local242 > costs[local1247][local1257]) {
|
||||
local242 = costs[local1247][local1257];
|
||||
local3 = local1247;
|
||||
local201 = local1377;
|
||||
local10 = local1257;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (local201 == 1000) {
|
||||
return false;
|
||||
}
|
||||
if (local3 == arg8 && arg11 == local10) {
|
||||
return false;
|
||||
}
|
||||
anInt4364 = 1;
|
||||
}
|
||||
@Pc(1438) byte local1438 = 0;
|
||||
queueX[0] = local3;
|
||||
local69 = local1438 + 1;
|
||||
queueZ[0] = local10;
|
||||
local201 = local242 = parents[local3][local10];
|
||||
while (local3 != arg8 || arg11 != local10) {
|
||||
if (local242 != local201) {
|
||||
queueX[local69] = local3;
|
||||
local242 = local201;
|
||||
queueZ[local69++] = local10;
|
||||
}
|
||||
if ((local201 & 0x2) != 0) {
|
||||
local3++;
|
||||
} else if ((local201 & 0x8) != 0) {
|
||||
local3--;
|
||||
}
|
||||
if ((local201 & 0x1) != 0) {
|
||||
local10++;
|
||||
} else if ((local201 & 0x4) != 0) {
|
||||
local10--;
|
||||
}
|
||||
local201 = parents[local3][local10];
|
||||
}
|
||||
if (local69 > 0) {
|
||||
ClientProt.method3502(local69, arg2);
|
||||
return true;
|
||||
} else if (arg2 == 1) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@OriginalMember(owner = "client!t", name = "a", descriptor = "(BJII)Z")
|
||||
public static boolean findPathToLoc(@OriginalArg(1) long key, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) {
|
||||
@Pc(12) int shape = (int) key >> 14 & 0x1F;
|
||||
@Pc(24) int angle = (int) key >> 20 & 0x3;
|
||||
@Pc(31) int id = (int) (key >>> 32) & Integer.MAX_VALUE;
|
||||
if (shape == 10 || shape == 11 || shape == 22) {
|
||||
@Pc(46) LocType local46 = LocTypeList.get(id);
|
||||
@Pc(62) int local62;
|
||||
@Pc(59) int local59;
|
||||
if (angle == 0 || angle == 2) {
|
||||
local59 = local46.length;
|
||||
local62 = local46.width;
|
||||
} else {
|
||||
local59 = local46.width;
|
||||
local62 = local46.length;
|
||||
}
|
||||
@Pc(73) int local73 = local46.blockedSides;
|
||||
if (angle != 0) {
|
||||
local73 = (local73 << angle & 0xF) + (local73 >> 4 - angle);
|
||||
}
|
||||
findPath(PlayerList.self.movementQueueZ[0], 0, local59, true, local73, arg2, local62, 0, 2, arg1, PlayerList.self.movementQueueX[0]);
|
||||
} else {
|
||||
findPath(PlayerList.self.movementQueueZ[0], angle, 0, true, 0, arg2, 0, shape + 1, 2, arg1, PlayerList.self.movementQueueX[0]);
|
||||
}
|
||||
Cross.y = Mouse.clickY;
|
||||
Cross.milliseconds = 0;
|
||||
Cross.type = 2;
|
||||
Cross.x = Mouse.clickX;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue