L L4D2node

CFuncMoveLinear::MoveTo

0x006c1e20 · 561 bytes · __cdecl

_ZN15CFuncMoveLinear6MoveToE6Vectorf

Decompiled

undefined (2 params)

/* CFuncMoveLinear::MoveTo(Vector, float) */

void CFuncMoveLinear::MoveTo(int *param_1)

{
  int *piVar1;
  code *pcVar2;
  int iVar3;
  char *pcVar4;
  int *piVar5;
  float in_stack_00000014;
  undefined1 local_94 [20];
  undefined **local_80 [8];
  undefined4 local_60;
  undefined1 *local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined1 local_3c;
  undefined1 local_3b;
  undefined1 local_3a;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined2 local_20;
  
  if (in_stack_00000014 != 0.0) {
    iVar3 = param_1[0x131];
    piVar5 = (int *)&stack0xffffff54;
    if (iVar3 != 0) {
      if (iVar3 == param_1[0x133]) {
        pcVar4 = "";
        if ((char *)param_1[0x132] != (char *)0x0) {
          pcVar4 = (char *)param_1[0x132];
        }
        if (param_1[0xc] == 0) {
          iVar3 = 0;
        }
        else {
          iVar3 = param_1[0xc] - *(int *)(gpGlobals + 0x58) >> 4;
        }
        CBaseEntity::StopSound(iVar3,4,pcVar4);
        piVar5 = (int *)&stack0xffffff54;
      }
      else {
        param_1[0x133] = iVar3;
        (**(code **)(*param_1 + 0x28c))();
        CRecipientFilter::CRecipientFilter((CRecipientFilter *)local_80);
        local_80[0] = &PTR__CPASFilter_00bfaf28;
                    /* try { // try from 006c1e8f to 006c1e93 has its CatchHandler @ 006c2064 */
        CRecipientFilter::AddRecipientsByPAS((CRecipientFilter *)local_80,(Vector *)&local_60);
        local_80[0] = &PTR__CPASAttenuationFilter_00c08ec8;
                    /* try { // try from 006c1ea4 to 006c1ec0 has its CatchHandler @ 006c2076 */
        (**(code **)(*param_1 + 0x28c))();
        CPASAttenuationFilter::Filter((CPASAttenuationFilter *)local_80,(Vector *)&local_60,0.8);
        local_3c = 1;
        local_20 = 0xffff;
        local_58 = 0x3f800000;
        local_50 = 0;
        local_4c = 100;
        local_5c = &DAT_00d539c2;
        if ((undefined1 *)param_1[0x131] != (undefined1 *)0x0) {
          local_5c = (undefined1 *)param_1[0x131];
        }
        local_48 = 0;
        local_44 = 0;
        local_40 = 0;
        local_3b = 0;
        local_3a = 0;
        local_38 = 0xffffffff;
        local_34 = 0;
        local_30 = 0;
        local_2c = 0;
        local_28 = 0;
        local_24 = 0;
        local_60 = 4;
        local_54 = 0x4b;
        if (param_1[0xc] == 0) {
          iVar3 = 0;
        }
        else {
          iVar3 = param_1[0xc] - *(int *)(gpGlobals + 0x58) >> 4;
        }
                    /* try { // try from 006c1f6d to 006c1f71 has its CatchHandler @ 006c208f */
        CBaseEntity::EmitSound((IRecipientFilter *)local_80,iVar3,(EmitSound_t *)&local_60);
        local_28 = 0;
        CUtlMemory<Vector,int>::Purge((CUtlMemory<Vector,int> *)&local_34);
        local_24 = local_34;
        CUtlMemory<Vector,int>::Purge((CUtlMemory<Vector,int> *)&local_34);
        local_80[0] = &PTR__CPASFilter_00bfaf28;
        CRecipientFilter::~CRecipientFilter((CRecipientFilter *)local_80);
        piVar5 = (int *)&stack0xffffff4c;
      }
    }
    *piVar5 = (int)param_1;
    piVar5[1] = (int)&stack0x00000008;
    piVar5[2] = (int)in_stack_00000014;
    piVar5[-1] = 0x6c1fbb;
    CBaseToggle::LinearMove((CBaseToggle *)*piVar5,(Vector *)piVar5[1],(float)piVar5[2]);
    piVar1 = (int *)param_1[0x137];
    if (piVar1 != (int *)0x0) {
      iVar3 = *piVar1;
      *piVar5 = (int)piVar1;
      pcVar2 = *(code **)(iVar3 + 0x18);
      piVar5[-1] = 0x6c1fcd;
      (*pcVar2)();
    }
    piVar5[5] = 0;
    piVar5[4] = 0;
    piVar5[2] = 0;
    piVar5[3] = 0;
    piVar5[1] = (int)param_1;
    *piVar5 = (int)local_94;
    piVar5[-1] = 0x6c1fff;
    CBaseEntity::ThinkSet((_func_void *)*piVar5,(float)piVar5[1],(char *)piVar5[2]);
  }
  return;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)