Files
Client/GameTools/NeoRylClient/HumanMinimap.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

873 lines
31 KiB
C++

// HumanMinimap.cpp: implementation of the CHumanMinimap class.
//
//////////////////////////////////////////////////////////////////////
#include "ClientMain.h"
#include "WinInput.h"
#include "GUITextEdit.h"
#include "HumanMinimap.h"
#include "Creature\NPC\NPCList.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHumanMinimap::CHumanMinimap()
{
}
CHumanMinimap::~CHumanMinimap()
{
}
BOOL CHumanMinimap::Init(unsigned short x, unsigned short y)
{
CSprite *lpSprite;
lpSprite = new CSprite;
lpSprite->Create(x, y, 123, 0, 206, 104, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x + 83, y, 105, 0, 121, 104, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x + 38, y + 102, 40, 156, 78, 183, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x, y, 221, 104, 238, 171, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 자신 표시 : 4
lpSprite->Create(43 - 5, 43 - 7, 188, 136, 199, 152, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // PC 표시 : 5
lpSprite->Create(0, 0, 132, 156, 139, 163, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // NPC 표시 : 6
lpSprite->Create(0, 0, 121, 156, 128, 163, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // MONSTER 표시 : 7
lpSprite->Create(0, 0, 143, 156, 150, 163, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 파티원 표시 : 8
lpSprite->Create(0, 0, 154, 156, 161, 163, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 퀘스트 표시 : 9
lpSprite->Create(0, 0, 121, 135, 139, 152, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 퀘스트 표시 : 10
lpSprite->Create(0, 0, 143, 135, 161, 152, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 퀘스트 표시 : 11
lpSprite->Create(0, 0, 165, 135, 183, 152, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 듀얼 상대 표시 : 12
lpSprite->Create(0, 0, 165, 156, 172, 163, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 무기상인 : 13
lpSprite->Create(0, 0, 121, 165, 133, 177, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 방어구상인 : 14
lpSprite->Create(0, 0, 133, 165, 145, 177, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 잡화상인 : 15
lpSprite->Create(0, 0, 145, 165, 157, 177, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 트레이너 : 16
lpSprite->Create(0, 0, 157, 165, 169, 177, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 순간이동술사 : 17
lpSprite->Create(0, 0, 169, 165, 181, 177, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 대장장이 : 18
lpSprite->Create(0, 0, 158, 120, 170, 132, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 창고 : 19
lpSprite->Create(0, 0, 170, 120, 182, 132, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 아카데미 : 20
lpSprite->Create(0, 0, 182, 120, 194, 132, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 무기암시장 : 21
lpSprite->Create(0, 0, 194, 120, 206, 132, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 방어구암시장 : 22
lpSprite->Create(0, 0, 206, 120, 218, 132, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 적 종족 표시 : 23
lpSprite->Create(0, 0, 174, 157, 179, 162, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite; // 반전단체 : 24
lpSprite->Create(0, 0, 206, 132, 218, 144, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
CGUIButton *lpButton;
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(x + 84, y + 34, 105, 104, 118, 125, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(x + 84, y + 34, 118, 104, 131, 125, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[186]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(x + 1, y + 34, 131, 104, 144, 125, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(x + 1, y + 34, 144, 104, 157, 125, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[187]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(x + 83, y + 62, 157, 104, 173, 119, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(x + 83, y + 62, 173, 104, 189, 119, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[188]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(x + 83, y + 85, 189, 104, 205, 119, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(x + 83, y + 85, 205, 104, 221, 119, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[189]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
m_dwWindowKind = WINDOW_FIX;
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
m_rcWindowSize.right = x + 100; m_rcWindowSize.bottom = y + 104;
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
m_rcMoveEdge.right = x + 100; m_rcMoveEdge.bottom = y + 104;
InitValue();
return TRUE;
}
void CHumanMinimap::InitValue(void)
{
m_MiniMapSize = 256;
m_bFullSize = TRUE;
m_ButtonManager.m_lstButton[0]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[1]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[2]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[3]->ShowButton(TRUE);
}
BOOL CHumanMinimap::Update(BOOL &bClick, BOOL &bEdge)
{
if(g_DeviceInput.InRect(m_rcWindowSize.left, m_rcWindowSize.top, m_rcWindowSize.right, m_rcWindowSize.bottom))
{
bEdge = TRUE;
if(g_DeviceInput.GetIsLeftMouseDown() || g_DeviceInput.GetIsMiddleMouseDown() || g_DeviceInput.GetIsRightMouseDown() ||
g_DeviceInput.GetIsLeftMousePress() || g_DeviceInput.GetIsMiddleMousePress() || g_DeviceInput.GetIsRightMousePress() ||
g_DeviceInput.GetIsLeftMouseUp() || g_DeviceInput.GetIsMiddleMouseUp() || g_DeviceInput.GetIsRightMouseUp())
{
bClick = TRUE;
}
}
m_ButtonManager.Update();
m_TooltipManager.Update();
if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_CLICK)
{
m_bFullSize = FALSE;
m_rcWindowSize.right = m_rcWindowSize.left + 16;
m_rcWindowSize.bottom = m_rcWindowSize.top + 66;
m_ButtonManager.m_lstButton[0]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[1]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[2]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[3]->ShowButton(FALSE);
} else if(m_ButtonManager.m_lstButton[1]->m_nState == BUTTON_CLICK)
{
m_bFullSize = TRUE;
m_rcWindowSize.right = m_rcWindowSize.left + 100;
m_rcWindowSize.bottom = m_rcWindowSize.top + 104;
m_ButtonManager.m_lstButton[0]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[1]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[2]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[3]->ShowButton(TRUE);
} else if(!g_TextEdit.IsFocus() && (m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_PRESS || g_DeviceInput.KeyHold(VK_ADD)))
{
m_MiniMapSize += 20;
if(m_MiniMapSize > 512) m_MiniMapSize = 512;
} else if(!g_TextEdit.IsFocus() && (m_ButtonManager.m_lstButton[3]->m_nState == BUTTON_PRESS || g_DeviceInput.KeyHold(VK_SUBTRACT)))
{
m_MiniMapSize -= 20;
if(m_MiniMapSize < 128) m_MiniMapSize = 128;
}
return TRUE;
}
void CHumanMinimap::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
{
if(!m_bFullSize)
{
m_lstSprite[3]->Render(lpD3DDevice);
m_ButtonManager.Render(lpD3DDevice);
return;
}
int nChrPosX = (g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.x / SECTORSIZE);
int nChrPosZ = (g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.z / SECTORSIZE);
int nMoveX = ((g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.x - (nChrPosX * SECTORSIZE)) / SECTORSIZE) * m_MiniMapSize;
int nMoveZ = ((g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.z - (nChrPosZ * SECTORSIZE)) / SECTORSIZE) * m_MiniMapSize;
lpD3DDevice->SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP);
lpD3DDevice->SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP);
/////////////////////////////////////////////////////////////////////////////////////////////////////
// 지도 텍스쳐 부르기
/////////////////////////////////////////////////////////////////////////////////////////////////////
CTexture::SetPath(WIDETEXTUREPATH);
FILE *fp = NULL;
char strMiniMapFileName[MAX_PATH];
sprintf(strMiniMapFileName, "%d_%d", nChrPosX, nChrPosZ);
if(strstr(m_MiniMapTexture[4].m_strName, strMiniMapFileName) == NULL)
{
if(m_MiniMapTexture[4].GetTexture())
m_MiniMapTexture[4].Unload();
sprintf(strMiniMapFileName, "%s\\%d_%d_detail.dds", WIDETEXTUREPATH, nChrPosX, nChrPosZ);
if((fp = fopen(strMiniMapFileName, "rb")) == NULL)
{
sprintf(strMiniMapFileName, "%s\\%d_%d.dds", WIDETEXTUREPATH, nChrPosX, nChrPosZ);
fp = fopen(strMiniMapFileName, "rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName, "%d_%d.dds", nChrPosX, nChrPosZ);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[4].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[4].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName, "%d_%d_detail.dds", nChrPosX, nChrPosZ);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[4].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName, "%d_%d", nChrPosX - 1, nChrPosZ + 1);
if(strstr(m_MiniMapTexture[0].m_strName, strMiniMapFileName) == NULL)
{
if(m_MiniMapTexture[0].GetTexture())
m_MiniMapTexture[0].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX-1,nChrPosZ+1);
fp=fopen(strMiniMapFileName,"rb");
if((fp)==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX-1,nChrPosZ+1);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX-1,nChrPosZ+1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[0].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[0].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX-1,nChrPosZ+1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[0].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d",nChrPosX,nChrPosZ+1);
if(strstr(m_MiniMapTexture[1].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[1].GetTexture())
m_MiniMapTexture[1].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX,nChrPosZ+1);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX,nChrPosZ+1);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX,nChrPosZ+1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[1].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[1].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX,nChrPosZ+1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[1].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX+1,nChrPosZ+1);
if(strstr(m_MiniMapTexture[2].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[2].GetTexture())
m_MiniMapTexture[2].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX+1,nChrPosZ+1);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX+1,nChrPosZ+1);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX+1,nChrPosZ+1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[2].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[2].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX+1,nChrPosZ+1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[2].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX-1,nChrPosZ);
if(strstr(m_MiniMapTexture[3].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[3].GetTexture())
m_MiniMapTexture[3].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX-1,nChrPosZ);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX-1,nChrPosZ);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX-1,nChrPosZ);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[3].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[3].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX-1,nChrPosZ);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[3].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX+1,nChrPosZ);
if(strstr(m_MiniMapTexture[5].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[5].GetTexture())
m_MiniMapTexture[5].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX+1,nChrPosZ);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX+1,nChrPosZ);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX+1,nChrPosZ);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[5].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[5].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX+1,nChrPosZ);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[5].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX-1,nChrPosZ-1);
if(strstr(m_MiniMapTexture[6].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[6].GetTexture())
m_MiniMapTexture[6].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX-1,nChrPosZ-1);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX-1,nChrPosZ-1);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX-1,nChrPosZ-1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[6].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[6].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX-1,nChrPosZ-1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[6].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX,nChrPosZ-1);
if(strstr(m_MiniMapTexture[7].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[7].GetTexture())
m_MiniMapTexture[7].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX,nChrPosZ-1);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX,nChrPosZ-1);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX,nChrPosZ-1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[7].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[7].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX,nChrPosZ-1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[7].Load(strMiniMapFileName);
}
}
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX+1,nChrPosZ-1);
if(strstr(m_MiniMapTexture[8].m_strName,strMiniMapFileName)==NULL)
{
if(m_MiniMapTexture[8].GetTexture())
m_MiniMapTexture[8].Unload();
sprintf(strMiniMapFileName,"%s\\%d_%d_detail.dds",WIDETEXTUREPATH,nChrPosX+1,nChrPosZ-1);
if((fp=fopen(strMiniMapFileName,"rb"))==NULL)
{
sprintf(strMiniMapFileName,"%s\\%d_%d.dds",WIDETEXTUREPATH,nChrPosX+1,nChrPosZ-1);
fp=fopen(strMiniMapFileName,"rb");
if(fp)
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d.dds",nChrPosX+1,nChrPosZ-1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[8].Load(strMiniMapFileName);
}
else
{
CTexture::SetPath(INTERFACETEXTUREPATH);
m_MiniMapTexture[8].Load("hig1.dds");
}
}
else
{
fclose(fp);
sprintf(strMiniMapFileName,"%d_%d_detail.dds",nChrPosX+1,nChrPosZ-1);
CTexture::SetPath(WIDETEXTUREPATH);
m_MiniMapTexture[8].Load(strMiniMapFileName);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
TLVertex2 Vertex[4];
Vertex[0].Diffuse.c = Vertex[1].Diffuse.c = Vertex[2].Diffuse.c = Vertex[3].Diffuse.c = 0xffffffff;
Vertex[0].Specular.c = Vertex[1].Specular.c = Vertex[2].Specular.c = Vertex[3].Specular.c = 0;
Vertex[0].w = Vertex[1].w = Vertex[2].w = Vertex[3].w = 0.1f;
Vertex[0].v.z = Vertex[1].v.z = Vertex[2].v.z = Vertex[3].v.z = 0.1f;
float fCenterX = Vertex[0].v.x = Vertex[1].v.x = 0 - nMoveX + 43;
Vertex[2].v.x = Vertex[3].v.x = m_MiniMapSize - nMoveX + 43;
float fCenterZ = Vertex[0].v.y = Vertex[2].v.y = 0 + nMoveZ - m_MiniMapSize + 43;
Vertex[1].v.y = Vertex[3].v.y = m_MiniMapSize + nMoveZ - m_MiniMapSize + 43;
Vertex[0].tu1 = Vertex[1].tu1 = 0.0f + 0.5f / (float)m_MiniMapSize;
Vertex[2].tu1 = Vertex[3].tu1 = 1.0f - 0.5f / (float)m_MiniMapSize;
Vertex[0].tv1 = Vertex[2].tv1 = 1.0f - 0.5f / (float)m_MiniMapSize;
Vertex[1].tv1 = Vertex[3].tv1 = 0.0f + 0.5f / (float)m_MiniMapSize;
for(int i = 0; i < 4; i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(0, g_ClientMain.m_lpInterface->m_lstTexture[27]->GetTexture());
lpD3DDevice->SetTexture(1, m_MiniMapTexture[4].GetTexture());
lpD3DDevice->SetVertexShader(TLVERTEX2FVF);
lpD3DDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
lpD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
lpD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
lpD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
lpD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
lpD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
lpD3DDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
lpD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
lpD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG2, D3DTA_CURRENT );
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, Vertex, sizeof(TLVertex2));
lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
//0
Vertex[0].v.x=Vertex[1].v.x=fCenterX-m_MiniMapSize;
Vertex[2].v.x=Vertex[3].v.x=fCenterX;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ-m_MiniMapSize;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1, m_MiniMapTexture[0].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, Vertex, sizeof(TLVertex2));
//1
Vertex[0].v.x=Vertex[1].v.x=fCenterX;
Vertex[2].v.x=Vertex[3].v.x=fCenterX+m_MiniMapSize;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ-m_MiniMapSize;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[1].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
//2
Vertex[0].v.x=Vertex[1].v.x=fCenterX+m_MiniMapSize;
Vertex[2].v.x=Vertex[3].v.x=fCenterX+m_MiniMapSize*2;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ-m_MiniMapSize;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[2].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
//3
Vertex[0].v.x=Vertex[1].v.x=fCenterX-m_MiniMapSize;
Vertex[2].v.x=Vertex[3].v.x=fCenterX;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ+m_MiniMapSize;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[3].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
//5
Vertex[0].v.x=Vertex[1].v.x=fCenterX+m_MiniMapSize;
Vertex[2].v.x=Vertex[3].v.x=fCenterX+m_MiniMapSize*2;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ+m_MiniMapSize;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[5].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
//6
Vertex[0].v.x=Vertex[1].v.x=fCenterX-m_MiniMapSize;
Vertex[2].v.x=Vertex[3].v.x=fCenterX;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ+m_MiniMapSize;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ+m_MiniMapSize*2;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[6].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
//7
Vertex[0].v.x=Vertex[1].v.x=fCenterX;
Vertex[2].v.x=Vertex[3].v.x=fCenterX+m_MiniMapSize;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ+m_MiniMapSize;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ+m_MiniMapSize*2;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[7].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
//8
Vertex[0].v.x=Vertex[1].v.x=fCenterX+m_MiniMapSize;
Vertex[2].v.x=Vertex[3].v.x=fCenterX+m_MiniMapSize*2;
Vertex[0].v.y=Vertex[2].v.y=fCenterZ+m_MiniMapSize;
Vertex[1].v.y=Vertex[3].v.y=fCenterZ+m_MiniMapSize*2;
for(i=0;i<4;i++)
{
Vertex[i].tu = Vertex[i].v.x / (float)128;
Vertex[i].tv = Vertex[i].v.y / (float)128;
}
lpD3DDevice->SetTexture(1,m_MiniMapTexture[8].GetTexture());
lpD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,Vertex,sizeof(TLVertex2));
lpD3DDevice->SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
lpD3DDevice->SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
lpD3DDevice->SetTexture(1, NULL);
lpD3DDevice->SetVertexShader(TLVERTEXFVF);
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
int CenterX,CenterY;
CenterX = 43;
CenterY = 43;
float PixelPerMeter = ((float)m_MiniMapSize/SECTORSIZE);
vector3 vecPos, vecSelfPos = g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos;
RECT rcRect, rcMapSize;
SetRect(&rcMapSize, m_rcWindowSize.left + 2, m_rcWindowSize.top + 1, m_rcWindowSize.left + 83, m_rcWindowSize.top + 85);
vecSelfPos.y = 0.0f;
/* for(int asd = 0; asd < 36; asd++)
{
m_SpriteList[m_BarEnemy].m_PutY = CenterY - 5 - 56 * cosf(FLOAT_DEG(asd * 10.0f));
m_SpriteList[m_BarEnemy].m_PutX = CenterX - 5 + 56 * sinf(FLOAT_DEG(asd * 10.0f));
RenderSprite(m_BarEnemy, lpD3DDevice);
}*/
int nPosX, nPosY;
for(i = 0; i < g_CharacterData.m_lstCharData.num; i++)
{
if(i == g_CharacterData.m_nFocusCharacter) continue;
// if(g_CharacterData.m_lstCharData[i]->m_bUsed == FALSE) continue;
// if(g_CharacterData.m_lstCharData[i]->m_lpChrModel)
{
vecPos = g_CharacterData.m_lstCharData[i]->m_vecPos;
vecPos.y = 0.0f;
vecPos = vecPos - vecSelfPos;
vecPos.x *= PixelPerMeter;
vecPos.z *= PixelPerMeter;
nPosX = CenterX - 2 + vecPos.x;
nPosY = CenterY - 2 - vecPos.z;
if(rcMapSize.left <= nPosX && nPosX <= rcMapSize.right && rcMapSize.top <= nPosY && nPosY <= rcMapSize.bottom)
{
switch(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[i]->m_dwChrID, TRUE))
{
case CT_NPC:
{
LPNPCNode lpNode = g_NPCList.GetNPCNode(g_CharacterData.m_lstCharData[i]->m_dwChrID);
if(lpNode)
{
switch(lpNode->m_dwJob)
{
case POPUP_WEAPONMERCHANT:
case POPUP_A_WEAPONMERCHANT:
m_lstSprite[13]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_DARKWEAPONMERCHANT:
case POPUP_A_DARKWEAPONMERCHANT:
m_lstSprite[21]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_ARMOURMERCHANT:
case POPUP_A_ARMOURMERCHANT:
m_lstSprite[14]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_DARKARMOURMERCHANT:
case POPUP_A_DARKARMOURMERCHANT:
m_lstSprite[22]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_ETCMERCHANT:
case POPUP_A_ETCMERCHANT:
case POPUP_DARKETCMERCHANT:
case POPUP_A_DARKETCMERCHANT:
m_lstSprite[15]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_ADVENTURETRAINER:
case POPUP_FIGHTERTRAINER:
case POPUP_ROGUETRAINER:
case POPUP_MAGETRAINER:
case POPUP_ACOLYTETRAINER:
case POPUP_A_BEGINNERTRAINER:
case POPUP_A_COMBATANTTRAINER:
case POPUP_A_OPPICATERTRAINER:
m_lstSprite[16]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_TELEPORTER:
case POPUP_A_TELEPORTER:
m_lstSprite[17]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_CONTAINER:
case POPUP_A_CONTAINER:
m_lstSprite[19]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
case POPUP_PEACEGUILD:
case POPUP_A_PEACEGUILD:
m_lstSprite[24]->Render(lpD3DDevice, 0xFF, nPosX - 3, nPosY - 3);
break;
default:
m_lstSprite[6]->Render(lpD3DDevice, 0xFF, nPosX, nPosY);
break;
}
}
}
break;
case CT_MONSTER:
if(!g_CharacterData.m_lstCharData[i]->GetChantFlag(17))
{
if(g_CharacterData.GetIsDuelTarget(g_CharacterData.m_lstCharData[i]->m_dwChrID))
m_lstSprite[12]->Render(lpD3DDevice, 0xFF, nPosX, nPosY);
else if(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[i]->m_dwChrID) == CT_PC)
m_lstSprite[23]->Render(lpD3DDevice, 0xFF, nPosX, nPosY);
else
m_lstSprite[7]->Render(lpD3DDevice, 0xFF, nPosX, nPosY);
}
break;
case CT_PC:
// 파티일때 파티로 뿌리기
if(g_ClientMain.m_csStatus.CheckPartyMember(g_CharacterData.m_lstCharData[i]->m_dwChrID))
m_lstSprite[8]->Render(lpD3DDevice, 0xFF, nPosX, nPosY);
else
m_lstSprite[5]->Render(lpD3DDevice, 0xFF, nPosX, nPosY);
break;
}
}
}
}
m_lstSprite[4]->Render(lpD3DDevice, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection + FLOAT_PHI, 128);
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
m_lstSprite[0]->Render(lpD3DDevice);
m_lstSprite[1]->Render(lpD3DDevice);
m_lstSprite[2]->Render(lpD3DDevice);
char temp[50];
SetRect(&rcRect, m_rcWindowSize.left + 12, m_rcWindowSize.top + 88, m_rcWindowSize.left + 71, m_rcWindowSize.top + 99);
// sprintf(temp, "%f, %f, %f, %f", (vecSelfPos.x / 100.0f), (vecSelfPos.y / 100.0f), (vecSelfPos.z / 100.0f), CCharacterData::m_CharDataSetList[0]->m_pChrmodel->GetDirection() + 3.14159f);
sprintf(temp, "%d, %d", (long)(vecSelfPos.x / 100.0f), (long)(vecSelfPos.z / 100.0f));
g_TextEdit.DrawText(temp, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, 255));
m_ButtonManager.Render(lpD3DDevice);
}