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

533 lines
18 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1400d6500 FUN_1400d6500
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_1400d6500(undefined8 *param_1,undefined8 *param_2)
{
undefined4 *puVar1;
short sVar2;
IUnknown *pIVar3;
undefined6 uVar4;
IUnknown *This;
undefined1 uVar5;
ULONG UVar6;
int iVar7;
HRESULT HVar8;
undefined4 uVar9;
undefined8 *puVar10;
wchar_t *pwVar11;
longlong lVar12;
longlong *plVar13;
undefined8 uVar14;
undefined8 uVar15;
char *riid;
wchar_t *pwVar16;
char *ppvObject;
short sVar17;
wchar_t *pwVar18;
uint uVar19;
undefined1 auStackY_328 [32];
undefined1 local_2e8 [4];
uint local_2e4;
short local_2e0;
short local_2dc;
longlong *local_2d8;
undefined8 local_2d0;
undefined4 local_2c8;
undefined2 uStack_2c4;
undefined2 uStack_2c2;
ushort local_2c0;
int local_2b8;
undefined8 *local_2b0;
wchar_t *local_2a8;
wchar_t *local_2a0;
LPUNKNOWN local_298;
wchar_t *local_290;
longlong *local_288;
undefined8 *local_280;
IUnknown *local_278;
longlong *local_270;
undefined4 local_268;
undefined1 local_258 [24];
undefined1 local_240 [24];
undefined4 local_228;
undefined1 *local_220;
undefined4 local_218;
undefined8 local_210;
undefined1 *local_208;
undefined4 local_1f8;
undefined4 local_1f4;
undefined4 local_1f0;
undefined4 local_1ec;
longlong *local_1e8;
undefined8 local_1e0;
undefined1 local_1d8;
wchar_t *local_1d0;
undefined8 local_1c8;
undefined1 local_1c0;
undefined8 local_1b8;
undefined1 local_1b0;
wchar_t *local_1a8;
longlong *local_1a0;
undefined8 local_198;
undefined1 local_190;
wchar_t local_188 [12];
longlong local_170 [3];
undefined1 local_158 [24];
undefined8 local_140;
undefined1 local_138 [24];
undefined1 local_120 [24];
undefined1 local_108 [24];
IID local_f0;
undefined1 local_d8 [24];
undefined1 local_c0 [24];
undefined1 local_a8 [32];
undefined4 local_88;
undefined4 uStack_84;
undefined4 uStack_80;
undefined4 uStack_7c;
undefined4 local_78;
undefined4 uStack_74;
undefined4 uStack_70;
undefined4 uStack_6c;
undefined4 uStack_68;
undefined8 uStack_64;
undefined8 uStack_5c;
undefined8 uStack_54;
undefined4 local_4c;
undefined1 uStack_48;
ulonglong local_38;
local_140 = 0xfffffffffffffffe;
local_38 = DAT_1403463c0 ^ (ulonglong)auStackY_328;
local_2c8 = *(undefined4 *)(param_2 + 1);
local_2d0._4_4_ = (undefined4)((ulonglong)*param_2 >> 0x20);
local_2d0._0_4_ = CONCAT22(0x2449,(short)*param_2);
uStack_2c4 = 1;
uStack_2c2 = *(undefined2 *)(param_2 + 2);
pwVar18 = (wchar_t *)0x0;
sVar17 = 0;
pwVar16 = (wchar_t *)0x0;
local_2c0 = 0;
uVar19 = 0x12;
local_2e4 = 0x12;
pIVar3 = *(IUnknown **)*param_1;
local_2b0 = param_1;
local_280 = param_2;
if (pIVar3 == (IUnknown *)0x0) {
LAB_1400d65db:
iVar7 = FUN_1400a80c0(param_1);
if (iVar7 == 0) {
FUN_1400a8040(param_1,param_2,0);
return 0;
}
}
else {
local_2b8 = 0;
UVar6 = (*pIVar3->lpVtbl[0xb].AddRef)(pIVar3);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029e018);
}
if (local_2b8 == 0) goto LAB_1400d65db;
}
local_2d8 = (longlong *)0x0;
iVar7 = FUN_140001990(&local_2d8);
if ((iVar7 < 0) && (iVar7 != -0x7fffbffe)) {
/* WARNING: Subroutine does not return */
FUN_140218220(iVar7);
}
local_278 = (IUnknown *)0x0;
local_270 = (longlong *)0x0;
Ordinal_8(local_258);
Ordinal_8(local_240);
pIVar3 = local_278;
if ((local_278 != (IUnknown *)0x0) && (local_278 = (IUnknown *)0x0, pIVar3 != (IUnknown *)0x0)) {
(*pIVar3->lpVtbl->Release)(pIVar3);
}
local_208 = &DAT_14029e010;
local_220 = &DAT_14029e010;
local_218 = 0;
local_210 = 0;
if (local_278 != (IUnknown *)0x0) {
(*local_278->lpVtbl->Release)(local_278);
}
HVar8 = CoCreateInstance((IID *)&DAT_14029e088,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_14029dfb0,
&local_298);
if (-1 < HVar8) {
HVar8 = OleRun(local_298);
if (-1 < HVar8) {
HVar8 = (*local_298->lpVtbl->QueryInterface)(local_298,(IID *)&DAT_14029e078,&local_278);
}
(*local_298->lpVtbl->Release)(local_298);
if (-1 < HVar8) goto LAB_1400d6726;
}
local_278 = (IUnknown *)0x0;
LAB_1400d6726:
local_228 = 2;
local_268 = 1;
local_2e8[0] = 1;
puVar10 = (undefined8 *)FUN_140001f40(*param_1,&local_1a0);
FUN_140001700(&local_2d8,*puVar10,"dbo.up_read_reward");
if (local_1a0 != (longlong *)0x0) {
(**(code **)(*local_1a0 + 0x10))();
}
local_2a8 = local_188;
sVar2 = *(short *)(param_2 + 2);
Ordinal_8(local_188);
FUN_140063620(local_188,(int)sVar2);
pwVar11 = operator_new(0x18);
local_1d0 = pwVar18;
local_290 = pwVar11;
if (pwVar11 != (wchar_t *)0x0) {
pwVar11[4] = L'\0';
pwVar11[5] = L'\0';
pwVar11[6] = L'\0';
pwVar11[7] = L'\0';
pwVar11[8] = L'\x01';
pwVar11[9] = L'\0';
lVar12 = FUN_1402182d0(&DAT_1402aa2b4);
*(longlong *)pwVar11 = lVar12;
local_1d0 = pwVar11;
}
if (local_1d0 == (wchar_t *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x8007000e);
}
pwVar11 = (wchar_t *)FUN_140001870(&local_2d8,&local_288,&local_1d0,3);
local_2a8 = pwVar11;
if (local_2d8 == (longlong *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
puVar10 = (undefined8 *)FUN_140001650(local_2d8,&local_1e8);
pIVar3 = (IUnknown *)*puVar10;
if (pIVar3 != (IUnknown *)0x0) {
UVar6 = (*pIVar3->lpVtbl[3].AddRef)(pIVar3);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029dfc0);
}
if (local_1e8 != (longlong *)0x0) {
(**(code **)(*local_1e8 + 0x10))();
}
if (*(longlong **)pwVar11 != (longlong *)0x0) {
(**(code **)(**(longlong **)pwVar11 + 0x10))();
}
local_288 = local_170;
sVar2 = *(short *)((longlong)param_2 + 0xe);
Ordinal_8(local_170);
FUN_140063620(local_170,(int)sVar2);
pwVar11 = operator_new(0x18);
local_1a8 = pwVar18;
local_2a8 = pwVar11;
if (pwVar11 != (wchar_t *)0x0) {
pwVar11[4] = L'\0';
pwVar11[5] = L'\0';
pwVar11[6] = L'\0';
pwVar11[7] = L'\0';
pwVar11[8] = L'\x01';
pwVar11[9] = L'\0';
lVar12 = FUN_1402182d0("grade");
*(longlong *)pwVar11 = lVar12;
local_1a8 = pwVar11;
}
if (local_1a8 == (wchar_t *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x8007000e);
}
plVar13 = (longlong *)FUN_140001870(&local_2d8,local_158,&local_1a8,3);
local_288 = plVar13;
if (local_2d8 == (longlong *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
puVar10 = (undefined8 *)FUN_140001650(local_2d8,&local_290);
pIVar3 = (IUnknown *)*puVar10;
if (pIVar3 != (IUnknown *)0x0) {
UVar6 = (*pIVar3->lpVtbl[3].AddRef)(pIVar3);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029dfc0);
}
if (local_290 != (wchar_t *)0x0) {
(**(code **)(*(longlong *)local_290 + 0x10))();
}
if ((longlong *)*plVar13 != (longlong *)0x0) {
(**(code **)(*(longlong *)*plVar13 + 0x10))();
}
puVar10 = (undefined8 *)FUN_1400016c0(&local_2d8,&local_2a8);
This = local_278;
pIVar3 = (IUnknown *)*puVar10;
if (local_278 != pIVar3) {
local_278 = pIVar3;
if (pIVar3 != (IUnknown *)0x0) {
(*pIVar3->lpVtbl->AddRef)(pIVar3);
}
if (This != (IUnknown *)0x0) {
(*This->lpVtbl->Release)(This);
}
}
if (local_2a8 != (wchar_t *)0x0) {
(**(code **)(*(longlong *)local_2a8 + 0x10))();
}
pIVar3 = local_278;
if (local_278 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
local_2dc = 0;
UVar6 = (*local_278->lpVtbl[6].Release)(local_278);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029e038);
}
if (local_2dc != -1) {
while( true ) {
pIVar3 = local_278;
sVar17 = (short)pwVar16;
if (local_278 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
local_2e0 = 0;
UVar6 = (*local_278->lpVtbl[6].Release)(local_278);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029e038);
}
if (local_2e0 == -1) break;
local_88 = 0;
uStack_84 = 0;
uStack_80 = 0;
uStack_7c = 0;
local_78 = 0;
uStack_54 = 0;
local_4c = 0;
uStack_48 = 0;
uStack_74 = 0;
uStack_70 = 0;
uStack_6c = 0;
uStack_68 = 0;
uStack_64 = 0;
uStack_5c = 0;
uVar14 = FUN_140002290(&local_278,local_a8,"character_name",local_2e8);
FUN_140063de0(uVar14,&local_2a0);
FUN_14016d8c0();
pwVar16 = (wchar_t *)PTR_DAT_1403440a0;
if (PTR_DAT_1403440a0 == (undefined *)0x0) {
pwVar16 = pwVar18;
}
if (local_2a0 != (wchar_t *)PTR_DAT_1403440a0) {
uVar14 = FUN_14016d8c0();
local_190 = 0;
local_198 = uVar14;
FUN_14016db50(uVar14);
local_190 = 1;
if (((pwVar16 != (wchar_t *)0x0) && (pwVar16 != (wchar_t *)PTR_DAT_1403440a0)) &&
(pwVar16 + -4 != (wchar_t *)0x0)) {
uVar15 = FUN_14016d8c0();
local_1b0 = 0;
local_1b8 = uVar15;
FUN_14016db50(uVar15);
local_1b0 = 1;
pwVar11 = pwVar16 + -2;
*(int *)pwVar11 = *(int *)pwVar11 + -1;
if (*(int *)pwVar11 == 0) {
FUN_14016d970(pwVar16 + -4);
}
FUN_14016dbe0(uVar15);
local_1b0 = 0;
}
pwVar16 = local_2a0;
if (((local_2a0 != (wchar_t *)PTR_DAT_1403440a0) && (local_2a0 != (wchar_t *)0x0)) &&
(local_2a0 != (wchar_t *)0x8)) {
*(int *)(local_2a0 + -2) = *(int *)(local_2a0 + -2) + 1;
}
FUN_14016dbe0(uVar14);
local_190 = 0;
}
pwVar11 = pwVar16;
if (pwVar16 == (wchar_t *)0x0) {
pwVar11 = (wchar_t *)PTR_DAT_1403440a0;
}
wcsncpy((wchar_t *)&uStack_74,pwVar11,0xf);
if (((pwVar16 != (wchar_t *)0x0) && (pwVar16 != (wchar_t *)PTR_DAT_1403440a0)) &&
(pwVar16 + -4 != (wchar_t *)0x0)) {
uVar14 = FUN_14016d8c0();
local_1d8 = 0;
local_1e0 = uVar14;
FUN_14016db50(uVar14);
local_1d8 = 1;
pwVar11 = pwVar16 + -2;
*(int *)pwVar11 = *(int *)pwVar11 + -1;
if (*(int *)pwVar11 == 0) {
FUN_14016d970(pwVar16 + -4);
}
FUN_14016dbe0(uVar14);
local_1d8 = 0;
}
pwVar16 = local_2a0;
if (((local_2a0 != (wchar_t *)0x0) && (local_2a0 != (wchar_t *)PTR_DAT_1403440a0)) &&
(pwVar11 = local_2a0 + -4, pwVar11 != (wchar_t *)0x0)) {
uVar14 = FUN_14016d8c0();
local_1c0 = 0;
local_1c8 = uVar14;
FUN_14016db50(uVar14);
local_1c0 = 1;
pwVar16 = pwVar16 + -2;
*(int *)pwVar16 = *(int *)pwVar16 + -1;
if (*(int *)pwVar16 == 0) {
FUN_14016d970(pwVar11);
}
FUN_14016dbe0(uVar14);
local_1c0 = 0;
}
local_2a0 = (wchar_t *)PTR_DAT_1403440a0;
Ordinal_9(local_a8);
uStack_5c = uStack_5c & 0xffffffffffff;
uVar14 = FUN_140002290(&local_278,local_c0,"reward_type",local_2e8);
FUN_140199590(uVar14);
local_88 = FUN_140063af0(uVar14);
Ordinal_9(local_c0);
uVar14 = FUN_140002290(&local_278,local_108,"character_id",local_2e8);
FUN_140063b70(uVar14,&local_1f8);
uStack_84 = local_1f8;
uStack_80 = local_1f4;
uStack_7c = local_1f0;
local_78 = local_1ec;
Ordinal_9(local_108);
uVar14 = FUN_140002290(&local_278,local_138,"reward_code",local_2e8);
FUN_140199590(uVar14);
uVar9 = FUN_140063af0(uVar14);
uStack_54 = CONCAT44(uStack_54._4_4_,uVar9);
Ordinal_9(local_138);
uVar14 = FUN_140002290(&local_278,local_d8,"reward_count",local_2e8);
FUN_140199590(uVar14);
uVar9 = FUN_140063af0(uVar14);
uStack_54 = CONCAT44(uVar9,(undefined4)uStack_54);
Ordinal_9(local_d8);
uVar14 = FUN_140002290(&local_278,local_120,"reward_grade",local_2e8);
FUN_140199590(uVar14);
uVar9 = FUN_140063af0(uVar14);
local_4c._1_3_ = (undefined3)uVar9;
uStack_48 = (undefined1)((uint)uVar9 >> 0x18);
Ordinal_9(local_120);
ppvObject = "reward";
riid = (char *)&local_f0;
uVar14 = FUN_140002290(&local_278,riid,"reward",local_2e8);
FUN_140199590(uVar14);
uVar5 = FUN_1400dc910(uVar14);
local_4c = CONCAT31(local_4c._1_3_,uVar5);
Ordinal_9(&local_f0);
lVar12 = (longlong)(int)uVar19;
puVar10 = (undefined8 *)(lVar12 + 0x130 + (longlong)param_1);
*puVar10 = CONCAT44(uStack_84,local_88);
puVar10[1] = CONCAT44(uStack_7c,uStack_80);
puVar10 = (undefined8 *)(lVar12 + 0x140 + (longlong)param_1);
*puVar10 = CONCAT44(uStack_74,local_78);
puVar10[1] = CONCAT44(uStack_6c,uStack_70);
puVar1 = (undefined4 *)(lVar12 + 0x150 + (longlong)param_1);
*puVar1 = uStack_68;
puVar1[1] = (undefined4)uStack_64;
puVar1[2] = uStack_64._4_4_;
puVar1[3] = (undefined4)uStack_5c;
puVar1 = (undefined4 *)(lVar12 + 0x160 + (longlong)param_1);
*puVar1 = uStack_5c._4_4_;
puVar1[1] = (undefined4)uStack_54;
puVar1[2] = uStack_54._4_4_;
puVar1[3] = local_4c;
*(undefined1 *)(lVar12 + 0x170 + (longlong)param_1) = uStack_48;
local_2e4 = uVar19 + 0x41;
local_2c0 = sVar17 + 1;
pwVar16 = (wchar_t *)(ulonglong)local_2c0;
if (50000 < local_2e4) {
uVar4 = local_2d0._2_6_;
local_2d0 = CONCAT62(local_2d0._2_6_,(short)local_2e4);
uVar14 = local_2d0;
riid = (char *)(param_1 + 0x26);
local_2d0._4_2_ = SUB62(uVar4,2);
local_2d0._6_2_ = SUB62(uVar4,4);
((IID *)riid)->Data1 = (undefined4)local_2d0;
((IID *)riid)->Data2 = local_2d0._4_2_;
((IID *)riid)->Data3 = local_2d0._6_2_;
param_1[0x27] = CONCAT26(uStack_2c2,CONCAT24(uStack_2c4,local_2c8));
*(ushort *)(param_1 + 0x28) = local_2c0;
local_2d0 = uVar14;
iVar7 = FUN_1400a7630(*(undefined8 *)(param_1[0x22] + 0xf0));
if (iVar7 == 0) {
ppvObject = "DB Result Queue push error";
riid = "DBResultQueue_Error.Log";
FUN_1400a6d80(param_1[0x23]);
}
local_2e4 = 0x12;
local_2c0 = 0;
pwVar16 = pwVar18;
}
pIVar3 = local_278;
uVar19 = local_2e4;
if (local_278 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
HVar8 = (*local_278->lpVtbl[0xc].QueryInterface)(local_278,(IID *)riid,(void **)ppvObject)
;
if (HVar8 < 0) {
_com_issue_errorex(HVar8,pIVar3,(_GUID *)&DAT_14029e038);
}
}
}
local_2d0 = CONCAT62(local_2d0._2_6_,(short)uVar19);
param_1[0x26] = local_2d0;
param_1[0x27] = CONCAT26(uStack_2c2,CONCAT24(uStack_2c4,local_2c8));
*(short *)(param_1 + 0x28) = sVar17;
iVar7 = FUN_1400a7630(*(undefined8 *)(param_1[0x22] + 0xf0));
if (iVar7 == 0) {
FUN_1400a6d80(param_1[0x23],"DBResultQueue_Error.Log","DB Result Queue push error");
}
pIVar3 = local_278;
if (local_278 != (IUnknown *)0x0) {
local_2e4 = 0;
UVar6 = (*local_278->lpVtbl[0x12].AddRef)(local_278);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029e038);
}
pIVar3 = local_278;
if (local_2e4 != 0) {
if (local_278 == (IUnknown *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
UVar6 = (*local_278->lpVtbl[10].Release)(local_278);
if ((int)UVar6 < 0) {
_com_issue_errorex(UVar6,pIVar3,(_GUID *)&DAT_14029e038);
}
}
if (local_278 != (IUnknown *)0x0) {
(*local_278->lpVtbl->Release)(local_278);
local_278 = (IUnknown *)0x0;
}
}
local_210 = 0;
local_208 = &DAT_14029e010;
local_220 = &DAT_14029e010;
local_218 = 0;
local_228 = 0;
Ordinal_9(local_240);
Ordinal_9(local_258);
if (local_270 != (longlong *)0x0) {
(**(code **)(*local_270 + 0x10))();
}
if (local_278 != (IUnknown *)0x0) {
(*local_278->lpVtbl->Release)(local_278);
}
if (local_2d8 != (longlong *)0x0) {
(**(code **)(*local_2d8 + 0x10))();
}
return 1;
}
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}
/* WARNING: Subroutine does not return */
FUN_140218220(0x80004003);
}