Example #1
0
void SpawnAtBase::Event (bz_EventData *eventData)
{
    switch (eventData->eventType)
    {
        case bz_eGetPlayerSpawnPosEvent: // This event is called each time the server needs a new spawn postion
        {
            bz_GetPlayerSpawnPosEventData_V1* spawnData = (bz_GetPlayerSpawnPosEventData_V1*)eventData;

            if (bz_getPlayerSpawnAtBase(spawnData->playerID) && !TeamZones[spawnData->team].empty())
            {
                spawnData->handled = true;

                float spawnLocation[3];

                BaseSpawnZone zone = *select_randomly(TeamZones[spawnData->team].begin(), TeamZones[spawnData->team].end());
                bz_getRandomPoint((bz_CustomZoneObject*)&zone, spawnLocation);

                spawnData->pos[0] = spawnLocation[0];
                spawnData->pos[1] = spawnLocation[1];
                spawnData->pos[2] = spawnLocation[2];
            }
        }
        break;

        default: break;
    }
}
Example #2
0
node_id_t dssim_t::get_rand_server() {
   // Conceptually a broadcast message, or a name service
   std::vector<node_id_t> servers;
   for(auto& node_pair : nodes) {
      if(node_pair.second->server()) 
         servers.push_back(node_pair.second->get_nid());
   }
   auto it = select_randomly(std::begin(servers), std::end(servers), rand_gen);
   if(it == servers.end()) return (node_id_t)0;
   return *it;
}
Example #3
0
Iter select_randomly(Iter start, Iter end) {
    static std::random_device rd;
    static std::mt19937 gen(rd());

    return select_randomly(start, end, gen);
}