bool CPlayerBaseData::onPlayerRequestMoney(uint64_t& nCoinOffset,uint64_t nAtLeast, bool bDiamoned) { bool invalidAtLeast = (nAtLeast != 0 && nAtLeast < nCoinOffset ); if ( bDiamoned == false ) { if ( nCoinOffset > GetAllCoin() ) { if ( invalidAtLeast && GetAllCoin() >= nAtLeast ) { nCoinOffset = nAtLeast ; m_stBaseData.nCoin -= nCoinOffset ; m_bMoneyDataDirty = true ; return true ; } return false ; } //m_nTaxasPlayerCoin += nCoinOffset ; //add after recieved comfirm msg m_stBaseData.nCoin -= nCoinOffset ; } else { if ( nCoinOffset > GetAllDiamoned() ) { if ( invalidAtLeast && GetAllDiamoned() >= nAtLeast ) { nCoinOffset = nAtLeast ; m_stBaseData.nDiamoned -= nCoinOffset ; m_bMoneyDataDirty = true ; return true ; } return false ; } // m_nTaxasPlayerDiamoned += nCoinOffset; ; //add after recieved comfirm msg m_stBaseData.nDiamoned -= nCoinOffset ; } m_bMoneyDataDirty = true ; return true ; }
bool CPlayerBaseData::OnMessage( stMsg* pMsg , eMsgPort eSenderPort ) { if ( IPlayerComponent::OnMessage(pMsg,eSenderPort) ) { return true ; } switch( pMsg->usMsgType ) { case MSG_BUY_SHOP_ITEM: { stMsgPlayerBuyShopItem* pRet = (stMsgPlayerBuyShopItem*)pMsg ; stMsgToVerifyServer msgVerify ; msgVerify.nBuyerPlayerUserUID = GetPlayer()->GetUserUID(); msgVerify.nBuyForPlayerUserUID = msgVerify.nBuyerPlayerUserUID ; msgVerify.nMiUserUID = pRet->nMiUserUID ; msgVerify.nShopItemID = pRet->nShopItemID ; msgVerify.nTranscationIDLen = pRet->nBufLen ; CAutoBuffer buffer(sizeof(stMsgPlayerBuyShopItem) + pRet->nBufLen ) ; buffer.addContent(&msgVerify,sizeof(msgVerify)); buffer.addContent(((char*)pRet) + sizeof(stMsgPlayerBuyShopItem),pRet->nBufLen); SendMsg((stMsg*)buffer.getBufferPtr(),buffer.getContentSize()); } break; case MSG_VERIFY_TANSACTION: { stMsgFromVerifyServer* pRet = (stMsgFromVerifyServer*)pMsg ; stMsgPlayerBuyShopItemRet msgBack ; msgBack.nBuyShopItemForUserUID = pRet->nBuyForPlayerUserUID ; msgBack.nDiamoned = 0 ; msgBack.nSavedMoneyForVip = 0 ; msgBack.nShopItemID = pRet->nShopItemID ; msgBack.nRet = 0 ; if ( pRet->nRet == 4 ) // success { CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop); stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID); if ( pItem == nullptr ) { msgBack.nRet = 5 ; CLogMgr::SharedLogMgr()->ErrorLog("can not find shop id = %d , buyer uid = %d",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ; } else { ModifyMoney(pItem->nCount) ; CLogMgr::SharedLogMgr()->SystemLog("add coin with shop id = %d for buyer uid = %d ",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ; } } else { msgBack.nRet = 2 ; CLogMgr::SharedLogMgr()->ErrorLog("uid = %d ,shop id = %d , verify error ",pRet->nBuyerPlayerUserUID,pRet->nShopItemID) ; } msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; } break; case MSG_ON_PLAYER_BIND_ACCOUNT: { m_stBaseData.isRegister = true ; CLogMgr::SharedLogMgr()->PrintLog("player bind account ok uid = %u",GetPlayer()->GetUserUID()); } break; case MSG_READ_PLAYER_BASE_DATA: // from db server ; { stMsgDataServerGetBaseDataRet* pBaseData = (stMsgDataServerGetBaseDataRet*)pMsg ; if ( pBaseData->nRet ) { CLogMgr::SharedLogMgr()->ErrorLog("do not exsit playerData") ; return true; } memcpy(&m_stBaseData,&pBaseData->stBaseData,sizeof(m_stBaseData)); CLogMgr::SharedLogMgr()->PrintLog("recived base data uid = %d",pBaseData->stBaseData.nUserUID); SendBaseDatToClient(); CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->getPlayerDataCaher().removePlayerDataCache(pBaseData->stBaseData.nUserUID) ; return true ; } break; // case MSG_PLAYER_REQUEST_NOTICE: // { //// CGameServerApp::SharedGameServerApp()->GetBrocaster()->SendInformsToPlayer(GetPlayer()) ; //// CInformConfig* pConfig = (CInformConfig*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Informs) ; //// m_stBaseData.nNoticeID = pConfig->GetMaxInformID(); // } // break; case MSG_PLAYER_MODIFY_SIGURE: { stMsgPLayerModifySigure* pMsgRet = (stMsgPLayerModifySigure*)pMsg ; memcpy(m_stBaseData.cSignature,pMsgRet->pNewSign,sizeof(m_stBaseData.cSignature)); stMsgPlayerModifySigureRet ret ; ret.nRet = 0 ; SendMsg(&ret,sizeof(ret)) ; m_bPlayerInfoDataDirty = true ; } break; case MSG_PLAYER_MODIFY_NAME: { stMsgPLayerModifyName* pMsgRet = (stMsgPLayerModifyName*)pMsg ; stMsgPlayerModifyNameRet ret ; ret.nRet = 0 ; if ( pMsgRet->pNewName[sizeof(pMsgRet->pNewName) -1 ] != 0 ) { ret.nRet = 1 ; CLogMgr::SharedLogMgr()->ErrorLog("name is too long uid = %d",GetPlayer()->GetUserUID()); } else { memcpy(m_stBaseData.cName,pMsgRet->pNewName,sizeof(m_stBaseData.cName)) ; m_bPlayerInfoDataDirty = true ; } SendMsg(&ret,sizeof(ret)) ; } break; case MSG_PLAYER_MODIFY_PHOTO: { stMsgPlayerModifyPhoto* pPhoto = (stMsgPlayerModifyPhoto*)pMsg ; m_stBaseData.nPhotoID = pPhoto->nPhotoID ; stMsgPlayerModifyPhotoRet msgRet ; msgRet.nRet = 0 ; SendMsg(&msgRet,sizeof(msgRet)) ; m_bPlayerInfoDataDirty = true ; } break; case MSG_PLAYER_MODIFY_SEX: { stMsgPlayerModifySex* pRet = (stMsgPlayerModifySex*)pMsg ; m_stBaseData.nSex = pRet->nNewSex ; stMsgPlayerModifySexRet msgback ; msgback.nRet = 0 ; SendMsg(&msgback,sizeof(msgback)) ; m_bPlayerInfoDataDirty = true ; } break; case MSG_PUSH_APNS_TOKEN: { //stMsgPushAPNSToken* pMsgRet = (stMsgPushAPNSToken*)pMsg ; //if ( 0 == pMsgRet->nGetTokenRet ) //{ // bPlayerEnableAPNs = true ; // memcpy(vAPNSToken,pMsgRet->vAPNsToken,32); //} //else //{ // bPlayerEnableAPNs = false ; // memset(vAPNSToken,0,32 ) ; //} //stMsgPushAPNSTokenRet msg ; //msg.nGetTokenRet = pMsgRet->nGetTokenRet ; //SendMsgToClient((char*)&msg,sizeof(msg)) ; } break; case MSG_PLAYER_UPDATE_MONEY: { stMsgPlayerUpdateMoney msgUpdate ; msgUpdate.nFinalCoin = GetAllCoin(); msgUpdate.nFinalDiamoned = GetAllDiamoned(); SendMsg(&msgUpdate,sizeof(msgUpdate)); } break; case MSG_GET_CONTINUE_LOGIN_REWARD: { // stMsgGetContinueLoginReward* pGetR = (stMsgGetContinueLoginReward*)pMsg ; // stMsgGetContinueLoginRewardRet msgBack ; // msgBack.nRet = 0 ; // // 0 success , 1 already getted , 2 you are not vip ; // msgBack.cRewardType = pGetR->cRewardType; // msgBack.nDayIdx = m_stBaseData.nContinueDays ; // msgBack.nDiamoned = GetAllDiamoned(); // msgBack.nFinalCoin = GetAllCoin() ; // if ( m_bGivedLoginReward ) // { // msgBack.nRet = 1 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } // // stConLoginConfig* pConfig = CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetContinueLoginConfig()->GetConfigByDayIdx(m_stBaseData.nContinueDays) ; // if ( pConfig == NULL ) // { // CLogMgr::SharedLogMgr()->ErrorLog("there is no login config for dayIdx = %d",m_stBaseData.nContinueDays ) ; // msgBack.nRet = 4 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } // // // give item deponed on nContinuedDays ; // if (pGetR->cRewardType == 1 ) // { // if ( GetVipLevel() < 1 ) // { // msgBack.nRet = 2 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } // // give item ; // for ( int i = 0 ; i < pConfig->vItems.size(); ++i ) // { // CPlayerItemComponent* pc = (CPlayerItemComponent*)GetPlayer()->GetComponent(ePlayerComponent_PlayerItemMgr) ; // pc->AddItemByID(pConfig->vItems[i].nItemID,pConfig->vItems[i].nCount) ; // } // // give vip prize ; // m_stBaseData.nDiamoned += pConfig->nDiamoned ; // msgBack.nDiamoned = GetAllDiamoned(); // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // m_bGivedLoginReward = true ; // break; // } // else if( pGetR->cRewardType == 0 ) // { // // gvie common prize ; // m_stBaseData.nCoin += pConfig->nGiveCoin ; // msgBack.nFinalCoin = GetAllCoin() ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // m_bGivedLoginReward = true ; // break; // } // else // { // msgBack.nRet = 3 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } } break; case MSG_PLAYER_REQUEST_CHARITY_STATE: { stMsgPlayerRequestCharityStateRet msgBack ; // 0 can get charity , 1 you coin is enough , do not need charity, 2 time not reached ; msgBack.nState = 0 ; msgBack.nLeftSecond = 0 ; if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY ) { msgBack.nState = 1 ; } else if ( time(NULL) - m_stBaseData.tLastTakeCharityCoinTime < TIME_GET_CHARITY_ELAPS ) { msgBack.nState = 2 ; msgBack.nLeftSecond = m_stBaseData.tLastTakeCharityCoinTime + TIME_GET_CHARITY_ELAPS - time(NULL) ; } SendMsg(&msgBack,sizeof(msgBack)) ; } break; case MSG_PLAYER_GET_CHARITY: { stMsgPlayerGetCharityRet msgBack ; // 0 success , 1 you coin is enough , do not need charity, 2 time not reached ; msgBack.nRet = 0 ; msgBack.nFinalCoin = GetAllCoin(); msgBack.nGetCoin = 0; msgBack.nLeftSecond = 0 ; if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY ) { msgBack.nRet = 1 ; } else if ( time(NULL) - m_stBaseData.tLastTakeCharityCoinTime < TIME_GET_CHARITY_ELAPS ) { msgBack.nRet = 2 ; msgBack.nLeftSecond = m_stBaseData.tLastTakeCharityCoinTime + TIME_GET_CHARITY_ELAPS - time(NULL) ; } else { msgBack.nGetCoin = COIN_FOR_CHARITY; msgBack.nLeftSecond = TIME_GET_CHARITY_ELAPS ; m_stBaseData.tLastTakeCharityCoinTime = time(NULL) ; ModifyMoney(msgBack.nGetCoin); msgBack.nFinalCoin = GetAllCoin(); CLogMgr::SharedLogMgr()->PrintLog("player uid = %d get charity",GetPlayer()->GetUserUID()); m_bCommonLogicDataDirty = true ; } CLogMgr::SharedLogMgr()->SystemLog("uid = %d , final coin = %I64d",GetPlayer()->GetUserUID(),GetAllCoin()); SendMsg(&msgBack,sizeof(msgBack)) ; } break; default: { return false ; } break; } return true ; }
bool CPlayerBaseData::OnMessage( stMsg* pMsg , eMsgPort eSenderPort ) { if ( IPlayerComponent::OnMessage(pMsg,eSenderPort) ) { return true ; } switch( pMsg->usMsgType ) { case MSG_PLAYER_USE_ENCRYPT_NUMBER: { stMsgPlayerUseEncryptNumberRet msgBack ; stMsgPlayerUseEncryptNumber* pRet = (stMsgPlayerUseEncryptNumber*)pMsg ; if ( 1 || CEncryptNumber::isNumberValid(pRet->nNumber) ) { stMsgVerifyEncryptNumber msgVerifyEncrypt ; msgVerifyEncrypt.nNumber = pRet->nNumber ; msgVerifyEncrypt.nUserUID = GetPlayer()->GetUserUID() ; SendMsg(&msgVerifyEncrypt,sizeof(msgVerifyEncrypt)) ; break; } msgBack.nRet = 1 ; msgBack.nAddCoin = 0 ; msgBack.nFinalcoin = getCoin(); SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("invalid number uid = %u",GetPlayer()->GetUserUID()); } break ; case MSG_VERIFY_ENCRYPT_NUMBER: { stMsgPlayerUseEncryptNumberRet msgBack ; stMsgVerifyEncryptNumberRet* pRet = (stMsgVerifyEncryptNumberRet*)pMsg ; if ( pRet->nRet ) { stMsgPlayerUseEncryptNumberRet msgBack ; msgBack.nRet = pRet->nRet ; msgBack.nFinalcoin = getCoin(); SendMsg(&msgBack,sizeof(msgBack)) ; break; } msgBack.nRet = 0 ; msgBack.nAddCoin = pRet->nAddCoin ; msgBack.nCoinType = pRet->nCoinType ; AddMoney(pRet->nAddCoin,pRet->nCoinType == 0 ) ; msgBack.nFinalcoin = GetAllCoin(); msgBack.nDiamond = GetAllDiamoned() ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("uid = %u add coin via encrypt number" , GetPlayer()->GetUserUID()); } break; case MSG_REQ_TOTAL_GAME_OFFSET: { stMsgReqRobotTotalGameOffsetRet msgBack ; msgBack.nTotalGameOffset = m_stBaseData.nTotalGameCoinOffset ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("robot uid = %u req total offset = %d",GetPlayer()->GetUserUID(),msgBack.nTotalGameOffset) ; } break; case MSG_TELL_PLAYER_TYPE: { stMsgTellPlayerType* pRet = (stMsgTellPlayerType*)pMsg ; m_ePlayerType = (ePlayerType)pRet->nPlayerType ; LOGFMTD("uid = %u , tell player type = %u",GetPlayer()->GetUserUID(),m_ePlayerType); } break; case MSG_GET_VIP_CARD_GIFT: { stMsgGetVipcardGift* pRet = (stMsgGetVipcardGift*)pMsg ; stMsgGetVipcardGiftRet msgBack ; msgBack.nVipCardType = pRet->nVipCardType ; msgBack.nAddCoin = 0 ; if ( m_stBaseData.nCardType != pRet->nVipCardType ) { msgBack.nRet = 1 ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ; break; } time_t tNow = time(nullptr) ; if ( m_stBaseData.nCardEndTime < tNow ) { msgBack.nRet = 2 ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ; break; } struct tm pTempNow,pLastTake ; pTempNow = *localtime(&tNow) ; time_t nLastTake = m_stBaseData.tLastTakeCardGiftTime ; pLastTake = *localtime(&nLastTake) ; if ( pTempNow.tm_year == pLastTake.tm_year && pTempNow.tm_mon == pLastTake.tm_mon && pTempNow.tm_yday == pLastTake.tm_yday ) { msgBack.nRet = 3 ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ; break; } msgBack.nRet = 0 ; msgBack.nAddCoin = COIN_FOR_VIP_CARD ; AddMoney(COIN_FOR_VIP_CARD); m_stBaseData.tLastTakeCardGiftTime = tNow ; SendMsg(&msgBack,sizeof(msgBack)) ; m_bCommonLogicDataDirty = true ; LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ; } break; case MSG_PLAYER_CHECK_INVITER: { stMsgCheckInviterRet msgBack ; stMsgCheckInviter* pRet = (stMsgCheckInviter*)pMsg ; msgBack.nInviterUID = pRet->nInviterUID ; if ( m_stBaseData.nUserUID == pRet->nInviterUID ) { msgBack.nRet = 1 ; LOGFMTE("can not invite self , uid = %d",GetPlayer()->GetUserUID()) ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } if ( m_stBaseData.nInviteUID ) { msgBack.nRet = 2 ; LOGFMTD("you already have invite = %d , uid = %d",m_stBaseData.nInviteUID,GetPlayer()->GetUserUID()) ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } auto tPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerByUserUID(pRet->nInviterUID); if ( tPlayer ) { LOGFMTD("do invite = %d ,player = %d",pRet->nInviterUID,GetPlayer()->GetUserUID()) ; onBeInviteBy(pRet->nInviterUID) ; msgBack.nRet = 0 ; SendMsg(&msgBack,sizeof(msgBack)) ; } else { stMsgDBCheckInvite msgCheck ; msgCheck.nInviteUserUID = pRet->nInviterUID ; SendMsg(&msgCheck,sizeof(msgCheck)) ; LOGFMTD("invite = %d not online, so ask db i am uid = %d",pRet->nInviterUID,GetPlayer()->GetUserUID()) ; } } break; case MSG_DB_CHECK_INVITER: { stMsgCheckInviterRet msgBack ; stMsgDBCheckInviteRet* pRet = (stMsgDBCheckInviteRet*)pMsg ; msgBack.nInviterUID = pRet->nInviteUseUID ; if ( pRet->nRet ) { msgBack.nRet = 1 ; SendMsg(&msgBack,sizeof(msgBack)) ; } else { onBeInviteBy(pRet->nInviteUseUID) ; msgBack.nRet = 0 ; SendMsg(&msgBack,sizeof(msgBack)) ; } } break; case MSG_REQUEST_CLIENT_IP: { stMsgRequestClientIpRet* pRet = (stMsgRequestClientIpRet*)pMsg ; if ( pRet->nRet == 0 ) { m_strCurIP = pRet->vIP ; LOGFMTD("get client ip = %s session id = %d",m_strCurIP.c_str(),GetPlayer()->GetSessionID()) ; } else { LOGFMTE("cant not request client ip , uid = %d",GetPlayer()->GetUserUID()) ; } } break; case MSG_SHOP_BUY_ITEM_ORDER: { stMsgPlayerShopBuyItemOrder* pRet = (stMsgPlayerShopBuyItemOrder*)pMsg ; stMsgPlayerShopBuyItemOrderRet msgBack ; msgBack.nChannel = pRet->nChannel ; msgBack.nShopItemID = pRet->nShopItemID ; msgBack.nRet = 0 ; memset(msgBack.cOutTradeNo,0,sizeof(msgBack.cOutTradeNo)) ; memset(msgBack.cPrepayId,0,sizeof(msgBack.cPrepayId)) ; CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop); stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID); if ( pItem == nullptr ) { msgBack.nRet = 1 ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTE("can not find shop item , for order uid = %d",GetPlayer()->GetUserUID()) ; break; } if ( msgBack.nChannel != ePay_WeChat ) { msgBack.nRet = 4 ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTE("current must be wechat channel for order channel = %d, uid = %d",msgBack.nChannel,GetPlayer()->GetUserUID() ); break; } if ( m_strCurIP.empty() ) { msgBack.nRet = 2 ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTE("cur rent ip = null , for order uid = %d",GetPlayer()->GetUserUID()) ; break; } stMsgVerifyItemOrder msgOrder ; memset(msgOrder.cShopDesc,0,sizeof(msgOrder.cShopDesc)); sprintf_s(msgOrder.cShopDesc,sizeof(msgOrder.cShopDesc),"%s",pItem->strItemName.c_str()) ; memset(msgOrder.cOutTradeNo,0,sizeof(msgOrder.cOutTradeNo)); sprintf_s(msgOrder.cOutTradeNo,sizeof(msgOrder.cOutTradeNo),"%dE%dE%u",pItem->nShopItemID,GetPlayer()->GetUserUID(),(uint32_t)time(nullptr)) ; msgOrder.nPrize = pItem->nPrize * 100 ; msgOrder.nChannel = pRet->nChannel ; memset(msgOrder.cTerminalIp,0,sizeof(msgOrder.cTerminalIp)); sprintf_s(msgOrder.cTerminalIp,sizeof(msgOrder.cTerminalIp),"%s",m_strCurIP.c_str()) ; SendMsg(&msgOrder,sizeof(msgOrder)) ; LOGFMTI("order shop item to verify shop item = %d , uid = %d",pItem->nShopItemID,GetPlayer()->GetUserUID()) ; } break; case MSG_VERIFY_ITEM_ORDER: { stMsgVerifyItemOrderRet* pRet = (stMsgVerifyItemOrderRet*)pMsg ; stMsgPlayerShopBuyItemOrderRet msgBack ; memset(msgBack.cOutTradeNo,0,sizeof(msgBack.cOutTradeNo)) ; memset(msgBack.cPrepayId,0,sizeof(msgBack.cPrepayId)) ; msgBack.nChannel = pRet->nChannel ; std::string strTradeNo(pRet->cOutTradeNo,sizeof(pRet->cOutTradeNo)); std::string shopItem = strTradeNo.substr(0,strTradeNo.find_first_of('E')) ; if ( shopItem.empty() ) { msgBack.nShopItemID = 0 ; LOGFMTE("outTradeNo shop item is null , uid = %d",GetPlayer()->GetUserUID()) ; } else { msgBack.nShopItemID = atoi(shopItem.c_str()) ; } if ( pRet->nRet ) { msgBack.nRet = 3 ; } else { msgBack.nRet = 0; memcpy(msgBack.cOutTradeNo,pRet->cOutTradeNo,sizeof(pRet->cOutTradeNo)); memcpy(msgBack.cPrepayId,pRet->cPrepayId,sizeof(pRet->cPrepayId)); } LOGFMTI("shopitem id = %d shop order ret = %d, uid = %d",msgBack.nShopItemID,pRet->nRet,GetPlayer()->GetUserUID()) ; SendMsg(&msgBack,sizeof(msgBack)) ; } break; case MSG_BUY_SHOP_ITEM: { stMsgPlayerBuyShopItem* pRet = (stMsgPlayerBuyShopItem*)pMsg ; CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop); stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID); stMsgPlayerBuyShopItemRet msgBack ; msgBack.nBuyShopItemForUserUID = pRet->nBuyShopItemForUserUID ; msgBack.nDiamoned = 0 ; msgBack.nSavedMoneyForVip = 0 ; msgBack.nShopItemID = pRet->nShopItemID ; msgBack.nRet = 0 ; if( pItem == nullptr ) { LOGFMTE("uid = %u buy shop id = %u not exsit",GetPlayer()->GetUserUID(),pRet->nShopItemID) ; msgBack.nRet = 5 ; msgBack.nDiamoned = GetAllDiamoned(); msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } if ( 0 == pItem->nPrizeType ) { stMsgToVerifyServer msgVerify ; msgVerify.nBuyerPlayerUserUID = GetPlayer()->GetUserUID(); msgVerify.nBuyForPlayerUserUID = msgVerify.nBuyerPlayerUserUID ; msgVerify.nMiUserUID = pRet->nMiUserUID ; msgVerify.nShopItemID = pRet->nShopItemID ; msgVerify.nTranscationIDLen = pRet->nBufLen ; msgVerify.nChannel = pRet->nChannelID ; CAutoBuffer buffer(sizeof(stMsgPlayerBuyShopItem) + pRet->nBufLen ) ; buffer.addContent(&msgVerify,sizeof(msgVerify)); buffer.addContent(((char*)pRet) + sizeof(stMsgPlayerBuyShopItem),pRet->nBufLen); SendMsg((stMsg*)buffer.getBufferPtr(),buffer.getContentSize()); break; } // 0 RMB ,1 diamoned ,2 coin ; // do diamond purchase if ( pItem->nPrize > GetAllDiamoned() ) { msgBack.nRet = 1 ; msgBack.nDiamoned = GetAllDiamoned(); msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("uid = %u buy item diamond is not enough shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ; break; } if ( pRet->nShopItemID == 16 ) { LOGFMTI("uid = %d buy a vip card month card ",GetPlayer()->GetUserUID()) ; updateCardLife(); if ( eCard_LV1 == m_stBaseData.nCardType ) { m_stBaseData.nCardEndTime = m_stBaseData.nCardEndTime + 60 * 60 * 24 * 31; } else if ( eCard_LV1 < m_stBaseData.nCardType ) { msgBack.nRet = 6 ; msgBack.nDiamoned = GetAllDiamoned(); msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("uid = %u buy item eCard_LV1 < m_stBaseData.nCardType shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ; break; } else { m_stBaseData.nCardEndTime = time(nullptr) + 60 * 60 * 24 * 31; } m_stBaseData.nCardType = eCard_LV1 ; m_bCommonLogicDataDirty = true ; } else if ( 17 == pRet->nShopItemID ) { LOGFMTI("uid = %d buy a vip card month card ",GetPlayer()->GetUserUID()) ; updateCardLife(); if ( eCard_LV2 == m_stBaseData.nCardType ) { m_stBaseData.nCardEndTime = m_stBaseData.nCardEndTime + 60 * 60 * 24 * 31; } else if ( eCard_LV2 < m_stBaseData.nCardType ) { msgBack.nRet = 6 ; msgBack.nDiamoned = GetAllDiamoned(); msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("uid = %u buy item eCard_LV2 < m_stBaseData.nCardType shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ; break; } else { m_stBaseData.nCardEndTime = time(nullptr) + 60 * 60 * 24 * 31; } m_stBaseData.nCardType = eCard_LV2 ; m_bCommonLogicDataDirty = true ; } else { LOGFMTD("player uid = %u buy coin use diamond",GetPlayer()->GetUserUID()); AddMoney(pItem->nCount); } decressMoney(pItem->nPrize,true) ; msgBack.nDiamoned = GetAllDiamoned(); msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; LOGFMTD("uid = %u buy item ok shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ; break; } break; case MSG_VERIFY_TANSACTION: { stMsgFromVerifyServer* pRet = (stMsgFromVerifyServer*)pMsg ; stMsgPlayerBuyShopItemRet msgBack ; msgBack.nBuyShopItemForUserUID = pRet->nBuyForPlayerUserUID ; msgBack.nDiamoned = 0 ; msgBack.nSavedMoneyForVip = 0 ; msgBack.nShopItemID = pRet->nShopItemID ; msgBack.nRet = 0 ; if ( pRet->nRet == 4 ) // success { { CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop); stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID); if ( pItem == nullptr ) { msgBack.nRet = 5 ; LOGFMTE("can not find shop id = %d , buyer uid = %d",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ; } else { AddMoney(pItem->nCount,true) ; LOGFMTI("add coin with shop id = %d for buyer uid = %d ",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ; } } // save log stMsgSaveLog msgLog ; memset(msgLog.vArg,0,sizeof(msgLog.vArg)); msgLog.nJsonExtnerLen = 0 ; msgLog.nLogType = eLog_Purchase ; msgLog.nTargetID = GetPlayer()->GetUserUID() ; memset(msgLog.vArg,0,sizeof(msgLog.vArg)) ; msgLog.vArg[0] = GetAllCoin() ; msgLog.vArg[1] = pRet->nShopItemID ; SendMsg(&msgLog,sizeof(msgLog)) ; } else { msgBack.nRet = 2 ; LOGFMTE("uid = %d ,shop id = %d , verify error ",pRet->nBuyerPlayerUserUID,pRet->nShopItemID) ; } msgBack.nDiamoned = GetAllDiamoned(); msgBack.nFinalyCoin = GetAllCoin() ; SendMsg(&msgBack,sizeof(msgBack)) ; } break; case MSG_ON_PLAYER_BIND_ACCOUNT: { m_stBaseData.isRegister = true ; m_bPlayerInfoDataDirty = true ; LOGFMTD("player bind account ok uid = %u",GetPlayer()->GetUserUID()); } break; case MSG_READ_PLAYER_BASE_DATA: // from db server ; { stMsgDataServerGetBaseDataRet* pBaseData = (stMsgDataServerGetBaseDataRet*)pMsg ; if ( pBaseData->nRet ) { LOGFMTE("do not exsit playerData") ; return true; } memcpy(&m_stBaseData,&pBaseData->stBaseData,sizeof(m_stBaseData)); LOGFMTD("recived base data uid = %d",pBaseData->stBaseData.nUserUID); nReadingDataFromDB = 2 ; SendBaseDatToClient(); CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->getPlayerDataCaher().removePlayerDataCache(pBaseData->stBaseData.nUserUID) ; return true ; } break; // case MSG_PLAYER_REQUEST_NOTICE: // { //// CGameServerApp::SharedGameServerApp()->GetBrocaster()->SendInformsToPlayer(GetPlayer()) ; //// CInformConfig* pConfig = (CInformConfig*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Informs) ; //// m_stBaseData.nNoticeID = pConfig->GetMaxInformID(); // } // break; case MSG_PLAYER_MODIFY_SIGURE: { stMsgPLayerModifySigure* pMsgRet = (stMsgPLayerModifySigure*)pMsg ; memcpy(m_stBaseData.cSignature,pMsgRet->pNewSign,sizeof(m_stBaseData.cSignature)); stMsgPlayerModifySigureRet ret ; ret.nRet = 0 ; SendMsg(&ret,sizeof(ret)) ; m_bPlayerInfoDataDirty = true ; } break; case MSG_PLAYER_MODIFY_NAME: { stMsgPLayerModifyName* pMsgRet = (stMsgPLayerModifyName*)pMsg ; stMsgPlayerModifyNameRet ret ; ret.nRet = 0 ; memcpy(ret.pName,pMsgRet->pNewName,sizeof(ret.pName)); if ( pMsgRet->pNewName[sizeof(pMsgRet->pNewName) -1 ] != 0 ) { ret.nRet = 1 ; LOGFMTE("name is too long uid = %d",GetPlayer()->GetUserUID()); } else if ( strcmp(pMsgRet->pNewName,m_stBaseData.cName) == 0 ) { } else { memcpy(m_stBaseData.cName,pMsgRet->pNewName,sizeof(m_stBaseData.cName)) ; m_bPlayerInfoDataDirty = true ; } SendMsg(&ret,sizeof(ret)) ; } break; case MSG_PLAYER_MODIFY_PHOTO: { stMsgPlayerModifyPhoto* pPhoto = (stMsgPlayerModifyPhoto*)pMsg ; m_stBaseData.nPhotoID = pPhoto->nPhotoID ; stMsgPlayerModifyPhotoRet msgRet ; msgRet.nRet = 0 ; SendMsg(&msgRet,sizeof(msgRet)) ; m_bPlayerInfoDataDirty = true ; } break; case MSG_PLAYER_MODIFY_SEX: { stMsgPlayerModifySex* pRet = (stMsgPlayerModifySex*)pMsg ; m_stBaseData.nSex = pRet->nNewSex ; stMsgPlayerModifySexRet msgback ; msgback.nRet = 0 ; SendMsg(&msgback,sizeof(msgback)) ; m_bPlayerInfoDataDirty = true ; LOGFMTI("change sex uid = %d , new sex = %d",GetPlayer()->GetUserUID(),pRet->nNewSex) ; } break; case MSG_PLAYER_UPDATE_MONEY: { stMsgPlayerUpdateMoney msgUpdate ; msgUpdate.nFinalCoin = GetAllCoin(); msgUpdate.nFinalDiamoned = GetAllDiamoned(); msgUpdate.nCupCnt = m_stBaseData.nCupCnt ; SendMsg(&msgUpdate,sizeof(msgUpdate)); } break; case MSG_GET_CONTINUE_LOGIN_REWARD: { // stMsgGetContinueLoginReward* pGetR = (stMsgGetContinueLoginReward*)pMsg ; // stMsgGetContinueLoginRewardRet msgBack ; // msgBack.nRet = 0 ; // // 0 success , 1 already getted , 2 you are not vip ; // msgBack.cRewardType = pGetR->cRewardType; // msgBack.nDayIdx = m_stBaseData.nContinueDays ; // msgBack.nDiamoned = GetAllDiamoned(); // msgBack.nFinalCoin = GetAllCoin() ; // if ( m_bGivedLoginReward ) // { // msgBack.nRet = 1 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } // // stConLoginConfig* pConfig = CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetContinueLoginConfig()->GetConfigByDayIdx(m_stBaseData.nContinueDays) ; // if ( pConfig == NULL ) // { // LOGFMTE("there is no login config for dayIdx = %d",m_stBaseData.nContinueDays ) ; // msgBack.nRet = 4 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } // // // give item deponed on nContinuedDays ; // if (pGetR->cRewardType == 1 ) // { // if ( GetVipLevel() < 1 ) // { // msgBack.nRet = 2 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } // // give item ; // for ( int i = 0 ; i < pConfig->vItems.size(); ++i ) // { // CPlayerItemComponent* pc = (CPlayerItemComponent*)GetPlayer()->GetComponent(ePlayerComponent_PlayerItemMgr) ; // pc->AddItemByID(pConfig->vItems[i].nItemID,pConfig->vItems[i].nCount) ; // } // // give vip prize ; // m_stBaseData.nDiamoned += pConfig->nDiamoned ; // msgBack.nDiamoned = GetAllDiamoned(); // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // m_bGivedLoginReward = true ; // break; // } // else if( pGetR->cRewardType == 0 ) // { // // gvie common prize ; // m_stBaseData.nCoin += pConfig->nGiveCoin ; // msgBack.nFinalCoin = GetAllCoin() ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // m_bGivedLoginReward = true ; // break; // } // else // { // msgBack.nRet = 3 ; // SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ; // break; // } } break; case MSG_PLAYER_REQUEST_CHARITY_STATE: { stMsgPlayerRequestCharityStateRet msgBack ; // 0 can get charity , 1 you coin is enough , do not need charity, 2 time not reached ; msgBack.nState = 0 ; // check times limit state ; time_t tNow = time(nullptr) ; struct tm pTimeCur, pTimeLast ; pTimeCur = *localtime(&tNow); time_t nLastTakeTime = m_stBaseData.tLastTakeCharityCoinTime; pTimeLast = *localtime(&nLastTakeTime); if ( pTimeCur.tm_year == pTimeLast.tm_year && pTimeCur.tm_yday == pTimeLast.tm_yday ) // the same day ; do nothing { } else { m_stBaseData.nTakeCharityTimes = 0 ; // new day reset times ; } msgBack.nLeftTimes = TIMES_GET_CHARITY_PER_DAY - m_stBaseData.nTakeCharityTimes ; if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY ) { msgBack.nState = 1 ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } if ( m_stBaseData.nTakeCharityTimes >= TIMES_GET_CHARITY_PER_DAY ) { msgBack.nState = 2 ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } SendMsg(&msgBack,sizeof(msgBack)) ; } break; case MSG_PLAYER_GET_CHARITY: { stMsgPlayerGetCharityRet msgBack ; // 0 success , 1 you coin is enough , do not need charity, 2 time not reached ; msgBack.nRet = 0 ; msgBack.nFinalCoin = GetAllCoin(); msgBack.nGetCoin = 0; msgBack.nLeftTimes = 0 ; if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY ) { msgBack.nRet = 1 ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } // check times limit state ; time_t tNow = time(nullptr) ; struct tm pTimeCur ; struct tm pTimeLast ; pTimeCur = *localtime(&tNow); time_t nLastTakeTime = m_stBaseData.tLastTakeCharityCoinTime; pTimeLast = *localtime(&nLastTakeTime); if ( pTimeCur.tm_year == pTimeLast.tm_year && pTimeCur.tm_yday == pTimeLast.tm_yday ) // the same day ; do nothing { } else { m_stBaseData.nTakeCharityTimes = 0 ; // new day reset times ; } if ( m_stBaseData.nTakeCharityTimes >= TIMES_GET_CHARITY_PER_DAY ) { msgBack.nRet = 2 ; SendMsg(&msgBack,sizeof(msgBack)) ; break; } ++m_stBaseData.nTakeCharityTimes; msgBack.nGetCoin = COIN_FOR_CHARITY; msgBack.nLeftTimes = TIMES_GET_CHARITY_PER_DAY - m_stBaseData.nTakeCharityTimes ; m_stBaseData.tLastTakeCharityCoinTime = time(NULL) ; AddMoney(msgBack.nGetCoin); msgBack.nFinalCoin = GetAllCoin(); LOGFMTD("player uid = %d get charity",GetPlayer()->GetUserUID()); m_bCommonLogicDataDirty = true ; m_bMoneyDataDirty = true ; // save log stMsgSaveLog msgLog ; memset(msgLog.vArg,0,sizeof(msgLog.vArg)); msgLog.nJsonExtnerLen = 0 ; msgLog.nLogType = eLog_GetCharity ; msgLog.nTargetID = GetPlayer()->GetUserUID() ; memset(msgLog.vArg,0,sizeof(msgLog.vArg)) ; msgLog.vArg[0] = GetAllCoin() ; SendMsg(&msgLog,sizeof(msgLog)) ; LOGFMTI("uid = %d , final coin = %I64d",GetPlayer()->GetUserUID(),GetAllCoin()); SendMsg(&msgBack,sizeof(msgBack)) ; } break; default: { return false ; } break; } return true ; }