cmangos / issues

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

🐛 [Bug Report] WotLK Death Knight starter zone does not work correctly with more than one char in map. #3528

Closed kelbren closed 1 year ago

kelbren commented 1 year ago

Bug Details

Create 2 accounts and a death knight on each. login to the server with both accounts to the starter area. take quests on 1st account, as soon as the second account logs in the quest markers start to be non responsive, npc's will not interact properly, and other strange behavior. Everything works fine with only one DK in the starter area. If both chars are on the same quest, neither work properly. I have noticed that whatever char is logged on last, seems to get the responses. and the previous char has trouble with npc's, quests, etc. It is very strange behavior, almost like the server is confusing what char is actually there if there are more than one. I have tested with the most resent fresh core and db. You can't see the other players in the area either, I tried with 3 diff accounts at same time on diff pc's. I was able to group and see the dot on the mini map. I did have a core crash once, but was not able to capture any useful info. This used to work, as I recall doing it in past, but it has been a long time, so I am not sure when.

Steps to Reproduce

  1. create 2 accounts, and dk on each. (gm level 3)
  2. login with 1st account, then 2nd account
  3. try doing same quests, and interact with quest givers.
  4. notice strange issues with quests not completing, markers not changing etc.
  5. get confused.

Expected behavior

see other chars, and share quests, etc.

Suggested Workaround

No response

Crash Log

No response

Core SHA1 Commit Hash

44f70dffd6e8c6284ae9d8396d84de79807f5c3a

Database SHA1 Commit Hash

0bc9c12557aa54c9b2aa348a3474e0267c4f8b69

Operating System

Ubuntu 20.04 server

Client Version

3.3.5a (Wrath of the Lich King)

Grz3s commented 1 year ago

very interesting... First of all, You need to know that alliance DK Players have diff Map than Horde ones... (smth like dungeons).. So They will never see each other. Second. if actualy you got 2 same faction players next to each other... and theres some kind of non respond from quest giver/ender.. pls give soem examples so we can look directly. (what and where)... Last.. Blizz have many quests where.. only one Player can participate at same time and other will have to wait.

kelbren commented 1 year ago

I understand the Horde/Alliance situation, that is not the case. I created two alliance DK chars. one on 2 diff accounts. both login to server. I can not see the other player, but I can group and see the dot on the mini map.

as far as quests go, any quest does this. if you both take the initial quest, and then one abandons it, it will cause the quest log to either not respond, or the npc will still show the ! and not the ? one you log out and back on, then you can re-acquire the quest.. and the other char who stayed online will be bugged. It's hard to explain. It acts like the chars get swapped or something. This really becomes obvious when on the same quests.

A prime example was the quest to fight the 5 DK initiates, if 2 accounts on, it would not work properly, sometimes not counting down, other times not responding to gossip menus, etc.
I really don't know how to explain it better than that.

Thanks for all your efforts, I am always amazed of the work you all do.

kelbren commented 1 year ago

I did figure something out: if I comment out where it checks for map 609 (line 129,130) in the MapManager.cpp the problems are resolved and everything works as expected, grouping, quests etc. (Alliance and Horde are not on separate maps now, so I understand this is not what is desired) So It appears it has something to do with the way it tries to create the map instance? Hopefully someone who understands it better can solve the issue.

// if (id == 609 && obj->IsPlayer()) // DeathKnightStart map - alliance and horde have own version // instanceId = static_cast<Player const*>(obj)->GetTeam() == ALLIANCE;

killerwife commented 1 year ago

Yes, that code is meant to make sure that there is a separate DK map for ally and horde. But I figured it would have smth to do with that.

killerwife commented 1 year ago

Linked a commit, it should resolve your issues.

kelbren commented 1 year ago

Tested, that fixed it. Thanks KW