Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Saint

Страницы: [1] 2
1
Ой, я олень, сори - говорю же: давно не юзал это.

В общем, OutCoords - это нужные тебе координаты экрана(высчитывать разрешение экрана игрока дополнительно не надо), а вот width и height уже хз что такое. Меня спутала база idb, которую я сейчас юзаю.

Короче - как-то так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // будущие X и Y координаты экрана, а также расстояние до 3d точки от камеры
  3.                 float width; // хз что
  4.                 float height; // хз что
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных OutCoords[0] и OutCoords[1] уже записаны действительные координаты экрана игрока, юзаем их по надобности
Также эта функция может возвращать bool значение, которое true, если 3d точка примерно в зоне видимости экрана, и false - если нет, т.е. ты сразу можешь юзать функцию, как условие.

благодарю, разобрался.

2
всё равно оно как-то не верно работает


даже если использовать стандартную функцию https://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx

3
Высчитать координаты экрана по мировым 3d координатам можно этой функцией:
70CE30                             ; CSprite::CalcScreenCoors(RwV3d const&, RwV3d*, float *, float *, bool, bool)

Первый RwV3d - указатель на твои мировые 3d координаты. Второй RwV3d - хз что.
В следующие два указателя float будут записаны координаты из расчета разрешения 640x480, так что их нужно еще будет перемножать на ширину экрана игрока/640(для ширины) и на высоту экрана игрока/480(для высоты, ессно).
Последние оба bool ставь на единицы.
В СА не тестил, в ВС аналогичная функция работает.

пример использования?

4
Общие вопросы / Re: d8d8
« : Июнь 02, 2018, 09:26:37 pm »
наверное плохо объяснил суть проблемы, вообщем текст как бы не прилипает к игрокам который рисуется через
pDefaultFont->RenderText (используя шрифт из виндовс)
а текст который рисуется через cbbfont работает норм, но дело в том что он рисуется через текстуру и не может использовать кирилицу...
проблема в преобразовании координат игрока (3d) в экранные, как-то так...

5
всем привет, как некоторые может знаю может нет, работаю над мультиплеерным модом для вайса https://vk.com/vicemultiplayer (аналог samp)
за основу были взяты исходники vc-mp 0.1c часть кода используется от samp
решил попробовать реализовать 3d текст в игре, но вот что-то не получается никак


функция отрисовки
void CNameTags::Draw()
{//------------------------------------------------------------------------------------------------------------------------

if (!bbfont)
{
bbfont = new CBBFont(m_pD3DDevice, "vmpfnt"); // RC 3 Update // наименование шрифта vmpfnt.png / .dat
bbfont->Initialise();
}

//---------------------------------------------------------------------------------------------------------------------

if (!BarOldStateBlock)
{
m_pD3DDevice->BeginStateBlock();

m_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
m_pD3DDevice->SetRenderState(D3DRS_FOGENABLE, FALSE);
m_pD3DDevice->SetRenderState(D3DRS_ZENABLE, 1);
m_pD3DDevice->SetRenderState(D3DRS_FILLMODE, 3);
m_pD3DDevice->SetRenderState(D3DRS_CULLMODE, 1);
m_pD3DDevice->SetRenderState(D3DRS_WRAP0, 0);
m_pD3DDevice->SetRenderState(D3DRS_CLIPPING, 1);
m_pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, 0);
m_pD3DDevice->SetRenderState(D3DRS_CLIPPLANEENABLE, 1);
m_pD3DDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, 0);
m_pD3DDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 15);
m_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
m_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, 5);
m_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, 6);
m_pD3DDevice->SetRenderState(D3DRS_BLENDOP, 1);

m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, 4);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, 0);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, 4);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, 2);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, 0);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, 1);
m_pD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, 1);

m_pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
m_pD3DDevice->SetVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE);
m_pD3DDevice->SetStreamSource(0, NULL, 0);

m_pD3DDevice->EndStateBlock(&BarOldStateBlock);
}

//---------------------------------------------------------------------------------------------------------------------

if (!BarNewStateBlock)
{
m_pD3DDevice->BeginStateBlock();

m_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
m_pD3DDevice->SetRenderState(D3DRS_FOGENABLE, FALSE);
m_pD3DDevice->SetRenderState(D3DRS_ZENABLE, 1);
m_pD3DDevice->SetRenderState(D3DRS_FILLMODE, 3);
m_pD3DDevice->SetRenderState(D3DRS_CULLMODE, 1);
m_pD3DDevice->SetRenderState(D3DRS_WRAP0, 0);
m_pD3DDevice->SetRenderState(D3DRS_CLIPPING, 1);
m_pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, 0);
m_pD3DDevice->SetRenderState(D3DRS_CLIPPLANEENABLE, 1);
m_pD3DDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, 0);
m_pD3DDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 15);
m_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
m_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, 5);
m_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, 6);
m_pD3DDevice->SetRenderState(D3DRS_BLENDOP, 1);

m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, 4);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, 0);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, 1);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, 2);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, 0);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, 1);
m_pD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, 1);

m_pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
m_pD3DDevice->SetVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE);

m_pD3DDevice->EndStateBlock(&BarNewStateBlock);
}

//---------------------------------------------------------------------------------------------------------------------

m_pD3DDevice->CaptureStateBlock(BarOldStateBlock);
m_pD3DDevice->ApplyStateBlock(BarNewStateBlock);

//---------------------------------------------------------------------------------------------------------------------

D3DXMATRIX matTransposed;
D3DXMatrixTranspose(&matTransposed, (D3DXMATRIX*)&matView);
matTransposed._14 = matTransposed._24 = matTransposed._34 = 0.0f;

//---------------------------------------------------------------------------------------------------------------------

if (pNetGame)
{
CPlayerPool * pPlayerPool = pNetGame->GetPlayerPool();

for (int x = 0; x < MAX_PLAYERS; x++)
{
if (pPlayerPool->GetSlotState(x) == TRUE) // player is in use
{
CRemotePlayer * pRemotePlayer = pPlayerPool->GetAt(x);

if (pRemotePlayer)
{
// in samp -> m_fNameTagDrawDistance = 70.0f;
if ( pRemotePlayer->IsActive() && (pRemotePlayer->m_bRemotePlayerPedVisible) && (pRemotePlayer->m_bRemotePlayerPedVisibleVW) && (pRemotePlayer->GetDistanceFromLocalPlayer() <= 70.0f) ) // Active and within reasonable distance
{
CPlayerPed * pRemotePlayerPed = pRemotePlayer->GetRemotePlayerPed();
                   
if (pRemotePlayerPed->IsOnScreen())
{
// They're onscreen // если пед на Экране

MATRIX4X4 matPlayer; // VECTOR vPos;
pRemotePlayerPed->GetMatrix(&matPlayer); // PlayerPed->GetPosition(&vPos);

// Set the matrix position
matTransposed._41 = matPlayer.vPos.X;
matTransposed._42 = matPlayer.vPos.Y;
matTransposed._43 = matPlayer.vPos.Z + 1.0f;

// Set the world transformation
m_pD3DDevice->SetTransform(D3DTS_WORLD, &matTransposed);

//---------------------------------------------------------------------------------------------

float Health = pRemotePlayer->GetRemotePlayerHealth(); // RC 3 T3 Update
float Armour = pRemotePlayer->GetRemotePlayerArmour(); // RC 3 T3 Update

if (Health > 100.0f) Health = 100.0f;
if (Armour > 100.0f) Armour = 100.0f; // New Saint Add

// Set the health bar offsets
BarBGVertices[0].x = BarBGVertices[1].x = (0.0058f * Health) - 0.29f;

// Set the health bar color
BarVertices[0].c = BarVertices[1].c = BarVertices[2].c = BarVertices[3].c = HEALTH_BAR_COLOR;

m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBDRVertices, sizeof(BarVertices_s)); // Draw the health bar border
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarVertices,    sizeof(BarVertices_s)); // Draw the health bar fill
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBGVertices,  sizeof(BarVertices_s)); // Draw the health bar background

if (Armour > 0.0f)
{
matTransposed._41 = matPlayer.vPos.X;
matTransposed._42 = matPlayer.vPos.Y;
matTransposed._43 = matPlayer.vPos.Z + 1.1f;

// Set the world transformation
m_pD3DDevice->SetTransform(D3DTS_WORLD, &matTransposed);

// Set the armour bar offsets
BarBGVertices[0].x = BarBGVertices[1].x = (0.0058f * Armour) - 0.29f;

// Set the armour bar color
BarVertices[0].c = BarVertices[1].c = BarVertices[2].c = BarVertices[3].c = ARMOUR_BAR_COLOR;

m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBDRVertices, sizeof(BarVertices_s)); // Draw the armour bar border
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarVertices,    sizeof(BarVertices_s)); // Draw the armour bar fill
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBGVertices,  sizeof(BarVertices_s)); // Draw the armour bar background
}

//---------------------------------------------------------------------------------------------

if (bbfont)
{
bbfont->Begin();

sprintf(szBuffer, "%s(%d)", pPlayerPool->GetPlayerName(x), x); // name + player id

bbfont->Draw(szBuffer, 0.100f, pRemotePlayer->GetPlayerColorAsARGB());

bbfont->End();
}
/*
D3DXVECTOR3 NamePos;
//NamePos.x = matPlayer.vPos.X;
//NamePos.y = matPlayer.vPos.Y;
//NamePos.z = matPlayer.vPos.Z;
NamePos.x = matTransposed._41;
NamePos.y = matTransposed._42;
NamePos.z = matTransposed._43;

D3DVIEWPORT8 Viewport;
m_pD3DDevice->GetViewport(&Viewport);

D3DXVECTOR3 Out;
D3DXMATRIX matIdent;
D3DXMatrixIdentity(&matIdent);

D3DXVec3Project(&Out, &NamePos, &Viewport, &matProj, &matView, &matIdent);

if (Out.z > 1.0f)
return;

RECT rect = {(int)Out.x, (int)Out.y, (int)Out.x+1, (int)Out.y+1}; // определяем прямоугольник

SIZE size = pDefaultFont->MeasureText(szBuffer);
rect.left -= size.cx/2;

//rect.left += 200;
//rect.top += 100;
//rect.right += pGame->GetScreenWidth(); // ширина
//rect.bottom += pGame->GetScreenHeight(); // высота

pDefaultFont->RenderText(szBuffer, rect, pRemotePlayer->GetPlayerColorAsARGB());
*/
}
}
}
}
}
}

m_pD3DDevice->ApplyStateBlock(BarOldStateBlock);

}//------------------------------------------------------------------------------------------------------------------------

суть в том что закоменнтированная часть кода в SA работает, а вот в Вайсе нет
кто что подскажет?

6
Скриптинг / Re: Скриптинг в стиле C++
« : Апрель 21, 2014, 08:14:03 pm »
категорически против.

7
Общие вопросы / Re: MenuFix - мой вариант меню
« : Март 30, 2014, 01:59:37 am »
возможно ли сделать что-то подобное вроде этого?
Обнова SA:MP . Отключение паузы ! Обзор!

8
с Днём рождения! Счастья, Здоровья и Удачи...

9
с Днём Рождения!

10
Общие вопросы / Re: загрузка своих dll в игру
« : Февраль 15, 2014, 09:53:44 pm »
Стало интересно, как можно реализовать загрузку своих dll в игру, известно что для этого требуется делать правки в .exe через hex редактор. Хотелось бы сделать для gta sa, вообще это делать в принципе не особо нужно, но дело в том что .asi загружаются лишь где-то после окончания роликов при запуске игры, т.е. немного ограничивает возможности, есть ли у кого нибудь какие то идеи как можно сделать загрузку dll?

написать свой лаунчер .exe который будет запускать gta-vc.exe с твоей dll

11
xanser, спасибо очень полезная информация.

12
Общие вопросы / Re: Уроки с TXD планируются.
« : Январь 04, 2014, 02:13:54 am »
Цитировать
Sektor, попробуй описать класс CSprite2d,
С этим еще по позже, в начале сама суть процесса...

Урок готов!

просто супер, хорошая работа  :)

13
О сайте и форумах / Re: Всех с новым годом 2014!
« : Январь 01, 2014, 04:18:55 am »
happy new year  :)

14
Общие вопросы / Re: RoadBlock
« : Декабрь 26, 2013, 05:39:05 am »
Именно.

вроде работает, спасибо  :)

15
Общие вопросы / Re: RoadBlock
« : Декабрь 26, 2013, 05:06:54 am »
Как вариант, за NOP-ить эту строку, т.е 5 байтов.

Код: ASM
  1. .text:004A4656 008 E8 25 FC F9 FF                                                  call    _ZN11CRoadBlocks18GenerateRoadBlocksEv ; CRoadBlocks::GenerateRoadBlocks(void)
  2.  

вот так?

Код: C++
  1.        
  2. DWORD dwVP, dwVP2;
  3.  
  4. VirtualProtect((PVOID)0x4A4656, 5, PAGE_EXECUTE_READWRITE, &dwVP);
  5. memset((PVOID)0x4A4656, 0x90, 5);
  6. VirtualProtect((PVOID)0x4A4656, 5, dwVP, &dwVP2);
  7.  

Страницы: [1] 2