Graf 210 Report post Posted November 30, 2023 (edited) Рейтинг над головой персонажа Чтобы добавить рейтинг, нужно в исходном коде клиента открыть файл UIHeadSay.cpp, найти: #ifdef _LOG_NAME_ //и§’и‰ІеђЌз§° if( CCharacter::IsShowLogName ) { CChaStateMgr* pState = _pOwn->GetStateMgr(); int nCount = pState->GetSkillStateNum(); for( int i=0; i<nCount; i++ ) { y -= 20; CGuiFont::s_Font.Render( pState->GetSkillState(i)->szName, x, y, COLOR_WHITE ); } } #endif и ниже вписать: // Вывод рейтинга if (_pOwn->IsPlayer()) { if (_IsShowName) { if (_pOwn->getGuildID()) y -= 14; char RenderTextRating[32] = {0}; sprintf(RenderTextRating, "- [%d] -", CalculateRating(_pOwn->getGameAttr())); int RatingLength = CGuiFont::s_Font.GetWidth(RenderTextRating); CGuiFont::s_Font.Render(RenderTextRating, x - (RatingLength / 2), y - 28, 0xFF000000 ); CGuiFont::s_Font.Render(RenderTextRating, x - (RatingLength / 2) - 1, y - 28 - 1, 0xFF00FFFF ); } } Найти функцию: void CHeadSay::SetName( const char* name ) { _nChaNameOffX = 0 - CGuiFont::s_Font.GetWidth( name )/2; } И ниже вставить: // Подсчет рейтинга inline int CalculateRating(SGameAttr* attrArr) { int result = 0; result += attrArr->get(ATTR_HP); return result; } В данном примере рейтинг выводит количество ATTR_HP (ХП персонажа). Вы можете настроить свои формулы, к примеру сумму основных характеристик персонажа. Edited November 30, 2023 by Graf 1 Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 30, 2023 // Вывод рейтинга if (_IsShowName && _pOwn->IsPlayer()) { if (_pOwn->getGuildID()) y -= 14; static char szTextRating[32u] = { 0 }; sprintf(szTextRating, "- [%d] -", CalculateRating(_pOwn)); static const DWORD COLOR_TEXT_RATING = 0xFF00FFFF; const int nDrawX = x - (CGuiFont::s_Font.GetWidth(szTextRating) / 2); const int nDrawY = y - 28; CGuiFont::s_Font.BRender(szTextRating, nDrawX, nDrawY, COLOR_TEXT_RATING, COLOR_BLACK); } // Подсчет рейтинга inline int CalculateRating(const CCharacter* pCha) { const SGameAttr* pGameAttr = pCha->getGameAttr(); int nPowerCounter = 0; nPowerCounter += pGameAttr->get(ATTR_HP); return nPowerCounter; } Функцию CalculateRating() хорошо было бы сделать членом какого-нибудь класса, например class CHeadSay или class CCharacter. Вопрос: будет ли это работать для персонажей других игроков? Так как есть сомнения, что сервер присылает (синхронизирует) характеристики других персонажей нашему клиенту, и для других игроков рейтинг будет отображаться некорректно. Если код задумывался для отображения рейтинга только нашего персонажа, то можно заменить: if (_IsShowName && _pOwn->IsPlayer()) на: if (_IsShowName && _pOwn->IsMainCha()) Стоит учесть, что в некоторых случаях рейтинг персонажа может уйти в минус. Если говорить про ATTR_HP, то лучше взять ATTR_MXHP, и так далее. P.S. Не тестил код выше. 1 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites