Trinitycore: Core/Entities: Silithyst can't be obtained from Silithys Geyser in PvP

Created on 27 Nov 2015  路  21Comments  路  Source: TrinityCore/TrinityCore

TrinityCore rev. 5df0bcdd4e2d (clean installation)
http://www.wowhead.com/quest=9419/scouring-the-desert (Alliance side - prev quest 9415)
http://www.wowhead.com/quest=9422/scouring-the-desert (Horde side - prev quest 9416)
Both quests can't be completed:
Silithyst can't be obtained from Silithys Geyser

  • Note:

Tested with a normal account / player <-- quest doesn't work

Tested with a GM account / player <-- quest do work

Tested with a GM account changed to normal account <-- quest do work

Comp-Core Feedback-PatchFix Sub-Conditions Sub-PvP-Zones Sub-Quests Sub-Spells

Most helpful comment

Considering all PvP files are outdated and usually almost everything in them is wrong and unnecessary, handling of object should be moved out of OutdoorPvP if possible and if will work as intended(without honor farm bugs) after moving to spell scripts SAI whatever
Didn't really checked but I don't understand why object is handled in HandleCustomSpell in first place
Ideally OutdoorPvPSI needs more love in general

All 21 comments

Cannot reproduce, tested with GM account and then player account and it always work as intended.

Seems not related to GM or player status, in the same account I have a Tauren and a Night elf, I can get the Silithyst with the Elf but not with Tauren, both are level 80 and the quest not taken or done.

Also not related to the race or class, I created a new Tauren shaman and I was able to get the Silithyst.

I found the problem, when you create a new character his name will be blue also when you teleporte to a capital your name will turn blue, that means the pvp is disabled, in this case you can get the Silithyst, but if you turn on/off the pvp mode your name will turn green and you will not be able to get the Silithyst, if I'm not wrong this must be the opposite if the pvp is on you can get the Silithyst and if it's off you cannot.

Yes, the names are blue. Both my test characters, lvl 75 dwarf hunter and lvl 79 orc rogue, were able to pick up the Silithyst, get the buff and deliver it in their faction camps. I made 1 delivery to complete the quest and another to test normal delivery without the quest. I'll retest with PvP ON and update.

e266278f7d02 2015-11-27 22:10:21 +0100 / TDB 335.60 + updates including 2015_11_27_00_world.sql
Confirmed. If PvP flag is on, the Silithyst object despawns, but no player buff and nothing to deliver.

/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h

i think this is related to #13103

Then, maybe other PvP zones also have problems

No, the issue here is the condition is reverted, it must be if the pvp is on you can get the Silithyst and if it's off you cannot, not the opposite.

Probably the problem is here: https://github.com/TrinityCore/TrinityCore/blob/8f3a9b7fe338456dff08e1fccdb2b672d9d19299/src/server/game/Entities/GameObject/GameObject.cpp#L1761

still bugged, the object despawn, but the player only gets the buff if he's non-flagged for PvP.

TrinityCore rev. hash, please?

rev: 58dad50

TrinityCore rev. c76931c2c095 2019-03-17 16:57:05 +0100 (3.3.5 branch) (Unix, RelWithDebInfo, Static)

Oddly enough, this is still an issue. Playing on a PVP realm. The geysers still disappear, but nothing happens.

Maybe the aura check logic is the opposite of what it needs to be to work in PvP mode?

This fixes the issue but I'm not sure if it is a valid fix. Returning true prevents execution of OutdoorPvPSI's version of HandleCustomSpell().

There's also a smaller issue, when right-clicking on the geyser (not the mound) with PvP disabled, the player doesn't get the spell but the gameobject still despawns. I'm not sure what error message should be shown in that case, but I'm sure the gobj shouldn't despawn (because in fact, nothing happens because the player doesn't have PvP enabled).

(just copying the diff in here to make it even more visible)

 bool OPvPCapturePoint::HandleCustomSpell(Player* player, uint32 /*spellId*/, GameObject* /*go*/)
 {
     if (!player->IsOutdoorPvPActive())
-        return false;
-    return true;
+        return true;
+    return false;
 }

 bool OutdoorPvP::HandleOpenGo(Player* player, GameObject* go)

Well, it definitely looks like you swapped the logic around, which makes sense, because it is supposed to be a PvP-only player event and not be available unless player is flagged for PvP. Whether it is considered a hack or not, I don't know (sorry).

TrinityCore rev. c76931c 2019-03-17 16:57:05 +0100 (3.3.5 branch) (Unix, RelWithDebInfo, Static)

Oddly enough, this is still an issue. Playing on a PVP realm. The geysers still disappear, but nothing happens.

TrinityCore rev. a054ce864d29 2019-08-16 06:27:38 +0000 (3.3.5 branch) (Unix, RelWithDebInfo, Static)
enable pvp :nothing
disable pvp:get the buff

That makes me think @Wyrserth's suggested change should be valid, but knowing that the side effect is that it prevents the execution of OutdoorPvPSI's version of HandleCustomSpell(), more changes are needed as well (like making the gameobject not despawn or non-interactive when PvP is disabled). I don't have coding skills to solve that problem, sorry.

As a side note, I would like to mention that during the last few months, while playing on tcubuntu.northeurope.cloudapp.azure.com, my level 58-64 orc hunter character has always logged in with PvP status enabled in the icon, although the selection status from the game client GUI says it is disabled. While in this state, visibly flagged as PvP (but the UI selector saying disabled), I am able to capture PvP flags in Hellfire Peninsula as well as other maps.


edit: To be able to remove the PvP status and become non-PvP again, I need to teleport to a different map or zone, because it is not enough to use the GUI selector or /pvp command-line switcher.

fix for both

diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index 96a61cdc5a..2fe4e7c0f1 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -495,7 +495,7 @@ bool OPvPCapturePoint::HandleCustomSpell(Player* player, uint32 /*spellId*/, Gam
 {
     if (!player->IsOutdoorPvPActive())
         return false;
-    return true;
+    return false;
 }

 bool OutdoorPvP::HandleOpenGo(Player* player, GameObject* go)

Hmm, interesting. I did not consider that option, but then again, I am not a real coder.

From https://github.com/TrinityCore/TrinityCore/pull/26240#issuecomment-798891397 by Shauren:

This is a wrong fix. Real issue is that all OutdoorPvP hooks are called for all types - so this breaks because HandleCustomSpell is called first on OutdoorPvPHP (hellfire zone), it returns true so HandleCustomSpell of OutdoorPvPSI is not called.

The fix should be to only call HandleCustomSpell on OutdoorPvP object for current zone, not to break OutdoorPvP even further by changing return value

Anyone want to take a closer look at that suggestion, to see if this issue can be solved?

Considering all PvP files are outdated and usually almost everything in them is wrong and unnecessary, handling of object should be moved out of OutdoorPvP if possible and if will work as intended(without honor farm bugs) after moving to spell scripts SAI whatever
Didn't really checked but I don't understand why object is handled in HandleCustomSpell in first place
Ideally OutdoorPvPSI needs more love in general

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Teppic1 picture Teppic1  路  3Comments

Rochet2 picture Rochet2  路  3Comments

jerbookins picture jerbookins  路  3Comments

Lopfest picture Lopfest  路  3Comments

cbcs picture cbcs  路  3Comments