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:
@@ -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;
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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_
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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_
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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_
|
||||
Reference in New Issue
Block a user