forked from metin2/client
remove: OpenID
This commit is contained in:
parent
fe2f7cddb3
commit
a2bac7a5f3
|
@ -262,14 +262,10 @@ class LoginWindow(ui.ScriptWindow):
|
|||
else:
|
||||
connectingIP = self.stream.GetConnectAddr()
|
||||
if connectingIP:
|
||||
if app.USE_OPENID and not app.OPENID_TEST :
|
||||
self.__RefreshServerList()
|
||||
self.__OpenServerBoard()
|
||||
else:
|
||||
self.__OpenLoginBoard()
|
||||
if IsFullBackImage():
|
||||
self.GetChild("bg1").Hide()
|
||||
self.GetChild("bg2").Show()
|
||||
self.__OpenLoginBoard()
|
||||
if IsFullBackImage():
|
||||
self.GetChild("bg1").Hide()
|
||||
self.GetChild("bg2").Show()
|
||||
|
||||
else:
|
||||
self.__RefreshServerList()
|
||||
|
@ -287,13 +283,13 @@ class LoginWindow(ui.ScriptWindow):
|
|||
|
||||
print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW "
|
||||
#
|
||||
# selectMusic이 없으면 BGM이 끊기므로 두개 다 체크한다.
|
||||
# selectMusic<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BGM<47><4D> <20><><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20>ΰ<EFBFBD> <20><> üũ<C3BC>Ѵ<EFBFBD>.
|
||||
#
|
||||
if musicInfo.loginMusic != "" and musicInfo.selectMusic != "":
|
||||
snd.FadeOutMusic("BGM/"+musicInfo.loginMusic)
|
||||
|
||||
## NOTE : idEditLine와 pwdEditLine은 이벤트가 서로 연결 되어있어서
|
||||
## Event를 강제로 초기화 해주어야만 합니다 - [levites]
|
||||
## NOTE : idEditLine<EFBFBD><EFBFBD> pwdEditLine<6E><65> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>־
|
||||
## Event<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD>־<EFBFBD>߸<EFBFBD> <20>մϴ<D5B4> - [levites]
|
||||
self.idEditLine.SetTabEvent(0)
|
||||
self.idEditLine.SetReturnEvent(0)
|
||||
self.pwdEditLine.SetReturnEvent(0)
|
||||
|
@ -393,11 +389,11 @@ class LoginWindow(ui.ScriptWindow):
|
|||
|
||||
def SetPasswordEditLineFocus(self):
|
||||
if localeInfo.IsEUROPE():
|
||||
if self.idEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨
|
||||
if self.idEditLine != None: #0000862: [M2EU] <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD>â <20>˾<EFBFBD> <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> None <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
self.idEditLine.SetText("")
|
||||
self.idEditLine.SetFocus() #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 아이디로 포커스가 가게 만든다
|
||||
self.idEditLine.SetFocus() #0000685: [M2EU] <EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>/<2F><>й<EFBFBD>ȣ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5> <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if self.pwdEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨
|
||||
if self.pwdEditLine != None: #0000862: [M2EU] <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD>â <20>˾<EFBFBD> <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> None <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
self.pwdEditLine.SetText("")
|
||||
else:
|
||||
if self.pwdEditLine != None:
|
||||
|
@ -455,7 +451,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error
|
||||
|
||||
|
||||
#0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 패스워드로 포커스가 가게 만든다
|
||||
#0000685: [M2EU] <EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>/<2F><>й<EFBFBD>ȣ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus)
|
||||
|
||||
if app.loggined:
|
||||
|
@ -703,18 +699,18 @@ class LoginWindow(ui.ScriptWindow):
|
|||
execfile(loginInfoFileName, loginInfo)
|
||||
except IOError:
|
||||
print(\
|
||||
"자동 로그인을 하시려면" + loginInfoFileName + "파일을 작성해주세요\n"\
|
||||
"<EFBFBD>ڵ<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> <20>Ͻ÷<CFBD><C3B7><EFBFBD>" + loginInfoFileName + "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>\n"\
|
||||
"\n"\
|
||||
"내용:\n"\
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:\n"\
|
||||
"================================================================\n"\
|
||||
"addr=주소\n"\
|
||||
"port=포트\n"\
|
||||
"id=아이디\n"\
|
||||
"pwd=비밀번호\n"\
|
||||
"slot=캐릭터 선택 인덱스 (없거나 -1이면 자동 선택 안함)\n"\
|
||||
"autoLogin=자동 접속 여부\n"
|
||||
"autoSelect=자동 접속 여부\n"
|
||||
"locale=(ymir) LC_Ymir 일경우 ymir로 작동. 지정하지 않으면 korea로 작동\n"
|
||||
"addr=<EFBFBD>ּ<EFBFBD>\n"\
|
||||
"port=<EFBFBD><EFBFBD>Ʈ\n"\
|
||||
"id=<EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>\n"\
|
||||
"pwd=<EFBFBD><EFBFBD>й<EFBFBD>ȣ\n"\
|
||||
"slot=ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> (<28><><EFBFBD>ų<EFBFBD> -1<≯<EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)\n"\
|
||||
"autoLogin=<EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>\n"
|
||||
"autoSelect=<EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>\n"
|
||||
"locale=(ymir) LC_Ymir <EFBFBD>ϰ<EFBFBD><EFBFBD> ymir<69><72> <20>۵<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> korea<65><61> <20>۵<EFBFBD>\n"
|
||||
);
|
||||
|
||||
id=loginInfo.get("id", "")
|
||||
|
@ -738,7 +734,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
self.__SetServerInfo(locale.CHANNEL_TEST_SERVER)
|
||||
except:
|
||||
import exception
|
||||
exception.Abort("LoginWindow.__LoadLoginInfo - 테스트서버 주소가 없습니다")
|
||||
exception.Abort("LoginWindow.__LoadLoginInfo - <EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּҰ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>")
|
||||
|
||||
else:
|
||||
addr=loginInfo.get("addr", "")
|
||||
|
@ -752,7 +748,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
net.SetMarkServer(addr, port)
|
||||
|
||||
if locale == "ymir" :
|
||||
net.SetServerInfo("천마 서버")
|
||||
net.SetServerInfo("õ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
||||
self.serverInfo.SetText("Y:"+addr+":"+str(port))
|
||||
else:
|
||||
net.SetServerInfo(addr+":"+str(port))
|
||||
|
@ -783,7 +779,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
self.Connect(id, pwd)
|
||||
|
||||
print "=================================================================================="
|
||||
print "자동 로그인: %s - %s:%d %s" % (loginInfoFileName, addr, port, id)
|
||||
print "<EFBFBD>ڵ<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>: %s - %s:%d %s" % (loginInfoFileName, addr, port, id)
|
||||
print "=================================================================================="
|
||||
|
||||
|
||||
|
@ -902,9 +898,9 @@ class LoginWindow(ui.ScriptWindow):
|
|||
self.stream.popupWindow.Close()
|
||||
|
||||
# CHINA_MATRIX_CARD_BUG_FIX
|
||||
## A~Z 까지 26 이내의 값이 들어있어야만 한다.
|
||||
## Python Exception Log 에서 그 이상의 값이 들어있어서 에러 방지
|
||||
## 헌데 왜 한국쪽 로그에서 이게 활용되는지는 모르겠음
|
||||
## A~Z <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 26 <20>̳<EFBFBD><CCB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>־<EFBFBD>߸<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
## Python Exception Log <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>־ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
## <EFBFBD>嵥 <20><> <20>ѱ<EFBFBD><D1B1><EFBFBD> <20>α<CEB1><D7BF><EFBFBD> <20>̰<EFBFBD> Ȱ<><C8B0>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><F0B8A3B0><EFBFBD>
|
||||
row1 = min(30, row1)
|
||||
row2 = min(30, row2)
|
||||
row3 = min(30, row3)
|
||||
|
@ -1031,7 +1027,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
if channelIndex >= 0:
|
||||
self.channelList.SelectItem(channelIndex)
|
||||
|
||||
## Show/Hide 코드에 문제가 있어서 임시 - [levites]
|
||||
## Show/Hide <EFBFBD>ڵ忡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־ <20>ӽ<EFBFBD> - [levites]
|
||||
self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)
|
||||
self.serverBoard.Show()
|
||||
self.connectBoard.Hide()
|
||||
|
@ -1265,7 +1261,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)
|
||||
return
|
||||
|
||||
# 상태가 FULL 과 같으면 진입 금지
|
||||
# <EFBFBD><EFBFBD><EFBFBD>°<EFBFBD> FULL <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if state == serverInfo.STATE_DICT[3]:
|
||||
self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)
|
||||
return
|
||||
|
@ -1277,9 +1273,9 @@ class LoginWindow(ui.ScriptWindow):
|
|||
channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
|
||||
addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
|
||||
|
||||
if "천마 서버" == serverName:
|
||||
if "õ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" == serverName:
|
||||
app.ForceSetLocale("ymir", "locale/ymir")
|
||||
elif "쾌도 서버" == serverName:
|
||||
elif "<EFBFBD>赵 <20><><EFBFBD><EFBFBD>" == serverName:
|
||||
app.ForceSetLocale("we_korea", "locale/we_korea")
|
||||
|
||||
except:
|
||||
|
@ -1294,7 +1290,7 @@ class LoginWindow(ui.ScriptWindow):
|
|||
tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
|
||||
except:
|
||||
import exception
|
||||
exception.Abort("LoginWindow.__OnClickSelectServerButton - 서버 선택 실패")
|
||||
exception.Abort("LoginWindow.__OnClickSelectServerButton - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
||||
|
||||
try:
|
||||
account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
|
||||
|
@ -1314,19 +1310,10 @@ class LoginWindow(ui.ScriptWindow):
|
|||
|
||||
except:
|
||||
import exception
|
||||
exception.Abort("LoginWindow.__OnClickSelectServerButton - 마크 정보 없음")
|
||||
|
||||
|
||||
if app.USE_OPENID and not app.OPENID_TEST :
|
||||
## 2012.07.19 OpenID : 김용욱
|
||||
# 채널 선택 화면에서 "확인"(SelectServerButton) 을 눌렀을때,
|
||||
# 로그인 화면으로 넘어가지 않고 바로 서버에 OpenID 인증키를 보내도록 수정
|
||||
self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
|
||||
self.Connect(0, 0)
|
||||
else :
|
||||
self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
|
||||
self.__OpenLoginBoard()
|
||||
exception.Abort("LoginWindow.__OnClickSelectServerButton - <20><>ũ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
||||
|
||||
self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
|
||||
self.__OpenLoginBoard()
|
||||
|
||||
def __OnClickSelectConnectButton(self):
|
||||
if IsFullBackImage():
|
||||
|
|
|
@ -521,7 +521,6 @@ const char * GetRecvHeaderName(BYTE header)
|
|||
stringList[135] = "HEADER_GC_DAMAGE_INFO";
|
||||
stringList[136] = "HEADER_GC_CHAR_ADDITIONAL_INFO";
|
||||
stringList[150] = "HEADER_GC_AUTH_SUCCESS";
|
||||
stringList[154] = "HEADER_GC_AUTH_SUCCESS_OPENID";
|
||||
stringList[0xfc] = "HEADER_GC_HANDSHAKE_OK";
|
||||
stringList[0xfd] = "HEADER_GC_PHASE";
|
||||
stringList[0xfe] = "HEADER_GC_BINDUDP";
|
||||
|
|
|
@ -10,10 +10,6 @@ extern DWORD g_adwEncryptKey[4];
|
|||
extern DWORD g_adwDecryptKey[4];
|
||||
// END_OF_CHINA_CRYPT_KEY
|
||||
|
||||
#ifdef USE_OPENID
|
||||
extern int openid_test;
|
||||
#endif
|
||||
|
||||
void CAccountConnector::SetHandler(PyObject* poHandler)
|
||||
{
|
||||
m_poHandler = poHandler;
|
||||
|
@ -141,7 +137,7 @@ bool CAccountConnector::__HandshakeState_Process()
|
|||
if (!__AnalyzePacket(HEADER_GC_PING, sizeof(TPacketGCPing), &CAccountConnector::__AuthState_RecvPing))
|
||||
return false;
|
||||
|
||||
// TODO : 차후 서버와 동일하게 가변길이 data serialize & deserialize 작업해야 한다.
|
||||
// TODO : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> data serialize & deserialize <20>۾<EFBFBD><DBBE>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys))
|
||||
return false;
|
||||
|
||||
|
@ -165,11 +161,6 @@ bool CAccountConnector::__AuthState_Process()
|
|||
if (!__AnalyzePacket(HEADER_GC_AUTH_SUCCESS, sizeof(TPacketGCAuthSuccess), &CAccountConnector::__AuthState_RecvAuthSuccess))
|
||||
return true;
|
||||
|
||||
#ifdef USE_OPENID
|
||||
if (!__AnalyzePacket(HEADER_GC_AUTH_SUCCESS_OPENID, sizeof(TPacketGCAuthSuccess), &CAccountConnector::__AuthState_RecvAuthSuccess_OpenID))
|
||||
return true;
|
||||
#endif /* USE_OPENID */
|
||||
|
||||
if (!__AnalyzePacket(HEADER_GC_LOGIN_FAILURE, sizeof(TPacketGCAuthSuccess), &CAccountConnector::__AuthState_RecvAuthFailure))
|
||||
return true;
|
||||
|
||||
|
@ -188,7 +179,7 @@ bool CAccountConnector::__AuthState_Process()
|
|||
if (!__AnalyzePacket(HEADER_GC_PANAMA_PACK, sizeof(TPacketGCPanamaPack), &CAccountConnector::__AuthState_RecvPanamaPack))
|
||||
return false;
|
||||
|
||||
// TODO : 차후 서버와 동일하게 가변길이 data serialize & deserialize 작업해야 한다.
|
||||
// TODO : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> data serialize & deserialize <20>۾<EFBFBD><DBBE>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys))
|
||||
return false;
|
||||
|
||||
|
@ -217,68 +208,6 @@ bool CAccountConnector::__AuthState_RecvPhase()
|
|||
}
|
||||
else if (kPacketPhase.phase == PHASE_AUTH)
|
||||
{
|
||||
|
||||
#ifdef USE_OPENID
|
||||
if (!openid_test)
|
||||
{
|
||||
//2012.07.19 OpenID : 김용욱
|
||||
//Ongoing : 오픈 아이디 경우-> TPacketCGLogin5
|
||||
//클라가 가지고 있는 인증키만을 서버에 보내도록.
|
||||
|
||||
//const char* tempAuthKey = "d4025bc1f752b64fe5d51ae575ec4730"; //하드코딩 길이 32
|
||||
TPacketCGLogin5 LoginPacket;
|
||||
LoginPacket.header = HEADER_CG_LOGIN5_OPENID;
|
||||
|
||||
strncpy(LoginPacket.authKey, LocaleService_GetOpenIDAuthKey(), OPENID_AUTHKEY_LEN);
|
||||
LoginPacket.authKey[OPENID_AUTHKEY_LEN] = '\0';
|
||||
|
||||
for (DWORD i = 0; i < 4; ++i)
|
||||
LoginPacket.adwClientKey[i] = g_adwEncryptKey[i];
|
||||
|
||||
if (!Send(sizeof(LoginPacket), &LoginPacket))
|
||||
{
|
||||
Tracen(" CAccountConnector::__AuthState_RecvPhase - SendLogin5 Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!SendSequence())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TPacketCGLogin3 LoginPacket;
|
||||
LoginPacket.header = HEADER_CG_LOGIN3;
|
||||
|
||||
strncpy(LoginPacket.name, m_strID.c_str(), ID_MAX_NUM);
|
||||
strncpy(LoginPacket.pwd, m_strPassword.c_str(), PASS_MAX_NUM);
|
||||
LoginPacket.name[ID_MAX_NUM] = '\0';
|
||||
LoginPacket.pwd[PASS_MAX_NUM] = '\0';
|
||||
|
||||
// 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경
|
||||
ClearLoginInfo();
|
||||
CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
|
||||
rkNetStream.ClearLoginInfo();
|
||||
|
||||
m_strPassword = "";
|
||||
|
||||
for (DWORD i = 0; i < 4; ++i)
|
||||
LoginPacket.adwClientKey[i] = g_adwEncryptKey[i];
|
||||
|
||||
if (!Send(sizeof(LoginPacket), &LoginPacket))
|
||||
{
|
||||
Tracen(" CAccountConnector::__AuthState_RecvPhase - SendLogin3 Error");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!SendSequence())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#else /* USE_OPENID */
|
||||
|
||||
TPacketCGLogin3 LoginPacket;
|
||||
LoginPacket.header = HEADER_CG_LOGIN3;
|
||||
|
||||
|
@ -287,7 +216,7 @@ bool CAccountConnector::__AuthState_RecvPhase()
|
|||
LoginPacket.name[ID_MAX_NUM] = '\0';
|
||||
LoginPacket.pwd[PASS_MAX_NUM] = '\0';
|
||||
|
||||
// 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경
|
||||
// <EFBFBD><EFBFBD>й<EFBFBD>ȣ<EFBFBD><EFBFBD> <20><DEB8> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ClearLoginInfo();
|
||||
CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
|
||||
rkNetStream.ClearLoginInfo();
|
||||
|
@ -307,7 +236,6 @@ bool CAccountConnector::__AuthState_RecvPhase()
|
|||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* USE_OPENID */
|
||||
|
||||
__AuthState_Set();
|
||||
}
|
||||
|
@ -437,37 +365,6 @@ bool CAccountConnector::__AuthState_RecvAuthSuccess()
|
|||
return true;
|
||||
}
|
||||
|
||||
#ifdef USE_OPENID
|
||||
bool CAccountConnector::__AuthState_RecvAuthSuccess_OpenID()
|
||||
{
|
||||
TPacketGCAuthSuccessOpenID kAuthSuccessOpenIDPacket;
|
||||
if (!Recv(sizeof(kAuthSuccessOpenIDPacket), &kAuthSuccessOpenIDPacket))
|
||||
return false;
|
||||
|
||||
if (!kAuthSuccessOpenIDPacket.bResult)
|
||||
{
|
||||
if (m_poHandler)
|
||||
PyCallClassMemberFunc(m_poHandler, "OnLoginFailure", Py_BuildValue("(s)", "BESAMEKEY"));
|
||||
}
|
||||
else
|
||||
{
|
||||
DWORD dwPanamaKey = kAuthSuccessOpenIDPacket.dwLoginKey ^ g_adwEncryptKey[0] ^ g_adwEncryptKey[1] ^ g_adwEncryptKey[2] ^ g_adwEncryptKey[3];
|
||||
CEterPackManager::instance().DecryptPackIV(dwPanamaKey);
|
||||
|
||||
CPythonNetworkStream & rkNet = CPythonNetworkStream::Instance();
|
||||
rkNet.SetLoginInfo(kAuthSuccessOpenIDPacket.login, "0000"); //OpenID 인증 과정에서 비밀번호는 사용되지 않는다.
|
||||
rkNet.SetLoginKey(kAuthSuccessOpenIDPacket.dwLoginKey);
|
||||
rkNet.Connect(m_strAddr.c_str(), m_iPort);
|
||||
}
|
||||
|
||||
Disconnect();
|
||||
__OfflineState_Set();
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif /* USE_OPENID */
|
||||
|
||||
|
||||
bool CAccountConnector::__AuthState_RecvAuthFailure()
|
||||
{
|
||||
TPacketGCLoginFailure packet_failure;
|
||||
|
@ -593,7 +490,7 @@ void CAccountConnector::OnConnectSuccess()
|
|||
|
||||
void CAccountConnector::OnRemoteDisconnect()
|
||||
{
|
||||
// Matrix Card Number 를 보내 놓았는데 close 되면 프로그램을 종료 한다.
|
||||
// Matrix Card Number <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ҵµ<D2B4> close <20>Ǹ<EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
if (m_isWaitKey)
|
||||
{
|
||||
if (m_poHandler)
|
||||
|
|
|
@ -52,9 +52,6 @@ class CAccountConnector : public CNetworkStream, public CSingleton<CAccountConne
|
|||
bool __AuthState_RecvPing();
|
||||
bool __AuthState_SendPong();
|
||||
bool __AuthState_RecvAuthSuccess();
|
||||
#ifdef USE_OPENID
|
||||
bool __AuthState_RecvAuthSuccess_OpenID();
|
||||
#endif /* USE_OPENID */
|
||||
bool __AuthState_RecvAuthFailure();
|
||||
bool __AuthState_RecvChinaMatrixCard();
|
||||
bool __AuthState_RecvRunupMatrixQuiz();
|
||||
|
@ -64,8 +61,8 @@ class CAccountConnector : public CNetworkStream, public CSingleton<CAccountConne
|
|||
bool __AuthState_RecvHybridCryptSDB(int VarSize);
|
||||
|
||||
bool __AnalyzePacket(UINT uHeader, UINT uPacketSize, bool (CAccountConnector::*pfnDispatchPacket)());
|
||||
// TODO: 지금 현재는 임시다. header뒤에 size 4byte가 무조건 온다는 가정임.
|
||||
// 제대로 하려면 Packet System Refactoring해야 한다.
|
||||
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>ӽô<D3BD>. header<65>ڿ<EFBFBD> size 4byte<74><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>´ٴ<C2B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD> Packet System Refactoring<6E>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
bool __AnalyzeVarSizePacket(UINT uHeader, bool (CAccountConnector::*pfnDispatchPacket)(int));
|
||||
|
||||
protected:
|
||||
|
|
|
@ -399,23 +399,3 @@ int LocaleService_StringCompareCI( LPCSTR szStringLeft, LPCSTR szStringRight, si
|
|||
return strnicmp( szStringLeft, szStringRight, sizeLength );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_OPENID
|
||||
|
||||
std::string __OPENID_AUTH_KEY_STRING__;
|
||||
int openid_test = 0;
|
||||
|
||||
void LocaleService_SetOpenIDAuthKey(const char *authKey)
|
||||
{
|
||||
__OPENID_AUTH_KEY_STRING__ = authKey;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const char* LocaleService_GetOpenIDAuthKey()
|
||||
{
|
||||
return __OPENID_AUTH_KEY_STRING__.c_str();
|
||||
}
|
||||
|
||||
#endif /* USE_OPENID */
|
|
@ -33,8 +33,3 @@ int LocaleService_GetSkillPower(unsigned level);
|
|||
void LocaleService_SetCHEONMA(bool isEnable);
|
||||
bool LocaleService_IsCHEONMA();
|
||||
// END_OF_CHEONMA
|
||||
|
||||
#ifdef USE_OPENID
|
||||
void LocaleService_SetOpenIDAuthKey(const char *authKey);
|
||||
const char* LocaleService_GetOpenIDAuthKey();
|
||||
#endif
|
|
@ -4,18 +4,18 @@
|
|||
#include "Hackshield.h"
|
||||
#include METIN2HS_INCLUDE_ANTICPXSVR
|
||||
#else
|
||||
#pragma pack(push) //기존 alignment 저장
|
||||
#pragma pack(push) //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> alignment <20><><EFBFBD><EFBFBD>
|
||||
#pragma pack(8)
|
||||
|
||||
#define ANTICPX_TRANS_BUFFER_MAX 400
|
||||
|
||||
typedef struct _AHNHS_TRANS_BUFFER
|
||||
{
|
||||
unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* 송수신 패킷의 최대 크기 */];
|
||||
unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* <EFBFBD>ۼ<EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ִ<EFBFBD> ũ<><C5A9> */];
|
||||
unsigned short nLength;
|
||||
} AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER;
|
||||
|
||||
#pragma pack(pop) // 기존 alignment 복구.
|
||||
#pragma pack(pop) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> alignment <20><><EFBFBD><EFBFBD>.
|
||||
#endif /* !USE_AHNLAB_HACKSHIELD */
|
||||
|
||||
#include "../gamelib/RaceData.h"
|
||||
|
@ -30,8 +30,8 @@ enum
|
|||
HEADER_CG_LOGIN = 1,
|
||||
HEADER_CG_ATTACK = 2,
|
||||
HEADER_CG_CHAT = 3,
|
||||
HEADER_CG_PLAYER_CREATE = 4, // 새로운 플래이어를 생성
|
||||
HEADER_CG_PLAYER_DESTROY = 5, // 플래이어를 삭제.
|
||||
HEADER_CG_PLAYER_CREATE = 4, // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20>÷<EFBFBD><C3B7>̾ <20><><EFBFBD><EFBFBD>
|
||||
HEADER_CG_PLAYER_DESTROY = 5, // <EFBFBD>÷<EFBFBD><EFBFBD>̾ <20><><EFBFBD><EFBFBD>.
|
||||
HEADER_CG_PLAYER_SELECT = 6,
|
||||
HEADER_CG_CHARACTER_MOVE = 7,
|
||||
HEADER_CG_SYNC_POSITION = 8,
|
||||
|
@ -95,8 +95,8 @@ enum
|
|||
HEADER_CG_MESSENGER = 67,
|
||||
//HEADER_BLANK68 = 68,
|
||||
HEADER_CG_MALL_CHECKOUT = 69,
|
||||
HEADER_CG_SAFEBOX_CHECKIN = 70, // 아이템을 창고에 넣는다.
|
||||
HEADER_CG_SAFEBOX_CHECKOUT = 71, // 아이템을 창고로 부터 빼온다.
|
||||
HEADER_CG_SAFEBOX_CHECKIN = 70, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||
HEADER_CG_SAFEBOX_CHECKOUT = 71, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
HEADER_CG_PARTY_INVITE = 72,
|
||||
HEADER_CG_PARTY_INVITE_ANSWER = 73,
|
||||
HEADER_CG_PARTY_REMOVE = 74,
|
||||
|
@ -144,7 +144,6 @@ enum
|
|||
HEADER_CG_GUILD_SYMBOL_CRC = 113,
|
||||
HEADER_CG_SCRIPT_SELECT_ITEM = 114,
|
||||
HEADER_CG_LOGIN4 = 115,
|
||||
HEADER_CG_LOGIN5_OPENID = 116, //OpenID : 실행시 받은 인증키를 서버에 보냄.
|
||||
|
||||
HEADER_CG_RUNUP_MATRIX_ANSWER = 201,
|
||||
HEADER_CG_NEWCIBN_PASSPOD_ANSWER = 202,
|
||||
|
@ -188,17 +187,17 @@ enum
|
|||
HEADER_GC_CHANGE_SPEED = 18,
|
||||
HEADER_GC_CHARACTER_UPDATE = 19,
|
||||
#if defined(GAIDEN)
|
||||
HEADER_GC_ITEM_DEL = 20, // 아이템 창에 추가
|
||||
HEADER_GC_ITEM_SET = 21, // 아이템 창에 추가
|
||||
HEADER_GC_ITEM_DEL = 20, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20>߰<EFBFBD>
|
||||
HEADER_GC_ITEM_SET = 21, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20>߰<EFBFBD>
|
||||
#else
|
||||
HEADER_GC_ITEM_SET = 20, // 아이템 창에 추가
|
||||
HEADER_GC_ITEM_SET2 = 21, // 아이템 창에 추가
|
||||
HEADER_GC_ITEM_SET = 20, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20>߰<EFBFBD>
|
||||
HEADER_GC_ITEM_SET2 = 21, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20>߰<EFBFBD>
|
||||
#endif
|
||||
HEADER_GC_ITEM_USE = 22, // 아이템 사용 (주위 사람들에게 보여주기 위해)
|
||||
HEADER_GC_ITEM_DROP = 23, // 아이템 버리기
|
||||
HEADER_GC_ITEM_UPDATE = 25, // 아이템 수치 업데이트
|
||||
HEADER_GC_ITEM_GROUND_ADD = 26, // 바닥에 아이템 추가
|
||||
HEADER_GC_ITEM_GROUND_DEL = 27, // 바닥에서 아이템 삭제
|
||||
HEADER_GC_ITEM_USE = 22, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>鿡<EFBFBD><E9BFA1> <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
HEADER_GC_ITEM_DROP = 23, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HEADER_GC_ITEM_UPDATE = 25, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
HEADER_GC_ITEM_GROUND_ADD = 26, // <EFBFBD>ٴڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
HEADER_GC_ITEM_GROUND_DEL = 27, // <EFBFBD>ٴڿ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_GC_QUICKSLOT_ADD = 28,
|
||||
HEADER_GC_QUICKSLOT_DEL = 29,
|
||||
HEADER_GC_QUICKSLOT_SWAP = 30,
|
||||
|
@ -331,8 +330,6 @@ enum
|
|||
HEADER_GC_HYBRIDCRYPT_SDB = 153, // SDB means Supplmentary Data Blocks
|
||||
//HYBRID CRYPT
|
||||
|
||||
HEADER_GC_AUTH_SUCCESS_OPENID = 154,
|
||||
|
||||
HEADER_GC_RUNUP_MATRIX_QUIZ = 201,
|
||||
HEADER_GC_NEWCIBN_PASSPOD_REQUEST = 202,
|
||||
HEADER_GC_NEWCIBN_PASSPOD_FAILURE = 203,
|
||||
|
@ -386,13 +383,13 @@ enum
|
|||
PLAYER_PER_ACCOUNT3 = 3,
|
||||
PLAYER_PER_ACCOUNT4 = 4,
|
||||
|
||||
PLAYER_ITEM_SLOT_MAX_NUM = 20, // 플래이어의 슬롯당 들어가는 갯수.
|
||||
PLAYER_ITEM_SLOT_MAX_NUM = 20, // <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Դ<EFBFBD> <20><><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD>.
|
||||
|
||||
QUICKSLOT_MAX_LINE = 4,
|
||||
QUICKSLOT_MAX_COUNT_PER_LINE = 8, // 클라이언트 임의 결정값
|
||||
QUICKSLOT_MAX_COUNT_PER_LINE = 8, // Ŭ<EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
QUICKSLOT_MAX_COUNT = QUICKSLOT_MAX_LINE * QUICKSLOT_MAX_COUNT_PER_LINE,
|
||||
|
||||
QUICKSLOT_MAX_NUM = 36, // 서버와 맞춰져 있는 값
|
||||
QUICKSLOT_MAX_NUM = 36, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>
|
||||
|
||||
SHOP_HOST_ITEM_MAX_NUM = 40,
|
||||
|
||||
|
@ -423,8 +420,6 @@ enum
|
|||
|
||||
WEAR_MAX_NUM = 11,
|
||||
|
||||
OPENID_AUTHKEY_LEN = 32,
|
||||
|
||||
SHOP_TAB_NAME_MAX = 32,
|
||||
SHOP_TAB_COUNT_MAX = 3,
|
||||
};
|
||||
|
@ -465,7 +460,7 @@ typedef struct packet_mark_idxlist
|
|||
BYTE header;
|
||||
DWORD bufSize;
|
||||
WORD count;
|
||||
//뒤에 size * (WORD + WORD)만큼 데이터 붙음
|
||||
//<EFBFBD>ڿ<EFBFBD> size * (WORD + WORD)<29><>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
} TPacketGCMarkIDXList;
|
||||
|
||||
typedef struct packet_mark_block
|
||||
|
@ -474,7 +469,7 @@ typedef struct packet_mark_block
|
|||
DWORD bufSize;
|
||||
BYTE imgIdx;
|
||||
DWORD count;
|
||||
// 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음
|
||||
// <EFBFBD>ڿ<EFBFBD> 64 x 48 x <20>ȼ<EFBFBD>ũ<EFBFBD><C5A9>(4<><34><EFBFBD><EFBFBD>Ʈ) = 12288<38><38>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
} TPacketGCMarkBlock;
|
||||
|
||||
typedef struct command_symbol_upload
|
||||
|
@ -543,7 +538,7 @@ typedef struct command_login
|
|||
char pwd[PASS_MAX_NUM + 1];
|
||||
} TPacketCGLogin;
|
||||
|
||||
// start - 권한 서버 접속을 위한 패킷들
|
||||
// start - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6>
|
||||
typedef struct command_login2
|
||||
{
|
||||
BYTE header;
|
||||
|
@ -559,14 +554,7 @@ typedef struct command_login3
|
|||
char pwd[PASS_MAX_NUM + 1];
|
||||
DWORD adwClientKey[4];
|
||||
} TPacketCGLogin3;
|
||||
|
||||
typedef struct command_login5
|
||||
{
|
||||
BYTE header;
|
||||
char authKey[OPENID_AUTHKEY_LEN + 1];
|
||||
DWORD adwClientKey[4];
|
||||
} TPacketCGLogin5;
|
||||
// end - 권한 서버 접속을 위한 패킷들
|
||||
// end - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6>
|
||||
|
||||
typedef struct command_direct_enter
|
||||
{
|
||||
|
@ -585,8 +573,8 @@ typedef struct command_player_select
|
|||
typedef struct command_attack
|
||||
{
|
||||
BYTE header;
|
||||
BYTE bType; // 공격 유형
|
||||
DWORD dwVictimVID; // 적 VID
|
||||
BYTE bType; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD dwVictimVID; // <EFBFBD><EFBFBD> VID
|
||||
BYTE bCRCMagicCubeProcPiece;
|
||||
BYTE bCRCMagicCubeFilePiece;
|
||||
} TPacketCGAttack;
|
||||
|
@ -1014,9 +1002,9 @@ typedef struct SShopItemTable
|
|||
DWORD vnum;
|
||||
BYTE count;
|
||||
|
||||
TItemPos pos; // PC 상점에만 이용
|
||||
DWORD price; // PC 상점에만 이용
|
||||
BYTE display_pos; // PC 상점에만 이용, 보일 위치.
|
||||
TItemPos pos; // PC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>
|
||||
DWORD price; // PC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>
|
||||
BYTE display_pos; // PC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>ġ.
|
||||
} TShopItemTable;
|
||||
|
||||
typedef struct SPacketCGMyShop
|
||||
|
@ -1116,18 +1104,18 @@ typedef struct command_script_select_item
|
|||
// From Server
|
||||
enum EPhase
|
||||
{
|
||||
PHASE_CLOSE, // 끊기는 상태 (또는 끊기 전 상태)
|
||||
PHASE_HANDSHAKE, // 악수..;;
|
||||
PHASE_LOGIN, // 로그인 중
|
||||
PHASE_SELECT, // 캐릭터 선택 화면
|
||||
PHASE_LOADING, // 선택 후 로딩 화면
|
||||
PHASE_GAME, // 게임 화면
|
||||
PHASE_DEAD, // 죽었을 때.. (게임 안에 있는 것일 수도..)
|
||||
PHASE_CLOSE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
|
||||
PHASE_HANDSHAKE, // <EFBFBD>Ǽ<EFBFBD>..;;
|
||||
PHASE_LOGIN, // <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
PHASE_SELECT, // ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȭ<><C8AD>
|
||||
PHASE_LOADING, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ε<EFBFBD> ȭ<><C8AD>
|
||||
PHASE_GAME, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD>
|
||||
PHASE_DEAD, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.. (<28><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..)
|
||||
|
||||
PHASE_DBCLIENT_CONNECTING, // 서버용
|
||||
PHASE_DBCLIENT, // 서버용
|
||||
PHASE_P2P, // 서버용
|
||||
PHASE_AUTH, // 로그인 인증 용
|
||||
PHASE_DBCLIENT_CONNECTING, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PHASE_DBCLIENT, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PHASE_P2P, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PHASE_AUTH, // <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
};
|
||||
|
||||
typedef struct packet_phase
|
||||
|
@ -1136,7 +1124,7 @@ typedef struct packet_phase
|
|||
BYTE phase;
|
||||
} TPacketGCPhase;
|
||||
|
||||
typedef struct packet_blank // 공백패킷.
|
||||
typedef struct packet_blank // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ.
|
||||
{
|
||||
BYTE header;
|
||||
} TPacketGCBlank;
|
||||
|
@ -1273,7 +1261,7 @@ enum EPKModes
|
|||
PK_MODE_MAX_NUM,
|
||||
};
|
||||
|
||||
// 2004.11.20.myevan.CRaceData::PART_MAX_NUM 사용안하게 수정 - 서버에서 사용하는것과 일치하지 않음
|
||||
// 2004.11.20.myevan.CRaceData::PART_MAX_NUM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ°Ͱ<C2B0> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
enum ECharacterEquipmentPart
|
||||
{
|
||||
CHR_EQUIPPART_ARMOR,
|
||||
|
@ -1293,7 +1281,7 @@ typedef struct packet_char_additional_info
|
|||
BYTE bEmpire;
|
||||
DWORD dwGuildID;
|
||||
DWORD dwLevel;
|
||||
short sAlignment; //선악치
|
||||
short sAlignment; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ
|
||||
BYTE bPKMode;
|
||||
DWORD dwMountVnum;
|
||||
} TPacketGCCharacterAdditionalInfo;
|
||||
|
@ -1405,14 +1393,14 @@ typedef struct packet_GlobalTime
|
|||
|
||||
enum EChatType
|
||||
{
|
||||
CHAT_TYPE_TALKING, /* 그냥 채팅 */
|
||||
CHAT_TYPE_INFO, /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */
|
||||
CHAT_TYPE_NOTICE, /* 공지사항 */
|
||||
CHAT_TYPE_PARTY, /* 파티말 */
|
||||
CHAT_TYPE_GUILD, /* 길드말 */
|
||||
CHAT_TYPE_COMMAND, /* 명령 */
|
||||
CHAT_TYPE_SHOUT, /* 외치기 */
|
||||
CHAT_TYPE_WHISPER, // 서버와는 연동되지 않는 Only Client Enum
|
||||
CHAT_TYPE_TALKING, /* <EFBFBD>׳<EFBFBD> ä<><C3A4> */
|
||||
CHAT_TYPE_INFO, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><>) */
|
||||
CHAT_TYPE_NOTICE, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_PARTY, /* <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_GUILD, /* <EFBFBD><EFBFBD>帻 */
|
||||
CHAT_TYPE_COMMAND, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_SHOUT, /* <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_WHISPER, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> Only Client Enum
|
||||
CHAT_TYPE_BIG_NOTICE,
|
||||
CHAT_TYPE_MAX_NUM,
|
||||
};
|
||||
|
@ -1426,7 +1414,7 @@ typedef struct packet_chatting
|
|||
BYTE bEmpire;
|
||||
} TPacketGCChat;
|
||||
|
||||
typedef struct packet_whisper // 가변 패킷
|
||||
typedef struct packet_whisper // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
{
|
||||
BYTE bHeader;
|
||||
WORD wSize;
|
||||
|
@ -1513,57 +1501,57 @@ enum EPointTypes
|
|||
POINT_MAX_HP, // 6
|
||||
POINT_SP, // 7
|
||||
POINT_MAX_SP, // 8
|
||||
POINT_STAMINA, // 9 스테미너
|
||||
POINT_MAX_STAMINA, // 10 최대 스테미너
|
||||
POINT_STAMINA, // 9 <EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>
|
||||
POINT_MAX_STAMINA, // 10 <EFBFBD>ִ<EFBFBD> <20><><EFBFBD>̳<D7B9>
|
||||
|
||||
POINT_GOLD, // 11
|
||||
POINT_ST, // 12 근력
|
||||
POINT_HT, // 13 체력
|
||||
POINT_DX, // 14 민첩성
|
||||
POINT_IQ, // 15 정신력
|
||||
POINT_ATT_POWER, // 16 공격력
|
||||
POINT_ATT_SPEED, // 17 공격속도
|
||||
POINT_EVADE_RATE, // 18 회피율
|
||||
POINT_MOV_SPEED, // 19 이동속도
|
||||
POINT_DEF_GRADE, // 20 방어등급
|
||||
POINT_CASTING_SPEED, // 21 주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임
|
||||
POINT_MAGIC_ATT_GRADE, // 22 마법공격력
|
||||
POINT_MAGIC_DEF_GRADE, // 23 마법방어력
|
||||
POINT_EMPIRE_POINT, // 24 제국점수
|
||||
POINT_LEVEL_STEP, // 25 한 레벨에서의 단계.. (1 2 3 될 때 보상, 4 되면 레벨 업)
|
||||
POINT_STAT, // 26 능력치 올릴 수 있는 개수
|
||||
POINT_SUB_SKILL, // 27 보조 스킬 포인트
|
||||
POINT_SKILL, // 28 액티브 스킬 포인트
|
||||
// POINT_SKILL_PASV, // 27 패시브 기술 올릴 수 있는 개수
|
||||
// POINT_SKILL_ACTIVE, // 28 액티브 스킬 포인트
|
||||
POINT_MIN_ATK, // 29 최소 파괴력
|
||||
POINT_MAX_ATK, // 30 최대 파괴력
|
||||
POINT_PLAYTIME, // 31 플레이시간
|
||||
POINT_HP_REGEN, // 32 HP 회복률
|
||||
POINT_SP_REGEN, // 33 SP 회복률
|
||||
POINT_ST, // 12 <EFBFBD>ٷ<EFBFBD>
|
||||
POINT_HT, // 13 ü<EFBFBD><EFBFBD>
|
||||
POINT_DX, // 14 <EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD>
|
||||
POINT_IQ, // 15 <EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>
|
||||
POINT_ATT_POWER, // 16 <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>
|
||||
POINT_ATT_SPEED, // 17 <EFBFBD><EFBFBD><EFBFBD>ݼӵ<EFBFBD>
|
||||
POINT_EVADE_RATE, // 18 ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_MOV_SPEED, // 19 <EFBFBD>̵<EFBFBD><EFBFBD>ӵ<EFBFBD>
|
||||
POINT_DEF_GRADE, // 20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_CASTING_SPEED, // 21 <EFBFBD>ֹ<EFBFBD><EFBFBD>ӵ<EFBFBD> (<28><>ٿ<EFBFBD>Ÿ<EFBFBD><C5B8>*100) / (100 + <20>̰<EFBFBD>) = <20><><EFBFBD><EFBFBD> <20><>ٿ<EFBFBD> Ÿ<><C5B8>
|
||||
POINT_MAGIC_ATT_GRADE, // 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>
|
||||
POINT_MAGIC_DEF_GRADE, // 23 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_EMPIRE_POINT, // 24 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_LEVEL_STEP, // 25 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܰ<EFBFBD>.. (1 2 3 <20><> <20><> <20><><EFBFBD><EFBFBD>, 4 <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
POINT_STAT, // 26 <EFBFBD>ɷ<EFBFBD>ġ <20>ø<EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_SUB_SKILL, // 27 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
|
||||
POINT_SKILL, // 28 <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
|
||||
// POINT_SKILL_PASV, // 27 <EFBFBD>нú<EFBFBD> <20><><EFBFBD> <20>ø<EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// POINT_SKILL_ACTIVE, // 28 <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
|
||||
POINT_MIN_ATK, // 29 <EFBFBD>ּ<EFBFBD> <20>ı<EFBFBD><C4B1><EFBFBD>
|
||||
POINT_MAX_ATK, // 30 <EFBFBD>ִ<EFBFBD> <20>ı<EFBFBD><C4B1><EFBFBD>
|
||||
POINT_PLAYTIME, // 31 <EFBFBD>÷<EFBFBD><EFBFBD>̽ð<EFBFBD>
|
||||
POINT_HP_REGEN, // 32 HP ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_SP_REGEN, // 33 SP ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
POINT_BOW_DISTANCE, // 34 활 사정거리 증가치 (meter)
|
||||
POINT_BOW_DISTANCE, // 34 Ȱ <20><><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>ġ (meter)
|
||||
|
||||
POINT_HP_RECOVERY, // 35 체력 회복 증가량
|
||||
POINT_SP_RECOVERY, // 36 정신력 회복 증가량
|
||||
POINT_HP_RECOVERY, // 35 ü<EFBFBD><EFBFBD> ȸ<><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_SP_RECOVERY, // 36 <EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
POINT_POISON_PCT, // 37 독 확률
|
||||
POINT_STUN_PCT, // 38 기절 확률
|
||||
POINT_SLOW_PCT, // 39 슬로우 확률
|
||||
POINT_CRITICAL_PCT, // 40 크리티컬 확률
|
||||
POINT_PENETRATE_PCT, // 41 관통타격 확률
|
||||
POINT_CURSE_PCT, // 42 저주 확률
|
||||
POINT_POISON_PCT, // 37 <EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_STUN_PCT, // 38 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_SLOW_PCT, // 39 <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> Ȯ<><C8AE>
|
||||
POINT_CRITICAL_PCT, // 40 ũ<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_PENETRATE_PCT, // 41 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_CURSE_PCT, // 42 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
|
||||
POINT_ATTBONUS_HUMAN, // 43 인간에게 강함
|
||||
POINT_ATTBONUS_ANIMAL, // 44 동물에게 데미지 % 증가
|
||||
POINT_ATTBONUS_ORC, // 45 웅귀에게 데미지 % 증가
|
||||
POINT_ATTBONUS_MILGYO, // 46 밀교에게 데미지 % 증가
|
||||
POINT_ATTBONUS_UNDEAD, // 47 시체에게 데미지 % 증가
|
||||
POINT_ATTBONUS_DEVIL, // 48 마귀(악마)에게 데미지 % 증가
|
||||
POINT_ATTBONUS_INSECT, // 49 벌레족
|
||||
POINT_ATTBONUS_FIRE, // 50 화염족
|
||||
POINT_ATTBONUS_ICE, // 51 빙설족
|
||||
POINT_ATTBONUS_DESERT, // 52 사막족
|
||||
POINT_ATTBONUS_HUMAN, // 43 <EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ANIMAL, // 44 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ORC, // 45 <EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_MILGYO, // 46 <EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_UNDEAD, // 47 <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_DEVIL, // 48 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>Ǹ<EFBFBD>)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_INSECT, // 49 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_FIRE, // 50 ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ICE, // 51 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_DESERT, // 52 <EFBFBD>縷<EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_UNUSED0, // 53 UNUSED0
|
||||
POINT_ATTBONUS_UNUSED1, // 54 UNUSED1
|
||||
POINT_ATTBONUS_UNUSED2, // 55 UNUSED2
|
||||
|
@ -1575,42 +1563,42 @@ enum EPointTypes
|
|||
POINT_ATTBONUS_UNUSED8, // 61 UNUSED8
|
||||
POINT_ATTBONUS_UNUSED9, // 62 UNUSED9
|
||||
|
||||
POINT_STEAL_HP, // 63 생명력 흡수
|
||||
POINT_STEAL_SP, // 64 정신력 흡수
|
||||
POINT_STEAL_HP, // 63 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_STEAL_SP, // 64 <EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
POINT_MANA_BURN_PCT, // 65 마나 번
|
||||
POINT_MANA_BURN_PCT, // 65 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
|
||||
/// 피해시 보너스 ///
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> ///
|
||||
|
||||
POINT_DAMAGE_SP_RECOVER, // 66 공격당할 시 정신력 회복 확률
|
||||
POINT_DAMAGE_SP_RECOVER, // 66 <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8> Ȯ<><C8AE>
|
||||
|
||||
POINT_BLOCK, // 67 블럭율
|
||||
POINT_DODGE, // 68 회피율
|
||||
POINT_BLOCK, // 67 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_DODGE, // 68 ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
POINT_RESIST_SWORD, // 69
|
||||
POINT_RESIST_TWOHAND, // 70
|
||||
POINT_RESIST_DAGGER, // 71
|
||||
POINT_RESIST_BELL, // 72
|
||||
POINT_RESIST_FAN, // 73
|
||||
POINT_RESIST_BOW, // 74 화살 저항 : 대미지 감소
|
||||
POINT_RESIST_FIRE, // 75 화염 저항 : 화염공격에 대한 대미지 감소
|
||||
POINT_RESIST_ELEC, // 76 전기 저항 : 전기공격에 대한 대미지 감소
|
||||
POINT_RESIST_MAGIC, // 77 술법 저항 : 모든술법에 대한 대미지 감소
|
||||
POINT_RESIST_WIND, // 78 바람 저항 : 바람공격에 대한 대미지 감소
|
||||
POINT_RESIST_BOW, // 74 ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_FIRE, // 75 ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : ȭ<><C8AD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_ELEC, // 76 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_MAGIC, // 77 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_WIND, // 78 <EFBFBD>ٶ<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
POINT_REFLECT_MELEE, // 79 공격 반사
|
||||
POINT_REFLECT_MELEE, // 79 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݻ<EFBFBD>
|
||||
|
||||
/// 특수 피해시 ///
|
||||
POINT_REFLECT_CURSE, // 80 저주 반사
|
||||
POINT_POISON_REDUCE, // 81 독데미지 감소
|
||||
/// Ư<EFBFBD><EFBFBD> <20><><EFBFBD>ؽ<EFBFBD> ///
|
||||
POINT_REFLECT_CURSE, // 80 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݻ<EFBFBD>
|
||||
POINT_POISON_REDUCE, // 81 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
/// 적 소멸시 ///
|
||||
POINT_KILL_SP_RECOVER, // 82 적 소멸시 MP 회복
|
||||
/// <EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8> ///
|
||||
POINT_KILL_SP_RECOVER, // 82 <EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8> MP ȸ<><C8B8>
|
||||
POINT_EXP_DOUBLE_BONUS, // 83
|
||||
POINT_GOLD_DOUBLE_BONUS, // 84
|
||||
POINT_ITEM_DROP_BONUS, // 85
|
||||
|
||||
/// 회복 관련 ///
|
||||
/// ȸ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ///
|
||||
POINT_POTION_BONUS, // 86
|
||||
POINT_KILL_HP_RECOVER, // 87
|
||||
|
||||
|
@ -1635,32 +1623,32 @@ enum EPointTypes
|
|||
POINT_STAT_RESET_COUNT = 112,
|
||||
POINT_HORSE_SKILL = 113,
|
||||
|
||||
POINT_MALL_ATTBONUS, // 114 공격력 +x%
|
||||
POINT_MALL_DEFBONUS, // 115 방어력 +x%
|
||||
POINT_MALL_EXPBONUS, // 116 경험치 +x%
|
||||
POINT_MALL_ITEMBONUS, // 117 아이템 드롭율 x/10배
|
||||
POINT_MALL_GOLDBONUS, // 118 돈 드롭율 x/10배
|
||||
POINT_MAX_HP_PCT, // 119 최대생명력 +x%
|
||||
POINT_MAX_SP_PCT, // 120 최대정신력 +x%
|
||||
POINT_MALL_ATTBONUS, // 114 <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD> +x%
|
||||
POINT_MALL_DEFBONUS, // 115 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> +x%
|
||||
POINT_MALL_EXPBONUS, // 116 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ +x%
|
||||
POINT_MALL_ITEMBONUS, // 117 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> x/10<31><30>
|
||||
POINT_MALL_GOLDBONUS, // 118 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> x/10<31><30>
|
||||
POINT_MAX_HP_PCT, // 119 <EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +x%
|
||||
POINT_MAX_SP_PCT, // 120 <EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> +x%
|
||||
|
||||
POINT_SKILL_DAMAGE_BONUS, // 121 스킬 데미지 *(100+x)%
|
||||
POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 평타 데미지 *(100+x)%
|
||||
POINT_SKILL_DAMAGE_BONUS, // 121 <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *(100+x)%
|
||||
POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *(100+x)%
|
||||
|
||||
POINT_SKILL_DEFEND_BONUS, // 123 스킬 방어 데미지
|
||||
POINT_NORMAL_HIT_DEFEND_BONUS, // 124 평타 방어 데미지
|
||||
POINT_SKILL_DEFEND_BONUS, // 123 <EFBFBD><EFBFBD>ų <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_NORMAL_HIT_DEFEND_BONUS, // 124 <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_PC_BANG_EXP_BONUS, // 125
|
||||
POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스
|
||||
POINT_PC_BANG_DROP_BONUS, // 126 PC<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ӷ<EFBFBD> <20><><EFBFBD>ʽ<EFBFBD>
|
||||
|
||||
POINT_ENERGY = 128, // 128 기력
|
||||
POINT_ENERGY = 128, // 128 <EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// 기력 ui 용.
|
||||
// 이렇게 하고 싶지 않았지만,
|
||||
// uiTaskBar에서는 affect에 접근할 수 없고,
|
||||
// 더구나 클라리언트에서는 blend_affect는 관리하지 않아,
|
||||
// 임시로 이렇게 둔다.
|
||||
POINT_ENERGY_END_TIME = 129, // 129 기력 종료 시간
|
||||
// <EFBFBD><EFBFBD><EFBFBD> ui <20><>.
|
||||
// <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// uiTaskBar<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> affect<63><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> blend_affect<63><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾ<EFBFBD>,
|
||||
// <EFBFBD>ӽ÷<EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> <20>д<EFBFBD>.
|
||||
POINT_ENERGY_END_TIME = 129, // 129 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
|
||||
|
||||
// 클라이언트 포인트
|
||||
// Ŭ<EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>Ʈ
|
||||
POINT_MIN_WEP = 200,
|
||||
POINT_MAX_WEP,
|
||||
POINT_MIN_MAGIC_WEP,
|
||||
|
@ -1668,7 +1656,7 @@ enum EPointTypes
|
|||
POINT_HIT_RATE,
|
||||
|
||||
|
||||
//POINT_MAX_NUM = 255,=>stdafx.h 로/
|
||||
//POINT_MAX_NUM = 255,=>stdafx.h <EFBFBD><EFBFBD>/
|
||||
};
|
||||
|
||||
typedef struct packet_points
|
||||
|
@ -1684,8 +1672,8 @@ typedef struct packet_point_change
|
|||
DWORD dwVID;
|
||||
BYTE Type;
|
||||
|
||||
long amount; // 바뀐 값
|
||||
long value; // 현재 값
|
||||
long amount; // <EFBFBD>ٲ<EFBFBD> <20><>
|
||||
long value; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
} TPacketGCPointChange;
|
||||
|
||||
typedef struct packet_motion
|
||||
|
@ -1723,7 +1711,7 @@ typedef struct packet_set_item
|
|||
BYTE pos;
|
||||
DWORD vnum;
|
||||
BYTE count;
|
||||
DWORD flags; // 플래그 추가
|
||||
DWORD flags; // <EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
long alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
|
||||
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
|
||||
} TPacketGCItemSet;
|
||||
|
@ -1750,8 +1738,8 @@ typedef struct packet_set_item2
|
|||
TItemPos Cell;
|
||||
DWORD vnum;
|
||||
BYTE count;
|
||||
DWORD flags; // 플래그 추가
|
||||
DWORD anti_flags; // 플래그 추가
|
||||
DWORD flags; // <EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
DWORD anti_flags; // <EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
bool highlight;
|
||||
long alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
|
||||
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
|
||||
|
@ -1832,7 +1820,7 @@ typedef struct packet_shop_start
|
|||
struct packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM];
|
||||
} TPacketGCShopStart;
|
||||
|
||||
typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴.
|
||||
typedef struct packet_shop_start_ex // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TSubPacketShopTab* shop_tabs <20><> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
||||
{
|
||||
typedef struct sub_packet_shop_tab
|
||||
{
|
||||
|
@ -1975,12 +1963,12 @@ typedef struct packet_move
|
|||
enum
|
||||
{
|
||||
QUEST_SEND_IS_BEGIN = 1 << 0,
|
||||
QUEST_SEND_TITLE = 1 << 1, // 28자 까지
|
||||
QUEST_SEND_CLOCK_NAME = 1 << 2, // 16자 까지
|
||||
QUEST_SEND_TITLE = 1 << 1, // 28<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
QUEST_SEND_CLOCK_NAME = 1 << 2, // 16<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
QUEST_SEND_CLOCK_VALUE = 1 << 3,
|
||||
QUEST_SEND_COUNTER_NAME = 1 << 4, // 16자 까지
|
||||
QUEST_SEND_COUNTER_NAME = 1 << 4, // 16<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
QUEST_SEND_COUNTER_VALUE = 1 << 5,
|
||||
QUEST_SEND_ICON_FILE = 1 << 6, // 24자 까지
|
||||
QUEST_SEND_ICON_FILE = 1 << 6, // 24<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
typedef struct packet_quest_info
|
||||
|
@ -2003,8 +1991,8 @@ typedef struct packet_attack
|
|||
{
|
||||
BYTE header;
|
||||
DWORD dwVID;
|
||||
DWORD dwVictimVID; // 적 VID
|
||||
BYTE bType; // 공격 유형
|
||||
DWORD dwVictimVID; // <EFBFBD><EFBFBD> VID
|
||||
BYTE bType; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
} TPacketGCAttack;
|
||||
|
||||
typedef struct packet_c2c
|
||||
|
@ -2074,7 +2062,7 @@ enum EPVPModes
|
|||
typedef struct packet_duel_start
|
||||
{
|
||||
BYTE header ;
|
||||
WORD wSize ; // DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4
|
||||
WORD wSize ; // DWORD<EFBFBD><EFBFBD> <20>? <20><><EFBFBD><EFBFBD> = (wSize - sizeof(TPacketGCPVPList)) / 4
|
||||
} TPacketGCDuelStart ;
|
||||
|
||||
typedef struct packet_pvp
|
||||
|
@ -2230,7 +2218,7 @@ enum
|
|||
|
||||
typedef struct packet_guild_sub_grade
|
||||
{
|
||||
char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 길드장, 길드원 등의 이름
|
||||
char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
BYTE auth_flag;
|
||||
} TPacketGCGuildSubGrade;
|
||||
|
||||
|
@ -2271,7 +2259,7 @@ enum EGuildWarState
|
|||
GUILD_WAR_ON_WAR,
|
||||
GUILD_WAR_END,
|
||||
|
||||
GUILD_WAR_DURATION = 2*60*60, // 2시간
|
||||
GUILD_WAR_DURATION = 2*60*60, // 2<EFBFBD>ð<EFBFBD>
|
||||
};
|
||||
|
||||
typedef struct packet_guild_war
|
||||
|
@ -2347,8 +2335,8 @@ typedef struct SRefineTable
|
|||
DWORD src_vnum;
|
||||
DWORD result_vnum;
|
||||
BYTE material_count;
|
||||
int cost; // 소요 비용
|
||||
int prob; // 확률
|
||||
int cost; // <EFBFBD>ҿ<EFBFBD> <20><><EFBFBD>
|
||||
int prob; // Ȯ<EFBFBD><EFBFBD>
|
||||
TMaterial materials[REFINE_MATERIAL_MAX_NUM];
|
||||
} TRefineTable;
|
||||
|
||||
|
@ -2383,17 +2371,17 @@ enum SPECIAL_EFFECT
|
|||
SE_SUCCESS,
|
||||
SE_FAIL,
|
||||
SE_FR_SUCCESS,
|
||||
SE_LEVELUP_ON_14_FOR_GERMANY, //레벨업 14일때 ( 독일전용 )
|
||||
SE_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 )
|
||||
SE_LEVELUP_ON_14_FOR_GERMANY, //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 14<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
SE_LEVELUP_UNDER_15_FOR_GERMANY,//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 15<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
SE_PERCENT_DAMAGE1,
|
||||
SE_PERCENT_DAMAGE2,
|
||||
SE_PERCENT_DAMAGE3,
|
||||
SE_AUTO_HPUP,
|
||||
SE_AUTO_SPUP,
|
||||
SE_EQUIP_RAMADAN_RING, // 초승달의 반지를 착용하는 순간에 발동하는 이펙트
|
||||
SE_EQUIP_HALLOWEEN_CANDY, // 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트
|
||||
SE_EQUIP_HAPPINESS_RING, // 크리스마스 행복의 반지를 착용하는 순간에 발동하는 이펙트
|
||||
SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
|
||||
SE_EQUIP_RAMADAN_RING, // <EFBFBD>ʽ´<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD><DFB5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
SE_EQUIP_HALLOWEEN_CANDY, // <EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(-_-;)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD><DFB5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
SE_EQUIP_HAPPINESS_RING, // ũ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ູ<EFBFBD><E0BAB9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD><DFB5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
SE_EQUIP_LOVE_PENDANT, // <EFBFBD>߷<EFBFBD>Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>Ʈ(71145) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ (<28>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ƴ<EFBFBD>)
|
||||
};
|
||||
|
||||
typedef struct SPacketGCSpecialEffect
|
||||
|
@ -2472,14 +2460,6 @@ typedef struct packet_auth_success
|
|||
BYTE bResult;
|
||||
} TPacketGCAuthSuccess;
|
||||
|
||||
typedef struct packet_auth_success_openid
|
||||
{
|
||||
BYTE bHeader;
|
||||
DWORD dwLoginKey;
|
||||
BYTE bResult;
|
||||
char login[ID_MAX_NUM + 1];
|
||||
} TPacketGCAuthSuccessOpenID;
|
||||
|
||||
typedef struct packet_channel
|
||||
{
|
||||
BYTE header;
|
||||
|
@ -2696,7 +2676,7 @@ typedef struct packet_hs_check_req
|
|||
AHNHS_TRANS_BUFFER Req;
|
||||
} TPacketHSCheck;
|
||||
|
||||
//NOTE : recv/send에 공통으로 생김, bPacketData의 내용만 바뀐다.
|
||||
//NOTE : recv/send<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, bPacketData<74><61> <20><><EFBFBD>븸 <20>ٲ<EFBFBD><D9B2>.
|
||||
typedef struct packet_xtrap_verify
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -2714,7 +2694,7 @@ typedef struct packet_autoban_quiz
|
|||
// END_OF_AUTOBAN
|
||||
|
||||
#ifdef __AUCTION__
|
||||
// Argument의 용도는 cmd에 따라 다르다.
|
||||
// Argument<EFBFBD><EFBFBD> <20>뵵<EFBFBD><EBB5B5> cmd<6D><64> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD>.
|
||||
typedef struct SPacketCGAuctionCmd
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -2740,7 +2720,7 @@ typedef struct SPacketGCSpecificEffect
|
|||
char effect_file[128];
|
||||
} TPacketGCSpecificEffect;
|
||||
|
||||
// 용혼석
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||
enum EDragonSoulRefineWindowRefineType
|
||||
{
|
||||
DragonSoulRefineWindow_UPGRADE,
|
||||
|
|
|
@ -9,10 +9,6 @@ extern BOOL bVisibleNotice = true;
|
|||
extern BOOL bTestServerFlag = FALSE;
|
||||
extern int TWOHANDED_WEWAPON_ATT_SPEED_DECREASE_VALUE = 0;
|
||||
|
||||
#ifdef USE_OPENID
|
||||
extern int openid_test;
|
||||
#endif
|
||||
|
||||
PyObject* appShowWebPage(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char* szWebPage;
|
||||
|
@ -1356,7 +1352,7 @@ void initapp()
|
|||
PyModule_AddIntConstant(poModule, "VK_DELETE", VK_DELETE);
|
||||
|
||||
PyModule_AddIntConstant(poModule, "DIK_ESCAPE", DIK_ESCAPE);
|
||||
PyModule_AddIntConstant(poModule, "DIK_ESC", DIK_ESCAPE); // ÆíÀǸ¦ À§ÇØ
|
||||
PyModule_AddIntConstant(poModule, "DIK_ESC", DIK_ESCAPE); // <EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
PyModule_AddIntConstant(poModule, "DIK_1", DIK_1);
|
||||
PyModule_AddIntConstant(poModule, "DIK_2", DIK_2);
|
||||
PyModule_AddIntConstant(poModule, "DIK_3", DIK_3);
|
||||
|
@ -1516,15 +1512,4 @@ void initapp()
|
|||
#else
|
||||
PyModule_AddIntConstant(poModule, "ENABLE_NEW_EQUIPMENT_SYSTEM", 0);
|
||||
#endif
|
||||
|
||||
#ifdef USE_OPENID
|
||||
PyModule_AddIntConstant(poModule, "USE_OPENID", 1);
|
||||
if (openid_test)
|
||||
PyModule_AddIntConstant(poModule, "OPENID_TEST", 1);
|
||||
else
|
||||
PyModule_AddIntConstant(poModule, "OPENID_TEST", 0);
|
||||
#else
|
||||
PyModule_AddIntConstant(poModule, "USE_OPENID", 0);
|
||||
PyModule_AddIntConstant(poModule, "OPENID_TEST", 0);
|
||||
#endif /* USE_OPENID */
|
||||
}
|
||||
|
|
|
@ -150,7 +150,6 @@ class CMainPacketHeaderMap : public CNetworkPacketHeaderMap
|
|||
Set(HEADER_GC_LOGIN_KEY, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCLoginKey), STATIC_SIZE_PACKET));
|
||||
|
||||
Set(HEADER_GC_AUTH_SUCCESS, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCAuthSuccess), STATIC_SIZE_PACKET));
|
||||
Set(HEADER_GC_AUTH_SUCCESS_OPENID, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCAuthSuccessOpenID), STATIC_SIZE_PACKET));
|
||||
Set(HEADER_GC_CHANNEL, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCChannel), STATIC_SIZE_PACKET));
|
||||
Set(HEADER_GC_VIEW_EQUIP, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCViewEquip), STATIC_SIZE_PACKET));
|
||||
Set(HEADER_GC_LAND_LIST, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCLandList), DYNAMIC_SIZE_PACKET));
|
||||
|
@ -239,7 +238,7 @@ void CPythonNetworkStream::AbsoluteExitApplication()
|
|||
|
||||
bool CPythonNetworkStream::__IsNotPing()
|
||||
{
|
||||
// 원래는 핑이 안올때 체크이나 서버랑 정확히 맞추어야 한다.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ȿö<C8BF> üũ<C3BC>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE> <20><><EFBFBD>߾<EFBFBD><DFBE> <20>Ѵ<EFBFBD>.
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -251,7 +250,7 @@ DWORD CPythonNetworkStream::GetGuildID()
|
|||
UINT CPythonNetworkStream::UploadMark(const char * c_szImageFileName)
|
||||
{
|
||||
// MARK_BUG_FIX
|
||||
// 길드를 만든 직후는 길드 아이디가 0이다.
|
||||
// <EFBFBD><EFBFBD>带 <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ĵ<EFBFBD> <20><><EFBFBD> <20><><EFBFBD>̵<EFBFBD> 0<>̴<EFBFBD>.
|
||||
if (0 == m_dwGuildID)
|
||||
return ERROR_MARK_UPLOAD_NEED_RECONNECT;
|
||||
|
||||
|
@ -321,13 +320,13 @@ UINT CPythonNetworkStream::UploadSymbol(const char* c_szImageFileName)
|
|||
|
||||
void CPythonNetworkStream::__DownloadMark()
|
||||
{
|
||||
// 3분 안에는 다시 접속하지 않는다.
|
||||
// 3<EFBFBD><EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
DWORD curTime = ELTimer_GetMSec();
|
||||
|
||||
if (curTime < gs_nextDownloadMarkTime)
|
||||
return;
|
||||
|
||||
gs_nextDownloadMarkTime = curTime + 60000 * 3; // 3분
|
||||
gs_nextDownloadMarkTime = curTime + 60000 * 3; // 3<EFBFBD><EFBFBD>
|
||||
|
||||
CGuildMarkDownloader& rkGuildMarkDownloader = CGuildMarkDownloader::Instance();
|
||||
rkGuildMarkDownloader.Connect(m_kMarkAuth.m_kNetAddr, m_kMarkAuth.m_dwHandle, m_kMarkAuth.m_dwRandomKey);
|
||||
|
@ -593,19 +592,19 @@ bool CPythonNetworkStream::RecvPhasePacket()
|
|||
|
||||
switch (packet_phase.phase)
|
||||
{
|
||||
case PHASE_CLOSE: // 끊기는 상태 (또는 끊기 전 상태)
|
||||
case PHASE_CLOSE: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
|
||||
ClosePhase();
|
||||
break;
|
||||
|
||||
case PHASE_HANDSHAKE: // 악수..;;
|
||||
case PHASE_HANDSHAKE: // <EFBFBD>Ǽ<EFBFBD>..;;
|
||||
SetHandShakePhase();
|
||||
break;
|
||||
|
||||
case PHASE_LOGIN: // 로그인 중
|
||||
case PHASE_LOGIN: // <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
SetLoginPhase();
|
||||
break;
|
||||
|
||||
case PHASE_SELECT: // 캐릭터 선택 화면
|
||||
case PHASE_SELECT: // ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȭ<><C8AD>
|
||||
SetSelectPhase();
|
||||
|
||||
BuildProcessCRC();
|
||||
|
@ -615,15 +614,15 @@ bool CPythonNetworkStream::RecvPhasePacket()
|
|||
// END_OF_MARK_BUG_FIX
|
||||
break;
|
||||
|
||||
case PHASE_LOADING: // 선택 후 로딩 화면
|
||||
case PHASE_LOADING: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ε<EFBFBD> ȭ<><C8AD>
|
||||
SetLoadingPhase();
|
||||
break;
|
||||
|
||||
case PHASE_GAME: // 게임 화면
|
||||
case PHASE_GAME: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD>
|
||||
SetGamePhase();
|
||||
break;
|
||||
|
||||
case PHASE_DEAD: // 죽었을 때.. (게임 안에 있는 것일 수도..)
|
||||
case PHASE_DEAD: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.. (<28><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..)
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -655,7 +654,7 @@ bool CPythonNetworkStream::RecvDefaultPacket(int header)
|
|||
if (!header)
|
||||
return true;
|
||||
|
||||
TraceError("처리되지 않은 패킷 헤더 %d, state %s\n", header, m_strPhase.c_str());
|
||||
TraceError("ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD> %d, state %s\n", header, m_strPhase.c_str());
|
||||
ClearRecvBuffer();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -42,10 +42,6 @@ bool __IS_TEST_SERVER_MODE__=false;
|
|||
|
||||
extern bool SetDefaultCodePage(DWORD codePage);
|
||||
|
||||
#ifdef USE_OPENID
|
||||
extern int openid_test;
|
||||
#endif
|
||||
|
||||
static const char* sc_apszPythonLibraryFilenames[] =
|
||||
|
||||
{
|
||||
|
@ -239,20 +235,20 @@ bool PackInitialize(const char * c_pszFolder)
|
|||
}
|
||||
|
||||
#ifdef _DISTRIBUTE
|
||||
Tracef("알림: 팩 모드입니다.\n");
|
||||
Tracef("<EFBFBD>˸<EFBFBD>: <20><> <20><><EFBFBD><EFBFBD>Դϴ<D4B4>.\n");
|
||||
|
||||
//if (0 == strPackType.compare("FILE"))
|
||||
//{
|
||||
// bPackFirst = FALSE;
|
||||
// Tracef("알림: 파일 모드입니다.\n");
|
||||
// Tracef("<EFBFBD>˸<EFBFBD>: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Դϴ<D4B4>.\n");
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// Tracef("알림: 팩 모드입니다.\n");
|
||||
// Tracef("<EFBFBD>˸<EFBFBD>: <20><> <20><><EFBFBD><EFBFBD>Դϴ<D4B4>.\n");
|
||||
//}
|
||||
#else
|
||||
bPackFirst = FALSE;
|
||||
Tracef("알림: 파일 모드입니다.\n");
|
||||
Tracef("<EFBFBD>˸<EFBFBD>: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Դϴ<D4B4>.\n");
|
||||
#endif
|
||||
|
||||
CTextFileLoader::SetCacheMode();
|
||||
|
@ -262,7 +258,7 @@ bool PackInitialize(const char * c_pszFolder)
|
|||
CEterPackManager::Instance().SetCacheMode();
|
||||
CEterPackManager::Instance().SetSearchMode(bPackFirst);
|
||||
|
||||
CSoundData::SetPackMode(); // Miles 파일 콜백을 셋팅
|
||||
CSoundData::SetPackMode(); // Miles <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݹ<EFBFBD><DDB9><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
std::string strPackName, strTexCachePackName;
|
||||
for (DWORD i = 1; i < TextLoader.GetLineCount() - 1; i += 2)
|
||||
|
@ -353,7 +349,7 @@ bool RunMainScript(CPythonLauncher& pyLauncher, const char* lpCmdLine)
|
|||
SplitLine(lpCmdLine,seperator,&stVec);
|
||||
if (CmdSize == stVec.size() && stVec[0]==loginMark)
|
||||
{
|
||||
char buf[MAX_PATH]; //TODO 아래 함수 string 형태로 수정
|
||||
char buf[MAX_PATH]; //TODO <EFBFBD>Ʒ<EFBFBD> <20>Լ<EFBFBD> string <20><><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
base64_decode(stVec[2].c_str(),buf);
|
||||
stVec[2] = buf;
|
||||
string_join(seperator,stVec,&stCmdLine);
|
||||
|
@ -462,12 +458,12 @@ bool Main(HINSTANCE hInstance, LPSTR lpCmdLine)
|
|||
|
||||
if (pyLauncher.Create())
|
||||
{
|
||||
ret=RunMainScript(pyLauncher, lpCmdLine); //게임 실행중엔 함수가 끝나지 않는다.
|
||||
ret=RunMainScript(pyLauncher, lpCmdLine); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
}
|
||||
|
||||
//ProcessScanner_ReleaseQuitEvent();
|
||||
|
||||
//게임 종료시.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
||||
app->Clear();
|
||||
|
||||
timeEndPeriod(1);
|
||||
|
@ -537,20 +533,6 @@ bool __IsLocaleVersion(LPSTR lpCmdLine)
|
|||
return (strcmp(lpCmdLine, "--perforce-revision") == 0);
|
||||
}
|
||||
|
||||
#ifdef USE_OPENID
|
||||
//2012.07.16 김용욱
|
||||
//일본 OpenID 지원. 인증키 인자 추가
|
||||
bool __IsOpenIDAuthKeyOption(LPSTR lpCmdLine)
|
||||
{
|
||||
return (strcmp(lpCmdLine, "--openid-authkey") == 0);
|
||||
}
|
||||
|
||||
bool __IsOpenIDTestOption(LPSTR lpCmdLine) //클라이언트에서 로그인이 가능하다.
|
||||
{
|
||||
return (strcmp(lpCmdLine, "--openid-test") == 0);
|
||||
}
|
||||
#endif /* USE_OPENID */
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
if (strstr(lpCmdLine, "--hackshield") != 0)
|
||||
|
@ -567,14 +549,13 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||
SetDefaultCodePage(LocaleService_GetCodePage());
|
||||
|
||||
bool bQuit = false;
|
||||
bool bAuthKeyChecked = false; //OpenID 버전에서 인증키가 들어왔는지 알기 위한 인자.
|
||||
int nArgc = 0;
|
||||
PCHAR* szArgv = CommandLineToArgv( lpCmdLine, &nArgc );
|
||||
|
||||
for( int i=0; i < nArgc; i++ ) {
|
||||
if(szArgv[i] == 0)
|
||||
continue;
|
||||
if (__IsLocaleVersion(szArgv[i])) // #0000829: [M2EU] 버전 파일이 항상 생기지 않도록 수정
|
||||
if (__IsLocaleVersion(szArgv[i])) // #0000829: [M2EU] <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
char szModuleName[MAX_PATH];
|
||||
char szVersionPath[MAX_PATH];
|
||||
|
@ -601,7 +582,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||
bQuit = true;
|
||||
} else if ((strcmp(szArgv[i], "--force-set-locale") == 0))
|
||||
{
|
||||
// locale 설정엔 인자가 두 개 더 필요함 (로케일 명칭, 데이터 경로)
|
||||
// locale <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20><> <20><> <20><> <20>ʿ<EFBFBD><CABF><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ī, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
|
||||
if (nArgc <= i + 2)
|
||||
{
|
||||
MessageBox(NULL, "Invalid arguments", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
|
||||
|
@ -613,49 +594,13 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||
|
||||
LocaleService_ForceSetLocale(localeName, localePath);
|
||||
}
|
||||
#ifdef USE_OPENID
|
||||
else if (__IsOpenIDAuthKeyOption(szArgv[i])) //2012.07.16 OpenID : 김용욱
|
||||
{
|
||||
// 인증키 설정엔 인자가 한 개 더 필요함 (인증키)
|
||||
if (nArgc <= i + 1)
|
||||
{
|
||||
MessageBox(NULL, "Invalid arguments", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
|
||||
goto Clean;
|
||||
}
|
||||
|
||||
const char* authKey = szArgv[++i];
|
||||
|
||||
//ongoing (2012.07.16)
|
||||
//인증키 저장하는 부분
|
||||
LocaleService_SetOpenIDAuthKey(authKey);
|
||||
|
||||
bAuthKeyChecked = true;
|
||||
}
|
||||
else if (__IsOpenIDTestOption(szArgv[i]))
|
||||
{
|
||||
openid_test = 1;
|
||||
|
||||
}
|
||||
#endif /* USE_OPENID */
|
||||
}
|
||||
|
||||
#ifdef USE_OPENID
|
||||
//OpenID
|
||||
//OpenID 클라이언트의 경우인증키를 받아오지 않을 경우 (웹을 제외하고 실행 시) 클라이언트 종료.
|
||||
|
||||
if (false == bAuthKeyChecked && !openid_test)
|
||||
{
|
||||
MessageBox(NULL, "Invalid execution", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
|
||||
goto Clean;
|
||||
}
|
||||
#endif /* USE_OPENID */
|
||||
|
||||
|
||||
if(bQuit)
|
||||
goto Clean;
|
||||
|
||||
#if defined(NEEDED_COMMAND_ARGUMENT)
|
||||
// 옵션이 없으면 비정상 실행으로 간주, 프로그램 종료
|
||||
// <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD>
|
||||
if (strstr(lpCmdLine, NEEDED_COMMAND_ARGUMENT) == 0) {
|
||||
MessageBox(NULL, ApplicationStringTable_GetStringz(IDS_ERR_MUST_LAUNCH_FROM_PATCHER, "ERR_MUST_LAUNCH_FROM_PATCHER"), ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP);
|
||||
goto Clean;
|
||||
|
@ -713,7 +658,7 @@ static void GrannyError(granny_log_message_type Type,
|
|||
int Setup(LPSTR lpCmdLine)
|
||||
{
|
||||
/*
|
||||
* 타이머 정밀도를 올린다.
|
||||
* Ÿ<EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD>.
|
||||
*/
|
||||
TIMECAPS tc;
|
||||
UINT wTimerRes;
|
||||
|
@ -725,7 +670,7 @@ int Setup(LPSTR lpCmdLine)
|
|||
timeBeginPeriod(wTimerRes);
|
||||
|
||||
/*
|
||||
* 그래니 에러 핸들링
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ڵ鸵
|
||||
*/
|
||||
|
||||
granny_log_callback Callback;
|
||||
|
|
Loading…
Reference in New Issue