plString plNetClientMgr::GetPlayerNameById (unsigned playerId) const { // local case if (NetCommGetPlayer()->playerInt == playerId) return NetCommGetPlayer()->playerName; plNetTransportMember * mbr = TransportMgr().GetMember(TransportMgr().FindMember(playerId)); return mbr ? mbr->GetPlayerName() : plString::Null; }
unsigned plNetClientMgr::GetPlayerIdByName (const plString & name) const { // local case if (name.CompareI(NetCommGetPlayer()->playerName) == 0) return NetCommGetPlayer()->playerInt; unsigned n = TransportMgr().GetNumMembers(); for (unsigned i = 0; i < n; ++i) if (plNetTransportMember * member = TransportMgr().GetMember(i)) if (0 == name.Compare(member->GetPlayerName())) return member->GetPlayerID(); return 0; }
// Link a node to this one void pyVaultNode::LinkToNode(int nodeID, PyObject* cbObject, uint32_t cbContext) { pyVaultNodeOperationCallback * cb = new pyVaultNodeOperationCallback( cbObject ); if (fNode && nodeID) { // Hack the callbacks until vault notification is in place cb->VaultOperationStarted( cbContext ); if (RelVaultNode * rvn = VaultGetNodeIncRef(nodeID)) { cb->SetNode(rvn); cb->fPyNodeRef = pyVaultNodeRef::New(fNode, rvn); rvn->UnRef(); } VaultAddChildNode(fNode->GetNodeId(), nodeID, NetCommGetPlayer()->playerInt, (FVaultAddChildNodeCallback)_AddNodeCallback, cb ); } else { // manually make the callback cb->VaultOperationStarted( cbContext ); cb->VaultOperationComplete( cbContext, hsFail ); } }
//============================================================================ bool plNCAgeLeaver::MsgReceive (plMessage * msg) { plNetClientMgr * nc = plNetClientMgr::GetInstance(); plAvatarMgr * am = plAvatarMgr::GetInstance(); plAgeLoader * al = plAgeLoader::GetInstance(); //======================================================================== // Done with link out effects //======================================================================== if (plLinkOutUnloadMsg * linkOutUnloadMsg = plLinkOutUnloadMsg::ConvertNoRef(msg)) { if (!linkOutUnloadMsg->HasBCastFlag(plMessage::kNetNonLocal) && linkOutUnloadMsg->GetPlayerID() == NetCommGetPlayer()->playerInt ) { nextOp = kUnloadAge; } return true; } //======================================================================== // Age data unloaded //======================================================================== if (plAgeLoadedMsg * ageLoadedMsg = plAgeLoadedMsg::ConvertNoRef(msg)) { if (!ageLoadedMsg->fLoaded) { nextOp = kNotifyAgeUnloaded; return true; } return false; } return false; }
// // Return the net client (account) name of the player whose avatar // key is provided. If avKey is nil, returns local client name. // plString plNetClientMgr::GetPlayerName(const plKey avKey) const { // local case if (!avKey || avKey == GetLocalPlayerKey()) return NetCommGetPlayer()->playerName; plNetTransportMember* mbr=TransportMgr().GetMember(TransportMgr().FindMember(avKey)); return mbr ? mbr->GetPlayerName() : plString::Null; }
PyObject* pyVaultNode::AddNode(pyVaultNode* pynode, PyObject* cbObject, uint32_t cbContext) { pyVaultNodeOperationCallback * cb = new pyVaultNodeOperationCallback(cbObject); if ( fNode && pynode && pynode->GetNode() ) { // Hack the callbacks until vault notification is in place cb->VaultOperationStarted(cbContext); int hsResult = hsOK; if ( !pynode->GetID() ) { // Block here until node is created and fetched =( ASSERT(pynode->GetNode()->GetNodeType()); ENetError result; RelVaultNode * newNode = VaultCreateNodeAndWaitIncRef( pynode->GetNode(), &result ); if (newNode) { newNode->Ref(); pynode->fNode->UnRef(); pynode->fNode = newNode; } else { hsResult = hsFail; } } PyObject* nodeRef = cb->fPyNodeRef = pyVaultNodeRef::New(fNode, pynode->fNode); Py_INCREF(nodeRef); // The callback steals the ref, according to Eric... cb->SetNode(pynode->fNode); VaultAddChildNode(fNode->GetNodeId(), pynode->fNode->GetNodeId(), NetCommGetPlayer()->playerInt, (FVaultAddChildNodeCallback)_AddNodeCallback, cb ); // Evil undocumented functionality that some fool // decided to use in xKI.py. Really??? return nodeRef; } else { // manually make the callback cb->VaultOperationStarted( cbContext ); cb->VaultOperationComplete(hsFail); } // just return a None object PYTHON_RETURN_NONE; }
void plNetLinkingMgr::LinkToPlayersAge( uint32_t playerID ) { if ( !fLinkingEnabled ) { hsLogEntry( plNetClientMgr::GetInstance()->DebugMsg( "Not linking. Linking is disabled." ) ); return; } // Send the player a msg telling them to send us a msg to link to them. isn't that fun? :) plNetClientMgr * nc = plNetClientMgr::GetInstance(); plLinkingMgrMsg* pMsg = new plLinkingMgrMsg(); pMsg->SetCmd( kLinkPlayerHere ); pMsg->GetArgs()->AddInt( 0, NetCommGetPlayer()->playerInt ); // send them our id. IDispatchMsg( pMsg, playerID ); }
uint32_t plNetClientMgr::GetPlayerID() const { return NetCommGetPlayer()->playerInt; }
void plNetLinkingMgr::IPostProcessLink( void ) { // Grab some useful things... plAgeLinkStruct* link = GetAgeLink(); plAgeInfoStruct* info = link->GetAgeInfo(); bool city = (info->GetAgeFilename().CompareI(kCityAgeFilename) == 0); bool hood = (info->GetAgeFilename().CompareI(kNeighborhoodAgeFilename) == 0); bool psnl = (info->GetAgeFilename().CompareI(kPersonalAgeFilename) == 0); // Update our online status if (RelVaultNode* rvnInfo = VaultGetPlayerInfoNodeIncRef()) { VaultPlayerInfoNode accInfo(rvnInfo); wchar_t ageInstName[MAX_PATH]; plUUID ageInstGuid = *info->GetAgeInstanceGuid(); StrToUnicode(ageInstName, info->GetAgeInstanceName(), arrsize(ageInstName)); accInfo.SetAgeInstName(ageInstName); accInfo.SetAgeInstUuid(ageInstGuid); accInfo.SetOnline(true); rvnInfo->DecRef(); } switch (link->GetLinkingRules()) { case plNetCommon::LinkingRules::kOwnedBook: { // SPECIAL CASE: City: Every player ever created would be in the list; avoid that. if (city) break; { // Ensure we're in the AgeOwners folder RelVaultNode* fldr = VaultGetAgeAgeOwnersFolderIncRef(); RelVaultNode* info = VaultGetPlayerInfoNodeIncRef(); if (fldr && info) if (!fldr->IsParentOf(info->GetNodeId(), 1)) VaultAddChildNode( fldr->GetNodeId(), info->GetNodeId(), NetCommGetPlayer()->playerInt, nil, nil ); if (fldr) fldr->DecRef(); if (info) info->DecRef(); } } break; case plNetCommon::LinkingRules::kVisitBook: { // SPECIAL CASE: City: Every player ever created would be in the list; avoid that. if (city) break; { // Ensure we're in the CanVisit folder RelVaultNode* fldr = VaultGetAgeCanVisitFolderIncRef(); RelVaultNode* info = VaultGetPlayerInfoNodeIncRef(); if (fldr && info) if (!fldr->IsParentOf(info->GetNodeId(), 1)) VaultAddChildNode( fldr->GetNodeId(), info->GetNodeId(), NetCommGetPlayer()->playerInt, nil, nil ); if (fldr) fldr->DecRef(); if (info) info->DecRef(); } } break; case plNetCommon::LinkingRules::kSubAgeBook: { // Register the previous age as a sub age of the current one so that we can link back to that instance plAgeLinkStruct subAgeLink; VaultAgeFindOrCreateSubAgeLink(GetPrevAgeLink()->GetAgeInfo(), &subAgeLink, NetCommGetAge()->ageInstId); } break; } }
bool cyAccountManagement::IsActivePlayerSet() { return NetCommGetPlayer()->playerInt != 0; }
//============================================================================ void plNCAgeJoiner::ExecNextOp () { plNetClientMgr * nc = plNetClientMgr::GetInstance(); plAvatarMgr * am = plAvatarMgr::GetInstance(); plAgeLoader * al = plAgeLoader::GetInstance(); NextOp next = nextOp; nextOp = kNoOp; switch (next) { //==================================================================== case kNoOp: { } break; //==================================================================== case kLoadAge: { LogMsg(kLogPerf, L"AgeJoiner: Exec:kLoadAge"); // Start progress bar char str[256]; #ifdef PLASMA_EXTERNAL_RELEASE StrCopy(str, "Loading age...", arrsize(str)); #else StrPrintf(str, arrsize(str), "Loading age %s...", age.ageDatasetName); #endif progressBar = plProgressMgr::GetInstance()->RegisterOperation(0, str, plProgressMgr::kNone, false, true); plDispatch::SetMsgRecieveCallback(IDispatchMsgReceiveCallback); ((plResManager*)hsgResMgr::ResMgr())->SetProgressBarProc(IResMgrProgressBarCallback); // Start loading age data al->LoadAge(age.ageDatasetName); } break; //==================================================================== case kLoadPlayer: { LogMsg(kLogPerf, L"AgeJoiner: Exec:kLoadPlayer"); // Start loading local player const char * avatarName; if (NetCommNeedToLoadAvatar()) { if (nc->GetFlagsBit(plNetClientApp::kLinkingToOfflineAge)) avatarName = "Male"; else avatarName = NetCommGetPlayer()->avatarDatasetName; plString linkInName = plNetLinkingMgr::GetInstance()->GetAgeLink()->SpawnPoint().GetName(); am->LoadPlayer( avatarName, nil, linkInName.c_str() ); } else { LogMsg(kLogPerf, L"AgeJoiner: Next:kPropagatePlayer"); nextOp = kPropagatePlayer; } } break; //==================================================================== case kPropagatePlayer: { LogMsg(kLogPerf, L"AgeJoiner: Exec:kPropagatePlayer"); // Add our avatar to the scene int spawnPt = am->FindSpawnPoint(age.spawnPtName); nc->IPlayerChangeAge(false /*not exiting*/, spawnPt); if (!nc->GetFlagsBit(plNetClientApp::kLinkingToOfflineAge)) // Add our avatar to the game state am->PropagateLocalPlayer(spawnPt); LogMsg(kLogPerf, L"AgeJoiner: Next:kRequestAgeState"); nextOp = kRequestAgeState; } break; //============================================================================ case kRequestAgeState: { LogMsg(kLogPerf, L"AgeJoiner: Exec:kRequestAgeState"); if (nc->GetFlagsBit(plNetClientApp::kLinkingToOfflineAge)) { LogMsg(kLogPerf, L"AgeJoiner: Next:kSimStateRcvd"); nextOp = kSimStateRcvd; } else { // Request age player list nc->ISendMembersListRequest(); // Request initial SDL state plNetMsgGameStateRequest gsmsg; gsmsg.SetNetProtocol(kNetProtocolCli2Game); gsmsg.SetBit(plNetMessage::kInitialAgeStateRequest); nc->SendMsg(&gsmsg); // Send our avatar settings nc->SendLocalPlayerAvatarCustomizations(); } } break; //==================================================================== case kSimStateRcvd: { nc->NotifyRcvdAllSDLStates(); } break; //============================================================================ case kDestroyProgressBar: { plDispatch::SetMsgRecieveCallback(nil); ((plResManager*)hsgResMgr::ResMgr())->SetProgressBarProc(nil); delete progressBar; progressBar = nil; nc->EndTask(); nextOp = kEnableClickables; } break; //==================================================================== case kEnableClickables: { LogMsg(kLogPerf, L"AgeJoiner: Exec:kEnableClickables"); // Enable scene clickables (void)(new plInputIfaceMgrMsg(plInputIfaceMgrMsg::kEnableClickables))->Send(); LogMsg(kLogPerf, L"AgeJoiner: Next:kNotifyAgeLoaded"); nextOp = kNotifyAgeLoaded; } break; //==================================================================== case kNotifyAgeLoaded: { LogMsg(kLogPerf, L"AgeJoiner: Exec:kNotifyAgeLoaded"); nc->SetFlagsBit(plNetClientApp::kPlayingGame); nc->SetFlagsBit(plNetClientApp::kNeedToSendInitialAgeStateLoadedMsg); plAgeLoader::GetInstance()->NotifyAgeLoaded(true); nextOp = kNoOp; } break; DEFAULT_FATAL(nextOp); } }