trickerer / Trinity-Bots

NPCBots for TrinityCore and AzerothCore 3.3.5
https://github.com/trickerer/TrinityCore-3.3.5-with-NPCBots/
473 stars 157 forks source link

[AC] [Bug] [Core] NPCBOTS sometimes fails to recall the player's location. #795

Open moncat2005 opened 6 months ago

moncat2005 commented 6 months ago

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

Current behaviour

There is frequent feedback: NPCBOTS sometimes fails to recall the player's location.

When this problem occurs, it can be confirmed that the player's employment relationship with npcbots has not been dissolved.

The unrecalled NPCBOTS shows the avatar as black in the team.

This is still the case after players try to go offline and then go online, and NPCBOTS will not be able to return to the player again until worldserver is restarted.

I suspect that the NPCBOTS that cannot be recalled may be stuck in a combat state or in a position.

Normally, after the player goes offline, the employed NPCBOTS should automatically cancel all status and send it back to the respawn point. After the player is online, it is automatically transmitted to the player's location.

Expected behaviour

Hope to find the cause and fix the issue .

Thank you very much!

Crashlog

No response

Steps to reproduce the problem

No specific factor was found that triggered this issue.

TrinityCore or AzerothCore

AzerothCore

Core rev. hash/commit

AzerothCore-wotlk-with-NPCBots f758b14 2024-04-07

Operating system

Ubuntu 18.04

moncat2005 commented 6 months ago

Find some specific factors that trigger this problem:

  1. In some specific map locations, NPCBOTS will enter a combat state where the object of battle is not visible, and the soldier will see the anger value automatically rise to 100%. lost-control-gps combat-hold

  2. At this time, NPCBOTS does not follow the player, and the player cannot recall the combat NPCBOTS by clicking the recall command.

  3. If the NPCBOTS can be found, execute the STOP+Slack instruction on it, and then recall it.

Recommended optimization: for the hired NPCBOTS that the player has gone offline, increase the automatic sending STOP+Slack, complete the exit from the combat state, and then let the npcbots return to the respawn point.

moncat2005 commented 6 months ago

Increase feedback from players: The player accidentally found NPCbots that cannot be recalled in certain specific areas mentioned above. However, these NPCbots are still in battle, useless in executing recalls, and unable to follow employer players. And the level of this trapped warrior NPCbots has been raised to level 80, which is not consistent with the player's level. It should be that this NPCbots is in combat and its experience level has automatically increased to the highest level of 80.

Once this problem occurs at present, unless you find NPCbots to execute the above command and resume following after a remote recall away from a specific location, you will return to the respawn point only through server restart.

trickerer commented 6 months ago

Try after https://github.com/trickerer/AzerothCore-wotlk-with-NPCBots/commit/6fc305b1815705ca6a771f995fa04ca471c18e67

moncat2005 commented 6 months ago

Player feedback again (code version is 5/20):

  1. Normal return to the city of Orgrimmar
  2. All NPCbots are set to stand still
  3. Players go to the dummy to test the attack damage of their equipment
  4. After the player goes offline and goes online again, they find that NPCbots appear again and cannot be recalled
  5. Players can see on the map that the NPC bots partner's logo is located in its original position.
  6. However, the actual players did not see these NPC bots, and the team avatars were all blank. It is possible that they have entered a combat state again. Perhaps the fix code has not fully implemented the NPCbots automatic cancellation of combat status and return to respawn points after players log off?

map-log lost-npc logo-0

trickerer commented 6 months ago

Well even following these steps I cannot reproduce the problem. Far or close, bots return to player properly. Even if I make them stay near the dummy to make them continue attack when I move away, still if I leave combat, logout and log back in bots leave combat and return to their spawn location and then teleport back to player.

I think it could actually be related to the addon you're using and the changes that go with it since you cannot set 'inaction' command state using bot commands or gossip menu. Actually you can, memory fails me.

moncat2005 commented 6 months ago

The plugin is the latest version of NetherBot, so there shouldn't be any issues. I just made language adjustments. Other players have not reported the issue of being unable to recall NPCbots again after the 5/20 update. In order to rule out the possibility of this player's misoperation, I have contacted the player to request assistance in troubleshooting the issue by providing the account and password of the character. After using this character to enter the game, it was true that only one NPC bot was around, and the rest could not be recalled. I tried non hidden, no action, and no more NPC bots to respond to. I also checked the NPC ownership data of the character and confirmed that there are 9 NPC bots present.

Correct it, according to the screenshot above, the warrior is not in battle this time. The map shows it's right beside you, but it's just not visible.

trickerer commented 6 months ago

Correct it, according to the screenshot above, the warrior is not in battle this time. The map shows it's right beside you, but it's just not visible.

If player logs in and party is created then bot actually joins player and teleports, but either can't enter player's map or is restricted by something else. Map shows bot's last location since was noted, means bot was added to group and then teleported

If you have a reliable way to reproduce the issue locally you can try uncomment bot_ai.cpp lines 18278-18279, see if message triggers:

- //ChatHandler ch(master->GetSession());
- //ch.PSendSysMessage("Your bot %s cannot teleport to you. Restricted bot access on this map...", me->GetName().c_str());
+ ChatHandler ch(master->GetSession());
+ ch.PSendSysMessage("Your bot %s cannot teleport to you. Restricted bot access on this map...", me->GetName().c_str());
moncat2005 commented 6 months ago

I discovered an abnormal situation while trying it out myself: Team up with 4 NPCBOTS to go hunting dinosaurs in Arathi Highlands. Suddenly, three remote professions (mages, priests, and shamans) run uncontrollably into the distance. A few minutes later, I recalled the flash that flashed by my side again, but then continued to run towards the distant hills. Then I used the stealth command on NPCBOTS, and Hearthstone returned to Ironforge. After returning to Ironforge, click to cancel invisibility, and 4 NPCBOTS will appear, but 3 ranged professions will continue to run uncontrollably in one direction. At this point, I can only use the action command to prevent the automatic running and leaving of three npcbots. As long as you cancel the action command, it will immediately run away again. Even if I go back to the character selection interface and enter the game again, it's still like this.

The code version for WorldServer is May 20th.

trickerer commented 6 months ago

I remember transports causing this sometimes, but that was long ago. In any case that's a different, unrelated problem

moncat2005 commented 6 months ago

This is completely different from the show of NPCbots on ships a long time ago, when NPCbots were like floating on the deck of a boat and could not be synchronously transmitted. The current NPC bots location issue should be a new one. At the beginning, it is normal for the NPC bot to automatically flash and follow the battle after the player arrives at the scene. After hitting several creatures, three of the NPCbots suddenly started running and left the team, heading towards the mountain until they were out of sight. After a while, these three NPC bots flashed back to the player like a recall, but still continued to run in the same direction.

moncat2005 commented 4 months ago

Today, players gave feedback again: Yesterday, there was another issue where NPCBots disappeared after returning from Shattrath to Thunder Cliff. Only one NPCBOT hired by the player is left by their side, and the rest cannot be recalled. After going offline and going online, this is still the case. Based on previous experience, it is expected that the server will return to normal after restarting.

Additionally, my server uses the mod function of the gemstone teleportation robot.

moncat2005 commented 4 months ago

Another player feedback: After testing the damage value of equipment skills by driving wooden stakes in the main city, the probability of NPCBOTS getting stuck and not following is higher.

moncat2005 commented 3 months ago

Player feedback: He hired a total of 9 NPCBOTs and fled after triggering a battle in the enemy camp area. When he found that there were only 3 NPCBOTs left, he clicked the addon button to recall NPCBOT, indicating that it could not be executed during the battle.

Bogir commented 1 month ago

В дополнение к вышесказанному: раз 10 за прошедшие полгода у игроков пропадали боты. Общая картина весьма загадочна. Это может произойти как после возвращения персонажа в мир, так и просто при телепортации с одной карты на другую через камень возвращения или через Распорядителя полетов (включен режим телепортации вместо перелетов). Так же замечено игроком, проскакавшим с ботами мимо агро-мобов. Часть ботов сагрились и, в последствии, там где-то и остались, не реагируя на команду "призыв" ботов к себе. По его словам, сагрились не все, а лишь некоторые, что нелогично.

Далее 2 пути, что тоже очень странно:

  1. Игрок возвращается в предыдущую точку, где в последний раз был вместе с "пропавшими" ботами, обнаруживает то там, то тут, то где-то еще этих "пропавших" и, через диалоговое меню, возвращает себе управление. Сами боты к игроку не подходят, будто включена опция "Стой здесь и ни чего не делай";
  2. Игрок находит пропавших ботов, но они не реагируют на нажатие правой клавишей, как будто у них отвязался _owner. Об этом сообщали после релогина персонажа.

Ситуация возникает крайне редко, и постоянно у разных персонажей. В среднем боты пропадали раза по 2-3 у каждого персонажа за пол года. После рестарта сервера боты возобновляют свою работу как ни в чем не бывало.

Мое предположение было, что зависает bot_ai в какой-то момент, и только рестарт сервера его оживляет, но кто-то умудрялся самостоятельно находить и "оживлять" потерянных ботов о_О.

Из установленных модов есть только один, для которого в ядре сделаны изменения - guild_house - для него на ГМ-острове и в некоторых отдаленных зонах введена система фаз по номеру гильдии+10000, отличная от маски фаз. Думаю, что если бы боты при возвращении из ГильдХауса вместе с хозяином не меняли фазу на правильную - это было бы заметно с первых же дней использования этого мода. Но игроки с ботами нормально портуются в отдельную фазу на ГМ-острове и возвращаются оттуда в фазу 1 в мир.

Склюняюсь к мнению, что необходима команда типа .npcbot reset ai, перезапускающая весь bot_ai, (согласен, это костыль) пока не будет ясна полная картина причины зависания отдельных ботов.

trickerer commented 1 month ago

Спасибо, так гораздо яснее.

trickerer commented 1 month ago

https://github.com/trickerer/AzerothCore-wotlk-with-NPCBots/commit/ba8be9b5bb47c599264b46eb0b4dcbce7dfbed22

So far all my attempts to reproduce the problem were fruitless. Here is a command that may help in such a situation, no guarantee. The command is only available to GMs since it generates a report on found problems, if it actually solves the problem please post its output here, that information may be crucial if we hope at all to resolve this issue for everyone.

moncat2005 commented 1 week ago

Just received feedback from the player that there are a total of 9 robots in the NPCBOTS team he hired, of which only 2 can follow, and the rest have disappeared and cannot be recalled. After logging in with my GM account, based on the screenshot provided by the player, I am ready to execute the repair command: . npcbot fix name. After executing the NPCBOT repair command, the interface displays: try to fix bot XXXXname(70xxx) owned by unknown (897) problems, but the player feedback has not returned to normal. When the repair command reaches the third npcbots, the system crashes. After careful examination, I found that I mistakenly identified the player's name as' npcbot 'and executed the' npcbot fix 'command, which caused the WorldServer to crash.

trickerer commented 4 days ago

I'm curious about that crash since when I try to use fix command with player name all I get is NpcBot 0 was not found error.

Anyway. owned by Unknown means that after recall bot owner was never found again. Or bot never attempted to do that.

https://github.com/trickerer/AzerothCore-wotlk-with-NPCBots/commit/862376f5343f79ca08732559c2aa17f3c8dfec5c