text encoding fixed
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "../../common/billing.h"
|
||||
@@ -167,7 +167,7 @@ bool CClientManager::Initialize()
|
||||
|
||||
LoadEventFlag();
|
||||
|
||||
// database character-set을 강제로 맞춤
|
||||
// database character-set을 강제로 맞춤
|
||||
if (g_stLocale == "big5" || g_stLocale == "sjis")
|
||||
CDBManager::instance().QueryLocaleSet();
|
||||
|
||||
@@ -180,7 +180,7 @@ void CClientManager::MainLoop()
|
||||
|
||||
sys_log(0, "ClientManager pointer is %p", this);
|
||||
|
||||
// 메인루프
|
||||
// 메인루프
|
||||
while (!m_bShutdowned)
|
||||
{
|
||||
while ((tmp = CDBManager::instance().PopResult()))
|
||||
@@ -196,7 +196,7 @@ void CClientManager::MainLoop()
|
||||
}
|
||||
|
||||
//
|
||||
// 메인루프 종료처리
|
||||
// 메인루프 종료처리
|
||||
//
|
||||
sys_log(0, "MainLoop exited, Starting cache flushing");
|
||||
|
||||
@@ -204,7 +204,7 @@ void CClientManager::MainLoop()
|
||||
|
||||
itertype(m_map_playerCache) it = m_map_playerCache.begin();
|
||||
|
||||
//플레이어 테이블 캐쉬 플러쉬
|
||||
//플레이어 테이블 캐쉬 플러쉬
|
||||
while (it != m_map_playerCache.end())
|
||||
{
|
||||
CPlayerTableCache * c = (it++)->second;
|
||||
@@ -216,7 +216,7 @@ void CClientManager::MainLoop()
|
||||
|
||||
|
||||
itertype(m_map_itemCache) it2 = m_map_itemCache.begin();
|
||||
//아이템 플러쉬
|
||||
//아이템 플러쉬
|
||||
while (it2 != m_map_itemCache.end())
|
||||
{
|
||||
CItemCache * c = (it2++)->second;
|
||||
@@ -228,7 +228,7 @@ void CClientManager::MainLoop()
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
//
|
||||
// 개인상점 아이템 가격 리스트 Flush
|
||||
// 개인상점 아이템 가격 리스트 Flush
|
||||
//
|
||||
for (itertype(m_mapItemPriceListCache) itPriceList = m_mapItemPriceListCache.begin(); itPriceList != m_mapItemPriceListCache.end(); ++itPriceList)
|
||||
{
|
||||
@@ -248,7 +248,7 @@ void CClientManager::Quit()
|
||||
|
||||
void CClientManager::QUERY_BOOT(CPeer* peer, TPacketGDBoot * p)
|
||||
{
|
||||
const BYTE bPacketVersion = 6; // BOOT 패킷이 바뀔때마다 번호를 올리도록 한다.
|
||||
const BYTE bPacketVersion = 6; // BOOT 패킷이 바뀔때마다 번호를 올리도록 한다.
|
||||
|
||||
std::vector<tAdminInfo> vAdmin;
|
||||
std::vector<std::string> vHost;
|
||||
@@ -507,9 +507,9 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
|
||||
ClientHandleInfo * pi = (ClientHandleInfo *) qi->pvData;
|
||||
DWORD dwHandle = pi->dwHandle;
|
||||
|
||||
// 여기에서 사용하는 account_index는 쿼리 순서를 말한다.
|
||||
// 첫번째 패스워드 알아내기 위해 하는 쿼리가 0
|
||||
// 두번째 실제 데이터를 얻어놓는 쿼리가 1
|
||||
// 여기에서 사용하는 account_index는 쿼리 순서를 말한다.
|
||||
// 첫번째 패스워드 알아내기 위해 하는 쿼리가 0
|
||||
// 두번째 실제 데이터를 얻어놓는 쿼리가 1
|
||||
|
||||
if (pi->account_index == 0)
|
||||
{
|
||||
@@ -534,7 +534,7 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
|
||||
{
|
||||
MYSQL_ROW row = mysql_fetch_row(res->pSQLResult);
|
||||
|
||||
// 비밀번호가 틀리면..
|
||||
// 비밀번호가 틀리면..
|
||||
if (((!row[2] || !*row[2]) && strcmp("000000", szSafeboxPassword)) ||
|
||||
((row[2] && *row[2]) && strcmp(row[2], szSafeboxPassword)))
|
||||
{
|
||||
@@ -600,8 +600,8 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
|
||||
}
|
||||
|
||||
|
||||
// 쿼리에 에러가 있었으므로 응답할 경우 창고가 비어있는 것 처럼
|
||||
// 보이기 때문에 창고가 아얘 안열리는게 나음
|
||||
// 쿼리에 에러가 있었으므로 응답할 경우 창고가 비어있는 것 처럼
|
||||
// 보이기 때문에 창고가 아얘 안열리는게 나음
|
||||
if (!msg->Get()->pSQLResult)
|
||||
{
|
||||
sys_err("null safebox result");
|
||||
@@ -711,8 +711,8 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
|
||||
{
|
||||
case 72723: case 72724: case 72725: case 72726:
|
||||
case 72727: case 72728: case 72729: case 72730:
|
||||
// 무시무시하지만 이전에 하던 걸 고치기는 무섭고...
|
||||
// 그래서 그냥 하드 코딩. 선물 상자용 자동물약 아이템들.
|
||||
// 무시무시하지만 이전에 하던 걸 고치기는 무섭고...
|
||||
// 그래서 그냥 하드 코딩. 선물 상자용 자동물약 아이템들.
|
||||
case 76004: case 76005: case 76021: case 76022:
|
||||
case 79012: case 79013:
|
||||
if (pItemAward->dwSocket2 == 0)
|
||||
@@ -824,7 +824,7 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
|
||||
void CClientManager::QUERY_SAFEBOX_CHANGE_SIZE(CPeer * pkPeer, DWORD dwHandle, TSafeboxChangeSizePacket * p)
|
||||
{
|
||||
ClientHandleInfo * pi = new ClientHandleInfo(dwHandle);
|
||||
pi->account_index = p->bSize; // account_index를 사이즈로 임시로 사용
|
||||
pi->account_index = p->bSize; // account_index를 사이즈로 임시로 사용
|
||||
|
||||
char szQuery[QUERY_MAX_LEN];
|
||||
|
||||
@@ -912,7 +912,7 @@ void CClientManager::RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg)
|
||||
TItemPricelistReqInfo* pReqInfo = (TItemPricelistReqInfo*)static_cast<CQueryInfo*>(pMsg->pvUserData)->pvData;
|
||||
|
||||
//
|
||||
// DB 에서 로드한 정보를 Cache 에 저장
|
||||
// DB 에서 로드한 정보를 Cache 에 저장
|
||||
//
|
||||
|
||||
TItemPriceListTable table;
|
||||
@@ -931,7 +931,7 @@ void CClientManager::RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg)
|
||||
PutItemPriceListCache(&table);
|
||||
|
||||
//
|
||||
// 로드한 데이터를 Game server 에 전송
|
||||
// 로드한 데이터를 Game server 에 전송
|
||||
//
|
||||
|
||||
TPacketMyshopPricelistHeader header;
|
||||
@@ -955,7 +955,7 @@ void CClientManager::RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg)
|
||||
TItemPriceListTable* pUpdateTable = (TItemPriceListTable*)static_cast<CQueryInfo*>(pMsg->pvUserData)->pvData;
|
||||
|
||||
//
|
||||
// DB 에서 로드한 정보를 Cache 에 저장
|
||||
// DB 에서 로드한 정보를 Cache 에 저장
|
||||
//
|
||||
|
||||
TItemPriceListTable table;
|
||||
@@ -1017,18 +1017,18 @@ void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpire
|
||||
UINT g_start_map[4] =
|
||||
{
|
||||
0, // reserved
|
||||
1, // 신수국
|
||||
21, // 천조국
|
||||
41 // 진노국
|
||||
1, // 신수국
|
||||
21, // 천조국
|
||||
41 // 진노국
|
||||
};
|
||||
|
||||
// FIXME share with game
|
||||
DWORD g_start_position[4][2]=
|
||||
{
|
||||
{ 0, 0 },
|
||||
{ 469300, 964200 }, // 신수국
|
||||
{ 55700, 157900 }, // 천조국
|
||||
{ 969600, 278400 } // 진노국
|
||||
{ 469300, 964200 }, // 신수국
|
||||
{ 55700, 157900 }, // 천조국
|
||||
{ 969600, 278400 } // 진노국
|
||||
};
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
@@ -1079,7 +1079,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD
|
||||
peer->SetMaps(p->alMaps);
|
||||
|
||||
//
|
||||
// 어떤 맵이 어떤 서버에 있는지 보내기
|
||||
// 어떤 맵이 어떤 서버에 있는지 보내기
|
||||
//
|
||||
TMapLocation kMapLocations;
|
||||
|
||||
@@ -1186,7 +1186,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD
|
||||
peer->Encode(&vec_kMapLocations[0], sizeof(TMapLocation) * vec_kMapLocations.size());
|
||||
|
||||
//
|
||||
// 셋업 : 접속한 피어에 다른 피어들이 접속하게 만든다. (P2P 컨넥션 생성)
|
||||
// 셋업 : 접속한 피어에 다른 피어들이 접속하게 만든다. (P2P 컨넥션 생성)
|
||||
//
|
||||
sys_log(0, "SETUP: channel %u listen %u p2p %u count %u", peer->GetChannel(), p->wListenPort, p->wP2PPort, bMapCount);
|
||||
|
||||
@@ -1202,7 +1202,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD
|
||||
if (tmp == peer)
|
||||
continue;
|
||||
|
||||
// 채널이 0이라면 아직 SETUP 패킷이 오지 않은 피어 또는 auth라고 간주할 수 있음
|
||||
// 채널이 0이라면 아직 SETUP 패킷이 오지 않은 피어 또는 auth라고 간주할 수 있음
|
||||
if (0 == tmp->GetChannel())
|
||||
continue;
|
||||
|
||||
@@ -1211,7 +1211,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD
|
||||
}
|
||||
|
||||
//
|
||||
// 로그인 및 빌링정보 보내기
|
||||
// 로그인 및 빌링정보 보내기
|
||||
//
|
||||
TPacketLoginOnSetup * pck = (TPacketLoginOnSetup *) c_pData;;
|
||||
std::vector<TPacketBillingRepair> vec_repair;
|
||||
@@ -1284,8 +1284,8 @@ void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
|
||||
{
|
||||
TPlayerItem * p = (TPlayerItem *) c_pData;
|
||||
|
||||
// 창고면 캐쉬하지 않고, 캐쉬에 있던 것도 빼버려야 한다.
|
||||
// auction은 이 루트를 타지 않아야 한다. EnrollInAuction을 타야한다.
|
||||
// 창고면 캐쉬하지 않고, 캐쉬에 있던 것도 빼버려야 한다.
|
||||
// auction은 이 루트를 타지 않아야 한다. EnrollInAuction을 타야한다.
|
||||
|
||||
if (p->window == SAFEBOX || p->window == MALL)
|
||||
{
|
||||
@@ -1424,7 +1424,7 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery)
|
||||
|
||||
c = GetItemCache(pNew->id);
|
||||
|
||||
// 아이템 새로 생성
|
||||
// 아이템 새로 생성
|
||||
if (!c)
|
||||
{
|
||||
if (g_log)
|
||||
@@ -1433,15 +1433,15 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery)
|
||||
c = new CItemCache;
|
||||
m_map_itemCache.insert(TItemCacheMap::value_type(pNew->id, c));
|
||||
}
|
||||
// 있을시
|
||||
// 있을시
|
||||
else
|
||||
{
|
||||
if (g_log)
|
||||
sys_log(0, "ITEM_CACHE: PutItemCache ==> Have Cache");
|
||||
// 소유자가 틀리면
|
||||
// 소유자가 틀리면
|
||||
if (pNew->owner != c->Get()->owner)
|
||||
{
|
||||
// 이미 이 아이템을 가지고 있었던 유저로 부터 아이템을 삭제한다.
|
||||
// 이미 이 아이템을 가지고 있었던 유저로 부터 아이템을 삭제한다.
|
||||
TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner);
|
||||
|
||||
if (it != m_map_pkItemCacheSetPtr.end())
|
||||
@@ -1453,7 +1453,7 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery)
|
||||
}
|
||||
}
|
||||
|
||||
// 새로운 정보 업데이트
|
||||
// 새로운 정보 업데이트
|
||||
c->Put(pNew, bSkipQuery);
|
||||
|
||||
TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner);
|
||||
@@ -1468,8 +1468,8 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery)
|
||||
}
|
||||
else
|
||||
{
|
||||
// 현재 소유자가 없으므로 바로 저장해야 다음 접속이 올 때 SQL에 쿼리하여
|
||||
// 받을 수 있으므로 바로 저장한다.
|
||||
// 현재 소유자가 없으므로 바로 저장해야 다음 접속이 올 때 SQL에 쿼리하여
|
||||
// 받을 수 있으므로 바로 저장한다.
|
||||
if (g_log)
|
||||
sys_log(0, "ITEM_CACHE: direct save %u id %u", c->Get()->owner, c->Get()->id);
|
||||
else
|
||||
@@ -1529,7 +1529,7 @@ void CClientManager::UpdatePlayerCache()
|
||||
|
||||
c->Flush();
|
||||
|
||||
// Item Cache도 업데이트
|
||||
// Item Cache도 업데이트
|
||||
UpdateItemCacheSet(c->Get()->id);
|
||||
}
|
||||
else if (c->CheckFlushTimeout())
|
||||
@@ -1555,7 +1555,7 @@ void CClientManager::UpdateItemCache()
|
||||
{
|
||||
CItemCache * c = (it++)->second;
|
||||
|
||||
// 아이템은 Flush만 한다.
|
||||
// 아이템은 Flush만 한다.
|
||||
if (c->CheckFlushTimeout())
|
||||
{
|
||||
if (g_test_server)
|
||||
@@ -1602,7 +1602,7 @@ void CClientManager::QUERY_ITEM_DESTROY(CPeer * pkPeer, const char * c_pData)
|
||||
if (g_log)
|
||||
sys_log(0, "HEADER_GD_ITEM_DESTROY: PID %u ID %u", dwPID, dwID);
|
||||
|
||||
if (dwPID == 0) // 아무도 가진 사람이 없었다면, 비동기 쿼리
|
||||
if (dwPID == 0) // 아무도 가진 사람이 없었다면, 비동기 쿼리
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
else
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, pkPeer->GetHandle(), NULL);
|
||||
@@ -1680,7 +1680,7 @@ void CClientManager::QUERY_RELOAD_PROTO()
|
||||
|
||||
// ADD_GUILD_PRIV_TIME
|
||||
/**
|
||||
* @version 05/06/08 Bang2ni - 지속시간 추가
|
||||
* @version 05/06/08 Bang2ni - 지속시간 추가
|
||||
*/
|
||||
void CClientManager::AddGuildPriv(TPacketGiveGuildPriv* p)
|
||||
{
|
||||
@@ -2161,8 +2161,8 @@ void CClientManager::WeddingEnd(TPacketWeddingEnd * p)
|
||||
}
|
||||
|
||||
//
|
||||
// 캐시에 가격정보가 있으면 캐시를 업데이트 하고 캐시에 가격정보가 없다면
|
||||
// 우선 기존의 데이터를 로드한 뒤에 기존의 정보로 캐시를 만들고 새로 받은 가격정보를 업데이트 한다.
|
||||
// 캐시에 가격정보가 있으면 캐시를 업데이트 하고 캐시에 가격정보가 없다면
|
||||
// 우선 기존의 데이터를 로드한 뒤에 기존의 정보로 캐시를 만들고 새로 받은 가격정보를 업데이트 한다.
|
||||
//
|
||||
|
||||
// Old code:
|
||||
@@ -2242,7 +2242,7 @@ void CClientManager::MyshopPricelistUpdate(const TItemPriceListTable* pPacket)
|
||||
}
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
// 캐시된 가격정보가 있으면 캐시를 읽어 바로 전송하고 캐시에 정보가 없으면 DB 에 쿼리를 한다.
|
||||
// 캐시된 가격정보가 있으면 캐시를 읽어 바로 전송하고 캐시에 정보가 없으면 DB 에 쿼리를 한다.
|
||||
//
|
||||
void CClientManager::MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID)
|
||||
{
|
||||
@@ -2656,15 +2656,15 @@ void CClientManager::ProcessPackets(CPeer * peer)
|
||||
ComeToVote(peer, dwHandle, data);
|
||||
break;
|
||||
|
||||
case HEADER_GD_RMCANDIDACY: //< 후보 제거 (운영자)
|
||||
case HEADER_GD_RMCANDIDACY: //< 후보 제거 (운영자)
|
||||
RMCandidacy(peer, dwHandle, data);
|
||||
break;
|
||||
|
||||
case HEADER_GD_SETMONARCH: ///<군주설정 (운영자)
|
||||
case HEADER_GD_SETMONARCH: ///<군주설정 (운영자)
|
||||
SetMonarch(peer, dwHandle, data);
|
||||
break;
|
||||
|
||||
case HEADER_GD_RMMONARCH: ///<군주삭제
|
||||
case HEADER_GD_RMMONARCH: ///<군주삭제
|
||||
RMMonarch(peer, dwHandle, data);
|
||||
break;
|
||||
//END_MONARCH
|
||||
@@ -2857,9 +2857,9 @@ CPeer * CClientManager::GetAnyPeer()
|
||||
return m_peerList.front();
|
||||
}
|
||||
|
||||
// DB 매니저로 부터 받은 결과를 처리한다.
|
||||
// DB 매니저로 부터 받은 결과를 처리한다.
|
||||
//
|
||||
// @version 05/06/10 Bang2ni - 가격정보 관련 쿼리(QID_ITEMPRICE_XXX) 추가
|
||||
// @version 05/06/10 Bang2ni - 가격정보 관련 쿼리(QID_ITEMPRICE_XXX) 추가
|
||||
int CClientManager::AnalyzeQueryResult(SQLMsg * msg)
|
||||
{
|
||||
CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
|
||||
@@ -2977,7 +2977,7 @@ void UsageLog()
|
||||
char *time_s;
|
||||
struct tm lt;
|
||||
|
||||
int avg = g_dwUsageAvg / 3600; // 60 초 * 60 분
|
||||
int avg = g_dwUsageAvg / 3600; // 60 초 * 60 분
|
||||
|
||||
fp = fopen("usage.txt", "a+");
|
||||
|
||||
@@ -3010,7 +3010,7 @@ int CClientManager::Process()
|
||||
++thecore_heart->pulse;
|
||||
|
||||
/*
|
||||
//30분마다 변경
|
||||
//30분마다 변경
|
||||
if (((thecore_pulse() % (60 * 30 * 10)) == 0))
|
||||
{
|
||||
g_iPlayerCacheFlushSeconds = MAX(60, rand() % 180);
|
||||
@@ -3088,11 +3088,11 @@ int CClientManager::Process()
|
||||
m_iCacheFlushCount = 0;
|
||||
|
||||
|
||||
//플레이어 플러쉬
|
||||
//플레이어 플러쉬
|
||||
UpdatePlayerCache();
|
||||
//아이템 플러쉬
|
||||
//아이템 플러쉬
|
||||
UpdateItemCache();
|
||||
//로그아웃시 처리- 캐쉬셋 플러쉬
|
||||
//로그아웃시 처리- 캐쉬셋 플러쉬
|
||||
UpdateLogoutPlayer();
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
@@ -3162,13 +3162,13 @@ int CClientManager::Process()
|
||||
/////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 60))) // 60초에 한번
|
||||
if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 60))) // 60초에 한번
|
||||
{
|
||||
// 유니크 아이템을 위한 시간을 보낸다.
|
||||
// 유니크 아이템을 위한 시간을 보낸다.
|
||||
CClientManager::instance().SendTime();
|
||||
}
|
||||
|
||||
if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 3600))) // 한시간에 한번
|
||||
if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 3600))) // 한시간에 한번
|
||||
{
|
||||
CMoneyLog::instance().Save();
|
||||
}
|
||||
@@ -3178,7 +3178,7 @@ int CClientManager::Process()
|
||||
int idx;
|
||||
CPeer * peer;
|
||||
|
||||
for (idx = 0; idx < num_events; ++idx) // 인풋
|
||||
for (idx = 0; idx < num_events; ++idx) // 인풋
|
||||
{
|
||||
peer = (CPeer *) fdwatch_get_client_data(m_fdWatcher, idx);
|
||||
|
||||
@@ -3258,7 +3258,7 @@ int CClientManager::Process()
|
||||
|
||||
DWORD CClientManager::GetUserCount()
|
||||
{
|
||||
// 단순히 로그인 카운트를 센다.. --;
|
||||
// 단순히 로그인 카운트를 센다.. --;
|
||||
return m_map_kLogonAccount.size();
|
||||
}
|
||||
|
||||
@@ -3318,7 +3318,7 @@ bool CClientManager::InitializeNowItemID()
|
||||
{
|
||||
DWORD dwMin, dwMax;
|
||||
|
||||
//아이템 ID를 초기화 한다.
|
||||
//아이템 ID를 초기화 한다.
|
||||
if (!CConfig::instance().GetTwoValue("ITEM_ID_RANGE", &dwMin, &dwMax))
|
||||
{
|
||||
sys_err("conf.txt: Cannot find ITEM_ID_RANGE [start_item_id] [end_item_id]");
|
||||
@@ -3748,7 +3748,7 @@ bool CClientManager::InitializeLocalization()
|
||||
|
||||
bool CClientManager::__GetAdminInfo(const char *szIP, std::vector<tAdminInfo> & rAdminVec)
|
||||
{
|
||||
//szIP == NULL 일경우 모든서버에 운영자 권한을 갖는다.
|
||||
//szIP == NULL 일경우 모든서버에 운영자 권한을 갖는다.
|
||||
char szQuery[512];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"SELECT mID,mAccount,mName,mContactIP,mServerIP,mAuthority FROM gmlist WHERE mServerIP='ALL' or mServerIP='%s'",
|
||||
@@ -4312,7 +4312,7 @@ void CClientManager::SendSpareItemIDRange(CPeer* peer)
|
||||
}
|
||||
|
||||
//
|
||||
// Login Key만 맵에서 지운다.
|
||||
// Login Key만 맵에서 지운다.
|
||||
//
|
||||
void CClientManager::DeleteLoginKey(TPacketDC *data)
|
||||
{
|
||||
@@ -4425,7 +4425,7 @@ void CClientManager::EnrollInAuction (CPeer * peer, DWORD owner_id, AuctionEnrol
|
||||
sys_err ("Player id %d doesn't have item %d.", owner_id, data->get_item_id());
|
||||
return;
|
||||
}
|
||||
// 현재 시각 + 24시간 후.
|
||||
// 현재 시각 + 24시간 후.
|
||||
time_t expired_time = time(0) + 24 * 60 * 60;
|
||||
TAuctionItemInfo auctioned_item_info (item->vnum, data->get_bid_price(),
|
||||
data->get_impur_price(), owner_id, "", expired_time, data->get_item_id(), 0, data->get_empire());
|
||||
@@ -4444,7 +4444,7 @@ void CClientManager::EnrollInAuction (CPeer * peer, DWORD owner_id, AuctionEnrol
|
||||
}
|
||||
else
|
||||
{
|
||||
// 아이템 케시를 Auction에 등록 했으니 ClientManager에서는 뺀다.
|
||||
// 아이템 케시를 Auction에 등록 했으니 ClientManager에서는 뺀다.
|
||||
TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(item->owner);
|
||||
|
||||
if (it != m_map_pkItemCacheSetPtr.end())
|
||||
@@ -4497,7 +4497,7 @@ void CClientManager::EnrollInSale (CPeer * peer, DWORD owner_id, AuctionEnrollSa
|
||||
sys_err ("Player id %d doesn't have item %d.", owner_id, data->get_item_id());
|
||||
return;
|
||||
}
|
||||
// 현재 시각 + 24시간 후.
|
||||
// 현재 시각 + 24시간 후.
|
||||
time_t expired_time = time(0) + 24 * 60 * 60;
|
||||
TSaleItemInfo sold_item_info (item->vnum, data->get_sale_price(),
|
||||
owner_id, player->name, data->get_item_id(), data->get_wisher_id());
|
||||
@@ -4516,7 +4516,7 @@ void CClientManager::EnrollInSale (CPeer * peer, DWORD owner_id, AuctionEnrollSa
|
||||
}
|
||||
else
|
||||
{
|
||||
// 아이템 케시를 Auction에 등록 했으니 ClientManager에서는 뺀다.
|
||||
// 아이템 케시를 Auction에 등록 했으니 ClientManager에서는 뺀다.
|
||||
TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(item->owner);
|
||||
|
||||
if (it != m_map_pkItemCacheSetPtr.end())
|
||||
@@ -4556,7 +4556,7 @@ void CClientManager::EnrollInWish (CPeer * peer, DWORD wisher_id, AuctionEnrollW
|
||||
CPlayerTableCache* player_cache = it->second;
|
||||
TPlayerTable* player = player_cache->Get(false);
|
||||
|
||||
// 현재 시각 + 24시간 후.
|
||||
// 현재 시각 + 24시간 후.
|
||||
time_t expired_time = time(0) + 24 * 60 * 60;
|
||||
TWishItemInfo wished_item_info (data->get_item_num(), data->get_wish_price(), wisher_id, player->name, expired_time, data->get_empire());
|
||||
|
||||
@@ -4923,11 +4923,11 @@ void CClientManager::AuctionDeleteSaleItem (CPeer * peer, DWORD actor_id, DWORD
|
||||
AuctionManager::instance().DeleteSaleItem (actor_id, item_id);
|
||||
}
|
||||
|
||||
// ReBid는 이전 입찰금액에 더해서 입찰한다.
|
||||
// ReBid에선 data->bid_price가 이전 입찰가에 더해져서
|
||||
// 그 금액으로 rebid하는 것.
|
||||
// 이렇게 한 이유는 rebid에 실패 했을 때,
|
||||
// 유저의 호주머니에서 뺀 돈을 돌려주기 편하게 하기 위함이다.
|
||||
// ReBid는 이전 입찰금액에 더해서 입찰한다.
|
||||
// ReBid에선 data->bid_price가 이전 입찰가에 더해져서
|
||||
// 그 금액으로 rebid하는 것.
|
||||
// 이렇게 한 이유는 rebid에 실패 했을 때,
|
||||
// 유저의 호주머니에서 뺀 돈을 돌려주기 편하게 하기 위함이다.
|
||||
|
||||
void CClientManager::AuctionReBid (CPeer * peer, DWORD bidder_id, AuctionBidInfo* data)
|
||||
{
|
||||
@@ -4952,14 +4952,14 @@ void CClientManager::AuctionReBid (CPeer * peer, DWORD bidder_id, AuctionBidInfo
|
||||
{
|
||||
sys_log(0, "ReBid Success. bidder_id item_id %d %d", bidder_id, data->get_item_id());
|
||||
}
|
||||
// 이건 FAIL이 떠서는 안돼.
|
||||
// FAIL이 뜰 수가 없는게, MyBid에 있는 bidder_id에 대한 컨텐츠는 bidder_id만이 접근 할 수 있거든?
|
||||
// 그러므로 다른 것이 다 정상적으로 작동한다고 가정 한다면
|
||||
// 한 게임 서버 내에서 bidder_id로 MyBid를 수정한다 할 지라도, 그건 동기화 문제가 없어.
|
||||
// 다른 게임 서버에 똑같은 bidder_id를 가진 놈이 있을 수가 없으니까.
|
||||
// 그러므로 그 게임 서버에서 BidCancel 명령을 db에 날렸다는 것은,
|
||||
// 이미 그 부분에 대해서는 검사가 완벽하다는 것이야.
|
||||
// 그래도 혹시나 싶어서, 디버깅을 위해 fail 코드를 남겨둔다.
|
||||
// 이건 FAIL이 떠서는 안돼.
|
||||
// FAIL이 뜰 수가 없는게, MyBid에 있는 bidder_id에 대한 컨텐츠는 bidder_id만이 접근 할 수 있거든?
|
||||
// 그러므로 다른 것이 다 정상적으로 작동한다고 가정 한다면
|
||||
// 한 게임 서버 내에서 bidder_id로 MyBid를 수정한다 할 지라도, 그건 동기화 문제가 없어.
|
||||
// 다른 게임 서버에 똑같은 bidder_id를 가진 놈이 있을 수가 없으니까.
|
||||
// 그러므로 그 게임 서버에서 BidCancel 명령을 db에 날렸다는 것은,
|
||||
// 이미 그 부분에 대해서는 검사가 완벽하다는 것이야.
|
||||
// 그래도 혹시나 싶어서, 디버깅을 위해 fail 코드를 남겨둔다.
|
||||
if (result <= AUCTION_FAIL)
|
||||
{
|
||||
TPacketDGResultAuction enroll_result;
|
||||
@@ -4994,14 +4994,14 @@ void CClientManager::AuctionBidCancel (CPeer * peer, DWORD bidder_id, DWORD item
|
||||
{
|
||||
AuctionResult result = AuctionManager::instance().BidCancel (bidder_id, item_id);
|
||||
|
||||
// 이건 FAIL이 떠서는 안돼.
|
||||
// FAIL이 뜰 수가 없는게, MyBid에 있는 bidder_id에 대한 컨텐츠는 bidder_id만이 접근 할 수 있거든?
|
||||
// 그러므로 다른 것이 다 정상적으로 작동한다고 가정 한다면
|
||||
// 한 게임 서버 내에서 bidder_id로 MyBid를 수정한다 할 지라도, 그건 동기화 문제가 없어.
|
||||
// 다른 게임 서버에 똑같은 bidder_id를 가진 놈이 있을 수가 없으니까.
|
||||
// 그러므로 그 게임 서버에서 BidCancel 명령을 db에 날렸다는 것은,
|
||||
// 이미 그 부분에 대해서는 검사가 완벽하다는 것이야.
|
||||
// 그래도 혹시나 싶어서, 디버깅을 위해 fail 코드를 남겨둔다.
|
||||
// 이건 FAIL이 떠서는 안돼.
|
||||
// FAIL이 뜰 수가 없는게, MyBid에 있는 bidder_id에 대한 컨텐츠는 bidder_id만이 접근 할 수 있거든?
|
||||
// 그러므로 다른 것이 다 정상적으로 작동한다고 가정 한다면
|
||||
// 한 게임 서버 내에서 bidder_id로 MyBid를 수정한다 할 지라도, 그건 동기화 문제가 없어.
|
||||
// 다른 게임 서버에 똑같은 bidder_id를 가진 놈이 있을 수가 없으니까.
|
||||
// 그러므로 그 게임 서버에서 BidCancel 명령을 db에 날렸다는 것은,
|
||||
// 이미 그 부분에 대해서는 검사가 완벽하다는 것이야.
|
||||
// 그래도 혹시나 싶어서, 디버깅을 위해 fail 코드를 남겨둔다.
|
||||
if (result <= AUCTION_FAIL)
|
||||
{
|
||||
TPacketDGResultAuction enroll_result;
|
||||
|
||||
Reference in New Issue
Block a user