cmangos / issues

This repository is used as a centralized point for all issues regarding CMaNGOS.
180 stars 47 forks source link

[Classic]Stratholme Ysida Harmon is not spawned for the 45 minute run #785

Closed yyhhrr closed 8 years ago

yyhhrr commented 9 years ago

Can anyone reproduce this issues?

xfurry commented 9 years ago

Poke @cala Sound like a DB issue for me https://github.com/cmangos/mangos-wotlk/blob/master/src/scriptdev2/scripts/eastern_kingdoms/stratholme/instance_stratholme.cpp#L310

@yyhhrr please check the error logs for any missing creatures that were searched by SD2.

yyhhrr commented 9 years ago

I can add the npc by the commandline .npc add 16031.And in the gm mode I can see the NPC_YSIDA_TRIGGER.There is no error mentioned 16031 or 16100 by SD2.

cala commented 9 years ago

NPC 16031 is not spawned in Classic DB, that may explain the issue (there is also one similar issue open in Classic DB but I never got the time to look closely at this). However, this NPC is not spawned in TBC-DB or UDB or YTDB. Only PSMDB has it. So, I wonder if it is also not working on other cores.

evil-at-wow commented 9 years ago

I haven't checked recently - as in the past year or so - but she's never been there on my TBC server. So 'not working with other cores' is my bet too.

xfurry commented 9 years ago

https://github.com/cmangos/mangos-wotlk/blob/master/src/scriptdev2/scripts/eastern_kingdoms/stratholme/instance_stratholme.cpp#L310

DELETE FROM `creature` WHERE `id`=16100;
INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`DeathState`,`MovementType`) VALUES
(54416, 16100, 329, 1, 1, 0, 0, 4042.35, -3335.88, 115.144, 1.48353, 7200, 0, 0, 4120, 0, 0, 0);
yyhhrr commented 9 years ago

My source code and db was right.Just like xfurry commented.But the npc wasn't spawned.I can click the cage,but nothing happen.

cala commented 9 years ago

The trigger is already in the DB. I think the script is not blizzlike. From what I understand from the SD2 script, the trigger spawns Ysida when the final boss encounter is DONE. But the NPC shoud already be in the cage on instance load and be killed/removed if the event fails.

yyhhrr commented 8 years ago

Yes,you are right Cala.That is more blizzlike.

xfurry commented 8 years ago

The trigger is already in the DB. I think the script is not blizzlike. From what I understand from the SD2 script, the trigger spawns Ysida when the final boss encounter is DONE. But the NPC shoud already be in the cage on instance load and be killed/removed if the event fails.

I think we need to confirm this by sniff. So far, I couldn't find any details on this, on my side.

evil-at-wow commented 8 years ago

I can confirm that for you, @xfurry. And to be very sure, I also checked my sniffs. The oldest data I have is from WoTLK, version 3.0.3 build 9183, and her spawn data is in the same SMSG_COMPRESSED_UPDATE_OBJECT packet as Baron Rivendare, together with the trigger and the GOs. That means she's there from the very start.

The relevant data from my sniffs follows, in case anyone wants to check the current DB data. NPCs:

Entry Name X Y Z O
16031 Ysida Harmon 4041.9 -3337.6 115.06 3.81868
16100 Ysida's Trigger 4042.35 -3335.88 115.144 1.48353

GOs:

Entry Name Type Display ID X Y Z O
181071 Ysida's Cage 0 676 4044.34 -3334.22 115.06 2.74016
181072 Ysida's Cagebase 5 6651 4044.34 -3334.23 115.06 1.16937

She's also involved in a few messages (SMSG_MESSAGECHAT) during a typical run. Here are the relevant SMSG_MESSAGECHAT packets in a run where she died because it took longer than 45 minutes (I'm too busy/lazy to look up what all the field are now). The left column contains an offset in hex, the middle column contains the hex data, and the right column is an ASCII translation.

When starting:

0000:0000|0e 00 00 00 00 84 74 00 c8 28 00 30 f1 00 00 00|......t..(.0....|
0000:0010|00 10 00 00 00 42 61 72 6f 6e 20 52 69 76 65 6e|.....Baron Riven|
0000:0020|64 61 72 65 00 18 74 00 e4 3e 00 30 f1 10 00 00|dare..t..>.0....|
0000:0030|00 59 73 69 64 61 27 73 20 54 72 69 67 67 65 72|.Ysida's Trigger|
0000:0040|00 9f 00 00 00 49 6e 74 72 75 64 65 72 73 21 20|.....Intruders! |
0000:0050|20 4d 6f 72 65 20 70 61 77 6e 73 20 6f 66 20 74| More pawns of t|
0000:0060|68 65 20 41 72 67 65 6e 74 20 44 61 77 6e 2c 20|he Argent Dawn, |
0000:0070|6e 6f 20 64 6f 75 62 74 2e 20 20 49 20 61 6c 72|no doubt.  I alr|
0000:0080|65 61 64 79 20 63 6f 75 6e 74 20 6f 6e 65 20 6f|eady count one o|
0000:0090|66 20 74 68 65 69 72 20 6e 75 6d 62 65 72 20 61|f their number a|
0000:00a0|6d 6f 6e 67 20 6d 79 20 70 72 69 73 6f 6e 65 72|mong my prisoner|
0000:00b0|73 2e 20 20 57 69 74 68 64 72 61 77 20 66 72 6f|s.  Withdraw fro|
0000:00c0|6d 20 6d 79 20 64 6f 6d 61 69 6e 20 62 65 66 6f|m my domain befo|
0000:00d0|72 65 20 73 68 65 20 69 73 20 65 78 65 63 75 74|re she is execut|
0000:00e0|65 64 21 00 00                                 |ed!..           |

After some time - I believe 10 minutes left:

0000:0000|0e 00 00 00 00 84 74 00 c8 28 00 30 f1 00 00 00|......t..(.0....|
0000:0010|00 10 00 00 00 42 61 72 6f 6e 20 52 69 76 65 6e|.....Baron Riven|
0000:0020|64 61 72 65 00 18 74 00 e4 3e 00 30 f1 10 00 00|dare..t..>.0....|
0000:0030|00 59 73 69 64 61 27 73 20 54 72 69 67 67 65 72|.Ysida's Trigger|
0000:0040|00 88 00 00 00 59 6f 75 27 72 65 20 73 74 69 6c|.....You're stil|
0000:0050|6c 20 68 65 72 65 3f 20 20 59 6f 75 72 20 66 6f|l here?  Your fo|
0000:0060|6f 6c 69 73 68 6e 65 73 73 20 69 73 20 61 6d 75|olishness is amu|
0000:0070|73 69 6e 67 21 20 20 54 68 65 20 41 72 67 65 6e|sing!  The Argen|
0000:0080|74 20 44 61 77 6e 20 77 65 6e 63 68 20 6e 65 65|t Dawn wench nee|
0000:0090|64 6e 27 74 20 73 75 66 66 65 72 20 69 6e 20 76|dn't suffer in v|
0000:00a0|61 69 6e 2e 20 20 4c 65 61 76 65 20 61 74 20 6f|ain.  Leave at o|
0000:00b0|6e 63 65 20 61 6e 64 20 73 68 65 20 73 68 61 6c|nce and she shal|
0000:00c0|6c 20 62 65 20 73 70 61 72 65 64 21 00 00      |l be spared!..  |

After some more time - I believe 5 minutes left:

0000:0000|0e 00 00 00 00 84 74 00 c8 28 00 30 f1 00 00 00|......t..(.0....|
0000:0010|00 10 00 00 00 42 61 72 6f 6e 20 52 69 76 65 6e|.....Baron Riven|
0000:0020|64 61 72 65 00 18 74 00 e4 3e 00 30 f1 10 00 00|dare..t..>.0....|
0000:0030|00 59 73 69 64 61 27 73 20 54 72 69 67 67 65 72|.Ysida's Trigger|
0000:0040|00 9b 00 00 00 49 20 73 68 61 6c 6c 20 74 61 6b|.....I shall tak|
0000:0050|65 20 67 72 65 61 74 20 70 6c 65 61 73 75 72 65|e great pleasure|
0000:0060|20 69 6e 20 74 61 6b 69 6e 67 20 74 68 69 73 20| in taking this |
0000:0070|70 6f 6f 72 20 77 72 65 74 63 68 27 73 20 6c 69|poor wretch's li|
0000:0080|66 65 21 20 20 49 74 27 73 20 6e 6f 74 20 74 6f|fe!  It's not to|
0000:0090|6f 20 6c 61 74 65 2c 20 73 68 65 20 6e 65 65 64|o late, she need|
0000:00a0|6e 27 74 20 73 75 66 66 65 72 20 69 6e 20 76 61|n't suffer in va|
0000:00b0|69 6e 2e 20 20 54 75 72 6e 20 62 61 63 6b 20 61|in.  Turn back a|
0000:00c0|6e 64 20 68 65 72 20 64 65 61 74 68 20 73 68 61|nd her death sha|
0000:00d0|6c 6c 20 62 65 20 6d 65 72 63 69 66 75 6c 21 00|ll be merciful!.|
0000:00e0|00                                             |.               |`

0000:0000|0e 00 00 00 00 ce 79 00 9f 3e 00 30 f1 00 00 00|......y..>.0....|
0000:0010|00 0d 00 00 00 59 73 69 64 61 20 48 61 72 6d 6f|.....Ysida Harmo|
0000:0020|6e 00 18 74 00 e4 3e 00 30 f1 10 00 00 00 59 73|n..t..>.0.....Ys|
0000:0030|69 64 61 27 73 20 54 72 69 67 67 65 72 00 5a 00|ida's Trigger.Z.|
0000:0040|00 00 44 6f 6e 27 74 20 77 6f 72 72 79 20 61 62|..Don't worry ab|
0000:0050|6f 75 74 20 6d 65 21 20 20 53 6c 61 79 20 74 68|out me!  Slay th|
0000:0060|69 73 20 64 72 65 61 64 66 75 6c 20 62 65 61 73|is dreadful beas|
0000:0070|74 20 61 6e 64 20 63 6c 65 61 6e 73 65 20 74 68|t and cleanse th|
0000:0080|69 73 20 77 6f 72 6c 64 20 6f 66 20 68 69 73 20|is world of his |
0000:0090|66 6f 75 6c 20 74 61 69 6e 74 21 00 00         |foul taint!..   |

When she dies:

0000:0000|0e 00 00 00 00 84 74 00 c8 28 00 30 f1 00 00 00|......t..(.0....|
0000:0010|00 10 00 00 00 42 61 72 6f 6e 20 52 69 76 65 6e|.....Baron Riven|
0000:0020|64 61 72 65 00 b6 84 3a 02 00 00 00 00 55 00 00|dare...:.....U..|
0000:0030|00 4d 61 79 20 74 68 69 73 20 70 72 69 73 6f 6e|.May this prison|
0000:0040|65 72 27 73 20 64 65 61 74 68 20 73 65 72 76 65|er's death serve|
0000:0050|20 61 73 20 61 20 77 61 72 6e 69 6e 67 2e 20 20| as a warning.  |
0000:0060|4e 6f 6e 65 20 73 68 61 6c 6c 20 64 65 66 79 20|None shall defy |
0000:0070|74 68 65 20 73 63 6f 75 72 67 65 20 61 6e 64 20|the scourge and |
0000:0080|6c 69 76 65 21 00 00                           |live!..         |

0000:0000|0e 00 00 00 00 ce 79 00 9f 3e 00 30 f1 00 00 00|......y..>.0....|
0000:0010|00 0d 00 00 00 59 73 69 64 61 20 48 61 72 6d 6f|.....Ysida Harmo|
0000:0020|6e 00 84 74 00 c8 28 00 30 f1 10 00 00 00 42 61|n..t..(.0.....Ba|
0000:0030|72 6f 6e 20 52 69 76 65 6e 64 61 72 65 00 35 00|ron Rivendare.5.|
0000:0040|00 00 4d 79 20 64 65 61 74 68 20 6d 65 61 6e 73|..My death means|
0000:0050|20 6e 6f 74 68 69 6e 67 2e 2e 2e 2e 20 6c 69 67| nothing.... lig|
0000:0060|68 74 2e 2e 2e 20 77 69 6c 6c 2e 2e 2e 20 70 72|ht... will... pr|
0000:0070|65 76 61 69 6c 21 00 00                        |evail!..        |
xfurry commented 8 years ago

Poke @grz3s to correct UDB with the right spawns. I will change the script afterwards.

Grz3s commented 8 years ago

will look at this when ill find time... got lots of work on my head :(

cala commented 8 years ago

Thanks @evil-at-wow for sharing your data. Only the spawn of NPC 16031 is missing in Classic DB (and same for UDB). I spawned it (her) according to your data and she is outside the cage. That's seems logical with those screenshots http://www.wowhead.com/npc=16031/ysida-harmon#screenshots:id=359463 and http://www.wowhead.com/npc=16031/ysida-harmon#screenshots:id=76513 Though I wonder the purpose of the cage, then...

Vanillafanatic commented 8 years ago

Because she is in the cage at the start. Would have to look further into this, but from what I recall, the cage would auto activate if you saved her in time, she then walks out, and speaks about being saved.

Edit: https://www.youtube.com/watch?v=BRtYi1jHQsg

https://www.youtube.com/watch?v=gOIZS_dNBoE <-- better one of her speech.

cala commented 8 years ago

Thanks. I also found recently a good bunch of sources for this. Assigning myself on the issue.

cala commented 8 years ago

From what I understand from the various sources (videos, screens and sniffs):

This means that at some point, NPC Ysida is moved inside the cage. I guess this is when players do a successful run. Then, the cage's door is open and NPC Ysida moves to its home/spawn location. If the players fail the run, the NPC is simply killed at her spawn point.

evil-at-wow commented 8 years ago

I believe that conclusion is not (entirely) correct. It so happens that I also have version 3.0.3 build 9183 data for a Stratholme run in which we saved her life (in fact, that run was done just two days later than the one from which I posted data above). So I just spent some time checking if I could find any evidence of Ysida moving or respawning or whatever.

Somewhat to my surprise, I found a different spawn position in this sniff:

Entry Name X Y Z O
16031 Ysida Harmon 4044.78 -3333.68 117.26 4.15388

Note the interesting Z coordinate. This is not a typo - I checked twice to be sure - and it appears she was spawned floating in the air near the top of her cage. I'm guessing she actually falls down in the game though.

I'd like to point out that her spawn data was still in the same SMSG_COMPRESSED_UPDATE_OBJECT packet as Baron Rivendare and some other stuff, just like before. To be more precise: both runs, one where she's kept alive and one where she dies, have the first appearance of the creatures Ysida Harmon, Ysida's Trigger, Baron Rivendare and the GOs Ysida's Cagebase and Menethil's Gift in the very same packet. Intriguingly, the spawn data for the GO Ysida's Cage was sent much earlier in the run...

Anyway, then I suddenly realized I made one hell of an assumption when I previously said

That means she's there from the very start.

It's a fact that her spawn data was sent together with Baron Rivendare's spawn data, but that only leads to the above conclusion when Baron Rivendare is there from the very start! And although the Baron's GUID suggest that he is 'generated' when the instance loads (*), the client is not notified about his presence until much later. Sadly, my tools don't show timestamps yet and it is also hard to search for 'interesting events' (such as one particular NPC dying or getting in combat, one GO changing state, etc), but checking a bunch of nearby and related packets suggests that the SMSG_COMPRESSED_UPDATE_OBJECT packet with the spawn data of Ysida and Baron Rivendare is sent around the time the gauntlet starts (I verified that by checking it was sent after the three yells were done when an Ash'ari Crystal is destroyed, and before any Bile Slime was spawned). Of course, at that point in the run it is quite possible that the 45 minutes have passed already, in which case the client gets to see her in the position of her death.

My current theory is that she actually starts in the cage and is updated as needed at the server side, all long before the client is even told about her presence. But because the client doesn't get to see her until later in the run, the client might never actually see her inside the cage if you're not fast enough to make it that far.

It also makes me wonder what happens when you get to the Baron just before the timer runs out. I assume you should see her inside the cage at that point. And then the timer runs out and the Baron kills her... somehow? Have I missed a small event back in the days?

(*) The NPC GUIDs that are sent to the client are not pulled from thin air of course, so they do contain very useful information if you look beyond the bytes. I'm like 100% sure that Baron Rivendare is spawned when the instance loads, even though the client isn't told yet. This in contrast to NPCs like Ramstein the Gorger and the Black Guard Sentry NPCs, which I'm sure are spawned dynamically. Ysida is an interesting NPC in this regard. I don't think she's actually spawned when the instance loads - my current theory is that she might be spawned server side when the 45 minute run starts.

cala commented 8 years ago

Thank you @evil-at-wow for this new data and the analysis that comes with. It makes more sense than having the NPC spawned outside the cage and moved inside afterwards. I'll script that soon(tm).

cala commented 8 years ago

It also makes me wonder what happens when you get to the Baron just before the timer runs out. I assume you should see her inside the cage at that point. And then the timer runs out and the Baron kills her... somehow? Have I missed a small event back in the days?

IIRC once you've entered the room with the Baron (in due time), the run would be considered as successful. The only remaining question is: what if the group wipes on the Baron at that time?

Phatcat commented 8 years ago

If the group wipes, then she is killed and the quest is failed. Also you have to engage him in combat within those 45 minutes. Doesn't matter if you drag out the Baron fight for 15 minutes over time, as long as the buff wasn't expired before engaging him, and he doesn't leave combat again without dying, cause if he does, he'd off her. Just -how- we'd off her is a good question, though. All the info I could find on the subject just said that the Baron kills her.

It has sadly been next to impossible finding a video showcasting a failed run, failing just at the point of entering the Barons room so we could see if something does take place visually.

cala commented 8 years ago

If the group wipes, then she is killed and the quest is failed.

That's what I remember hearing back on live because that specific case never occurred to me. Ok, I'll add that to my current rework of the script, thanks.

killerwife commented 8 years ago

Nope, the quest is failed only on timer. I used to farm the instance with my druid solo @70 and I doubt they changed anything.

Phatcat commented 8 years ago

@killerwife no, yeah, you are right, you can wipe to baron and not have her killed, if you still have time left on the clock.

If the time runs out and he is out of combat, he will kill her. If he leaves combat and the timer has run out and she is alive, he will kill her.

cala commented 8 years ago

Closed by https://github.com/cmangos/mangos-wotlk/commit/37d046b2579670fab9e41578303d142b1aabf15c Thanks everyone for their contribution.

evil-at-wow commented 8 years ago

Some more data about Ysida as requested by @cala here. The data is from version 3.0.3 build 9183.

Except for differences in her position, as mentioned earier in this issue, the SMSG_COMPRESSED_UPDATE_OBJECT packet notifying my client about her presence contains the exact same list of update fields and values for both a successful and failed run. This is the data in a successful run:

Packed GUID = 0xf130003e9f001b73
Position (x y z o) = (4044.78 -3333.68 117.26 4.15388)

Update field 0 = 0x731b009f
Update field 1 = 0x3e0030f1
Update field 2 = 0x09000000 [Type = 9]
Update field 3 = 0x9f3e0000 [Entry = 16031]
Update field 4 = 0x0000803f [Scale = 1.0]
Update field 22 = 0x00010101 [UNIT_FIELD_BYTES_0]
Update field 23 = 0xd8170000 [Health = 6104]
Update field 26 = 0x64000000 [Power3 = 100]
Update field 27 = 0x64000000 [Power4 = 100]
Update field 28 = 0x40420f00 [Power5 = 1000000]
Update field 31 = 0xd8170000 [Max Health = 6104]
Update field 34 = 0x64000000 [Max Power3 = 100]
Update field 35 = 0x64000000 [Max Power4 = 100]
Update field 36 = 0x40420f00 [Max Power5 = 1000000]
Update field 53 = 0x3c000000 [Level = 60]
Update field 54 = 0x1a030000 [FactionTemplate = 794 (Argent Dawn)]
Update field 58 = 0x00020000 [UNIT_FIELD_FLAGS]
Update field 59 = 0x00080000 [UNIT_FIELD_FLAGS_2]
Update field 61 = 0xd0070000 [Base Attack Time1 = 2000]
Update field 62 = 0xd0070000 [Base Attack Time1 = 2000]
Update field 64 = 0xf4fd543e
Update field 65 = 0x0000c03f
Update field 66 = 0x5f3e0000 [Display ID = 15967]
Update field 67 = 0x5f3e0000 [Native Display ID = 15967]
Update field 80 = 0x0000803f
Update field 122 = 0x01010000 [UNIT_FIELD_BYTES_2]
Update field 146 = 0x0000803f

You could be correct that the flags play an important role in Baron Rivendare not attacking Ysida, despite their faction being at war. If the WoTLK core sources are correct - remember that the WoTLK core is meant for version 3.3.5 and not version 3.0.3 - then the UNIT_FIELD_FLAGS field value of 0x00020000 = UNIT_FLAG_PACIFIED. That sounds like what we're looking for.

As far as I could see, there are no changes to her flags after this, but I'm not sure how the difference between alive and dead is sent to the client though. So keep in mind it's possible I'm looking at the wrong packets.

cala commented 8 years ago

Awesome! You're incredible. :bow: Thank you! So, only the DBs need to be updated. :)