forked from metin2/server
WIP: rewrite the network stack to use libevent
This commit is contained in:
@ -2047,7 +2047,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20>ǰ<EFBFBD> <20><> <20>←<EFBFBD><EFBFA9><EFBFBD>ҋ<EFBFBD>
|
||||
// <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20>ǰ<EFBFBD> <20><> <20>←<EFBFBD><EFBFA9><EFBFBD><EFBFBD>??
|
||||
PointChange(POINT_SP, -GetSP());
|
||||
dam -= iSP * 100 / MAX(GetPoint(POINT_MANASHIELD), 1);
|
||||
}
|
||||
@ -3132,7 +3132,7 @@ class CFuncShoot
|
||||
break;
|
||||
}
|
||||
|
||||
m_bSucceed = TRUE;
|
||||
m_bSucceed = true;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2282,7 +2282,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_HP, item->GetValue(0) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
|
||||
EffectPacket(SE_HPUP_RED);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2292,7 +2292,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_SP, item->GetValue(1) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
|
||||
EffectPacket(SE_SPUP_BLUE);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2302,7 +2302,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_HP, item->GetValue(3) * GetMaxHP() / 100);
|
||||
EffectPacket(SE_HPUP_RED);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2312,7 +2312,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_SP, item->GetValue(4) * GetMaxSP() / 100);
|
||||
EffectPacket(SE_SPUP_BLUE);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4133,7 +4133,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_HP, item->GetValue(0) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
|
||||
EffectPacket(SE_HPUP_RED);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4143,7 +4143,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_SP, item->GetValue(1) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
|
||||
EffectPacket(SE_SPUP_BLUE);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4153,7 +4153,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_HP, item->GetValue(3) * GetMaxHP() / 100);
|
||||
EffectPacket(SE_HPUP_RED);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4163,7 +4163,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
|
||||
{
|
||||
PointChange(POINT_SP, item->GetValue(4) * GetMaxSP() / 100);
|
||||
EffectPacket(SE_SPUP_BLUE);
|
||||
used = TRUE;
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,6 @@ void DESC::Initialize()
|
||||
memset( &m_accountTable, 0, sizeof(m_accountTable) );
|
||||
|
||||
memset( &m_SockAddr, 0, sizeof(m_SockAddr) );
|
||||
memset( &m_UDPSockAddr, 0, sizeof(m_UDPSockAddr) );
|
||||
|
||||
m_pLogFile = NULL;
|
||||
|
||||
@ -582,19 +581,6 @@ void DESC::BindAccountTable(TAccountTable * pAccountTable)
|
||||
DESC_MANAGER::instance().ConnectAccount(m_accountTable.login, this);
|
||||
}
|
||||
|
||||
void DESC::UDPGrant(const struct sockaddr_in & c_rSockAddr)
|
||||
{
|
||||
m_UDPSockAddr = c_rSockAddr;
|
||||
|
||||
TPacketGCBindUDP pack;
|
||||
|
||||
pack.header = HEADER_GC_BINDUDP;
|
||||
pack.addr = m_UDPSockAddr.sin_addr.s_addr;
|
||||
pack.port = m_UDPSockAddr.sin_port;
|
||||
|
||||
Packet(&pack, sizeof(TPacketGCBindUDP));
|
||||
}
|
||||
|
||||
void DESC::Log(const char * format, ...)
|
||||
{
|
||||
if (!m_pLogFile)
|
||||
|
@ -111,9 +111,6 @@ class DESC
|
||||
|
||||
const struct sockaddr_in & GetAddr() { return m_SockAddr; }
|
||||
|
||||
void UDPGrant(const struct sockaddr_in & c_rSockAddr);
|
||||
const struct sockaddr_in & GetUDPAddr() { return m_UDPSockAddr; }
|
||||
|
||||
void Log(const char * format, ...);
|
||||
|
||||
// <20>ڵ彦<DAB5><E5BDA6>ũ (<28>ð<EFBFBD> <20><><EFBFBD><EFBFBD>ȭ)
|
||||
@ -222,7 +219,6 @@ class DESC
|
||||
TAccountTable m_accountTable;
|
||||
|
||||
struct sockaddr_in m_SockAddr;
|
||||
struct sockaddr_in m_UDPSockAddr;
|
||||
|
||||
FILE * m_pLogFile;
|
||||
std::string m_stRelayName;
|
||||
|
@ -41,7 +41,7 @@ int IsValidIP(struct valid_ip* ip_table, const char *host)
|
||||
snprintf(ip_addr, sizeof(ip_addr), "%s.%d", (ip_table + i)->ip, (ip_table + i)->network + j);
|
||||
|
||||
if (!strcmp(ip_addr, host))
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
if (!j)
|
||||
break;
|
||||
@ -49,7 +49,7 @@ int IsValidIP(struct valid_ip* ip_table, const char *host)
|
||||
while (j--);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
DESC_MANAGER::DESC_MANAGER() : m_bDestroyed(false)
|
||||
|
@ -38,8 +38,8 @@ LPEVENT event_create_ex(TEVENTFUNC func, event_info_data* info, long when)
|
||||
new_event->func = func;
|
||||
new_event->info = info;
|
||||
new_event->q_el = cxx_q.Enqueue(new_event, when, thecore_heart->pulse);
|
||||
new_event->is_processing = FALSE;
|
||||
new_event->is_force_to_end = FALSE;
|
||||
new_event->is_processing = false;
|
||||
new_event->is_force_to_end = false;
|
||||
|
||||
return (new_event);
|
||||
}
|
||||
@ -60,10 +60,10 @@ void event_cancel(LPEVENT * ppevent)
|
||||
|
||||
if (event->is_processing)
|
||||
{
|
||||
event->is_force_to_end = TRUE;
|
||||
event->is_force_to_end = true;
|
||||
|
||||
if (event->q_el)
|
||||
event->q_el->bCancel = TRUE;
|
||||
event->q_el->bCancel = true;
|
||||
|
||||
*ppevent = NULL;
|
||||
return;
|
||||
@ -82,7 +82,7 @@ void event_cancel(LPEVENT * ppevent)
|
||||
return;
|
||||
}
|
||||
|
||||
event->q_el->bCancel = TRUE;
|
||||
event->q_el->bCancel = true;
|
||||
|
||||
*ppevent = NULL;
|
||||
}
|
||||
@ -92,7 +92,7 @@ void event_reset_time(LPEVENT event, long when)
|
||||
if (!event->is_processing)
|
||||
{
|
||||
if (event->q_el)
|
||||
event->q_el->bCancel = TRUE;
|
||||
event->q_el->bCancel = true;
|
||||
|
||||
event->q_el = cxx_q.Enqueue(event, when, thecore_heart->pulse);
|
||||
}
|
||||
@ -127,7 +127,7 @@ int event_process(int pulse)
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0 <20>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> event <20><> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
*/
|
||||
the_event->is_processing = TRUE;
|
||||
the_event->is_processing = true;
|
||||
|
||||
if (!the_event->info)
|
||||
{
|
||||
@ -146,7 +146,7 @@ int event_process(int pulse)
|
||||
else
|
||||
{
|
||||
the_event->q_el = cxx_q.Enqueue(the_event, new_time, pulse);
|
||||
the_event->is_processing = FALSE;
|
||||
the_event->is_processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ TQueueElement * CEventQueue::Enqueue(LPEVENT pvData, int duration, int pulse)
|
||||
pElem->pvData = pvData;
|
||||
pElem->iStartTime = pulse;
|
||||
pElem->iKey = duration + pulse;
|
||||
pElem->bCancel = FALSE;
|
||||
pElem->bCancel = false;
|
||||
|
||||
m_pq_queue.push(pElem);
|
||||
return pElem;
|
||||
|
@ -116,7 +116,7 @@ template <typename T>
|
||||
bool CGroupNode::GetValue(size_t i, const std::string & c_rstrColKey, T& tValue) const
|
||||
{
|
||||
if (i > m_map_rows.size())
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
TMapRow::const_iterator row_it = m_map_rows.begin();
|
||||
std::advance(row_it, i);
|
||||
@ -124,13 +124,13 @@ bool CGroupNode::GetValue(size_t i, const std::string & c_rstrColKey, T& tValue)
|
||||
itertype(m_map_columnNameToIndex) col_idx_it = m_map_columnNameToIndex.find(c_rstrColKey);
|
||||
if (m_map_columnNameToIndex.end() == col_idx_it)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
int index = col_idx_it->second;
|
||||
if (row_it->second.GetSize() <= index)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
return row_it->second.GetValue(index, tValue);
|
||||
@ -142,18 +142,18 @@ bool CGroupNode::GetValue(const std::string & c_rstrRowKey, const std::string &
|
||||
TMapRow::const_iterator row_it = m_map_rows.find(c_rstrRowKey);
|
||||
if (m_map_rows.end() == row_it)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
itertype(m_map_columnNameToIndex) col_idx_it = m_map_columnNameToIndex.find(c_rstrColKey);
|
||||
if (m_map_columnNameToIndex.end() == col_idx_it)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
int index = col_idx_it->second;
|
||||
if (row_it->second.GetSize() <= index)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
return row_it->second.GetValue(index, tValue);
|
||||
@ -165,12 +165,12 @@ bool CGroupNode::GetValue(const std::string & c_rstrRowKey, int index, T& tValue
|
||||
TMapRow::const_iterator row_it = m_map_rows.find(c_rstrRowKey);
|
||||
if (m_map_rows.end() == row_it)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (row_it->second.GetSize() <= index)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
return row_it->second.GetValue(index, tValue);
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ enum
|
||||
INPROC_MAIN,
|
||||
INPROC_DEAD,
|
||||
INPROC_DB,
|
||||
INPROC_UDP,
|
||||
INPROC_P2P,
|
||||
INPROC_AUTH,
|
||||
INPROC_TEEN,
|
||||
@ -297,27 +296,6 @@ protected:
|
||||
DWORD m_dwHandle;
|
||||
};
|
||||
|
||||
class CInputUDP : public CInputProcessor
|
||||
{
|
||||
public:
|
||||
CInputUDP();
|
||||
virtual bool Process(LPDESC d, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
|
||||
|
||||
virtual BYTE GetType() { return INPROC_UDP; }
|
||||
void SetSockAddr(struct sockaddr_in & rSockAddr) { m_SockAddr = rSockAddr; };
|
||||
|
||||
protected:
|
||||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
|
||||
|
||||
protected:
|
||||
void Handshake(LPDESC lpDesc, const char * c_pData);
|
||||
void StateChecker(const char * c_pData);
|
||||
|
||||
protected:
|
||||
struct sockaddr_in m_SockAddr;
|
||||
CPacketInfoUDP m_packetInfoUDP;
|
||||
};
|
||||
|
||||
class CInputP2P : public CInputProcessor
|
||||
{
|
||||
public:
|
||||
|
@ -1,194 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
#include "constants.h"
|
||||
#include "config.h"
|
||||
#include "input.h"
|
||||
#include "desc.h"
|
||||
#include "desc_manager.h"
|
||||
#include "item_manager.h"
|
||||
#include "char_manager.h"
|
||||
#include "protocol.h"
|
||||
|
||||
extern socket_t udp_socket;
|
||||
|
||||
#define HEADER_CG_STATE_CHECKER 1
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef unsigned long ServerStateChecker_Key;
|
||||
typedef unsigned long ServerStateChecker_Index;
|
||||
typedef unsigned char ServerStateChecker_State;
|
||||
|
||||
struct ServerStateChecker_RequestPacket
|
||||
{
|
||||
BYTE header;
|
||||
ServerStateChecker_Key key;
|
||||
ServerStateChecker_Index index;
|
||||
};
|
||||
|
||||
struct ServerStateChecker_ResponsePacket
|
||||
{
|
||||
BYTE header;
|
||||
ServerStateChecker_Key key;
|
||||
ServerStateChecker_Index index;
|
||||
ServerStateChecker_State state;
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
///---------------------------------------------------------
|
||||
|
||||
CPacketInfoUDP::CPacketInfoUDP()
|
||||
{
|
||||
Set(1, sizeof(ServerStateChecker_RequestPacket), "ServerStateRequest", false);
|
||||
}
|
||||
|
||||
CPacketInfoUDP::~CPacketInfoUDP()
|
||||
{
|
||||
Log("udp_packet_info.txt");
|
||||
}
|
||||
|
||||
|
||||
CInputUDP::CInputUDP()
|
||||
{
|
||||
memset( &m_SockAddr, 0, sizeof(m_SockAddr) );
|
||||
|
||||
BindPacketInfo(&m_packetInfoUDP);
|
||||
}
|
||||
|
||||
void CInputUDP::Handshake(LPDESC pDesc, const char * c_pData)
|
||||
{
|
||||
TPacketCGHandshake * pInfo = (TPacketCGHandshake *) c_pData;
|
||||
|
||||
if (pDesc->GetHandshake() == pInfo->dwHandshake)
|
||||
{
|
||||
sys_log(0, "UDP: Grant %s:%d", inet_ntoa(m_SockAddr.sin_addr), m_SockAddr.sin_port);
|
||||
pDesc->UDPGrant(m_SockAddr);
|
||||
return;
|
||||
}
|
||||
else
|
||||
sys_log(0, "UDP: Handshake differs %s", pDesc->GetHostName());
|
||||
}
|
||||
|
||||
void CInputUDP::StateChecker(const char * c_pData)
|
||||
{
|
||||
// NOTE : TCP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲٸ鼭 <20><><EFBFBD><EFBFBD> X
|
||||
/*
|
||||
struct ServerStateChecker_RequestPacket * p = (struct ServerStateChecker_RequestPacket *) c_pData;
|
||||
ServerStateChecker_ResponsePacket rp;
|
||||
|
||||
int iTotal;
|
||||
int * paiEmpireUserCount;
|
||||
int iLocal;
|
||||
|
||||
DESC_MANAGER::instance().GetUserCount(iTotal, &paiEmpireUserCount, iLocal);
|
||||
|
||||
rp.header = 1;
|
||||
rp.key = p->key;
|
||||
rp.index = p->index;
|
||||
|
||||
if (g_bNoMoreClient)
|
||||
rp.state = 0;
|
||||
else
|
||||
rp.state = iTotal > g_iFullUserCount ? 3 : iTotal > g_iBusyUserCount ? 2 : 1;
|
||||
|
||||
if (sendto(udp_socket, (const char*)&rp, sizeof(rp), 0, (const struct sockaddr *) &m_SockAddr, sizeof(m_SockAddr)) < 0)
|
||||
{
|
||||
sys_err("cannot sendto datagram socket : %s, %d", inet_ntoa(m_SockAddr.sin_addr), inet_ntoa(m_SockAddr.sin_addr));
|
||||
return;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
int CInputUDP::Analyze(LPDESC pDesc, BYTE bHeader, const char * c_pData)
|
||||
{
|
||||
switch (bHeader)
|
||||
{
|
||||
/*
|
||||
case HEADER_CG_HANDSHAKE:
|
||||
Handshake(pDesc, c_pData);
|
||||
break;
|
||||
|
||||
case HEADER_CG_STATE_CHECKER:
|
||||
StateChecker(c_pData);
|
||||
break;
|
||||
*/
|
||||
|
||||
default:
|
||||
sys_err("unknown UDP header %u", bHeader);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CInputUDP::Process(LPDESC pDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed)
|
||||
{
|
||||
/*
|
||||
const char * c_pData = static_cast<const char *> (c_pvOrig);
|
||||
|
||||
BYTE bLastHeader = 0;
|
||||
int iLastPacketLen = 0;
|
||||
int iPacketLen;
|
||||
|
||||
if (!m_pPacketInfo)
|
||||
{
|
||||
sys_err("No packet info has been binded to");
|
||||
return true;
|
||||
}
|
||||
|
||||
for (m_iBufferLeft = iBytes; m_iBufferLeft > 0;)
|
||||
{
|
||||
if (m_iBufferLeft < 5)
|
||||
return true;
|
||||
|
||||
BYTE bHeader = (BYTE) *(c_pData);
|
||||
const char * c_pszName;
|
||||
|
||||
if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName))
|
||||
{
|
||||
sys_err("UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d",
|
||||
bHeader, bLastHeader, iLastPacketLen, m_iBufferLeft);
|
||||
//printdata((BYTE *) c_pvOrig, iBytes);
|
||||
return true;
|
||||
}
|
||||
|
||||
//DWORD dwHandshake = *(DWORD *) (c_pData + 1);
|
||||
//pDesc = DESC_MANAGER::instance().FindByHandshake(dwHandshake);
|
||||
|
||||
//if (!pDesc)
|
||||
//{
|
||||
//sys_err("No desc by handshake %u", dwHandshake);
|
||||
//return true;
|
||||
//}
|
||||
|
||||
//if (m_SockAddr.sin_addr.s_addr != pDesc->GetAddr().sin_addr.s_addr)
|
||||
//{
|
||||
//sys_err("Hostname Mismatch! %s != %s", inet_ntoa(m_SockAddr.sin_addr), pDesc->GetHostName());
|
||||
//return true;
|
||||
//}
|
||||
|
||||
if (m_iBufferLeft < iPacketLen)
|
||||
return true;
|
||||
|
||||
int iExtraPacketSize = Analyze(pDesc, bHeader, c_pData);
|
||||
|
||||
if (iExtraPacketSize < 0)
|
||||
return true;
|
||||
|
||||
iPacketLen += iExtraPacketSize;
|
||||
|
||||
c_pData += iPacketLen;
|
||||
m_iBufferLeft -= iPacketLen;
|
||||
r_iBytesProceed += iPacketLen;
|
||||
|
||||
iLastPacketLen = iPacketLen;
|
||||
bLastHeader = bHeader;
|
||||
|
||||
//if (GetType() != pDesc->GetInputProcessor()->GetType())
|
||||
//return false;
|
||||
}
|
||||
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
@ -418,7 +418,7 @@ static void __LocaleService_Init_JAPAN()
|
||||
g_setQuestObjectDir.insert("locale/japan/quest/object");
|
||||
g_stLocaleFilename = "locale/japan/sjis_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_sjis;
|
||||
is_twobyte = is_twobyte_sjis;
|
||||
@ -436,7 +436,7 @@ static void __LocaleService_Init_English()
|
||||
g_setQuestObjectDir.insert("locale/english/quest/object");
|
||||
g_stLocaleFilename = "locale/english/eng_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
check_name = check_name_alphabet;
|
||||
}
|
||||
|
||||
@ -451,7 +451,7 @@ static void __LocaleService_Init_HongKong()
|
||||
g_setQuestObjectDir.insert("locale/hongkong/quest/object");
|
||||
g_stLocaleFilename = "locale/hongkong/big5_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_big5;
|
||||
is_twobyte = is_twobyte_big5;
|
||||
@ -468,7 +468,7 @@ static void __LocaleService_Init_NewCIBN()
|
||||
g_setQuestObjectDir.insert("locale/newcibn/quest/object");
|
||||
g_stLocaleFilename = "locale/newcibn/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_gb2312;
|
||||
is_twobyte = is_twobyte_gb2312;
|
||||
@ -486,7 +486,7 @@ static void __LocaleService_Init_Germany()
|
||||
g_setQuestObjectDir.insert("locale/germany/quest/object");
|
||||
g_stLocaleFilename = "locale/germany/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -503,7 +503,7 @@ static void __LocaleService_Init_Korea()
|
||||
g_setQuestObjectDir.clear();
|
||||
g_setQuestObjectDir.insert("locale/korea/quest/object");
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
exp_table = exp_table_euckr;
|
||||
}
|
||||
|
||||
@ -518,7 +518,7 @@ static void __LocaleService_Init_France()
|
||||
g_setQuestObjectDir.insert("locale/france/quest/object");
|
||||
g_stLocaleFilename = "locale/france/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -536,7 +536,7 @@ static void __LocaleService_Init_Italy()
|
||||
g_setQuestObjectDir.insert("locale/italy/quest/object");
|
||||
g_stLocaleFilename = "locale/italy/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -554,7 +554,7 @@ static void __LocaleService_Init_spain()
|
||||
g_setQuestObjectDir.insert("locale/spain/quest/object");
|
||||
g_stLocaleFilename = "locale/spain/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -572,7 +572,7 @@ static void __LocaleService_Init_greek()
|
||||
g_setQuestObjectDir.insert("locale/greek/quest/object");
|
||||
g_stLocaleFilename = "locale/greek/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -590,7 +590,7 @@ static void __LocaleService_Init_UK()
|
||||
g_setQuestObjectDir.insert("locale/uk/quest/object");
|
||||
g_stLocaleFilename = "locale/uk/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -608,7 +608,7 @@ static void __LocaleService_Init_Turkey()
|
||||
g_setQuestObjectDir.insert("locale/turkey/quest/object");
|
||||
g_stLocaleFilename = "locale/turkey/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -626,7 +626,7 @@ static void __LocaleService_Init_Poland()
|
||||
g_setQuestObjectDir.insert("locale/poland/quest/object");
|
||||
g_stLocaleFilename = "locale/poland/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -644,7 +644,7 @@ static void __LocaleService_Init_Portugal()
|
||||
g_setQuestObjectDir.insert("locale/portugal/quest/object");
|
||||
g_stLocaleFilename = "locale/portugal/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -664,7 +664,7 @@ static void __LocaleService_Init_Canada()
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
}
|
||||
|
||||
static void __LocaleService_Init_Brazil()
|
||||
@ -680,7 +680,7 @@ static void __LocaleService_Init_Brazil()
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
}
|
||||
|
||||
static void __LocaleService_Init_YMIR()
|
||||
@ -710,7 +710,7 @@ static void __LocaleService_Init_Russia()
|
||||
g_setQuestObjectDir.insert("locale/russia/quest/object");
|
||||
g_stLocaleFilename = "locale/russia/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -728,7 +728,7 @@ static void __LocaleService_Init_Denmark()
|
||||
g_setQuestObjectDir.insert("locale/denmark/quest/object");
|
||||
g_stLocaleFilename = "locale/denmark/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -746,7 +746,7 @@ static void __LocaleService_Init_Bulgaria()
|
||||
g_setQuestObjectDir.insert("locale/bulgaria/quest/object");
|
||||
g_stLocaleFilename = "locale/bulgaria/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -764,7 +764,7 @@ static void __LocaleService_Init_Croatia()
|
||||
g_setQuestObjectDir.insert("locale/croatia/quest/object");
|
||||
g_stLocaleFilename = "locale/croatia/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -782,7 +782,7 @@ static void __LocaleService_Init_Mexico()
|
||||
g_setQuestObjectDir.insert("locale/mexico/quest/object");
|
||||
g_stLocaleFilename = "locale/mexico/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -800,7 +800,7 @@ static void __LocaleService_Init_Arabia()
|
||||
g_setQuestObjectDir.insert("locale/arabia/quest/object");
|
||||
g_stLocaleFilename = "locale/arabia/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -818,7 +818,7 @@ static void __LocaleService_Init_Czech()
|
||||
g_setQuestObjectDir.insert("locale/czech/quest/object");
|
||||
g_stLocaleFilename = "locale/czech/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -836,7 +836,7 @@ static void __LocaleService_Init_Hungary()
|
||||
g_setQuestObjectDir.insert("locale/hungary/quest/object");
|
||||
g_stLocaleFilename = "locale/hungary/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -854,7 +854,7 @@ static void __LocaleService_Init_Romania()
|
||||
g_setQuestObjectDir.insert("locale/romania/quest/object");
|
||||
g_stLocaleFilename = "locale/romania/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -872,7 +872,7 @@ static void __LocaleService_Init_Netherlands()
|
||||
g_setQuestObjectDir.insert("locale/netherlands/quest/object");
|
||||
g_stLocaleFilename = "locale/netherlands/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
@ -892,7 +892,7 @@ static void __LocaleService_Init_Singapore()
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
//exp_table = exp_table_newcibn; 2013 09 11 CYH europe <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
}
|
||||
|
||||
@ -909,7 +909,7 @@ static void __LocaleService_Init_Vietnam()
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
exp_table = exp_table_newcibn;
|
||||
|
||||
}
|
||||
@ -927,7 +927,7 @@ static void __LocaleService_Init_Thailand()
|
||||
|
||||
check_name = check_name_alphabet;
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
}
|
||||
|
||||
static void __LocaleService_Init_USA()
|
||||
@ -941,7 +941,7 @@ static void __LocaleService_Init_USA()
|
||||
g_setQuestObjectDir.insert("locale/usa/quest/object");
|
||||
g_stLocaleFilename = "locale/usa/locale_string.txt";
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
check_name = check_name_alphabet;
|
||||
}
|
||||
|
||||
@ -959,7 +959,7 @@ static void __LocaleService_Init_WE_Korea()
|
||||
g_setQuestObjectDir.clear();
|
||||
g_setQuestObjectDir.insert(g_stQuestDir + "/object");
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
PK_PROTECT_LEVEL = 15;
|
||||
}
|
||||
@ -978,7 +978,7 @@ static void __LocaleService_Init_Taiwan()
|
||||
check_name = check_name_big5;
|
||||
is_twobyte = is_twobyte_big5;
|
||||
|
||||
g_iUseLocale = TRUE;
|
||||
g_iUseLocale = true;
|
||||
|
||||
PK_PROTECT_LEVEL = 15;
|
||||
}
|
||||
|
@ -96,7 +96,6 @@ int total_bytes_written = 0;
|
||||
BYTE g_bLogLevel = 0;
|
||||
|
||||
socket_t tcp_socket = 0;
|
||||
socket_t udp_socket = 0;
|
||||
socket_t p2p_socket = 0;
|
||||
|
||||
LPFDWATCH main_fdw = NULL;
|
||||
@ -617,15 +616,6 @@ int start(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifndef __UDP_BLOCK__
|
||||
if ((udp_socket = socket_udp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET)
|
||||
{
|
||||
perror("socket_udp_bind: udp_socket");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
// if internal ip exists, p2p socket uses internal ip, if not use public ip
|
||||
//if ((p2p_socket = socket_tcp_bind(*g_szInternalIP ? g_szInternalIP : g_szPublicIP, p2p_port)) == INVALID_SOCKET)
|
||||
if ((p2p_socket = socket_tcp_bind(g_szPublicIP, p2p_port)) == INVALID_SOCKET)
|
||||
@ -635,9 +625,6 @@ int start(int argc, char **argv)
|
||||
}
|
||||
|
||||
fdwatch_add_fd(main_fdw, tcp_socket, NULL, FDW_READ, false);
|
||||
#ifndef __UDP_BLOCK__
|
||||
fdwatch_add_fd(main_fdw, udp_socket, NULL, FDW_READ, false);
|
||||
#endif
|
||||
fdwatch_add_fd(main_fdw, p2p_socket, NULL, FDW_READ, false);
|
||||
|
||||
db_clientdesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, db_addr, db_port, PHASE_DBCLIENT, true);
|
||||
@ -691,9 +678,6 @@ void destroy()
|
||||
|
||||
sys_log(0, "<shutdown> Closing sockets...");
|
||||
socket_close(tcp_socket);
|
||||
#ifndef __UDP_BLOCK__
|
||||
socket_close(udp_socket);
|
||||
#endif
|
||||
socket_close(p2p_socket);
|
||||
|
||||
sys_log(0, "<shutdown> fdwatch_delete()...");
|
||||
@ -815,28 +799,6 @@ int io_loop(LPFDWATCH fdw)
|
||||
DESC_MANAGER::instance().AcceptP2PDesc(fdw, p2p_socket);
|
||||
fdwatch_clear_event(fdw, p2p_socket, event_idx);
|
||||
}
|
||||
/*
|
||||
else if (FDW_READ == fdwatch_check_event(fdw, udp_socket, event_idx))
|
||||
{
|
||||
char buf[256];
|
||||
struct sockaddr_in cliaddr;
|
||||
socklen_t socklen = sizeof(cliaddr);
|
||||
|
||||
int iBytesRead;
|
||||
|
||||
if ((iBytesRead = socket_udp_read(udp_socket, buf, 256, (struct sockaddr *) &cliaddr, &socklen)) > 0)
|
||||
{
|
||||
static CInputUDP s_inputUDP;
|
||||
|
||||
s_inputUDP.SetSockAddr(cliaddr);
|
||||
|
||||
int iBytesProceed;
|
||||
s_inputUDP.Process(NULL, buf, iBytesRead, iBytesProceed);
|
||||
}
|
||||
|
||||
fdwatch_clear_event(fdw, udp_socket, event_idx);
|
||||
}
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,6 @@ enum
|
||||
HEADER_GC_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_
|
||||
HEADER_GC_TIME_SYNC = 0xfc,
|
||||
HEADER_GC_PHASE = 0xfd,
|
||||
HEADER_GC_BINDUDP = 0xfe,
|
||||
HEADER_GC_HANDSHAKE = 0xff,
|
||||
|
||||
HEADER_GC_CHARACTER_ADD = 1,
|
||||
@ -854,13 +853,6 @@ typedef struct packet_phase
|
||||
BYTE phase;
|
||||
} TPacketGCPhase;
|
||||
|
||||
typedef struct packet_bindudp
|
||||
{
|
||||
BYTE header;
|
||||
DWORD addr;
|
||||
WORD port;
|
||||
} TPacketGCBindUDP;
|
||||
|
||||
enum
|
||||
{
|
||||
LOGIN_FAILURE_ALREADY = 1,
|
||||
|
@ -53,12 +53,4 @@ class CPacketInfoGG : public CPacketInfo
|
||||
virtual ~CPacketInfoGG();
|
||||
};
|
||||
|
||||
/// Implemented in input_udp.cpp
|
||||
class CPacketInfoUDP : public CPacketInfo
|
||||
{
|
||||
public:
|
||||
CPacketInfoUDP();
|
||||
virtual ~CPacketInfoUDP();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -243,18 +243,18 @@ namespace quest
|
||||
|
||||
if (!npc || npc->IsPC())
|
||||
{
|
||||
lua_pushboolean(L, TRUE);
|
||||
lua_pushboolean(L, true);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (npc->GetQuestNPCID() == 0 || npc->GetQuestNPCID() == ch->GetPlayerID())
|
||||
{
|
||||
npc->SetQuestNPCID(ch->GetPlayerID());
|
||||
lua_pushboolean(L, TRUE);
|
||||
lua_pushboolean(L, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
lua_pushboolean(L, FALSE);
|
||||
lua_pushboolean(L, true);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -168,7 +168,7 @@ BOOL CTextFileLoader::SetChildNode(const char * c_szKey)
|
||||
if (!m_pcurNode)
|
||||
{
|
||||
assert(!"Node to access has not set!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (DWORD i = 0; i < m_pcurNode->ChildNodeVector.size(); ++i)
|
||||
@ -177,11 +177,11 @@ BOOL CTextFileLoader::SetChildNode(const char * c_szKey)
|
||||
if (0 == pGroupNode->strGroupName.compare(c_szKey))
|
||||
{
|
||||
m_pcurNode = pGroupNode;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::SetChildNode(const std::string & c_rstrKeyHead, DWORD dwIndex)
|
||||
@ -196,18 +196,18 @@ BOOL CTextFileLoader::SetChildNode(DWORD dwIndex)
|
||||
if (!m_pcurNode)
|
||||
{
|
||||
assert(!"Node to access has not set!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dwIndex >= m_pcurNode->ChildNodeVector.size())
|
||||
{
|
||||
assert(!"Node index to set is too large to access!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_pcurNode = m_pcurNode->ChildNodeVector[dwIndex];
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::SetParentNode()
|
||||
@ -215,30 +215,30 @@ BOOL CTextFileLoader::SetParentNode()
|
||||
if (!m_pcurNode)
|
||||
{
|
||||
assert(!"Node to access has not set!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NULL == m_pcurNode->pParentNode)
|
||||
{
|
||||
assert(!"Current group node is already top!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_pcurNode = m_pcurNode->pParentNode;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetCurrentNodeName(std::string * pstrName)
|
||||
{
|
||||
if (!m_pcurNode)
|
||||
return FALSE;
|
||||
return false;
|
||||
if (NULL == m_pcurNode->pParentNode)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
*pstrName = m_pcurNode->strGroupName;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::IsToken(const std::string & c_rstrKey)
|
||||
@ -246,7 +246,7 @@ BOOL CTextFileLoader::IsToken(const std::string & c_rstrKey)
|
||||
if (!m_pcurNode)
|
||||
{
|
||||
assert(!"Node to access has not set!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_pcurNode->LocalTokenVectorMap.end() != m_pcurNode->LocalTokenVectorMap.find(c_rstrKey);
|
||||
@ -257,95 +257,95 @@ BOOL CTextFileLoader::GetTokenVector(const std::string & c_rstrKey, TTokenVector
|
||||
if (!m_pcurNode)
|
||||
{
|
||||
assert(!"Node to access has not set!");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
TTokenVectorMap::iterator it = m_pcurNode->LocalTokenVectorMap.find(c_rstrKey);
|
||||
if (m_pcurNode->LocalTokenVectorMap.end() == it)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenVector - Failed to find the key %s [%s :: %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
*ppTokenVector = &it->second;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenBoolean(const std::string & c_rstrKey, BOOL * pData)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->empty())
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenBoolean - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL out = 0;
|
||||
str_to_number(out, pTokenVector->at(0).c_str());
|
||||
*pData = out;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenByte(const std::string & c_rstrKey, BYTE * pData)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->empty())
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenByte - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
BYTE out = 0;
|
||||
str_to_number(out, pTokenVector->at(0).c_str());
|
||||
*pData = out;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenWord(const std::string & c_rstrKey, WORD * pData)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->empty())
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenWord - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
WORD out = 0;
|
||||
str_to_number(out, pTokenVector->at(0).c_str());
|
||||
*pData = out;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenInteger(const std::string & c_rstrKey, int * pData)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->empty())
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenInteger - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
int out = 0;
|
||||
str_to_number(out, pTokenVector->at(0).c_str());
|
||||
*pData = out;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenDoubleWord(const std::string & c_rstrKey, DWORD * pData)
|
||||
@ -357,66 +357,66 @@ BOOL CTextFileLoader::GetTokenFloat(const std::string & c_rstrKey, float * pData
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->empty())
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenFloat - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
*pData = atof(pTokenVector->at(0).c_str());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenVector2(const std::string & c_rstrKey, D3DXVECTOR2 * pVector2)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 2)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenVector2 - This key should have 2 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pVector2->x = atof(pTokenVector->at(0).c_str());
|
||||
pVector2->y = atof(pTokenVector->at(1).c_str());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenVector3(const std::string & c_rstrKey, D3DXVECTOR3 * pVector3)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 3)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenVector3 - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pVector3->x = atof(pTokenVector->at(0).c_str());
|
||||
pVector3->y = atof(pTokenVector->at(1).c_str());
|
||||
pVector3->z = atof(pTokenVector->at(2).c_str());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenVector4(const std::string & c_rstrKey, D3DXVECTOR4 * pVector4)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 4)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenVector3 - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pVector4->x = atof(pTokenVector->at(0).c_str());
|
||||
@ -424,7 +424,7 @@ BOOL CTextFileLoader::GetTokenVector4(const std::string & c_rstrKey, D3DXVECTOR4
|
||||
pVector4->z = atof(pTokenVector->at(2).c_str());
|
||||
pVector4->w = atof(pTokenVector->at(3).c_str());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -437,49 +437,49 @@ BOOL CTextFileLoader::GetTokenQuaternion(const std::string & c_rstrKey, D3DXQUAT
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 4)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenVector3 - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pQ->x = atof(pTokenVector->at(0).c_str());
|
||||
pQ->y = atof(pTokenVector->at(1).c_str());
|
||||
pQ->z = atof(pTokenVector->at(2).c_str());
|
||||
pQ->w = atof(pTokenVector->at(3).c_str());
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenDirection(const std::string & c_rstrKey, D3DVECTOR * pVector)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 3)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenDirection - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pVector->x = atof(pTokenVector->at(0).c_str());
|
||||
pVector->y = atof(pTokenVector->at(1).c_str());
|
||||
pVector->z = atof(pTokenVector->at(2).c_str());
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DXCOLOR * pColor)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 4)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenColor - This key should have 4 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pColor->r = atof(pTokenVector->at(0).c_str());
|
||||
@ -487,19 +487,19 @@ BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DXCOLOR * p
|
||||
pColor->b = atof(pTokenVector->at(2).c_str());
|
||||
pColor->a = atof(pTokenVector->at(3).c_str());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DCOLORVALUE * pColor)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->size() != 4)
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenColor - This key should have 4 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
pColor->r = atof(pTokenVector->at(0).c_str());
|
||||
@ -507,23 +507,23 @@ BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DCOLORVALUE
|
||||
pColor->b = atof(pTokenVector->at(2).c_str());
|
||||
pColor->a = atof(pTokenVector->at(3).c_str());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CTextFileLoader::GetTokenString(const std::string & c_rstrKey, std::string * pString)
|
||||
{
|
||||
TTokenVector * pTokenVector;
|
||||
if (!GetTokenVector(c_rstrKey, &pTokenVector))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pTokenVector->empty())
|
||||
{
|
||||
sys_log(2, " CTextFileLoader::GetTokenString - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
*pString = pTokenVector->at(0);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ void skip_spaces(const char **string)
|
||||
|
||||
const char *one_argument(const char *argument, char *first_arg, size_t first_size)
|
||||
{
|
||||
char mark = FALSE;
|
||||
bool mark = false;
|
||||
size_t first_len = 0;
|
||||
|
||||
if (!argument || 0 == first_size)
|
||||
|
Reference in New Issue
Block a user