Solocraft : ne pas compter les mercenaires comme des joueurs

Signale en jeu : « quatre mercenaires contre un gangreseigneur elite,
ils meurent tous, alors que seul j y arrive ».

Solocraft divise la difficulte brute par le nombre de membres presents,
pour compenser l absence de joueurs. CountPlayersInInstance comptait les
playerbots comme des joueurs entiers : un employeur accompagne de quatre
mercenaires passait de x5 a x1, c est-a-dire d un bonus de 400 % a aucun
bonus du tout.

Or un mercenaire ne remplace pas un joueur. Sa couche de combat est
restee en identifiants de sorts WotLK -- mesure faite sur trois classes,
entre cinq et six sorts reellement lancables sur une quarantaine cites
par l IA. Il ne compensait donc rien de ce qu il faisait perdre, et
l escorte etait strictement perdante : un piege pour le joueur plutot
qu un arbitrage tactique.

Les playerbots sont desormais ignores dans le compte. Un groupe
entierement compose de bots retombe sur 1 et recoit le meme bonus qu un
joueur seul, ce qui reste coherent : personne de reel n est la pour
porter le contenu.

Supprime au passage une oscillation du buff -- chaque mercenaire qui
debarquait faisait recalculer et fondre le bonus d un cran, d ou les
cycles de retrait/reapplication visibles dans le journal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
BlaMacfly
2026-09-08 23:33:27 +02:00
parent ef14de98ea
commit c901bc1765
+19 -1
View File
@@ -102,14 +102,32 @@ namespace {
if (!group)
return 1;
// Les playerbots ne comptent pas.
//
// SIGNALE EN JEU : « quatre mercenaires contre un gangreseigneur elite,
// ils meurent tous, alors que seul j y arrive ».
//
// Solocraft existe pour compenser l absence de joueurs. Un mercenaire
// n en remplace pas un : sa couche de combat est restee en identifiants
// de sorts WotLK et il ne lance qu une poignee de ses capacites. Le
// compter comme un joueur entier divisait le bonus de l employeur par
// cinq sans rien apporter en face -- l escorte etait strictement
// perdante, un piege plutot qu un arbitrage.
//
// Cela supprime aussi une oscillation : chaque mercenaire qui debarquait
// faisait recalculer et fondre le buff d un cran, d ou les cycles de
// retrait/reapplication visibles dans le journal.
uint32 count = 0;
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
{
Player* member = itr->GetSource();
if (member && member->IsInWorld() && member->GetMap() == map)
if (member && !member->IsPlayerBot() && member->IsInWorld() && member->GetMap() == map)
++count;
}
// Un groupe entierement compose de bots retombe sur 1 : ils recoivent
// alors le meme bonus qu un joueur seul, ce qui est coherent avec le
// principe -- personne de reel n est la pour porter le contenu.
return std::max<uint32>(count, 1);
}