Пример #1
0
void __cdecl EQSpawnService(bool Broadcast, unsigned int MSG, void *lpData)
{
	switch (MSG)
	{
#define pNewSpawn ((PSPAWNINFO)lpData)
	case SPAWNSERVICE_ADDSPAWN:
		if (Update && pNewSpawn->SpawnID != 0 && GetCharInfo()->pSpawn != pNewSpawn)
		{
			DebugSpewAlways("MQ2Map::OnAddSpawn(%s)", pNewSpawn->Name);
			AddSpawn(pNewSpawn);
		}
		break;
	case SPAWNSERVICE_REMOVESPAWN:
		DebugSpewAlways("MQ2Map::OnRemoveSpawn(%s)", pNewSpawn->Name);
		if (Update)
			RemoveSpawn(pNewSpawn);
		break;
#undef pNewSpawn
#define pGroundItem ((PGROUNDITEM)lpData)
	case SPAWNSERVICE_ADDITEM:
		DebugSpewAlways("MQ2Map::OnAddGroundItem(%d)", pGroundItem->DropID);
		if (Update)
			AddGroundItem(pGroundItem);
		break;
	case SPAWNSERVICE_REMOVEITEM:
		DebugSpewAlways("MQ2Map::OnRemoveGroundItem(%d)", pGroundItem->DropID);
		if (Update)
			RemoveGroundItem(pGroundItem);
		break;
#undef pGroundItem
	}
}
Пример #2
0
int GameServer::OnCreate()
{
	int rc = 0;
	rc = _clientAcceptor.Create(ServerCfg->GetStr("Server", "IP"),
		ServerCfg->GetInt("Server", "Port"),
		SESSION_CLIENT,
		MAX_NUMOF_GAME_CLIENT, 5, 2, MAX_NUMOF_GAME_CLIENT);
	if (0 != rc)
	{
		return rc;
	}

	rc = _network.Associate(&_clientAcceptor, true);
	if (0 != rc)
	{
		return rc;
	}

	_charManager = new CharacterManager();
	_charManager->Init();
	_objManager = new ObjectManager();
	_objManager->Init();

	ServerDB = new Database();
	if (!ServerDB->Connect(
		ServerCfg->GetStr("MySQL", "Host"),
		ServerCfg->GetStr("MySQL", "Database"),
		ServerCfg->GetStr("MySQL", "User"),
		ServerCfg->GetStr("MySQL", "Password"),
		ServerCfg->GetInt("MySQL", "Port")))
		return 2;//ERR_DBSERVER_CONNECT

	pcTblData = new PCTable();
	if (pcTblData->Load("..\\Tables\\table_pc_data.edf") != 0)
	{
		Logger::Log("Failed to load PC Table!\n");
		return 3;//ERR_LOADTABLE
	}

	npcspawnTblData = new SpawnTable();
	if (npcspawnTblData->Load("..\\Tables\\spawn_npc_main_world.edf") != 0)
	{
		Logger::Log("Failed to load NPC Spawn Table!\n");
		return 3;//ERR_LOADTABLE
	}

	this->ServerID = ServerCfg->GetInt("Server", "ID");

	m_uiSerialID = INVALID_DWORD;

	Logger::Log("Loading %u NPC Spawns... please wait!\n", npcspawnTblData->GetCount());
	for (int i = 1; i < (npcspawnTblData->GetCount() + 1); ++i)
	{
		AddSpawn(npcspawnTblData->GetData(i), OBJTYPE_NPC);
	}
	Logger::Log("Loaded %u NPC Spawns!\n", npcspawnTblData->GetCount());

	ServerDB->ExecuteQuery("CALL `spClearOnline`('%u');", ServerID);
	return 0;
}