Projekt

Allgemein

Profil

Aktionen

Fehler #3554

geschlossen

Fehler #5964: Open PvP

[Open PvP] PvP Flag verschwindet nach Relog

Von 1337 vor mehr als 12 Jahren hinzugefügt. Vor etwa 6 Jahren aktualisiert.

Status:
Live
Priorität:
Normal
Zugewiesen an:
-
Kategorie:
Kritisch
Zielversion:
Beginn:
02.06.2012
Update Text Deutsch:

Die PvP-Markierung wurde überarbeitet. Es bleibt jetzt nach dem Ein- und Ausloggen aktiv und wird korrekt angezeigt.


Beschreibung

Nach einem Relog verlieren Chars ihr PvP-Flag, selbst wenn es vorher manuell aktiviert wurde. Lediglich in feindlichen Hauptstädten bleibt es korrekterweise bestehen.
Der 5min Timer zum deaktivieren lässt sich so umgehen. Zudem ist es äusserst nervig, wenn man nach jedem Relog sein PvP durch aus- und einschalten erneut aktivieren muss.

Aktionen #1

Von tfave vor mehr als 12 Jahren aktualisiert

  • Status wurde von Neu zu Bestätigt geändert
Aktionen #2

Von karn vor mehr als 11 Jahren aktualisiert

  • Kategorie 21 wurde gelöscht
  • Zielversion wurde auf PvP gesetzt
Aktionen #3

Von Anonym vor etwa 11 Jahren aktualisiert

  • Kategorie wurde auf Kritisch gesetzt
Aktionen #4

Von 2danger vor etwa 10 Jahren aktualisiert

  • Übergeordnetes Ticket wurde auf #5964 gesetzt
Aktionen #7

Von Rushor vor fast 10 Jahren aktualisiert

oke das ganze muss definitiv iwo an dieser toggle stelle bearbeitet werden. entfernt man die abfrage für IsPvP() (also für die pvp unitflag) bleibt der pvp-status auch nach dem logout und login, wird aber dann nicht mehr entfernt nach den 5 min.

Aktionen #9

Von Rushor vor mehr als 9 Jahren aktualisiert

void WorldSession::HandleTogglePvP(WorldPacket& recvData)
{
    // this opcode can be used in two ways: Either set explicit new status or toggle old status
    if (recvData.size() == 1)
    {
        bool newPvPStatus;
        recvData >> newPvPStatus;
        GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, newPvPStatus);
        GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, !newPvPStatus);
    }
    else
    {
        GetPlayer()->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP);
        GetPlayer()->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER);
    }

    if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
    {
        if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer != 0)
            GetPlayer()->UpdatePvP(true, true);
    }
    else
    {
        if (!GetPlayer()->pvpInfo.IsInHostileArea && GetPlayer()->IsPvP())
            GetPlayer()->pvpInfo.EndTimer = time(NULL);     // start toggle-off
    }

    //if (OutdoorPvP* pvp = _player->GetOutdoorPvP())
    //    pvp->HandlePlayerActivityChanged(_player);
}
Aktionen #10

Von Rushor vor fast 9 Jahren aktualisiert

  • Thema wurde von PvP Flag verschwindet nach Relog zu [Open PvP] PvP Flag verschwindet nach Relog geändert
Aktionen #11

Von Rushor vor fast 9 Jahren aktualisiert

  • Zugewiesen an wurde auf Rushor gesetzt
Aktionen #13

Von 1337 vor mehr als 8 Jahren aktualisiert

Was neues hierzu?

Aktionen #14

Von Veylen vor mehr als 8 Jahren aktualisiert

Just 4 Info: Nach einem charreset ist PvP an, obwohl der defaultstate angeblich "off" sein sollte.
Sind evtl. zwei verschiedene Einträge vorhanden, welche den PvP-Status vorgeben?

Nach einen Zonenwechsel wechselt der PvP-Status auch schonmal auf aktiv, ohne dass eine Aktion ausgeführt wurde (man war ja im loadingscreen).

Irgendwo verhakt sich da gerne was :/

Aktionen #16

Von Daejiv vor etwa 8 Jahren aktualisiert

  • Zugewiesen an Rushor wurde gelöscht
Aktionen #17

Von Rushor vor mehr als 6 Jahren aktualisiert

fix:

diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index a03b268945..3c44ea03f0 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -991,6 +991,11 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)

     m_playerLoading = false;

+    // PvP mode Readd on Login
+    pCurrChar->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER);
+    if (pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
+        pCurrChar->UpdatePvP(true, true);
+
     // Handle Login-Achievements (should be handled after loading)
     _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN, 1);

Aktionen #18

Von Left4Info vor mehr als 6 Jahren aktualisiert

  • Tags wurde auf PvP gesetzt
  • Status wurde von Bestätigt zu In Bearbeitung geändert
  • Zugewiesen an wurde auf Left4Info gesetzt
Aktionen #20

Von Left4Info vor mehr als 6 Jahren aktualisiert

  • Status wurde von In Bearbeitung zu Testbereit geändert
  • Zugewiesen an Left4Info wurde gelöscht
Hab das Handling des PvP-Flag komplett neu geschrieben. Am besten nochmal alles testen, die Anzeige inklusive Timer sollte jetzt immer richtig angezeigt werden.
Man soll dauerhaft für PvP geflagt sein, solang man
  • im umkämpften oder feindlichen Gebieten befindet (Auch Arenen und Kampfzonen)
  • sich im PvP-Kampf befindet (mit Spielern oder NPCs)
  • eine spezielle PvP-Quest im Questlog hat (z.B. https://db.rising-gods.de/?quest=12444)
  • manuell den PvP-Status eingeschaltet hat (das sollte auch zwischen mehreren Relogs gespeichert werden)

Sobald keiner der Gründe mehr zutrifft, soll ein 5 Minuten Countdown starten, bis der PvP-Flag entfernt wird. Beim Relog wird der Countdown auf 5 Minuten zurückgesetzt.

Die einzige Ausnahmen, durch die der PvP-Flag entfernt wird sind sichere Gebiete (Shattrath & Dalaran) und Flugrouten.

Aktionen #21

Von Alphabaer vor mehr als 6 Jahren aktualisiert

  • Status wurde von Testbereit zu Ready geändert
  • Update Text Deutsch aktualisiert (Vergleich)
  • Update Text Englisch aktualisiert (Vergleich)
Aktionen #22

Von Serverupdate vor etwa 6 Jahren aktualisiert

  • Status wurde von Ready zu Pending geändert
Aktionen #23

Von Daejiv vor etwa 6 Jahren aktualisiert

  • Tags wurde von PvP zu PvP, Update 2018-09-26 geändert
  • Status wurde von Pending zu Live geändert
Aktionen

Auch abrufbar als: Atom PDF