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,853 @@
#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;
}

View File

@@ -0,0 +1,55 @@
#ifndef _RYL_DBAGENT_CAMP_DB_H_
#define _RYL_DBAGENT_CAMP_DB_H_
#pragma once
#include "SiegeObjectDB.h"
using namespace Siege;
class CCampDB : public CSiegeObjectDB
{
public:
virtual ~CCampDB();
// Process <20>Լ<EFBFBD>
virtual Siege::eReturn Process();
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
virtual bool CancelBuild(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
virtual bool Cancel(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
virtual bool Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold = 0, unsigned char cUpgradeType = Siege::NO_JEWEL);
virtual bool Repair(unsigned long dwRepairHP, unsigned long dwRepairGold = 0);
virtual bool Destroy(unsigned long dwEnemyNation = 0, bool bDeductFame = false); // <20>ı<EFBFBD> <20>Ϸ<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD>)
virtual bool ChangeType(unsigned short wType);
void UpdateRewardFame(int Fame);
void UpdateLastUseTime(bool bInit=false);
void UpdateHP(unsigned long dwNowHP);
bool ToStartKit();
unsigned short GetChangeType() const { return m_wChangeType; }
const CampRight& GetRight() const { return m_CampRight; }
void SetRight(CampRight campRight); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void SetMaterialNum(unsigned char cMaterial);
virtual bool SerializeOut(char* szBuffer_Out, unsigned short& usBufferSize_Out, unsigned long& dwCID_Out);
protected:
CCampDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo);
CCampDB(CDBComponent& DBComponent, unsigned long dwCampID, unsigned long dwGID,
unsigned char cZone, unsigned char cChannel, Position Pos);
CampRight m_CampRight; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned short m_wChangeType;
unsigned long m_dwOldTotalMinutes;
friend class CSiegeObjectDBMgr;
};
#endif _RYL_DBAGENT_CAMP_DB_H_

View File

@@ -0,0 +1,110 @@
#include "stdafx.h"
#include <Log/ServerLog.h>
#include <DB/DBComponent.h>
#include <Castle/CastleDBComponent.h>
#include <Network/Packet/WrapPacket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Dispatch/GameDispatch.h>
#include <Community/Guild/GuildDBMgr.h>
#include <Community/Guild/Guild.h>
#include "CampShopDB.h"
CCampShopDB::CCampShopDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo)
: CCampDB(DBComponent, CampInfo), m_dwItemContainerSize(0), m_cItemNum(0), m_dwTempSafe(0), m_cTax(0)
{
std::fill_n(m_aryItemContainer, int(CampShopInfoDB::MAX_CONTAINER_SIZE), 0);
}
CCampShopDB::~CCampShopDB()
{
}
Siege::eReturn CCampShopDB::Process()
{
if (m_cSiegeCount >= Siege::CAMP_SHOP_TRANSFER_COUNT)
{
Guild::CGuild* lpGuild = Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID);
if (NULL != lpGuild)
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
::memset(&pktCampMessage, 0, sizeof(PktCampMessage));
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ͱ<EFBFBD> ȹ<><C8B9>
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><>ȣ, <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>, <20><><EFBFBD>ͱ<EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_SHOP_GAIN_TAX;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = GetGID();
pktCampMessage.m_cZone = GetZone();
pktCampMessage.m_bNotify = false;
pktCampMessage.m_nValue1 = m_dwTempSafe;
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage),
CmdCampMessage, 0, PktBase::NO_SERVER_ERR))
{
DBAgent::CGameDispatch::GetDispatchTable().Process(CSendPacketAllServer(
reinterpret_cast<char*>(&pktCampMessage), sizeof(PktCampMessage), CmdCampMessage));
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SendCampCmd(PktCampCmd::CAMP_SHOP_GAIN_TAX, m_dwTempSafe);
DETLOG3(g_Log, "GID:%10u / CurrentGuildGold:%u / TempSafeGold:%u / <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>׵<EFBFBD><D7B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ա<EFBFBD><D4B1>մϴ<D5B4>",
lpGuild->GetGID(), lpGuild->GetGold(), m_dwTempSafe);
lpGuild->AddGold(m_dwTempSafe);
m_dwTempSafe = 0;
SetSiegeCount(0);
DBComponent::CastleDB::UpdateCampSiegeCount(m_DBComponent, GetCampID(), GetSiegeCount());
}
}
return CCampDB::Process();
}
bool CCampShopDB::UpdateCampInfo(const char* aryItemBuffer, unsigned long dwItemBufferSize, unsigned char cItemNum,
unsigned long dwTempSafe, unsigned char cTax)
{
return DBComponent::CastleDB::UpdateCampShopInfo(m_DBComponent, GetCampID(),
aryItemBuffer, dwItemBufferSize, cItemNum, dwTempSafe, cTax);
}
bool CCampShopDB::SerializeOut(char* szBuffer_Out, unsigned short& usBufferSize_Out, unsigned long& dwCID_Out)
{
if (true == CCampDB::SerializeOut(szBuffer_Out, usBufferSize_Out, dwCID_Out))
{
char* lpBuffer = szBuffer_Out + usBufferSize_Out;
if (NULL == lpBuffer)
{
return false;
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CampShopInfo* lpCampShopInfo = reinterpret_cast<CampShopInfo*>(lpBuffer);
lpCampShopInfo->m_dwTempSafe = m_dwTempSafe;
lpCampShopInfo->m_cTax = m_cTax;
lpCampShopInfo->m_dwBufferSize = m_dwItemContainerSize;
lpCampShopInfo->m_cItemNum = m_cItemNum;
unsigned short wSize = static_cast<unsigned short>(m_dwItemContainerSize + sizeof(unsigned long) * m_cItemNum);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
char* lpItemBuffer = reinterpret_cast<char*>(lpCampShopInfo + 1);
std::copy(m_aryItemContainer, m_aryItemContainer + wSize, lpItemBuffer);
usBufferSize_Out += sizeof(CampShopInfo) + wSize;
return true;
}
return false;
}

View File

@@ -0,0 +1,49 @@
#ifndef _RYL_DBAGENT_CAMP_SHOP_H_
#define _RYL_DBAGENT_CAMP_SHOP_H_
#pragma once
#include "CampDB.h"
using namespace Siege;
class CCampShopDB : public CCampDB
{
public:
virtual ~CCampShopDB();
// Process <20>Լ<EFBFBD>
virtual Siege::eReturn Process();
void SetItemContainer(const char* aryContainer, unsigned long dwContainerSize, unsigned char cItemNum)
{
std::copy(aryContainer, aryContainer + dwContainerSize + sizeof(unsigned long) * cItemNum, m_aryItemContainer);
m_dwItemContainerSize = dwContainerSize;
m_cItemNum = cItemNum;
}
void SetTempSafe(unsigned long dwTempSafe) { m_dwTempSafe = dwTempSafe; }
void SetTax(unsigned char cTax) { m_cTax = cTax; }
bool UpdateCampInfo(const char* aryItemBuffer, unsigned long dwItemBufferSize, unsigned char cItemNum,
unsigned long dwTempSafe, unsigned char cTax);
bool SerializeOut(char* szBuffer_Out, unsigned short& usBufferSize_Out, unsigned long& dwCID_Out);
private:
CCampShopDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo);
unsigned char m_aryItemContainer[CampShopInfoDB::MAX_CONTAINER_SIZE]; // <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long m_dwItemContainerSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cItemNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long m_dwTempSafe; // <20>ӽ<EFBFBD> <20>ݰ<EFBFBD>
unsigned char m_cTax; // <20><><EFBFBD><EFBFBD>
friend class CSiegeObjectDBMgr;
};
#endif

View File

@@ -0,0 +1,283 @@
#include "stdafx.h"
#include "CastleArmsDB.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>
CCastleArmsDB::CCastleArmsDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject)
: CSiegeObjectDB(DBComponent, CastleObject)
{
}
CCastleArmsDB::~CCastleArmsDB()
{
}
bool CCastleArmsDB::Build(unsigned short wType, unsigned char cDevelopTime, unsigned long dwDevelopGold, unsigned long dwOwnerID)
{
if (Siege::CASTLE_ARMS_NPC != m_wObjectType) return false;
if (Siege::COMPLETE == m_cState)
{
m_wObjectType = wType;
m_cState = Siege::DEVELOPING;
m_cUpgradeStep = 0;
m_cDevelopTime = cDevelopTime;
m_dwOwnerID = dwOwnerID;
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::UpdateCastleObjectType(m_DBComponent, m_dwCID, wType, m_dwOwnerID);
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleArmsDB::Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold, unsigned char cUpgradeType)
{
if ( !IsCastleArms() )
{
return false;
}
if (Siege::COMPLETE == m_cState)
{
m_cState = Siege::UPGRADING;
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_cUpgradeTime = cUpgradeTime;
// CASTLE_TODO : <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
// Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
//
// if (lpGuild)
// {
// lpGuild->DeductGold(dwUpgradeGold);
// }
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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleArmsDB::Repair(unsigned long dwRepairHP, unsigned long dwRepairGold)
{
if ( !IsCastleArms() )
{
return false;
}
if (Siege::COMPLETE == m_cState)
{
m_cState = Siege::REPARING;
m_dwRepairHP = dwRepairHP;
m_cRepairTime = Siege::CASTLE_ARMS_REPAIR_TIME;
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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleArmsDB::Destroy(unsigned long dwEnemyNation, bool bDeductFame)
{
if ( !IsCastleArms() || Siege::CASTLE_ARMS_NPC == m_wObjectType )
{
return false;
}
m_wObjectType = Siege::CASTLE_ARMS_NPC;
m_cState = Siege::COMPLETE;
m_cUpgradeStep = 0;
m_dwHP = 0;
m_dwOwnerID = 0;
DBComponent::CastleDB::UpdateCastleObjectType(m_DBComponent, m_dwCID, m_wObjectType, m_dwOwnerID);
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectUpgrade(m_DBComponent, m_dwCID, m_cUpgradeStep, m_cUpgradeType);
return true;
}
void CCastleArmsDB::UpdateLastUseTime(bool bInit)
{
CSiegeObjectDB::UpdateLastUseTime(bInit);
if (!bInit)
{
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
DBComponent::CastleDB::UpdateCastleObjectLastUseTime(m_DBComponent, m_dwCID, sysTime);
}
}
void CCastleArmsDB::UpdateHP(unsigned long dwNowHP)
{
CSiegeObjectDB::UpdateHP(dwNowHP);
DBComponent::CastleDB::UpdateCastleObjectHP(m_DBComponent, m_dwCID, m_dwHP);
}
Siege::eReturn CCastleArmsDB::Process()
{
CTime nowTime = CTime::GetCurrentTime();
CTimeSpan timeSpan(0);
switch (m_cState)
{
case Siege::COMPLETE: // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
{
if (0 != m_LastUseTime.Year && Siege::CASTLE_ARMS_NPC != m_wObjectType)
{
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.GetTotalMinutes() >= Siege::CASTLE_ARMS_LEAST_USE_TIME)
{
// <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD>
Destroy();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(0, PktCastleCmd::CASTLE_DESTROY_ARMS);
}
}
}
break;
case Siege::DEVELOPING: // <20><><EFBFBD><EFBFBD> <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() >= m_cDevelopTime)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
UpdateLastUseTime();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(m_wObjectType, PktCastleCmd::CASTLE_CREATE_ARMS_COMPLETE);
}
}
}
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>
m_cState = Siege::COMPLETE;
++m_cUpgradeStep;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectUpgrade(m_DBComponent, m_dwCID, m_cUpgradeStep, m_cUpgradeType);
UpdateLastUseTime();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(m_cUpgradeStep, PktCastleCmd::CASTLE_UPGRADE_ARMS_COMPLETE);
}
}
}
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.GetTotalMinutes() >= m_cRepairTime)
{
// <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
UpdateLastUseTime();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(m_dwRepairHP, PktCastleCmd::CASTLE_REPAIR_ARMS_COMPLETE);
m_dwRepairHP = 0;
}
}
}
break;
}
return Siege::RET_OK;
}

View File

@@ -0,0 +1,34 @@
#ifndef _RYL_DBAGENT_CASTLE_ARMS_DB_H_
#define _RYL_DBAGENT_CASTLE_ARMS_DB_H_
#pragma once
#include "SiegeObjectDB.h"
using namespace Siege;
class CCastleArmsDB : public CSiegeObjectDB
{
public:
virtual ~CCastleArmsDB();
// Process <20>Լ<EFBFBD>
Siege::eReturn Process();
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool Build(unsigned short wType, unsigned char cDevelopTime, unsigned long dwDevelopGold = 0, unsigned long dwOwnerID = 0);
bool Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold = 0, unsigned char cUpgradeType = Siege::NO_JEWEL);
bool Repair(unsigned long dwRepairHP, unsigned long dwRepairGold = 0);
bool Destroy(unsigned long dwEnemyNation = 0, bool bDeductFame = false);
void UpdateLastUseTime(bool bInit=false);
void UpdateHP(unsigned long dwNowHP);
private:
CCastleArmsDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject);
friend class CSiegeObjectDBMgr;
};
#endif _RYL_DBAGENT_CASTLE_ARMS_DB_H_

View File

@@ -0,0 +1,232 @@
#include "stdafx.h"
#include "CastleEmblemDB.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/CastleDB.h>
#include <Castle/CastleDBMgr.h>
#include <DB/DBComponent.h>
#include <Castle/CastleDBComponent.h>
#include <Utility/Setup/ServerSetup.h>
#include <atltime.h>
#include <GameTime/GameTimeDBMgr.h>
CCastleEmblemDB::CCastleEmblemDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject)
: CSiegeObjectDB(DBComponent, CastleObject), m_cEnemyNation(0)
{
m_cSubState = Siege::MINE;
}
CCastleEmblemDB::~CCastleEmblemDB()
{
}
bool CCastleEmblemDB::Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold, unsigned char cUpgradeType)
{
if (Siege::COMPLETE == m_cState)
{
if (Siege::MAX_EMBLEM_UPGRADE == m_cUpgradeStep) return false;
m_cState = Siege::UPGRADING;
if (0 == m_cUpgradeStep) m_cUpgradeType = cUpgradeType;
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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleEmblemDB::Destroy(unsigned long dwEnemyNation, bool bDeductFame)
{
m_cState = Siege::DEVELOPING;
m_cUpgradeStep = 0;
m_cUpgradeType = Siege::NO_JEWEL;
if (m_cSubState == Siege::ENEMY)
{
m_cSubState = Siege::MINE;
m_cEnemyNation = 0;
}
else
{
m_cSubState = Siege::ENEMY;
m_cEnemyNation = (unsigned char)dwEnemyNation;
}
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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, Siege::MINE);
DBComponent::CastleDB::UpdateCastleObjectUpgrade(m_DBComponent, m_dwCID, m_cUpgradeStep, m_cUpgradeType);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
// <20><>¡<EFBFBD><C2A1><EFBFBD><EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Castle::CCastleDB* lpCastle = Castle::CCastleDBMgr::GetInstance().GetCastle(m_dwCampOrCastleID);
if (0 != lpCastle)
{
CSiegeObjectDB* lpGate = lpCastle->GetCastleGate();
if (0 != lpGate && Siege::DESTROYED != lpGate->GetState())
{
lpGate->Destroy();
lpGate->SendCastleCmd(0, PktCastleCmd::CASTLE_DESTROY_GATE);
}
}
return true;
}
void CCastleEmblemDB::UpdateHP(unsigned long dwNowHP)
{
CSiegeObjectDB::UpdateHP(dwNowHP);
DBComponent::CastleDB::UpdateCastleObjectHP(m_DBComponent, m_dwCID, m_dwHP);
}
Siege::eReturn CCastleEmblemDB::Process()
{
CTime nowTime = CTime::GetCurrentTime();
CTimeSpan timeSpan(0);
switch (m_cState)
{
case Siege::COMPLETE: // <20><>ȯ <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
{
}
break;
case Siege::DEVELOPING: // <20><>ȯ<EFBFBD><C8AF>
{
if (0 != m_TimeValue.Year)
{
CTime summonTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - summonTime;
if (timeSpan.GetTotalMinutes() >= Siege::EMBLEM_SUMMON_TIME)
{
// <20><> <20><>¡<EFBFBD><C2A1> <20><>ȯ <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, Siege::MINE);
if (m_cSubState == Siege::MINE)
{
// <20>Ʊ<EFBFBD><C6B1><EFBFBD> <20><>ȯ <20>Ϸ<EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
// [Out] dwValue1 : SubState (<28>Ʊ<EFBFBD><C6B1><EFBFBD> <20><>ȯ<EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20><><EFBFBD><EFBFBD>)
SendCastleCmd(m_cSubState, PktCastleCmd::CASTLE_SUMMON_EMBLEM_COMPLETE);
Castle::CCastleDB* lpCastle = Castle::CCastleDBMgr::GetInstance().GetCastle( GetCastleID() );
if(lpCastle)
{
lpCastle->ChangeCastleMaster(static_cast<unsigned char>(lpCastle->GetNation()));
SendCastleCmd(lpCastle->GetNation(), PktCastleCmd::CASTLE_CHANGE_MASTER);
}
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20>Ϸ<EFBFBD>.. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Castle::CCastleDB* lpCastle = Castle::CCastleDBMgr::GetInstance().GetCastle( GetCastleID() );
if (lpCastle)
{
if(CGameTimeDBMgr::GetInstance().IsSiegeWarTime())
{
// CASTLE_TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// CSiegeObjectDBMgr::GetInstance().DestroyCamp(m_dwGID);
lpCastle->ChangeCastleMaster(m_cEnemyNation);
m_cSubState = Siege::MINE;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
// [Out] dwValue1 : <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SendCastleCmd(m_cEnemyNation, PktCastleCmd::CASTLE_CHANGE_MASTER);
}
else // <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20>Ϸ<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>ʴ´<CAB4>.
{
unsigned char cNation = Creature::STATELESS;
if(m_cEnemyNation!=Creature::STATELESS)
{
cNation = (m_cEnemyNation==Creature::KARTERANT) ? Creature::MERKADIA : Creature::KARTERANT;
}
lpCastle->ChangeCastleMaster(cNation);
m_cSubState = Siege::MINE;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
// [Out] dwValue1 : <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SendCastleCmd(cNation, PktCastleCmd::CASTLE_CHANGE_MASTER);
}
}
}
}
}
}
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;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectUpgrade(m_DBComponent, m_dwCID, m_cUpgradeStep, m_cUpgradeType);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
// [In/Out] dwValue1 : <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>ܰ<EFBFBD>
SendCastleCmd(m_cUpgradeStep, PktCastleCmd::CASTLE_UPGRADE_EMBLEM_COMPLETE);
}
}
}
break;
}
return Siege::RET_OK;
}

View File

@@ -0,0 +1,33 @@
#ifndef _RYL_DBAGENT_CASTLE_EMBLEM_DB_H_
#define _RYL_DBAGENT_CASTLE_EMBLEM_DB_H_
#pragma once
#include "SiegeObjectDB.h"
using namespace Siege;
class CCastleEmblemDB : public CSiegeObjectDB
{
public:
virtual ~CCastleEmblemDB();
// Process <20>Լ<EFBFBD>
Siege::eReturn Process();
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold = 0, unsigned char cUpgradeType = Siege::NO_JEWEL);
bool Destroy(unsigned long dwEnemyNation = 0, bool bDeductFame = false);
void UpdateHP(unsigned long dwNowHP);
private:
CCastleEmblemDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject);
unsigned char m_cEnemyNation; // Nation : <20><> <20><>¡<EFBFBD><C2A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>μ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID
friend class CSiegeObjectDBMgr;
};
#endif _RYL_DBAGENT_CASTLE_EMBLEM_DB_H_

View File

@@ -0,0 +1,279 @@
#include "stdafx.h"
#include "CastleGateDB.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>
CCastleGateDB::CCastleGateDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject)
: CSiegeObjectDB(DBComponent, CastleObject)
{
}
CCastleGateDB::~CCastleGateDB()
{
}
bool CCastleGateDB::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;
// CASTLE_TODO : <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
// Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
//
// if (lpGuild)
// {
// lpGuild->DeductGold(dwUpgradeGold);
// }
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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleGateDB::Repair(unsigned long dwRepairHP, unsigned long dwRepairGold)
{
if (Siege::COMPLETE == m_cState)
{
m_cState = Siege::REPARING;
m_dwRepairHP = dwRepairHP;
m_cRepairTime = static_cast<unsigned char>(dwRepairHP * Siege::GATE_REPAIR_MIN_PER_HP);
// CASTLE_TODO : <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// 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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleGateDB::Restore(unsigned char cRestoreTime, unsigned long dwRestoreGold)
{
if (Siege::DESTROYED == m_cState)
{
m_cState = Siege::RESTORING;
m_cDevelopTime = cRestoreTime;
// CASTLE_TODO : <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB*>(
// Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
//
// if (lpGuild)
// {
// lpGuild->DeductGold(dwRestoreGold);
// }
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::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectTime(m_DBComponent, m_dwCID, sysTime);
return true;
}
return false;
}
bool CCastleGateDB::Destroy(unsigned long dwEnemyNation, bool bDeductFame)
{
m_cState = Siege::DESTROYED;
m_cSubState = Siege::OPENED;
m_cUpgradeStep = 0;
m_dwHP = 0;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectUpgrade(m_DBComponent, m_dwCID, m_cUpgradeStep, m_cUpgradeType);
return true;
}
void CCastleGateDB::UpdateHP(unsigned long dwNowHP)
{
CSiegeObjectDB::UpdateHP(dwNowHP);
DBComponent::CastleDB::UpdateCastleObjectHP(m_DBComponent, m_dwCID, m_dwHP);
}
void CCastleGateDB::ForceOpen()
{
if (Siege::COMPLETE == m_cState && Siege::OPENED == m_cSubState)
{
return ;
}
m_cState = Siege::COMPLETE;
m_cSubState = Siege::OPENED;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(0, PktCastleCmd::CASTLE_GATE_FORCE_OPEN);
}
void CCastleGateDB::ForceClose()
{
if (Siege::COMPLETE == m_cSubState && Siege::CLOSED == m_cSubState)
{
return ;
}
m_cState = Siege::COMPLETE;
m_cSubState = Siege::CLOSED;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(0, PktCastleCmd::CASTLE_GATE_FORCE_CLOSE);
}
Siege::eReturn CCastleGateDB::Process()
{
CTime nowTime = CTime::GetCurrentTime();
CTimeSpan timeSpan(0);
switch (m_cState)
{
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><D7B7>̵<EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
++m_cUpgradeStep;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
DBComponent::CastleDB::UpdateCastleObjectUpgrade(m_DBComponent, m_dwCID, m_cUpgradeStep, m_cUpgradeType);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(m_cUpgradeStep, PktCastleCmd::CASTLE_UPGRADE_GATE_COMPLETE);
}
}
}
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.GetTotalMinutes() >= m_cRepairTime)
{
// <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(m_dwRepairHP, PktCastleCmd::CASTLE_REPAIR_GATE_COMPLETE);
m_dwRepairHP = 0;
}
}
}
break;
case Siege::RESTORING: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (0 != m_TimeValue.Year)
{
CTime restoreTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - restoreTime;
if (timeSpan.GetTotalMinutes() >= m_cDevelopTime)
{
// <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
m_cUpgradeStep = 0;
m_dwHP = 0;
DBComponent::CastleDB::UpdateCastleObjectState(m_DBComponent, m_dwCID, m_cState, m_cSubState);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCastleCmd(m_dwHP, PktCastleCmd::CASTLE_RESTORE_GATE_COMPLETE);
}
}
}
break;
}
return Siege::RET_OK;
}

View File

@@ -0,0 +1,37 @@
#ifndef _RYL_DBAGENT_CASTLE_GATE_DB_H_
#define _RYL_DBAGENT_CASTLE_GATE_DB_H_
#pragma once
#include "SiegeObjectDB.h"
using namespace Siege;
class CCastleGateDB : public CSiegeObjectDB
{
public:
virtual ~CCastleGateDB();
// Process <20>Լ<EFBFBD>
Siege::eReturn Process();
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold = 0, unsigned char cUpgradeType = Siege::NO_JEWEL);
bool Repair(unsigned long dwRepairHP, unsigned long dwRepairGold = 0);
bool Restore(unsigned char cRestoreTime, unsigned long dwRestoreGold = 0);
bool Destroy(unsigned long dwEnemyNation = 0, bool bDeductFame = false);
void UpdateHP(unsigned long dwNowHP);
// <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Open / Close <20><><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>´<EFBFBD> Complete<74><65> <20>ȴ<EFBFBD>.)
void ForceOpen();
void ForceClose();
private:
CCastleGateDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject);
friend class CSiegeObjectDBMgr;
};
#endif _RYL_DBAGENT_CASTLE_GATE_DB_H_

View File

@@ -0,0 +1,198 @@
#include "stdafx.h"
#include "MiningCampDB.h"
#include "SiegeObjectDBMgr.h"
#include <DB/DBComponent.h>
#include <Castle/CastleDBComponent.h>
#include <Log/ServerLog.h>
CMiningCampDB::CMiningCampDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo)
: CCampDB(DBComponent, CampInfo)
{
}
CMiningCampDB::~CMiningCampDB()
{
}
bool CMiningCampDB::OnOff(unsigned long dwSubState)
{
if ( Siege::MINING_ON == dwSubState && Siege::MINING_ON != m_cSubState )
{
m_cSiegeCount = 0;
m_cSubState = Siege::MINING_ON;
DBComponent::CastleDB::UpdateCampSubState(m_DBComponent, GetCampID(), m_cSubState);
DBComponent::CastleDB::UpdateCampSiegeCount(m_DBComponent, GetCampID(), m_cSiegeCount);
}
else if ( Siege::MINING_OFF == dwSubState && Siege::MINING_OFF != m_cSubState )
{
m_cSiegeCount = 0;
m_cSubState = Siege::MINING_OFF;
DBComponent::CastleDB::UpdateCampSubState(m_DBComponent, GetCampID(), m_cSubState);
DBComponent::CastleDB::UpdateCampSiegeCount(m_DBComponent, GetCampID(), m_cSiegeCount);
// <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DBComponent::CastleDB::DeleteMiningCampMineralInfo(m_DBComponent, GetCampID(), Siege::TEMPORARY_MINERAL);
m_TemporaryMineralMap.clear();
}
else
{
return false;
}
return true;
}
bool CMiningCampDB::GainMineral(unsigned short wMineralID, unsigned short wAmount)
{
MineralInfoMap::iterator itr = m_AccumulatedMineralMap.find(wMineralID);
if (itr != m_AccumulatedMineralMap.end())
{
if (itr->second < wAmount)
{
ERRLOG4(g_Log, "ȹ<EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.( CampID : 0x%08x, MineralID : %d, CurrentAmount : %d, GainAmount : %d )",
GetCampID(), wMineralID, itr->second, wAmount);
return false;
}
else
{
if (itr->second == wAmount)
{
DBComponent::CastleDB::DeleteMiningCampMineralInfo(m_DBComponent, GetCampID(), Siege::ACCUMULATED_MINERAL, wMineralID);
m_AccumulatedMineralMap.erase(itr);
}
else
{
itr->second -= wAmount;
DBComponent::CastleDB::UpdateMiningCampMineralInfo(m_DBComponent, GetCampID(), Siege::ACCUMULATED_MINERAL, wMineralID, itr->second);
}
return true;
}
}
return false;
}
bool CMiningCampDB::AddMineral(unsigned char cFlag, const CampMineralInfo& campMineralInfo)
{
if (campMineralInfo.m_wAmount > 0)
{
switch (cFlag)
{
case Siege::ACCUMULATED_MINERAL :
{
m_AccumulatedMineralMap.insert( std::make_pair(campMineralInfo.m_wMineralID, campMineralInfo.m_wAmount) ).second;
}
break;
case Siege::TEMPORARY_MINERAL :
{
m_TemporaryMineralMap.insert( std::make_pair(campMineralInfo.m_wMineralID, campMineralInfo.m_wAmount) ).second;
}
break;
default: return false;
}
}
return true;
}
bool CMiningCampDB::UpdateMineralInfo(unsigned char cFlag, unsigned char cNum, CampMineralInfo* lpMineralInfo)
{
switch (cFlag)
{
case Siege::TEMPORARY_MINERAL :
{
DBComponent::CastleDB::DeleteMiningCampMineralInfo(m_DBComponent, GetCampID(), cFlag);
m_TemporaryMineralMap.clear();
for (int i=0; i<cNum; ++i)
{
DBComponent::CastleDB::InsertMiningCampMineralInfo(m_DBComponent, GetCampID(), cFlag,
lpMineralInfo->m_wMineralID, lpMineralInfo->m_wAmount);
AddMineral(cFlag, *lpMineralInfo);
++lpMineralInfo;
}
}
break;
case Siege::ACCUMULATED_MINERAL :
{
DBComponent::CastleDB::DeleteMiningCampMineralInfo(m_DBComponent, GetCampID(), cFlag);
m_AccumulatedMineralMap.clear();
for (int i=0; i<cNum; ++i)
{
DBComponent::CastleDB::InsertMiningCampMineralInfo(m_DBComponent, GetCampID(), cFlag,
lpMineralInfo->m_wMineralID, lpMineralInfo->m_wAmount);
AddMineral(cFlag, *lpMineralInfo);
++lpMineralInfo;
}
m_cSiegeCount = 0;
DBComponent::CastleDB::UpdateCampSiegeCount(m_DBComponent, GetCampID(), m_cSiegeCount);
}
break;
default: return false;
}
return true;
}
bool CMiningCampDB::SerializeOut(char* szBuffer_Out, unsigned short& usBufferSize_Out, unsigned long& dwCID_Out)
{
if (CCampDB::SerializeOut(szBuffer_Out, usBufferSize_Out, dwCID_Out))
{
char* lpBuffer = szBuffer_Out + usBufferSize_Out;
if (!lpBuffer)
{
return false;
}
// ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned short wSize = 0;
MiningCampInfo* lpMiningCampInfo = reinterpret_cast<MiningCampInfo*>(lpBuffer);
lpMiningCampInfo->m_cAccumulatedNum = static_cast<unsigned char>(m_AccumulatedMineralMap.size());
lpMiningCampInfo->m_cTemporaryNum = static_cast<unsigned char>(m_TemporaryMineralMap.size());
wSize += sizeof(MiningCampInfo);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CampMineralInfo* lpCampMineralInfo = reinterpret_cast<CampMineralInfo*>(lpMiningCampInfo + 1);
for (MineralInfoMap::iterator itr = m_AccumulatedMineralMap.begin();
itr != m_AccumulatedMineralMap.end(); ++itr, ++lpCampMineralInfo)
{
lpCampMineralInfo->m_wMineralID = itr->first;
lpCampMineralInfo->m_wAmount = itr->second;
wSize += sizeof(CampMineralInfo);
}
// <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
for (MineralInfoMap::iterator itr = m_TemporaryMineralMap.begin();
itr != m_TemporaryMineralMap.end(); ++itr, ++lpCampMineralInfo)
{
lpCampMineralInfo->m_wMineralID = itr->first;
lpCampMineralInfo->m_wAmount = itr->second;
wSize += sizeof(CampMineralInfo);
}
lpMiningCampInfo->m_wSize = wSize;
usBufferSize_Out += wSize;
return true;
}
return false;
}

View File

@@ -0,0 +1,38 @@
#ifndef _RYL_DBAGENT_MINING_CAMP_H_
#define _RYL_DBAGENT_MINING_CAMP_H_
#pragma once
#include "CampDB.h"
#include <map>
#include <Network/Packet/PacketStruct/CastlePacket.h>
using namespace Siege;
class CMiningCampDB : public CCampDB
{
public:
virtual ~CMiningCampDB();
typedef std::map<unsigned short, unsigned short> MineralInfoMap; // <wMineralID, wAmount>
bool OnOff(unsigned long dwSubState);
bool GainMineral(unsigned short wMineralID, unsigned short wAmount); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȹ<><C8B9>
// <20><><EFBFBD><EFBFBD> AddMineral <20>Լ<EFBFBD><D4BC><EFBFBD> insert<72><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!! (<28>̹<EFBFBD> <20>ִ<EFBFBD> <20><EFBFBD><E0BCAE> Add <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
bool AddMineral(unsigned char cFlag, const CampMineralInfo& campMineralInfo);
bool UpdateMineralInfo(unsigned char cFlag, unsigned char cNum, CampMineralInfo* lpMineralInfo);
bool SerializeOut(char* szBuffer_Out, unsigned short& usBufferSize_Out, unsigned long& dwCID_Out);
private:
CMiningCampDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo);
MineralInfoMap m_AccumulatedMineralMap;
MineralInfoMap m_TemporaryMineralMap;
friend class CSiegeObjectDBMgr;
};
#endif // _RYL_DBAGENT_MINING_CAMP_H_

View File

@@ -0,0 +1,182 @@
#include "stdafx.h"
#include "SiegeArmsDB.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>
CSiegeArmsDB::CSiegeArmsDB(CDBComponent& DBComponent, unsigned long dwOwnerID,
unsigned char cNation, unsigned short wObjectType, unsigned char cUpgradeStep,
unsigned char cZone, unsigned char cChannel, Position Pos)
: CSiegeObjectDB(DBComponent, dwOwnerID, cNation, wObjectType, cUpgradeStep, cZone, cChannel, Pos)
{
}
CSiegeArmsDB::~CSiegeArmsDB()
{
}
bool CSiegeArmsDB::Repair(unsigned long dwRepairHP, unsigned long dwRepairGold)
{
if (Siege::COMPLETE == m_cState)
{
m_cState = Siege::REPARING;
m_dwRepairHP = dwRepairHP;
m_cRepairTime = Siege::SIEGE_ARMS_REPAIR_TIME;
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;
return true;
}
return false;
}
bool CSiegeArmsDB::Destroy(unsigned long dwEnemyNation, bool bDeductFame)
{
m_cState = Siege::DESTROYED;
m_dwHP = 0;
m_cUpgradeStep = 0;
return true;
}
bool CSiegeArmsDB::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;
return true;
}
Siege::eReturn CSiegeArmsDB::Process()
{
CTime nowTime = CTime::GetCurrentTime();
CTimeSpan timeSpan(0);
switch (m_cState)
{
case Siege::COMPLETE: // <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
{
if (0 != m_LastUseTime.Year)
{
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.GetTotalMinutes() > Siege::SIEGE_ARMS_LEAST_USE_TIME)
{
Destroy();
SendSiegeArmsCmd(0, PktSiegeArmsCmd::SIEGE_DESTROY_ARMS);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
return Siege::RET_DESTROY_SIEGE_ARMS;
}
}
}
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::SIEGE_ARMS_BUILDING_TIME)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
UpdateLastUseTime();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendSiegeArmsCmd(m_cUpgradeStep, PktSiegeArmsCmd::SIEGE_CREATE_ARMS_COMPLETE);
}
}
}
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.GetTotalMinutes() >= m_cRepairTime)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cState = Siege::COMPLETE;
UpdateLastUseTime();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendSiegeArmsCmd(m_dwRepairHP, PktSiegeArmsCmd::SIEGE_REPAIR_ARMS_COMPLETE);
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::SIEGE_ARMS_TO_STARTKIT_TIME)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD>
Destroy();
UpdateLastUseTime();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendSiegeArmsCmd(1, PktSiegeArmsCmd::SIEGE_TO_STARTKIT_COMPLETE);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
return Siege::RET_DESTROY_SIEGE_ARMS;
}
}
}
break;
}
return Siege::RET_OK;
}

View File

@@ -0,0 +1,33 @@
#ifndef _RYL_DBAGENT_SIEGE_ARMS_DB_H_
#define _RYL_DBAGENT_SIEGE_ARMS_DB_H_
#pragma once
#include "SiegeObjectDB.h"
using namespace Siege;
class CSiegeArmsDB : public CSiegeObjectDB
{
public:
virtual ~CSiegeArmsDB();
// Process <20>Լ<EFBFBD>
Siege::eReturn Process();
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool Repair(unsigned long dwRepairHP, unsigned long dwRepairGold = 0);
bool Destroy(unsigned long dwEnemyNation = 0, bool bDeductFame = false);
bool ToStartKit();
private:
CSiegeArmsDB(CDBComponent& DBComponent, unsigned long dwOwnerID,
unsigned char cNation, unsigned short wObjectType, unsigned char cUpgradeStep,
unsigned char cZone, unsigned char cChannel, Position Pos);
friend class CSiegeObjectDBMgr;
};
#endif _RYL_DBAGENT_SIEGE_ARMS_DB_H_

View File

@@ -0,0 +1,425 @@
#include "stdafx.h"
#include "SiegeObjectDB.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>
CSiegeObjectDB::CSiegeObjectDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject)
: m_dwCID(Creature::SIEGE_OBJECT_BIT | CastleObject.m_dwCID),
m_dwCampOrCastleID(CastleObject.m_dwCastleID),
m_dwOwnerID(CastleObject.m_dwOwnerID),
m_dwGID(0),
m_cNation(0),
m_dwHP(CastleObject.m_dwHP),
m_wObjectType(CastleObject.m_wObjectType),
m_cState(CastleObject.m_cState),
m_cSubState(CastleObject.m_cSubState),
m_cUpgradeStep(CastleObject.m_cUpgradeStep),
m_cUpgradeType(CastleObject.m_cUpgradeType),
m_cZone(0),
m_cChannel(0),
m_TimeValue(CastleObject.m_RemainUpTime),
m_LastUseTime(CastleObject.m_LastUseTime),
m_Pos(CastleObject.m_Pos),
m_cMaterial(0),
m_cSiegeCount(0),
m_dwRepairHP(0),
m_fDefaultDir(CastleObject.m_fDefaultDir),
m_cDevelopTime(Siege::DEFAULT_TIME_VALUE),
m_cUpgradeTime(Siege::DEFAULT_TIME_VALUE),
m_cRepairTime(Siege::DEFAULT_REPAIR_TIME),
m_cChangeTime(Siege::DEFAULT_TIME_VALUE),
m_DBComponent(DBComponent)
{
}
CSiegeObjectDB::CSiegeObjectDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo)
: m_dwCID(0),
m_dwCampOrCastleID(Castle::CAMP_BIT | CampInfo.m_dwCampID),
m_dwOwnerID(0),
m_dwGID(CampInfo.m_dwGID),
m_cNation(0),
m_dwHP(CampInfo.m_dwHP),
m_wObjectType(CampInfo.m_wObjectType),
m_cState(CampInfo.m_cState),
m_cSubState(CampInfo.m_cSubState),
m_cUpgradeStep(CampInfo.m_cUpgradeStep),
m_cUpgradeType(0),
m_cZone(CampInfo.m_cZone),
m_cChannel(CampInfo.m_cChannel),
m_TimeValue(CampInfo.m_TimeValue),
m_LastUseTime(CampInfo.m_LastUseTime),
m_Pos(CampInfo.m_Pos),
m_cMaterial(CampInfo.m_cMaterial),
m_cSiegeCount(CampInfo.m_cSiegeCount),
m_dwRepairHP(0),
m_fDefaultDir(0),
m_cDevelopTime(Siege::DEFAULT_TIME_VALUE),
m_cUpgradeTime(Siege::DEFAULT_TIME_VALUE),
m_cRepairTime(Siege::DEFAULT_REPAIR_TIME),
m_cChangeTime(Siege::DEFAULT_TIME_VALUE),
m_DBComponent(DBComponent)
{
}
CSiegeObjectDB::CSiegeObjectDB(CDBComponent& DBComponent, unsigned long dwCampID,
unsigned long dwGID, unsigned char cZone,
unsigned char cChannel, Position Pos)
: m_dwCID(0),
m_dwCampOrCastleID(dwCampID),
m_dwOwnerID(0),
m_dwGID(dwGID),
m_cNation(0),
m_dwHP(0),
m_wObjectType(Siege::CAMP),
m_cSubState(0),
m_cState(DEVELOPING),
m_cUpgradeStep(0),
m_cUpgradeType(0),
m_cZone(cZone),
m_cChannel(cChannel),
m_Pos(Pos),
m_cMaterial(0),
m_cSiegeCount(0),
m_dwRepairHP(0),
m_fDefaultDir(0),
m_cDevelopTime(Siege::DEFAULT_TIME_VALUE),
m_cUpgradeTime(Siege::DEFAULT_TIME_VALUE),
m_cRepairTime(Siege::DEFAULT_REPAIR_TIME),
m_cChangeTime(Siege::DEFAULT_TIME_VALUE),
m_DBComponent(DBComponent)
{
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;
m_LastUseTime = m_TimeValue;
}
CSiegeObjectDB::CSiegeObjectDB(CDBComponent& DBComponent, unsigned long dwOwnerID,
unsigned char cNation, unsigned short wObjectType,
unsigned char cUpgradeStep, unsigned char cZone, unsigned char cChannel,
Position Pos)
: m_dwCID(0),
m_dwCampOrCastleID(0),
m_dwOwnerID(dwOwnerID),
m_dwGID(0),
m_cNation(cNation),
m_dwHP(0),
m_wObjectType(wObjectType),
m_cSubState(0),
m_cState(DEVELOPING),
m_cUpgradeStep(cUpgradeStep),
m_cUpgradeType(0),
m_cZone(cZone),
m_cChannel(cChannel),
m_Pos(Pos),
m_cMaterial(0),
m_cSiegeCount(0),
m_dwRepairHP(0),
m_fDefaultDir(0),
m_cDevelopTime(Siege::DEFAULT_TIME_VALUE),
m_cUpgradeTime(Siege::DEFAULT_TIME_VALUE),
m_cRepairTime(Siege::DEFAULT_REPAIR_TIME),
m_cChangeTime(Siege::DEFAULT_TIME_VALUE),
m_DBComponent(DBComponent)
{
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;
m_LastUseTime = m_TimeValue;
}
CSiegeObjectDB::~CSiegeObjectDB()
{
}
void CSiegeObjectDB::SendCampCmd(unsigned char cSubCmd, unsigned long dwValue1, unsigned long dwValue2)
{
if ( IsCamp() )
{
SERVER_ID serverID;
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = CServerSetup::GetInstance().GetServerGroup();
serverID.sID.Channel = m_cChannel;
serverID.sID.ID = m_cZone;
GET_MULTI_DISPATCH(lpGameDispatch, serverID.dwID,
DBAgent::CGameDispatch, DBAgent::CGameDispatch::GetDispatchTable());
if(0 != lpGameDispatch)
{
CSendStream& SendStream = lpGameDispatch->GetSendStream();
char* lpBuffer = SendStream.GetBuffer(sizeof(PktCampCmd));
if(0 != lpBuffer)
{
PktCampCmd* lpPktCampCmd = reinterpret_cast<PktCampCmd*>(lpBuffer);
lpPktCampCmd->m_dwCID = m_dwCID;
lpPktCampCmd->m_dwCampID = GetCampID();
lpPktCampCmd->m_cState = m_cState;
lpPktCampCmd->m_dwValue1 = dwValue1;
lpPktCampCmd->m_dwValue2 = dwValue2;
lpPktCampCmd->m_cSubCmd = cSubCmd;
SendStream.WrapHeader(sizeof(PktCampCmd), CmdCampCmd, 0, 0);
}
}
}
}
void CSiegeObjectDB::SendCastleCmd(unsigned long dwValue, unsigned char cSubCmd)
{
if ( IsCastleObject() )
{
SERVER_ID serverID;
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = CServerSetup::GetInstance().GetServerGroup();
serverID.sID.Channel = m_cChannel;
serverID.sID.ID = m_cZone;
GET_MULTI_DISPATCH(lpGameDispatch, serverID.dwID,
DBAgent::CGameDispatch, DBAgent::CGameDispatch::GetDispatchTable());
if (0 != lpGameDispatch)
{
CSendStream& SendStream = lpGameDispatch->GetSendStream();
char* lpBuffer = SendStream.GetBuffer(sizeof(PktCampCmd));
if (0 != lpBuffer)
{
PktCastleCmd* lpPktCastleCmd = reinterpret_cast<PktCastleCmd*>(lpBuffer);
lpPktCastleCmd->m_dwCastleID = GetCastleID();
lpPktCastleCmd->m_dwCastleObjectID = m_dwCID;
lpPktCastleCmd->m_cState = m_cState;
lpPktCastleCmd->m_dwValue1 = dwValue;
lpPktCastleCmd->m_dwValue2 = 0;
lpPktCastleCmd->m_cSubCmd = cSubCmd;
SendStream.WrapHeader(sizeof(PktCastleCmd), CmdCastleCmd, 0, 0);
}
}
}
}
void CSiegeObjectDB::SendSiegeArmsCmd(unsigned long dwValue, unsigned char cSubCmd)
{
if ( IsSiegeArms() )
{
SERVER_ID serverID;
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = CServerSetup::GetInstance().GetServerGroup();
serverID.sID.Channel = m_cChannel;
serverID.sID.ID = m_cZone;
GET_MULTI_DISPATCH(lpGameDispatch, serverID.dwID,
DBAgent::CGameDispatch, DBAgent::CGameDispatch::GetDispatchTable());
if(0 != lpGameDispatch)
{
CSendStream& SendStream = lpGameDispatch->GetSendStream();
char* lpBuffer = SendStream.GetBuffer(sizeof(PktSiegeArmsCmd));
if(0 != lpBuffer)
{
PktSiegeArmsCmd* lpPktSiegeArmsCmd = reinterpret_cast<PktSiegeArmsCmd*>(lpBuffer);
lpPktSiegeArmsCmd->m_dwCID = m_dwOwnerID;
lpPktSiegeArmsCmd->m_dwArmsID = m_dwCID;
lpPktSiegeArmsCmd->m_cState = m_cState;
lpPktSiegeArmsCmd->m_dwValue = dwValue;
lpPktSiegeArmsCmd->m_cSubCmd = cSubCmd;
SendStream.WrapHeader(sizeof(PktSiegeArmsCmd), CmdSiegeArmsCmd, 0, 0);
}
}
}
}
void CSiegeObjectDB::UpdateLastUseTime(bool bInit)
{
if (bInit)
{
m_LastUseTime.Year = 0;
m_LastUseTime.Month = 0;
m_LastUseTime.Day = 0;
m_LastUseTime.Hour = 0;
m_LastUseTime.Minute = 0;
m_LastUseTime.Second = 0;
}
else
{
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
m_LastUseTime.Year = sysTime.wYear;
m_LastUseTime.Month = sysTime.wMonth;
m_LastUseTime.Day = sysTime.wDay;
m_LastUseTime.Hour = sysTime.wHour;
m_LastUseTime.Minute = sysTime.wMinute;
m_LastUseTime.Second = sysTime.wSecond;
}
}
bool CSiegeObjectDB::IsCamp() const
{
switch ( m_wObjectType )
{
case Siege::CAMP:
case Siege::CAMP_SHOP:
case Siege::MINING_CAMP:
case Siege::KARTERANT_WEAPON:
case Siege::MERKADIA_WEAPON:
return true;
}
return false;
}
bool CSiegeObjectDB::IsCastleObject() const
{
switch ( m_wObjectType )
{
case Siege::EMBLEM :
case Siege::GATE :
case Siege::BACKDOOR :
case Siege::CASTLE_ARMS_NPC :
case Siege::GUARD :
case Siege::SHORT_RANGE_CASTLE_ARMS :
case Siege::LONG_RANGE_CASTLE_ARMS :
{
return true;
}
}
return false;
}
bool CSiegeObjectDB::IsCastleArms() const
{
switch ( m_wObjectType )
{
case Siege::GUARD :
case Siege::SHORT_RANGE_CASTLE_ARMS :
case Siege::LONG_RANGE_CASTLE_ARMS :
case Siege::CASTLE_ARMS_NPC :
{
return true;
}
}
return false;
}
bool CSiegeObjectDB::IsSiegeArms() const
{
switch ( m_wObjectType )
{
case Siege::SHORT_RANGE_SIEGE_ARMS :
case Siege::LONG_RANGE_SIEGE_ARMS :
case Siege::AIRSHIP :
{
return true;
}
}
return false;
}
bool CSiegeObjectDB::IsRidable() const
{
switch ( m_wObjectType )
{
case Siege::SHORT_RANGE_CASTLE_ARMS :
case Siege::LONG_RANGE_CASTLE_ARMS :
case Siege::SHORT_RANGE_SIEGE_ARMS :
case Siege::LONG_RANGE_SIEGE_ARMS :
case Siege::AIRSHIP :
{
return true;
}
}
return false;
}
bool CSiegeObjectDB::IsWorldWeapon() const
{
if (Siege::KARTERANT_WEAPON == m_wObjectType || Siege::MERKADIA_WEAPON == m_wObjectType)
{
return true;
}
return false;
}
void CSiegeObjectDB::SetGID(unsigned long dwGID)
{
m_dwGID = dwGID;
// if (IsEmblem() && 0 == dwGID)
// {
// m_cState = Siege::COMPLETE;
// m_cSubState = Siege::NONE;
// }
}
void CSiegeObjectDB::SetNation(unsigned char cNation)
{
m_cNation = cNation ;
if (IsEmblem() && Creature::STATELESS == cNation)
{
m_cState = Siege::COMPLETE;
m_cSubState = Siege::NONE;
}
}
void CSiegeObjectDB::SetZoneChannel(unsigned char cZone, unsigned char cChannel)
{
m_cZone = cZone;
m_cChannel = cChannel;
}
void CSiegeObjectDB::SetMaterialNum(unsigned char cMaterial)
{
m_cMaterial = cMaterial;
}

View File

@@ -0,0 +1,136 @@
#ifndef _RYL_DBAGENT_SIEGE_OBJECT_DB_H_
#define _RYL_DBAGENT_SIEGE_OBJECT_DB_H_
#pragma once
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include <Creature/CreatureStructure.h>
using namespace Siege;
// forward decl.
class CDBComponent;
class CSiegeObjectDB
{
public:
virtual ~CSiegeObjectDB();
// Process <20>Լ<EFBFBD>
virtual Siege::eReturn Process() { return Siege::RET_OK; }
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
virtual bool CancelBuild() { return false; }
virtual bool Cancel() { return false; }
virtual bool Build(unsigned short wType, unsigned char cDevelopTime, unsigned long dwDevelopGold = 0, unsigned long dwOwnerID = 0) { return false; }
virtual bool Upgrade(unsigned char cUpgradeTime, unsigned long dwUpgradeGold = 0, unsigned char cUpgradeType = Siege::NO_JEWEL) { return false; }
virtual bool Repair(unsigned long dwRepairHP, unsigned long dwRepairGold = 0) { return false; }
virtual bool Restore(unsigned char cRestoreTime, unsigned long dwRestoreGold = 0) { return false; }
virtual bool Destroy(unsigned long dwEnemyNation = 0, bool bDeductFame = false) { return false; }
virtual bool ChangeType(unsigned short wType) { return false; }
virtual void UpdateRewardFame() { }
virtual void UpdateLastUseTime(bool bInit=false);
virtual void UpdateHP(unsigned long dwNowHP) { m_dwHP = dwNowHP; }
virtual bool ToStartKit() { return false; }
// To GameServer
void SendCampCmd(unsigned char cSubCmd, unsigned long dwValue1=0, unsigned long dwValue2=0);
void SendCastleCmd(unsigned long dwValue, unsigned char cSubCmd);
void SendSiegeArmsCmd(unsigned long dwValue, unsigned char cSubCmd);
// Get / Set <20>Լ<EFBFBD>
bool IsEmblem() const { return (Siege::EMBLEM == m_wObjectType); }
bool IsCamp() const;
bool IsGate() const { return (Siege::GATE == m_wObjectType); }
bool IsGuard() const { return (Siege::GUARD == m_wObjectType); }
bool IsCastleObject() const;
bool IsCastleArms() const;
bool IsSiegeArms() const;
bool IsRidable() const;
bool IsWorldWeapon() const;
unsigned long GetCID() const { return m_dwCID; }
unsigned long GetGID() const { return m_dwGID; } // <20><><EFBFBD><EFBFBD>!! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long GetNation() const { return m_cNation; } // <20><><EFBFBD><EFBFBD>!! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><20><><EFBFBD><EFBFBD>
unsigned long GetNowHP() const { return m_dwHP; }
unsigned char GetState() const { return m_cState; }
unsigned char GetSubState() const { return m_cSubState; }
unsigned char GetUpgradeStep() const { return m_cUpgradeStep; }
unsigned char GetZone() const { return m_cZone; }
unsigned char GetChannel() const { return m_cChannel; }
const Position& GetPosition() const { return m_Pos; }
unsigned char GetMaterialNum() const { return m_cMaterial; }
unsigned char GetSiegeCount() const { return m_cSiegeCount; }
unsigned short GetObjectType() const { return m_wObjectType; }
unsigned char GetDevelopTime() const { return m_cDevelopTime; }
unsigned char GetUpgradeTime() const { return m_cUpgradeTime; }
unsigned char GetRepairTime() const { return m_cRepairTime; }
unsigned char GetChangeTime() const { return m_cChangeTime; }
const TIME& GetTimeValue() const { return m_TimeValue; }
const TIME& GetLastUseTime() const { return m_LastUseTime; }
unsigned long GetCastleID() const { return m_dwCampOrCastleID; } // <20><> <20><>¡<EFBFBD><C2A1>, <20><><EFBFBD><EFBFBD>/<2F>޹<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long GetCampID() const { return m_dwCampOrCastleID; } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long GetOwnerID() const { return m_dwOwnerID; } // <20>ٰŸ<D9B0>/<2F><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>ٰŸ<D9B0>/<2F><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetGID(unsigned long dwGID); // <20><><EFBFBD><EFBFBD>!! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void SetNation(unsigned char cNation); // <20><><EFBFBD><EFBFBD>!! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><20><><EFBFBD><EFBFBD>
void SetZoneChannel(unsigned char cZone, unsigned char cChannel);
virtual void SetMaterialNum(unsigned char cMaterial);
void SetSiegeCount(unsigned char cSiegeCount) { m_cSiegeCount = cSiegeCount; }
protected:
CSiegeObjectDB(CDBComponent& DBComponent, const CastleObjectInfoDB& CastleObject);
CSiegeObjectDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo);
CSiegeObjectDB(CDBComponent& DBComponent, unsigned long dwCampID,
unsigned long dwGID, unsigned char cZone, unsigned char cChannel, Position Pos);
CSiegeObjectDB(CDBComponent& DBComponent, unsigned long dwOwnerID,
unsigned char cNation, unsigned short wObjectType, unsigned char cUpgradeStep,
unsigned char cZone, unsigned char cChannel, Position Pos);
void SetCID(unsigned long dwCID) { m_dwCID = dwCID; }
unsigned long m_dwCID; // CID : SIEGE_OBJECT_BIT <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CreatureID
unsigned long m_dwCampOrCastleID; // CampID : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// CastleID : <20><> <20><>¡<EFBFBD><C2A1>, <20><><EFBFBD><EFBFBD>, <20>޹<EFBFBD>, <20><><EFBFBD><EFBFBD>, <20>ٰŸ<D9B0>/<2F><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ID
unsigned long m_dwOwnerID; // CID : <20>ٰŸ<D9B0>/<2F><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ٰŸ<D9B0>/<2F><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long m_dwGID; // GID : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ID (<28><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
unsigned char m_cNation; // <20><> <20><>¡<EFBFBD><C2A1>, <20><><EFBFBD><EFBFBD>, <20>޹<EFBFBD>, <20><><EFBFBD><EFBFBD>, <20>ٰŸ<D9B0>/<2F><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><20><><EFBFBD><EFBFBD>)
unsigned long m_dwHP; // HP
unsigned short m_wObjectType; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ÿ<><C5B8>
unsigned char m_cState; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
unsigned char m_cSubState; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Use EMBLEM & GATE)
unsigned char m_cUpgradeStep; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>ܰ<EFBFBD>
unsigned char m_cUpgradeType; // <20><> <20><>¡<EFBFBD><C2A1><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> Ÿ<><C5B8> (Only EMBLEM)
unsigned char m_cDevelopTime; // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)<29><> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ð<EFBFBD> (<28><>)
unsigned char m_cUpgradeTime; // <20><><EFBFBD>׷<EFBFBD><D7B7>̵忡 <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ð<EFBFBD> (<28><>)
unsigned char m_cRepairTime; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ð<EFBFBD> (<28><>)
unsigned char m_cChangeTime; // Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ð<EFBFBD> (<28><>)
unsigned char m_cZone; // <20><> (Only CAMP)
unsigned char m_cChannel; // ä<><C3A4> (Only CAMP)
TIME m_TimeValue; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
TIME m_LastUseTime; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (Use CAMP & SIEGE_ARMS & CASTLE_ARMS)
Position m_Pos; // <20><>ġ
unsigned char m_cMaterial; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cSiegeCount; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD>
unsigned long m_dwRepairHP; // <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD> ȸ<><C8B8><EFBFBD><EFBFBD> HP <20><>
float m_fDefaultDir; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD>
CDBComponent& m_DBComponent; // DB
friend class CSiegeObjectDBMgr;
};
#endif // _RYL_DBAGENT_SIEGE_OBJECT_DB_H_

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,126 @@
#ifndef _SIEGE_OBJECT_MANAGER_H_
#define _SIEGE_OBJECT_MANAGER_H_
#pragma once
#include <map>
#include <list>
#include <boost/pool/pool.hpp>
#include <boost/pool/pool_alloc.hpp>
#include <Creature/Siege/SiegeConstants.h>
#include <Network/Packet/PacketStruct/CastlePacket.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class CSendStream;
class CDBComponent;
class CSiegeObjectDB;
class CCampDB;
class CSiegeObjectDBMgr
{
public:
static CSiegeObjectDBMgr& GetInstance();
// Ÿ<><C5B8> <20><><EFBFBD><EFBFBD>
typedef std::map<unsigned long, CSiegeObjectDB*> SiegeObjectMap; // < CID, CSiegeObjectDB* >
typedef std::map<unsigned long, CCampDB*> CampMap; // < CampID, CCampDB* >
bool Initialize(CDBComponent& DBComponent);
void Process();
void UpdateSiegeCount(); // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
void UpdateRewardFame(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD> <20><><EFBFBD><EFBFBD>
void DecreaseWeaponRemainSiegeTime(); // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ȴ<EFBFBD>.
// DB <20><><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>
CSiegeObjectDB* CreateCastleObject(CastleObjectInfoDB& CastleObject);
CSiegeObjectDB* CreateCamp(CampInfoDB& CampInfo, unsigned long dwCID=0);
CSiegeObjectDB* CreateMiningCamp(CampInfoDB& CampInfo, unsigned long dwCID=0);
CSiegeObjectDB* CreateCampShop(CampInfoDB& CampInfo, unsigned long dwCID=0);
CSiegeObjectDB* CreateWorldWeapon(CampInfoDB& CampInfo, unsigned long dwCID=0);
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> DB <20><> <20>߰<EFBFBD><DFB0>ϴ<EFBFBD> <20>Լ<EFBFBD>
CSiegeObjectDB* CreateCamp(unsigned long dwGID, unsigned char cZone, unsigned char cChannel, POS Pos);
CSiegeObjectDB* CreateWorldWeapon(unsigned long dwGID, unsigned short wObjectType, unsigned char cZone, unsigned char cChannel, POS Pos);
CSiegeObjectDB* CreateSiegeArms(unsigned long dwOwnerID, unsigned char cNation, unsigned char cZone, unsigned char cChannel,
unsigned short wObjectType, unsigned char cUpgradeStep, POS Pos);
// Get <20>Լ<EFBFBD>
CCampDB* GetCamp(unsigned long dwCampID);
CSiegeObjectDB* GetSiegeObject(unsigned long dwObjectID);
unsigned char GetWorldWeaponNation(unsigned char cZone, unsigned char cChannel) const; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void DeleteWorldWeaponNation(unsigned char cZone, unsigned char cChannel); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
void UpdateWorldWeaponInfo(unsigned char cZone, unsigned char cChannel, unsigned char cOwenrNation,
unsigned char cDestroyedWeaponNation, unsigned char cRemainSiegeTime);
bool HasCampByGID(unsigned long dwGID, unsigned long dwExceptCampID=0);
// <20><>ü <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool DeleteSiegeObject(unsigned long dwCID);
bool DeleteSiegeObject(CSiegeObjectDB* lpObject);
CampMap::iterator DeleteCamp(unsigned long dwCampID);
int DestroyCamp(unsigned long dwGID); // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD>, <20>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void DestroySiegeArms(unsigned long dwOnwerCID); // <20><><EFBFBD><EFBFBD> Ż<><C5BB><EFBFBD><EFBFBD> <20>ش<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>
void DestoryAllSiegeArms(); // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool ChangeCampType(unsigned long dwCampID, unsigned short wChangeType);
// GameServer <20><><EFBFBD><EFBFBD> Send <20>Լ<EFBFBD>
void SendWorldWeaponInfo(CSendStream& SendStream, unsigned char cZone, unsigned char cChannel);
void SendCampInfo(CSendStream& SendStream, unsigned char cZone, unsigned char cChannel);
void SendSiegeArmsInfo(CSendStream& SendStream, unsigned char cZone, unsigned char cChannel);
void SendProcessMining(unsigned long dwProcessType);
bool SerializeOutCastleObject(CSiegeObjectDB* lpObject_In, char* lpBuffer_Out, unsigned short& wBufferSize_Out);
private:
CSiegeObjectDBMgr();
~CSiegeObjectDBMgr();
// CSiegeObjectDBMgr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD>
typedef struct _WorldWeaponInfo
{
unsigned char m_cWorldWeaponNation; // <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cKarRemainSiegeTime; // ī<><C4AB><EFBFBD>׶<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD>
unsigned char m_cMerRemainSiegeTime; // <20>޸<EFBFBD>ī<EFBFBD><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD>
} WorldWeaponInfo;
typedef std::map<unsigned long, WorldWeaponInfo> WorldWeaponInfoMap; // < dwZoneChannel, WorldWeaponInfo >
// dwZoneChannel : Zone(16bit) | Channel(16bit)
bool ReadCastleObjectInfoDB();
bool ReadWorldWeaponInfoDB();
bool ReadCampInfoDB();
unsigned long GetBlankIndex();
void CreateDummyCamp();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>
CSiegeObjectDB* CreateCastleObjectDB(const CastleObjectInfoDB& CastleObject);
CSiegeObjectDB* CreateCampDB(const CampInfoDB& CampInfo);
CSiegeObjectDB* CreateMiningCampDB(const CampInfoDB& CampInfo);
CSiegeObjectDB* CreateCampShopDB(const CampInfoDB& CampInfo);
CSiegeObjectDB* CreateWorldWeaponDB(const CampInfoDB& CampInfo);
CSiegeObjectDB* CreateCampDB(unsigned long dwCampID, unsigned long dwGID,
unsigned char cZone, unsigned char cChannel, Position Pos);
CSiegeObjectDB* CreateWorldWeaponDB(unsigned long dwCampID, unsigned long dwGID, unsigned short wObjectType,
unsigned char cZone, unsigned char cChannel, Position Pos);
CSiegeObjectDB* CreateSiegeArmsDB(unsigned long dwOwnerID,
unsigned char cNation, unsigned short wObjectType, unsigned char cUpgradeStep,
unsigned char cZone, unsigned char cChannel, Position Pos);
void DeleteSiegeObjectDB(CSiegeObjectDB* lpSiegeObjectDB);
SiegeObjectMap m_SiegeObjectMap;
CampMap m_CampMap;
WorldWeaponInfoMap m_WorldWeaponInfoMap;
CDBComponent* m_lpDBComponent;
};
#endif // _SIEGE_OBJECT_MANAGER_H_

View File

@@ -0,0 +1,183 @@
#include "stdafx.h"
#include "WorldWeaponDB.h"
#include "SiegeObjectDBMgr.h"
#include <DB/DBComponent.h>
#include <Castle/CastleDBComponent.h>
#include <Community/Guild/GuildDB.h>
#include <Community/Guild/GuildDBMgr.h>
#include <Network/Packet/WrapPacket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <Network/Dispatch/GameDispatch.h>
#include <Log/ServerLog.h>
CWorldWeaponDB::CWorldWeaponDB(CDBComponent& DBComponent, unsigned long dwCampID, unsigned long dwGID, unsigned short wObjectType,
unsigned char cZone, unsigned char cChannel, Position Pos)
: CCampDB(DBComponent, dwCampID, dwGID, cZone, cChannel, Pos), m_iFireX(0), m_iFireZ(0)
{
m_wObjectType = wObjectType;
}
CWorldWeaponDB::CWorldWeaponDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo)
: CCampDB(DBComponent, CampInfo), m_iFireX(0), m_iFireZ(0)
{
}
CWorldWeaponDB::~CWorldWeaponDB()
{
}
bool CWorldWeaponDB::UpdateWeaponState(unsigned char cWeaponState, unsigned long dwValue1, unsigned long dwValue2)
{
if (Siege::WEAPON_CHARGE != cWeaponState && Siege::WEAPON_FIRE != cWeaponState)
{
return false;
}
switch (cWeaponState)
{
case Siege::WEAPON_CHARGE: m_cChargeTime = static_cast<unsigned char>(dwValue1); break;
case Siege::WEAPON_FIRE: m_iFireX = static_cast<int>(dwValue1); m_iFireZ = static_cast<int>(dwValue2); break;
}
m_cSubState = cWeaponState;
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::UpdateCampSubState(m_DBComponent, GetCampID(), m_cSubState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
return true;
}
bool CWorldWeaponDB::Fire()
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD> <20><><EFBFBD><EFBFBD> DB <20><> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
if (Siege::KARTERANT_WEAPON == m_wObjectType)
{
DBComponent::CastleDB::InsertWorldWeaponInfo(m_DBComponent, GetZone(), GetChannel(), Creature::KARTERANT);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CSiegeObjectDBMgr::GetInstance().UpdateWorldWeaponInfo(GetZone(), GetChannel(), Creature::STATELESS,
Creature::KARTERANT, Siege::WEAPON_REBUILD_SIEGE_TIME_COUNT);
}
else if (Siege::MERKADIA_WEAPON == m_wObjectType)
{
DBComponent::CastleDB::InsertWorldWeaponInfo(m_DBComponent, GetZone(), GetChannel(), Creature::MERKADIA);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CSiegeObjectDBMgr::GetInstance().UpdateWorldWeaponInfo(GetZone(), GetChannel(), Creature::STATELESS,
Creature::MERKADIA, Siege::WEAPON_REBUILD_SIEGE_TIME_COUNT);
}
return true;
}
Siege::eReturn CWorldWeaponDB::Process()
{
CTime nowTime = CTime::GetCurrentTime();
CTimeSpan timeSpan(0);
// <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> (<28><><EFBFBD><EFBFBD>)
if (Siege::COMPLETE == m_cState && Siege::WEAPON_CHARGE == m_cSubState)
{
if (0 != m_TimeValue.Year)
{
CTime chargeTime(m_TimeValue.Year, m_TimeValue.Month, m_TimeValue.Day,
m_TimeValue.Hour, m_TimeValue.Minute, m_TimeValue.Second);
timeSpan = nowTime - chargeTime;
if (timeSpan.GetTotalMinutes() >= m_cChargeTime)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
m_cSubState = Siege::WEAPON_READY;
// 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::UpdateCampSubState(m_DBComponent, GetCampID(), m_cSubState);
DBComponent::CastleDB::UpdateCampTime(m_DBComponent, GetCampID(), Siege::TYPE_REMAIN_TIME, sysTime);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
SendCampCmd(PktCampCmd::WORLDWEAPON_CHARGE_COMPLETE);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
PktCampMessage pktCampMessage;
memset(&pktCampMessage, 0, sizeof(PktCampMessage));
// <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><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>
pktCampMessage.m_cMsgCmd = PktCampMessage::MSGCMD_WEAPON_CHARGE_END;
pktCampMessage.m_dwCampID = GetCampID();
pktCampMessage.m_dwGID = m_dwGID;
pktCampMessage.m_cZone = m_cZone;
pktCampMessage.m_bNotify = true;
Guild::CGuildDB* lpGuild = static_cast<Guild::CGuildDB *>(
Guild::CGuildDBMgr::GetInstance().GetGuild(m_dwGID));
if (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));
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
return RET_OK;
}
}
}
return CCampDB::Process();
}
bool CWorldWeaponDB::Cancel()
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CSiegeObjectDBMgr::GetInstance().DeleteWorldWeaponNation(GetZone(), GetChannel());
return CCampDB::Cancel();
}
bool CWorldWeaponDB::Destroy(unsigned long dwEnemyGID, bool bDeductFame)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD> <20><><EFBFBD><EFBFBD> DB <20><> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
if (Siege::KARTERANT_WEAPON == m_wObjectType)
{
DBComponent::CastleDB::InsertWorldWeaponInfo(m_DBComponent, GetZone(), GetChannel(), Creature::KARTERANT);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CSiegeObjectDBMgr::GetInstance().UpdateWorldWeaponInfo(GetZone(), GetChannel(), Creature::STATELESS,
Creature::KARTERANT, Siege::WEAPON_REBUILD_SIEGE_TIME_COUNT);
}
else if (Siege::MERKADIA_WEAPON == m_wObjectType)
{
DBComponent::CastleDB::InsertWorldWeaponInfo(m_DBComponent, GetZone(), GetChannel(), Creature::MERKADIA);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CSiegeObjectDBMgr::GetInstance().UpdateWorldWeaponInfo(GetZone(), GetChannel(), Creature::STATELESS,
Creature::MERKADIA, Siege::WEAPON_REBUILD_SIEGE_TIME_COUNT);
}
return CCampDB::Destroy(dwEnemyGID, bDeductFame);
}

View File

@@ -0,0 +1,57 @@
//--------------------------------------------------------------------------------------------------------------------------
// File Name: WorldWeaponDB.h
//
// Programmer: Zergra( Park Jongtae ) in GamaSoft corp.
//
// File Desciption: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB
//
// Date: 2004. 12. 14. (ȭ)
//--------------------------------------------------------------------------------------------------------------------------
#ifndef _RYL_DBAGENT_WORLD_WEAPON_DB_H_
#define _RYL_DBAGENT_WORLD_WEAPON_DB_H_
#pragma once
//--------------------------------------------------------------------------------------------------------------------------
// Headers
//--------------------------------------------------------------------------------------------------------------------------
#include "CampDB.h"
//--------------------------------------------------------------------------------------------------------------------------
// Classes
//--------------------------------------------------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
// class CWorldWeaponDB
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
class CWorldWeaponDB : public CCampDB
{
public:
virtual ~CWorldWeaponDB();
// Process <20>Լ<EFBFBD>
Siege::eReturn Process();
// Cmd ó<><C3B3> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
bool Cancel(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD>
bool Destroy(unsigned long dwEnemyGID = 0, bool bDeductFame = false);
bool UpdateWeaponState(unsigned char cWeaponState, unsigned long dwValue1, unsigned long dwValue2);
bool Fire();
protected:
// Client <20><> <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CWorldWeaponDB(CDBComponent& DBComponent, unsigned long dwCampID, unsigned long dwGID, unsigned short wObjectType,
unsigned char cZone, unsigned char cChannel, Position Pos);
// DB <20><><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>
CWorldWeaponDB(CDBComponent& DBComponent, const CampInfoDB& CampInfo);
unsigned char m_cChargeTime;
int m_iFireX, m_iFireZ;
friend class CSiegeObjectDBMgr;
};
#endif //_RYL_DBAGENT_WORLD_WEAPON_DB_H_

View File

@@ -0,0 +1,265 @@
#include "stdafx.h"
#include "StatueDBMgr.h"
#include <DB/DBComponent.h>
#include <Log/ServerLog.h>
#include <Utility/Setup/ServerSetup.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/WrapPacket.h>
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include <Network/Stream/SendStream.h>
#include <Network/Dispatch/GameDispatch.h>
#include <Creature/Monster/MonsterStructure.h>
CStatueDBMgr& CStatueDBMgr::GetInstance()
{
static CStatueDBMgr ms_this;
return ms_this;
}
CStatueDBMgr::CStatueDBMgr()
: m_lpDBComponent(NULL)
{
}
CStatueDBMgr::~CStatueDBMgr()
{
ClearStatueMap();
}
bool CStatueDBMgr::Initialize(CDBComponent& DBComponent)
{
ClearStatueMap();
m_lpDBComponent = &DBComponent;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>ũ ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> or <20>ű<EFBFBD><C5B1><EFBFBD>
if (true == CServerSetup::GetInstance().UseContents(GameRYL::STONE_BATTLE))
// || true == CServerSetup::GetInstance().UseContents(GameRYL::NEWZONE_ZONE9))
{
const int MAX_ROWS = 1000;
int nGetRows = 0;
char szBuffer[CDBComponent::QUERY_BUFFER_LEN];
_snprintf(szBuffer, CDBComponent::QUERY_BUFFER_LEN - 1,
"SELECT "
"TblStatueInfo.nIndex, "
"TblStatueInfo.tnChannel, "
"TblStatueInfo.snKID, "
"TblStatueInfo.nLostHP FROM TblStatueInfo ");
szBuffer[CDBComponent::QUERY_BUFFER_LEN - 1] = 0;
if (0 == m_lpDBComponent || !m_lpDBComponent->ExecuteQuery(szBuffer))
{
ERRLOG0(g_Log, "Statue DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
return false;
}
StatueInfoDB* statueInfo = new StatueInfoDB[MAX_ROWS];
memset(statueInfo, 0, sizeof(StatueInfoDB) * MAX_ROWS);
while (m_lpDBComponent->GetData((void**)statueInfo, sizeof(StatueInfoDB), MAX_ROWS, &nGetRows))
{
if (0 == nGetRows) { break; }
for (StatueInfoDB* lpStatueInfo = statueInfo; nGetRows > 0; --nGetRows, ++lpStatueInfo)
{
StatueInfoDB* lpStatue = CreateStatue(*lpStatueInfo);
if (NULL != lpStatue)
{
unsigned long dwKey = CalcKeyValue(lpStatue->m_dwIndex, lpStatue->m_cChannel);
if (!m_StatueMap.insert(std::make_pair(dwKey, lpStatue)).second)
{
ERRLOG2(g_Log, "Statue DB<44><42> <20>ߺ<EFBFBD><DFBA><EFBFBD> Ű<><C5B0><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. Index: %d / Channel: %d",
lpStatue->m_dwIndex, lpStatue->m_cChannel);
memset(statueInfo, 0, sizeof(StatueInfoDB) * MAX_ROWS);
delete [] statueInfo;
return false;
}
}
else
{
ERRLOG2(g_Log, "Statue DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. Index: %d / Channel: %d",
lpStatueInfo->m_dwIndex, lpStatueInfo->m_cChannel);
memset(statueInfo, 0, sizeof(StatueInfoDB) * MAX_ROWS);
delete [] statueInfo;
return false;
}
}
memset(statueInfo, 0, sizeof(StatueInfoDB) * MAX_ROWS);
}
delete [] statueInfo;
SERLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Initalize <20><><EFBFBD><EFBFBD>.");
}
return true;
}
unsigned long CStatueDBMgr::CalcKeyValue(unsigned long dwIndex, unsigned char cChannel) const
{
return static_cast<unsigned long>( (dwIndex << 16) | (cChannel) );
}
bool CStatueDBMgr::UpdateKID(unsigned long dwIndex, unsigned char cChannel, unsigned short wNewKID)
{
unsigned long dwKey = CalcKeyValue(dwIndex, cChannel);
StatueMap::iterator itr = m_StatueMap.find(dwKey);
if (itr == m_StatueMap.end())
{
return false;
}
char szBuffer[CDBComponent::QUERY_BUFFER_LEN];
_snprintf(szBuffer, CDBComponent::QUERY_BUFFER_LEN - 1,
"UPDATE TblStatueInfo SET snKID=%d WHERE nIndex=%d and tnChannel=%d",
wNewKID, dwIndex, cChannel);
szBuffer[CDBComponent::QUERY_BUFFER_LEN - 1] = 0;
if (0 == m_lpDBComponent || !m_lpDBComponent->ExecuteQuery(szBuffer))
{
ERRLOG0(g_Log, "Statue KID DB Update <20><><EFBFBD><EFBFBD>");
return false;
}
StatueInfoDB* lpStatue = itr->second;
if (0 != lpStatue)
{
lpStatue->m_wKID = wNewKID;
}
else
{
ERRLOG0(g_Log, "Statue KID Update <20><><EFBFBD><EFBFBD>");
return false;
}
return true;
}
bool CStatueDBMgr::UpdateLostHP(unsigned long dwIndex, unsigned char cChannel, unsigned long dwLostHP)
{
unsigned long dwKey = CalcKeyValue(dwIndex, cChannel);
StatueMap::iterator itr = m_StatueMap.find(dwKey);
if (itr == m_StatueMap.end())
{
return false;
}
char szBuffer[CDBComponent::QUERY_BUFFER_LEN];
_snprintf(szBuffer, CDBComponent::QUERY_BUFFER_LEN - 1,
"UPDATE TblStatueInfo SET nLostHP=%d WHERE nIndex=%d and tnChannel=%d",
dwLostHP, dwIndex, cChannel);
szBuffer[CDBComponent::QUERY_BUFFER_LEN - 1] = 0;
if (0 == m_lpDBComponent || !m_lpDBComponent->ExecuteQuery(szBuffer))
{
ERRLOG0(g_Log, "Statue LostHP DB Update <20><><EFBFBD><EFBFBD>");
return false;
}
StatueInfoDB* lpStatue = itr->second;
if (0 != lpStatue)
{
lpStatue->m_dwLostHP = dwLostHP;
}
else
{
ERRLOG0(g_Log, "Statue LostHP DB Update <20><><EFBFBD><EFBFBD>");
return false;
}
return true;
}
void CStatueDBMgr::SendStatueInfo(CSendStream& SendStream, unsigned char cChannel)
{
const unsigned int MAX_STATUE_INFO = sizeof(PktStatueCmd) + sizeof(StatueInfo) * 100;
char szBuffer[MAX_STATUE_INFO];
PktStatueCmd* lpPktStatueCmd = reinterpret_cast<PktStatueCmd*>(szBuffer);
StatueInfo* lpStatueInfo = reinterpret_cast<StatueInfo*>(lpPktStatueCmd + 1);
unsigned short wSize = 0;
unsigned short wStatueNum = 0;
StatueMap::const_iterator itr = m_StatueMap.begin();
StatueMap::const_iterator end = m_StatueMap.end();
while (itr != end)
{
const StatueInfoDB* lpStatue = itr->second;
if (0 != lpStatue)
{
if (lpStatue->m_cChannel == cChannel)
{
lpStatueInfo->m_dwIndex = lpStatue->m_dwIndex;
lpStatueInfo->m_wKID = lpStatue->m_wKID;
lpStatueInfo->m_dwLostHP = lpStatue->m_dwLostHP;
++lpStatueInfo;
++wStatueNum;
wSize += sizeof(StatueInfo);
}
}
else
{
ERRLOG0( g_Log, "Null StatueInfo <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD>ԵǾ<D4B5> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>." ) ;
}
++itr;
}
if (wStatueNum > 0)
{
lpPktStatueCmd->m_wSubCmd = PktStatueCmd::CMD_INFO;
lpPktStatueCmd->m_dwValue = wStatueNum;
lpPktStatueCmd->m_wSize = wSize;
SendStream.WrapCompress(szBuffer,
static_cast<unsigned short>(sizeof(PktStatueCmd) + wSize), CmdStatueCmd, 0, 0);
}
}
StatueInfoDB* CStatueDBMgr::CreateStatue( const StatueInfoDB& statueInfo )
{
StatueInfoDB* lpStatue = new StatueInfoDB;
if (0 != lpStatue)
{
lpStatue->m_dwIndex = statueInfo.m_dwIndex;
lpStatue->m_cChannel = statueInfo.m_cChannel;
lpStatue->m_wKID = statueInfo.m_wKID;
lpStatue->m_dwLostHP = statueInfo.m_dwLostHP;
}
return lpStatue;
}
void CStatueDBMgr::ClearStatueMap()
{
if (!m_StatueMap.empty())
{
StatueMap::iterator itr = m_StatueMap.begin();
StatueMap::iterator end = m_StatueMap.end();
while (itr != end)
{
if (itr->second)
{
delete itr->second;
itr->second = NULL;
}
++itr;
}
m_StatueMap.clear();
}
}

View File

@@ -0,0 +1,46 @@
#ifndef _RYL_DBAGENT_STATUE_DB_MANAGER_H_
#define _RYL_DBAGENT_STATUE_DB_MANAGER_H_
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>ü
#pragma once
#include <map>
#include <Network/Packet/PacketStruct/CastlePacket.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class CDBComponent;
class CSendStream;
class CStatueDBMgr
{
public:
static CStatueDBMgr& GetInstance();
// <Key, StatueInfo*> : Key = (Index << 16) | (Channel)
typedef std::map<unsigned long, StatueInfoDB*> StatueMap;
bool Initialize(CDBComponent& DBComponent);
unsigned long CalcKeyValue(unsigned long dwIndex, unsigned char cChannel) const;
bool UpdateKID(unsigned long dwIndex, unsigned char cChannel, unsigned short wNewKID);
bool UpdateLostHP(unsigned long dwIndex, unsigned char cChannel, unsigned long dwLostHP);
// Send to gameserver
void SendStatueInfo(CSendStream& SendStream, unsigned char cChannel);
private:
CStatueDBMgr();
~CStatueDBMgr();
StatueInfoDB* CreateStatue( const StatueInfoDB& statueInfo ) ;
void ClearStatueMap() ;
CDBComponent* m_lpDBComponent;
StatueMap m_StatueMap;
};
#endif // _RYL_DBAGENT_STATUE_DB_MANAGER_H_