Files
Client/GameTools/NeoRylClient/HumanStatus.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

386 lines
16 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// HumanStatus.cpp: implementation of the CHumanStatus class.
//
//////////////////////////////////////////////////////////////////////
#include "ClientMain.h"
#include "HumanStatus.h"
#include "GUITextEdit.h"
#include "WinInput.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHumanStatus::CHumanStatus()
{
}
CHumanStatus::~CHumanStatus()
{
}
BOOL CHumanStatus::Init(unsigned short x, unsigned short y)
{
CSprite *lpSprite;
lpSprite = new CSprite;
lpSprite->Create(x, y, 0, 0, 222, 256, g_ClientMain.m_lpInterface->m_lstTexture[4]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x, y + 256, 0, 0, 222, 224, g_ClientMain.m_lpInterface->m_lstTexture[5]);
m_lstSprite.push_back(lpSprite);
CGUIButton *lpButton;
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(93, 239, 0, 224, 16, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(93, 239, 16, 224, 32, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->SetTooltip(&m_TooltipManager, "1");
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(191, 239, 0, 224, 16, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(191, 239, 16, 224, 32, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->SetTooltip(&m_TooltipManager, "2");
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(93, 266, 0, 224, 16, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(93, 266, 16, 224, 32, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->SetTooltip(&m_TooltipManager, "3");
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(191, 266, 0, 224, 16, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(191, 266, 16, 224, 32, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->SetTooltip(&m_TooltipManager, "4");
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(93, 292, 0, 224, 16, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(93, 292, 16, 224, 32, 239, g_ClientMain.m_lpInterface->m_lstTexture[5]);
lpButton->SetTooltip(&m_TooltipManager, "5");
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(190, 1, 0, 0, 28, 28, g_ClientMain.m_lpInterface->m_lpCommonWindow);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(190, 1, 28, 0, 56, 28, g_ClientMain.m_lpInterface->m_lpCommonWindow);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[240]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
m_bShow = FALSE;
m_dwWindowKind = WINDOW_FIX;
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
m_rcWindowSize.right = x + 222; m_rcWindowSize.bottom = y + 480;
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
m_rcMoveEdge.right = x + 150; m_rcMoveEdge.bottom = y + 20;
return TRUE;
}
BOOL CHumanStatus::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;
}
}
if(g_ClientMain.m_csStatus.m_Info.IP)
{
char strString[100];
m_ButtonManager.m_lstButton[0]->ShowButton(TRUE);
sprintf(strString, g_StringTable.m_strString[241], g_ClientMain.m_csStatus.GetUseIP(STATUS_STR));
((CGUITooltipButton *)(m_ButtonManager.m_lstButton[0]->m_lpTooltip))->InitTooltip(strString);
m_ButtonManager.m_lstButton[1]->ShowButton(TRUE);
sprintf(strString, g_StringTable.m_strString[241], g_ClientMain.m_csStatus.GetUseIP(STATUS_DEX));
((CGUITooltipButton *)(m_ButtonManager.m_lstButton[1]->m_lpTooltip))->InitTooltip(strString);
m_ButtonManager.m_lstButton[2]->ShowButton(TRUE);
sprintf(strString, g_StringTable.m_strString[241], g_ClientMain.m_csStatus.GetUseIP(STATUS_WIS));
((CGUITooltipButton *)(m_ButtonManager.m_lstButton[2]->m_lpTooltip))->InitTooltip(strString);
m_ButtonManager.m_lstButton[3]->ShowButton(TRUE);
sprintf(strString, g_StringTable.m_strString[241], g_ClientMain.m_csStatus.GetUseIP(STATUS_INT));
((CGUITooltipButton *)(m_ButtonManager.m_lstButton[3]->m_lpTooltip))->InitTooltip(strString);
m_ButtonManager.m_lstButton[4]->ShowButton(TRUE);
sprintf(strString, g_StringTable.m_strString[241], g_ClientMain.m_csStatus.GetUseIP(STATUS_CON));
((CGUITooltipButton *)(m_ButtonManager.m_lstButton[4]->m_lpTooltip))->InitTooltip(strString);
} else
{
m_ButtonManager.m_lstButton[0]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[1]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[2]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[3]->ShowButton(FALSE);
m_ButtonManager.m_lstButton[4]->ShowButton(FALSE);
}
m_ButtonManager.Update();
m_TooltipManager.Update();
if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_CLICK)
{
g_ClientMain.m_Network.m_pSocket->CharIncreasePoint(g_ClientMain.m_dwMyChrID, ClientSocket::StateType_STR);
} else if(m_ButtonManager.m_lstButton[1]->m_nState == BUTTON_CLICK)
{
g_ClientMain.m_Network.m_pSocket->CharIncreasePoint(g_ClientMain.m_dwMyChrID, ClientSocket::StateType_DEX);
} else if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_CLICK)
{
g_ClientMain.m_Network.m_pSocket->CharIncreasePoint(g_ClientMain.m_dwMyChrID, ClientSocket::StateType_WIS);
} else if(m_ButtonManager.m_lstButton[3]->m_nState == BUTTON_CLICK)
{
g_ClientMain.m_Network.m_pSocket->CharIncreasePoint(g_ClientMain.m_dwMyChrID, ClientSocket::StateType_INT);
} else if(m_ButtonManager.m_lstButton[4]->m_nState == BUTTON_CLICK)
{
g_ClientMain.m_Network.m_pSocket->CharIncreasePoint(g_ClientMain.m_dwMyChrID, ClientSocket::StateType_CON);
} else if(m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_CLICK)
{
m_ButtonManager.m_lstButton[5]->m_nState = BUTTON_NONE;
m_bShow = FALSE;
}
return TRUE;
}
void CHumanStatus::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
{
m_lstSprite[0]->Render(lpD3DDevice, m_cAlpha);
m_lstSprite[1]->Render(lpD3DDevice, m_cAlpha);
RECT rcRect;
char strString[MAX_PATH];
// <20≯<EFBFBD>
SetRect(&rcRect, 38 + m_rcWindowSize.left, 36 + m_rcWindowSize.top, 198 + m_rcWindowSize.left, 50 + m_rcWindowSize.top);
g_TextEdit.DrawText(g_ClientMain.m_csStatus.m_Info.Name, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// Ŭ<><C5AC><EFBFBD><EFBFBD>
SetRect(&rcRect, 80 + m_rcWindowSize.left, 59 + m_rcWindowSize.top, 189 + m_rcWindowSize.left, 73 + m_rcWindowSize.top);
g_TextEdit.DrawText(g_ClientMain.m_lpCommonInterface->GetClassName(g_ClientMain.m_csStatus.m_Info.Class), &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// <20><><EFBFBD><EFBFBD>
SetRect(&rcRect, 80 + m_rcWindowSize.left, 105 + m_rcWindowSize.top, 189 + m_rcWindowSize.left, 119 + m_rcWindowSize.top);
int nMerits = g_ClientMain.m_csStatus.m_Info.Merits;
int nMeritsNameField = 0;
if( 1 <= nMerits && nMerits <= 1000 )
{
nMeritsNameField = 1;
}
else if( 1001 <= nMerits && nMerits <= 3000 )
{
nMeritsNameField = 2;
}
else if( 3001 <= nMerits && nMerits <= 6000 )
{
nMeritsNameField = 3;
}
else if( 6001 <= nMerits )
{
nMeritsNameField = 4;
}
int nClassInfo = 0;
switch( g_ClientMain.m_csStatus.m_Info.Class )
{
case 5: // Defender
nClassInfo = 0;
break;
case 6: // Warrior
nClassInfo = 1;
break;
case 7: // Assasin
nClassInfo = 2;
break;
case 8: // Archer
nClassInfo = 3;
break;
case 9: // Sorcerer
nClassInfo = 4;
break;
case 10: // Enchanter
nClassInfo = 5;
break;
case 11: // Priest
nClassInfo = 6;
break;
case 12: // Cleric
nClassInfo = 7;
break;
case 19: // Templer
nClassInfo = 8;
break;
case 20: // Attacker
nClassInfo = 9;
break;
case 21: // Gunner
nClassInfo = 10;
break;
case 22: // Rune Ope
nClassInfo = 11;
break;
case 23: // Life Ope
nClassInfo = 12;
break;
case 24: // Shadow Ope
nClassInfo = 13;
break;
}
if( nMeritsNameField == 0 || nClassInfo == 0)
{
g_TextEdit.DrawText("None", &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
}
else
{
int nStringTable = nClassInfo * 4 + 1000 + nMeritsNameField - 1 ;
strcpy( strString, g_StringTable.m_strString[ nStringTable ] );
g_TextEdit.DrawText( strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
}
// <20><><EFBFBD>
SetRect(&rcRect, 80 + m_rcWindowSize.left, 129 + m_rcWindowSize.top, 189 + m_rcWindowSize.left, 143 + m_rcWindowSize.top);
sprintf(strString, "%d", g_ClientMain.m_csStatus.m_Info.Merits);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// <20><><EFBFBD><EFBFBD>
SetRect(&rcRect, 80 + m_rcWindowSize.left, 153 + m_rcWindowSize.top, 189 + m_rcWindowSize.left, 166 + m_rcWindowSize.top);
sprintf(strString, "%d", g_ClientMain.m_csStatus.m_Info.Fame);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// <20><><EFBFBD><EFBFBD>
SetRect(&rcRect, 80 + m_rcWindowSize.left, 175 + m_rcWindowSize.top, 189 + m_rcWindowSize.left, 189 + m_rcWindowSize.top);
sprintf(strString, "%d", g_ClientMain.m_csStatus.m_Info.Level);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// <20><><EFBFBD><EFBFBD>ġ
SetRect(&rcRect, 80 + m_rcWindowSize.left, 199 + m_rcWindowSize.top, 189 + m_rcWindowSize.left, 213 + m_rcWindowSize.top);
sprintf(strString, "%4.2f %%", (float)((double)g_ClientMain.m_csStatus.m_Info.Exp / (double)g_ClientMain.m_csStatus.m_llExpMax * 100.0f));
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
SetRect(&rcRect, 59 + m_rcWindowSize.left, 239 + m_rcWindowSize.top, 92 + m_rcWindowSize.left, 256 + m_rcWindowSize.top);
g_ClientMain.m_lpCommonInterface->RenderNum(lpD3DDevice, g_ClientMain.m_csStatus.m_Info.STR, &rcRect);
SetRect(&rcRect, 158 + m_rcWindowSize.left, 239 + m_rcWindowSize.top, 191 + m_rcWindowSize.left, 256 + m_rcWindowSize.top);
g_ClientMain.m_lpCommonInterface->RenderNum(lpD3DDevice, g_ClientMain.m_csStatus.m_Info.DEX, &rcRect);
SetRect(&rcRect, 59 + m_rcWindowSize.left, 267 + m_rcWindowSize.top, 92 + m_rcWindowSize.left, 284 + m_rcWindowSize.top);
g_ClientMain.m_lpCommonInterface->RenderNum(lpD3DDevice, g_ClientMain.m_csStatus.m_Info.WIS, &rcRect);
SetRect(&rcRect, 158 + m_rcWindowSize.left, 267 + m_rcWindowSize.top, 191 + m_rcWindowSize.left, 284 + m_rcWindowSize.top);
g_ClientMain.m_lpCommonInterface->RenderNum(lpD3DDevice, g_ClientMain.m_csStatus.m_Info.INT, &rcRect);
SetRect(&rcRect, 59 + m_rcWindowSize.left, 293 + m_rcWindowSize.top, 92 + m_rcWindowSize.left, 310 + m_rcWindowSize.top);
g_ClientMain.m_lpCommonInterface->RenderNum(lpD3DDevice, g_ClientMain.m_csStatus.m_Info.CON, &rcRect);
if(g_ClientMain.m_csStatus.m_Info.IP)
{
SetRect(&rcRect, 158 + m_rcWindowSize.left, 304 + m_rcWindowSize.top, 191 + m_rcWindowSize.left, 321 + m_rcWindowSize.top);
g_ClientMain.m_lpCommonInterface->RenderNum(lpD3DDevice, g_ClientMain.m_csStatus.m_Info.IP, &rcRect);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 345 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 358 + m_rcWindowSize.top);
sprintf(strString, "%d ~ %d", g_ClientMain.m_csStatus.m_lMinDamage, g_ClientMain.m_csStatus.m_lMaxDamage);
long m_lDamage = g_ClientMain.m_csStatus.m_lMinDamage + (g_ClientMain.m_csStatus.m_lMaxDamage - g_ClientMain.m_csStatus.m_lMinDamage) / 2;
long m_lRealDamage = g_ClientMain.m_csStatus.m_lRealMinDamage + (g_ClientMain.m_csStatus.m_lRealMaxDamage - g_ClientMain.m_csStatus.m_lRealMinDamage) / 2;
if(m_lDamage < m_lRealDamage)
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 0, 0, m_cAlpha));
} else if(m_lDamage > m_lRealDamage)
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(0, 255, 0, m_cAlpha));
} else
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 364 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 377 + m_rcWindowSize.top);
sprintf(strString, "%d", g_ClientMain.m_csStatus.m_lDefensePower);
if(g_ClientMain.m_csStatus.m_lDefensePower < g_ClientMain.m_csStatus.m_lRealDefensePower)
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 0, 0, m_cAlpha));
} else if(g_ClientMain.m_csStatus.m_lDefensePower > g_ClientMain.m_csStatus.m_lRealDefensePower)
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(0, 255, 0, m_cAlpha));
} else
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
}
// <20><><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 383 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 395 + m_rcWindowSize.top);
sprintf(strString, "%d", g_ClientMain.m_csStatus.m_lAttackRevision);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// <20><><EFBFBD><EFBFBD><EEBAB8>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 402 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 415 + m_rcWindowSize.top);
sprintf(strString, "%d", g_ClientMain.m_csStatus.m_lDefenseRevision);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// ũ<><C5A9>Ƽ<EFBFBD><C6BC> Ȯ<><C8AE>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 421 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 434 + m_rcWindowSize.top);
sprintf(strString, "%d %%", g_ClientMain.m_csStatus.m_lCriticalPercent);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
// <20><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 439 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 452 + m_rcWindowSize.top);
sprintf(strString, "%3.1f %%", g_ClientMain.m_csStatus.m_fBlockPercent);
if(g_ClientMain.m_csStatus.m_fBlockPercent < g_ClientMain.m_csStatus.m_fRealBlockPercent)
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 0, 0, m_cAlpha));
} else if(g_ClientMain.m_csStatus.m_fBlockPercent > g_ClientMain.m_csStatus.m_fRealBlockPercent)
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(0, 255, 0, m_cAlpha));
} else
{
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
}
// <20><EFBFBD><EBB8B6>
SetRect(&rcRect, 152 + m_rcWindowSize.left, 457 + m_rcWindowSize.top, 204 + m_rcWindowSize.left, 470 + m_rcWindowSize.top);
sprintf(strString, "%d %%", g_ClientMain.m_csStatus.m_lMagicResistance);
g_TextEdit.DrawText(strString, &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, m_cAlpha));
m_ButtonManager.Render(lpD3DDevice);
}