From: <geo...@us...> - 2013-05-26 12:55:18
|
Revision: 6080 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=6080&view=rev Author: geoffthemedio Date: 2013-05-26 12:55:11 +0000 (Sun, 26 May 2013) Log Message: ----------- Added random seeding before effects execution during turn processing, as I was seeing some very non-random results in field spawning, consistent between turns, and this seems to have helped. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2013-05-26 12:54:08 UTC (rev 6079) +++ trunk/FreeOrion/server/ServerApp.cpp 2013-05-26 12:55:11 UTC (rev 6080) @@ -39,6 +39,7 @@ namespace fs = boost::filesystem; +void Seed(unsigned int seed); //////////////////////////////////////////////// // PlayerSaveGameData @@ -2345,6 +2346,7 @@ } // execute all effects and update meters prior to production, research, etc. + Seed(CurrentTurn()); m_universe.ApplyAllEffectsAndUpdateMeters(); if (GetOptionsDB().Get<bool>("verbose-logging")) { |
From: <geo...@us...> - 2013-07-27 10:22:46
|
Revision: 6272 http://sourceforge.net/p/freeorion/code/6272 Author: geoffthemedio Date: 2013-07-27 10:22:42 +0000 (Sat, 27 Jul 2013) Log Message: ----------- tpyo Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2013-07-27 10:19:49 UTC (rev 6271) +++ trunk/FreeOrion/server/ServerApp.cpp 2013-07-27 10:22:42 UTC (rev 6272) @@ -2537,7 +2537,7 @@ // update current turn number so that following visibility updates and info // sent to players will have updated turn associated with them ++m_current_turn; - Logger().debugStream() << "ServerApp::PostCombatProcessTurns Turn number incremetned to " << m_current_turn; + Logger().debugStream() << "ServerApp::PostCombatProcessTurns Turn number incremented to " << m_current_turn; // new turn visibility update |
From: <geo...@us...> - 2013-08-16 05:53:12
|
Revision: 6341 http://sourceforge.net/p/freeorion/code/6341 Author: geoffthemedio Date: 2013-08-16 05:53:06 +0000 (Fri, 16 Aug 2013) Log Message: ----------- Small patch by yandonman adding timing to server turn processing functions. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2013-08-15 20:45:27 UTC (rev 6340) +++ trunk/FreeOrion/server/ServerApp.cpp 2013-08-16 05:53:06 UTC (rev 6341) @@ -22,6 +22,7 @@ #include "../util/Order.h" #include "../util/OrderSet.h" #include "../util/SitRepEntry.h" +#include "../util/ScopedTimer.h" #include <GG/SignalsAndSlots.h> @@ -32,6 +33,7 @@ #include <boost/functional/hash.hpp> #include <boost/thread/thread.hpp> + #include <ctime> namespace fs = boost::filesystem; @@ -2126,6 +2128,8 @@ } void ServerApp::PreCombatProcessTurns() { + + ScopedTimer timer("ServerApp::PreCombatProcessTurns", true); ObjectMap& objects = m_universe.Objects(); @@ -2253,6 +2257,7 @@ } void ServerApp::ProcessCombats() { + ScopedTimer timer("ServerApp::ProcessCombats", true); Logger().debugStream() << "ServerApp::ProcessCombats"; m_networking.SendMessage(TurnProgressMessage(Message::COMBAT)); @@ -2374,6 +2379,9 @@ } void ServerApp::PostCombatProcessTurns() { + + ScopedTimer timer("ServerApp::PostCombatProcessTurns", true); + EmpireManager& empires = Empires(); ObjectMap& objects = m_universe.Objects(); |
From: <geo...@us...> - 2013-10-28 04:49:24
|
Revision: 6489 http://sourceforge.net/p/freeorion/code/6489 Author: geoffthemedio Date: 2013-10-28 04:49:21 +0000 (Mon, 28 Oct 2013) Log Message: ----------- Bombardment state resetting, to prevent inconsistencies between server and clients. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2013-10-28 00:52:29 UTC (rev 6488) +++ trunk/FreeOrion/server/ServerApp.cpp 2013-10-28 04:49:21 UTC (rev 6489) @@ -2127,6 +2127,22 @@ } } } + + /** Removes bombardment state info from objects. Actual effects of + * bombardment are handled during */ + void CleanUpBombardmentStateInfo() { + for (ObjectMap::iterator<Ship> it = GetUniverse().Objects().begin<Ship>(); + it != GetUniverse().Objects().end<Ship>(); ++it) + { it->ClearBombardPlanet(); } + for (ObjectMap::iterator<Planet> it = GetUniverse().Objects().begin<Planet>(); + it != GetUniverse().Objects().end<Planet>(); ++it) + { + if (it->IsAboutToBeBombarded()) { + //Logger().debugStream() << "CleanUpBombardmentStateInfo: " << it->Name() << " was about to be bombarded"; + it->ResetIsAboutToBeBombarded(); + } + } + } } void ServerApp::PreCombatProcessTurns() { @@ -2141,6 +2157,10 @@ // inform players of order execution m_networking.SendMessage(TurnProgressMessage(Message::PROCESSING_ORDERS)); + // clear bombardment state before executing orders, so result after is only + // determined by what orders set. + CleanUpBombardmentStateInfo(); + // execute orders for (std::map<int, OrderSet*>::iterator it = m_turn_sequence.begin(); it != m_turn_sequence.end(); ++it) { OrderSet* order_set = it->second; @@ -2409,7 +2429,7 @@ if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!!!!!!!!!!!!!!!!!BEFORE TURN PROCESSING EFFECTS APPLICATION"; + Logger().debugStream() << "!!!!!!! BEFORE TURN PROCESSING EFFECTS APPLICATION"; Logger().debugStream() << objects.Dump(); } @@ -2418,7 +2438,7 @@ m_universe.ApplyAllEffectsAndUpdateMeters(); if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!!!!!!!!!!!!!!!!!AFTER TURN PROCESSING EFFECTS APPLICATION"; + Logger().debugStream() << "!!!!!!! AFTER TURN PROCESSING EFFECTS APPLICATION"; Logger().debugStream() << objects.Dump(); } @@ -2446,12 +2466,12 @@ if (!empires.Eliminated(it->first)) { Empire* empire = it->second; empire->UpdateAvailableLanes(); - empire->UpdateUnobstructedFleets(); // must be done after *all* noneliminated empires have updated their unobstructed systems + empire->UpdateUnobstructedFleets(); // must be done after *all* noneliminated empires have updated their unobstructed systems } } if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!!!!!!!!!!!!!!!!!AFTER UPDATING RESOURCE POOLS AND SUPPLY STUFF"; + Logger().debugStream() << "!!!!!!! AFTER UPDATING RESOURCE POOLS AND SUPPLY STUFF"; Logger().debugStream() << objects.Dump(); } @@ -2472,10 +2492,11 @@ if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!!!!!!!!!!!!!!!!!AFTER CHECKING QUEUE AND RESOURCE PROGRESS"; + Logger().debugStream() << "!!!!!!! AFTER CHECKING QUEUE AND RESOURCE PROGRESS"; Logger().debugStream() << objects.Dump(); } + // Execute meter-related effects on objects created this turn, so that new // UniverseObjects will have effects applied to them this turn, allowing // (for example) ships to have max fuel meters greater than 0 on the turn @@ -2483,7 +2504,7 @@ m_universe.ApplyMeterEffectsAndUpdateMeters(); if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!!!!!!!!!!!!!!!!!AFTER UPDATING METERS OF ALL OBJECTS"; + Logger().debugStream() << "!!!!!!! AFTER UPDATING METERS OF ALL OBJECTS"; Logger().debugStream() << objects.Dump(); } |
From: <geo...@us...> - 2014-01-14 04:09:52
|
Revision: 6642 http://sourceforge.net/p/freeorion/code/6642 Author: geoffthemedio Date: 2014-01-14 04:09:46 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Added extra check to remove empty fleets after orders are executed, due to observing AIs with empty fleets. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-01-13 20:20:18 UTC (rev 6641) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-01-14 04:09:46 UTC (rev 6642) @@ -1794,6 +1794,7 @@ TemporaryPtr<System> system = GetSystem(ship->SystemID()); + // destroy colonizing ship, and its fleet if now empty TemporaryPtr<Fleet> fleet = GetFleet(ship->FleetID()); if (fleet) { fleet->RemoveShip(ship->ID()); @@ -2017,25 +2018,25 @@ TemporaryPtr<System> system = GetSystem(ship->SystemID()); - // destroy invading ships + // destroy invading ships and their fleets if now empty TemporaryPtr<Fleet> fleet = GetFleet(ship->FleetID()); - if (fleet) + if (fleet) { fleet->RemoveShip(ship->ID()); - if (fleet->Empty()) { - if (system) - system->Remove(fleet->ID()); - GetUniverse().Destroy(fleet->ID()); + if (fleet->Empty()) { + if (system) + system->Remove(fleet->ID()); + GetUniverse().Destroy(fleet->ID()); + } } if (system) system->Remove(ship->ID()); - Logger().debugStream() << "HandleInvasion has accounted for "<< design->TroopCapacity() << " troops to invade " << planet->Name() << " and is destroying ship " << ship->ID() << " named " << ship->Name(); - GetUniverse().Destroy(ship->ID()); + GetUniverse().RecursiveDestroy(ship->ID()); } // check each planet for other troops, such as due to empire troops, native troops, or rebel troops @@ -2182,6 +2183,24 @@ } } } + + /** Deletes empty fleets. */ + void CleanEmptyFleets() { + std::vector<TemporaryPtr<Fleet> > fleets = Objects().FindObjects<Fleet>(); + for (std::vector<TemporaryPtr<Fleet> >::iterator it = fleets.begin(); + it != fleets.end(); ++it) + { + TemporaryPtr<Fleet> fleet = *it; + if (!fleet->Empty()) + continue; + + TemporaryPtr<System> sys = GetSystem(fleet->SystemID()); + if (sys) + sys->Remove(fleet->ID()); + + GetUniverse().RecursiveDestroy(fleet->ID()); + } + } } void ServerApp::PreCombatProcessTurns() { @@ -2214,6 +2233,9 @@ // clean up orders, which are no longer needed ClearEmpireTurnOrders(); + // clean up empty fleets that empires didn't order deleted + CleanEmptyFleets(); + // update production queues after order execution for (EmpireManager::iterator it = Empires().begin(); it != Empires().end(); ++it) { if (Empires().Eliminated(it->first)) |
From: <geo...@us...> - 2014-01-26 00:07:34
|
Revision: 6710 http://sourceforge.net/p/freeorion/code/6710 Author: geoffthemedio Date: 2014-01-26 00:07:31 +0000 (Sun, 26 Jan 2014) Log Message: ----------- Reset ship colonization target after recording the info so that failed colonization doesn't leave the ship and planet in inconsistent state. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-01-25 23:22:22 UTC (rev 6709) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-01-26 00:07:31 UTC (rev 6710) @@ -1852,11 +1852,7 @@ std::vector<TemporaryPtr<Ship> > ships = GetUniverse().Objects().FindObjects<Ship>(); for (std::vector<TemporaryPtr<Ship> >::iterator it = ships.begin(); it != ships.end(); ++it) { - TemporaryPtr<const Ship> ship = *it; - if (!ship) { - Logger().errorStream() << "HandleColonization couldn't get ship"; - continue; - } + TemporaryPtr<Ship> ship = *it; if (ship->Unowned()) continue; int owner_empire_id = ship->Owner(); @@ -1867,6 +1863,9 @@ int colonize_planet_id = ship->OrderedColonizePlanet(); if (colonize_planet_id == INVALID_OBJECT_ID) continue; + + ship->SetColonizePlanet(INVALID_OBJECT_ID); // reset so failed colonization doesn't leave ship with hanging colonization order set + TemporaryPtr<Planet> planet = GetPlanet(colonize_planet_id); if (!planet) continue; |
From: <geo...@us...> - 2014-01-26 18:42:51
|
Revision: 6742 http://sourceforge.net/p/freeorion/code/6742 Author: geoffthemedio Date: 2014-01-26 18:42:47 +0000 (Sun, 26 Jan 2014) Log Message: ----------- Commented out some server logging. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-01-26 18:42:06 UTC (rev 6741) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-01-26 18:42:47 UTC (rev 6742) @@ -1596,8 +1596,8 @@ object_it != object_ids.end(); ++object_it) { int object_id = *object_it; - Logger().debugStream() << "Setting knowledge of destroyed object " << object_id - << " for empire " << empire_id; + //Logger().debugStream() << "Setting knowledge of destroyed object " << object_id + // << " for empire " << empire_id; universe.SetEmpireKnowledgeOfDestroyedObject(object_id, empire_id); // should empire also be informed of potential fleet @@ -1636,8 +1636,8 @@ empire_it != empire_ids.end(); ++empire_it) { int empire_id = *empire_it; - Logger().debugStream() << "Setting knowledge of destroyed object " << fleet_id - << " for empire " << empire_id; + //Logger().debugStream() << "Setting knowledge of destroyed object " << fleet_id + // << " for empire " << empire_id; universe.SetEmpireKnowledgeOfDestroyedObject(fleet_id, empire_id); } } @@ -1690,13 +1690,12 @@ for (std::set<int>::const_iterator dest_obj_it = destroyed_object_ids.begin(); dest_obj_it != destroyed_object_ids.end(); ++dest_obj_it) { - Logger().debugStream() << "Creating destroyed object sitrep for empire " << empire_id << " and object " << *dest_obj_it; - if (TemporaryPtr<UniverseObject> obj = GetEmpireKnownObject(*dest_obj_it, empire_id)) { - Logger().debugStream() << "Object known to empire: " << obj->Dump(); - } - else { - Logger().debugStream() << "Object not known to empire"; - } + //Logger().debugStream() << "Creating destroyed object sitrep for empire " << empire_id << " and object " << *dest_obj_it; + //if (TemporaryPtr<UniverseObject> obj = GetEmpireKnownObject(*dest_obj_it, empire_id)) { + // Logger().debugStream() << "Object known to empire: " << obj->Dump(); + //} else { + // Logger().debugStream() << "Object not known to empire"; + //} empire->AddSitRepEntry(CreateCombatDestroyedObjectSitRep(*dest_obj_it, combat_info.system_id, empire_id)); } @@ -1708,30 +1707,30 @@ object_it != combat_info.damaged_object_ids.end(); ++object_it) { int damaged_object_id = *object_it; - Logger().debugStream() << "Checking object " << damaged_object_id << " for damaged sitrep"; + //Logger().debugStream() << "Checking object " << damaged_object_id << " for damaged sitrep"; // is object destroyed? If so, don't need a damage sitrep if (combat_info.destroyed_object_ids.find(damaged_object_id) != combat_info.destroyed_object_ids.end()) { - Logger().debugStream() << "Object is destroyed and doesn't need a sitrep."; + //Logger().debugStream() << "Object is destroyed and doesn't need a sitrep."; continue; } // which empires know about this object? for (std::map<int, ObjectMap>::const_iterator empire_it = combat_info.empire_known_objects.begin(); empire_it != combat_info.empire_known_objects.end(); ++empire_it) { - Logger().debugStream() << "Checking if empire " << empire_it->first << " knows about the object."; + //Logger().debugStream() << "Checking if empire " << empire_it->first << " knows about the object."; // does this empire know about this object? const ObjectMap& objects = empire_it->second; if (!objects.Object(damaged_object_id)) { - Logger().debugStream() << "Nope."; + //Logger().debugStream() << "Nope."; continue; } - Logger().debugStream() << "Yep."; + //Logger().debugStream() << "Yep."; // empire knows about object, so generate a sitrep about it int empire_id = empire_it->first; Empire* empire = Empires().Lookup(empire_id); if (!empire) continue; - Logger().debugStream() << "Creating sitrep."; + //Logger().debugStream() << "Creating sitrep."; empire->AddSitRepEntry(CreateCombatDamagedObjectSitRep(damaged_object_id, combat_info.system_id, empire_id)); } |
From: <geo...@us...> - 2014-02-03 10:21:00
|
Revision: 6824 http://sourceforge.net/p/freeorion/code/6824 Author: geoffthemedio Date: 2014-02-03 10:20:57 +0000 (Mon, 03 Feb 2014) Log Message: ----------- Recorded invasion species statistics in empire. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-02-03 08:10:26 UTC (rev 6823) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-02-03 10:20:57 UTC (rev 6824) @@ -1791,6 +1791,36 @@ } } + /** Records info in Empires about where they invaded. */ + void UpdateEmpireInvasionInfo(const std::map<int, std::map<int, double> >& planet_empire_invasion_troops) { + for (std::map<int, std::map<int, double> >::const_iterator it = planet_empire_invasion_troops.begin(); + it != planet_empire_invasion_troops.end(); ++it) + { + int planet_id = it->first; + TemporaryPtr<const Planet> planet = GetPlanet(planet_id); + if (!planet) + continue; + const std::string& planet_species = planet->SpeciesName(); + if (planet_species.empty()) + continue; + + for (std::map<int, double>::const_iterator empire_it = it->second.begin(); + empire_it != it->second.end(); ++empire_it) + { + Empire* invader_empire = Empires().Lookup(empire_it->first); + if (!invader_empire) + continue; + + std::map<std::string, int>::iterator species_it = + invader_empire->SpeciesPlanetsInvaded().find(planet_species); + if (species_it == invader_empire->SpeciesPlanetsInvaded().end()) + invader_empire->SpeciesPlanetsInvaded()[planet_species] = 1; + else + species_it->second++; + } + } + } + /** Does colonization, with safety checks */ bool ColonizePlanet(int ship_id, int planet_id) { TemporaryPtr<Ship> ship = GetShip(ship_id); @@ -1999,8 +2029,8 @@ * ground combat resolution */ void HandleInvasion() { std::map<int, std::map<int, double> > planet_empire_troops; // map from planet ID to map from empire ID to pair consisting of set of ship IDs and amount of troops empires have at planet - std::vector<TemporaryPtr<Ship> > ships = GetUniverse().Objects().FindObjects<Ship>(); - std::vector<TemporaryPtr<Planet> > planets = GetUniverse().Objects().FindObjects<Planet>(); + std::vector<TemporaryPtr<Ship> > ships = Objects().FindObjects<Ship>(); + std::vector<TemporaryPtr<Planet> > planets = Objects().FindObjects<Planet>(); // assemble invasion forces from each invasion ship for (std::vector<TemporaryPtr<Ship> >::iterator it = ships.begin(); it != ships.end(); ++it) { @@ -2053,8 +2083,12 @@ GetUniverse().RecursiveDestroy(ship->ID()); } + // store invasion info in empires + UpdateEmpireInvasionInfo(planet_empire_troops); + // check each planet for other troops, such as due to empire troops, native troops, or rebel troops - for (std::vector<TemporaryPtr<Planet> >::iterator planet_it = planets.begin(); planet_it != planets.end(); ++planet_it) { + for (std::vector<TemporaryPtr<Planet> >::iterator planet_it = planets.begin(); + planet_it != planets.end(); ++planet_it) { TemporaryPtr<Planet> planet = *planet_it; if (!planet) { Logger().errorStream() << "HandleInvasion couldn't get planet"; |
From: <geo...@us...> - 2014-02-04 13:15:06
|
Revision: 6829 http://sourceforge.net/p/freeorion/code/6829 Author: geoffthemedio Date: 2014-02-04 13:15:04 +0000 (Tue, 04 Feb 2014) Log Message: ----------- Rearrangement of turn processing steps by cami, to update system graph after effects, avoid meter updates between production and growth so buildings and techs take effect on the turn after they are researched, and update target/max/unpaired meters after growth to improve consistency between server results and client meter estimates. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-02-04 13:12:45 UTC (rev 6828) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-02-04 13:15:04 UTC (rev 6829) @@ -2674,6 +2674,10 @@ Seed(CurrentTurn()); m_universe.ApplyAllEffectsAndUpdateMeters(); + // regenerate system connectivity graph after executing effects, which may + // have added or removed starlanes. + m_universe.InitializeSystemGraph(); + if (GetOptionsDB().Get<bool>("verbose-logging")) { Logger().debugStream() << "!!!!!!! AFTER TURN PROCESSING EFFECTS APPLICATION"; Logger().debugStream() << objects.Dump(); @@ -2734,22 +2738,6 @@ } - // Execute meter-related effects on objects created this turn, so that new - // UniverseObjects will have effects applied to them this turn, allowing - // (for example) ships to have max fuel meters greater than 0 on the turn - // they are created. - m_universe.ApplyMeterEffectsAndUpdateMeters(); - - if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!! AFTER UPDATING METERS OF ALL OBJECTS"; - Logger().debugStream() << objects.Dump(); - } - - // regenerate system connectivity graph after executing effects, which may - // have added or removed starlanes. - m_universe.InitializeSystemGraph(); - - // Population growth or loss, resource current meter growth, etc. for (ObjectMap::iterator<> it = objects.begin(); it != objects.end(); ++it) { it->PopGrowthProductionResearchPhase(); @@ -2763,6 +2751,22 @@ } + // Execute meter-related effects on objects created this turn, so that new + // UniverseObjects will have effects applied to them this turn, allowing + // (for example) ships to have max fuel meters greater than 0 on the turn + // they are created. + m_universe.ApplyMeterEffectsAndUpdateTargetMaxUnpairedMeters(); + + // store initial values of meters for this turn. + m_universe.BackPropegateObjectMeters(); + empires.BackPropegateMeters(); + + if (GetOptionsDB().Get<bool>("verbose-logging")) { + Logger().debugStream() << "!!!!!!! AFTER UPDATING METERS OF ALL OBJECTS"; + Logger().debugStream() << objects.Dump(); + } + + // check for loss of empire capitals for (EmpireManager::iterator empire_it = empires.begin(); empire_it != empires.end(); ++empire_it) { int capital_id = empire_it->second->CapitalID(); @@ -2775,11 +2779,7 @@ } - // store initial values of meters for this turn. - m_universe.BackPropegateObjectMeters(); - empires.BackPropegateMeters(); - // store any changes in objects from various progress functions // before updating visibility again, so that if the // visibility update removes an empires ability to detect an object, the |
From: <geo...@us...> - 2014-02-05 20:05:14
|
Revision: 6839 http://sourceforge.net/p/freeorion/code/6839 Author: geoffthemedio Date: 2014-02-05 20:05:11 +0000 (Wed, 05 Feb 2014) Log Message: ----------- Reverted part of recent change so that post-production meter udpate affectes all meters, not just target/max/unpaired. This fixes an issue where newly produced ships has 0 structure and fuel. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-02-05 07:05:20 UTC (rev 6838) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-02-05 20:05:11 UTC (rev 6839) @@ -2757,8 +2757,8 @@ // UniverseObjects will have effects applied to them this turn, allowing // (for example) ships to have max fuel meters greater than 0 on the turn // they are created. - m_universe.ApplyMeterEffectsAndUpdateTargetMaxUnpairedMeters(); - + m_universe.ApplyMeterEffectsAndUpdateMeters(); + // store initial values of meters for this turn. m_universe.BackPropegateObjectMeters(); empires.BackPropegateMeters(); |
From: <dil...@us...> - 2014-02-06 22:08:41
|
Revision: 6846 http://sourceforge.net/p/freeorion/code/6846 Author: dilvish-fo Date: 2014-02-06 22:08:36 +0000 (Thu, 06 Feb 2014) Log Message: ----------- continues the partial reversion begin in [6839], reordering some portions of server code so that meter updates are handled properly Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-02-06 12:48:19 UTC (rev 6845) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-02-06 22:08:36 UTC (rev 6846) @@ -2718,7 +2718,6 @@ Logger().debugStream() << objects.Dump(); } - Logger().debugStream() << "ServerApp::PostCombatProcessTurns queue progress checking"; // Consume distributed resources to planets and on queues, create new @@ -2739,7 +2738,17 @@ Logger().debugStream() << objects.Dump(); } + // Execute meter-related effects on objects created this turn, so that new + // UniverseObjects will have effects applied to them this turn, allowing + // (for example) ships to have max fuel meters greater than 0 on the turn + // they are created. + m_universe.ApplyMeterEffectsAndUpdateMeters(); + if (GetOptionsDB().Get<bool>("verbose-logging")) { + Logger().debugStream() << "!!!!!!! AFTER UPDATING METERS OF ALL OBJECTS"; + Logger().debugStream() << objects.Dump(); + } + // Population growth or loss, resource current meter growth, etc. for (ObjectMap::iterator<> it = objects.begin(); it != objects.end(); ++it) { it->PopGrowthProductionResearchPhase(); @@ -2752,23 +2761,11 @@ Logger().debugStream() << objects.Dump(); } - - // Execute meter-related effects on objects created this turn, so that new - // UniverseObjects will have effects applied to them this turn, allowing - // (for example) ships to have max fuel meters greater than 0 on the turn - // they are created. - m_universe.ApplyMeterEffectsAndUpdateMeters(); - // store initial values of meters for this turn. m_universe.BackPropegateObjectMeters(); empires.BackPropegateMeters(); - if (GetOptionsDB().Get<bool>("verbose-logging")) { - Logger().debugStream() << "!!!!!!! AFTER UPDATING METERS OF ALL OBJECTS"; - Logger().debugStream() << objects.Dump(); - } - // check for loss of empire capitals for (EmpireManager::iterator empire_it = empires.begin(); empire_it != empires.end(); ++empire_it) { int capital_id = empire_it->second->CapitalID(); |
From: <geo...@us...> - 2014-02-09 12:25:17
|
Revision: 6871 http://sourceforge.net/p/freeorion/code/6871 Author: geoffthemedio Date: 2014-02-09 12:25:12 +0000 (Sun, 09 Feb 2014) Log Message: ----------- Tweak to eliminate logs of combats between native troops and nothing. Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-02-09 07:47:28 UTC (rev 6870) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-02-09 12:25:12 UTC (rev 6871) @@ -1198,12 +1198,9 @@ /** Returns true if \a empire has been eliminated by the applicable * definition of elimination. As of this writing, elimination means * having no ships and no fleets. */ - bool EmpireEliminated(const Empire* empire, const Universe& universe) { - if (!empire) - return false; - int empire_id = empire->EmpireID(); - return (universe.Objects().FindObjects(OwnedVisitor<Planet>(empire_id)).empty() && // no planets - universe.Objects().FindObjects(OwnedVisitor<Fleet>(empire_id)).empty()); // no fleets + bool EmpireEliminated(int empire_id) { + return (Objects().FindObjects(OwnedVisitor<Planet>(empire_id)).empty() && // no planets + Objects().FindObjects(OwnedVisitor<Fleet>(empire_id)).empty()); // no fleets } /** Compiles and return set of ids of empires that are controlled by a @@ -2116,10 +2113,14 @@ std::map<int, double>& empires_troops = planet_it->second; if (empires_troops.empty()) continue; - else if (empires_troops.size() < 2) { + else if (empires_troops.size() == 1) { int empire_with_troops_id = empires_troops.begin()->first; + if (planet->Unowned() && empire_with_troops_id == ALL_EMPIRES) + continue; + if (planet->OwnedBy(empire_with_troops_id)) { continue; // if troops all belong to planet owner, not a combat. + } else { //Logger().debugStream() << "Ground combat on " << planet->Name() << " was unopposed"; if (planet_initial_owner_id != ALL_EMPIRES) @@ -2896,8 +2897,7 @@ // continue; // don't double-eliminate an empire // Logger().debugStream() << "empire " << empire_id << " not yet eliminated"; - // const Empire* empire = it->second; - // if (!EmpireEliminated(empire, m_universe)) + // if (!EmpireEliminated(empire_id)) // continue; // Logger().debugStream() << " ... but IS eliminated this turn"; |
From: <geo...@us...> - 2014-06-19 21:40:04
|
Revision: 7170 http://sourceforge.net/p/freeorion/code/7170 Author: geoffthemedio Date: 2014-06-19 21:40:00 +0000 (Thu, 19 Jun 2014) Log Message: ----------- grooming Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-06-19 21:36:10 UTC (rev 7169) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-06-19 21:40:00 UTC (rev 7170) @@ -46,14 +46,17 @@ namespace { //If there's only one other empire, return their ID: int EnemyId(int empire_id, const std::set<int> &empire_ids) { - if (empire_ids.size() == 2) + if (empire_ids.size() == 2) { for (std::set<int>::const_iterator enemy_it = empire_ids.begin(); enemy_it != empire_ids.end(); ++enemy_it) + { if (*enemy_it != empire_id) return *enemy_it; + } + } return ALL_EMPIRES; } - + /// Generates information on the subdirectories of the save directory void ListSaveSubdirectories(std::vector<std::string>& list) { fs::recursive_directory_iterator end; |
From: <dil...@us...> - 2014-09-02 07:27:15
|
Revision: 7689 http://sourceforge.net/p/freeorion/code/7689 Author: dilvish-fo Date: 2014-09-02 07:27:13 +0000 (Tue, 02 Sep 2014) Log Message: ----------- added game-start update of empire owned objects counters so they will be accurate during the first turn Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2014-08-31 16:49:17 UTC (rev 7688) +++ trunk/FreeOrion/server/ServerApp.cpp 2014-09-02 07:27:13 UTC (rev 7689) @@ -692,10 +692,14 @@ // update visibility information to ensure data sent out is up-to-date Logger().debugStream() << "ServerApp::NewGameInit: Updating first-turn Empire stuff"; m_universe.UpdateEmpireLatestKnownObjectsAndVisibilityTurns(); + + // initialize empire owned object counters + EmpireManager& empires = Empires(); + for (EmpireManager::iterator empire_it = empires.begin(); empire_it != empires.end(); ++empire_it) + empire_it->second->UpdateOwnedObjectCounters(); // Determine initial supply distribution and exchanging and resource pools for empires - EmpireManager& empires = Empires(); for (EmpireManager::iterator it = empires.begin(); it != empires.end(); ++it) { if (empires.Eliminated(it->first)) continue; // skip eliminated empires. presumably this shouldn't be an issue when initializing a new game, but apparently I thought this was worth checking for... |
From: <dil...@us...> - 2015-01-26 09:22:51
|
Revision: 7869 http://sourceforge.net/p/freeorion/code/7869 Author: dilvish-fo Date: 2015-01-26 09:22:49 +0000 (Mon, 26 Jan 2015) Log Message: ----------- fixed tracking of empire destroyed ships to stop over-counting when ship died under multiple attacks Modified Paths: -------------- trunk/FreeOrion/server/ServerApp.cpp Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2015-01-26 09:14:46 UTC (rev 7868) +++ trunk/FreeOrion/server/ServerApp.cpp 2015-01-26 09:22:49 UTC (rev 7869) @@ -1831,6 +1831,11 @@ { const std::vector<CombatEventPtr>& attacks = it->combat_events; const CombatInfo& combat_info = *it; + // If a ship was attacked multiple times during a combat in which it dies, it will get + // processed multiple times here. The below set will keep it from being logged as + // multiple destroyed ships for its owner. + // TODO: fix similar issue for overlogging on attacker side + std::set<int> already_logged__target_ships; for (std::vector<CombatEventPtr>::const_iterator it = attacks.begin(); it != attacks.end(); ++it) { @@ -1883,6 +1888,9 @@ } if (target_empire) { + if (already_logged__target_ships.find(attack.target_id) != already_logged__target_ships.end()) + continue; + already_logged__target_ships.insert(attack.target_id); // record destruction of a ship with a species on it owned by defender empire species_it = target_empire->SpeciesShipsLost().find(target_species_name); if (species_it == target_empire->SpeciesShipsLost().end()) |