Questie

Questie

116M Downloads

Corpse Arrow does not work if sent to a Spirit Healer far away from body

ThiconZ opened this issue ยท 44 comments

commented

When the player dies and is sent to a Spirit Healer that is a far distance from their body, such as dying in The Stockades and being placed at the Spirit Healer just outside Stormwind, the Corpse Arrow will point downwards with an incorrect yards count and no estimated time.

I have not tried just running a very far distance from my corpse to see if the issue happens from that as well.

Screenshot of the issue:
image

commented

I'll have to try that... might be where it was placed "the code" in the "show arrow function".

Did you try the latest build I just checked in a few minutes ago? It has some improved checking not related to BG's.

commented

@Dyaxler I have not had a chance to recheck the changes in a Battleground.

commented

Hmmm... I'm not getting this issue. However, I've made improvements to the arrow since you reported the bug. I would manually installing Questie by downloading a ZIP of the whole repository. Although a ton of changes have been made since the last official release.

commented

Try this release please when you retest it.
https://github.com/AeroScripts/QuestieDev/releases/latest

My steps... walked into Stockades and committed suicide. Popped in Graveyard and arrow pointed to instance entrance 800+ yards away. I should have taken a screen shot.

commented

After testing it quite a bit more, seems it still has issues with instances (Stockades being the easiest to test with) and opening and closing the Worldmap appears to be the only work around for getting it to fix itself. Other than that being placed at a Spirit Healer very far away from your corpse seems to have it working correctly.

It's good enough to make a new release for but this issue still needs more investigating and work put into it to fully resolve this issue.

commented

Possibly a related issue, sometimes when I release to a Spirit Healer the arrow will be facing the wrong direction (it'll color correctly and give the correct distance, just be facing the opposite direction until I take a step). Perhaps some update needs to be forced once releasing has been finished?

commented

Please try this build:
Questie-3.68.zip

If it works for you then I'll check in my changes and do a Hotfix release.

commented

It seems like it may have fixed the incorrectly facing arrow issue - though I didn't die enough to truly thoroughly test it. It still did not fix the instance issue. Perhaps also of use, when I get within exactly 650 yards of where my corpse location should be it will fix itself. Not sure what triggers it to fix at that specific value as I've tried running to different locations and waiting over 10 minutes but those never triggered anything to have it fix itself.

commented

This one is weird. I can reproduce it most of the time (at least on the first death in stockades after starting the game client), however many things seem to fix the issue temporarily, like going further away than the graveyard is (went over 1 kyards), going to stockades using .tele stockades, etc. The "fix" or whatever will persist through relogs sometimes but upon the next restart of the game client the bug reappears. It seems noteworthy that walking into the ~650 yards range fixes arrow behaviour, but does not change the GetCorpseMapPosition() output.

commented

I think I figured out why walking into a certain range fixes the arrow. It happens when you walk into the map area of Stormwind (not the actual zone, but once you have Stormwind-map specific x and y coordinates between 0 and 100 Edit: or 0 and 1 in this case).

commented

Yeah, turns out the used zone is wrong. Use GetCurrentMapZone() for setting the arrow, problem solved. The first two commands are just after dying with the arrow bugged out showing 1 yard, the second two are after opening the map:

questie_arrow

This might indicate that the bug only happens for zones where the map area is shared with that of other zones.

commented

I have been playing around with the code a bit and it doesn't seem to be as easy as I thought, unless I am missing something obvious. Passing the return value of GetCurrentMapZone() to SetCrazyArrow() instead of the current player zone did not fix the issue.

commented

Yeah, this is totally weird. I must have a mod that you guys don't that "fixes" my issue or causes me to never see it. It's possible that something else might be changing the values.

I'm going to try and see if there is a way that I can set a "lastKnownPlayerZone" variable that I can call so that if a player dies and ends up in a different zone, the CorpseArrow() will have map coordinates of the zone the player died IN rather than the zone he ends up at. I wonder if while in the Stockades if GetCurrentMapZone() would give the proper zone ID that we need. If so then setting the event trigger PLAYER_DIES which fires right after you die, it'll get lastKnownPlayerZone = GetCurrentMapZone() before the player clicks Release.

BRD, LBRS and UBRS also comes to mind where this might happen as well.

commented

Also... we need to be using Astrolabe:GetCurrentPlayerPosition() instead of GetCurrentMapZone().

commented

So here. Execution order:

  1. Before entering Stockades
    image

  2. After entering Stockades
    image

  3. After death before hitting release
    image

  4. After hitting release
    image

commented

If you create a lastKnownPlayerZone variable it may need to be a saved variable as the player can always log out of the game after releasing but not reviving then log back in.

commented

I have a fix in coming but in the case that you're describing - they wouldn't get an arrow at all. Now you're talking about an "edge case" and we simply can't account for everything. I'd rather not make it a character saved variable unless it's necessary.

commented

This happens for me:

  1. After entering
  2. After releasing (bugged)
  3. After opening map

questie_arrow2

As you can see the Astrolabe function seems to get it wrong for some reason.

commented

Yeah, I noticed that too... but again I have a fix I just finished testing. Try this build...
Questie-3.68.zip

commented

So in a nutshell... Astrolabe will capture the data we need when the player dies (before releasing to a grave yard) - a sudo Corpse Marker instead of using Blizzards API (GetCorpseMapPosition). Then we're setting unique Vars to call later that checks to see if the Corpse Arrow can be shown. Since we're using unique Vars we don't have to worry about the Arrow showing an objectives data rather than our Corpse Arrow.

commented

@Dyaxler that version still fails to properly work:
image

commented

Issue still occurs in version 3.67:
image

To reproduce consistently, I walked into Stockades and died at the spawn location of the first two mobs then released my spirit after waiting ~3 seconds.

commented

Look at your map... do you see a Tombstone on your world map?

commented

Run this from your chat line while dead:

/dump GetCorpseMapPosition()

commented

After dying in Stockades and releasing: (0.39646875858307, 0.53943979740143). I'm not sure if it helps but the default minimap arrow and worldmap marker works just fine with pointing towards my corpse being in Stockades.

Also potentially important note: Opening (and closing) the worldmap will make the corpse arrow instantly fix itself, recognizing and pointing towards the correct corpse location.

Since /dump is not a built-in command in vanilla and I can't find a version of DevTools that works with vanilla I added a command to Questie to do the same.

commented

My version works:
DevTools.zip

commented

Soooooo... have you had a chance to see if this was fixed after all the changes you did to the CorpseArrow for BG checks?

commented

Mine works! :D

image

commented

Still does not work, opening and closing the worldmap will fix the arrow though - which is odd. The first dump in chat is with the arrow broken and the second is after fixing it with the worldmap.

image

No movement was done between the two /dump GetCorpseMapPosition()

commented

Correct, the graphics of it have it pointing straight down with distance of 0 and opening and closing the Worldmap will make it work correctly once again - pointing the the direction my 'corpse' is and having properly updated distance and ETAs.

commented

So wait... it's broken I.E. graphics are screwed and your distance is zero? Then opening and closing the Worldmap fixes it?

commented

Try this... instead of having this huge glob of a "back up code" keep the one in Questie.lua but replace the block in QuestieArrow.lua with this:

    if UnitIsDeadOrGhost("player") then
        Questie:OnUpdate(elapsed)
    end

This will re-divert any attempts for Quest objectives to redraw their destination to the OnUpdate function. I think what's going on here is that the arrow on your computer is getting cleared and then re-drawn simultaneously by both the functions in the OnUpdate and midstream in the SetCrazyArrow function. I was basically calling a function to draw the arrow within itself which is kind of a no no but it was working fine for me. Could be simply the order in which they are being executed on your box compared to mine. I have a LOT more mods then you do. :P

commented

Well dying now creates multiple errors (there might be more than these three)
image

They appear right after dying and all through being a spirit. Clicking Okay just creates more. Once alive though they stop appearing

commented

That is super weird... try my file - I have all your fixes in it.
QuestieArrow.txt

Just rename from *.txt to *.lua

commented

Nooo... wrong one. :)

commented

This is with the Questie.lua changes to remove the fallback code block.

commented

Here is my Questie.lua
Questie.txt

commented

That appears to have resolved the issue with that error.

The corpse arrow may have also been fixed too - will want to test it much more before I completely confirm that though.

commented

Please. As soon as it looks good to you I'll check it in and update the release.

commented

yeah... I was finally able to get my client into a broken state... with Muehe's help we figured it out. This build should work. :)
Questie-3.68.zip

commented

Can confirm that it is working correctly now.

commented

Awesome! :)

commented

This has been fixed in the latest release:
https://github.com/AeroScripts/QuestieDev/releases/latest

commented

It seems this issue may be back/not fully resolved. After dying in the middle of the Alterac Mountains once I released my Spirit into Hillsbrad Foothills (as Alliance, so Southshore) the arrow once again pointed down at 0yards to my corpse. This might have something to do with the new zone remembrance variable being added.