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>
178 lines
5.5 KiB
C++
178 lines
5.5 KiB
C++
// HumanSimpleParty.cpp: implementation of the CHumanSimpleParty class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ClientMain.h"
|
|
#include "GUITextEdit.h"
|
|
#include "HumanSimpleParty.h"
|
|
#include "CharacterControl.h"
|
|
#include "WinInput.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CHumanSimpleParty::CHumanSimpleParty()
|
|
{
|
|
}
|
|
|
|
CHumanSimpleParty::~CHumanSimpleParty()
|
|
{
|
|
}
|
|
|
|
BOOL CHumanSimpleParty::Init(unsigned short x, unsigned short y)
|
|
{
|
|
CSprite *lpSprite;
|
|
lpSprite = new CSprite;
|
|
lpSprite->Create(x, 0, 0, 0, 126, 22, g_ClientMain.m_lpInterface->m_lstTexture[28]);
|
|
m_lstSprite.push_back(lpSprite);
|
|
|
|
lpSprite = new CSprite; // HP
|
|
lpSprite->Create(x + 99, 5, 32, 22, 53, 26, g_ClientMain.m_lpInterface->m_lstTexture[28]);
|
|
m_lstSprite.push_back(lpSprite);
|
|
|
|
lpSprite = new CSprite; // MP
|
|
lpSprite->Create(x + 99, 10, 32, 26, 53, 30, g_ClientMain.m_lpInterface->m_lstTexture[28]);
|
|
m_lstSprite.push_back(lpSprite);
|
|
|
|
lpSprite = new CSprite; // Àå½Ä
|
|
lpSprite->Create(x + 76, 0, 76, 22, 126, 58, g_ClientMain.m_lpInterface->m_lstTexture[28]);
|
|
m_lstSprite.push_back(lpSprite);
|
|
|
|
m_dwWindowKind = WINDOW_FIX;
|
|
|
|
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
|
|
m_rcWindowSize.right = x + 126; m_rcWindowSize.bottom = y + 22;
|
|
|
|
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
|
|
m_rcMoveEdge.right = x + 126; m_rcMoveEdge.bottom = y + 22;
|
|
|
|
InitValue();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CHumanSimpleParty::InitValue(void)
|
|
{
|
|
}
|
|
|
|
BOOL CHumanSimpleParty::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;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CHumanSimpleParty::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
|
|
{
|
|
RECT rcRect;
|
|
CCreature *lpCreature;
|
|
char strTempName[16], strDot[4] = "...";
|
|
unsigned long lengthDot = g_TextEdit.GetStringLength(strDot);
|
|
int count = 1;
|
|
|
|
for(int i = 0; i < g_ClientMain.m_csStatus.m_PartyInfo.m_cMemberNum; i++)
|
|
{
|
|
if(g_ClientMain.m_csStatus.m_PartyInfo.ServerID[i])
|
|
{
|
|
if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] == g_ClientMain.m_dwMyChrID)
|
|
{
|
|
m_lstSprite[0]->Render(lpD3DDevice, 0xFF, 0, 0);
|
|
|
|
SetRect(&rcRect, m_rcWindowSize.left + 3, 0, m_rcWindowSize.left + 93, 22);
|
|
if(g_TextEdit.GetStringLength(g_ClientMain.m_csStatus.m_PartyInfo.Name[i]) > 90)
|
|
{
|
|
int nNumUnicode = 0;
|
|
for(int j = 0; j < 15; j++)
|
|
{
|
|
strTempName[j] = g_ClientMain.m_csStatus.m_PartyInfo.Name[i][j];
|
|
strTempName[j + 1] = '\0';
|
|
if(strTempName[j] & 0x80) nNumUnicode++;
|
|
if(g_TextEdit.GetStringLength(strTempName) + lengthDot > 90)
|
|
{
|
|
if(nNumUnicode % 2)
|
|
{
|
|
memcpy(&strTempName[j], strDot, 4);
|
|
} else
|
|
{
|
|
memcpy(&strTempName[j - 1], strDot, 4);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
g_TextEdit.DrawText(strTempName, &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255));
|
|
} else
|
|
{
|
|
g_TextEdit.DrawText(g_ClientMain.m_csStatus.m_PartyInfo.Name[i], &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255));
|
|
}
|
|
|
|
m_lstSprite[1]->SetRate(g_ClientMain.m_csStatus.m_Info.HP / (float)g_ClientMain.m_csStatus.m_MaxHP);
|
|
m_lstSprite[1]->Render(lpD3DDevice, 0xFF, 0, 0);
|
|
m_lstSprite[2]->SetRate(g_ClientMain.m_csStatus.m_Info.MP / (float)g_ClientMain.m_csStatus.m_MaxMP);
|
|
m_lstSprite[2]->Render(lpD3DDevice, 0xFF, 0, 0);
|
|
} else
|
|
{
|
|
m_lstSprite[0]->Render(lpD3DDevice, 0xFF, 0, count * 22);
|
|
|
|
SetRect(&rcRect, m_rcWindowSize.left + 3, count * 22, m_rcWindowSize.left + 93, count * 22 + 22);
|
|
if(g_TextEdit.GetStringLength(g_ClientMain.m_csStatus.m_PartyInfo.Name[i]) > 90)
|
|
{
|
|
int nNumUnicode = 0;
|
|
for(int j = 0; j < 15; j++)
|
|
{
|
|
strTempName[j] = g_ClientMain.m_csStatus.m_PartyInfo.Name[i][j];
|
|
strTempName[j + 1] = '\0';
|
|
if(strTempName[j] & 0x80) nNumUnicode++;
|
|
if(g_TextEdit.GetStringLength(strTempName) + lengthDot > 90)
|
|
{
|
|
if(nNumUnicode % 2)
|
|
{
|
|
memcpy(&strTempName[j], strDot, 4);
|
|
} else
|
|
{
|
|
memcpy(&strTempName[j - 1], strDot, 4);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
g_TextEdit.DrawText(strTempName, &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255));
|
|
} else
|
|
{
|
|
g_TextEdit.DrawText(g_ClientMain.m_csStatus.m_PartyInfo.Name[i], &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255));
|
|
}
|
|
|
|
lpCreature = g_CharacterData.GetCreature(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]);
|
|
if(lpCreature)
|
|
{
|
|
if(lpCreature->m_wMaxHP != 0)
|
|
{
|
|
m_lstSprite[1]->SetRate(lpCreature->m_sCurrHP / (float)lpCreature->m_wMaxHP);
|
|
m_lstSprite[1]->Render(lpD3DDevice, 0xFF, 0, count * 22);
|
|
}
|
|
if(lpCreature->m_wMaxMP != 0)
|
|
{
|
|
m_lstSprite[2]->SetRate(lpCreature->m_sCurrMP / (float)lpCreature->m_wMaxMP);
|
|
m_lstSprite[2]->Render(lpD3DDevice, 0xFF, 0, count * 22);
|
|
}
|
|
}
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(g_ClientMain.m_csStatus.m_PartyInfo.m_cMemberNum)
|
|
m_lstSprite[3]->Render(lpD3DDevice, 0xFF, 0, count * 22);
|
|
else
|
|
m_lstSprite[3]->Render(lpD3DDevice, 0xFF, 0, 0);
|
|
}
|