removed teen_packet
This commit is contained in:
@@ -665,16 +665,6 @@ enum SPECIAL_EFFECT
|
||||
SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
|
||||
} ;
|
||||
|
||||
enum ETeenFlags
|
||||
{
|
||||
TEENFLAG_NONE = 0,
|
||||
TEENFLAG_1HOUR,
|
||||
TEENFLAG_2HOUR,
|
||||
TEENFLAG_3HOUR,
|
||||
TEENFLAG_4HOUR,
|
||||
TEENFLAG_5HOUR,
|
||||
};
|
||||
|
||||
#include "item_length.h"
|
||||
|
||||
// inventory의 position을 나타내는 구조체
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
/*********************************************************************
|
||||
* date : 2007.06.07
|
||||
* file : teen_packet.h
|
||||
* author : mhh
|
||||
* description :
|
||||
*/
|
||||
|
||||
#ifndef _teen_packet_h_
|
||||
#define _teen_packet_h_
|
||||
|
||||
#define HEADER_GT_LOGIN 0x10
|
||||
#define HEADER_GT_LOGOUT 0x11
|
||||
|
||||
|
||||
#define HEADER_TG_TEEN_NOTICE 0x12
|
||||
#define HEADER_TG_FORCE_LOGOUT 0x13
|
||||
#define HEADER_TG_LOGIN_NOTICE 0x14
|
||||
|
||||
#endif /* _teen_packet_h_ */
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "common/teen_packet.h"
|
||||
#include "common/VnumHelper.h"
|
||||
|
||||
#include "char.h"
|
||||
@@ -1388,24 +1387,6 @@ void CHARACTER::Disconnect(const char * c_pszReason)
|
||||
|
||||
MessengerManager::instance().Logout(GetName());
|
||||
|
||||
if (g_TeenDesc)
|
||||
{
|
||||
int offset = 0;
|
||||
char buf[245] = {0};
|
||||
|
||||
buf[0] = HEADER_GT_LOGOUT;
|
||||
offset += 1;
|
||||
|
||||
memset(buf+offset, 0x00, 2);
|
||||
offset += 2;
|
||||
|
||||
TAccountTable &acc_table = GetDesc()->GetAccountTable();
|
||||
memcpy(buf+offset, &acc_table.id, 4);
|
||||
offset += 4;
|
||||
|
||||
g_TeenDesc->Packet(buf, offset);
|
||||
}
|
||||
|
||||
if (GetDesc())
|
||||
{
|
||||
GetDesc()->BindCharacter(NULL);
|
||||
|
||||
@@ -93,9 +93,6 @@ string g_stBlockDate = "30000705";
|
||||
|
||||
extern string g_stLocale;
|
||||
|
||||
char teen_addr[ADDRESS_MAX_LEN + 1] = {0};
|
||||
WORD teen_port = 0;
|
||||
|
||||
int SPEEDHACK_LIMIT_COUNT = 50;
|
||||
int SPEEDHACK_LIMIT_BONUS = 80;
|
||||
int g_iSyncHackLimitCount = 20; // 10 -> 20 2013 09 11 CYH
|
||||
@@ -687,24 +684,6 @@ void config_init(const string& st_localeServiceName)
|
||||
}
|
||||
}
|
||||
|
||||
TOKEN("teen_addr")
|
||||
{
|
||||
strlcpy(teen_addr, value_string, sizeof(teen_addr));
|
||||
|
||||
for (int n = 0; n < ADDRESS_MAX_LEN; ++n)
|
||||
{
|
||||
if (teen_addr[n] == ' ')
|
||||
teen_addr[n] = '\0';
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
TOKEN("teen_port")
|
||||
{
|
||||
str_to_number(teen_port, value_string);
|
||||
}
|
||||
|
||||
TOKEN("synchack_limit_count")
|
||||
{
|
||||
str_to_number(g_iSyncHackLimitCount, value_string);
|
||||
|
||||
@@ -17,9 +17,6 @@ extern WORD p2p_port;
|
||||
extern char db_addr[ADDRESS_MAX_LEN + 1];
|
||||
extern WORD db_port;
|
||||
|
||||
extern char teen_addr[ADDRESS_MAX_LEN + 1];
|
||||
extern WORD teen_port;
|
||||
|
||||
extern char passpod_addr[ADDRESS_MAX_LEN + 1];
|
||||
extern WORD passpod_port;
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ extern LPFDWATCH main_fdw;
|
||||
LPCLIENT_DESC db_clientdesc = NULL;
|
||||
LPCLIENT_DESC g_pkAuthMasterDesc = NULL;
|
||||
LPCLIENT_DESC g_NetmarbleDBDesc = NULL;
|
||||
LPCLIENT_DESC g_TeenDesc = NULL;
|
||||
LPCLIENT_DESC g_PasspodDesc = NULL;
|
||||
|
||||
static const char* GetKnownClientDescName(LPCLIENT_DESC desc) {
|
||||
@@ -27,8 +26,6 @@ static const char* GetKnownClientDescName(LPCLIENT_DESC desc) {
|
||||
return "g_pkAuthMasterDesc";
|
||||
} else if (desc == g_NetmarbleDBDesc) {
|
||||
return "g_NetmarbleDBDesc";
|
||||
} else if (desc == g_TeenDesc) {
|
||||
return "g_TeenDesc";
|
||||
} else if (desc == g_PasspodDesc) {
|
||||
return "g_PasspodDesc";
|
||||
}
|
||||
@@ -238,11 +235,6 @@ void CLIENT_DESC::SetPhase(int iPhase)
|
||||
m_pInputProcessor = NULL;
|
||||
break;
|
||||
|
||||
case PHASE_TEEN:
|
||||
m_inputTeen.SetStep(0);
|
||||
m_pInputProcessor = &m_inputTeen;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
m_iPhase = iPhase;
|
||||
|
||||
@@ -40,14 +40,12 @@ class CLIENT_DESC : public DESC
|
||||
|
||||
CInputDB m_inputDB;
|
||||
CInputP2P m_inputP2P;
|
||||
CInputTeen m_inputTeen;
|
||||
};
|
||||
|
||||
|
||||
extern LPCLIENT_DESC db_clientdesc;
|
||||
extern LPCLIENT_DESC g_pkAuthMasterDesc;
|
||||
extern LPCLIENT_DESC g_NetmarbleDBDesc;
|
||||
extern LPCLIENT_DESC g_TeenDesc;
|
||||
extern LPCLIENT_DESC g_PasspodDesc;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -14,7 +14,6 @@ enum
|
||||
INPROC_UDP,
|
||||
INPROC_P2P,
|
||||
INPROC_AUTH,
|
||||
INPROC_TEEN,
|
||||
};
|
||||
|
||||
void LoginFailure(LPDESC d, const char * c_pszStatus);
|
||||
@@ -371,23 +370,5 @@ class CInputAuth : public CInputProcessor
|
||||
|
||||
};
|
||||
|
||||
class CInputTeen : public CInputProcessor
|
||||
{
|
||||
public :
|
||||
virtual BYTE GetType() { return INPROC_TEEN; }
|
||||
|
||||
void SetStep(int step);
|
||||
|
||||
protected :
|
||||
virtual bool Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
|
||||
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData) { return 0; };
|
||||
|
||||
private:
|
||||
int m_step;
|
||||
|
||||
bool ProcessHandshake(LPDESC lpDesc, const void * c_pvOrig, size_t uiBytes, int & r_iBytesProceed);
|
||||
bool ProcessMain(LPDESC lpDesc, const void * c_pvOrig, size_t uiBytes, int & r_iBytesProceed);
|
||||
};
|
||||
|
||||
#endif /* __INC_METIN_II_GAME_INPUT_PROCESSOR__ */
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "stdafx.h"
|
||||
#include "constants.h"
|
||||
#include "common/teen_packet.h"
|
||||
#include "config.h"
|
||||
#include "utils.h"
|
||||
#include "input.h"
|
||||
@@ -774,19 +773,6 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
|
||||
}
|
||||
}
|
||||
|
||||
// 청소년 보호
|
||||
if (g_TeenDesc) // BufferedPacket 사용 금지
|
||||
{
|
||||
TPacketGTLogin p;
|
||||
|
||||
p.header = HEADER_GT_LOGIN;
|
||||
p.empty = 0;
|
||||
p.id = d->GetAccountTable().id;
|
||||
|
||||
g_TeenDesc->Packet(&p, sizeof(p));
|
||||
sys_log(0, "TEEN_SEND: (%u, %s)", d->GetAccountTable().id, ch->GetName());
|
||||
}
|
||||
|
||||
if (ch->GetHorseLevel() > 0)
|
||||
{
|
||||
DWORD pid = ch->GetPlayerID();
|
||||
|
||||
@@ -1,248 +0,0 @@
|
||||
/*********************************************************************
|
||||
* date : 2007.06.07
|
||||
* file : input_teen.cpp
|
||||
* author : mhh
|
||||
* description :
|
||||
*/
|
||||
|
||||
#define _input_teen_cpp_
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "constants.h"
|
||||
#include "common/teen_packet.h"
|
||||
#include "input.h"
|
||||
#include "desc.h"
|
||||
#include "desc_manager.h"
|
||||
#include "db.h"
|
||||
#include "protocol.h"
|
||||
#include "char.h"
|
||||
#include "dev_log.h"
|
||||
|
||||
#define HANDSHAKE_XOR 0x6AB3D224
|
||||
|
||||
void CInputTeen::SetStep(int step)
|
||||
{
|
||||
m_step = step;
|
||||
}
|
||||
|
||||
bool CInputTeen::Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed)
|
||||
{
|
||||
switch (m_step)
|
||||
{
|
||||
case 0:
|
||||
return this->ProcessHandshake(lpDesc, c_pvOrig, iBytes, r_iBytesProceed);
|
||||
break;
|
||||
case 1:
|
||||
return this->ProcessMain(lpDesc, c_pvOrig, iBytes, r_iBytesProceed);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
} /* end of CInputTeen::Process() */
|
||||
|
||||
bool CInputTeen::ProcessHandshake(LPDESC lpDesc, const void * c_pvOrig, size_t uiBytes, int & r_iBytesProceed)
|
||||
{
|
||||
const char *c_pData = (const char*) c_pvOrig;
|
||||
size_t packet_len = sizeof(DWORD);
|
||||
|
||||
if (uiBytes < packet_len)
|
||||
return false;
|
||||
|
||||
DWORD handshake = decode_4bytes(c_pData);
|
||||
|
||||
c_pData += packet_len;
|
||||
m_iBufferLeft -= packet_len;
|
||||
r_iBytesProceed += packet_len;
|
||||
|
||||
this->SetStep(1);
|
||||
|
||||
char buf[256];
|
||||
*((DWORD *) buf) = handshake ^ HANDSHAKE_XOR;
|
||||
lpDesc->Packet(buf, sizeof(DWORD));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static int __packet_len(BYTE header)
|
||||
{
|
||||
const int header_size = sizeof(BYTE) + sizeof(WORD);
|
||||
|
||||
switch (header)
|
||||
{
|
||||
case HEADER_TG_TEEN_NOTICE: return (header_size + LOGIN_MAX_LEN + 4);
|
||||
case HEADER_TG_FORCE_LOGOUT: return (header_size + LOGIN_MAX_LEN);
|
||||
case HEADER_TG_LOGIN_NOTICE: return (header_size + LOGIN_MAX_LEN + 4 + 4);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void __proc_teen_notice(char *login, int hour)
|
||||
{
|
||||
LPDESC desc = DESC_MANAGER::instance().FindByLoginName(login);
|
||||
if (NULL==desc) return;
|
||||
|
||||
LPCHARACTER ch = desc->GetCharacter();
|
||||
if (NULL==ch) return;
|
||||
|
||||
switch (hour)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
SET_OVER_TIME(ch, OT_NONE);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
{
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 온라인 시간이 이미 %d시간이 지났습니다."), hour);
|
||||
SET_OVER_TIME(ch, OT_NONE);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 온라인 시간이 이미 %d시간이 되었습니다,"), hour);
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("조속히 접속을 종료하신 후 건강을 위해 휴식을 취해주시기바랍니다."));
|
||||
SET_OVER_TIME(ch, OT_3HOUR);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신은 이미 게임 피로 상태에 들어섰으며,"));
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("게임 내의 수익이 정상치의 50%로 하향됩니다."));
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 건강을 위해 조속히 접속을 종료하시고"));
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("휴식 및 학업에 열중해주십시오."));
|
||||
SET_OVER_TIME(ch, OT_3HOUR);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신은 이미 온전하지 못한 게임 시간에 들어섰습니다."));
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("건강을 위해 조속히 접속을 종료하신 후 휴식을 취해주십시오,"));
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("그렇지 않으면 건강 상에 피해를 입을 수 있으며 게임 내의 수치는 0이 됩니다."));
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("누적 오프라인 시간이 5시간이 되면 정상으로 돌아옵니다."));
|
||||
SET_OVER_TIME(ch, OT_5HOUR);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void __sec_to_timestring(int sec, char *buf, size_t buflen)
|
||||
{
|
||||
int hour = (sec/60)/60;
|
||||
int min = (sec/60);
|
||||
|
||||
if (hour>0)
|
||||
snprintf(buf, buflen, LC_TEXT("%d시간"), hour);
|
||||
else
|
||||
snprintf(buf, buflen, LC_TEXT("%d분"), min);
|
||||
}
|
||||
|
||||
static void __proc_login_notice(char *login, int on_time, int off_time)
|
||||
{
|
||||
//{ check player's name
|
||||
LPDESC desc = DESC_MANAGER::instance().FindByLoginName(login);
|
||||
if (NULL==desc) return;
|
||||
|
||||
LPCHARACTER ch = desc->GetCharacter();
|
||||
if (NULL==ch) return;
|
||||
//} check player's name
|
||||
|
||||
char on_time_string[64];
|
||||
char off_time_string[64];
|
||||
|
||||
__sec_to_timestring(on_time, on_time_string, sizeof(on_time_string));
|
||||
__sec_to_timestring(off_time, off_time_string, sizeof(off_time_string));
|
||||
|
||||
if (0==on_time)
|
||||
{
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 오프라인 시간은 %s입니다."), off_time_string);
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 온라인 시간은 0이 되었습니다. 100% 효과를 얻으실 수 있습니다."));
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 오프라인 시간은 %s이며, 누적 온라인 시간은 %s입니다."),
|
||||
off_time_string, on_time_string);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void __input_teen(BYTE header, WORD desc_num, char *body)
|
||||
{
|
||||
switch (header)
|
||||
{
|
||||
case HEADER_TG_FORCE_LOGOUT:
|
||||
{
|
||||
char *data = body;
|
||||
char login[LOGIN_MAX_LEN+1] = {0};
|
||||
memcpy(login, data, LOGIN_MAX_LEN);
|
||||
data += LOGIN_MAX_LEN;
|
||||
LPDESC d = DESC_MANAGER::instance().FindByLoginName(login);
|
||||
|
||||
if (NULL==d)
|
||||
return;
|
||||
|
||||
d->SetPhase(PHASE_CLOSE);
|
||||
}
|
||||
break;
|
||||
case HEADER_TG_TEEN_NOTICE:
|
||||
{
|
||||
char *data = body;
|
||||
char login[LOGIN_MAX_LEN+1] = {0};
|
||||
memcpy(login, data, LOGIN_MAX_LEN);
|
||||
data += LOGIN_MAX_LEN;
|
||||
int hour = decode_4bytes(data);
|
||||
data += 4;
|
||||
|
||||
__proc_teen_notice(login, hour);
|
||||
}
|
||||
break;
|
||||
case HEADER_TG_LOGIN_NOTICE:
|
||||
{
|
||||
char *data = body;
|
||||
char login[LOGIN_MAX_LEN+1] = {0};
|
||||
memcpy(login, data, LOGIN_MAX_LEN);
|
||||
data += LOGIN_MAX_LEN;
|
||||
int on_time = decode_4bytes(data);
|
||||
data += 4;
|
||||
int off_time = decode_4bytes(data);
|
||||
data += 4;
|
||||
|
||||
__proc_login_notice(login, on_time, off_time);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool CInputTeen::ProcessMain(LPDESC lpDesc, const void * c_pvOrig, size_t uiBytes, int & r_iBytesProceed)
|
||||
{
|
||||
const char *c_pData = (const char*) c_pvOrig;
|
||||
const size_t header_size = sizeof(BYTE) + sizeof(WORD);
|
||||
|
||||
if (uiBytes < header_size)
|
||||
return false;
|
||||
|
||||
for (m_iBufferLeft = uiBytes; m_iBufferLeft > 0;)
|
||||
{
|
||||
BYTE header = decode_byte(c_pData);
|
||||
WORD desc_num = decode_2bytes(c_pData+sizeof(BYTE));
|
||||
char *body = (char*) c_pData + header_size;
|
||||
|
||||
int packet_len = __packet_len(header);
|
||||
|
||||
if (m_iBufferLeft < packet_len)
|
||||
return true;
|
||||
|
||||
c_pData += packet_len;
|
||||
m_iBufferLeft -= packet_len;
|
||||
r_iBytesProceed += packet_len;
|
||||
|
||||
__input_teen(header, desc_num, body);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -797,18 +797,14 @@ int start(int argc, char **argv)
|
||||
fprintf(stderr, "MasterAuth %d", LC_GetLocalType());
|
||||
}
|
||||
}
|
||||
/* game server to teen server */
|
||||
else
|
||||
{
|
||||
if (teen_addr[0] && teen_port)
|
||||
g_TeenDesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, teen_addr, teen_port, PHASE_TEEN, true);
|
||||
|
||||
extern unsigned int g_uiSpamBlockDuration;
|
||||
extern unsigned int g_uiSpamBlockScore;
|
||||
extern unsigned int g_uiSpamReloadCycle;
|
||||
|
||||
sys_log(0, "SPAM_CONFIG: duration %u score %u reload cycle %u\n",
|
||||
g_uiSpamBlockDuration, g_uiSpamBlockScore, g_uiSpamReloadCycle);
|
||||
g_uiSpamBlockDuration, g_uiSpamBlockScore, g_uiSpamReloadCycle);
|
||||
|
||||
extern void LoadSpamDB();
|
||||
LoadSpamDB();
|
||||
@@ -1026,21 +1022,6 @@ int io_loop(LPFDWATCH fdw)
|
||||
{
|
||||
d->SetPhase(PHASE_CLOSE);
|
||||
}
|
||||
else if (g_TeenDesc==d)
|
||||
{
|
||||
int buf_size = buffer_size(d->GetOutputBuffer());
|
||||
int sock_buf_size = fdwatch_get_buffer_size(fdw, d->GetSocket());
|
||||
|
||||
int ret = d->ProcessOutput();
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
d->SetPhase(PHASE_CLOSE);
|
||||
}
|
||||
|
||||
if (buf_size)
|
||||
sys_log(0, "TEEN::Send(size %d sock_buf %d ret %d)", buf_size, sock_buf_size, ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case FDW_EOF:
|
||||
|
||||
@@ -843,7 +843,6 @@ enum EPhase
|
||||
PHASE_DBCLIENT,
|
||||
PHASE_P2P,
|
||||
PHASE_AUTH,
|
||||
PHASE_TEEN,
|
||||
PHASE_PASSPOD,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user