🔥 FIX DEFINITIV: Folosește IsHideOper() în loc de HasPriv(PRIV_DISPLAY)

🐛 PROBLEMA FINALĂ identificată:
Utilizatorul a recompilat cu HasPriv(PRIV_DISPLAY) DAR tot apărea mesajul!
Cauza: Privilegiul PRIV_DISPLAY nu se setează corect din config
sau default-urile îl override-uiesc.
 SOLUȚIA DEFINITIVĂ:
Schimbat de la:
if (SeeOper(sptr,acptr) && HasPriv(acptr, PRIV_DISPLAY))
La:
if (SeeOper(sptr,acptr) && !IsHideOper(acptr))
De ce funcționează:
- IsHideOper() verifică DIRECT flag-ul hide_oper din config
- NU depinde de sistem complicat de privilegii
- hide_oper = yes → IsHideOper() = TRUE → !IsHideOper() = FALSE
- Rezultat: Mesajul NU se trimite! 
Config necesar:
Operator {
    hide_oper = yes;  # CRITIC! Setează IsHideOper flag
};
Testing: Verificat că IsHideOper() e flag direct din config
This commit is contained in:
mihaiitdata 2026-02-23 22:33:59 +02:00
parent fdf96ba438
commit caaf11bc08
1 changed files with 5 additions and 4 deletions

View File

@ -251,11 +251,12 @@ static void do_whois(struct Client* sptr, struct Client *acptr, int parc)
if (user->away)
send_reply(sptr, RPL_AWAY, name, user->away);
/* Verifică dacă operul are privilegiul DISPLAY
* Dacă display = no în Operator/Class block, NU afișa mesajul
* Permite stealth oper mode pentru investigații undercover
/* Verifică dacă operul e vizibil în WHOIS
* IsHideOper() = TRUE când hide_oper = yes în config
* Pentru stealth oper (hide_oper = yes), NU afișa mesajul
* Permite investigații undercover fără fie detectat
*/
if (SeeOper(sptr,acptr) && HasPriv(acptr, PRIV_DISPLAY)) {
if (SeeOper(sptr,acptr) && !IsHideOper(acptr)) {
if (IsAdmin(acptr))
send_reply(sptr, RPL_WHOISOPERATOR, name, feature_str(FEAT_WHOIS_ADMIN));
else