Files
Client/Server/RylServerProject/RylDBAgentServer/Creature/Siege/CastleEmblemDB.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

233 lines
6.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include "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;
}