UnitBase * UnitInterface::newUnit( unsigned short unit_type, const iXY &location, unsigned short player_index, UnitID id) { UnitBase* unit = 0; bool color_flag; unsigned char unit_flag; if ( player_index == PlayerInterface::getLocalPlayerIndex() ) { color_flag = true; } else { color_flag = false; } PlayerState* player = PlayerInterface::getPlayer( player_index ); unit_flag = player->getFlag(); if ( unit_type < UnitProfileInterface::getNumUnitTypes() ) { unit = new Vehicle(player, unit_type, id, location); } else { // XXX change for a error window assert("unknown unit_type" == 0); } return unit; }
void tPlayerStateBox::onPaint(Surface &dst, const DataItem& data) { char statBuf[256]; int StartX = 1; PlayerState *state = (PlayerState*)(data.Data); if (DrawFlags) { Surface * flag = 0; flag = ResourceManager::getFlag(state->getFlag()); flag->blt(dst, 0, 0); StartX = flag->getWidth()+4; } snprintf(statBuf, sizeof(statBuf), "%-20s", state->getName().c_str()); dst.bltString(StartX , 4, statBuf, ctTexteNormal); }
void NetworkServer::onClientDisconected(ClientSocket *s, const char * msg) { LOGGER.debug("NetworkServer::onClientDisconected( %d, '%s')", s->getId(), msg); bool cleandisconnect = false; bool sendalert = true; if ( ServerConnectDaemon::inConnectQueue(s) ) { // player was connecting and dropped. ServerConnectDaemon::removeClientFromQueue(s); sendalert = false; LOGGER.debug("NetworkServer::onClientDisconected player was connecting"); } if ( NetworkInterface::receive_queue.isReady() ) { unsigned long frontsave = NetworkInterface::receive_queue.front; while ( NetworkInterface::receive_queue.isReady() ) { LOGGER.debug("NetworkServer::onClientDisconected there was a packet"); NetPacket packet; NetworkInterface::receive_queue.dequeue(&packet); if ( packet.fromClient == s ) { LOGGER.debug("NetworkServer::onClientDisconected the packet was from our friend"); const NetMessage * netmessage = packet.getNetMessage(); if ( netmessage->message_class == _net_message_class_connect && netmessage->message_id == _net_message_id_connect_netPanzer_client_disconnect ) { LOGGER.debug("NetworkServer::onClientDisconected so is a clean disconnect"); cleandisconnect = true; } } } NetworkInterface::receive_queue.front = frontsave; } PlayerID player_index = s->getPlayerIndex(); ClientList::iterator i = client_list.begin(); while ( i != client_list.end() ) { if ( (*i)->client_socket == s ) { LOGGER.debug("NetworkServer:onClientDisconnected found client in list, preparing to die [%d]", player_index); (*i)->wannadie = true; break; } ++i; } if ( player_index != INVALID_PLAYER_ID ) { PlayerState * player = PlayerInterface::getPlayer(player_index); if ( player && sendalert ) { ConsoleInterface::postMessage(Color::cyan, true, player->getFlag(), "'%s' has left.", player->getName().c_str()); } ObjectiveInterface::disownPlayerObjectives( player_index ); UnitInterface::destroyPlayerUnits( player_index ); PlayerInterface::disconnectPlayerCleanup( player_index ); if ( sendalert ) { SystemConnectAlert msg; if ( cleandisconnect ) { msg.set( player_index, _connect_alert_mesg_disconnect); } else { msg.set( player_index, _connect_alert_mesg_client_drop ); } SERVER->broadcastMessage(&msg, sizeof(msg)); } } // LOGGER.warning("NetworkServer::onClientDisconected( %d, '%s')", s->getId(), msg); }
void NetworkServer::onClientDisconected(ClientSocket *s, const char * msg) { LOGGER.debug("NetworkServer::onClientDisconected( %d, '%s')", s->getId(), msg ? msg : "nice"); bool cleandisconnect = false; bool sendalert = true; if ( ServerConnectDaemon::inConnectQueue(s) ) { // player was connecting and dropped. ServerConnectDaemon::removeClientFromQueue(s); sendalert = false; LOGGER.debug("NetworkServer::onClientDisconected player was connecting"); } if ( NetworkInterface::receive_queue.isReady() ) { unsigned long frontsave = NetworkInterface::receive_queue.front; while ( NetworkInterface::receive_queue.isReady() ) { LOGGER.debug("NetworkServer::onClientDisconected there was a packet"); NetPacket packet; NetworkInterface::receive_queue.dequeue(&packet); if ( packet.fromClient == s ) { LOGGER.debug("NetworkServer::onClientDisconected the packet was from our friend"); const NetMessage * netmessage = packet.getNetMessage(); if ( netmessage->message_class == _net_message_class_connect && netmessage->message_id == _net_message_id_connect_netPanzer_client_disconnect ) { LOGGER.debug("NetworkServer::onClientDisconected so is a clean disconnect"); cleandisconnect = true; } } } NetworkInterface::receive_queue.front = frontsave; } PlayerID player_index = s->getPlayerIndex(); if ( player_index != INVALID_PLAYER_ID ) { PlayerState * player = PlayerInterface::getPlayer(player_index); bool kicked = player ? player->isKicked() : false; if ( player && sendalert && ! kicked) { if (GameConfig::game_teammode == true) ConsoleInterface::postMessage(Color::cyan, true, player->getFlag(), _("'%s' has left."), player->getName().c_str()); } ObjectiveInterface::disownPlayerObjectives( player_index ); UnitInterface::destroyPlayerUnits( player_index ); PlayerInterface::disconnectPlayerCleanup( player_index ); if ( sendalert ) { SystemConnectAlert scmsg; if ( cleandisconnect || ! msg ) { scmsg.set( player_index, _connect_alert_mesg_disconnect); } else if ( kicked ) { scmsg.set( player_index, _connect_alert_mesg_client_kicked); } else { scmsg.set( player_index, _connect_alert_mesg_client_drop ); } SERVER->broadcastMessage(&scmsg, sizeof(scmsg)); } if (GameConfig::game_teammode == true) { TeamManager::removePlayer(player->getID(), player->getTeamID()); TeamManager::BalancedTeam(); } } }