struct _GENIE_DATA
{
uint16 SkillCount;
uint32 SkillData[23];
uint8 AttackMode;
uint8 RecoveryMode;
uint8 SkillRecoveryPercent;
uint8 AttackRange;
uint8 ActivitiesRange;
uint8 HpRecovery;
uint8 HpPotionPercent;
uint8 MpRecovery;
uint8 MpPotionPercent;
uint8 PetPotionRecovery;
uint8 PetPotionPercent;
uint8 AutomaticSkillParty;
uint8 PartyNumber[12];
uint8 Options[9];
uint8 ReturnHPTownPercent;
uint8 ReturnMPTownPercent;
_GENIE_DATA()
{
for (int i = 0; i < 23; i++)
SkillData[i] = 0;
SkillCount = 0;
AttackMode = 0;
RecoveryMode = 0;
SkillRecoveryPercent = 0;
AttackRange = 0;
ActivitiesRange = 0;
HpRecovery = 0;
HpPotionPercent = 0;
MpRecovery = 0;
MpPotionPercent = 0;
PetPotionRecovery = 0;
PetPotionPercent = 0;
AutomaticSkillParty = 0;
for (int i = 0; i < 12; i++)
PartyNumber[i] = 0;
for (int i = 0; i < 9; i++)
Options[i] = 0;
ReturnHPTownPercent = 0;
ReturnMPTownPercent = 0;
}
};
void CUser::LoadGenieData()
{
Packet result(WIZ_GENIE, uint8(1));
result << uint8(2);
result << GenieData.SkillCount;
for (int i = 0; i < GenieData.SkillCount; i++)
result << GenieData.SkillData[i];
result << uint16(35);
result << GenieData.AttackMode
<< GenieData.RecoveryMode
<< GenieData.SkillRecoveryPercent
<< GenieData.AttackRange
<< GenieData.ActivitiesRange
<< GenieData.HpRecovery
<< GenieData.HpPotionPercent
<< GenieData.MpRecovery
<< GenieData.MpPotionPercent
<< GenieData.PetPotionRecovery
<< GenieData.PetPotionPercent
<< GenieData.AutomaticSkillParty;
for (int i = 0; i < 12; i++)
result << GenieData.PartyNumber[i];
for (int i = 0; i < 9; i++)
{
result << GenieData.Options[i];
if (i == 0)
result << GenieData.ReturnHPTownPercent;
if (i == 1)
result << GenieData.ReturnMPTownPercent;
}
Send(&result);
}
void CUser::SaveGenieData(Packet & pkt)
{
pkt >> GenieData.SkillCount;
if (GenieData.SkillCount > 23)
GenieData.SkillCount = 23;
for (int i = 0; i < GenieData.SkillCount; i++)
pkt >> GenieData.SkillData[i];
uint16 TotalCount = 0;
pkt >> TotalCount;
pkt >> GenieData.AttackMode
>> GenieData.RecoveryMode
>> GenieData.SkillRecoveryPercent
>> GenieData.AttackRange
>> GenieData.ActivitiesRange
>> GenieData.HpRecovery
>> GenieData.HpPotionPercent
>> GenieData.MpRecovery
>> GenieData.MpPotionPercent
>> GenieData.PetPotionRecovery
>> GenieData.PetPotionPercent
>> GenieData.AutomaticSkillParty;
for (int i = 0; i < 12; i++)
pkt >> GenieData.PartyNumber[i];
for (int i = 0; i < 9; i++)
{
pkt >> GenieData.Options[i];
if (i == 0)
pkt >> GenieData.ReturnHPTownPercent;
if (i == 1)
pkt >> GenieData.ReturnMPTownPercent;
}
}