//---------------------------------------------------------------------------- void cbClientGroupAbandonMission( NLNET::CMessage& msgin, const std::string &serviceName, NLNET::TServiceId serviceId ) { CEntityId userId; uint8 index; msgin.serial(userId,index); if (!checkPlayer(userId, "cbClientGroupAbandonMission")) return; CCharacter * user = PlayerManager.getChar( userId ); user->setAfkState(false); CTeam * team = TeamManager.getRealTeam( user->getTeamId() ); if ( !team ) { MISLOG("user:%s cbClientGroupAbandonMission : Invalid team", userId.toString().c_str()); return; } if ( team->getLeader() != userId ) { CCharacter::sendDynamicSystemMessage( user->getEntityRowId(), "REQ_LEADER_TO_ABANDON_MISSION" ); return; } if ( index >= team->getMissions().size() ) { MISLOG("user:%s cbClientGroupAbandonMission : Invalid group mission %u ( count %u )", userId.toString().c_str(), index, team->getMissions().size()); return; } CMissionTeam* mission = team->getMissions()[index]; nlassert(mission); if ( mission->getFinished() == false ) { CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); if ( !templ ) { MISLOG("user:%s cbClientGroupAbandonMission : invalid group mission alias %u", userId.toString().c_str(), mission->getTemplateId()); return; } if ( templ->Tags.NonAbandonnable ) { MISLOG("user:%s cbClientGroupAbandonMission : group mission alias %u is not abandonnable but user tries to abandon it", userId.toString().c_str(), mission->getTemplateId()); return; } set<CEntityId> excluded; excluded.insert( userId ); team->sendDynamicMessageToMembers( "ABANDON_GROUP_MISSION",TVectorParamCheck(), excluded ); } team->removeMission( index, mr_abandon ); }
bool CTeam::processTeamMissionStepEvent(std::list< CMissionEvent* > & eventList, TAIAlias missionAlias, uint32 stepIndex ) { CMissionTeam * mission = getMissionByAlias( missionAlias ); if (!mission ) { nlwarning("invalid missionAlias"); return false; } CMissionEvent::TResult result = mission->processEvent( TheDataset.getDataSetRow( _LeaderId) ,eventList,stepIndex ); if ( result == CMissionEvent::Nothing ) return false; else if ( result == CMissionEvent::MissionFailed ) return true; CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); nlassert( templ ); if ( result == CMissionEvent::MissionEnds ) { CMissionEventMissionDone * event = new CMissionEventMissionDone(templ->Alias); eventList.push_back(event); for (std::list<CEntityId>::const_iterator it = _TeamMembers.begin() ; it != _TeamMembers.end() ; ++it) { CCharacter* user = PlayerManager.getOnlineChar( *it ); if (user != NULL) { user->addSuccessfulMissions( *templ ); if ( templ->Tags.NoList == false ) CCharacter::sendDynamicSystemMessage( user->getEntityRowId(),"EGS_MISSION_SUCCESS"); } } CMissionManager::getInstance()->missionDoneOnce(templ); mission->stopChildren(); // only remove no list missions, other must be manually removed by user if ( templ->Tags.NoList || mission->isChained() || templ->Tags.AutoRemove ) { mission->updateEncyclopedia(); removeMission(mission, mr_success); } else { mission->setSuccessFlag(); mission->updateUsersJournalEntry(); } return true; } else if ( result == CMissionEvent::StepEnds ) { if ( templ->Tags.NoList == false ) { for (std::list<CEntityId>::const_iterator it = _TeamMembers.begin() ; it != _TeamMembers.end() ; ++it) { CCharacter::sendDynamicSystemMessage( *it,"EGS_MISSION_STEP_SUCCESS"); } } } mission->updateUsersJournalEntry(); return true; }// CTeam::processTeamMissionStepEvent
//---------------------------------------------------------------------------- void cbClientMissionGroupWake( NLNET::CMessage& msgin, const std::string & serviceName, NLNET::TServiceId serviceId ) { CEntityId userId; msgin.serial(userId); uint8 missionGroupIndex; msgin.serial(missionGroupIndex); CCharacter * user = PlayerManager.getChar(userId); if ( !user || !user->getEnterFlag() ) return; user->setAfkState(false); CTeam * team = TeamManager.getRealTeam( user->getTeamId() ); if ( !team ) { MISLOG("user:%s cbClientMissionGroupWake : Invalid team", userId.toString().c_str()); return; } if ( team->getLeader() != userId ) { return; } if ( missionGroupIndex >= team->getMissions().size() ) { MISLOG("user:%s cbClientMissionGroupWake : Invalid group mission %u ( count %u )", userId.toString().c_str(), missionGroupIndex, team->getMissions().size()); return; } CMissionTeam* mission = team->getMissions()[missionGroupIndex]; nlassert(mission); if ( mission->getFinished() == false ) { CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); if ( !templ ) { MISLOG("user:%s cbClientGroupAbandonMission : invalid group mission alias %u", userId.toString().c_str(), mission->getTemplateId()); return; } CMissionQueueManager::getInstance()->playerWakesUp (userId, templ->Alias ); } }