#define lpGCDamageSend ((void(*)(int aIndex, int TargetIndex, int AttackDamage, int MSBFlag, int MSBDamage, int iShieldDamage)) 0x00455CB0) //HP BAR
struct PMSG_ATTACKRESULT
{
PBMSG_HEAD h; // C1:DC
BYTE NumberH; // 3
BYTE NumberL; // 4
BYTE DamageH; // 5
BYTE DamageL; // 6
BYTE DamageType; // 7
BYTE btShieldDamageH; // 8
BYTE btShieldDamageL; // 9
float Life; //A
float MaxLife; //E
float AddLife; //Inner bug hp bar fix.
};
void GCDamageSend(int aIndex, int TargetIndex, int AttackDamage, int MSBFlag, int MSBDamage, int iShieldDamage)
{
PMSG_ATTACKRESULT pResult;
PHeadSetB((LPBYTE)&pResult, 0x11, sizeof(pResult));
pResult.NumberH = SET_NUMBERH(TargetIndex);
pResult.NumberL = SET_NUMBERL(TargetIndex);
pResult.DamageH = SET_NUMBERH(AttackDamage);
pResult.DamageL = SET_NUMBERL(AttackDamage);
pResult.btShieldDamageH = SET_NUMBERH(iShieldDamage);
pResult.btShieldDamageL = SET_NUMBERL(iShieldDamage);
if ( MSBFlag != FALSE )
{
pResult.NumberH &= 0x7F;
pResult.NumberH |= 0x80;
}
pResult.DamageType = MSBDamage;
OBJECTSTRUCT * gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
OBJECTSTRUCT * gTarg = (OBJECTSTRUCT*)OBJECT_POINTER(TargetIndex);
pResult.Life = gTarg->Life;
pResult.MaxLife = gTarg->MaxLife + gTarg->AddLife;
if (gTarg->Type == OBJECT_MONSTER)
{
pResult.Life = gTarg->Life;
pResult.MaxLife = gTarg->MaxLife + gTarg->AddLife;
}
if(gTarg->Type == OBJECT_USER)
{
DataSend(TargetIndex, (LPBYTE)&pResult, pResult.h.size);
}
if(gObj->Type == OBJECT_USER )
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
}
lpGCDamageSend(aIndex, TargetIndex, AttackDamage, MSBFlag, MSBDamage, iShieldDamage);
}