Graf 220 Report post Posted September 21, 2022 (edited) [Исходники] Медали (ожерелья) со званиями Всем привет. Тема основана на Моде от @V3ct0r по ссылке Моды.. Это, конечно, интересно.. Но, думаю всем любопытно, как это реализовать на исходных файлах клиента, которые уже доступны несколько лет. Итак, открыв мод, мы видим 2 функции: inline void SetPreName( const int n_item, char* sz_name, DWORD& dw_color ) и // void CHeadSay::Render(D3DXVECTOR3& pos) Ищем тоже самое в своих исходниках и пинаем их.. У меня знаний плюсов 0,00000.....0001%, поэтому мб код не очень красивый, но все работает. То есть перекрутить его на исходники я смог) Итак. Ниже представлена функция SetPreName inline void SetPreName( int nItem, char* szName, DWORD& dwColor ) { static DWORD cha_id = 0; // Узнаем информацию о предмете CItemRecord* pInfo = GetItemRecordInfo( nItem ); DWORD COLOR_SKYBLUE = D3DCOLOR_ARGB(255, 168, 168, 255); // Если найден предмет if (nItem != 0) { // Если вещь существует в ItemInfo.txt if (!pInfo == 0) { // Узнаем тип предмета const unsigned short int type = pInfo->sType; // Если это ожерелье(25 тип) if (type == 25) { // Читаем цвет из ItemInfo.txt в столбце модели ланса const char* rgb = pInfo->chModule[1]; // Узнаем титул(столбец комментария) const char* title = pInfo->szDescriptor; // Конвертируем строку RGB цвета в 16-значное число const unsigned long color = strtoul(rgb, 0, 16); // Проверяем, что цвет и титул имеют место быть)) if (color != 0 && strlen(title) > 0) { // Устанавливаем титул strcpy( szName, title ); // Устанавливаем цвет dwColor = color; // Завершаем работу функции return; } switch( nItem ) { case 3936: strcpy( szName, g_oLangRec.GetString(7) ); dwColor = D3DCOLOR_ARGB(255,192,192,192); return; case 3937: strcpy( szName, g_oLangRec.GetString(8) ); dwColor = D3DCOLOR_ARGB(255,000,255,012); return; case 3938: strcpy( szName, g_oLangRec.GetString(9) ); dwColor = D3DCOLOR_ARGB(255,217,255,119); return; case 3939: strcpy( szName, g_oLangRec.GetString(10) ); dwColor = D3DCOLOR_ARGB(255,070,182,240); return; case 3940: strcpy( szName, g_oLangRec.GetString(11) ); dwColor = D3DCOLOR_ARGB(255,255,207,000); return; case 3941: strcpy( szName, g_oLangRec.GetString(12) ); dwColor = D3DCOLOR_ARGB(255,255,000,000); return; case 3942: strcpy( szName, g_oLangRec.GetString(13) ); dwColor = D3DCOLOR_ARGB(255,241,014,240); return; case 5331: strcpy( szName, g_oLangRec.GetString(922) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,192,192,192); return; case 5332: strcpy( szName, g_oLangRec.GetString(923) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,135,135,135); return; case 5333: strcpy( szName, g_oLangRec.GetString(924) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,255,255); return; case 5334: strcpy( szName, g_oLangRec.GetString(925) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,070,182,240); return; case 5335: strcpy( szName, g_oLangRec.GetString(926) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,000,255,012); return; case 5336: strcpy( szName, g_oLangRec.GetString(927) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,217,255,119); return; case 5337: strcpy( szName, g_oLangRec.GetString(928) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,207,000); return; case 5338: strcpy( szName, g_oLangRec.GetString(929) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,127,000); return; case 5339: strcpy( szName, g_oLangRec.GetString(930) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,000,000); return; case 5340: strcpy( szName, g_oLangRec.GetString(931) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,241,014,240); return; // TOM?? case 822: strcpy( szName, g_oLangRec.GetString(14) ); dwColor = D3DCOLOR_ARGB(255,255,000,000); return; // ???? case 823: strcpy( szName, g_oLangRec.GetString(15) ); dwColor = D3DCOLOR_ARGB(255,241,014,240); return; // ???? case 7238: strcpy( szName, "Developer" ); dwColor = D3DCOLOR_ARGB(255,5,153,252); return; default: szName[0] = '\0'; } } } } } Теперь находим строку во второй функции: s_dwNamePartsColors[NAME_INDEX][0] = _dwNameColor; И перед ней вставляем: // Узнаем информацию о персонаже const stNetChangeChaPart part = _pOwn->GetPart(); // Узнаем ID ожерелья int neck_id = part.SLink[enumEQUIP_NECK].sID; // Если ID ожерелья нашли, то.. if (neck_id != NULL) { // Узнаем информацию об ожерелье в ItemInfo.txt CItemRecord* item = GetItemRecordInfo(neck_id); // Если предмет найден в ItemInfo.txt if (item != 0) { // Узнаем Цвет Имени на месте модели Карциза const char* szColorName = item->chModule[2]; // Проверяем цвет на наличие if (std::strcmp(szColorName, "0") != 0) { //Дефолтный цвет ника unsigned int color = 0xFFFFFFFF; //Конвертируем цвет из ItemInfo color = std::strtoul(szColorName, 0, 16); // Устанавливаем цвет ника _dwNameColor = color; } } } Итог: P.S. надеюсь таких тем будет побольше, т.к. это все не так просто, как кажется и в одного понимать тяжело)) Также.. Надеюсь, что хоть кому-то помог) Edited September 23, 2022 by Graf 1 1 Quote Share this post Link to post Share on other sites
Graf 220 Report post Posted September 21, 2022 Совсем забыл. В файле UIHeadSay.cpp сверху нужно добавить: #include "ItemRecord.h" 1 Quote Share this post Link to post Share on other sites
Graf 220 Report post Posted September 23, 2022 Update: 1. Немного изменил комментарии; 2. Убрал пару лишних строк из кода. Спасибо за помощь людям с сообщества) 1 Quote Share this post Link to post Share on other sites