CUtlVector<CDirectorItemManager::ItemRestoreInfo,CUtlMemory<CDirectorItemManager::ItemRestoreInfo,int>>::CopyArray
0x008ab450 · 396 bytes · __thiscall
_ZN10CUtlVectorIN20CDirectorItemManager15ItemRestoreInfoE10CUtlMemoryIS1_iEE9CopyArrayEPKS1_i
Decompiled
undefined (3 params)
/* CUtlVector<CDirectorItemManager::ItemRestoreInfo,
CUtlMemory<CDirectorItemManager::ItemRestoreInfo, int>
>::CopyArray(CDirectorItemManager::ItemRestoreInfo const*, int) */
void __thiscall
CUtlVector<CDirectorItemManager::ItemRestoreInfo,CUtlMemory<CDirectorItemManager::ItemRestoreInfo,int>>
::CopyArray(CUtlVector<CDirectorItemManager::ItemRestoreInfo,CUtlMemory<CDirectorItemManager::ItemRestoreInfo,int>>
*this,ItemRestoreInfo *param_1,int param_2)
{
int iVar1;
undefined4 *puVar2;
int iVar3;
int iVar4;
undefined4 *puVar5;
int iVar6;
ItemRestoreInfo *pIVar7;
ItemRestoreInfo *pIVar8;
int local_24;
RemoveAll(this);
iVar3 = *(int *)(this + 0xc);
if (param_2 != 0) {
GrowVector(this,param_2);
ShiftElementsRight(this,iVar3,param_2);
if (0 < param_2) {
iVar3 = iVar3 * 0x1c;
iVar6 = 0;
iVar1 = *(int *)this;
do {
iVar4 = iVar1 + iVar3;
if (iVar4 != 0) {
*(undefined4 *)(iVar4 + 8) = 0;
*(undefined4 *)(iVar4 + 0xc) = 0;
*(undefined4 *)(iVar4 + 0x10) = 0;
*(undefined4 *)(iVar4 + 0x14) = 0;
*(undefined4 *)(iVar4 + 0x18) = 0;
iVar1 = *(int *)this;
}
iVar6 = iVar6 + 1;
iVar3 = iVar3 + 0x1c;
} while (iVar6 != param_2);
local_24 = 0;
pIVar7 = param_1;
while( true ) {
pIVar8 = pIVar7 + (iVar1 - (int)param_1);
*(undefined4 *)pIVar8 = *(undefined4 *)pIVar7;
*(undefined4 *)(pIVar8 + 4) = *(undefined4 *)(pIVar7 + 4);
iVar3 = *(int *)(pIVar7 + 0x14);
*(undefined4 *)(pIVar8 + 0x14) = 0;
if (iVar3 != 0) {
CUtlVector<CDirectorItemManager::ItemRestoreInfoInstance,CUtlMemory<CDirectorItemManager::ItemRestoreInfoInstance,int>>
::GrowVector((CUtlVector<CDirectorItemManager::ItemRestoreInfoInstance,CUtlMemory<CDirectorItemManager::ItemRestoreInfoInstance,int>>
*)(pIVar8 + 8),iVar3);
CUtlVector<CDirectorItemManager::ItemRestoreInfoInstance,CUtlMemory<CDirectorItemManager::ItemRestoreInfoInstance,int>>
::ShiftElementsRight
((CUtlVector<CDirectorItemManager::ItemRestoreInfoInstance,CUtlMemory<CDirectorItemManager::ItemRestoreInfoInstance,int>>
*)(pIVar8 + 8),0,iVar3);
if (0 < iVar3) {
iVar1 = 0;
do {
iVar6 = iVar1 + 1;
puVar5 = (undefined4 *)(*(int *)(pIVar7 + 8) + iVar1 * 0x24);
puVar2 = (undefined4 *)(iVar1 * 0x24 + *(int *)(pIVar8 + 8));
*puVar2 = *puVar5;
puVar2[1] = puVar5[1];
puVar2[2] = puVar5[2];
puVar2[3] = puVar5[3];
puVar2[4] = puVar5[4];
puVar2[5] = puVar5[5];
puVar2[6] = puVar5[6];
puVar2[7] = puVar5[7];
puVar2[8] = puVar5[8];
iVar1 = iVar6;
} while (iVar6 != iVar3);
}
}
local_24 = local_24 + 1;
pIVar7 = pIVar7 + 0x1c;
if (local_24 == param_2) break;
iVar1 = *(int *)this;
}
}
}
return;
}
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.