bool pyVaultPlayerInfoListNode::AddPlayer( uint32_t playerID )
{
    if (HasPlayer(playerID))
        return true;
        
    if (!fNode)
        return false;
        
    NetVaultNode * templateNode = NEWZERO(NetVaultNode);
    templateNode->IncRef();
    templateNode->SetNodeType(plVault::kNodeType_PlayerInfo);
    VaultPlayerInfoNode access(templateNode);
    access.SetPlayerId(playerID);

    ARRAY(unsigned) nodeIds;
    VaultLocalFindNodes(templateNode, &nodeIds);
    
    if (!nodeIds.Count())
        VaultFindNodesAndWait(templateNode, &nodeIds);
        
    if (nodeIds.Count())
        VaultAddChildNodeAndWait(fNode->nodeId, nodeIds[0], VaultGetPlayerId());
        
    templateNode->DecRef();
    return nodeIds.Count() != 0;
}
void pyVaultPlayerInfoListNode::AddPlayer( uint32_t playerID )
{
    if (HasPlayer(playerID) || !fNode)
        return;

    NetVaultNode* templateNode = new NetVaultNode();
    templateNode->IncRef();
    templateNode->SetNodeType(plVault::kNodeType_PlayerInfo);
    VaultPlayerInfoNode access(templateNode);
    access.SetPlayerId(playerID);

    ARRAY(uint32_t) nodeIds;
    VaultLocalFindNodes(templateNode, &nodeIds);

    // So, if we know about this node, we can take it easy. If not, we lazy load it.
    if (nodeIds.Count())
        VaultAddChildNode(fNode->GetNodeId(), nodeIds[0], VaultGetPlayerId(), nullptr, nullptr);
    else {
        fNode->IncRef();
        VaultFindNodes(templateNode, IAddPlayer_NodesFound, fNode);
    }
}