Fix (en test)
Salut , vous vous êtes probablement aperçu que depuis la mis à jour des super Vmaps de TC2
c'était un peu le bordel, notamment concernant la charge CPU qui s'envole et le flood dans la console.

Donc problème de calcul de vecteur ( y x z).. ..je test actuellement un Fix de @click/machia


si vous voulez le testez aussi et mettre les logs de crash si vous en avez.

(sur Debian lenny 5 quadcore 8giga) aucun crash mais un cpu qui monte a 7% 8631 pour 0.7% en 8384 (même nombres de joueurs) mais support de Vmaps différents.



voici le fix

Code PHP :
diff -r 9ef7fd6e110d src/server/collision/Management/VMapManager2.cpp
--- a/src/server/collision/Management/VMapManager2.cpp    Fri Jun 18 04:17:21 2010 +0200
+++ b/src/server/collision/Management/VMapManager2.cpp    Sat Jun 19 02:40:23 2010 +0200
@@ -303,+303,@@
                 
delete worldmodel;
                 return 
NULL;
             }
-            
std::cout << "VMapManager2: loading file '" << basepath << filename << "'.\n";
+
//            std::cout << "VMapManager2: loading file '" << basepath << filename << "'.\n";
             
model iLoadedModelFiles.insert(std::pair<std::stringManagedModel>(filenameManagedModel())).first;
             
model->second.setModel(worldmodel);
         }
@@ -
321,+321,@@
         }
         if( 
model->second.decRefCount() == 0)
         {
-            
std::cout << "VMapManager2: unloading file '" << filename << "'.\n";
+
//            std::cout << "VMapManager2: unloading file '" << filename << "'.\n";
             
delete model->second.getModel();
             
iLoadedModelFiles.erase(model);
         }
diff -r 9ef7fd6e110d src/server/collision/Maps/MapTree.cpp
--- a/src/server/collision/Maps/MapTree.cpp    Fri Jun 18 04:17:21 2010 +0200
+++ b/src/server/collision/Maps/MapTree.cpp    Sat Jun 19 02:40:23 2010 +0200
@@ -146,35 +146,23 @@
 
     
bool StaticMapTree::isInLineOfSight(const Vector3pos1, const Vector3pos2) const
     {
-        
bool result false;
+        
bool result true;
         
float maxDist = (pos2 pos1).magnitude();
         
// valid map coords should *never ever* produce float overflow, but this would produce NaNs too
-
-        
//ASSERT(maxDist < std::numeric_limits<float>::max());
-
+        
ASSERT(maxDist std::numeric_limits<float>::max());
         
// prevent NaN values which can cause BIH intersection to enter infinite loop
         
if (maxDist 1e-10f)
             return 
true;
         
// direction with length of 1
-    G3D::Plane checkPlane G3D::Plane((pos2 pos1)/maxDist,pos1pos2);
         
G3D::Ray ray G3D::Ray::fromOriginAndDirection(pos1, (pos2 pos1)/maxDist);
-
-        
Vector3 checkFinite ray.intersection(checkPlane);
-        if (!
checkFinite.isFinite())
+        
float resultDist getIntersectionTime(raymaxDisttrue);
+        if (
resultDist maxDist)
         {
-            
ray G3D::Ray::fromOriginAndDirection(pos1, -((pos2 pos1)/maxDist));
-            
checkFinite ray.intersection(checkPlane);
-        }
-        if (
checkFinite.isFinite())
-        {
-            
float resultDist getIntersectionTime(raymaxDisttrue);
-            if (
resultDist >= maxDist)
-            {
-               
result true;
-            }
+            
result false;
         }
         return 
result;
     }
+
     
//=========================================================
     /**
     When moving from pos1 to pos2 check if we hit an object. Return true and the position if we hit one
diff -r 9ef7fd6e110d src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp    Fri Jun 18 04:17:21 2010 +0200
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp    Sat Jun 19 02:40:23 2010 +0200
@@ -51,15 +51,13 @@
 
     for (uint8 idx = 0; idx <= MAX_CONF_WAYPOINTS; ++idx)
     {
+        const float wanderX = wander_distance*rand_norm() - wander_distance/2;
+        const float wanderY = wander_distance*rand_norm() - wander_distance/2;
+        i_waypoints[idx][0] = x + wanderX;
+        i_waypoints[idx][1] = y + wanderY;
+        
         const bool isInLoS = vMaps->isInLineOfSight(unit.GetMapId(), x, y, z + 2.0f, i_waypoints[idx][0], i_waypoints[idx][1], z + 2.0f);
-        if (isInLoS)
-        {
-            const float wanderX = wander_distance*rand_norm() - wander_distance/2;
-            const float wanderY = wander_distance*rand_norm() - wander_distance/2;
-            i_waypoints[idx][0] = x + wanderX;
-            i_waypoints[idx][1] = y + wanderY;
-        }
-        else
+        if (!isInLoS)
         {
             i_waypoints[idx][0] = x;
             i_waypoints[idx][1] = y; 

Édition :
test terminé.

Retourner en haut Accueil