CNavMesh::FindNavAreaOrLadderAlongRay
0x00707ca0 · 1953 bytes · __thiscall
_ZN8CNavMesh27FindNavAreaOrLadderAlongRayERK6VectorS2_PP8CNavAreaPP10CNavLadderS4_.part.86
Decompiled
undefined (6 params)
/* CNavMesh::FindNavAreaOrLadderAlongRay(Vector const&, Vector const&, CNavArea**, CNavLadder**,
CNavArea*) [clone .part.86] */
bool __thiscall
CNavMesh::FindNavAreaOrLadderAlongRay
(CNavMesh *this,Vector *param_1,Vector *param_2,CNavArea **param_3,CNavLadder **param_4,
CNavArea *param_5)
{
int *piVar1;
int iVar2;
Vector *pVVar3;
int in_EAX;
float *in_ECX;
float *in_EDX;
int iVar4;
longdouble lVar5;
float fVar6;
int local_f4;
int local_f0;
int local_e8;
int local_e4;
int local_e0;
float local_d0;
float local_c0;
float local_bc;
float local_b8;
undefined4 local_b4;
undefined4 local_b0;
undefined4 local_ac;
float local_a8;
float local_a4;
float local_a0;
float local_9c;
float local_98;
float local_94;
float local_90;
float local_8c;
float local_88;
float local_84;
float local_80;
float local_7c;
float local_78;
float local_74;
float local_70;
float local_6c;
float local_68;
float local_64;
float local_5c;
float local_58;
float local_54;
float local_4c;
float local_48;
float local_44;
undefined4 local_3c;
undefined4 local_38;
undefined4 local_34;
undefined4 local_2c;
undefined1 local_28;
undefined1 local_27;
local_2c = 0;
local_5c = *in_ECX - *in_EDX;
local_3c = 0;
local_38 = 0;
local_58 = in_ECX[1] - in_EDX[1];
local_34 = 0;
local_54 = in_ECX[2] - in_EDX[2];
local_28 = 1;
local_6c = *in_EDX + vec3_origin;
local_68 = in_EDX[1] + DAT_01053d4c;
local_27 = local_58 * local_58 + local_5c * local_5c + local_54 * local_54 != 0.0;
local_4c = -vec3_origin;
local_48 = -DAT_01053d4c;
local_64 = in_EDX[2] + DAT_01053d50;
local_44 = -DAT_01053d50;
*(undefined4 *)this = 0;
*(undefined4 *)param_1 = 0;
if (*(int *)(in_EAX + 0x51c) < 1) {
local_d0 = 1.0;
}
else {
iVar4 = 0;
local_d0 = 1.0;
do {
iVar2 = *(int *)(*(int *)(in_EAX + 0x510) + iVar4 * 4);
local_c0 = 0.0;
local_bc = 0.0;
local_b8 = 0.0;
local_b4 = 0;
local_b0 = 0;
local_ac = 0;
VectorVectors((Vector *)(iVar2 + 0x40),(Vector *)&local_c0,(Vector *)&local_b4);
fVar6 = *(float *)(iVar2 + 0x20) * 0.5;
local_c0 = local_c0 * fVar6;
local_bc = local_bc * fVar6;
local_b8 = fVar6 * local_b8;
local_a8 = *(float *)(iVar2 + 4) + local_c0;
local_a4 = *(float *)(iVar2 + 8) + local_bc;
local_a0 = local_b8 + *(float *)(iVar2 + 0xc);
local_94 = *(float *)(iVar2 + 0xc) - local_b8;
local_9c = *(float *)(iVar2 + 4) - local_c0;
local_98 = *(float *)(iVar2 + 8) - local_bc;
local_90 = local_c0 + *(float *)(iVar2 + 0x10);
local_84 = *(float *)(iVar2 + 0x10) - local_c0;
local_8c = local_bc + *(float *)(iVar2 + 0x14);
local_80 = *(float *)(iVar2 + 0x14) - local_bc;
local_88 = local_b8 + *(float *)(iVar2 + 0x18);
local_7c = *(float *)(iVar2 + 0x18) - local_b8;
lVar5 = (longdouble)
IntersectRayWithTriangle
((Ray_t *)&local_6c,(Vector *)&local_a8,(Vector *)&local_9c,
(Vector *)&local_84,false);
fVar6 = (float)lVar5;
if ((fVar6 < local_d0) && (0.0 < fVar6)) {
*(int *)param_1 = iVar2;
local_d0 = fVar6;
}
lVar5 = (longdouble)
IntersectRayWithTriangle
((Ray_t *)&local_6c,(Vector *)&local_a8,(Vector *)&local_84,
(Vector *)&local_90,false);
fVar6 = (float)lVar5;
if ((fVar6 < local_d0) && (0.0 < fVar6)) {
*(int *)param_1 = iVar2;
local_d0 = fVar6;
}
iVar4 = iVar4 + 1;
} while (iVar4 < *(int *)(in_EAX + 0x51c));
}
local_78 = *in_EDX;
local_70 = in_EDX[2];
local_74 = in_EDX[1];
fVar6 = *in_ECX;
local_84 = fVar6;
if ((local_78 <= fVar6) && (local_84 = local_78, local_78 < fVar6)) {
local_78 = fVar6;
}
fVar6 = in_ECX[1];
local_80 = fVar6;
if ((local_74 <= fVar6) && (local_80 = local_74, local_74 < fVar6)) {
local_74 = fVar6;
}
fVar6 = in_ECX[2];
local_7c = fVar6;
if ((local_70 <= fVar6) && (local_7c = local_70, local_70 < fVar6)) {
local_70 = fVar6;
}
fVar6 = 1.0 / *(float *)(in_EAX + 0x20);
iVar4 = (int)((local_84 - *(float *)(in_EAX + 0x2c)) * fVar6);
if (iVar4 < 0) {
local_f4 = 0;
}
else {
local_f4 = *(int *)(in_EAX + 0x24) + -1;
if (iVar4 < *(int *)(in_EAX + 0x24)) {
local_f4 = iVar4;
}
}
iVar4 = (int)((local_80 - *(float *)(in_EAX + 0x30)) * fVar6);
if (iVar4 < 0) {
local_e4 = 0;
}
else {
local_e4 = *(int *)(in_EAX + 0x28) + -1;
if (iVar4 < *(int *)(in_EAX + 0x28)) {
local_e4 = iVar4;
}
}
iVar4 = (int)((local_78 - *(float *)(in_EAX + 0x2c)) * fVar6);
if (iVar4 < 0) {
local_e8 = 0;
}
else {
local_e8 = *(int *)(in_EAX + 0x24) + -1;
if (iVar4 < *(int *)(in_EAX + 0x24)) {
local_e8 = iVar4;
}
}
iVar4 = (int)((local_74 - *(float *)(in_EAX + 0x30)) * fVar6);
if (iVar4 < 0) {
local_f0 = 0;
}
else {
local_f0 = *(int *)(in_EAX + 0x28) + -1;
if (iVar4 < *(int *)(in_EAX + 0x28)) {
local_f0 = iVar4;
}
}
for (; local_e4 <= local_f0; local_e4 = local_e4 + 1) {
if (local_f4 <= local_e8) {
local_e0 = local_f4;
do {
piVar1 = (int *)(*(int *)(in_EAX + 0xc) +
(local_e4 * *(int *)(in_EAX + 0x24) + local_e0) * 0x14);
if (0 < piVar1[3]) {
iVar4 = 0;
do {
pVVar3 = *(Vector **)(*piVar1 + iVar4 * 4);
if (pVVar3 != param_2) {
local_b4 = *(undefined4 *)(pVVar3 + 4);
local_b0 = *(undefined4 *)(pVVar3 + 8);
local_ac = *(undefined4 *)(pVVar3 + 0xc);
local_a8 = *(float *)(pVVar3 + 0x10);
local_a4 = *(float *)(pVVar3 + 0x14);
local_a0 = *(float *)(pVVar3 + 0x18);
local_94 = *(float *)(pVVar3 + 0x24);
local_88 = *(float *)(pVVar3 + 0x28);
local_9c = local_a8;
local_98 = (float)local_b0;
local_90 = (float)local_b4;
local_8c = local_a4;
lVar5 = (longdouble)
IntersectRayWithTriangle
((Ray_t *)&local_6c,(Vector *)&local_b4,(Vector *)&local_9c,
(Vector *)&local_a8,false);
fVar6 = (float)lVar5;
if ((fVar6 < local_d0) && (0.0 < fVar6)) {
*(Vector **)this = pVVar3;
local_d0 = fVar6;
}
lVar5 = (longdouble)
IntersectRayWithTriangle
((Ray_t *)&local_6c,(Vector *)&local_a8,(Vector *)&local_90,
(Vector *)&local_b4,false);
fVar6 = (float)lVar5;
if ((fVar6 < local_d0) && (0.0 < fVar6)) {
*(Vector **)this = pVVar3;
local_d0 = fVar6;
}
}
iVar4 = iVar4 + 1;
} while (iVar4 < piVar1[3]);
}
local_e0 = local_e0 + 1;
} while (local_e0 <= local_e8);
}
}
if (*(int *)this != 0) {
*(undefined4 *)param_1 = 0;
}
return local_d0 < 1.0;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.