What's new

Wy?wietlanie procent?w zamiast hp i many

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
[CPP]void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg)
{
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]
 

Fardos

Senior User
Joined
Mar 21, 2009
Messages
868
Reaction score
34
Odp: Wy?wietlanie procent?w zamiast hp i many

skrypt wygl?da ciekawie ale pytanie - jak teraz np na takim ots enfo 7.6 gdzie lataj? 9999999 lvle skapn?? si? ile si? ma hp w danej chwili - czyt czy ma sie 20k czy 30k : P
 

Biatlan

User
Joined
Feb 29, 2012
Messages
48
Reaction score
1
Odp: Wy?wietlanie procent?w zamiast hp i many

@up
Mo?na np. sobie doda? !hp/!mp :hah:
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
202
Odp: Wy?wietlanie procent?w zamiast hp i many

@up
Mo?na np. sobie doda? !hp/!mp :hah:

Gorzej jak b?dzie war na 30 os?b i ka?dy czym? spamuje - na pewno zobaczysz co wysz?o z !mp.
 

Fardos

Senior User
Joined
Mar 21, 2009
Messages
868
Reaction score
34
Odp: Wy?wietlanie procent?w zamiast hp i many

Nom, pami?tam te czasy gdzie mege enfo by?o popularne, po 50 os i sie napierdalaj? ka?dy z kazdym... i teraz jak by z czym? takim sprawdzali ile maj? many i hp? jeszcze? no okej % by mieli ale % to nie znaczy hp, bo maj?c 1% to mozesz miec 1kkk hp a mozesz miec 1 ^ ^

po 2 stestowali?cie czy ten % nie ro?nie przypadkiem i ?e nie ma sposobu jakiegokolwiek ?eby zrobi? 200% lub wi?cej? :D tak z ciekawo?ci - ew czy nie ma problemu ?e mob zadaj?cy 100dmg zdejmie ca?y pasek ;d
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
202
Odp: Wy?wietlanie procent?w zamiast hp i many

Mo?esz mie? 200% - wystarczy, ?e b?dziesz mia? 2x wi?cej hp ni? na max. Mo?liwe to jest jedynie w przypadku edycji playera. (Sam w sobie player nie mo?e mie? wi?cej hp ni? jego maxhp)
Skoro masz 1% to kto? lub co? musia?o cie zbi? do tego 1%, wi?c wiesz, ?e padasz. Nic nie poradz? na to, dok?adniejszy wynik mo?esz poda? w promilach, jednak nadal 1 promil mo?e oznacza? 1k jak i 1 hp.

Bardziej bym wykorzysta? to pod serwery high exp, gdzie bez !hp nie wiesz ile masz tak na prawd? ?ycia.

Co do dmg - kod tylko wy?wietla procenty, a nie zamienia na 100%. Tak na prawd? nadal masz te 1000 hp, dlatego mob zadaj?cy 100 dmg spowoduje, ?e b?dziesz mia? 900 hp, a wy?wietli 90%.
 

AnimaXxX

Advanced User
Joined
Mar 25, 2011
Messages
195
Reaction score
27
Odp: Wy?wietlanie procent?w zamiast hp i many

@UPx2
To jest tylko wysy?anie statystyk dla clienta. Wi?c nijak to si? ma do zadawanych obra?e?.
 

Fardos

Senior User
Joined
Mar 21, 2009
Messages
868
Reaction score
34
Odp: Wy?wietlanie procent?w zamiast hp i many

rozumiem ?e tak ma dzia?a? , chodzi mi o to czy nie znajdzie si?w tym kodzie ?adnej luki przez kt?r? mo?na sko?czy? ?le ;D
 

AnimaXxX

Advanced User
Joined
Mar 25, 2011
Messages
195
Reaction score
27
Odp: Wy?wietlanie procent?w zamiast hp i many

Nie, nie znajdzie.
 

SanninStory

https://www.twitch.tv/sdrn
Joined
Oct 13, 2012
Messages
1,778
Reaction score
119
Odp: Wy?wietlanie procent?w zamiast hp i many

@Topic,
Skrypt fajny, ?adnie przedstawiony, pod 2 wersje.
Leci rep.
 

Senteno

New User
Joined
Jan 24, 2009
Messages
2
Reaction score
0
Odp: Wy?wietlanie procent?w zamiast hp i many

Gdzie wklejamy w wersji 7.6?
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
202
Odp: Wy?wietlanie procent?w zamiast hp i many

protocol76.cpp
 

Rarzillo De Bonzo

Senior User
Joined
Apr 10, 2009
Messages
726
Reaction score
27
Odp: Wy?wietlanie procent?w zamiast hp i many

Do?? fajny skrypt ,nawet do?? pomocny do balansacji czar?w ze wzgl?du na to ile tw?j czar b?dzie % zadawa? graczom ;d.
 

viharys2

User
Joined
Oct 26, 2012
Messages
17
Reaction score
1
Odp: Wy?wietlanie procent?w zamiast hp i many

a co je?li nie mam pliku protocolgame.cpp?
 

Restles

Senior User
Joined
Aug 31, 2012
Messages
616
Reaction score
51
Odp: Wy?wietlanie procent?w zamiast hp i many

To nie zrobisz... bo nie masz plikow ?r?dlowych (Source
 

viharys2

User
Joined
Oct 26, 2012
Messages
17
Reaction score
1
Odp: Wy?wietlanie procent?w zamiast hp i many

to sk?d je mam wzi??? ? daj link do silnika kt?ry to ma.
 

zakius

Senior User
Joined
May 25, 2008
Messages
869
Reaction score
52
Odp: Wy?wietlanie procent?w zamiast hp i many

Ka?dy ma
A jak kto? udost?pnia bez ?r?de? to wina jego i administracji, ?e nie dopilnowali

masz na przyk?ad
 

viharys2

User
Joined
Oct 26, 2012
Messages
17
Reaction score
1
Odp: Wy?wietlanie procent?w zamiast hp i many

tylko ?e ja potrzebuje pod 8.6 / dobra ju? znalaz?em teraz jak doda? to do silnika ? lub je?li dobrze mi si? wydaje jak to wszystko kompilowa? itd. nic nie czaje. wyt?umaczy kto? krok po kroku?

___________
Dobra chyba zrozumia?em sam do tego tzn je?li mamy pliki source to za ka?dym razem gdy chcemy co? zmieni? musimy kompilowa? nowy silnik z zmianami i dodawa? stare ?mieci typu data mods.
Je?li jestem w b??dzie to napiszcie.
Tylko jeszcze jeden problem, nie ogarniam tego protocolgame.cpp gdy podmieniam to mam jakie? errory przy kompilacji to chyba wina tego ze mam tfs 0.3.6
Je?li kto? by by? tak mi?y i mnie uszcz??liwi? robi?c to za mnie:

By? bym wdzi?czny ;D repp..
 
Last edited:

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
202
Odp: Wy?wietlanie procent?w zamiast hp i many

?ci?gnij Forgotten Dev-Cpp albo Stian's Repack Dev-Cpp.

S? to paczki Dev-C++ z wgranymi bibliotekami potrzebnymi do kompilacji TFS. Jak ju? b?dziesz je mia? otwierasz projekt TheForgottenServer, wprowadzasz m?j kod i kompilujesz.
Je?li nadal potrzebujesz pomocy poszukaj poradniki dotycz?ce kompilacji.
 

viharys

New User
Joined
Aug 23, 2011
Messages
4
Reaction score
0
Odp: Wy?wietlanie procent?w zamiast hp i many

Robie wszystko dobrze, ale od razu wida? ?e mam inn? wersje tfsa i mi wyskakuj? b??dy na twoim kodzie

To jest m?j plik protocolgame.cpp
jakby? m?g? to przer?b bo ja totalnie nie ogarniam co mia?bym zmieni?
 
Top