diff --git a/Classes/Mission/LoginMission.cpp b/Classes/Mission/LoginMission.cpp
index 8b3ad29c..f4e687b4 100644
--- a/Classes/Mission/LoginMission.cpp
+++ b/Classes/Mission/LoginMission.cpp
@@ -249,7 +249,7 @@ bool LoginMission::onSocketSubLogonSuccess(void* data, int size)
pGlobalUserData->dwExperience =pData->dwExperience;
pGlobalUserData->cbInsureEnabled = pData->cbInsureEnabled;
pGlobalUserData->cbWXShareTimes = pData->cbWXShareTimes;
- //strncpy(pGlobalUserData->szNickName, (char*)pData->szNickName, countarray(pGlobalUserData->szNickName)-1);
+ strncpy(pGlobalUserData->szNickName, (char*)pData->szNickName, countarray(pGlobalUserData->szNickName)-1);
strncpy(pGlobalUserData->szAccounts, ((char*)pData->szAccounts), countarray(pGlobalUserData->szAccounts)-1);
// 抽奖信息;
diff --git a/Classes/Scenes/LogonScene.cpp b/Classes/Scenes/LogonScene.cpp
index ba1974ff..0d763bc2 100644
--- a/Classes/Scenes/LogonScene.cpp
+++ b/Classes/Scenes/LogonScene.cpp
@@ -7,8 +7,14 @@
#include "GlobalJosn.h"
#include "YvVoiceManager.hpp"
#include "13S_GameLogic.h"
+#include "MD5.h"
LogonScene::LogonScene()
+ : m_pPanelAccount(nullptr)
+ , m_pTxtUsername(nullptr)
+ , m_pTxtPassword(nullptr)
+ , m_pBtnLogin(nullptr)
+ , m_pBtnClose(nullptr)
{
m_kLoginMission.setUrl(GlobalJosn::getInstance()->m_strLogonIp.c_str(), GlobalJosn::getInstance()->m_iPort);
@@ -43,6 +49,31 @@ bool LogonScene::init()
btnWeiXinLogon->addClickEventListener(CC_CALLBACK_1(LogonScene::onWeiXinLogon, this));
+ // Account login entry button
+ auto btnAccountLogin = (Button*)rootPanel->getChildByName("btnAccountLogin");
+ if (btnAccountLogin)
+ {
+ btnAccountLogin->addClickEventListener(CC_CALLBACK_1(LogonScene::onShowAccountPanel, this));
+ }
+
+ // Account login panel
+ m_pPanelAccount = rootPanel->getChildByName("panelAccount");
+ if (m_pPanelAccount)
+ {
+ m_pPanelAccount->setVisible(false);
+ auto imgBg = m_pPanelAccount->getChildByName("imgBg");
+ if (imgBg)
+ {
+ m_pTxtUsername = (TextField*)imgBg->getChildByName("txtUsername");
+ m_pTxtPassword = (TextField*)imgBg->getChildByName("txtPassword");
+ m_pBtnLogin = (Button*)imgBg->getChildByName("btnLogin");
+ m_pBtnClose = (Button*)imgBg->getChildByName("btnClose");
+
+ if (m_pBtnLogin) m_pBtnLogin->addClickEventListener(CC_CALLBACK_1(LogonScene::onUsernameLogon, this));
+ if (m_pBtnClose) m_pBtnClose->addClickEventListener(CC_CALLBACK_1(LogonScene::onHideAccountPanel, this));
+ }
+ }
+
//对手机返回键的监听
auto keyListener = EventListenerKeyboard::create();
//和回调函数绑定
@@ -130,22 +161,37 @@ void LogonScene::onGPLoginSuccess()
CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();
+
//UserDefault::getInstance()->setStringForKey("Accounts",pGlobalUserData->szAccounts);
//UserDefault::getInstance()->setStringForKey("Password",m_kPssword);
+ m_kPssword = "WeiXinPassword";
+
if (pGlobalUserData != nullptr)
{
- UserDefault::getInstance()->setStringForKey("Accounts", pGlobalUserData->szAccounts);
- UserDefault::getInstance()->setStringForKey("Password", m_kPssword);
+ //UserDefault::getInstance()->setStringForKey("Accounts", pGlobalUserData->szAccounts);
+ //UserDefault::getInstance()->setStringForKey("Password", m_kPssword);
// 更新微信最新信息;
- pGlobalUserData->cbGender = m_kWeiXinUserInfo.sex;
- strncpy(pGlobalUserData->szNickName, m_kWeiXinUserInfo.nickname.c_str(), LEN_NICKNAME - 1);
- strncpy(pGlobalUserData->szHeadHttp, m_kWeiXinUserInfo.headimgurl.c_str(), LEN_HEAD_HTTP - 1);
+ // Only update WeChat info for WeChat login (not username login)
+ if (!m_kWeiXinUserInfo.openid.empty())
+ {
+ pGlobalUserData->cbGender = m_kWeiXinUserInfo.sex;
+ strncpy(pGlobalUserData->szNickName, m_kWeiXinUserInfo.nickname.c_str(), LEN_NICKNAME - 1);
+ strncpy(pGlobalUserData->szHeadHttp, m_kWeiXinUserInfo.headimgurl.c_str(), LEN_HEAD_HTTP - 1);
#if CC_TARGET_PLATFORM != CC_PLATFORM_WIN32
- UserInfo::Instance().modifyWeiXinInfo(m_kWeiXinUserInfo.sex, m_kWeiXinUserInfo.nickname, m_kWeiXinUserInfo.headimgurl);
+ UserInfo::Instance().modifyWeiXinInfo(m_kWeiXinUserInfo.sex, m_kWeiXinUserInfo.nickname, m_kWeiXinUserInfo.headimgurl);
#endif
+ }
+ else
+ {
+ strcpy(pGlobalUserData->szPassword, m_kPssword.c_str());
+ // Username login: clear head URL to use default avatar
+ pGlobalUserData->szHeadHttp[0] = '\0';
+
+ }
+
}
}
@@ -339,4 +385,86 @@ void LogonScene::ResponseResult(rapidjson::Document* pDoc)
}
#endif
+}
+
+//==================================================
+// Username/Password Login
+//==================================================
+
+void LogonScene::onShowAccountPanel(Ref*)
+{
+ YSAudioEngine::Instance().playBtnClickEffect();
+ if (m_pPanelAccount)
+ {
+ m_pPanelAccount->setVisible(true);
+ if (m_pTxtUsername) m_pTxtUsername->setString(UserDefault::getInstance()->getStringForKey("Accounts", ""));
+ if (m_pTxtPassword) m_pTxtPassword->setString(UserDefault::getInstance()->getStringForKey("Password", ""));
+ }
+}
+
+void LogonScene::onHideAccountPanel(Ref*)
+{
+ YSAudioEngine::Instance().playBtnClickEffect();
+ if (m_pPanelAccount)
+ {
+ m_pPanelAccount->setVisible(false);
+ }
+}
+
+void LogonScene::onUsernameLogon(Ref*)
+{
+ YSAudioEngine::Instance().playBtnClickEffect();
+
+ std::string strUsername = "";
+ std::string strPassword = "";
+ if (m_pTxtUsername) strUsername = m_pTxtUsername->getString();
+ if (m_pTxtPassword) strPassword = m_pTxtPassword->getString();
+
+ // Input validation
+ if (strUsername.empty())
+ {
+ PopScene::Instance().show(utility::a_u8("请输入用户名"));
+ return;
+ }
+ if (strPassword.empty())
+ {
+ PopScene::Instance().show(utility::a_u8("请输入密码"));
+ return;
+ }
+ if (strUsername.length() < 4)
+ {
+ PopScene::Instance().show(utility::a_u8("用户名至少4个字符"));
+ return;
+ }
+ if (strPassword.length() < 6)
+ {
+ PopScene::Instance().show(utility::a_u8("密码至少6个字符"));
+ return;
+ }
+
+ if (m_pPanelAccount) m_pPanelAccount->setVisible(false);
+ LoadingScene::Instance().show(this);
+
+ // 保存输入的 用户名和密码
+ UserDefault::getInstance()->setStringForKey("Accounts", strUsername);
+ UserDefault::getInstance()->setStringForKey("Password", strPassword);
+
+ // MD5 encrypt password
+ m_kPssword = md5(strPassword);
+
+ // Clear WeChat info (mark as username login)
+ m_kWeiXinUserInfo = WxUserInfo();
+
+ // Build login packet
+ CMD_GP_LogonAccounts loginAccount;
+ zeromemory(&loginAccount, sizeof(loginAccount));
+ loginAccount.dwPlazaVersion = Helps::Instance()->GetPlazaVersion();
+ loginAccount.cbValidateFlags = MB_VALIDATE_FLAGS | LOW_VER_VALIDATE_FLAGS;
+ strcpy(loginAccount.szAccounts, strUsername.c_str());
+ strcpy(loginAccount.szPassword, m_kPssword.c_str());
+ loginAccount.szOpenId[0] = '\0';
+ loginAccount.szUnionid[0] = '\0';
+
+ cocos2d::log("Username Login: account=%s", loginAccount.szAccounts);
+ m_kLoginMission.loginAccount(loginAccount);
}
\ No newline at end of file
diff --git a/Classes/Scenes/LogonScene.h b/Classes/Scenes/LogonScene.h
index 2b101254..e771c33e 100644
--- a/Classes/Scenes/LogonScene.h
+++ b/Classes/Scenes/LogonScene.h
@@ -1,7 +1,8 @@
#pragma once
#include "cocos2d.h"
#include "cocostudio/CocoStudio.h"
-
+#include "ui/CocosGUI.h"
+#include "MD5.h"
#include "MissionWeiXin.h"
#include "LoginMission.h"
@@ -51,10 +52,22 @@ public:
//请求版本信息结果
void ResponseResult(rapidjson::Document* pDoc);
+ // Username login
+ void onShowAccountPanel(Ref*);
+ void onHideAccountPanel(Ref*);
+ void onUsernameLogon(Ref*);
+
private:
LoginMission m_kLoginMission;
std::string m_kPssword;
WxUserInfo m_kWeiXinUserInfo;
+ // Account login UI
+ Node* m_pPanelAccount;
+ cocos2d::ui::TextField* m_pTxtUsername;
+ cocos2d::ui::TextField* m_pTxtPassword;
+ cocos2d::ui::Button* m_pBtnLogin;
+ cocos2d::ui::Button* m_pBtnClose;
+
};
\ No newline at end of file
diff --git a/CocosFile/Platform/Platform.ccs b/CocosFile/Platform/Platform.ccs
index 27a58dfe..6637805e 100644
--- a/CocosFile/Platform/Platform.ccs
+++ b/CocosFile/Platform/Platform.ccs
@@ -27,6 +27,7 @@
+
@@ -261,6 +262,7 @@
+
diff --git a/CocosFile/Platform/Platform.cfg b/CocosFile/Platform/Platform.cfg
index 1041fe05..c2a570ee 100644
--- a/CocosFile/Platform/Platform.cfg
+++ b/CocosFile/Platform/Platform.cfg
@@ -1,5 +1,5 @@
-
+
diff --git a/CocosFile/Platform/Platform.udf b/CocosFile/Platform/Platform.udf
index 4ab2ddf2..9918170c 100644
--- a/CocosFile/Platform/Platform.udf
+++ b/CocosFile/Platform/Platform.udf
@@ -31,9 +31,6 @@
-
-
-
-
diff --git a/CocosFile/Platform/cocosstudio/Platform/Logon/entry_btn_username.png b/CocosFile/Platform/cocosstudio/Platform/Logon/entry_btn_username.png
index dcbfae3d..2de93e19 100644
Binary files a/CocosFile/Platform/cocosstudio/Platform/Logon/entry_btn_username.png and b/CocosFile/Platform/cocosstudio/Platform/Logon/entry_btn_username.png differ
diff --git a/CocosFile/Platform/cocosstudio/Platform/LogonScene.csd b/CocosFile/Platform/cocosstudio/Platform/LogonScene.csd
index cfdb8736..06bad5d0 100644
--- a/CocosFile/Platform/cocosstudio/Platform/LogonScene.csd
+++ b/CocosFile/Platform/cocosstudio/Platform/LogonScene.csd
@@ -4,65 +4,171 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CocosFile/Platform/cocosstudio/common/background/username_login_bg.png b/CocosFile/Platform/cocosstudio/common/background/username_login_bg.png
new file mode 100644
index 00000000..a46bbe86
Binary files /dev/null and b/CocosFile/Platform/cocosstudio/common/background/username_login_bg.png differ
diff --git a/CocosFile/Platform/res/Platform/CreateScene.csb b/CocosFile/Platform/res/Platform/CreateScene.csb
index facd7e50..f44e0d46 100644
Binary files a/CocosFile/Platform/res/Platform/CreateScene.csb and b/CocosFile/Platform/res/Platform/CreateScene.csb differ
diff --git a/CocosFile/Platform/res/Platform/Logon/entry_btn_username.png b/CocosFile/Platform/res/Platform/Logon/entry_btn_username.png
index dcbfae3d..2de93e19 100644
Binary files a/CocosFile/Platform/res/Platform/Logon/entry_btn_username.png and b/CocosFile/Platform/res/Platform/Logon/entry_btn_username.png differ
diff --git a/CocosFile/Platform/res/Platform/LogonScene.csb b/CocosFile/Platform/res/Platform/LogonScene.csb
index 41b116c5..d1e50df0 100644
Binary files a/CocosFile/Platform/res/Platform/LogonScene.csb and b/CocosFile/Platform/res/Platform/LogonScene.csb differ
diff --git a/CocosFile/Platform/res/Platform/MainScene.csb b/CocosFile/Platform/res/Platform/MainScene.csb
index 0bb01619..5edb2939 100644
Binary files a/CocosFile/Platform/res/Platform/MainScene.csb and b/CocosFile/Platform/res/Platform/MainScene.csb differ
diff --git a/CocosFile/Platform/res/common/background/username_login_bg.png b/CocosFile/Platform/res/common/background/username_login_bg.png
new file mode 100644
index 00000000..a46bbe86
Binary files /dev/null and b/CocosFile/Platform/res/common/background/username_login_bg.png differ
diff --git a/Resources/Platform/CreateScene.csb b/Resources/Platform/CreateScene.csb
index facd7e50..f44e0d46 100644
Binary files a/Resources/Platform/CreateScene.csb and b/Resources/Platform/CreateScene.csb differ
diff --git a/Resources/Platform/Logon/entry_btn_username.png b/Resources/Platform/Logon/entry_btn_username.png
new file mode 100644
index 00000000..2de93e19
Binary files /dev/null and b/Resources/Platform/Logon/entry_btn_username.png differ
diff --git a/Resources/Platform/LogonScene.csb b/Resources/Platform/LogonScene.csb
index 41b116c5..ae92eee8 100644
Binary files a/Resources/Platform/LogonScene.csb and b/Resources/Platform/LogonScene.csb differ
diff --git a/Resources/common/background/username_login_bg.png b/Resources/common/background/username_login_bg.png
new file mode 100644
index 00000000..a46bbe86
Binary files /dev/null and b/Resources/common/background/username_login_bg.png differ
diff --git a/proj.android/assets/Platform/CreateScene.csb b/proj.android/assets/Platform/CreateScene.csb
index facd7e50..f44e0d46 100644
Binary files a/proj.android/assets/Platform/CreateScene.csb and b/proj.android/assets/Platform/CreateScene.csb differ
diff --git a/proj.android/assets/Platform/Logon/entry_btn_username.png b/proj.android/assets/Platform/Logon/entry_btn_username.png
new file mode 100644
index 00000000..2de93e19
Binary files /dev/null and b/proj.android/assets/Platform/Logon/entry_btn_username.png differ
diff --git a/proj.android/assets/Platform/LogonScene.csb b/proj.android/assets/Platform/LogonScene.csb
index 41b116c5..ae92eee8 100644
Binary files a/proj.android/assets/Platform/LogonScene.csb and b/proj.android/assets/Platform/LogonScene.csb differ
diff --git a/proj.android/assets/common/background/username_login_bg.png b/proj.android/assets/common/background/username_login_bg.png
new file mode 100644
index 00000000..a46bbe86
Binary files /dev/null and b/proj.android/assets/common/background/username_login_bg.png differ