Skip to content

Instantly share code, notes, and snippets.

@imerr
Created November 28, 2013 16:17
Show Gist options
  • Save imerr/7694393 to your computer and use it in GitHub Desktop.
Save imerr/7694393 to your computer and use it in GitHub Desktop.
bool __cdecl CHARACTER__AddAffect(CHARACTER *const a1, DWORD dwType, BYTE bApplyOn, __int32 lApplyValue, DWORD dwFlag, __int32 lDuration, __int32 lSPCost, bool bOverride, bool IsCube)
{
const char *v9; // eax@3
const char *v10; // eax@3
CAffect *v11; // ebx@4
DESC *v12; // edx@7
unsigned __int16 v13; // di@9
int v14; // ecx@12
bool result; // eax@13
int v16; // edx@16
int v17; // eax@17
int v18; // eax@19
int v19; // eax@22
const char *v20; // eax@28
__int32 duration_; // [sp+34h] [bp-44h]@1
unsigned __int16 v22; // [sp+44h] [bp-34h]@9
char *v23; // [sp+48h] [bp-30h]@18
int v24; // [sp+4Fh] [bp-29h]@25
int v25; // [sp+53h] [bp-25h]@25
char v26; // [sp+57h] [bp-21h]@25
int v27; // [sp+58h] [bp-20h]@25
int v28; // [sp+5Ch] [bp-1Ch]@25
int v29; // [sp+60h] [bp-18h]@25
int v30; // [sp+64h] [bp-14h]@25
int v31; // [sp+68h] [bp-10h]@1
duration_ = lDuration;
v31 = *(_DWORD *)_stack_chk_guard;
if ( dwType == 223 )
{
if ( lDuration > 1 )
{
v20 = locale_find("+¯+Á++ -ª-ªÀ+ +ñã++¦ ¦¦-");
CHARACTER__ChatPacket(a1, 1, v20);
}
}
if ( !lDuration )
{
sys_err("AddAffect", 542, "Character::AddAffect lDuration == 0 type %d", 0, dwType);
duration_ = 1;
}
v9 = CHARACTER__GetName(a1);
sys_log(
1,
"AddAffect %s type %d apply %d %d flag %u duration %d",
v9,
dwType,
bApplyOn,
lApplyValue,
dwFlag,
duration_);
v10 = CHARACTER__GetName(a1);
sys_log(
0,
"AddAffect %s type %d apply %d %d flag %u duration %d",
v10,
dwType,
bApplyOn,
lApplyValue,
dwFlag,
duration_);
if ( IsCube )
{
v11 = CHARACTER__FindAffect(a1, dwType, bApplyOn);
if ( dwFlag != 6 )
goto LABEL_5;
}
else
{
v11 = CHARACTER__FindAffect(a1, dwType, 0);
if ( dwFlag != 6 )
goto LABEL_5;
}
v16 = a1->CEntity.m_pos.x;
if ( a1->m_posDest.x != v16 || a1->m_posDest.y != a1->CEntity.m_pos.y )
{
v17 = a1->CEntity.m_pos.y;
a1->m_posStart.x = v16;
a1->m_posDest.x = v16;
a1->m_posStart.y = v17;
a1->m_posDest.y = v17;
battle_end(a1);
CHARACTER__SyncPacket(a1);
}
LABEL_5:
if ( v11 )
{
if ( bOverride )
{
CHARACTER__ComputeAffect(a1, v11, 0);
v12 = a1->CEntity.m_lpDesc;
if ( v12 )
SendAffectRemovePacket(v12, a1->m_dwPlayerID, v11->dwType, v11->bApplyOn);
goto LABEL_9;
}
v23 = (char *)&a1->m_list_pkAffect;
v11 = CAffect__Acquire();
}
else
{
v11 = CAffect__Acquire();
v23 = (char *)&a1->m_list_pkAffect;
}
v18 = operator new(12);
if ( v18 != -8 )
*(_DWORD *)(v18 + 8) = v11;
std___List_node_base__hook(v18, v23);
LABEL_9:
v11->dwType = dwType;
v11->bApplyOn = bApplyOn;
v11->lApplyValue = lApplyValue;
v11->dwFlag = dwFlag;
v11->lDuration = duration_;
v11->lSPCost = lSPCost;
v13 = CHARACTER__GetPoint(a1, POINT_MOV_SPEED);
v22 = CHARACTER__GetPoint(a1, POINT_ATT_SPEED);
CHARACTER__ComputeAffect(a1, v11, 1);
if ( v11->dwFlag || v13 != CHARACTER__GetPoint(a1, POINT_MOV_SPEED) || v22 != CHARACTER__GetPoint(a1, POINT_ATT_SPEED) )
CHARACTER__UpdatePacket(a1);
CHARACTER__StartAffectEvent(a1);
if ( a1->CEntity.m_lpDesc )
{
SendAffectAddPacket(a1->CEntity.m_lpDesc, v11);
v19 = v11->dwType;
if ( v11->dwType != 222 )
{
if ( v19 != 215 )
{
if ( (unsigned int)(v19 - 500) > 9 )
{
v24 = a1->m_dwPlayerID;
v25 = v11->dwType;
v26 = v11->bApplyOn;
v27 = v11->lApplyValue;
v28 = v11->dwFlag;
v29 = v11->lDuration;
v30 = v11->lSPCost;
CLIENT_DESC__DBPacket(db_clientdesc, 0x20u, 0, &v24, 0x19u);
}
}
}
}
result = 1;
if ( *(_DWORD *)_stack_chk_guard != v31 )
__stack_chk_fail(v14);
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment