void RceObtainNpcListHandle::handle(Event* e) { int64 uid = e->uid(); GameDataHandler* pUserManager = eh_->getDataHandler(); if(!pUserManager) { return; } User *pUser = pUserManager->getUser(uid); if ( !pUser) { return; } Player* pPlayer = pUser->GetPlayer(); if ( !pPlayer || !pPlayer->CanUse()) { return ; } RseObtainNpcList rse; pPlayer->FillinNpcs(&rse); string text; rse.SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseObtainNpcList,text); }
void RceQueryGalaxyWindowHandle::handle_c2country(Event *e) { int64 uid = e->uid(); GameDataHandler* pUserManager = eh_->getDataHandler(); if(!pUserManager) { return; } User *pUser = pUserManager->getUser(uid); if ( !pUser) { return; } Player* pPlayer = pUser->GetPlayer(); if ( !pPlayer || !pPlayer->CanUse()) { return ; } RceQueryGalaxyWindow *req = e->mutable_ce_rcequerygalaxywindow(); if(!req){ return; } e->set_state(Status_Game_To_Country); eh_->sendEventToCountry(e, pUser->GetUserRegion(true)); }
void UserLogin::handle_WG_UserLogin(Event* e) { const NewStar_Rsp& rsp = e->newstarrsp(); const UserLogin_Req& req = e->userlogin_req(); int64 uid = req.uid(); if(uid<=0) return; int nPhysicsRegion = getPhysicsRegion(uid); //判断所属物理分区是否正确 if(nPhysicsRegion != serverConfig.GetPhysiceRegionByGame(eh_->GetSrvID())) return; GameDataHandler* dh = eh_->getDataHandler(); const string& platid = req.platform_id(); int siteid = req.siteid(); const string& name = req.name(); const string& profile_link = req.profile_link(); int gender = (req.gender() == 0) ? Gender_Girl : Gender_Boy ; vector<string> friends_platid; for (int i = 0; i < req.friends_platid_size(); i ++) { friends_platid.push_back(req.friends_platid(i)); } bool isYellowDmd = req.is_yellow_dmd(); bool isYellowDmdYear = req.is_yellow_dmd_year(); int lvlYellowDmd = req.yellow_dmd_lv(); bool isHighYellowDmd = req.is_high_yellow_dmd(); bool isHighDmdYear = req.is_high_dmd_year(); int nBlueTime = req.bluetime(); int nBlueYearTime = req.blueyeartime(); int nHighBlueTime = req.highbluetime(); int nHighYearTime = req.highblueyeartime(); int webfd = req.webfd(); string sid = req.sid(); int region = req.region(); int nCity = req.city(); string strVIA = req.via(); //玩家渠道 bool isRecall = req.isrecall(); int nCustomFlag = req.customflag(); int nBackFlowFlag = req.nbackflowflag(); const WebCrossPromotion* pWebPromotion = e->mutable_userlogin_req()->mutable_promotion(); string strChanel = pWebPromotion->chanle(); LOG4CXX_INFO(logger_, "World request UserLogin with openid: " << platid); //if(dh->GetUserID(platid,region)!=uid) //{ // dh->AddUserID(platid,region,uid); //} LoadStatus state = LOAD_INVALID; User* user = processUserLogin(uid,platid, siteid, name, profile_link, gender, friends_platid, isYellowDmd, isYellowDmdYear, lvlYellowDmd, state, region,nCity,req.isnewplayer(),strVIA,isHighYellowDmd,strChanel,isHighDmdYear,nBlueTime,nBlueYearTime,nHighBlueTime,nHighYearTime, rsp.id(), rsp.name(), rsp.type(), rsp.sku()); if (user != NULL) { UserLogin_Rsp* rsp = e->mutable_userlogin_rsp(); rsp->set_server(eh_->getServerIp()); rsp->set_port(eh_->getServerPort()); rsp->set_port1(eh_->getServerPort1()); rsp->set_uid(user->GetUid()); rsp->set_secret(user->secret(eh_->getReversion())); rsp->set_webfd(webfd); rsp->set_sid(sid); rsp->set_region(region); rsp->set_mainload("0");//此项已失效 rsp->set_version(FlashVersionCfg::Instance().GetCfgVersion(eh_->GetSrvID())); rsp->set_gettime(req.gettime()); rsp->set_platform_id(req.platform_id()); rsp->set_playerlvl(user->GetUserLevel()); rsp->set_logintimes(IsSameDay(user->GetLastLoginTime(),time(NULL))?1:0); rsp->set_isnewplayer(req.isnewplayer()); rsp->set_customflag(req.customflag()); rsp->set_channel(strChanel); #if 0 user->SetUndealGiftCount(req.undealgiftcnt()); user->SetUndealFrdGiftCount(req.undealfrdgiftcnt()); user->SetInviteFrdCnt(req.invitefrdcnt()); user->SetDayInviteFrdCnt(req.invitefrdcntday()); user->SetDayWebGiftSendCnt(req.daysendgiftcnt()); user->SetChannel(strChanel); user->GetDbUser().set_badult((req.nadultflag() >= 100)?true : false); bool bIsNewInvite = false; if (user->SetPlatInviteFriendOpenid(req.invitefriendid())) { bIsNewInvite = true; } user->GetDbUser().mutable_player()->set_yellowdmdtime(req.yellowdmdtime()); if (req.isnewplayer() && bIsNewInvite) { HttpRequireHandler::Instance().SafePushHttpAcceptToQQ(user, user->GetPlattype()); } else if (req.isnewplayer()) { HttpRequireHandler::Instance().SafePushHttpSelfRegistToQQ(user, user->GetPlattype()); } HttpRequireHandler::Instance().SafePushHttpLogOnToQQ(user, user->GetPlattype()); user->GetDbUser().set_isactivelogon( req.isapp51act() ); RceInviteFriend* pinviteMsg = e->mutable_ce_rceinvitefriend(); user->GetPlayer()->SetInviteFrdCntGain(pinviteMsg->friendcount(),pinviteMsg->giftgain()); //交叉推广 //if(strChanel.size()>0) //{ // user->m_mapChanlelFirst[strChanel] += 1; //} user->SetCrossPromotion(pWebPromotion); for ( int i = 0; i < req.invitegiftrecord_size(); i++ ) { DB_InvitedFriendLvGift* pDBInvitedFriendLvGift = user->GetPlayer()->GetDBInvitedFriendLvGift(req.invitegiftrecord(i)); if ( pDBInvitedFriendLvGift == NULL ) { continue; } pDBInvitedFriendLvGift->set_hasget( true ); } #endif e->clear_userlogin_req(); e->set_state(UserLogin_GW_Rsp); eh_->sendEventToWorld(e); user->InitRc4Key(rsp->logintimes(),sid); #if 0 if(user->GetUserLevel() != req.level()) { eh_->SendUserInfo2Plat(user,UpdatePlat_Level); } //if(user->GetPlayer()->GetDBPlayer()->invite_platid_size()>0) //{//分服前后数据同步 // eh_->SendUserInfo2Plat(user,1); // user->GetPlayer()->GetDBPlayer()->clear_invite_platid(); //} //召回老友统计 if ( isRecall ) { SYS_UserStat(user,false,"CallBackFrdBack",1,"","",""); } if ( nCustomFlag > 0 ) { //2015.03.10空间广告位回流 const CostGiftTbl *pCostTbl = CostGiftCfg::Instance().GetCostGiftTbl(10098); DB_QQBackFlow* pDBQQBackFlow = user->GetPlayer()->GetDBPlayer()->mutable_qqrightbackflowflag(); if (pCostTbl != NULL && pCostTbl->IsCurrentTime() && pDBQQBackFlow != NULL && pDBQQBackFlow->actflag() != pCostTbl->m_tBeginTime) { //user->GetPlayer()->GetDBPlayer()->set_customflagtime( time(NULL) ); SYS_LOG(user->GetPlayer()->GetUserID(),LT_COST_GIFT_CUSTOM_FLAG,0,0,0); pDBQQBackFlow->Clear(); pDBQQBackFlow->set_actflag(pCostTbl->m_tBeginTime); pDBQQBackFlow->set_curstate(1); } } if (nBackFlowFlag == 1) {//空间顶部应用墙回流 if ( user->GetPlayer()->GetDBPlayer()->qqtopbackflowflag() == 0) { user->GetPlayer()->GetDBPlayer()->set_qqtopbackflowflag(1); } } else if (nBackFlowFlag == 2) {//空间顶部应用墙回流 if ( user->GetPlayer()->GetDBPlayer()->qqleftbackflowflag() == 0) { user->GetPlayer()->GetDBPlayer()->set_qqleftbackflowflag(1); } } else if (nBackFlowFlag == 4) { if(user->GetPlayer()->GetDBPlayer()->qqtenyearbackflowflag() == 0) { user->GetPlayer()->GetDBPlayer()->set_qqtenyearbackflowflag(1); } } if ( bIsNewInvite ) { ConstantSetUnit* pUnit = GameConstantSetCfg::Instance().GetGameConstantSet(E_GAMECONSTANTSET_DEF_HOLIDAY_INVITE); if ( pUnit != NULL ) { time_t now = time(NULL); time_t tBeginTime = GetDayTimeByStr( pUnit->m_strArgs[0].c_str(), pUnit->m_strArgs[1].c_str() ); time_t tEndTime = GetDayTimeByStr( pUnit->m_strArgs[2].c_str(), pUnit->m_strArgs[3].c_str() ); if( now >= tBeginTime && now <= tEndTime ) { user->GetPlayer()->GetDBPlayer()->set_canholidayinvitegiftsend(true); } } } user->GetPlayer()->GetDBPlayer()->set_qqtaskstep( req.qqtaskstep() ); #endif dh->markUserDirty(user); } else { if (state == LOAD_WAITING) { eh_->postBackEvent(e); } } }
void UserLogin::HandleUserLogout(Event* e) { int64 nUserID = e->uid(); switch (e->state()) { case Status_Normal_Game: { GameDataHandler* dh = eh_->getDataHandler(); User* pUser = dh->getUser(nUserID, NULL, false); if (pUser == NULL) { return; } WG_UserLeave* pUserLeave = e->mutable_wg_userleave(); if (pUserLeave->fd() != pUser->fd()) return; pUser->setOnline(false); // pUser->OnUserOnOffLine(); dh->PopOnlineUserID(pUser->GetUid()); // pUser->GetPlayer()->SetInviteUserID(0,false); //pUser->SetFriendCache(pUser->GetPlattype(), dh); // pUser->SetGameStarCache(pUser->GetPlattype(),dh,true); if(pUser->GetPlayer()->IsAttacking()){ eh_->PushEventAttackFalse(pUser); } pUser->setFd(0); time_t lt = time(NULL) - pUser->GetLastLoginTime(); //设置离线保护时间 // if ( pUser->GetPlayer() != NULL ) // { // GameDataHandler* pUserManager = eh_->getDataHandler(); // GameStarInfo* pStar = pUserManager->getGameStarInfo(pUser->GetUid()); // if( pStar == NULL ) // { // return; // } // int nProtectTm = 60; // pStar->m_pPlayerBase->set_logoutsafetime((int)(time(NULL) + nProtectTm)); // pUser->GetPlayer()->SetLogoutProtectTm( nProtectTm ); // } // // SYS_LOG(nUserID, LT_LogOut, 0, 0, lt << pUser->GetUserLevel() // <<pUser->GetPlayer()->GetBaseValue()<<pUser->GetPlayer()->GetBasePoint() // <<pUser->GetPlayer()->GetResCnt(RC_Metal)<<pUser->GetPlayer()->GetResCnt(RC_Oil) // <<pUser->GetPlayer()->GetCredit()); // SYS_UserStat(pUser,false,"LogOut","","","",lt, // pUser->GetResStat()->m_nAddMedal,pUser->GetResStat()->m_nAddOil // ,pUser->GetResStat()->m_nCostMedal,pUser->GetResStat()->m_nCostOil, // pUser->GetResStat()->m_nPickMedal,pUser->GetResStat()->m_nPickOil); // int nTotalLV = pUser->GetPlayer()->CacuScienceTotalLV(); // /*if(nTotalLV>20) // { // SYS_UserStat4WebRank(pUser,"RankScience","",nTotalLV); // }*/ // // CMsg2QQ::GetInstance()->TellMsg(MQ_Logout,pUser,0,0,0); // // Player* pPlayer = pUser->GetPlayer(); // // if ( ServerStatMgr::Instance().GetStatUser(nUserID) ) // { // pPlayer->SendServerStat( lt ); // } // // HttpRequireHandler::Instance().SafePushHttpLogOutToQQ(pUser, pUser->GetPlattype()); dh->markUserDirty(pUser); } } }
void RceUpdateSocialItemHandle::handle(Event* e) { int64 uid = e->uid(); GameDataHandler* pUserManager = eh_->getDataHandler(); if(!pUserManager) { return; } User *pUser = pUserManager->getUser(uid); if ( !pUser) { return; } Player* pPlayer = pUser->GetPlayer(); if ( !pPlayer || !pPlayer->CanUse()) { return ; } RceUpdateSocialItem* req = e->mutable_ce_rceupdatesocialitem(); if( !req ) { return; } RseUpdateSocialItem rse; rse.set_ret(RseUpdateSocialItemRet_Success); int planetId = req->planetid(); string strAction = req->action(); MsgTransaction* MT = req->mutable_transaction(); if(MT) { for(int i = 0;i<MT->socialitems_size();i++) { MsgSocialItems* MSI = MT->mutable_socialitems(i); if(!pPlayer->CostSocialItem(MSI->sku(), 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse); } } } if(strAction == "nextStep") { int quantity = 0; int tm = 0; if(req->postion() == 1)//爆出物品 { CFG_Item* Tbl = ItemTblInst::instance().GetItem(req->sku()); if(!Tbl) return; string givenCondition = Tbl->givenCondition; tm = Tbl->timeToGive * 1000; string currentCount = toString(req->currentcount()); if(givenCondition.find("listSequence") >= 0 &&givenCondition.find("listSequence") <= givenCondition.size()&& givenCondition.find(currentCount)) { quantity = 1; } } if(!pPlayer->AddSocialItem(req->sku(),quantity,req->currentquantity(),tm)) { SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse); return; } SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); eh_->getDataHandler()->markUserDirty(pUser); } else if(strAction == "addItem") { MsgSocialItems* MSI = NULL; for(int i = 0;i<MT->socialitems_size();i++) { MSI = MT->mutable_socialitems(i); if(!pPlayer->AddSocialItem(MSI->sku(),req->currentquantity())) { SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse); return ; } } eh_->getDataHandler()->markUserDirty(pUser); SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "useItem") { DB_Model* model = pPlayer->GetDBPlayer()->mutable_model(); int Sku = 0; string randomSku = req->num(); safe_atoi(req->sku(),Sku); DB_SocialItem* pDBSI = pPlayer->GetSocialItem(req->sku()); if(!pDBSI || !model) { SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse); return; } if(Sku == SocialItem_worker_freeWorker)//雇佣工人 { if(!pPlayer->AddDroid(planetId)) { SendRet2User(pUser,RseUpdateSocialItemRet_AddDroidFailed,rse); return; } SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); return; } if(Sku >= SocialItem_coins && Sku <= 5006) { switch (Sku) { case SocialItem_coins:// 金币×1000 pPlayer->CostRes(RC_Coin,1000); break; case SocialItem_minerals:// 矿石×1000 pPlayer->CostRes(RC_Mineral,1000);; break; case 5003:// 金币×10000 pPlayer->CostRes(RC_Coin,10000); break; case 5004:// 金币×100000 pPlayer->CostRes(RC_Coin,100000); break; case 5005:// 矿石×10000 pPlayer->CostRes(RC_Mineral,10000); break; case 5006:// 矿石×100000 pPlayer->CostRes(RC_Mineral,100000); break; default: break; } if(!pPlayer->CostSocialItem(req->sku(), 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse); return; } SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); return; } else { CFG_Item* Tbl = ItemTblInst::instance().GetItem(req->sku()); if(!Tbl) return; string givenCondition = Tbl->givenCondition; vector<string> condition = split(givenCondition,":"); int counter = pDBSI->counter(); int nextCounter = 0; if (condition.size() > 1) {// 不是爆出物品不对counter计算 nextCounter = (counter + 1) % (condition.size() - 1); } if(randomSku == "1")// 金币矿石 { int seed = 0; safe_atoi(condition[counter + 1],seed); if(seed == 1) { int addCoins = model->coins() * 3 / 100; if (addCoins < 1000) { addCoins = 1000; } pPlayer->CostRes(RC_Coin,model->coins() + addCoins); } else if(seed == 2) { int addMinerals = model->minerals() * 3 / 100; if (addMinerals < 1000) { addMinerals = 1000; } pPlayer->CostRes(RC_Mineral,model->minerals() + addMinerals); } } else { if(!pPlayer->AddSocialItem(randomSku, 1, 0,0)) { SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse); return; } } pDBSI->set_counter(nextCounter); if(!pPlayer->CostSocialItem(req->sku(), 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse); return; } SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } eh_->getDataHandler()->markUserDirty(pUser); } else if(strAction == "buyItem") { SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "removeItem") { if(!pPlayer->CostSocialItem(req->sku(), 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse); return; } eh_->getDataHandler()->markUserDirty(pUser); SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "applyCrafting")// 制作炸弹和落石 { string sku = ""; if(req->sku() == "1")//洲际导弹 sku = "7000"; else sku = "7001"; if(!pPlayer->AddSocialItem(sku, 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_ApplyCraftingFailed,rse); return; } eh_->getDataHandler()->markUserDirty(pUser); SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "applyCollectable")// 收藏里兑换物品 { CFG_Collectables* Tbl = CollectablesTblInst::instance().GetItem(req->sku()); string itemSkuList = Tbl->itemSkuList; itemSkuList.erase(0, 1); itemSkuList.erase(itemSkuList.size() - 1, 1); vector<string> SkuList = split(itemSkuList,","); for(int i = 0;i<SkuList.size();i++) { string Sku = SkuList[i]; if(!pPlayer->CostSocialItem(Sku, 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse); return; } } if(!pPlayer->AddSocialItem(Tbl->reward, 1)) { SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse); return; } eh_->getDataHandler()->markUserDirty(pUser); SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "addItemToWishList") { if(!pPlayer->AddItemToWishList(req->sku())) { SendRet2User(pUser,RseUpdateSocialItemRet_AddToWishListFailed,rse); return; } eh_->getDataHandler()->markUserDirty(pUser); SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "removeItemFromWishList") { if(!pPlayer->RemoveItemFromWishList(req->sku())) { SendRet2User(pUser,RseUpdateSocialItemRet_RemoveItemFromWishListFailed,rse); return; } eh_->getDataHandler()->markUserDirty(pUser); SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse); } else if(strAction == "sendItemToNeighborWishList") { } }
void RceQueryCheckAndLockAccountIfPossibleHandle::handle_selfload(Event* e) { int64 uid = e->uid(); GameDataHandler* pUserManager = eh_->getDataHandler(); if(!pUserManager) { return; } User *pUser = pUserManager->getUser(uid); if ( !pUser) { return; } Player* pPlayer = pUser->GetPlayer(); if ( !pPlayer || !pPlayer->CanUse()) { return ; } RceQueryCheckAndLockAccountIfPossible* req = e->mutable_ce_rcequerycheckandlockaccountifpossible(); if( !req ) { return; } RseQueryCheckAndLockAccountIfPossible *pRsp = e->mutable_se_rsequerycheckandlockaccountifpossible(); pRsp->set_lockapplied(req->applylock()); pRsp->set_lockrequested(1); pRsp->set_locktype(0); pRsp->set_locksuccess(1); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; DB_Planet *pDBPlanet = pPlayer->GetPlanet(pPlayer->GetCurPlanetId()); if(!pDBPlanet){ pRsp->set_locksuccess(0); pRsp->set_locktype(7); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; } /*for(int i = 0; i < req->hangarsunitsinfo_size(); i++){ HangarsUnitsInfo *pMsgUnit = req->mutable_hangarsunitsinfo(i); if(pMsgUnit){ for (int k = 0; k < pDBPlanet->hangars_size(); k++){ DB_Hangar *pDBUnit = pDBPlanet->hangars(k); if(pDBUnit && pDBUnit->sid() == pMsgUnit->sid()){ } } } }*/ int64 TID; safe_atoll(req->targetaccountid(), TID); LoadStatus state = LOAD_INVALID; User *pTUser = pUserManager->getUser(TID, &state, true); if (pTUser == NULL) { if (state == LOAD_WAITING) { eh_->postBackEvent(e); } else if (state == LOAD_MISS) { e->mutable_forwardinfo()->set_uid(TID); e->set_state(Status_Normal_To_World); eh_->sendEventToWorld(e); } return; } else { if(0 == req->applylock()){ if(pTUser->Online()){ pRsp->set_locksuccess(0); pRsp->set_locktype(1); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; }else if(pTUser->GetLastAttackedTime()){ pRsp->set_locksuccess(0); pRsp->set_locktype(2); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; } }else{ int nPlanetId = req->planetid(); Player *pTPlayer = pUser->GetPlayer(); } } }