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