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,117 @@
|
||||
#ifndef _GAME_TIME_CONSTANTS_H_
|
||||
#define _GAME_TIME_CONSTANTS_H_
|
||||
|
||||
namespace GameTime
|
||||
{
|
||||
// 게임 시간 타입
|
||||
enum TimeType
|
||||
{
|
||||
TYPE_NONE = 0,
|
||||
GUILD = 1, // 길드전 시간
|
||||
REALM = 2, // 렐름전 시간
|
||||
SIEGE = 3, // 공성 시간
|
||||
MINE = 4, // 매일 주기적으로 임시 채굴
|
||||
NEWZONE = 5, // 테섭용 신규존 입장제한
|
||||
|
||||
EVENT = 6, // 게임관련 이벤트
|
||||
|
||||
MAX_GAME_TIME_TYPE = 7
|
||||
};
|
||||
|
||||
|
||||
// 시간 주기
|
||||
enum Cycle
|
||||
{
|
||||
CYCLE_NONE = 0,
|
||||
WEEKLY = 1, // 매주 특저 요일 특정 시간대
|
||||
DAILY = 2, // 매일 특정 시간대
|
||||
MONTHLY = 3, // 매월 특정 날짜 특정 시간대
|
||||
DATE = 4, // 특정 날짜 특정 시간대
|
||||
|
||||
MAX_TIME_CYCLE_TYPE = 5
|
||||
};
|
||||
|
||||
|
||||
// 요일
|
||||
enum Week
|
||||
{
|
||||
WEEK_NONE = 0,
|
||||
SUNDAY = 1,
|
||||
MONDAY = 2,
|
||||
TUESDAY = 3,
|
||||
WEDNESDAY = 4,
|
||||
THURSDAY = 5,
|
||||
FRIDAY = 6,
|
||||
SATURDAY = 7,
|
||||
};
|
||||
|
||||
|
||||
// 길드전 시간 종류
|
||||
enum GuildTime
|
||||
{
|
||||
GT_NORMAL = 0, // 일반
|
||||
GT_PREPARE_START_30 = 1, // 길드전 시작 30분전
|
||||
GT_PREPARE_START_5 = 2, // 길드전 시작 5분전
|
||||
GT_GUILD_WAR = 3, // 길드전 시간
|
||||
GT_PREPARE_END_30 = 4, // 길드전 종료 30분전
|
||||
};
|
||||
|
||||
|
||||
// 렐름전 시간 종류
|
||||
enum RealmTime
|
||||
{
|
||||
RT_NORMAL = 0, // 일반
|
||||
RT_PREPARE_START_30 = 1, // 렐름전 시작 30분전
|
||||
RT_PREPARE_START_15 = 2, // 렐름전 시작 15분전
|
||||
RT_PREPARE_START_10 = 3, // 렐름전 시작 10분전
|
||||
RT_PREPARE_START_5 = 4, // 렐름전 시작 5분전
|
||||
RT_REALM_WAR = 5, // 렐름전 시간
|
||||
RT_REALM_WAR_END_5 = 6, // 렐름전 종료 5분전.
|
||||
};
|
||||
|
||||
|
||||
// 공성전 시간 종류
|
||||
enum SiegeTime
|
||||
{
|
||||
ST_NORMAL = 0, // 일반
|
||||
ST_PREPARE_START_5 = 1, // 공성전 시작 5분전
|
||||
ST_SIEGE_WAR = 2, // 공성 시간
|
||||
ST_PREPARE_END_5 = 3, // 공성전 종료 5분전
|
||||
};
|
||||
|
||||
// 신규존 시간 종류
|
||||
enum NewZoneTime
|
||||
{
|
||||
ET_LIMIT = 0, // 입장 불가
|
||||
ET_PREPARE_START_5 = 1, // 입장 5분전
|
||||
ET_ALLOWENTER = 2, // 입장 가능
|
||||
ET_PREPARE_END_5 = 3, // 종료 5분전
|
||||
};
|
||||
|
||||
// 임새 채굴 시간 종류
|
||||
enum MiningTime
|
||||
{
|
||||
MT_NORMAL = 0, // 일반
|
||||
MT_MINING = 1, // 채굴중인 시간 (MT_MINING -> MT_NORMAL 로 바뀔때 임시 채굴됨)
|
||||
};
|
||||
|
||||
// 게임 이벤트 종류
|
||||
enum EventTime
|
||||
{
|
||||
EVENT_NORMAL = 0, // 이벤트 시간이 아니다.
|
||||
EVENT_All20 = 1, // Value1 에 의해 결정되는 값으로 Value1 값이 이벤트 값이된다.
|
||||
EVENT_All50 = 2, // Value1 에 의해 결정되는 값으로 Value1 값이 이벤트 값이된다.
|
||||
};
|
||||
|
||||
// GameTimeInfo 패킷 종류
|
||||
enum GameTimeInfoType
|
||||
{
|
||||
TYPE_GAMESERVER_LOGIN = 0, // 게임서버가 중계서버에 연결될때 게임 시간 정보 전송
|
||||
TYPE_CHARACTER_LOGIN = 1, // 캐릭터가 게임서버에 로그인시 게임 시간 정보 전송
|
||||
TYPE_CHANGE_GAME_TIME = 2, // 게임 시간이 변경되어서 업데이트시
|
||||
TYPE_ENABLE_CASTLE_SIEGE = 3, // 특정 성의 공성 가능 정보 변경시
|
||||
TYPE_UPDATE_TIME = 4, // 클라이언트에게 주기적으로 시간 정보 업데이트시
|
||||
};
|
||||
}
|
||||
|
||||
#endif //_GAME_TIME_CONSTANTS_H_
|
||||
@@ -0,0 +1,120 @@
|
||||
#include "stdafx.h"
|
||||
#include "GameTimeDBComponent.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <GameTime/GameTimeConstants.h>
|
||||
#include <Network/Packet/PacketStruct/CastlePacket.h>
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
#include <DB/DBComponent.h>
|
||||
|
||||
#include <Utility/Math/Math.h>
|
||||
#include <Utility/Debug/PerformanceCheck.h>
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateGameTimeInfo(CDBComponent& DBComponent, unsigned char cGuildTime, unsigned char cRealmTime,
|
||||
unsigned char cSiegeTime, unsigned char cMiningTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(),
|
||||
"UPDATE TblGameTime SET GuildTime=%d, RealmTime=%d, SiegeTime=%d, MiningTime=%d", cGuildTime, cRealmTime, cSiegeTime, cMiningTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "게임 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateGuildTime(CDBComponent& DBComponent, unsigned char cGuildTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(), "UPDATE TblGameTime SET GuildTime=%d", cGuildTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "길드전 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateRealmTime(CDBComponent& DBComponent, unsigned char cRealmTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(), "UPDATE TblGameTime SET RealmTime=%d", cRealmTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "국가전 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateSiegeTime(CDBComponent& DBComponent, unsigned char cSiegeTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(), "UPDATE TblGameTime SET SiegeTime=%d", cSiegeTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "공성전 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateEnterTime(CDBComponent& DBComponent, unsigned char cEnterTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(), "UPDATE TblGameTime SET EnterTime=%d", cEnterTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "신규존 진입제한 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateMiningTime(CDBComponent& DBComponent, unsigned char cMiningTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(), "UPDATE TblGameTime SET MiningTime=%d", cMiningTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "채굴기 임시 채굴 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool DBComponent::GameTimeDB::UpdateEventTime(CDBComponent& DBComponent, unsigned char cEventTime)
|
||||
{
|
||||
DBOBJECT_PERFORMANCE_CHECK(FunctionTimingCheck);
|
||||
|
||||
_snprintf(DBComponent.GetQueryBuffer(), DBComponent.GetQueryBufferLen(), "UPDATE TblGameTime SET EventTime=%d", cEventTime);
|
||||
|
||||
if (false == DBComponent.ExecuteQuery(DBComponent.GetQueryBuffer()))
|
||||
{
|
||||
SERLOG2(g_Log, "게임이벤트 시간 정보 업데이트 실패 : %s : Query:%s", DBComponent.GetErrorString(), DBComponent.GetQueryBuffer());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef _RYL_GAMETIME_DB_COMPONENT_H_
|
||||
#define _RYL_GAMETIME_DB_COMPONENT_H_
|
||||
|
||||
// forward decl.
|
||||
|
||||
class CDBComponent;
|
||||
|
||||
namespace DBComponent
|
||||
{
|
||||
namespace GameTimeDB
|
||||
{
|
||||
// °ÔÀÓ ½Ã°£ ¾÷µ¥ÀÌÆ®
|
||||
bool UpdateGameTimeInfo(CDBComponent& DBComponent, unsigned char cGuildTime, unsigned char cRealmTime,
|
||||
unsigned char cSiegeTime, unsigned char cMiningTime);
|
||||
bool UpdateGuildTime(CDBComponent& DBComponent, unsigned char cGuildTime);
|
||||
bool UpdateRealmTime(CDBComponent& DBComponent, unsigned char cRealmTime);
|
||||
bool UpdateSiegeTime(CDBComponent& DBComponent, unsigned char cSiegeTime);
|
||||
bool UpdateEnterTime(CDBComponent& DBComponent, unsigned char cEnterTime);
|
||||
bool UpdateMiningTime(CDBComponent& DBComponent, unsigned char cMiningTime);
|
||||
bool UpdateEventTime(CDBComponent& DBComponent, unsigned char cEventTime);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
666
Server/RylServerProject/RylGameLibrary/GameTime/GameTimeMgr.cpp
Normal file
666
Server/RylServerProject/RylGameLibrary/GameTime/GameTimeMgr.cpp
Normal file
@@ -0,0 +1,666 @@
|
||||
#include "stdafx.h"
|
||||
#include "GameTimeConstants.h"
|
||||
#include "GameTimeMgr.h"
|
||||
|
||||
#include <Network/Packet/WrapPacket.h>
|
||||
#include <Network/Packet/PacketCommand.h>
|
||||
#include <Network/Packet/PacketStruct/CastlePacket.h>
|
||||
|
||||
#include <Castle/CastleMgr.h>
|
||||
|
||||
#include <Creature/CreatureManager.h>
|
||||
|
||||
|
||||
CGameTimeMgr::CGameTimeMgr()
|
||||
: m_cNowGuildTime(GameTime::GT_NORMAL),
|
||||
m_cNowRealmTime(GameTime::RT_NORMAL),
|
||||
m_cNowSiegeTime(GameTime::ST_NORMAL),
|
||||
m_cNowEnterTime(GameTime::ET_LIMIT),
|
||||
m_cNowEventTime(GameTime::EVENT_NORMAL),
|
||||
m_dwOldGuildRemainSec(0),
|
||||
m_dwOldRealmRemainSec(0),
|
||||
m_dwOldSiegeRemainSec(0),
|
||||
m_dwOldEnterRemainSec(0),
|
||||
m_dwOldEventRemainSec(0)
|
||||
{
|
||||
}
|
||||
|
||||
CGameTimeMgr::~CGameTimeMgr()
|
||||
{
|
||||
}
|
||||
|
||||
CGameTimeMgr& CGameTimeMgr::GetInstance()
|
||||
{
|
||||
static CGameTimeMgr ms_this;
|
||||
return ms_this;
|
||||
}
|
||||
|
||||
void CGameTimeMgr::SetTimeValue(unsigned char cTimeType, unsigned char cTimeValue, unsigned char cMonth, unsigned char cDay,
|
||||
unsigned char cHour, unsigned char cMinute, unsigned long dwDuration)
|
||||
{
|
||||
switch (cTimeType)
|
||||
{
|
||||
case GameTime::GUILD:
|
||||
{
|
||||
m_cNowGuildTime = cTimeValue;
|
||||
m_GuildDetailTimeInfo = sDetailTimeInfo(cMonth, cDay, cHour, cMinute, dwDuration);
|
||||
m_dwOldGuildRemainSec = GetDetailRemainSec(GameTime::GUILD);
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::REALM:
|
||||
{
|
||||
m_cNowRealmTime = cTimeValue;
|
||||
m_RealmDetailTimeInfo = sDetailTimeInfo(cMonth, cDay, cHour, cMinute, dwDuration);
|
||||
m_dwOldRealmRemainSec = GetDetailRemainSec(GameTime::REALM);
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::SIEGE:
|
||||
{
|
||||
m_cNowSiegeTime = cTimeValue;
|
||||
m_SiegeDetailTimeInfo = sDetailTimeInfo(cMonth, cDay, cHour, cMinute, dwDuration);
|
||||
m_dwOldSiegeRemainSec = GetDetailRemainSec(GameTime::SIEGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::NEWZONE:
|
||||
{
|
||||
m_cNowEnterTime = cTimeValue;
|
||||
m_EnterDetailTimeInfo = sDetailTimeInfo(cMonth, cDay, cHour, cMinute, dwDuration);
|
||||
m_dwOldEnterRemainSec = GetDetailRemainSec(GameTime::NEWZONE);
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::EVENT:
|
||||
{
|
||||
m_cNowEventTime = cTimeValue;
|
||||
m_EventDetailTimeInfo = sDetailTimeInfo(cMonth, cDay, cHour, cMinute, dwDuration);
|
||||
m_dwOldEventRemainSec = GetDetailRemainSec(GameTime::EVENT);
|
||||
}
|
||||
break;
|
||||
|
||||
default: ERRLOG1(g_Log, "게임타입의 시간 값을 설정하는데 실패했습니다. Type : %d", cTimeType); break;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetCurrentGameTime(unsigned char cTimeType) const
|
||||
{
|
||||
switch (cTimeType)
|
||||
{
|
||||
case GameTime::GUILD: return m_cNowGuildTime; break;
|
||||
case GameTime::REALM: return m_cNowRealmTime; break;
|
||||
case GameTime::SIEGE: return m_cNowSiegeTime; break;
|
||||
case GameTime::NEWZONE: return m_cNowEnterTime; break;
|
||||
case GameTime::EVENT: return m_cNowEventTime; break;
|
||||
}
|
||||
|
||||
ERRLOG1(g_Log, "현재 게임타입의 시간 상태를 얻는데 실패했습니다. Type : %d", cTimeType);
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetCurrentGuildTime() const
|
||||
{
|
||||
return m_cNowGuildTime;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetCurrentRealmTime() const
|
||||
{
|
||||
return m_cNowRealmTime;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetCurrentSiegeTime() const
|
||||
{
|
||||
return m_cNowSiegeTime;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetCurrentEnterTime() const
|
||||
{
|
||||
return m_cNowEnterTime;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetCurrentEventTime() const
|
||||
{
|
||||
return m_cNowEventTime;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::SendGameTimeInfo(CSendStream& SendStream)
|
||||
{
|
||||
unsigned short wBufferSize = static_cast<unsigned short>(sizeof(PktGameTimeInfo)
|
||||
+ sizeof(CastleSiegeInfo) * Castle::CCastleMgr::GetInstance().GetCastleNum());
|
||||
|
||||
char* lpBuffer = SendStream.GetBuffer(wBufferSize);
|
||||
if (lpBuffer)
|
||||
{
|
||||
PktGameTimeInfo* lpPktGTI = reinterpret_cast<PktGameTimeInfo*>(lpBuffer);
|
||||
CastleSiegeInfo* lpCastleSiegeInfo = reinterpret_cast<CastleSiegeInfo*>(lpPktGTI + 1);
|
||||
|
||||
unsigned char cNum = 0;
|
||||
unsigned short wSize = sizeof(PktGameTimeInfo);
|
||||
ZeroMemory(lpPktGTI, sizeof(PktGameTimeInfo));
|
||||
|
||||
Castle::CCastleMgr::GetInstance().GetCastleSiegeInfo(lpCastleSiegeInfo, cNum, wSize);
|
||||
|
||||
lpPktGTI->m_cType = GameTime::TYPE_CHARACTER_LOGIN;
|
||||
lpPktGTI->m_wSize = wSize;
|
||||
lpPktGTI->m_cCastleNum = cNum;
|
||||
lpPktGTI->m_GuildTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_RealmTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_SiegeTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_EventTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_GuildTimeInfo.m_cNowGuildTime = m_cNowGuildTime;
|
||||
lpPktGTI->m_RealmTimeInfo.m_cNowRealmTime = m_cNowRealmTime;
|
||||
lpPktGTI->m_SiegeTimeInfo.m_cNowSiegeTime = m_cNowSiegeTime;
|
||||
lpPktGTI->m_EventTimeInfo.m_cNowEventTime = m_cNowEventTime;
|
||||
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::GUILD);
|
||||
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::REALM);
|
||||
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::SIEGE);
|
||||
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::NEWZONE);
|
||||
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::EVENT);
|
||||
|
||||
return SendStream.WrapCrypt(wBufferSize, CmdGameTimeInfo, 0, PktBase::NO_SERVER_ERR);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGameTimeMgr::UpdateGameTimeInfo()
|
||||
{
|
||||
if (CheckNeedUpdate())
|
||||
{
|
||||
const unsigned short MAX_BUFFER_SIZE = static_cast<unsigned short>(
|
||||
sizeof(PktGameTimeInfo) + sizeof(CastleSiegeInfo) * Castle::MAX_CASTLE_NUM);
|
||||
|
||||
char szPacket[MAX_BUFFER_SIZE] = {0, };
|
||||
|
||||
PktGameTimeInfo* lpPktGTI = reinterpret_cast<PktGameTimeInfo*>(szPacket);
|
||||
CastleSiegeInfo* lpCastleSiegeInfo = reinterpret_cast<CastleSiegeInfo*>(lpPktGTI + 1);
|
||||
|
||||
unsigned char cNum = 0;
|
||||
unsigned short wSize = sizeof(PktGameTimeInfo);
|
||||
ZeroMemory(lpPktGTI, sizeof(PktGameTimeInfo));
|
||||
|
||||
Castle::CCastleMgr::GetInstance().GetCastleSiegeInfo(lpCastleSiegeInfo, cNum, wSize);
|
||||
|
||||
lpPktGTI->m_cType = GameTime::TYPE_UPDATE_TIME;
|
||||
lpPktGTI->m_wSize = wSize;
|
||||
lpPktGTI->m_cCastleNum = cNum;
|
||||
lpPktGTI->m_GuildTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_RealmTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_SiegeTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_EventTimeInfo.m_bUpdated = true;
|
||||
lpPktGTI->m_GuildTimeInfo.m_cNowGuildTime = m_cNowGuildTime;
|
||||
lpPktGTI->m_RealmTimeInfo.m_cNowRealmTime = m_cNowRealmTime;
|
||||
lpPktGTI->m_SiegeTimeInfo.m_cNowSiegeTime = m_cNowSiegeTime;
|
||||
lpPktGTI->m_EventTimeInfo.m_cNowEventTime = m_cNowEventTime;
|
||||
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::GUILD);
|
||||
lpPktGTI->m_GuildTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::GUILD);
|
||||
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::REALM);
|
||||
lpPktGTI->m_RealmTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::REALM);
|
||||
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::SIEGE);
|
||||
lpPktGTI->m_SiegeTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::SIEGE);
|
||||
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::NEWZONE);
|
||||
lpPktGTI->m_EnterTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::NEWZONE);
|
||||
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cMonth = GetDetailMonth(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cDay = GetDetailDay(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cHour = GetDetailHour(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_cMinute = GetDetailMinute(GameTime::EVENT);
|
||||
lpPktGTI->m_EventTimeInfo.m_TimeInfo.m_dwTime = GetDetailRemainSec(GameTime::EVENT);
|
||||
|
||||
if (PacketWrap::WrapCrypt(szPacket, wSize, CmdGameTimeInfo, 0, 0))
|
||||
{
|
||||
CCreatureManager::GetInstance().SendAllCharacter(szPacket, wSize, CmdGameTimeInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::CheckNeedUpdate()
|
||||
{
|
||||
unsigned long dwGuildRemainSec = GetDetailRemainSec(GameTime::GUILD);
|
||||
unsigned long dwRealmRemainSec = GetDetailRemainSec(GameTime::REALM);
|
||||
unsigned long dwSiegeRemainSec = GetDetailRemainSec(GameTime::SIEGE);
|
||||
unsigned long dwEnterRemainSec = GetDetailRemainSec(GameTime::NEWZONE);
|
||||
unsigned long dwEventRemainSec = GetDetailRemainSec(GameTime::EVENT);
|
||||
|
||||
// 길드전 일반 상태와 길드전 상태일때 5분에 한번씩 업데이트
|
||||
if ((GameTime::GT_NORMAL == m_cNowGuildTime || GameTime::GT_GUILD_WAR == m_cNowGuildTime) &&
|
||||
m_dwOldGuildRemainSec - dwGuildRemainSec >= 300)
|
||||
{
|
||||
m_dwOldGuildRemainSec = dwGuildRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 길드전 시작 30분전, 종료 30분전은 1분에 한번씩 업데이트
|
||||
else if ((GameTime::GT_PREPARE_START_30 == m_cNowGuildTime || GameTime::GT_PREPARE_END_30 == m_cNowGuildTime) &&
|
||||
m_dwOldGuildRemainSec - dwGuildRemainSec >= 60)
|
||||
{
|
||||
m_dwOldGuildRemainSec = dwGuildRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 길드전 시작 5분전에는 10초에 한번씩 업데이트
|
||||
else if (GameTime::GT_PREPARE_START_5 == m_cNowGuildTime && m_dwOldGuildRemainSec - dwGuildRemainSec >= 10)
|
||||
{
|
||||
m_dwOldGuildRemainSec = dwGuildRemainSec;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 국가전 일반 상태와 국가전 상태일때 5분에 한번씩 업데이트
|
||||
if ((GameTime::RT_NORMAL == m_cNowRealmTime || GameTime::RT_REALM_WAR == m_cNowRealmTime) &&
|
||||
m_dwOldRealmRemainSec - dwRealmRemainSec >= 300)
|
||||
{
|
||||
m_dwOldRealmRemainSec = dwRealmRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 국가전 시작 30분, 15분전은 1분에 한번씩 업데이트, 종료30분전 포함
|
||||
/* else if ((GameTime::RT_PREPARE_START_30 == m_cNowRealmTime || GameTime::RT_PREPARE_START_15 == m_cNowRealmTime) &&
|
||||
m_dwOldRealmRemainSec - dwRealmRemainSec >= 60)
|
||||
{
|
||||
m_dwOldRealmRemainSec = dwRealmRemainSec;
|
||||
return true;
|
||||
}
|
||||
*/ else if ((GameTime::RT_PREPARE_START_30 == m_cNowRealmTime || GameTime::RT_PREPARE_START_15 == m_cNowRealmTime || GameTime::RT_REALM_WAR_END_5 == m_cNowRealmTime) &&
|
||||
m_dwOldRealmRemainSec - dwRealmRemainSec >= 60)
|
||||
{
|
||||
m_dwOldRealmRemainSec = dwRealmRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 국가전 시작 10분은 30초에 한번씩 업데이트
|
||||
else if (GameTime::RT_PREPARE_START_10 == m_cNowRealmTime && m_dwOldRealmRemainSec - dwRealmRemainSec >= 30)
|
||||
{
|
||||
m_dwOldRealmRemainSec = dwRealmRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 국가전 시작 5분은 10초에 한번씩 업데이트
|
||||
else if (GameTime::RT_PREPARE_START_5 == m_cNowRealmTime && m_dwOldRealmRemainSec - dwRealmRemainSec >= 10)
|
||||
{
|
||||
m_dwOldRealmRemainSec = dwRealmRemainSec;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 공성전 일반 상태와 공성전 상태일때는 5분에 한번씩 업데이트
|
||||
if ((GameTime::ST_NORMAL == m_cNowSiegeTime || GameTime::ST_SIEGE_WAR == m_cNowSiegeTime ) &&
|
||||
m_dwOldSiegeRemainSec - dwSiegeRemainSec >= 300)
|
||||
{
|
||||
m_dwOldSiegeRemainSec = dwSiegeRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 공성전 시작 5분전, 종료 5분전에는 10초에 한번씩 업데이트
|
||||
else if ((GameTime::ST_PREPARE_START_5 == m_cNowSiegeTime || GameTime::ST_PREPARE_END_5 == m_cNowSiegeTime) &&
|
||||
m_dwOldSiegeRemainSec - dwSiegeRemainSec >= 10)
|
||||
{
|
||||
m_dwOldSiegeRemainSec = dwSiegeRemainSec;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 존 진입제한 불가 상태와 가능 상태일때는 5분에 한번씩 업데이트
|
||||
if ((GameTime::ET_LIMIT == m_cNowEnterTime || GameTime::ET_ALLOWENTER == m_cNowEnterTime ) &&
|
||||
m_dwOldEnterRemainSec - dwEnterRemainSec >= 300)
|
||||
{
|
||||
m_dwOldEnterRemainSec = dwEnterRemainSec;
|
||||
return true;
|
||||
}
|
||||
// 존 진입제한 시작 5분전, 종료 5분전에는 10초에 한번씩 업데이트
|
||||
else if ((GameTime::ET_PREPARE_START_5 == m_cNowEnterTime || GameTime::ET_PREPARE_END_5 == m_cNowEnterTime) &&
|
||||
m_dwOldEnterRemainSec - dwEnterRemainSec >= 10)
|
||||
{
|
||||
m_dwOldEnterRemainSec = dwEnterRemainSec;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 게임 이벤트 불가 상태와 이벤트 상태일때는 10초에 한번씩 업데이트
|
||||
if ( (GameTime::EVENT_NORMAL != m_cNowEventTime) && m_dwOldEventRemainSec - dwEventRemainSec >= 10)
|
||||
{
|
||||
m_dwOldEventRemainSec = dwEventRemainSec;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
unsigned char CGameTimeMgr::GetDetailMonth(unsigned char cType) const
|
||||
{
|
||||
switch (cType)
|
||||
{
|
||||
case GameTime::GUILD: return m_GuildDetailTimeInfo.m_cMonth;
|
||||
case GameTime::REALM: return m_RealmDetailTimeInfo.m_cMonth;
|
||||
case GameTime::SIEGE: return m_SiegeDetailTimeInfo.m_cMonth;
|
||||
case GameTime::NEWZONE: return m_EnterDetailTimeInfo.m_cMonth;
|
||||
case GameTime::EVENT: return m_EventDetailTimeInfo.m_cMonth;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetDetailDay(unsigned char cType) const
|
||||
{
|
||||
switch (cType)
|
||||
{
|
||||
case GameTime::GUILD: return m_GuildDetailTimeInfo.m_cDay;
|
||||
case GameTime::REALM: return m_RealmDetailTimeInfo.m_cDay;
|
||||
case GameTime::SIEGE: return m_SiegeDetailTimeInfo.m_cDay;
|
||||
case GameTime::NEWZONE: return m_EnterDetailTimeInfo.m_cDay;
|
||||
case GameTime::EVENT: return m_EventDetailTimeInfo.m_cDay;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetDetailHour(unsigned char cType) const
|
||||
{
|
||||
switch (cType)
|
||||
{
|
||||
case GameTime::GUILD: return m_GuildDetailTimeInfo.m_cHour;
|
||||
case GameTime::REALM: return m_RealmDetailTimeInfo.m_cHour;
|
||||
case GameTime::SIEGE: return m_SiegeDetailTimeInfo.m_cHour;
|
||||
case GameTime::NEWZONE: return m_EnterDetailTimeInfo.m_cHour;
|
||||
case GameTime::EVENT: return m_EventDetailTimeInfo.m_cHour;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char CGameTimeMgr::GetDetailMinute(unsigned char cType) const
|
||||
{
|
||||
switch (cType)
|
||||
{
|
||||
case GameTime::GUILD: return m_GuildDetailTimeInfo.m_cMinute;
|
||||
case GameTime::REALM: return m_RealmDetailTimeInfo.m_cMinute;
|
||||
case GameTime::SIEGE: return m_SiegeDetailTimeInfo.m_cMinute;
|
||||
case GameTime::NEWZONE: return m_EnterDetailTimeInfo.m_cMinute;
|
||||
case GameTime::EVENT: return m_EventDetailTimeInfo.m_cMinute;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned long CGameTimeMgr::GetDetailRemainSec(unsigned char cType) const
|
||||
{
|
||||
// 끝날때까지의 남은 시간을 구하는 것인지 체크
|
||||
bool bRequestEndTime = false;
|
||||
CTime nowTime = CTime::GetCurrentTime();
|
||||
CTime tempTime;
|
||||
unsigned long dwDuration = 0;
|
||||
|
||||
switch (cType)
|
||||
{
|
||||
case GameTime::GUILD:
|
||||
{
|
||||
if (0 != m_GuildDetailTimeInfo.m_cDay)
|
||||
{
|
||||
tempTime = CTime(nowTime.GetYear(), m_GuildDetailTimeInfo.m_cMonth, m_GuildDetailTimeInfo.m_cDay,
|
||||
m_GuildDetailTimeInfo.m_cHour, m_GuildDetailTimeInfo.m_cMinute, 0);
|
||||
dwDuration = m_GuildDetailTimeInfo.m_dwDuration;
|
||||
|
||||
if (IsGuildWarTime())
|
||||
bRequestEndTime = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::REALM:
|
||||
{
|
||||
if (0 != m_RealmDetailTimeInfo.m_cDay)
|
||||
{
|
||||
tempTime = CTime(nowTime.GetYear(), m_RealmDetailTimeInfo.m_cMonth, m_RealmDetailTimeInfo.m_cDay,
|
||||
m_RealmDetailTimeInfo.m_cHour, m_RealmDetailTimeInfo.m_cMinute, 0);
|
||||
dwDuration = m_RealmDetailTimeInfo.m_dwDuration;
|
||||
|
||||
if (IsRealmWarTime())
|
||||
bRequestEndTime = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::SIEGE:
|
||||
{
|
||||
if (0 != m_SiegeDetailTimeInfo.m_cDay)
|
||||
{
|
||||
tempTime = CTime(nowTime.GetYear(), m_SiegeDetailTimeInfo.m_cMonth, m_SiegeDetailTimeInfo.m_cDay,
|
||||
m_SiegeDetailTimeInfo.m_cHour, m_SiegeDetailTimeInfo.m_cMinute, 0);
|
||||
dwDuration = m_SiegeDetailTimeInfo.m_dwDuration;
|
||||
|
||||
if (IsSiegeWarTime())
|
||||
bRequestEndTime = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::NEWZONE:
|
||||
{
|
||||
if (0 != m_EnterDetailTimeInfo.m_cDay)
|
||||
{
|
||||
tempTime = CTime(nowTime.GetYear(), m_EnterDetailTimeInfo.m_cMonth, m_EnterDetailTimeInfo.m_cDay,
|
||||
m_EnterDetailTimeInfo.m_cHour, m_EnterDetailTimeInfo.m_cMinute, 0);
|
||||
dwDuration = m_EnterDetailTimeInfo.m_dwDuration;
|
||||
|
||||
if (IsEnterTime())
|
||||
bRequestEndTime = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GameTime::EVENT:
|
||||
{
|
||||
if (0 != m_EventDetailTimeInfo.m_cDay)
|
||||
{
|
||||
tempTime = CTime(nowTime.GetYear(), m_EventDetailTimeInfo.m_cMonth, m_EventDetailTimeInfo.m_cDay,
|
||||
m_EventDetailTimeInfo.m_cHour, m_EventDetailTimeInfo.m_cMinute, 0);
|
||||
dwDuration = m_EventDetailTimeInfo.m_dwDuration;
|
||||
|
||||
if (IsEventTime())
|
||||
bRequestEndTime = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
CTimeSpan tempSpan(tempTime - nowTime);
|
||||
if (bRequestEndTime)
|
||||
{
|
||||
tempSpan += dwDuration * 60;
|
||||
}
|
||||
|
||||
if (tempSpan.GetTimeSpan() > 0)
|
||||
{
|
||||
return static_cast<unsigned long>(tempSpan.GetTimeSpan());
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsGuildWarTime() const
|
||||
{
|
||||
switch (m_cNowGuildTime)
|
||||
{
|
||||
case GameTime::GT_GUILD_WAR:
|
||||
case GameTime::GT_PREPARE_END_30:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsRealmWarTime() const
|
||||
{
|
||||
if (GameTime::RT_REALM_WAR == m_cNowRealmTime || GameTime::RT_REALM_WAR_END_5 == m_cNowRealmTime)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsSiegeWarTime() const
|
||||
{
|
||||
if (GameTime::ST_SIEGE_WAR == m_cNowSiegeTime || GameTime::ST_PREPARE_END_5 == m_cNowSiegeTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsEnterTime() const
|
||||
{
|
||||
if (GameTime::ET_ALLOWENTER == m_cNowEnterTime || GameTime::ET_PREPARE_END_5 == m_cNowEnterTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsEventTime() const
|
||||
{
|
||||
if (GameTime::EVENT_NORMAL != m_cNowEventTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsGuildWarTime(unsigned char cTime) const
|
||||
{
|
||||
switch (cTime)
|
||||
{
|
||||
case GameTime::GT_GUILD_WAR:
|
||||
case GameTime::GT_PREPARE_END_30:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsRealmWarTime(unsigned char cTime) const
|
||||
{
|
||||
if (GameTime::RT_REALM_WAR == cTime || GameTime::RT_REALM_WAR_END_5 == cTime)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsSiegeWarTime(unsigned char cTime) const
|
||||
{
|
||||
if (GameTime::ST_SIEGE_WAR == cTime || GameTime::ST_PREPARE_END_5 == cTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsEnterTime(unsigned char cTime) const
|
||||
{
|
||||
if (GameTime::ET_ALLOWENTER== cTime || GameTime::ET_PREPARE_END_5 == cTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsEventTime(unsigned char cTime) const
|
||||
{
|
||||
if (GameTime::EVENT_NORMAL != cTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsRealmWarReadyTime() const
|
||||
{
|
||||
switch (m_cNowRealmTime)
|
||||
{
|
||||
case GameTime::RT_PREPARE_START_10:
|
||||
case GameTime::RT_PREPARE_START_5:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGameTimeMgr::IsRealmWarReadyTime(unsigned char cTime) const
|
||||
{
|
||||
switch (cTime)
|
||||
{
|
||||
case GameTime::RT_PREPARE_START_10:
|
||||
case GameTime::RT_PREPARE_START_5:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
104
Server/RylServerProject/RylGameLibrary/GameTime/GameTimeMgr.h
Normal file
104
Server/RylServerProject/RylGameLibrary/GameTime/GameTimeMgr.h
Normal file
@@ -0,0 +1,104 @@
|
||||
#ifndef _GAME_TIME_MANAGER_H_
|
||||
#define _GAME_TIME_MANAGER_H_
|
||||
|
||||
#pragma once
|
||||
#include <Network/Stream/SendStream.h>
|
||||
|
||||
class CGameTimeMgr
|
||||
{
|
||||
protected:
|
||||
CGameTimeMgr();
|
||||
~CGameTimeMgr();
|
||||
|
||||
// 다음번 길드전, 렐름전, 공성전의 날짜 및 시간과 전쟁시간 정보 구조체
|
||||
struct sDetailTimeInfo
|
||||
{
|
||||
unsigned char m_cMonth;
|
||||
unsigned char m_cDay;
|
||||
unsigned char m_cHour;
|
||||
unsigned char m_cMinute;
|
||||
unsigned long m_dwDuration; // (분)
|
||||
|
||||
sDetailTimeInfo()
|
||||
: m_cMonth(0), m_cDay(0), m_cHour(0), m_cMinute(0), m_dwDuration(0)
|
||||
{
|
||||
}
|
||||
|
||||
sDetailTimeInfo(unsigned char cMonth, unsigned char cDay, unsigned char cHour, unsigned char cMinute, unsigned long dwDuration)
|
||||
: m_cMonth(cMonth), m_cDay(cDay), m_cHour(cHour), m_cMinute(cMinute), m_dwDuration(dwDuration)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
bool CheckNeedUpdate();
|
||||
|
||||
public:
|
||||
|
||||
bool SendGameTimeInfo(CSendStream& SendStream);
|
||||
void UpdateGameTimeInfo(); // 모든 클라이언트에게 게임 시간 정보 업데이트(싱크를 맞추기 위해서)
|
||||
|
||||
void SetTimeValue(unsigned char cTimeType, unsigned char cTimeValue, unsigned char cMonth, unsigned char cDay,
|
||||
unsigned char cHour, unsigned char cMinute, unsigned long dwDuration);
|
||||
|
||||
unsigned char GetCurrentGameTime(unsigned char cTimeType) const;
|
||||
unsigned char GetCurrentGuildTime() const;
|
||||
unsigned char GetCurrentRealmTime() const;
|
||||
unsigned char GetCurrentSiegeTime() const;
|
||||
unsigned char GetCurrentEnterTime() const;
|
||||
|
||||
// edith 2009.07.21 게임타임 작업물
|
||||
unsigned char GetCurrentEventTime() const;
|
||||
|
||||
unsigned char GetDetailMonth(unsigned char cType) const;
|
||||
unsigned char GetDetailDay(unsigned char cType) const;
|
||||
unsigned char GetDetailHour(unsigned char cType) const;
|
||||
unsigned char GetDetailMinute(unsigned char cType) const;
|
||||
unsigned long GetDetailRemainSec(unsigned char cType) const;
|
||||
|
||||
bool IsGuildWarTime() const;
|
||||
bool IsRealmWarTime() const;
|
||||
bool IsSiegeWarTime() const;
|
||||
bool IsEnterTime() const;
|
||||
|
||||
// edith 2009.07.21 게임타임 작업물
|
||||
bool IsEventTime() const;
|
||||
|
||||
bool IsGuildWarTime(unsigned char cTime) const;
|
||||
bool IsRealmWarTime(unsigned char cTime) const;
|
||||
bool IsSiegeWarTime(unsigned char cTime) const;
|
||||
bool IsEnterTime(unsigned char cTime) const;
|
||||
|
||||
// edith 2009.07.21 게임타임 작업물
|
||||
bool IsEventTime(unsigned char cTime) const;
|
||||
|
||||
bool IsRealmWarReadyTime() const;
|
||||
bool IsRealmWarReadyTime(unsigned char cTime) const;
|
||||
|
||||
static CGameTimeMgr& GetInstance();
|
||||
|
||||
private:
|
||||
|
||||
unsigned char m_cNowGuildTime;
|
||||
unsigned char m_cNowRealmTime;
|
||||
unsigned char m_cNowSiegeTime;
|
||||
unsigned char m_cNowEnterTime; // 테섭용 신규존 입장 제한 플래그
|
||||
|
||||
// edith 2009.07.21 게임타임 작업물
|
||||
unsigned char m_cNowEventTime;
|
||||
|
||||
sDetailTimeInfo m_GuildDetailTimeInfo;
|
||||
sDetailTimeInfo m_RealmDetailTimeInfo;
|
||||
sDetailTimeInfo m_SiegeDetailTimeInfo;
|
||||
sDetailTimeInfo m_EnterDetailTimeInfo;
|
||||
// edith 2009.07.21 게임타임 작업물
|
||||
sDetailTimeInfo m_EventDetailTimeInfo;
|
||||
|
||||
unsigned long m_dwOldGuildRemainSec;
|
||||
unsigned long m_dwOldRealmRemainSec;
|
||||
unsigned long m_dwOldSiegeRemainSec;
|
||||
unsigned long m_dwOldEnterRemainSec;
|
||||
// edith 2009.07.21 게임타임 작업물
|
||||
unsigned long m_dwOldEventRemainSec;
|
||||
};
|
||||
|
||||
#endif // _GAME_TIME_MANAGER_H_
|
||||
Reference in New Issue
Block a user