Files
Client/Server/RylServerProject/RylDBAgentServer/Creature/Siege/CampDB.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

853 lines
28 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.
#include "stdafx.h"
#include "CampDB.h"
#include "SiegeObjectDBMgr.h"
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/WrapPacket.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <Network/Dispatch/GameDispatch.h>
#include <Community/Guild/GuildDB.h>
#include <Community/Guild/GuildDBMgr.h>
#include <Castle/Castle.h>
#include <Castle/CastleMgr.h>
#include <DB/DBComponent.h>
#include <Castle/CastleDBComponent.h>
#include <Utility/Setup/ServerSetup.h>
#include <atltime.h>
CCampDB::CCampDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo)
: CSiegeObjectDB(DBComponent, CampInfo), m_wChangeType(0),
m_dwOldTotalMinutes(Siege::CAMP_ENCAMPING_TIME)
{
::memcpy(&m_CampRight, CampInfo.m_szRight, sizeof(CampRight));
}
CCampDB::CCampDB(CDBComponent& DBComponent, unsigned long dwCampID, unsigned long dwGID,
unsigned char cZone, unsigned char cChannel, Position Pos)
: CSiegeObjectDB(DBComponent, dwCampID, dwGID, cZone, cChannel, Pos),
m_wChangeType(0), m_dwOldTotalMinutes(Siege::CAMP_ENCAMPING_TIME)
{
}
CCampDB::~CCampDB()
{
}
bool CCampDB::CancelBuild()
{
if (m_cState == Siege::DEVELOPING)
{
m_cState = Siege::CANCELING;
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_TimeValue.Year = sysTime.wYear;
m_TimeValue.Month = sysTime.wMonth;
m_TimeValue.Day = sysTime.wDay;
m_TimeValue.Hour = sysTime.wHour;
m_TimeValue.Minute = sysTime.wMinute;
m_TimeValue.Second = sysTime.wSecond;
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
return true;
}
return false;
}
bool CCampDB::Cancel()
{
m_cState = Siege::DESTROYED;
m_dwHP = 0;
m_cUpgradeStep = 0;
return true;
}
bool CCampDB::Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold, unsigned char cUpgradeType)
{
if (Siege::COMPLETE == m_cState)
{
if (Siege::MAX_UPGRADE_NUM == m_cUpgradeStep) return false;
m_cState = Siege::UPGRADING;
m_cUpgradeTime = cUpgradeTime;
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_TimeValue.Year = sysTime.wYear;
m_TimeValue.Month = sysTime.wMonth;
m_TimeValue.Day = sysTime.wDay;
m_TimeValue.Hour = sysTime.wHour;
m_TimeValue.Minute = sysTime.wMinute;
m_TimeValue.Second = sysTime.wSecond;
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
return true;
}
return false;
}
bool CCampDB::Repair(unsigned long dwRepairHP, unsigned long dwRepairGold)
{
if (Siege::COMPLETE == m_cState)
{
m_cState = Siege::REPARING;
m_dwRepairHP = dwRepairHP;
m_cRepairTime = Siege::CAMP_REPAIR_TIME;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (dwRepairGold > 0)
{
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
if (lpGuild)
{
lpGuild->DeductGold(dwRepairGold);
}
}
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_TimeValue.Year = sysTime.wYear;
m_TimeValue.Month = sysTime.wMonth;
m_TimeValue.Day = sysTime.wDay;
m_TimeValue.Hour = sysTime.wHour;
m_TimeValue.Minute = sysTime.wMinute;
m_TimeValue.Second = sysTime.wSecond;
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
return true;
}
return false;
}
bool CCampDB::Destroy(unsigned long dwEnemyNation, bool bDeductFame)
{
m_cState = Siege::DESTROYED;
m_dwHP = 0;
m_cUpgradeStep = 0;
return true;
}
bool CCampDB::ChangeType(unsigned short wType)
{
if (Siege::COMPLETE == m_cState)
{
m_cState = Siege::CHANGING;
m_cChangeTime = Siege::CAMP_CHANGING_TIME;
m_wChangeType = wType;
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_TimeValue.Year = sysTime.wYear;
m_TimeValue.Month = sysTime.wMonth;
m_TimeValue.Day = sysTime.wDay;
m_TimeValue.Hour = sysTime.wHour;
m_TimeValue.Minute = sysTime.wMinute;
m_TimeValue.Second = sysTime.wSecond;
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
return true;
}
return true;
}
void CCampDB::UpdateLastUseTime(bool bInit)
{
CSiegeObjectDB::UpdateLastUseTime(bInit);
if (!bInit)
{
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_LAST_USE_TIME, sysTime);
}
}
void CCampDB::UpdateHP(unsigned long dwNowHP)
{
CSiegeObjectDB::UpdateHP(dwNowHP);
DBComponent::CastleDB::UpdateCampHP(m_DBComponent, GetCampID(), m_dwHP);
}
bool CCampDB::ToStartKit()
{
m_cState = Siege::DESTROYING;
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_TimeValue.Year = sysTime.wYear;
m_TimeValue.Month = sysTime.wMonth;
m_TimeValue.Day = sysTime.wDay;
m_TimeValue.Hour = sysTime.wHour;
m_TimeValue.Minute = sysTime.wMinute;
m_TimeValue.Second = sysTime.wSecond;
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
return true;
}
void CCampDB::SetRight(CampRight campRight)
{
m_CampRight = campRight;
DBComponent::CastleDB::UpdateCampRight(m_DBComponent, GetCampID(), reinterpret_cast<char*>(&m_CampRight), sizeof(CampRight));
}
void CCampDB::SetMaterialNum(unsigned char cMaterial)
{
CSiegeObjectDB::SetMaterialNum(cMaterial);
DBComponent::CastleDB::UpdateCampMaterial(m_DBComponent, GetCampID(), m_cMaterial);
}
void CCampDB::UpdateRewardFame(int Fame)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
if (lpGuild)
{
lpGuild->AddLoginedMemberFame( Guild::TYPE_VALUE, Fame );
}
}
Siege::eReturn CCampDB::Process()
{
CTime nowTime = CTime::GetCurrentTime();
CTimeSpan timeSpan(0);
/* // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD> ó<><C3B3>
if (0 != m_LastUseTime.Year && Siege::DEVELOPING != m_cState)
{
CTime lastUseTime(m_LastUseTime.Year, m_LastUseTime.Month, m_LastUseTime.Day,
m_LastUseTime.Hour, m_LastUseTime.Minute, m_LastUseTime.Second);
timeSpan = nowTime - lastUseTime;
if (timeSpan.GetDays() > Siege::CAMP_LEAST_USE_TIME)
{
DestroyCamp();
SendCampCmd(PktCampCmd::CAMP_DESTROY);
// <20><><EFBFBD><EFBFBD> ó<><C3B3>
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
if (lpGuild)
{
lpGuild->AddAllMemberFame( Siege::FAME_FOR_DESTROYED_CAMP );
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
return Siege::RET_DESTROY_CAMP;
}
}
*/
switch (m_cState)
{
case Siege::COMPLETE: // <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
{
}
break;
case Siege::DEVELOPING: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (0 != m_TimeValue.Year)
{
CTime developTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - developTime;
if (timeSpan.GetTotalMinutes() >= Siege::CAMP_ENCAMPING_TIME)
{
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
Guild::CGuildDBMgr::GetInstance().GetGuild( m_dwGID ));
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
UpdateLastUseTime();
// DB<44><42> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
SYSTEMTIME sysTime;
::memset(&sysTime, 0, sizeof(SYSTEMTIME));
::memset(&m_TimeValue, 0, sizeof(TIME));
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
if (IsWorldWeapon())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20><>ȣ, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_ENCAMP_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = true;
if (NULL != lpGuild)
{
pktCampMessage.m_cNation = lpGuild->GetNation();
}
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_ENCAMP_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_ENCAMP_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = true;
if (NULL != lpGuild)
{
strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName());
}
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::CAMP_BUILD_COMPLETE);
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>϶<EFBFBD> 10<31><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
if (0 < timeSpan.GetTotalMinutes() && m_dwOldTotalMinutes != timeSpan.GetTotalMinutes() &&
0 == (timeSpan.GetTotalMinutes() % Siege::CAMP_ENCAMPING_INTERVAL))
{
m_dwOldTotalMinutes = static_cast<unsigned long>( timeSpan.GetTotalMinutes() );
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
if (IsWorldWeapon())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_ENCAMPING;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_cRemainTime = static_cast<unsigned char>(Siege::CAMP_ENCAMPING_TIME - timeSpan.GetTotalMinutes());
pktCampMessage.m_bNotify = true;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_ENCAMPING;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_cRemainTime = static_cast<unsigned char>(Siege::CAMP_ENCAMPING_TIME - timeSpan.GetTotalMinutes());
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
}
}
break;
case Siege::CANCELING: // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>ŸƮŶ<C6AE><C5B6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
{
if (0 != m_TimeValue.Year)
{
CTime cancelTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - cancelTime;
if (timeSpan.GetTotalMinutes() >= Siege::CAMP_CANCELING_TIME)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
Cancel();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
if (IsWorldWeapon())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_CANCEL_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = true;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_CANCEL_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::CAMP_CANCEL_COMPLETE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> ó<><C3B3>
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
if (lpGuild)
{
lpGuild->AddGoldToMaster( Siege::GOLD_FOR_CANCEL_CAMP );
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
return Siege::RET_DESTROY_CAMP;
}
}
}
break;
case Siege::UPGRADING: // <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD><CCB5><EFBFBD>
{
if (0 != m_TimeValue.Year)
{
CTime upgradeTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - upgradeTime;
if (timeSpan.GetTotalMinutes() >= m_cUpgradeTime)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
++m_cUpgradeStep;
// DB<44><42> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
SYSTEMTIME sysTime;
::memset(&sysTime, 0, sizeof(SYSTEMTIME));
::memset(&m_TimeValue, 0, sizeof(TIME));
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampUpgrade(m_DBComponent, GetCampID(), m_cUpgradeStep);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
if (IsWorldWeapon())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_UPGRADE_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_UPGRADE_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::CAMP_UPGRADE_COMPLETE, m_cUpgradeStep);
}
}
}
break;
case Siege::REPARING: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (0 != m_TimeValue.Year)
{
CTime repairTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - repairTime;
if (timeSpan.GetTotalSeconds() >= m_cRepairTime)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
// DB<44><42> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
SYSTEMTIME sysTime;
::memset(&sysTime, 0, sizeof(SYSTEMTIME));
::memset(&m_TimeValue, 0, sizeof(TIME));
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
if (IsWorldWeapon())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_REPAIR_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_REPAIR_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::CAMP_REPAIR_COMPLETE, m_dwRepairHP);
m_dwRepairHP = 0;
}
}
}
break;
case Siege::DESTROYING: // <20><>ŸƮŶ<C6AE><C5B6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
{
if (0 != m_TimeValue.Year)
{
CTime destroyTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - destroyTime;
if (timeSpan.GetTotalMinutes() >= Siege::CAMP_TO_STARTKIT_TIME)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD> <20>Ϸ<EFBFBD>
Destroy();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
short sFameForSelfDestroyCamp = Siege::FAME_FOR_SELF_DESTROY_CAMP;
if (IsWorldWeapon())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD> <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_SELF_DESTROY_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = true;
if (NULL != lpGuild)
{
strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
pktCampMessage.m_cNation = lpGuild->GetNation();
}
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
else
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_SELF_DESTROY_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_nValue1 = -(sFameForSelfDestroyCamp);
pktCampMessage.m_nValue2 = Siege::GOLD_FOR_SELF_DESTROY_CAMP;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD> <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_SELF_DESTROY_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = true;
if (NULL != lpGuild)
{
strcpy(pktCampMessage.m_szGuildName, lpGuild->GetName()); // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
}
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::CAMP_TO_STARTKIT_COMPLETE);
// <20><><EFBFBD><EFBFBD> ó<><C3B3>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> ó<><C3B3>
if (lpGuild)
{
lpGuild->AddAllMemberFame( Guild::TYPE_VALUE, sFameForSelfDestroyCamp );
lpGuild->AddGoldToMaster( Siege::GOLD_FOR_SELF_DESTROY_CAMP );
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
return Siege::RET_DESTROY_CAMP;
}
}
}
break;
case Siege::CHANGING: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (0 != m_TimeValue.Year)
{
CTime changeTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - changeTime;
if (timeSpan.GetTotalMinutes() >= m_cChangeTime)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
// ä<><C3A4><EFBFBD><EFBFBD>ٸ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if (Siege::MINING_CAMP == m_wObjectType)
{
DBComponent::CastleDB::DeleteMiningCampMineralInfo(m_DBComponent, GetCampID(), Siege::ACCUMULATED_MINERAL);
DBComponent::CastleDB::DeleteMiningCampMineralInfo(m_DBComponent, GetCampID(), Siege::TEMPORARY_MINERAL);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> DB <20><><EFBFBD><EFBFBD>
if (Siege::CAMP_SHOP == m_wObjectType)
{
DBComponent::CastleDB::DeleteCampShopInfo(m_DBComponent, GetCampID());
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD><EFBFBD> DB <20><><EFBFBD><EFBFBD>
if (Siege::CAMP_SHOP == m_wChangeType)
{
DBComponent::CastleDB::InsertCampShopInfo(m_DBComponent, GetCampID());
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
SYSTEMTIME sysTime;
::memset(&sysTime, 0, sizeof(SYSTEMTIME));
::memset(&m_TimeValue, 0, sizeof(TIME));
DBComponent::CastleDB::UpdateCampState(m_DBComponent, GetCampID(), m_cState);
DBComponent::CastleDB::UpdateCampType(m_DBComponent, GetCampID(), m_wChangeType);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_CHANGE_TYPE_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_nValue1 = m_wChangeType;
pktCampMessage.m_bNotify = false;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage, 0, 0))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::CAMP_CHANGE_COMPLETE, m_wChangeType);
return Siege::RET_CHANGE_TYPE;
}
}
}
break;
}
return Siege::RET_OK;
}
bool CCampDB::SerializeOut(char* szBuffer_Out, unsigned short& usBufferSize_Out, unsigned long& dwCID_Out)
{
if (!szBuffer_Out)
{
return false;
}
usBufferSize_Out = 0;
dwCID_Out = m_dwCID;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CampInfoDB* lpCampInfoDB = reinterpret_cast<CampInfoDB*>(szBuffer_Out);
lpCampInfoDB->m_dwCampID = GetCampID();
lpCampInfoDB->m_dwGID = m_dwGID;
lpCampInfoDB->m_dwHP = m_dwHP;
lpCampInfoDB->m_cZone = m_cZone;
lpCampInfoDB->m_cChannel = 0;
lpCampInfoDB->m_wObjectType = m_wObjectType;
lpCampInfoDB->m_cState = m_cState;
lpCampInfoDB->m_cSubState = m_cSubState;
lpCampInfoDB->m_cUpgradeStep = m_cUpgradeStep;
lpCampInfoDB->m_TimeValue = m_TimeValue;
lpCampInfoDB->m_LastUseTime = m_LastUseTime;
::memcpy(lpCampInfoDB->m_szRight, m_CampRight.m_aryCampRight, CampRight::MAX_RIGHT_NUM);
lpCampInfoDB->m_Pos.fPointX = m_Pos.m_fPointX;
lpCampInfoDB->m_Pos.fPointY = m_Pos.m_fPointY;
lpCampInfoDB->m_Pos.fPointZ = m_Pos.m_fPointZ;
lpCampInfoDB->m_cMaterial = m_cMaterial;
lpCampInfoDB->m_cSiegeCount = m_cSiegeCount;
usBufferSize_Out += sizeof(CampInfoDB);
return true;
}