Jump to content
Sign in to follow this  
Graf

[Исходники] Медали (ожерелья) со званиями

Recommended Posts

[Исходники] Медали (ожерелья) со званиями

Всем привет. Тема основана на Моде от @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;
		}
	}
}

 

Итог:

spacer.png

 

P.S. надеюсь таких тем будет побольше, т.к. это все не так просто, как кажется и в одного понимать тяжело))

Также.. Надеюсь, что хоть кому-то помог)

Edited by Graf
  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Совсем забыл.

В файле UIHeadSay.cpp сверху нужно добавить:

#include "ItemRecord.h"

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Update:

1. Немного изменил комментарии;

2. Убрал пару лишних строк из кода.

 

Спасибо за помощь людям с сообщества)

  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...