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:
291
Server/RylServerProject/RylGameServer/ManageGameObject.cpp
Normal file
291
Server/RylServerProject/RylGameServer/ManageGameObject.cpp
Normal file
@@ -0,0 +1,291 @@
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "RylGameServer.h"
|
||||
|
||||
#include <Network/Dispatch/CheckPing.h>
|
||||
#include <Network/Dispatch/GameClient/CheckSpeedHack.h>
|
||||
#include <Network/Dispatch/GameClient/FieldServerClientDispatch.h>
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Network/Packet/PacketStatistics.h>
|
||||
|
||||
#include <Utility/Filter/Filter.h>
|
||||
#include <Utility/Setup/ServerSetup.h>
|
||||
#include <Utility/Debug/DebugUtils.h>
|
||||
#include <Utility/Debug/PerformanceCheck.h>
|
||||
|
||||
#include <Creature/EnemyCheck.h>
|
||||
#include <Creature/CreatureManager.h>
|
||||
#include <Creature/Monster/MonsterShout.h>
|
||||
#include <Creature/Character/CharRespawnMgr.h>
|
||||
|
||||
#include <Skill/SkillMgr.h>
|
||||
#include <Skill/SkillTable.h>
|
||||
|
||||
#include <Map/FieldMap/CellManager.h>
|
||||
#include <Map/FieldMap/MineralVeinMgr.h>
|
||||
|
||||
#include <Log/GameLog.h>
|
||||
#include <GameEvent/GameEventMgr.h>
|
||||
#include <Item/ItemMgr.h>
|
||||
#include <GameGuardLib/ggsrv.h>
|
||||
|
||||
// edith 2009.08.11 게임가드 2.5 업그레이드
|
||||
void Log(const char *szMsg, ... )
|
||||
{
|
||||
va_list marker;
|
||||
char szTmp[256] = {0,};
|
||||
|
||||
va_start( marker ,szMsg );
|
||||
vsprintf(szTmp,szMsg, marker);
|
||||
va_end( marker );
|
||||
|
||||
// DebugView 를 통해서 로그를 확인 할 수 있습니다.
|
||||
// OutputDebugString( szTmp );
|
||||
DETLOG0(g_Log, szTmp);
|
||||
}
|
||||
|
||||
GGAUTHS_API void NpLog(int mode, char* msg)
|
||||
{
|
||||
if(mode & (NPLOG_DEBUG | NPLOG_ERROR))
|
||||
{
|
||||
Log(msg);
|
||||
}
|
||||
}
|
||||
|
||||
GGAUTHS_API void GGAuthUpdateCallback(PGG_UPREPORT report)
|
||||
{
|
||||
Log( "GGAuth version update [%s] : [%ld] -> [%ld] \n",
|
||||
report->nType==1?"GameGuard Ver":"Protocol Num",
|
||||
report->dwBefore, report->dwNext );
|
||||
}
|
||||
|
||||
|
||||
void PrePerformanceMsg(FILE* lpFile)
|
||||
{
|
||||
if(0 != lpFile)
|
||||
{
|
||||
SYSTEMTIME currentTime;
|
||||
GetLocalTime(¤tTime);
|
||||
|
||||
fprintf(lpFile, "\n------------------------------------------------------------------------\n"
|
||||
"\tPID:0x%08x/ServerID:0x%08x/ServerZone:%02d/ServerChannel:%02d/\n"
|
||||
"\tGameServer PerformanceCheck. %04d-%02d-%02d %02d:%02d:%02d:%04d\n\n",
|
||||
GetCurrentProcessId(), CServerSetup::GetInstance().GetServerID(),
|
||||
CServerSetup::GetZoneFromCmdLine(),
|
||||
CServerSetup::GetChannelFromCmdLine(),
|
||||
|
||||
currentTime.wYear,
|
||||
currentTime.wMonth,
|
||||
currentTime.wDay,
|
||||
currentTime.wHour,
|
||||
currentTime.wMinute,
|
||||
currentTime.wSecond,
|
||||
currentTime.wMilliseconds);
|
||||
}
|
||||
}
|
||||
|
||||
bool CRylGameServer::InitializeGameObject(void)
|
||||
{
|
||||
// 로그 이름 초기화.
|
||||
char szProgramName[MAX_PATH];
|
||||
char szLogFilePrefixName[MAX_PATH];
|
||||
char szSessionLogFilePrefixName[MAX_PATH];
|
||||
char szSkillLogFilePrefixName[MAX_PATH];
|
||||
|
||||
DbgUtils::SetProgramName(szProgramName, MAX_PATH);
|
||||
szProgramName[MAX_PATH - 1] = 0;
|
||||
|
||||
_snprintf(szLogFilePrefixName, MAX_PATH - 1, "%sZ%02dC%02d-", szProgramName,
|
||||
CServerSetup::GetInstance().GetServerZone(),
|
||||
CServerSetup::GetInstance().GetServerChannel());
|
||||
|
||||
_snprintf(szSessionLogFilePrefixName, MAX_PATH - 1, "SessionLogZ%02dC%02d-",
|
||||
CServerSetup::GetInstance().GetServerZone(),
|
||||
CServerSetup::GetInstance().GetServerChannel());
|
||||
|
||||
_snprintf(szSkillLogFilePrefixName, MAX_PATH - 1, "SkillLogZ%02dC%02d-",
|
||||
CServerSetup::GetInstance().GetServerZone(),
|
||||
CServerSetup::GetInstance().GetServerChannel());
|
||||
|
||||
g_Log.SetLogFileName(szLogFilePrefixName, szProgramName);
|
||||
g_SessionLog.SetLogFileName(szSessionLogFilePrefixName, szProgramName);
|
||||
g_SkillLog.SetLogFileName(szSkillLogFilePrefixName, szProgramName);
|
||||
|
||||
// 패킷 통계 로그 헤더 초기화
|
||||
CPacketStatistics::GetInstance().SetUserMessageFunc(PrePerformanceMsg, 0);
|
||||
|
||||
// 퍼포먼스 로그 헤더 초기화
|
||||
CPerformanceCheck::GetInstance().SetUserMessageFunc(PrePerformanceMsg, 0);
|
||||
|
||||
// 게임 로그 초기화
|
||||
if (false == CGameLog::GetInstance().Initialize(szLogFilePrefixName))
|
||||
{
|
||||
ERRLOG0(g_Log, "게임 로그를 초기화하는데 실패했습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 아이템 스크립트 로드
|
||||
char szItemScriptName[MAX_PATH];
|
||||
if (SERVER_ID::GROUP_BATTLE_SERVER == CServerSetup::GetInstance().GetServerGroup())
|
||||
{
|
||||
strncpy(szItemScriptName, "./Script/Game/BGItemScript.txt", MAX_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(szItemScriptName, "./Script/Game/ItemScript.txt", MAX_PATH);
|
||||
}
|
||||
|
||||
if (false == Item::CItemMgr::GetInstance().LoadItemProtoType(szItemScriptName))
|
||||
{
|
||||
ERRLOG0(g_Log, "아이템 스크립트를 읽을 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 아이템 합성 스크립트 로드
|
||||
if (false == Item::CItemMgr::GetInstance().LoadItemChemical())
|
||||
{
|
||||
ERRLOG0(g_Log, "아이템 합성 스크립트를 읽을 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 아이템 보상 스크립트 로드
|
||||
if (false == Item::CItemMgr::GetInstance().LoadItemSpeacialCompensation())
|
||||
{
|
||||
ERRLOG0(g_Log, "아이템 보상 스크립트를 읽을 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 스킬 스크립트 로드
|
||||
if (false == CSkillMgr::GetInstance().LoadSkillsFromFile())
|
||||
{
|
||||
ERRLOG0(g_Log, "스킬 스크립트를 읽을 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 스킬 테이블 초기화
|
||||
if (false == Skill::CProcessTable::GetInstance().Initialize())
|
||||
{
|
||||
ERRLOG0(g_Log, "스킬 처리 테이블을 초기화 할 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 게임 이벤트 초기화
|
||||
if (false == CGameEventMgr::GetInstance().Initialize())
|
||||
{
|
||||
ERRLOG0(g_Log, "게임 이벤트 초기화에 실패하였습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 리스폰 위치 스크립트 로드
|
||||
if (false == CCharRespawnMgr::GetInstance().LoadRespawnFromFile())
|
||||
{
|
||||
ERRLOG0(g_Log, "리스폰 위치 스크립트를 읽을 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (false == Filter::InitFilter())
|
||||
{
|
||||
ERRLOG0(g_Log, "이름 필터를 읽을 수 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 셀 로드
|
||||
CCellManager& CellManager = CCellManager::GetInstance();
|
||||
|
||||
if (false == CellManager.LoadComplete())
|
||||
{
|
||||
CellManager.Load();
|
||||
CellManager.SetMoving(true);
|
||||
}
|
||||
|
||||
// 광물 배치 스크립트 로드
|
||||
switch ( CServerSetup::GetInstance().GetServerZone() )
|
||||
{
|
||||
case SERVER_ID::CAPITAL:
|
||||
{
|
||||
char szMineralVeinScriptName[MAX_PATH];
|
||||
sprintf(szMineralVeinScriptName, "./Script/Game/MineralVein/MineralVein%d.gsf", CServerSetup::GetInstance().GetServerZone());
|
||||
CMineralVeinMgr& MineralVeinMgr = CMineralVeinMgr::GetInstance();
|
||||
if (false == MineralVeinMgr.LoadMineralVeinsFromBinary(szMineralVeinScriptName))
|
||||
{
|
||||
ERRLOG0(g_Log, "광물 배치 스크립트 로드에 실패했습니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// 몬스터 채팅 스크립트 초기화 - 셀 로드해서 몬스터 로드한 후 로드
|
||||
if (false == CMonsterShout::GetInstance().LoadScript())
|
||||
{
|
||||
ERRLOG0(g_Log, "몬스터 채팅 스크립트 로드에 실패했습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 피아식별 룰 초기화
|
||||
if (false == EnemyCheck::CCheckTable::GetInstance().Initialize())
|
||||
{
|
||||
ERRLOG0(g_Log, "피아식별 룰을 초기화하는데 실패하였습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------
|
||||
// 게임 가드 관련 초기화
|
||||
// edith 2009.08.11 게임가드 2.5 업그레이드
|
||||
/*
|
||||
if (0 == LoadAuthTable("./Script/Server/CSAuth.tab"))
|
||||
{
|
||||
ERRLOG0(g_Log, "RowGameServer initialize failed : GameGuard LoadAuthTable failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (0 == LoadAuthIndex("./Script/Server/CSAuth.idx"))
|
||||
{
|
||||
ERRLOG0(g_Log, "RowGameServer initialize failed : GameGuard LoadAuthIndex failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (0 == InitPacketProtect("RYLPART2", 1))
|
||||
{
|
||||
ERRLOG0(g_Log, "RowGameServer initialize failed : GameGuard InitPacketProtect failed");
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
#ifndef NO_GAMEGUARD
|
||||
|
||||
/*
|
||||
// edith 2009.08.11 게임가드 2.5 업그레이드
|
||||
// 1. 서버인증 초기화 함수 : InitGameguardAuth
|
||||
unsigned long dwGGErrCode = InitGameguardAuth("./Script/Server", 50);
|
||||
if (ERROR_SUCCESS != dwGGErrCode)
|
||||
{
|
||||
ERRLOG1(g_Log, "RowGameServer initialize failed : GameGuard InitGameguardAuth failed(%d)", dwGGErrCode);
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
// 1. 서버인증 초기화 함수 : InitGameguardAuth
|
||||
unsigned long dwGGErrCode = InitGameguardAuth("./Script/Server", 50, true, NPLOG_DEBUG|NPLOG_ERROR);
|
||||
if (ERROR_SUCCESS != dwGGErrCode)
|
||||
{
|
||||
ERRLOG1(g_Log, "RowGameServer initialize failed : GameGuard InitGameguardAuth failed(%d)", dwGGErrCode);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2. 서버인증 상태 저장함수 : SetUpdateCondition
|
||||
// 2. Storage function of server certification condition : SetUpdateCondition
|
||||
SetUpdateCondition(30, 50);
|
||||
// ------------------------------------------------------------------------------------------
|
||||
|
||||
#endif
|
||||
|
||||
m_bInitialized = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRylGameServer::DestoryGameObject(void)
|
||||
{
|
||||
#ifndef NO_GAMEGUARD
|
||||
CleanupGameguardAuth();
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user