Brasserie : ligne de vue refusee a bout portant dans l arene d Ook-Ook

Signale en jeu : « Paume du tigre » et les autres attaques de melee
refusees sur Ook-Ook avec « cible hors du champ de vision ». Meme defaut
qu au Temple du Serpent de jade juste au-dessus.

MESURE PAR SONDE. Sur 17 echecs releves, 13 sont LEGITIMES : Ook-Ook
depuis son perchoir (Z ~161,8, sol a 162,63) vers un joueur dans l arene
(Z ~147), a 23-26 m -- il y a un plancher entre les deux.

Les 2 autres ne le sont pas :
  Ook-Ook (-756,26 1353,21 146,97) -> joueur a 4,38 m
  joueur  (-757,19 1356,00 147,06) -> Ook-Ook a 2,93 m
Les deux extremites reposent sur le sol de l arene, a la meme altitude
que le plancher sous leurs pieds, et l echec se produit DANS LES DEUX
SENS. A trois metres sur un sol plat, une ligne de vue ne peut pas
echouer legitimement.

BORNES MESUREES. Tranche d altitude etroite (145-149) : le rez-de-
chaussee est un plan unique (Z 146,6 a 147,5 sur 189 spawns), ce qui
exclut le perchoir et preserve les 13 echecs legitimes. Rayon de 15 m
autour du centre d arene : la repartition des spawns donne 6 creatures a
moins de 10 m, AUCUNE entre 10 et 20 m, puis 46 au-dela -- ce vide est le
mur de l arene. On s arrete avant les salles voisines pour ne pas laisser
les monstres se voir a travers les cloisons.

RESERVE ASSUMEE : deux echecs mesures seulement, la ou le correctif du
Temple s appuyait sur trente-neuf. Bornes volontairement serrees.

Egalement dans ce lot :
- PV du hozen ivre bornes a 1 minimum. La sonde a montre que le calcul
  etait sain (pvMax=285568 -> 28556) : mon hypothese du zero etait
  FAUSSE. Le garde reste, mais le cadavre qui frappe n est pas explique.
- Sonde CADAVREDBG conservee : elle journalise toute creature infligeant
  des degats alors qu elle est morte ou a zero PV. Elle attrapera le cas
  tout seule s il se represente.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
SylvaniaCore deploy
2026-08-26 22:39:45 +02:00
parent 80b76d3bd1
commit b0174ab55f
3 changed files with 85 additions and 1 deletions
@@ -1870,6 +1870,61 @@ bool WorldObject::IsWithinLOS(float ox, float oy, float oz, VMAP::ModelIgnoreFla
return true;
}
// SylvaniaCore : l'arene d'Ook-Ook, a la Brasserie brune d'Orage
// (carte 961), a des donnees de collision fautives -- meme defaut
// qu'au Temple du Serpent de jade juste au-dessus.
//
// SIGNALE EN JEU : « Paume du tigre » et les autres attaques de
// melee refusees sur Ook-Ook avec « cible hors du champ de
// vision ».
//
// MESURE FAITE PAR UNE SONDE POSEE ICI MEME. Sur 17 echecs
// releves, 13 sont LEGITIMES : Ook-Ook depuis son perchoir
// (Z ~161,8, sol a 162,63) vers un joueur dans l'arene (Z ~147),
// a 23-26 m -- il y a un plancher entre les deux.
//
// Les 2 autres ne le sont pas :
// Ook-Ook (-756,26 1353,21 146,97) -> joueur a 4,38 m
// joueur (-757,19 1356,00 147,06) -> Ook-Ook a 2,93 m
// Les deux extremites reposent sur le sol de l'arene, a la meme
// altitude que le plancher sous leurs pieds, et l'echec se produit
// DANS LES DEUX SENS. A trois metres sur un sol plat, une ligne de
// vue ne peut pas echouer legitimement.
//
// BORNES. Le rez-de-chaussee de la Brasserie est un plan unique
// (Z 146,6 a 147,5 sur 189 spawns autour de l'arene), on garde donc
// une tranche d'altitude etroite : cela exclut le perchoir et
// preserve les 13 echecs legitimes. Horizontalement, la repartition
// des spawns donne une frontiere mesuree : 6 creatures a moins de
// 10 m du centre, AUCUNE entre 10 et 20 m, puis 46 au-dela. Ce vide
// est le mur de l'arene ; on s'arrete a 15 m, avant les salles
// voisines, pour ne pas laisser les monstres se voir a travers les
// cloisons.
//
// RESERVE ASSUMEE : deux echecs mesures seulement, la ou le
// correctif du Temple s'appuyait sur trente-neuf. Les bornes sont
// donc volontairement serrees. Si des attaques restent refusees
// ailleurs dans le donjon, il faudra reposer une sonde plutot
// qu'elargir a l'aveugle.
//
// A retirer si les cartes de collision de la carte 961 sont un jour
// re-extraites correctement.
if (!resultat && GetMapId() == 961)
{
auto dansLArene = [](float px, float py, float pz)
{
if (pz < 145.0f || pz > 149.0f)
return false;
float const dx = px - (-755.68f);
float const dy = py - 1351.83f;
return (dx * dx + dy * dy) <= (15.0f * 15.0f);
};
if (dansLArene(x, y, z) && dansLArene(ox, oy, oz))
return true;
}
return resultat;
}
+13
View File
@@ -756,6 +756,19 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
damage = 0;
}
// SONDE TEMPORAIRE - signale en jeu : « un cadavre bagarreur hozen
// ivre m'attaque ». On journalise toute creature qui inflige des
// degats alors qu'elle est morte ou a zero point de vie. Cas rare par
// construction : le journal ne peut pas etre noye.
if (damage && GetTypeId() == TYPEID_UNIT && (!IsAlive() || GetHealth() == 0))
{
TC_LOG_ERROR("misc",
"CADAVREDBG %s (entree %u, carte %u) frappe pour %u | vivant=%u pv=%u/%u | victime=%s",
GetName().c_str(), GetEntry(), GetMapId(), damage,
uint32(IsAlive() ? 1 : 0), uint32(GetHealth()), uint32(GetMaxHealth()),
victim ? victim->GetName().c_str() : "?");
}
if (victim->IsAIEnabled)
victim->GetAI()->DamageTaken(this, damage);
@@ -187,10 +187,26 @@ public:
break;
}
case NPC_DRUNKEN_HOZEN_BRAWLER:
{
creature->setRegeneratingHealth(false);
creature->SetHealth((uint32)creature->GetMaxHealth() * 0.1f);
// SylvaniaCore : le calcul pouvait deposer la creature a
// ZERO point de vie si le maximum n'etait pas encore
// renseigne a cet instant. Une creature vivante a 0 PV
// s'affiche comme un cadavre chez le client tout en
// continuant de frapper. On garantit au minimum 1.
uint32 const pvMax = creature->GetMaxHealth();
uint32 const pvPose = std::max<uint32>(1, uint32(pvMax * 0.1f));
// SONDE TEMPORAIRE
TC_LOG_ERROR("misc",
"CADAVREDBG creation hozen ivre : pvMax=%u -> pvPose=%u",
pvMax, pvPose);
creature->SetHealth(pvPose);
break;
}
}
}
void OnUnitDeath(Unit* unit) override