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,827 @@
|
||||
#include "stdafx.h"
|
||||
#include "GameDispatch.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Utility/Setup/ServerSetup.h>
|
||||
|
||||
#include <Network/Address/INET_Addr.h>
|
||||
#include <Network/Stream/SendStream.h>
|
||||
#include <Network/Packet/PacketDispatchTable.h>
|
||||
#include <Network/Packet/PacketCommand.h>
|
||||
#include <Network/Packet/WrapPacket.h>
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Network/Packet/PacketStruct/ServerPacket.h>
|
||||
#include <Network/Packet/PacketStruct/ServerLogPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
|
||||
|
||||
#include <Network/ParsePacket/ParseMoveZone.h>
|
||||
#include <Network/ParsePacket/ParseCharManage.h>
|
||||
#include <Network/ParsePacket/ParseCharUpdate.h>
|
||||
#include <Network/ParsePacket/ParseParty.h>
|
||||
#include <Network/ParsePacket/ParseCastle.h>
|
||||
#include <Network/ParsePacket/ParseGuild.h>
|
||||
|
||||
#include <Network/SendPacket/SendServerInfo.h>
|
||||
#include <Network/Dispatch/GameClient/SendCharAdmin.h>
|
||||
|
||||
#include <Creature/Character/CharacterClass.h>
|
||||
#include <Creature/StatueDBMgr.h>
|
||||
|
||||
#include <DB/DBComponent.h>
|
||||
#include <DB/GameDBComponent.h>
|
||||
#include <DataStorage/SessionData.h>
|
||||
#include <DataStorage/SessionDataMgr.h>
|
||||
|
||||
#include <Castle/CastleDBMgr.h>
|
||||
#include <GameTime/GameTimeDBMgr.h>
|
||||
#include <Creature/Siege/SiegeObjectDBMgr.h>
|
||||
#include <Community/Guild/GuildDBMgr.h>
|
||||
#include <Ranking/RankingDBMgr.h>
|
||||
#include <GameEvent/GiveItemMgr.h>
|
||||
|
||||
#include <DataStorage/SessionDataMgr.h>
|
||||
#include <DataStorage/CharacterDataMgr.h>
|
||||
|
||||
#include <Map/FieldMap/MineralVeinDBMgr.h>
|
||||
|
||||
#include <Ranking/RankingMgr.h>
|
||||
|
||||
#include <Community/Party/PartyDBMgr.h>
|
||||
|
||||
namespace DBAgent
|
||||
{
|
||||
|
||||
typedef bool (*GameDispatchFunc) (CSendStream& SendStream, PktBase* lpPktBase);
|
||||
|
||||
|
||||
// forward delc.
|
||||
bool ParseServerLog(CSendStream& SendStream, PktBase* lpPktBase);
|
||||
|
||||
|
||||
class CGameDispatchTable : public CPacketDispatchTable<GameDispatchFunc>
|
||||
{
|
||||
public:
|
||||
|
||||
static CGameDispatchTable& GetInstance();
|
||||
|
||||
private:
|
||||
|
||||
CGameDispatchTable();
|
||||
};
|
||||
|
||||
|
||||
CGameDispatchTable& CGameDispatchTable::GetInstance()
|
||||
{
|
||||
static CGameDispatchTable gameDispatchTable;
|
||||
return gameDispatchTable;
|
||||
}
|
||||
|
||||
CGameDispatchTable::CGameDispatchTable()
|
||||
: CPacketDispatchTable<GameDispatchFunc>(UCHAR_MAX)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdDepositUpdate, ParseCharUpdate::UpdateDepositDB);
|
||||
AddDispatch(CmdDeposit, ParseCharUpdate::UpdateDeposit);
|
||||
AddDispatch(CmdFriendDB, ParseCharUpdate::UpdateFriendDB);
|
||||
AddDispatch(CmdQuestDB, ParseCharUpdate::UpdateQuestDB);
|
||||
AddDispatch(CmdConfigInfoDB, ParseCharUpdate::UpdateConfigInfoDB);
|
||||
|
||||
// <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdAgentZone, ParseMoveZone::Parse);
|
||||
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdAgentParty, ParseParty::Parse);
|
||||
|
||||
// <20><>Ʋ<EFBFBD><EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdBGServerCharSlot, ParseCharManage::BGServerCharSlot);
|
||||
|
||||
// <20>α<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdServerLog, ParseServerLog);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdCreateGuild, ParseGuild::CreateGuild);
|
||||
AddDispatch(CmdGuildCmd, ParseGuild::GuildCmd);
|
||||
AddDispatch(CmdGuildMark, ParseGuild::GuildMark);
|
||||
AddDispatch(CmdGuildLevel, ParseGuild::GuildLevel);
|
||||
AddDispatch(CmdGuildRelation, ParseGuild::GuildRelation);
|
||||
AddDispatch(CmdGuildInclination, ParseGuild::GuildInclination);
|
||||
AddDispatch(CmdGuildRight, ParseGuild::SetGuildRight);
|
||||
AddDispatch(CmdGuildSafe, ParseGuild::GuildSafe);
|
||||
AddDispatch(CmdGuildMemberInfoUpdate, ParseGuild::GuildMemberInfoUpdate);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdCreateCamp, ParseCastle::CreateCamp);
|
||||
AddDispatch(CmdCreateSiegeArms, ParseCastle::CreateSiegeArms);
|
||||
AddDispatch(CmdCastleCmd, ParseCastle::CastleCmd);
|
||||
AddDispatch(CmdCampCmd, ParseCastle::CampCmd);
|
||||
AddDispatch(CmdSiegeArmsCmd, ParseCastle::SiegeArmsCmd);
|
||||
AddDispatch(CmdCastleRight, ParseCastle::SetCastleRight);
|
||||
AddDispatch(CmdCampRight, ParseCastle::SetCampRight);
|
||||
AddDispatch(CmdCampMessage, ParseCastle::CampMessage);
|
||||
AddDispatch(CmdMiningCampMineralInfo, ParseCastle::MiningCampMineralInfo);
|
||||
AddDispatch(CmdFertilityInfo, ParseCastle::FertilityInfo);
|
||||
AddDispatch(CmdCampShopInfo, ParseCastle::CampShopInfo);
|
||||
AddDispatch(CmdCastleTaxMove, ParseCastle::CastleTaxMove);
|
||||
AddDispatch(CmdCastleMineralInfo, ParseCastle::CastleMineralInfo);
|
||||
AddDispatch(CmdWarOnOff, ParseCastle::WarOnOff);
|
||||
AddDispatch(CmdStatueCmd, ParseCastle::StatueCmd);
|
||||
|
||||
AddDispatch(CmdAdminCommandLog, ParseCharAdmin::AdminCommandLog);
|
||||
|
||||
AddDispatch(CmdRealmPoint, ParseCastle::RealmPoint);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
AddDispatch(CmdSaveEnemy, ParseCharUpdate::SaveEnemy);
|
||||
|
||||
// <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>.
|
||||
AddDispatch(CmdKeyInfo, ParseCharUpdate::UpdateKeyInfo);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AddDispatch(CmdCharUseCashItem, ParseCharUpdate::UseCashItem);
|
||||
AddDispatch(CmdExtraEvent, ParseCharUpdate::ExtraEvent);
|
||||
}
|
||||
|
||||
|
||||
CMultiDispatch& CGameDispatch::GetDispatchTable()
|
||||
{
|
||||
static CMultiDispatch gameDispatch;
|
||||
return gameDispatch;
|
||||
}
|
||||
|
||||
|
||||
CGameDispatch::CGameDispatch(CSession& Session)
|
||||
: CRylServerDispatch(Session, MAX_PACKET_DISPATCH_PER_PULSE),
|
||||
m_nHumanNum(1),
|
||||
m_nAkhanNum(1),
|
||||
m_dwServerID(0)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
CGameDispatch::~CGameDispatch()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
void CGameDispatch::Connected()
|
||||
{
|
||||
DETLOG3(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/GameServer Connected",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string());
|
||||
}
|
||||
|
||||
void CGameDispatch::Disconnected()
|
||||
{
|
||||
DETLOG3(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/GameServer Disconnected",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string());
|
||||
|
||||
if(0 != m_dwServerID)
|
||||
{
|
||||
GetDispatchTable().RemoveDispatch(m_dwServerID);
|
||||
|
||||
if(0LL != m_GameItemSerialMgr.GetItemSerial())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD>
|
||||
m_GameItemSerialMgr.SaveItemSerial(
|
||||
CDBSingleObject::GetInstance(), m_dwServerID);
|
||||
}
|
||||
|
||||
// ä<><C3A4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
DBAgent::SendPacket::UpdateChannelAllServer();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
DataStorage::CSessionDataMgr::GetInstance().SessionCloseCurrentServer(m_dwServerID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CGameDispatch::DispatchPacket(PktBase* lpPktBase)
|
||||
{
|
||||
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBAgent<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>
|
||||
|
||||
PktBase::CMDType cCmd =lpPktBase->GetCmd();
|
||||
|
||||
bool bResult = false;
|
||||
GameDispatchFunc lpDispatchFunc = 0;
|
||||
|
||||
|
||||
CSendStream& SendStream = GetSendStream();
|
||||
|
||||
switch(cCmd)
|
||||
{
|
||||
// <20>α<EFBFBD><CEB1><EFBFBD> / <20>αƿ<D7BE> / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
case CmdDBUpdateData:
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>ϰų<CFB0> <20>αƿ<D7BE><C6BF>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <20><><EFBFBD>⼭ Ÿ<><C5B8>DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϰų<CFB0> <20>Ѵ<EFBFBD>.
|
||||
bResult = ParseCharUpdate::Parse(SendStream, m_dwServerID,
|
||||
m_GameItemSerialMgr, static_cast<PktDBUpdate*>(lpPktBase));
|
||||
break;
|
||||
|
||||
case CmdSysServerLogin: bResult = ServerLogin(lpPktBase); break; // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||||
case CmdSysServerLogout: bResult = ServerLogout(lpPktBase); break; // <20><><EFBFBD><EFBFBD> <20>αƿ<D7BE>
|
||||
case CmdUserKill: bResult = UserKillAck(lpPktBase); break; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD>
|
||||
case CmdCharAdminCmd: bResult = CharAdminCmd(lpPktBase); break; // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD>
|
||||
case CmdGiveItemToTempInven: bResult = GiveItemToTempInven(lpPktBase); break; // <20>ӽ<EFBFBD><D3BD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
|
||||
case CmdCharNameChange: bResult = ChangeName(lpPktBase); break; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>ٲ۴<D9B2>
|
||||
|
||||
default:
|
||||
|
||||
// <20><>Ÿ <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD>)
|
||||
lpDispatchFunc = CGameDispatchTable::GetInstance().GetDispatch(cCmd);
|
||||
if(0 != lpDispatchFunc)
|
||||
{
|
||||
bResult = lpDispatchFunc(SendStream, lpPktBase);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG5(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/Cmd:0x%02X/ServerID:0x%08X / "
|
||||
"<EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD><C7B5>Դϴ<D4B4>",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string(), cCmd, m_dwServerID);
|
||||
|
||||
bResult = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(!bResult)
|
||||
{
|
||||
ERRLOG5(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/Cmd:0x%02X/ServerID:0x%08X / <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><>Ŷ ó<><C3B3> <20><><EFBFBD><EFBFBD> : ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string(), cCmd, m_dwServerID);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool CGameDispatch::ServerLogin(PktBase* lpPktBase)
|
||||
{
|
||||
PktSL* lpPktSL = static_cast<PktSL*>(lpPktBase);
|
||||
|
||||
m_dwServerID = lpPktSL->m_dwServerID;
|
||||
|
||||
INFLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/ServerID:0x%08X/<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD> : <20><>Ŷ <20><><EFBFBD><EFBFBD>",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string(), m_dwServerID);
|
||||
|
||||
GET_MULTI_DISPATCH(lpGameDispatch, m_dwServerID,
|
||||
CGameDispatch, GetDispatchTable());
|
||||
|
||||
if(0 != lpGameDispatch)
|
||||
{
|
||||
ERRLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/ServerID:0x%08X/<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string(), m_dwServerID);
|
||||
|
||||
CloseSession();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Dispatch <20><><EFBFBD><EFBFBD>.
|
||||
GetDispatchTable().SetDispatch(m_dwServerID, this);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20>ε<EFBFBD>.
|
||||
if(!m_GameItemSerialMgr.LoadItemSerial(CDBSingleObject::GetInstance(), m_dwServerID))
|
||||
{
|
||||
ERRLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/ServerID:0x%08X/<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
|
||||
&GetSession(), this, GetRemoteAddr().get_addr_string(), m_dwServerID);
|
||||
|
||||
CloseSession();
|
||||
return false;
|
||||
}
|
||||
|
||||
CSendStream& SendStream = GetSendStream();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
Guild::CGuildDBMgr::GetInstance().SendGuildDBList(SendStream);
|
||||
|
||||
SERVER_ID serverID;
|
||||
serverID.dwID = m_dwServerID;
|
||||
|
||||
/// <20><> <20><> ķ<><C4B7>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ.
|
||||
Castle::CCastleDBMgr::GetInstance().SendCastleInfo(SendStream, serverID.GetZone(), serverID.GetChannel());
|
||||
CGameTimeDBMgr::GetInstance().SendGameTimeInfo(GameTime::TYPE_GAMESERVER_LOGIN, true, true, true, true, true);
|
||||
CSiegeObjectDBMgr::GetInstance().SendWorldWeaponInfo(SendStream, serverID.GetZone(), serverID.GetChannel());
|
||||
CSiegeObjectDBMgr::GetInstance().SendCampInfo(SendStream, serverID.GetZone(), serverID.GetChannel());
|
||||
CSiegeObjectDBMgr::GetInstance().SendSiegeArmsInfo(SendStream, serverID.GetZone(), serverID.GetChannel());
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>ũ ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (true == CServerSetup::GetInstance().UseContents(GameRYL::STONE_BATTLE))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
// <20><><EFBFBD><EFBFBD> : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.!!
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>æƮ ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ޱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.!!
|
||||
if (SERVER_ID::STONE_WAR1 <= serverID.GetZone() && serverID.GetZone() <= SERVER_ID::STONE_WAR3)
|
||||
{
|
||||
CStatueDBMgr::GetInstance().SendStatueInfo(SendStream, serverID.GetChannel());
|
||||
}
|
||||
}
|
||||
/*
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20>ű<EFBFBD><C5B1><EFBFBD>
|
||||
if (true == CServerSetup::GetInstance().UseContents(GameRYL::NEWZONE_ZONE9))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
// <20><><EFBFBD><EFBFBD> : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.!!
|
||||
if (serverID.GetZone() == SERVER_ID::ZONE9)
|
||||
{
|
||||
CStatueDBMgr::GetInstance().SendStatueInfo(SendStream, serverID.GetChannel());
|
||||
}
|
||||
}
|
||||
*/
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
CMineralVeinDBMgr::GetInstance().SendFertilityInfo(SendStream, serverID.GetZone(), serverID.GetChannel());
|
||||
|
||||
// ä<><C3A4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
DBAgent::SendPacket::UpdateChannelAllServer();
|
||||
|
||||
// <20><>ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
CRankingDBMgr::GetInstance().SendRankingInfo(SendStream);
|
||||
|
||||
// <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD> //
|
||||
CPartyDBMgr::GetInstance().SendToGameServerPartyData(SendStream);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> Ack<63><6B><EFBFBD><EFBFBD>.
|
||||
return SendPacket::ServerLoginAck(m_SendStream,
|
||||
m_dwServerID, m_GameItemSerialMgr.GetItemSerial());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGameDispatch::ServerLogout(PktBase* lpPktBase)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
|
||||
|
||||
char* lpBuffer = m_SendStream.GetBuffer(sizeof(PktBase));
|
||||
if(0 != lpBuffer)
|
||||
{
|
||||
return m_SendStream.WrapHeader(sizeof(PktBase), CmdSysServerLogout, 0, 0);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool CGameDispatch::UserKillAck(PktBase* lpPktBase)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱⸦ <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>, Ack<63><6B> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
|
||||
PktUK* lpPktUK = static_cast<PktUK*>(lpPktBase);
|
||||
|
||||
if(2 == lpPktUK->GetError())
|
||||
{
|
||||
using namespace DataStorage;
|
||||
|
||||
CSessionData* lpSessionData =
|
||||
CSessionDataMgr::GetInstance().GetOpenSession(lpPktUK->m_dwUserID);
|
||||
|
||||
if(0 != lpSessionData &&
|
||||
CSessionData::SE_CHAR_ENABLED == lpSessionData->GetSessionState())
|
||||
{
|
||||
if(lpSessionData->GetServerID() == lpPktUK->m_dwServerID)
|
||||
{
|
||||
CSessionDataMgr::GetInstance().SessionCloseWithLogout(
|
||||
lpPktUK->m_dwUserID, lpPktUK->m_dwServerID);
|
||||
|
||||
ERRLOG2(g_Log, "UID:%10u / ServerID:0x%08X / <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||
lpPktUK->m_dwUserID, lpPktUK->m_dwServerID);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG3(g_Log, "UID:%10u / FromServerID:0x%08X / TargetServerID:0x%08X / "
|
||||
"<EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><>û <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD>",
|
||||
lpPktUK->m_dwUserID, lpPktUK->m_dwServerID, lpSessionData->GetServerID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CGameDispatch::CharAdminCmd(PktBase* lpPktBase)
|
||||
{
|
||||
PktAdmin* lpPktAdmin = static_cast<PktAdmin*>(lpPktBase);
|
||||
|
||||
PktAdmin pktSendAdmin;
|
||||
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
memcpy(&pktSendAdmin, lpPktAdmin, sizeof(PktAdmin));
|
||||
|
||||
// <20>߰輭<DFB0><E8BCAD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/*if(lpPktAdmin->m_usCmd == PktAdmin::DBAGENT_KILL)
|
||||
{
|
||||
int nZero = 0;
|
||||
int nError = 10 / nZero;
|
||||
*reinterpret_cast<int*>(nError) = 0xFFFFFFFF;
|
||||
}*/
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><>ǥ<EFBFBD><C7A5>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
if (lpPktAdmin->m_usCmd == PktAdmin::REQUEST_TRACE_POS)
|
||||
{
|
||||
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD> TRACE <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pktSendAdmin.m_usCmd = PktAdmin::TRACE_CHAR;
|
||||
|
||||
SERVER_ID serverID;
|
||||
|
||||
serverID.sID.Type = CServerSetup::GameServer;
|
||||
serverID.sID.Group = CServerSetup::GetInstance().GetServerGroup();
|
||||
serverID.sID.Channel = lpPktAdmin->m_ZoneInfo.m_cChannel;
|
||||
serverID.sID.ID = lpPktAdmin->m_ZoneInfo.m_cZone;
|
||||
|
||||
GET_MULTI_DISPATCH(lpGameDispatch, serverID.dwID,
|
||||
CGameDispatch, CGameDispatch::GetDispatchTable());
|
||||
|
||||
if(0 != lpGameDispatch)
|
||||
{
|
||||
serverID.dwID = m_dwServerID;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> channel <20><> -1 <20>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>. -_-;
|
||||
pktSendAdmin.m_ZoneInfo.m_cZone = serverID.GetZone();
|
||||
pktSendAdmin.m_ZoneInfo.m_cChannel = -1;
|
||||
|
||||
if(PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktSendAdmin),
|
||||
sizeof(PktAdmin), CmdCharAdminCmd, 0, 0))
|
||||
{
|
||||
lpGameDispatch->GetSendStream().PutBuffer(
|
||||
reinterpret_cast<char*>(&pktSendAdmin), sizeof(PktAdmin), CmdCharAdminCmd);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (lpPktAdmin->m_usCmd == PktAdmin::TRACE_CHAR)
|
||||
{
|
||||
using namespace DBAgent::DataStorage;
|
||||
|
||||
// ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>αƿ<D7BE><C6BF><EFBFBD> <20><><EFBFBD>¶<EFBFBD><C2B6><EFBFBD>
|
||||
if (false == CSessionDataMgr::GetInstance().IsLoadedChar(lpPktAdmin->m_stName))
|
||||
{
|
||||
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>αƿ<D7BE> <20>ߴٴ<DFB4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
pktSendAdmin.m_usCmd = PktAdmin::TRACE_CHAR;
|
||||
|
||||
GET_MULTI_DISPATCH(lpGameDispatch, m_dwServerID,
|
||||
CGameDispatch, CGameDispatch::GetDispatchTable());
|
||||
|
||||
if(0 != lpGameDispatch)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> channel <20><> -1 <20>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>. -_-;
|
||||
pktSendAdmin.m_ZoneInfo.m_cChannel = -1;
|
||||
pktSendAdmin.m_Position.fPointX = 0.0f;
|
||||
pktSendAdmin.m_Position.fPointY = 0.0f;
|
||||
pktSendAdmin.m_Position.fPointZ = 0.0f;
|
||||
|
||||
if(PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktSendAdmin),
|
||||
sizeof(PktAdmin), CmdCharAdminCmd, 0, PktAdmin::E_LOGOUT_CHAR))
|
||||
{
|
||||
lpGameDispatch->GetSendStream().PutBuffer(
|
||||
reinterpret_cast<char*>(&pktSendAdmin), sizeof(PktAdmin), CmdCharAdminCmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pktSendAdmin.m_usCmd = PktAdmin::REQUEST_TRACE_POS;
|
||||
|
||||
SERVER_ID serverID;
|
||||
serverID.dwID = m_dwServerID;
|
||||
|
||||
// TRACE <20><><EFBFBD>Ѿ<EFBFBD> <20><> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>صд<D8B5>.
|
||||
pktSendAdmin.m_ZoneInfo.m_cZone = serverID.GetZone();
|
||||
pktSendAdmin.m_ZoneInfo.m_cChannel = 0;
|
||||
}
|
||||
}
|
||||
/*
|
||||
else if (lpPktAdmin->m_usCmd == PktAdmin::INFO_CHAR)
|
||||
{
|
||||
using namespace DBAgent::DataStorage;
|
||||
|
||||
// ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>αƿ<D7BE><C6BF><EFBFBD> <20><><EFBFBD>¶<EFBFBD><C2B6><EFBFBD>
|
||||
if (false == CSessionDataMgr::GetInstance().IsLoadedChar(lpPktAdmin->m_stName))
|
||||
{
|
||||
pktSendAdmin.m_usCmd = PktAdmin::INFO_CHAR;
|
||||
|
||||
GET_MULTI_DISPATCH(lpGameDispatch, m_dwServerID,
|
||||
CGameDispatch, CGameDispatch::GetDispatchTable());
|
||||
|
||||
if(0 != lpGameDispatch)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> channel <20><> -1 <20>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>. -_-;
|
||||
pktSendAdmin.m_ZoneInfo.m_cChannel = -1;
|
||||
pktSendAdmin.m_Position.fPointX = 0.0f;
|
||||
pktSendAdmin.m_Position.fPointY = 0.0f;
|
||||
pktSendAdmin.m_Position.fPointZ = 0.0f;
|
||||
|
||||
if (PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktSendAdmin),
|
||||
sizeof(PktAdmin), CmdCharAdminCmd, 0, PktAdmin::E_LOGOUT_CHAR))
|
||||
{
|
||||
lpGameDispatch->GetSendStream().PutBuffer(
|
||||
reinterpret_cast<char*>(&pktSendAdmin), sizeof(PktAdmin), CmdCharAdminCmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
if(PacketWrap::WrapHeader(reinterpret_cast<char*>(&pktSendAdmin),
|
||||
sizeof(PktAdmin), CmdCharAdminCmd, 0, 0))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
GetDispatchTable().Process(CSendPacketAllServer(
|
||||
reinterpret_cast<char*>(&pktSendAdmin), sizeof(PktAdmin), CmdCharAdminCmd));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CGameDispatch::GiveItemToTempInven(PktBase* lpPktBase)
|
||||
{
|
||||
PktGiveItemToTempInven* lpPktGiveItemToTempInven =
|
||||
static_cast<PktGiveItemToTempInven*>(lpPktBase);
|
||||
|
||||
GiveItemInfo* lpPos = lpPktGiveItemToTempInven->m_GiveItemInfo;
|
||||
GiveItemInfo* lpEnd = lpPos + lpPktGiveItemToTempInven->m_cGiveItemNum;
|
||||
|
||||
CGiveItemMgr& giveItemMgr = CGiveItemMgr::GetInstance();
|
||||
|
||||
for(; lpPos != lpEnd; ++lpPos)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20>ش<EFBFBD>. ä<><C3A4><EFBFBD><EFBFBD> <20><> <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
if(0 != lpPos->m_dwItemUID)
|
||||
{
|
||||
giveItemMgr.UpdateItemSerial(
|
||||
lpPos->m_dwCreateID, lpPos->m_dwItemUID);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGameDispatch::ChangeName(PktBase* lpPktBase)
|
||||
{
|
||||
PktCharNameChange* lpCharNameChange =
|
||||
reinterpret_cast<PktCharNameChange*>(lpPktBase);
|
||||
|
||||
unsigned long dwUID = lpCharNameChange->m_dwUID;
|
||||
unsigned long dwCID = lpCharNameChange->m_dwCID;
|
||||
const char* szChangeName = lpCharNameChange->m_szCharName;
|
||||
Item::ItemPos ItemPos = lpCharNameChange->m_ItemPos; // <20><><EFBFBD><EFBFBD><EFBFBD>㰡<EFBFBD><E3B0A1> <20><>ġ
|
||||
|
||||
unsigned char cNameChangeCount = 0;
|
||||
unsigned short usError = 0;
|
||||
|
||||
using namespace DBAgent::DataStorage;
|
||||
|
||||
CSessionData* lpSessionData =
|
||||
CSessionDataMgr::GetInstance().GetCharLoadedSession(dwCID);
|
||||
|
||||
CCharacterData* lpCharacterData = 0;
|
||||
|
||||
if (0 != lpSessionData &&
|
||||
lpSessionData->GetUID() == dwUID &&
|
||||
lpSessionData->GetCID() == dwCID &&
|
||||
(0 != (lpCharacterData = lpSessionData->GetCharacterData())) &&
|
||||
dwCID == lpCharacterData->GetCID())
|
||||
{
|
||||
unsigned long dwResult = 0;
|
||||
|
||||
const char* szPrevName = lpCharacterData->GetName();
|
||||
|
||||
// ī<><C4AB>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>δ<EFBFBD>.
|
||||
CHAR_INFOEX infoEx = lpCharacterData->GetInfoEx();
|
||||
/*
|
||||
if (0 == infoEx.cNameChangeCount)
|
||||
{
|
||||
usError = PktCharNameChange::ERR_NAMECHANGE_COUNT;
|
||||
}
|
||||
else
|
||||
*/
|
||||
// <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ҽ<EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
if (DBComponent::GameDB::ChangeCharName(
|
||||
CDBSingleObject::GetInstance(), dwCID, szChangeName, dwResult))
|
||||
{
|
||||
if (0 == dwResult)
|
||||
{
|
||||
CHAR_INFOST charInfoST = lpCharacterData->GetInfo();
|
||||
|
||||
strncpy(charInfoST.Name, szChangeName, CHAR_INFOST::MAX_NAME_LEN);
|
||||
charInfoST.Name[CHAR_INFOST::MAX_NAME_LEN - 1] = 0;
|
||||
|
||||
lpCharacterData->SetInfo(charInfoST, true);
|
||||
|
||||
infoEx.cNameChangeCount = 0;
|
||||
// --infoEx.cNameChangeCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>̺κ<CCBA><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
|
||||
cNameChangeCount = infoEx.cNameChangeCount;
|
||||
lpCharacterData->SetInfoEx(infoEx);
|
||||
|
||||
// <20><>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD> ã<>´<EFBFBD> //
|
||||
if(CRankingMgr::GetInstance().GetRank(szPrevName, (unsigned char)lpCharacterData->GetClass()))
|
||||
{
|
||||
const CHAR_INFOST& charInfo = lpCharacterData->GetInfo();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
||||
CRankingDBMgr::GetInstance().DeleteRanking(RankingNode(szPrevName, charInfo.Fame,
|
||||
static_cast<unsigned char>(charInfo.Level), static_cast<unsigned char>(charInfo.Class)));
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ //
|
||||
CRankingDBMgr::GetInstance().UpdateRanking(RankingNode(szChangeName, charInfo.Fame,
|
||||
static_cast<unsigned char>(charInfo.Level), static_cast<unsigned char>(charInfo.Class)));
|
||||
}
|
||||
}
|
||||
else if(1 == dwResult)
|
||||
{
|
||||
ERRLOG3(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : <20≯<EFBFBD><CCB8><EFBFBD> <20>̹<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>",
|
||||
dwUID, dwCID, szChangeName);
|
||||
|
||||
usError = PktCharNameChange::ERR_ALREADY_USE_NAME;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG4(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / dwResult:%10u / ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : <20><> <20><> <20><><EFBFBD><EFBFBD> dwResult<6C><74><EFBFBD>Դϴ<D4B4>",
|
||||
dwUID, dwCID, szChangeName, dwResult);
|
||||
|
||||
usError = PktCharNameChange::ERR_SERVER;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG3(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : DBȣ<42><C8A3> <20><><EFBFBD><EFBFBD>",
|
||||
dwUID, dwCID, szChangeName);
|
||||
|
||||
usError = PktCharNameChange::ERR_SERVER;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG3(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / "
|
||||
"ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : ij<><C4B3><EFBFBD>Ͱ<EFBFBD> Ȱ<><C8B0>ȭ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>",
|
||||
dwUID, dwCID, szChangeName);
|
||||
|
||||
usError = PktCharNameChange::ERR_CANNOT_FIND_CHARACTER;
|
||||
}
|
||||
|
||||
GameClientSendPacket::SendCharNameChange(GetSendStream(), dwUID, dwCID,
|
||||
szChangeName, cNameChangeCount, &ItemPos, usError);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CGameDispatch::IncCharNum(int nRace)
|
||||
{
|
||||
switch(nRace)
|
||||
{
|
||||
case CClass::HUMAN: ++m_nHumanNum; break;
|
||||
case CClass::AKHAN: ++m_nAkhanNum; break;
|
||||
}
|
||||
}
|
||||
|
||||
void CGameDispatch::DecCharNum(int nRace)
|
||||
{
|
||||
switch(nRace)
|
||||
{
|
||||
case CClass::HUMAN: --m_nHumanNum; break;
|
||||
case CClass::AKHAN: --m_nAkhanNum; break;
|
||||
}
|
||||
}
|
||||
|
||||
int CGameDispatch::GetCharNum(int nRace) const
|
||||
{
|
||||
int nNum = -1;
|
||||
|
||||
switch(nRace)
|
||||
{
|
||||
case CClass::HUMAN: nNum = m_nHumanNum; break;
|
||||
case CClass::AKHAN: nNum = m_nAkhanNum; break;
|
||||
}
|
||||
|
||||
return (nNum < 1) ? 1 : nNum;
|
||||
}
|
||||
|
||||
int CGameDispatch::GetCharNum() const
|
||||
{
|
||||
int nUserNumber = m_nHumanNum + m_nAkhanNum - 1;
|
||||
return (nUserNumber < 1) ? 1 : nUserNumber;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>и<EFBFBD><D0B8><EFBFBD> <20><>..
|
||||
bool ParseServerLog(CSendStream& SendStream, PktBase* lpPktBase)
|
||||
{
|
||||
PktServerLog* lpPktServerLog = static_cast<PktServerLog*>(lpPktBase);
|
||||
|
||||
switch(lpPktServerLog->m_cLogCmd)
|
||||
{
|
||||
case PktServerLog::ITEM_DUPLICATED_LOG:
|
||||
{
|
||||
PktItemDuplicated* lpPktItemDup = static_cast<PktItemDuplicated*>(lpPktServerLog);
|
||||
|
||||
if(!DBComponent::GameDB::InsertItemDuplicatedLog(CDBSingleObject::GetInstance(),
|
||||
lpPktItemDup->m_dwItemSerial, lpPktItemDup->m_szName,
|
||||
lpPktItemDup->m_dwUID, lpPktItemDup->m_dwCID, lpPktItemDup->m_dwQty))
|
||||
{
|
||||
ERRLOG5(g_Log, "UID:%10u / CID:%10u / CharName:%s / ItemSerial:0x%I64X / Qty:%u / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>簡 <20>߰ߵǾ<DFB5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>",
|
||||
lpPktItemDup->m_dwUID, lpPktItemDup->m_dwCID, lpPktItemDup->m_szName,
|
||||
lpPktItemDup->m_dwItemSerial, lpPktItemDup->m_dwQty);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><EFBFBD><DEBC><EFBFBD>
|
||||
|
||||
CGetTotalCount::CGetTotalCount(unsigned short& usHumanCount,
|
||||
unsigned short& usAkhanCount,
|
||||
unsigned char& cChannelCount)
|
||||
: m_usHumanCount(usHumanCount),
|
||||
m_usAkhanCount(usAkhanCount),
|
||||
m_cChannelCount(cChannelCount)
|
||||
{
|
||||
m_usHumanCount = 0;
|
||||
m_usAkhanCount = 0;
|
||||
m_cChannelCount = 0;
|
||||
}
|
||||
|
||||
bool CGetTotalCount::operator () (unsigned long dwServerID, CPacketDispatch& packetDispatch)
|
||||
{
|
||||
CGameDispatch& gameDispatch = reinterpret_cast<CGameDispatch&>(packetDispatch);
|
||||
|
||||
int nCharNum = gameDispatch.GetCharNum(CClass::HUMAN);
|
||||
m_usHumanCount += nCharNum;
|
||||
|
||||
nCharNum = gameDispatch.GetCharNum(CClass::AKHAN);
|
||||
m_usAkhanCount += nCharNum;
|
||||
|
||||
++m_cChannelCount;
|
||||
return true;
|
||||
}
|
||||
|
||||
CUserPercentageInZone::CUserPercentageInZone(unsigned short* lpChannelUserNum,
|
||||
unsigned char cZone, unsigned char cChannelNum)
|
||||
: m_lpChannelUserNum(lpChannelUserNum),
|
||||
m_cZone(cZone),
|
||||
m_cChannelNum(cChannelNum),
|
||||
m_nMaxUserNum(CServerSetup::GetInstance().GetUserLimit())
|
||||
{
|
||||
std::fill_n(m_lpChannelUserNum, m_cChannelNum, 0);
|
||||
}
|
||||
|
||||
bool CUserPercentageInZone::operator () (unsigned long dwServerID, CPacketDispatch& packetDispatch)
|
||||
{
|
||||
CGameDispatch& gameDispatch = reinterpret_cast<CGameDispatch&>(packetDispatch);
|
||||
|
||||
SERVER_ID serverID;
|
||||
serverID.dwID = dwServerID;
|
||||
|
||||
if(serverID.GetZone() == m_cZone)
|
||||
{
|
||||
if(serverID.GetChannel() < m_cChannelNum)
|
||||
{
|
||||
m_lpChannelUserNum[serverID.GetChannel()] =
|
||||
gameDispatch.GetCharNum() * 100 / m_nMaxUserNum + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
CSendPacketToZone::CSendPacketToZone(const char* szData, unsigned long dwDataLen,
|
||||
unsigned char cPacketCmd, unsigned char cZone)
|
||||
: m_szData(szData), m_dwDataLen(dwDataLen),
|
||||
m_cPacketCmd(cPacketCmd), m_cZone(cZone)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool CSendPacketToZone::operator () (unsigned long dwServerID, CPacketDispatch& packetDispatch)
|
||||
{
|
||||
SERVER_ID serverID;
|
||||
serverID.dwID = dwServerID;
|
||||
|
||||
if(serverID.GetZone() == m_cZone)
|
||||
{
|
||||
return reinterpret_cast<CRylServerDispatch&>(packetDispatch).GetSendStream().PutBuffer(
|
||||
m_szData, m_dwDataLen, m_cPacketCmd);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user