server-re/decomp/DBCServer_Release_x64/full/functions/0x1400a2250.c

493 lines
16 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1400a2250 FUN_1400a2250
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
bool FUN_1400a2250(undefined8 *param_1,undefined8 param_2)
{
longlong *plVar1;
IUnknown *pIVar2;
undefined8 *puVar3;
IUnknown *This;
int iVar4;
HRESULT HVar5;
ULONG UVar6;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
longlong lVar12;
undefined8 *puVar13;
undefined8 uVar14;
IID *riid;
longlong *plVar15;
longlong lVar16;
ulonglong *puVar17;
bool bVar18;
undefined1 auStackY_288 [32];
char local_258 [4];
uint local_254;
undefined1 local_250 [24];
int local_238;
undefined4 uStack_234;
longlong *local_230;
IUnknown *local_228;
longlong *local_220;
undefined4 local_218;
undefined1 local_208 [24];
undefined1 local_1f0 [24];
undefined4 local_1d8;
undefined1 *local_1d0;
undefined4 local_1c8;
undefined8 local_1c0;
undefined1 *local_1b8;
undefined4 local_1a8;
undefined4 uStack_1a4;
longlong lStack_1a0;
undefined8 local_198;
undefined8 uStack_190;
undefined8 local_188;
undefined8 uStack_180;
undefined8 local_178;
undefined8 uStack_170;
undefined8 local_168;
undefined8 uStack_160;
undefined8 local_158;
int local_148;
int local_144;
int local_140;
int local_13c;
int local_138;
int local_134;
int local_130;
int local_12c;
int local_128;
int local_124;
int local_120;
undefined8 *local_118;
longlong local_110;
undefined1 local_108 [40];
undefined8 local_e0;
uint local_d8 [2];
undefined8 local_d0;
longlong lStack_c8;
undefined8 local_c0;
undefined8 uStack_b8;
undefined8 local_b0;
undefined8 uStack_a8;
undefined8 local_a0;
undefined8 uStack_98;
undefined4 local_90;
undefined4 uStack_8c;
undefined4 uStack_88;
undefined4 uStack_84;
undefined8 local_80;
longlong *local_78;
ulonglong local_70;
undefined1 local_60;
longlong local_58;
undefined4 local_50;
undefined8 local_48;
undefined8 local_40;
ulonglong local_38;
local_e0 = 0xfffffffffffffffe;
local_38 = DAT_1403463c0 ^ (ulonglong)auStackY_288;
local_230 = (longlong *)0x0;
local_118 = param_1;
iVar4 = FUN_140001990(&local_230);
if ((iVar4 < 0) && (iVar4 != -0x7fffbffe)) {
/* WARNING: Subroutine does not return */
FUN_140218220(iVar4);
}
local_228 = (IUnknown *)0x0;
local_220 = (longlong *)0x0;
Ordinal_8(local_208);
Ordinal_8(local_1f0);
pIVar2 = local_228;
if ((local_228 != (IUnknown *)0x0) && (local_228 = (IUnknown *)0x0, pIVar2 != (IUnknown *)0x0)) {
(*pIVar2->lpVtbl->Release)(pIVar2);
}
local_1b8 = &DAT_14029e010;
local_1d0 = &DAT_14029e010;
local_1c8 = 0;
local_1c0 = 0;
if (local_228 != (IUnknown *)0x0) {
(*local_228->lpVtbl->Release)(local_228);
}
HVar5 = CoCreateInstance((IID *)&DAT_14029e088,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_14029dfb0,
(LPVOID *)&local_238);
if (HVar5 < 0) {
LAB_1400a239c:
local_228 = (IUnknown *)0x0;
}
else {
HVar5 = OleRun((LPUNKNOWN)CONCAT44(uStack_234,local_238));
if (-1 < HVar5) {
HVar5 = (*(code *)**(undefined8 **)CONCAT44(uStack_234,local_238))
((undefined8 *)CONCAT44(uStack_234,local_238),&DAT_14029e078,&local_228);
}
(**(code **)(*(longlong *)CONCAT44(uStack_234,local_238) + 0x10))();
if (HVar5 < 0) goto LAB_1400a239c;
}
local_1d8 = 2;
bVar18 = true;
local_218 = 1;
local_258[0] = '\x01';
pIVar2 = *(IUnknown **)*param_1;
if (pIVar2 != (IUnknown *)0x0) {
local_254 = 0;
UVar6 = (*pIVar2->lpVtbl[0xb].AddRef)(pIVar2);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e018);
}
if (local_254 != 0) goto LAB_1400a252c;
}
iVar4 = FUN_1400a80c0(param_1);
if (iVar4 == 0) {
FUN_1400a8040(param_1,param_2,0);
pIVar2 = local_228;
if (local_228 != (IUnknown *)0x0) {
local_254 = 0;
UVar6 = (*local_228->lpVtbl[0x12].AddRef)(local_228);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038);
}
pIVar2 = local_228;
if (local_254 != 0) {
if (local_228 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
UVar6 = (*local_228->lpVtbl[10].Release)(local_228);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038);
}
}
if (local_228 != (IUnknown *)0x0) {
(*local_228->lpVtbl->Release)(local_228);
local_228 = (IUnknown *)0x0;
}
}
local_1c0 = 0;
local_1b8 = &DAT_14029e010;
local_1d0 = &DAT_14029e010;
local_1c8 = 0;
local_1d8 = 0;
Ordinal_9(local_1f0);
Ordinal_9(local_208);
if (local_220 != (longlong *)0x0) {
(**(code **)(*local_220 + 0x10))();
}
if (local_228 != (IUnknown *)0x0) {
(*local_228->lpVtbl->Release)(local_228);
}
if (local_230 != (longlong *)0x0) {
(**(code **)(*local_230 + 0x10))();
}
return false;
}
LAB_1400a252c:
puVar17 = &DAT_1402a81a0;
lVar16 = 0x28;
do {
lVar12 = lVar16 / 2;
if (puVar17[lVar12] < 0xb) {
puVar17 = puVar17 + lVar12 + 1;
lVar12 = lVar16 + (-1 - lVar12);
}
lVar16 = lVar12;
} while (0 < lVar12);
if (puVar17 == (ulonglong *)"dbo.up_read_realtimeevent") {
puVar17 = (ulonglong *)&UNK_1402a82d8;
}
local_70 = *puVar17;
local_78 = (longlong *)0x0;
local_60 = 0;
local_58 = 0;
local_50 = 0x3f800000;
local_48 = 0;
local_40 = 0;
puVar13 = (undefined8 *)FUN_140001f40(*param_1,&local_238);
FUN_140001700(&local_230,*puVar13,"dbo.up_get_duel_info_statistics");
if ((longlong *)CONCAT44(uStack_234,local_238) != (longlong *)0x0) {
(**(code **)(*(longlong *)CONCAT44(uStack_234,local_238) + 0x10))();
}
puVar13 = (undefined8 *)FUN_1400016c0(&local_230,&local_238);
This = local_228;
pIVar2 = (IUnknown *)*puVar13;
if (local_228 != pIVar2) {
local_228 = pIVar2;
if (pIVar2 != (IUnknown *)0x0) {
(*pIVar2->lpVtbl->AddRef)(pIVar2);
}
if (This != (IUnknown *)0x0) {
(*This->lpVtbl->Release)(This);
}
}
if ((longlong *)CONCAT44(uStack_234,local_238) != (longlong *)0x0) {
(**(code **)(*(longlong *)CONCAT44(uStack_234,local_238) + 0x10))();
}
pIVar2 = local_228;
if (local_228 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
local_254 = local_254 & 0xffff0000;
UVar6 = (*local_228->lpVtbl[6].Release)(local_228);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038);
}
if ((short)local_254 == -1) {
LAB_1400a2eaf:
FUN_14009f490(&local_78);
if (local_78 != (longlong *)0x0) {
plVar1 = local_78 + local_70;
for (plVar15 = local_78; plVar15 != plVar1; plVar15 = plVar15 + 1) {
puVar13 = (undefined8 *)*plVar15;
*plVar15 = 0;
while (puVar13 != (undefined8 *)0x0) {
puVar3 = (undefined8 *)*puVar13;
operator_delete(puVar13);
puVar13 = puVar3;
}
}
operator_delete(local_78);
local_78 = (longlong *)0x0;
}
pIVar2 = local_228;
if (local_228 != (IUnknown *)0x0) {
local_254 = 0;
UVar6 = (*local_228->lpVtbl[0x12].AddRef)(local_228);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038);
}
pIVar2 = local_228;
if (local_254 != 0) {
if (local_228 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
UVar6 = (*local_228->lpVtbl[10].Release)(local_228);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038);
}
}
if (local_228 != (IUnknown *)0x0) {
(*local_228->lpVtbl->Release)(local_228);
local_228 = (IUnknown *)0x0;
}
}
local_1c0 = 0;
local_1b8 = &DAT_14029e010;
local_1d0 = &DAT_14029e010;
local_1c8 = 0;
local_1d8 = 0;
Ordinal_9(local_1f0);
Ordinal_9(local_208);
if (local_220 != (longlong *)0x0) {
(**(code **)(*local_220 + 0x10))();
}
if (local_228 != (IUnknown *)0x0) {
(*local_228->lpVtbl->Release)(local_228);
}
if (local_230 != (longlong *)0x0) {
(**(code **)(*local_230 + 0x10))();
}
return bVar18;
}
LAB_1400a26a0:
do {
pIVar2 = local_228;
if (local_228 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
local_254 = local_254 & 0xffff0000;
UVar6 = (*local_228->lpVtbl[6].Release)(local_228);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038);
}
if ((short)local_254 == -1) {
bVar18 = local_258[0] != '\0';
goto LAB_1400a2eaf;
}
local_1a8 = 0;
lStack_1a0 = 0;
local_198 = 0;
uStack_190 = 0;
local_188 = 0;
uStack_180 = 0;
local_178 = 0;
uStack_170 = 0;
local_168 = 0;
uStack_160 = 0;
local_158 = 0;
uVar14 = FUN_140002290(&local_228,local_108,"char_class",local_258);
FUN_140199590(uVar14);
local_254 = FUN_140063af0(uVar14);
Ordinal_9(local_108);
uVar14 = FUN_140002290(&local_228,local_250,"duel_exp",local_258);
FUN_140199590(uVar14);
lStack_1a0 = FUN_140199670(uVar14);
local_110 = lStack_1a0;
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"duel_point",local_258);
FUN_140199590(uVar14);
local_130 = FUN_140063af0(uVar14);
local_198 = CONCAT44(local_198._4_4_,local_130);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"duel_disconnect",local_258);
FUN_140199590(uVar14);
local_144 = FUN_140063af0(uVar14);
local_198 = CONCAT44(local_144,(undefined4)local_198);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"total_win",local_258);
FUN_140199590(uVar14);
local_13c = FUN_140063af0(uVar14);
uStack_190 = CONCAT44(uStack_190._4_4_,local_13c);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"total_lose",local_258);
FUN_140199590(uVar14);
local_120 = FUN_140063af0(uVar14);
uStack_190 = CONCAT44(local_120,(undefined4)uStack_190);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"pvp_win",local_258);
FUN_140199590(uVar14);
local_124 = FUN_140063af0(uVar14);
local_188 = CONCAT44(local_188._4_4_,local_124);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"pvp_lose",local_258);
FUN_140199590(uVar14);
local_140 = FUN_140063af0(uVar14);
local_188 = CONCAT44(local_140,(undefined4)local_188);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"team_win",local_258);
FUN_140199590(uVar14);
local_128 = FUN_140063af0(uVar14);
uStack_180 = CONCAT44(uStack_180._4_4_,local_128);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"team_lose",local_258);
FUN_140199590(uVar14);
local_12c = FUN_140063af0(uVar14);
uStack_180 = CONCAT44(local_12c,(undefined4)uStack_180);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"leader_win",local_258);
FUN_140199590(uVar14);
local_138 = FUN_140063af0(uVar14);
local_178 = CONCAT44(local_178._4_4_,local_138);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"leader_lose",local_258);
FUN_140199590(uVar14);
local_134 = FUN_140063af0(uVar14);
local_178 = CONCAT44(local_134,(undefined4)local_178);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"tag_win",local_258);
FUN_140199590(uVar14);
local_148 = FUN_140063af0(uVar14);
uStack_170 = CONCAT44(uStack_170._4_4_,local_148);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"tag_lose",local_258);
FUN_140199590(uVar14);
local_238 = FUN_140063af0(uVar14);
uStack_170 = CONCAT44(local_238,(undefined4)uStack_170);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"death_win",local_258);
FUN_140199590(uVar14);
iVar4 = FUN_140063af0(uVar14);
local_168 = CONCAT44(local_168._4_4_,iVar4);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"death_lose",local_258);
FUN_140199590(uVar14);
iVar7 = FUN_140063af0(uVar14);
local_168 = CONCAT44(iVar7,(undefined4)local_168);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"ladder_win",local_258);
FUN_140199590(uVar14);
iVar8 = FUN_140063af0(uVar14);
uStack_160 = CONCAT44(uStack_160._4_4_,iVar8);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"ladder_lose",local_258);
FUN_140199590(uVar14);
iVar9 = FUN_140063af0(uVar14);
uStack_160 = CONCAT44(iVar9,(undefined4)uStack_160);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"duel_ladder_point",local_258);
FUN_140199590(uVar14);
iVar10 = FUN_140063af0(uVar14);
local_158 = CONCAT44(local_158._4_4_,iVar10);
Ordinal_9(local_250);
uVar14 = FUN_140002290(&local_228,local_250,"duel_ladder_exp",local_258);
FUN_140199590(uVar14);
iVar11 = FUN_140063af0(uVar14);
local_158 = CONCAT44(iVar11,(undefined4)local_158);
Ordinal_9(local_250);
pIVar2 = local_228;
if (local_58 != 0) {
riid = (IID *)((ulonglong)(longlong)(int)local_254 % local_70);
for (puVar13 = (undefined8 *)local_78[(longlong)riid]; puVar13 != (undefined8 *)0x0;
puVar13 = (undefined8 *)*puVar13) {
if (local_254 == *(uint *)(puVar13 + 1)) {
if (puVar13 != (undefined8 *)0x0) {
*(int *)(puVar13 + 2) = *(int *)(puVar13 + 2) + 1;
puVar13[3] = puVar13[3] + local_110;
*(int *)(puVar13 + 4) = *(int *)(puVar13 + 4) + local_130;
*(int *)((longlong)puVar13 + 0x24) = *(int *)((longlong)puVar13 + 0x24) + local_144;
*(int *)(puVar13 + 5) = *(int *)(puVar13 + 5) + local_13c;
*(int *)((longlong)puVar13 + 0x2c) = *(int *)((longlong)puVar13 + 0x2c) + local_120;
*(int *)(puVar13 + 6) = *(int *)(puVar13 + 6) + local_124;
*(int *)((longlong)puVar13 + 0x34) = *(int *)((longlong)puVar13 + 0x34) + local_140;
*(int *)(puVar13 + 7) = *(int *)(puVar13 + 7) + local_128;
*(int *)((longlong)puVar13 + 0x3c) = *(int *)((longlong)puVar13 + 0x3c) + local_12c;
*(int *)(puVar13 + 8) = *(int *)(puVar13 + 8) + local_138;
*(int *)((longlong)puVar13 + 0x44) = *(int *)((longlong)puVar13 + 0x44) + local_134;
*(int *)(puVar13 + 9) = *(int *)(puVar13 + 9) + local_148;
*(int *)((longlong)puVar13 + 0x4c) = *(int *)((longlong)puVar13 + 0x4c) + local_238;
*(int *)(puVar13 + 10) = *(int *)(puVar13 + 10) + iVar4;
*(int *)((longlong)puVar13 + 0x54) = *(int *)((longlong)puVar13 + 0x54) + iVar7;
*(int *)(puVar13 + 0xb) = *(int *)(puVar13 + 0xb) + iVar8;
*(int *)((longlong)puVar13 + 0x5c) = *(int *)((longlong)puVar13 + 0x5c) + iVar9;
*(int *)(puVar13 + 0xc) = *(int *)(puVar13 + 0xc) + iVar10;
*(int *)((longlong)puVar13 + 100) = *(int *)((longlong)puVar13 + 100) + iVar11;
if (local_228 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
HVar5 = (*local_228->lpVtbl[0xc].QueryInterface)
(local_228,riid,(void **)(longlong)(int)local_254);
if (HVar5 < 0) {
_com_issue_errorex(HVar5,pIVar2,(_GUID *)&DAT_14029e038);
}
goto LAB_1400a26a0;
}
break;
}
}
}
local_1a8 = 1;
local_d8[0] = local_254;
local_d0 = CONCAT44(uStack_1a4,1);
lStack_c8 = lStack_1a0;
local_c0 = local_198;
uStack_b8 = uStack_190;
local_b0 = local_188;
uStack_a8 = uStack_180;
local_a0 = local_178;
uStack_98 = uStack_170;
local_90 = (undefined4)local_168;
uStack_8c = local_168._4_4_;
uStack_88 = (undefined4)uStack_160;
uStack_84 = uStack_160._4_4_;
local_80 = local_158;
if (local_58 == 0) {
FUN_1400a5420(&local_78,local_108,local_d8);
}
else {
FUN_1400a52f0(&local_78,local_250,local_d8,local_d8);
}
} while( true );
}