From: <hel...@us...> - 2006-08-22 11:40:19
|
Revision: 10488 Author: hellcatv Date: 2006-08-22 04:40:16 -0700 (Tue, 22 Aug 2006) ViewCVS: http://svn.sourceforge.net/vegastrike/?rev=10488&view=rev Log Message: ----------- fixed fatal flaw with damage updates not being checked for null...also fixed bug with nonimportant units not being transmitted Modified Paths: -------------- trunk/vegastrike/src/networking/netclient_clients.cpp trunk/vegastrike/src/networking/netserver_clients.cpp Modified: trunk/vegastrike/src/networking/netclient_clients.cpp =================================================================== --- trunk/vegastrike/src/networking/netclient_clients.cpp 2006-08-22 11:29:28 UTC (rev 10487) +++ trunk/vegastrike/src/networking/netclient_clients.cpp 2006-08-22 11:40:16 UTC (rev 10488) @@ -43,26 +43,34 @@ float creds; bool update=true; vector<string> savedships; + string PLAYER_FACTION_STRING; + string * savegamestr=NULL; + if (cltname.length()) { // Parse the save buffer - save.ParseSaveGame( "", starsys, "", pos, update, creds, savedships, 0, savestr, false); + save.ParseSaveGame( "", starsys, "", pos, update, creds, savedships, 0, savestr, false); + + PLAYER_FACTION_STRING= save.GetPlayerFaction(); + + // CREATES THE UNIT... GET SAVE AND XML FROM SERVER + // Use the first ship if there are more than one -> we don't handle multiple ships for now + // We name the flightgroup with the player name + cerr<<"Found saveship[0] = "<<savedships[0]<<endl; + cerr<<"NEW PLAYER POSITION : x="<<pos.i<<",y="<<pos.j<<"z="<<pos.k<<endl; + + cerr<<"SAFE PLATER POSITION: x="<<pos.i<<",y="<<pos.j<<"z="<<pos.k<<endl; + savegamestr=&xmlstr; + }else { + savedships.push_back(savestr); + PLAYER_FACTION_STRING=xmlstr; + cltname = "Object_"+XMLSupport::tostring(cltserial); + } - string PLAYER_FACTION_STRING( save.GetPlayerFaction()); - - // CREATES THE UNIT... GET SAVE AND XML FROM SERVER - // Use the first ship if there are more than one -> we don't handle multiple ships for now - // We name the flightgroup with the player name - cerr<<"Found saveship[0] = "<<savedships[0]<<endl; - cerr<<"NEW PLAYER POSITION : x="<<pos.i<<",y="<<pos.j<<"z="<<pos.k<<endl; - - cerr<<"SAFE PLATER POSITION: x="<<pos.i<<",y="<<pos.j<<"z="<<pos.k<<endl; - - Unit * un = UnitFactory::createUnit( savedships[0].c_str(), false, FactionUtil::GetFactionIndex( PLAYER_FACTION_STRING), string(""), - Flightgroup::newFlightgroup ( callsign,savedships[0],PLAYER_FACTION_STRING,"default",1,1,"","",mission), - 0, &xmlstr); + Flightgroup::newFlightgroup ( cltname,savedships[0],PLAYER_FACTION_STRING,"default",1,1,"","",mission), + 0, savegamestr); ClientPtr clt = this->AddClientObject( un, cltserial); // Assign new coordinates to client @@ -415,6 +423,10 @@ void NetClient::receiveUnitDamage( NetBuffer &netbuf, Unit *un ) { size_t it=0; + if (!un) { + cerr<< "Received Damage Update for null unit"<<endl; + return; + } unsigned short damages; damages = netbuf.getShort(); Modified: trunk/vegastrike/src/networking/netserver_clients.cpp =================================================================== --- trunk/vegastrike/src/networking/netserver_clients.cpp 2006-08-22 11:29:28 UTC (rev 10487) +++ trunk/vegastrike/src/networking/netserver_clients.cpp 2006-08-22 11:40:16 UTC (rev 10488) @@ -318,14 +318,13 @@ string savestr, xmlstr; // Loop through client in the same zone to send their current_state and save and xml to "clt" - - ClientWeakList* lst = zonemgr->getZoneList(zoneid); - if( lst == NULL ) - { - COUT << "\t>>> WARNING: Did not send info about " << nbclients << " other ships because of empty (inconsistent?) zone" << endl; - return; - } - + std::set<ObjSerial> activeObjects; + ClientWeakList* lst = zonemgr->getZoneList(zoneid); + if( lst == NULL ) + { + COUT << "\t>>> WARNING: Did not send info about " << nbclients << " other ships because of empty (inconsistent?) zone" << endl; + } + else for( k=lst->begin(); k!=lst->end(); k++) { if( (*k).expired() ) continue; @@ -347,9 +346,28 @@ netbuf.addString( savestr); netbuf.addString( xmlstr); netbuf.addTransformation(kp->game_unit.GetUnit()->curr_physical_state); + activeObjects.insert(un->GetSerial()); nbclients++; } } - netbuf.addChar( ZoneMgr::End); + Unit *un; + for (un_iter ui=_Universe->star_system[zoneid]->getUnitList().createIterator(); + (un=*ui)!=NULL; + ++ui) { + ObjSerial ser=un->GetSerial(); + if (activeObjects.find(ser)==activeObjects.end()) { + netbuf.addChar( ZoneMgr::AddClient); + netbuf.addSerial( un->GetSerial()); + netbuf.addString( ""); + netbuf.addString( un->name); + netbuf.addString(FactionUtil::GetFactionName(un->faction)); + netbuf.addTransformation(un->curr_physical_state); + activeObjects.insert(un->GetSerial()); + nbclients++; + + } + } + netbuf.addChar( ZoneMgr::End); + COUT<<"\t>>> GOT INFO ABOUT "<<nbclients<<" OTHER SHIPS"<<endl; } |