@Nam4, só Alterar a GCDamageSend, acredito eu... vai dar trabalho, pórem é ai que tem que alterar...
tente com isso
Código:
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
DWORD Life; //A
DWORD MaxLife; //B
};
void GCDamageSend(int aIndex, int TargetIndex, int AttackDamage, int MSBFlag, int MSBDamage, int iShieldDamage)
{
PMSG_ATTACKRESULT pResult;
PHeadSetB((LPBYTE)&pResult, 0xDC, 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);
pResult.Life = gObj[TargetIndex].Life;
pResult.MaxLife = gObj[TargetIndex].MaxLife;
if ( MSBFlag != FALSE )
{
pResult.NumberH &= 0x7F;
pResult.NumberH |= 0x80;
}
pResult.DamageType = MSBDamage;
if ( gObj[TargetIndex].Type == OBJ_USER )
{
DataSend(TargetIndex, (LPBYTE)&pResult, pResult.h.size);
}
if ( cManager.WatchTargetIndex == TargetIndex || cManager.WatchTargetIndex == aIndex )
{
cManager.DataSend((LPBYTE)&pResult, pResult.h.size);
}
if ( gObj[aIndex].Type == OBJ_USER )
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
}
}
se não der certo de primeira, mude isso aqui para aIndex
pResult.Life = gObj[TargetIndex].Life;
pResult.MaxLife = gObj[TargetIndex].MaxLife;
só dar hook na Atual do GameServer para que está vire a Sua.
Não sei se irá funcionar, teste ai e responda aqui no tópico, só usei a Logica de como o gameserver trabalha ...
[]'s