Dantez
Moim sekretem jest ciasto
- Joined
- May 22, 2008
- Messages
- 1,206
- Reaction score
- 202
Author: Dantez
Dzia?anie:
Zamienia wy?wietlan? liczb? ?ycia i many na procenty.
Jak doda??
Podmieniamy ca?? funkcj? AddPlayerStats w plikach protocolgame.cpp w przypadku wersji 0.3.6pl1+ lub protocol76.cpp w przypadku wersji TFS pod Tibi? 7.6. Przez lata si? porobi?y r??ne wariacje i r??ne cuda, w funkcji powinny inaczej wygl?da? tylko 4 linijki.
The Forgotten Server Master
[CPP]void ProtocolGame::AddPlayerStats(NetworkMessage& msg){
msg.addByte(0xA0);
msg.add<uint16_t>(std::floor(player->getHealth() * 100.f / player->getMaxHealth()));
msg.add<uint16_t>(100);
msg.add<uint32_t>(player->getFreeCapacity());
msg.add<uint32_t>(player->getCapacity());
msg.add<uint64_t>(player->getExperience());
msg.add<uint16_t>(player->getLevel());
msg.addByte(player->getLevelPercent());
msg.add<uint16_t>(100); // base xp gain rate
msg.add<uint16_t>(0); // xp voucher
msg.add<uint16_t>(0); // low level bonus
msg.add<uint16_t>(0); // xp boost
msg.add<uint16_t>(100); // stamina multiplier (100 = x1.0)
msg.add<uint16_t>(std::floor(player->getMana() * 100.f / std::max<uint32_t>(player->getMaxMana(), 1)));
msg.add<uint16_t>(100);
msg.addByte(std::min<uint32_t>(player->getMagicLevel(), std::numeric_limits<uint8_t>::max()));
msg.addByte(std::min<uint32_t>(player->getBaseMagicLevel(), std::numeric_limits<uint8_t>::max()));
msg.addByte(player->getMagicLevelPercent());
msg.addByte(player->getSoul());
msg.add<uint16_t>(player->getStaminaMinutes());
msg.add<uint16_t>(player->getBaseSpeed() / 2);
Condition* condition = player->getCondition(CONDITION_REGENERATION);
msg.add<uint16_t>(condition ? condition->getTicks() / 1000 : 0x00);
msg.add<uint16_t>(player->getOfflineTrainingTime() / 60 / 1000);
msg.add<uint16_t>(0); // xp boost time (seconds)
msg.addByte(0); // enables exp boost in the store
}[/CPP]
The Forgotten Server 1.0 - 1.2
[CPP]void ProtocolGame::AddPlayerStats(NetworkMessage& msg){
msg.AddByte(0xA0);
msg.add<uint16_t>(std::floor(player->getHealth() * 100.f / player->getPlayerInfo(PLAYERINFO_MAXHEALTH)));
msg.add<uint16_t>(100);
msg.add<uint32_t>(uint32_t(player->getFreeCapacity() * 100));
msg.add<uint32_t>(uint32_t(player->getCapacity() * 100));
msg.add<uint64_t>(player->getExperience());
msg.add<uint16_t>(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg.AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg.add<uint16_t>(std::floor(player->getMana() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA), 1)));
msg.add<uint16_t>(100);
msg.AddByte(std::min<uint32_t>(0xFF, player->getMagicLevel()));
msg.AddByte(std::min<uint32_t>(0xFF, player->getBaseMagicLevel()));
msg.AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg.AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg.add<uint16_t>(player->getStaminaMinutes());
msg.add<uint16_t>(player->getBaseSpeed() / 2);
Condition* condition = player->getCondition(CONDITION_REGENERATION);
msg.add<uint16_t>(condition ? condition->getTicks() / 1000 : 0x00);
msg.add<uint16_t>(player->getOfflineTrainingTime() / 60 / 1000);
}[/CPP]
The Forgotten Server 0.3.6pl1
Nale?y usun?c spacj? z PLAYERINFO_MAXMANA je?li si? pojawia - nie moja wina
{
msg->AddByte(0xA0);
msg->AddU16((uint16_t)std::floor(player->getHealth() * 100.f / getPlayerInfo(PLAYERINFO_MAXHEALTH)));
msg->AddU16(100);
msg->AddU32(uint32_t(player->getFreeCapacity() * 100));
uint64_t experience = player->getExperience();
if(experience > 0x7FFFFFFF) // client debugs after 2,147,483,647 exp
msg->AddU32(0x7FFFFFFF);
else
msg->AddU32(experience);
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16((uint16_t)std::floor(player->getMana() * 100.f / std::max<uint32_t>(getPlayerInfo(PLAYERINFO_MAXMANA), 1)));
msg->AddU16(100);
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVEL));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(player->getStaminaMinutes());
}[/CPP]
OTServ 0.6.4
[CPP]void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg){
msg->AddByte(0xA0);
msg->AddU16((uint16_t)std::floor(player->getHealth() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH), 1)));
msg->AddU16(100);
msg->AddU32(uint32_t(player->getFreeCapacity() * 100));
uint64_t experience = player->getExperience();
if(experience > 0x7FFFFFFF) // client debugs after 2,147,483,647 exp
msg->AddU32(0x7FFFFFFF);
else
msg->AddU32(experience);
msg->AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->AddU16((uint16_t)std::floor(player->getMana() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA), 1)));
msg->AddU16(100);
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVEL));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->AddU16(player->getStaminaMinutes());
}[/CPP]
Chi?ski trunk 3777
[CPP]void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg){
msg->put<char>(0xA0);
msg->put<uint16_t>(std::floor(player->getHealth() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH), 1)));
msg->put<uint16_t>(100);
msg->put<uint32_t>(uint32_t(player->getFreeCapacity() * 100));
uint64_t experience = player->getExperience();
if(experience > 0x7FFFFFFF) // client debugs after 2,147,483,647 exp
msg->put<uint32_t>(0x7FFFFFFF);
else
msg->put<uint32_t>(experience);
msg->put<uint16_t>(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg->put<char>(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg->put<uint16_t>(std::floor(player->getMana() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA), 1)));
msg->put<uint16_t>(100);
msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVEL));
msg->put<char>(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg->put<char>(player->getPlayerInfo(PLAYERINFO_SOUL));
msg->put<uint16_t>(player->getStaminaMinutes());
}[/CPP]
Pod 7.6 z funkcjami "msg." w pliku protocol76.cpp
[CPP]void Protocol76::AddPlayerStats(NetworkMessage &msg,const Player *player){
msg.AddByte(0xA0);
msg.AddU16((uint16_t)std::floor(player->getHealth() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXHEALTH), 1)));
msg.AddU16(100);
msg.AddU16((unsigned short)std::floor(player->getFreeCapacity()));
#ifdef YUR_HIGH_LEVELS
if (player->getPlayerInfo(PLAYERINFO_LEVEL) > 65535)
{
msg.AddU32(player->getPlayerInfo(PLAYERINFO_LEVEL));
msg.AddU16(0);
}
else if (player->getExperience() > 2000000000L)
{
msg.AddU32(0);
msg.AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
else
{
msg.AddU32((unsigned long)player->getExperience());
msg.AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
}
#else
msg.AddU32(player->getExperience());
msg.AddU16(player->getPlayerInfo(PLAYERINFO_LEVEL));
#endif //YUR_HIGH_LEVELS
msg.AddByte(player->getPlayerInfo(PLAYERINFO_LEVELPERCENT));
msg.AddU16((uint16_t)std::floor(player->getMana() * 100.f / std::max<uint32_t>(player->getPlayerInfo(PLAYERINFO_MAXMANA), 1)));
msg.AddU16(100);
msg.AddByte(player->getMagicLevel());
msg.AddByte(player->getPlayerInfo(PLAYERINFO_MAGICLEVELPERCENT));
msg.AddByte(player->getPlayerInfo(PLAYERINFO_SOUL));
}[/CPP]