Files
Client/Server/RylServerProject/RylGameLibrary/Network/Dispatch/GameClient/ParseCharLevelUp.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

80 lines
2.6 KiB
C++

#include "stdafx.h"
#include "ParseCharLevelUp.h"
#include "SendCharLevelUp.h"
#include "GameClientDispatch.h"
#include <Network/Dispatch/ParseUtils.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Creature/Character/Character.h>
// 클래스 업그레이드
bool GameClientParsePacket::ParseCharClassUpgrade(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktCU), GameClientDispatch);
PktCU* lpPktCU = static_cast<PktCU *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCharID = lpPktCU->m_dwCharID;
unsigned char cClass = lpPktCU->m_cClass;
return lpCharacter->ChangeClass(cClass);
}
// IP 증가 패킷
bool GameClientParsePacket::ParseCharIncreasePoint(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktIP), GameClientDispatch);
PktIP* lpPktIP = static_cast<PktIP *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCharID = lpPktIP->m_dwCharID;
unsigned char cStateType = lpPktIP->m_cStateType;
// 포인트 증가
ChState State = {0,};
unsigned short usError = lpCharacter->AddState(cStateType, State);
return GameClientSendPacket::SendCharIncreasePoint(GameClientDispatch.GetSendStream(), dwCharID, State, usError);
}
// 스탯 재분배 (클래스 처음 상태로)
bool GameClientParsePacket::ParseCharStateRedistribution(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktSR), GameClientDispatch);
PktSR* lpPktSR = static_cast<PktSR *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
ChState State = lpPktSR->m_State;
return lpCharacter->StateRedistribution(State);
}
// 스테이터스 재훈련 (스탯 일정량을 다시 분배)
bool GameClientParsePacket::ParseCharStatusRetrain(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktSRT), GameClientDispatch);
PktSRT* lpPktSRT = static_cast<PktSRT *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
ChState State = lpPktSRT->m_State;
Item::ItemPos InvenPos = lpPktSRT->m_ItemPos;
return lpCharacter->StatusRetrain(State, InvenPos);
}