how to status sturct fix?

08/25/2020 12:38 register80#1
It's part of the hook code for the map server.
Code:
struct _tagCharacterStatusInfo
{
  __int16 nStrength;
  __int16 nDexterity;
  __int16 nHealth;
  __int16 nIntelligence;
  __int16 nMentality;
  __int16 nQuickness;

  int nMeleeAttackForce;
  int nMissileAttackForce;
  int nMagicAttackForce;
  int nPhysicsDefence;
  int nMagicDefence;
  __int16 nHitRate;
  __int16 nEscapeReate;
  int nMaxLife;
  __int16 nLifeRecovery;
   int nMaxMana;
  __int16 nManaRecovery;
  __int16 nResistance;
  __int16 nMoveSpeed;
  __int16 nAttackSpeed;
  __int16 nMaxWeight;
  char nResistanceBlazing;
  char nResistanceFrozen;
  char nResistanceDarkness;
  char nResistanceDivine;
};

new struct
struct _tagCharacterStatusInfo
{
  int nStrength;
  int nDexterity;
  int nHealth;
  int nIntelligence;
  int nMentality;
  int nQuickness;

  int nMeleeAttackForce;
  int nMissileAttackForce;
  int nMagicAttackForce;
  int nPhysicsDefence;
  int nMagicDefence;
  __int16 nHitRate;
  __int16 nEscapeReate;
  int nMaxLife;
  __int16 nLifeRecovery;
   int nMaxMana;
  __int16 nManaRecovery;
  __int16 nResistance;
  __int16 nMoveSpeed;
  __int16 nAttackSpeed;
  __int16 nMaxWeight;
  char nResistanceBlazing;
  char nResistanceFrozen;
  char nResistanceDarkness;
  char nResistanceDivine;
};
Code:
original code
void __thiscall CPlayer::GetStatusInfo(CPlayer *this, _tagCharacterStatusInfo *grCharStatusInfo)
{
  CPlayer *v2; // ST04_4@1

  v2 = this;
  grCharStatusInfo->nStrength = CBioticBase::GetAbility((CBioticBase *)&this->vfptr, 0);
  grCharStatusInfo->nDexterity = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 3);
  grCharStatusInfo->nHealth = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 1);
  grCharStatusInfo->nIntelligence = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 2);
  grCharStatusInfo->nMentality = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 4);
  grCharStatusInfo->nQuickness = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 5);
  grCharStatusInfo->nMeleeAttackForce = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 6);
  grCharStatusInfo->nMissileAttackForce = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 7);
  grCharStatusInfo->nMagicAttackForce = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 8);
  grCharStatusInfo->nPhysicsDefence = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 9);
  grCharStatusInfo->nMagicDefence = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 10);
  grCharStatusInfo->nHitRate = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 11);
  grCharStatusInfo->nEscapeReate = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 12);
  grCharStatusInfo->nMaxLife = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 13);
  grCharStatusInfo->nLifeRecovery = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 14);
  grCharStatusInfo->nMaxMana = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 15);
  grCharStatusInfo->nManaRecovery = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 16);
  grCharStatusInfo->nResistance = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 17);
  grCharStatusInfo->nMoveSpeed = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 18);
  grCharStatusInfo->nAttackSpeed = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 19);
  grCharStatusInfo->nMaxWeight = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 20);
  grCharStatusInfo->nResistanceBlazing = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 47);
  grCharStatusInfo->nResistanceFrozen = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 48);
  grCharStatusInfo->nResistanceDarkness = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 49);
  grCharStatusInfo->nResistanceDivine = CBioticBase::GetAbility((CBioticBase *)&v2->vfptr, 50);
}
c# code?
Code:
private static void DetouredGetStatusInfo(IntPtr ptrPlayer, IntPtr pInfo)
{
       try
       {
           Data._tagCharacterStatusInfo structure = (Data._tagCharacterStatusInfo)Marshal.PtrToStructure(pInfo, typeof(Data._tagCharacterStatusInfo));
                       
           Marshal.Copy(Misc.getBytes(structure), 0, pInfo, Marshal.SizeOf(structure));

             .............


            Hooks.Manager["CPlayer::GetStatusInfo"].CallOriginal(new object[] {  ptrPlayer, pInfo });
          }
                  catch (Exception exception)
         {
            Log.LogError(exception, "CPlayer::GetStatusInfo");
         }
 }
I need your help me.