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>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,610 @@
#include "stdafx.h"
#include "ModifyCharacter.h"
#include <Network/Dispatch/Dispatch.h>
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharQuestPacket.h>
#include <Skill/SkillMgr.h>
#include <Item/ItemStructure.h>
#include <Log/ServerLog.h>
#include <Quest/QuestMgr.h>
#include <Creature/Character/CharacterClass.h>
#include <Creature/CreatureStructure.h>
CModifyCharacter::CModifyCharacter()
: CCharacter(0, 0)
, m_dwServerGroup(0)
, m_byChangedInfo(0)
, m_bScheduleClose(false)
, m_bSave(false)
, m_bIsOwnCopyItem(false)
{
Initialize(NULL);
ZeroMemory(&m_ExtraData, sizeof(CHAR_EXTRA_DATA));
m_ModifyCharItemSerialInfo.clear();
m_OverlapSerialInfo.clear();
m_cOldServerGroupID = UnifiedConst::Part2Selectable;
}
// <20>̳༮<CCB3><E0BCAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Initialize <- <20>̳༮ ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>~~ 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>׷<EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.<2E><>;
void CModifyCharacter::Reset()
{
SetUID(0);
SetCID(0);
m_dwServerGroup = 0;
m_byChangedInfo = 0;
m_bScheduleClose = false;
ZeroMemory(&m_DBData, sizeof(CharacterDBData));
Initialize(NULL);
}
unsigned short CModifyCharacter::GetMaxSkillPoint()
{
// CalculateStatusData<74><61> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>.
return m_CreatureStatus.m_StatusInfo.m_wSkillPoint;
}
// <20><>ų <20>߰<EFBFBD> <20><> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>߰<EFBFBD> <20><>û<EFBFBD>Ѵٸ<D1B4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ν<EFBFBD>)
unsigned char CModifyCharacter::AppendSkill(unsigned short wSkillID, char cLevel, char cLockCount)
{
m_DBData.m_Skill.wSkillNum = m_DBData.m_Skill.GetSkillNum(); // <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><> <20><><EFBFBD><EFBFBD>
const Skill::ProtoType* lpSkillProtoType = CSkillMgr::GetInstance().GetSkillProtoType(wSkillID);
short sSlotIndex = GetSkillSlotIndex(wSkillID);
bool bIsNewSkill = false; // <20><> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if(-1 == sSlotIndex) bIsNewSkill = true;
if(NULL == lpSkillProtoType)
{
ERRLOG1(g_Log, "<EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><>ųID: 0x%04x", wSkillID);
return PktAdminMgr::PktSkillEdit::FAILED_TO_GET_SKILLPROTOTYPE;
}
if(CSkillMgr::MAX_SKILL_LOCKCOUNT <= cLockCount)
{
ERRLOG1(g_Log, "<EFBFBD>ִ<EFBFBD> <20><>ų <20><> ī<><C4AB>Ʈ<EFBFBD><C6AE> <20>ʰ<EFBFBD><CAB0>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><> ī<><C4AB>Ʈ: %c", cLockCount);
return PktAdminMgr::PktSkillEdit::OVERED_MAX_LOCKCOUNT;
}
if(CSkillMgr::MAX_SKILL_LEVEL < cLevel)
{
ERRLOG1(g_Log, "<EFBFBD>ִ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD><CAB0>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><>ų <20><><EFBFBD><EFBFBD>: %c", cLevel);
return PktAdminMgr::PktSkillEdit::OVERED_MAX_SKILL_LEVEL;
}
if(lpSkillProtoType[0].m_usSkill_ID != lpSkillProtoType[cLockCount].m_usSkill_ID)
{
ERRLOG2(g_Log, "<EFBFBD><EFBFBD>ų ID<49><44> <20>ٸ<EFBFBD><D9B8>ϴ<EFBFBD>. 0x%04x : 0x%04x", lpSkillProtoType[0].m_usSkill_ID,
lpSkillProtoType[cLockCount].m_usSkill_ID);
return PktAdminMgr::PktSkillEdit::FAILED;
}
// <20>ִ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD><DCB0><EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20><><EFBFBD><EFBFBD>)
if(cLevel == CSkillMgr::MAX_SKILL_LEVEL)
{
// <20><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3> <20>ƴѰ<C6B4><D1B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD> 0<><30><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD>
if(cLockCount < CSkillMgr::MAX_SKILL_LOCKCOUNT - 1) // <20><><EFBFBD><EFBFBD> 0~3 <20>ܰ<EFBFBD><DCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
cLevel = 0;
++cLockCount;
}
}
// <20><><EFBFBD>ο<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
if(bIsNewSkill && (m_DBData.m_Skill.wSlotNum < SKILL::MAX_SLOT_NUM))
{
sSlotIndex = m_DBData.m_Skill.wSlotNum; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}
else if(m_DBData.m_Skill.wSlotNum == SKILL::MAX_SLOT_NUM)
{
ERRLOG0(g_Log, "<EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.");
return PktAdminMgr::PktSkillEdit::NOT_ENOUGH_SKILLSLOT;
}
SKILLSLOT TempSkillSlot;
TempSkillSlot.SKILLINFO.wSkill = wSkillID;
TempSkillSlot.SKILLINFO.cSkillLevel = cLevel;
TempSkillSlot.SKILLINFO.cLockCount = cLockCount;
unsigned short cResult = ReadSkill(TempSkillSlot, wSkillID, cLockCount);
if(PktBase::NO_SERVER_ERR == cResult) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3>
{
SKILL& Skill = m_DBData.m_Skill;
SKILLSLOT& SkillSlot = Skill.SSlot[sSlotIndex];
ChkEmptySlot(Skill); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
unsigned short BeforePoint =
(SkillSlot.SKILLINFO.cLockCount * CSkillMgr::MAX_SKILL_LOCKCOUNT) + SkillSlot.SKILLINFO.cSkillLevel;
unsigned short AfterPoint =
(cLockCount * CSkillMgr::MAX_SKILL_LOCKCOUNT) + cLevel;
// <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if((!bIsNewSkill) && (GetMaxSkillPoint() >= ((GetSkillPoint() - BeforePoint) + AfterPoint)))
{
SkillSlot.SKILLINFO.wSkill = wSkillID;
SkillSlot.SKILLINFO.cSkillLevel = cLevel;
SkillSlot.SKILLINFO.cLockCount = cLockCount;
}
// <20><><EFBFBD>ο<EFBFBD> <20><>ų <20>߰<EFBFBD>
else if(bIsNewSkill && (GetMaxSkillPoint() >= (GetSkillPoint() + AfterPoint)))
{
SkillSlot.SKILLINFO.wSkill = wSkillID;
SkillSlot.SKILLINFO.cSkillLevel = cLevel;
SkillSlot.SKILLINFO.cLockCount = cLockCount;
++m_DBData.m_Skill.wSlotNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Լ<EFBFBD> + 1
}
UpdateQuickSlotSkill(SkillSlot);
m_DBData.m_Skill.wSkillNum = m_DBData.m_Skill.GetSkillNum();
}
else
{
switch(cResult)
{
case PktSk::FAIL_NOT_CURRENT_CLASS:
return PktAdminMgr::PktSkillEdit::NOT_CURRENT_CLASS;
case PktSk::FAIL_NOT_ENOUGH_STATUS:
return PktAdminMgr::PktSkillEdit::NOT_ENOUGH_STAT;
case PktSk::FAIL_MAX_LEVEL:
return PktAdminMgr::PktSkillEdit::OVERED_MAX_SKILL_LEVEL;
case PktSk::FAIL_NOT_CURRENT_LOCK_COUNT:
return PktAdminMgr::PktSkillEdit::FAILED;
default:
return PktAdminMgr::PktSkillEdit::FAILED;
}
}
return PktAdminMgr::PktSkillEdit::SUCCESS;
}
// <20><>ų <20><><EFBFBD><EFBFBD> (<28><>ų <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><> <20>ش<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ)
unsigned char CModifyCharacter::DeleteSkill(unsigned short wSkillID, char cLevel, char cLockCount)
{
m_DBData.m_Skill.wSkillNum = m_DBData.m_Skill.GetSkillNum(); // <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><> <20><><EFBFBD><EFBFBD>
short sDelSlotIndex = GetSkillSlotIndex(wSkillID);
if(-1 != sDelSlotIndex)
{
SKILL& Skill = m_DBData.m_Skill;
SKILLSLOT& DelSlot = Skill.SSlot[sDelSlotIndex];
ChkEmptySlot(Skill); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
const Skill::ProtoType* lpSkillProtoType = CSkillMgr::GetInstance().GetSkillProtoType(wSkillID);
if(NULL == lpSkillProtoType)
{
ERRLOG1(g_Log, "<EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><>ųID: 0x%04x", wSkillID);
return PktAdminMgr::PktSkillEdit::FAILED_TO_GET_SKILLPROTOTYPE;
}
if(DelSlot.SKILLINFO.wSkill != wSkillID)
{
ERRLOG3(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."
"<EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD>ȣ: %d , <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ųID: 0x%04x, <20><><EFBFBD><EFBFBD> <20><>û <20><> <20><>ųID: 0x%04x",
sDelSlotIndex, DelSlot.SKILLINFO.wSkill, wSkillID);
return PktAdminMgr::PktSkillEdit::FAILED;
}
if(true == lpSkillProtoType->m_bIsClassSkill)
{
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>ų<EFBFBD>Դϴ<D4B4>.");
return PktAdminMgr::PktSkillEdit::FAILED;
}
// <20><>ų <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ĭ<EFBFBD><C4AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ܿ<EFBFBD> (<28>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!)
unsigned short sLastSlotIndex = Skill.wSlotNum - 1;
for(unsigned short sSlotIndex = sDelSlotIndex; sSlotIndex < sLastSlotIndex; ++sSlotIndex)
{
Skill.SSlot[sSlotIndex] = Skill.SSlot[sSlotIndex + 1];
}
Skill.SSlot[sLastSlotIndex].SKILLINFO.wSkill = 0;
Skill.SSlot[sLastSlotIndex].SKILLINFO.cSkillLevel = 0;
Skill.SSlot[sLastSlotIndex].SKILLINFO.cLockCount = 0;
Skill.wSkillNum -=
(DelSlot.SKILLINFO.cLockCount * CSkillMgr::MAX_SKILL_LEVEL) + DelSlot.SKILLINFO.cSkillLevel;
Skill.wSlotNum -= 1;
UpdateQuickSlotSkill(DelSlot);
return PktAdminMgr::PktSkillEdit::SUCCESS;
}
return PktAdminMgr::PktSkillEdit::FAILED;
}
bool CModifyCharacter::ChkEmptySlot(SKILL Skill)
{
CString strEmptySlotIndex;
for(unsigned short sSlotIndex = 0; sSlotIndex < Skill.wSlotNum; ++sSlotIndex)
{
if(0 == Skill.SSlot[sSlotIndex].SKILLINFO.wSkill)
{
strEmptySlotIndex.AppendFormat("%d ", sSlotIndex);
}
}
if(!strEmptySlotIndex.IsEmpty())
{
ERRLOG3(g_Log, "<EFBFBD><EFBFBD>ų <20><><EFBFBD>Կ<EFBFBD> <20>󽽷<EFBFBD><F3BDBDB7><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. CID: %u, <20><><EFBFBD>Լ<EFBFBD>: %d, <20>󽽷<EFBFBD>: %s",
GetCID(), Skill.wSlotNum, strEmptySlotIndex);
return true;
}
return false;
}
// <20><> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
// Return :
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ų<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8BFAD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> MaxSkillLevel<65><6C>...
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><E8BFAD>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> 0<><30> <20><><EFBFBD><EFBFBD>..
short CModifyCharacter::GetSkillLevelEX(unsigned short usSkillType, char cLockCount)
{
const Skill::ProtoType* lpSkillProtoType = CSkillMgr::GetInstance().GetSkillProtoType(usSkillType);
if(NULL != lpSkillProtoType)
{
int nMaxSlotNum = m_DBData.m_Skill.wSlotNum;
if(SKILL::MAX_SLOT_NUM >= nMaxSlotNum)
{
for( int nSlot = 0; nSlot < nMaxSlotNum; ++ nSlot )
{
const SKILLSLOT& SkillSlot = m_DBData.m_Skill.SSlot[ nSlot ];
if( SkillSlot.SKILLINFO.wSkill == usSkillType )
{
if( SkillSlot.SKILLINFO.cLockCount == cLockCount )
{
return SkillSlot.SKILLINFO.cSkillLevel;
}
else if( SkillSlot.SKILLINFO.cLockCount > cLockCount )
{
return SKILL::MAX_SKILL_LEVEL;
}
else
{
return 0;
}
}
}
}
}
return -1;
}
bool CModifyCharacter::SetGold(unsigned long dwGold)
{
if(dwGold > ULONG_MAX)
{
return false;
}
m_DBData.m_Info.Gold = dwGold;
return true;
}
// ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Session<6F><6E> <20><><EFBFBD><EFBFBD>~~
CSession* CModifyCharacter::GetCheckSession( unsigned long dwUID )
{
if( m_dwUID == dwUID )
{
if( NULL != m_lpPacketDispatch )
{
CSession& lpSession = m_lpPacketDispatch->GetSession( );
//if( NULL != lpSession ) return lpSession;
return &lpSession;
}
}
return NULL;
}
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD>..
void CModifyCharacter::OnChangedInfo( int iMask )
{
m_byChangedInfo |= iMask;
}
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
void CModifyCharacter::OffChangedInfo( int iMask )
{
m_byChangedInfo &= iMask;
}
// ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Status
void CModifyCharacter::GetModifyCharStatus(PktAdminMgr::CHAR_STATUS_ST& StatusST)
{
StatusST.m_cFace = m_DBData.m_Info.Face;
StatusST.m_cHair = m_DBData.m_Info.Hair;
StatusST.m_cLevel = m_DBData.m_Info.Level;
StatusST.m_cRace = m_DBData.m_Info.Race;
StatusST.m_cSex = m_DBData.m_Info.Sex;
StatusST.m_dwExp = m_DBData.m_Info.Exp;
StatusST.m_dwFame = m_DBData.m_Info.Fame;
StatusST.m_dwMileage = m_DBData.m_Info.Mileage;
StatusST.m_nClass = m_DBData.m_Info.Class;
StatusST.m_nCON = m_DBData.m_Info.CON;
StatusST.m_nDEX = m_DBData.m_Info.DEX;
StatusST.m_nINT = m_DBData.m_Info.INT;
StatusST.m_nIP = m_DBData.m_Info.IP;
StatusST.m_nSTR = m_DBData.m_Info.STR;
StatusST.m_nWIS = m_DBData.m_Info.WIS;
StatusST.m_cChance = m_DBData.m_Info.Chance;
}
// ij<><C4B3><EFBFBD><EFBFBD> Status<75><73><EFBFBD><EFBFBD>..
bool CModifyCharacter::UpdataStatus(PktAdminMgr::CHAR_STATUS_ST& StatusST)
{
CHAR_INFOST OrgCharInfo;
CopyMemory(&OrgCharInfo, &m_DBData.m_Info, sizeof(CHAR_INFOST));
m_DBData.m_Info.Sex = StatusST.m_cSex;
m_DBData.m_Info.Hair = StatusST.m_cHair;
m_DBData.m_Info.Face = StatusST.m_cFace;
m_DBData.m_Info.Race = StatusST.m_cRace;
m_DBData.m_Info.Class = StatusST.m_nClass;
m_DBData.m_Info.Fame = StatusST.m_dwFame;
m_DBData.m_Info.Mileage = StatusST.m_dwMileage;
m_DBData.m_Info.Level = StatusST.m_cLevel;
m_DBData.m_Info.Exp = StatusST.m_dwExp;
m_DBData.m_Info.IP = StatusST.m_nIP;
m_DBData.m_Info.STR = StatusST.m_nSTR;
m_DBData.m_Info.CON = StatusST.m_nCON;
m_DBData.m_Info.DEX = StatusST.m_nDEX;
m_DBData.m_Info.INT = StatusST.m_nINT;
m_DBData.m_Info.WIS = StatusST.m_nWIS;
m_DBData.m_Info.Chance = StatusST.m_cChance;
m_CreatureStatus.m_nExp = StatusST.m_dwExp;
m_CreatureStatus.m_nLevel = StatusST.m_cLevel;
// Status <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if(!CalculateStatusData(false))
{
// <20>߸<EFBFBD><DFB8><EFBFBD> Status<75><73>
CopyMemory(&m_DBData.m_Info, &OrgCharInfo, sizeof(CHAR_INFOST));
return false;
}
return true;
}
// ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UID<49><44> <20>˻<EFBFBD><CBBB>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL
Item::CItem* CModifyCharacter::UIDbyItem(unsigned __int64 ItemUID, unsigned char cTakeType)
{
Item::CItemContainer::iterator Itr;
if(cTakeType == TakeType::TS_INVEN) // <20>κ<EFBFBD><CEBA><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Item::CArrayContainer& ArrayContainer = GetInventory();
Itr = ArrayContainer.begin();
for(;Itr != ArrayContainer.end(); ++Itr)
{
if(NULL != (*Itr))
{
if((*Itr)->GetUID() == ItemUID) return (*Itr);
}
}
}
else if( cTakeType == TakeType::TS_EQUIP ) // <20><><EFBFBD><EFBFBD>â <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Item::CEquipmentsContainer& EquipContainer = GetEquipments( );
Itr = EquipContainer.begin( );
for(;Itr != EquipContainer.end(); ++Itr )
{
if(NULL != (*Itr))
{
if((*Itr)->GetUID() == ItemUID) return (*Itr);
}
}
}
else if(cTakeType == TakeType::TS_DEPOSIT) // â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Item::CDepositContainer& DepositContainer = GetDeposit();
for (unsigned char cTab = 0; cTab < DepositContainer.GetMaxTabNum(); ++cTab)
{
Item::CItemContainer* DepositTabContainer = DepositContainer.GetTab(cTab);
Itr = DepositTabContainer->begin();
for(; Itr != DepositTabContainer->end( ); ++Itr )
{
if( NULL != ( *Itr ) )
{
if( ( *Itr )->GetUID( ) == ItemUID ) return ( *Itr );
}
}
}
}
return NULL;
}
void CModifyCharacter::ChangeName(char* szName)
{
strncpy(m_DBData.m_Info.Name, szName, CHAR_INFOST::MAX_NAME_LEN);
}
// ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void CModifyCharacter::SetModifyAdmin(char* Account, int Length)
{
strncpy(m_szModifyAdmin, Account, Length);
}
void CModifyCharacter::ParseQuestData()
{
Quest::ExecutingQuest* aryExecutingQuest = GetExecutingQuest();
unsigned short* aryHistoryQuest = GetHistoryQuest();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
int nIndex = 0;
PktQuestDB::ExecutingQuest* lpExecuteQuestPos =
reinterpret_cast<PktQuestDB::ExecutingQuest*>(m_ExtraData.m_Quest.Data);
PktQuestDB::ExecutingQuest* lpExecuteQuestEnd =
reinterpret_cast<PktQuestDB::ExecutingQuest*>(m_ExtraData.m_Quest.Data) +
(m_ExtraData.m_Quest.dwSize / sizeof(PktQuestDB::ExecutingQuest));
for(; lpExecuteQuestPos != lpExecuteQuestEnd; ++lpExecuteQuestPos)
{
Quest::QuestNode* lpQuest = CQuestMgr::GetInstance().GetQuestNode(lpExecuteQuestPos->m_wQuestID);
if (0 != lpQuest && false == lpQuest->CheckNationDependent(GetUserNation()))
{
aryExecutingQuest[nIndex] = Quest::ExecutingQuest(lpExecuteQuestPos->m_wQuestID,
lpExecuteQuestPos->m_cPhase, lpExecuteQuestPos->m_cTriggerCount);
++nIndex;
}
}
nIndex = 0;
// <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
unsigned short* lpHistoryQuestPos =
reinterpret_cast<unsigned short*>(m_ExtraData.m_History.Data);
unsigned short* lpHistoryQuestEnd =
reinterpret_cast<unsigned short*>(m_ExtraData.m_History.Data) +
(m_ExtraData.m_History.dwSize / sizeof(unsigned short));
for (; lpHistoryQuestPos != lpHistoryQuestEnd; ++lpHistoryQuestPos)
{
Quest::QuestNode* lpQuest = CQuestMgr::GetInstance().GetQuestNode(*lpHistoryQuestPos);
if (0 != lpQuest && false == lpQuest->CheckNationDependent(GetUserNation()))
{
aryHistoryQuest[nIndex] = *lpHistoryQuestPos;
++nIndex;
}
}
// <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>޴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CalculateStatusData(false);
}
void CModifyCharacter::SetQuestData()
{
const int MAX_BUFFER =
sizeof(PktQuestDB) + PktQuestDB::MAX_EXECUTING_QUEST * sizeof(PktQuestDB::ExecutingQuest) +
PktQuestDB::MAX_HISTORY_QUEST * sizeof(unsigned short);
char szBuffer[MAX_BUFFER];
PktQuestDB* lpPktQuestDB = reinterpret_cast<PktQuestDB*>(szBuffer);
lpPktQuestDB->m_dwUID = GetUID();
lpPktQuestDB->m_dwCID = GetCID();
lpPktQuestDB->m_wExecuteQuestSize = 0;
lpPktQuestDB->m_wHistoryQuestSize = 0;
Quest::ExecutingQuest* ExecutingQuest = GetExecutingQuest();
unsigned short *wHistoryQuest = GetHistoryQuest();
int nIndex = 0;
for (nIndex = 0; nIndex < PktQuestDB::MAX_EXECUTING_QUEST; ++nIndex)
{
if (NULL == ExecutingQuest[nIndex].m_QuestNode)
{
break;
}
PktQuestDB::ExecutingQuest* ExecuteQuest =
reinterpret_cast<PktQuestDB::ExecutingQuest*>
(szBuffer + sizeof(PktQuestDB) + lpPktQuestDB->m_wExecuteQuestSize);
ExecuteQuest->m_wQuestID = ExecutingQuest[nIndex].m_QuestNode->m_wQuestID;
ExecuteQuest->m_cPhase = ExecutingQuest[nIndex].m_cPhase;
memcpy(ExecuteQuest->m_cTriggerCount, ExecutingQuest[nIndex].m_cTriggerCount,
sizeof(unsigned char) * PktQuestDB::MAX_TRIGGER);
lpPktQuestDB->m_wExecuteQuestSize += sizeof(PktQuestDB::ExecutingQuest);;
}
for (nIndex = 0; nIndex < PktQuestDB::MAX_HISTORY_QUEST; nIndex++)
{
if (0 == wHistoryQuest[nIndex])
{
break;
}
unsigned short* wHistoryQuestForPkt =
reinterpret_cast<unsigned short *>(szBuffer + sizeof(PktQuestDB) +
lpPktQuestDB->m_wExecuteQuestSize + lpPktQuestDB->m_wHistoryQuestSize);
*wHistoryQuestForPkt = wHistoryQuest[nIndex];
lpPktQuestDB->m_wHistoryQuestSize += sizeof(unsigned short);
}
memset(&m_ExtraData.m_Quest, 0, sizeof(QUEST));
m_ExtraData.m_Quest.dwSize = lpPktQuestDB->m_wExecuteQuestSize;
memcpy(m_ExtraData.m_Quest.Data, lpPktQuestDB + 1, lpPktQuestDB->m_wExecuteQuestSize);
memset(&m_ExtraData.m_History, 0, sizeof(HISTORY));
m_ExtraData.m_History.dwSize = lpPktQuestDB->m_wHistoryQuestSize;
memcpy(m_ExtraData.m_History.Data, reinterpret_cast<char*>(lpPktQuestDB + 1) + lpPktQuestDB->m_wExecuteQuestSize,
lpPktQuestDB->m_wHistoryQuestSize);
}
void CModifyCharacter::RevisionQuestNation()
{
using namespace Creature;
// <20>籹ü<E7B1B9><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD> ī<><C4AB><EFBFBD>׶<EFBFBD>Ʈ, <20><>ĭ<EFBFBD><C4AD> <20>޸<EFBFBD>ī<EFBFBD><C4AB><EFBFBD><EFBFBD>! (<28><><EFBFBD><EFBFBD>Ʈ <20>Ľ<EFBFBD><C4BD>Ҷ<EFBFBD> <20>ʿ<EFBFBD>)
switch(GetRace())
{
case CClass::RaceType::HUMAN:
m_cQuestNation = Creature::KARTERANT;
break;
case CClass::RaceType::AKHAN:
m_cQuestNation = Creature::MERKADIA;
break;
default:
m_cQuestNation = Creature::MAX_NATION;
break;
}
}
// class CModifyItem Down_Cast ----------------------------------------------------------------------------------------------------------------------------------
void CModifyItem::SetUID(unsigned __int64 UID)
{
m_ItemData.m_dwUID = UID;
}
void CModifyItem::SetPrototoypID(unsigned short PrototypeID)
{
m_ItemData.m_usProtoTypeID = PrototypeID;
}

View File

@@ -0,0 +1,291 @@
#ifndef _MODIFY_CHARACTER_H_
#define _MODIFY_CHARACTER_H_
#include < Creature/Character/Character.h >
#include < Network/Protocol/Ryl_AdminMgrProtocol.h >
#include < Pattern/Singleton.h >
// <20><>ó<EFBFBD><C3B3> ------------------------
class CPacketDispatch;
class CModifyCharacterMgr;
class CBuffer;
class CSession;
//--------------------------------
// Ryl_ItemData.cpp
namespace ItemData
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Item::ItemPos MakeItemPos(unsigned char cPos, unsigned char cX, unsigned char cY, unsigned char cZ);
// <20><EFBFBD><EEB6B2>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD>?
inline bool IsArrayContainer(unsigned char cTakePos);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
Item::CItem* CloneItem(Item::CItem* lpSrcItem, PktAdminMgr::CreateItemInfo EquipInfo);
// <20>Ѱ<EFBFBD><D1B0><EFBFBD> UID<49><44> 3<><33><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>ְ<EFBFBD> 3<><33><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>ʹ<EFBFBD> 1<><31><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
// â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD>ʼn<EFBFBD><C589><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> UID<49><44> <20>ɷ<EFBFBD><C9B7>ִ<EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ鿡<DAB5><E9BFA1> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD> <20><><EFBFBD><EFBFBD>.
class CDepositLock
{
public:
struct DepositInfo
{
unsigned long m_dwCID;
CPacketDispatch* m_lpPacketDispatch;
DepositInfo()
: m_dwCID(0)
, m_lpPacketDispatch(NULL) { ;}
DepositInfo(unsigned long dwCID, CPacketDispatch* lpPacketDispatch)
: m_dwCID(dwCID)
, m_lpPacketDispatch(lpPacketDispatch) { ;}
};
typedef std::map< unsigned long, DepositInfo > isMapDeposit;
typedef isMapDeposit::iterator isDepositPos;
public:
isDepositPos begin() { return m_DepositUser.begin(); }
isDepositPos end() { return m_DepositUser.end(); }
size_t size() { return m_DepositUser.size(); }
bool isUse(unsigned long dwUID, unsigned long dwCID, CPacketDispatch* lpPacketDispatch, bool& bisLock);
void DepositLock(unsigned long dwUID, unsigned long dwCID, CPacketDispatch* lpPacketDispatch);
void DepositUnLock(unsigned long dwUID);
CPacketDispatch* GetDispatch(unsigned long dwUID);
void RemoveAllSelectDispatch(CPacketDispatch* lpPacketDispatch);
bool GetLockInfo(unsigned long dwUID, DepositInfo& Info);
private:
isMapDeposit m_DepositUser;
};
};
// LearnSkill.cpp
// Ư<><C6AF> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><E6B0A1><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> ǥ<><C7A5><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
// <20><>ų <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20>ε<EFBFBD><CEB5>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> ID<49><44> <20><><EFBFBD><EFBFBD>
class CSkillID : public CStaticSingleton<CSkillID>
{
public:
typedef std::list<unsigned short> isListSkillUID;
typedef isListSkillUID::iterator isListSkillPos;
~CSkillID() { m_listSkillUID.clear(); }
isListSkillPos begin() { return m_listSkillUID.begin(); }
isListSkillPos end() { return m_listSkillUID.end(); }
void insert(unsigned short SkillUID) { m_listSkillUID.push_back(SkillUID); }
bool ReadSkillScript(char* szScriptName = "./Script/Game/SkillScript.txt");
private:
isListSkillUID m_listSkillUID;
};
// Item::CEquipment <20>ٿ<EFBFBD> ij<><C4B3>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD>!)
class CModifyEquipment : public Item::CEquipment
{
public:
void AdjustData(PktAdminMgr::CreateItemInfo EquipInfo)
{
m_cMaxNumOrDurability = EquipInfo.m_cMaxDurability;
m_cMaxSocket = EquipInfo.m_cMaxSocketNum;
m_cUpgradeLevel = EquipInfo.m_cUpgradeLevel;
m_cSeasonRecord = EquipInfo.m_cSeasonRecord;
m_cCoreLevel = EquipInfo.m_cCoreLevel;
for(m_cSocketNum = 0; m_cSocketNum < m_cMaxSocket; ++m_cSocketNum)
{
if (0 == EquipInfo.m_cSocket[m_cSocketNum]) break;
}
CopyMemory(m_cSocket, EquipInfo.m_cSocket,
sizeof(unsigned char) * m_cSocketNum);
CopyMemory(m_usRuneSocket, EquipInfo.m_usRuneSocket,
sizeof(unsigned short) * Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM);
CopyMemory(m_wAttribute, EquipInfo.m_usAttribute,
sizeof(unsigned short) * Item::Attribute::MAX_ATTRIBUTE_NUM);
}
void AddGemAttribute() { ApplyGemAttribute(APPLY); }
void RemoveGemAttribute() { ApplyGemAttribute(REMOVE); }
void AddUpgradeAttribute() { ApplyUpgradeAttribute(APPLY); }
void RemoveUpgradeAttribute() { ApplyUpgradeAttribute(REMOVE); }
void AddRuneAttribute() { ApplyRuneAttribute(APPLY); }
void RemoveRuneAttribute() { ApplyRuneAttribute(REMOVE); }
};
// Item::CItem <20>ٿ<EFBFBD> ij<><C4B3>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD>!)
class CModifyItem : public Item::CItem
{
public:
void SetUID(unsigned __int64 UID);
void SetPrototoypID(unsigned short PrototypeID);
};
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE> Ŭ<><C5AC><EFBFBD><EFBFBD>
class CModifyCharacter : public CCharacter
{
friend CModifyCharacterMgr;
public:
#pragma pack(1)
struct CHAR_EXTRA_DATA
{
CHAR_INFOEX m_CharInfoEX;
QUEST m_Quest;
HISTORY m_History;
CONFIG m_Config;
};
#pragma pack()
enum MASK
{
ON_BASIC = 1, // ON_BASIC <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ON_EXTRA = 2, // ON_EXTRA <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ON_FRIEND = 4, // ON_FRIEND <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ON_BAN = 8, // ON_BAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ON_STROE12 = 16, // ON_STROE12 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ON_STORE34 = 32, // ON_STORE34 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OFF_BASIC = 62, // ON_BASIC <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OFF_EXTRA = 61, // ON_EXTRA <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OFF_FRIEND = 59, // ON_FRIEND <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OFF_BAN = 55, // ON_BAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OFF_STORE12 = 47, // ON_STROE12 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OFF_STORE34 = 31, // ON_STORE34 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
CModifyCharacter();
~CModifyCharacter() { }
BYTE m_byChangedInfo;
void SetUID(unsigned long dwUID) { m_dwUID = dwUID; } // ij<><C4B3><EFBFBD><EFBFBD> UID <20><><EFBFBD><EFBFBD>
void SetCID(unsigned long dwCID) { m_dwCID = dwCID; } // ij<><C4B3><EFBFBD><EFBFBD> CID <20><><EFBFBD><EFBFBD>
void SetUserNation(unsigned char cNation) { m_cQuestNation = cNation; } // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void SetServerGroup(unsigned long dwServerGroup) { m_dwServerGroup = dwServerGroup; } // <20><><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD> <20><><EFBFBD><EFBFBD>
void SetOldServerGroup(unsigned char cGroupID) { m_cOldServerGroupID = cGroupID; } // Old <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long GetServerGroup() { return m_dwServerGroup; } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD> <20><><EFBFBD><EFBFBD>
void SetModifyAdmin(char* Account, int Length); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
void SetDispatch(CPacketDispatch* lpPacketDispatch) { m_lpPacketDispatch = lpPacketDispatch; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Dispatch<63><68><EFBFBD><EFBFBD>
CPacketDispatch* GetDispatch() { return m_lpPacketDispatch; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Dispatch<63><68> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>
unsigned short GetMaxHP() { return m_CreatureStatus.m_StatusInfo.m_nMaxHP; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> ü<><C3BC>
unsigned short GetNowHP() { return m_CreatureStatus.m_nNowHP; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<><C3BC>
unsigned short GetMaxMP() { return m_CreatureStatus.m_StatusInfo.m_nMaxMP; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned short GetNowMP() { return m_CreatureStatus.m_nNowMP; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
char* GetName() { return m_DBData.m_Info.Name; } // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void ChangeName(char* szName); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void GetModifyCharStatus(PktAdminMgr::CHAR_STATUS_ST& StatusST); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CHAR_EXTRA_DATA& GetExtraData() { return m_ExtraData; } // <20><>Ÿ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool UpdataStatus(PktAdminMgr::CHAR_STATUS_ST& StatusST); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool SetGold(unsigned long dwGold); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Item::CItem* UIDbyItem(unsigned __int64 ItemUID, unsigned char cTakeType); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UID<49><44> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD>
unsigned short GetMaxSkillPoint(); // ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
unsigned short GetSkillPoint() { return m_DBData.m_Skill.GetSkillNum(); } // <20><><EFBFBD><EFBFBD> <20><>ų <20><>
SKILL& GetSkill() { return m_DBData.m_Skill; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
unsigned char AppendSkill(unsigned short wSkillID, char cLevel, char cLockCount); // <20><>ų <20>߰<EFBFBD>
unsigned char DeleteSkill(unsigned short wSkillID, char cLevel, char cLockCount); // <20><>ų <20><><EFBFBD><EFBFBD>
short GetSkillLevelEX(unsigned short usSkillType, char cLockCount); // <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool ChkEmptySlot(SKILL Skill); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
CHAR_POS& GetLastPos() { return m_DBData.m_Pos; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD>
Position& GetCurPos() { return m_CurrentPos; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA>̽<EFBFBD> <20><><EFBFBD><EFBFBD>)
void SetServerID(unsigned long dwServerID) { m_ExtraData.m_CharInfoEX.ServerID = dwServerID; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(<28><>) <20><><EFBFBD><EFBFBD>
unsigned long GetServerID() { return m_ExtraData.m_CharInfoEX.ServerID; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
void Reset(); // <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
void OnChangedInfo(int iMask); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void OffChangedInfo(int iMask); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void SetNextClose() { m_bScheduleClose = true; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD> <20><><EFBFBD><EFBFBD>
bool isClose() { return m_bScheduleClose; } // ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void SetClientKey(unsigned long dwClientKey) { m_dwClientRequestKey = dwClientKey; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ Ű<><C5B0> <20><><EFBFBD><EFBFBD> ( Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> MDI<44><49> <20><><EFBFBD>ߵǾ<DFB5><C7BE><EFBFBD><E2B6A7><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> )
unsigned long GetClientKey() { return m_dwClientRequestKey; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>ƮŰ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char GetOldServerGroupID() { return m_cOldServerGroupID; } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <20><><EFBFBD><EFBFBD> (Part2Selectable)
CSession* GetCheckSession(unsigned long dwUID); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ἲ üũ
void SetSaveState(bool bSave) { m_bSave = bSave; } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD>
bool GetSaveState() { return m_bSave; } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD>
typedef std::set <__int64> ModifyCharItemSerialInfo;
typedef std::vector<__int64> OverlapSerialInfo;
ModifyCharItemSerialInfo m_ModifyCharItemSerialInfo;
OverlapSerialInfo m_OverlapSerialInfo;
void SetOwnCopyItemState(bool IsOwn) { m_bIsOwnCopyItem = IsOwn; } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool IsOwnCopyItem() { return m_bIsOwnCopyItem; } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ParseQuestData();
void SetQuestData();
unsigned char GetUserNation() { return m_cQuestNation; }
char GetChance() { return m_DBData.m_Info.Chance; }
unsigned char GetNameChangeChance() { return m_ExtraData.m_CharInfoEX.cNameChangeCount; }
void SetNameChangeChance(unsigned char cChance) { m_ExtraData.m_CharInfoEX.cNameChangeCount = cChance; }
void RevisionQuestNation(); // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>Ӽ<EFBFBD> üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(2005-11-23 <20>߰<EFBFBD>)
private:
CPacketDispatch* m_lpPacketDispatch; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ
unsigned long m_dwServerGroup; // <20>ش<EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> <20>׷<EFBFBD>
char m_szModifyAdmin[40]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool m_bScheduleClose; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long m_dwClientRequestKey; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>â(<28><><EFBFBD><EFBFBD>)<29><> <20>ĺ<EFBFBD><C4BA><EFBFBD>ȣ
bool m_bSave; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_bIsOwnCopyItem; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cQuestNation; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>Ӽ<EFBFBD> <20>˻<EFBFBD><CBBB><EFBFBD>
unsigned char m_cOldServerGroupID; // Part2Selectable Ÿ<><C5B8><EFBFBD>϶<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD>
CHAR_EXTRA_DATA m_ExtraData; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü (<28><>Ÿ, <20><><EFBFBD><EFBFBD>Ʈ, <20><><EFBFBD><EFBFBD><EFBFBD>丮, <20><><EFBFBD><EFBFBD>)
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><> <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD> Dispatch<63><68> <20><><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class CModifyCharacterMgr
{
public:
typedef std::map<unsigned long, CModifyCharacter*> isMapCharList;
typedef isMapCharList::iterator iterator;
iterator begin() { return m_mapModifyChar.begin(); }
iterator end() { return m_mapModifyChar.end(); }
size_t size() { return m_mapModifyChar.size(); }
CModifyCharacter* GetCharacter(unsigned long dwCID); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CModifyCharacter* InsertChar(unsigned long dwCID); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool EraseChar(unsigned long dwCID); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void AllRemoveChar(CPacketDispatch* lpPacketDispatch); // lpPacketDispatch<63><68> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void isUIDSendAll(unsigned long dwUID, CBuffer* lpBuffer); // UID<49><44> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Dispatch<63><68> <20><>Ŷ <20><><EFBFBD><EFBFBD>
private:
CModifyCharacter* CreateCharacter() { return new CModifyCharacter; }
isMapCharList m_mapModifyChar;
};
#endif