Unvanquished / Unvanquished

An FPS/RTS hybrid game powered by the Daemon engine (a combination of ioq3 and XreaL)
https://unvanquished.net
Other
968 stars 154 forks source link

Bot builders interfere when real players are building #2852

Open slipher opened 9 months ago

slipher commented 9 months ago

When the bot building feature was introduced, it was promised that they will not try to build if any real players are currently building. However, if I add some bots and go granger on Parpax and deconstruct all but one egg, after a short time a bot will spawn granger even though I'm still a granger.

sweet235 commented 9 months ago

Not only on parpax, and not only alien bots. This is specified in the default behavior, here: https://github.com/Unvanquished/Unvanquished/blob/master/pkg/unvanquished_src.dpkdir/bots/default.bt#L11 (and below for humans). The condition is:

numUsersInTeam == 0 || numOurBuildings( E_A_SPAWN ) < 2

The idea is simply that if a team lost all their spawns (but one), users on their team will frequently be incapacitated in the spawn queue. So one bot tries to obtain the ability to build, and builds until the team has two spawns. Two spawns are universally accepted to be the sensible minimum.

The situation described here is rather artificial. If a user deconstructs all spawns (but one), their building rights will quickly be revoked by their team. Even when moving the base, it is customary to maintain two spawns at all times. The more frequent reason to trigger the bots doing this is an unexpectedly successful attack resulting in the loss of most spawns.

In fact, the bots might build more than one or two spawns in this case. They might also build the reactor/overmind, and a drill/leech in order to try to be able to build the spawns.

it was promised that they will not try to build if any real players are currently building

They will not build if any user is on their team. This is the only exception. I added it after quite a few people had suggested this.

How to proceed? I see these options:

sweet235 commented 9 months ago

Maybe simply removing this exception is the most intuitive thing to do from a user perspective. We would still be able to make the bots build if there are no spawns left, by giving the command /tactic build (provided this is in g_tacticBehaviors).

sweet235 commented 9 months ago

There is a fourth option:

But then, a few days ago, I was watching a game with a malicious deconner. When they switched teams and started to remove spawns again, I was away from my computer, and people started to cry for an admin intervention. When I came back two minutes later, the user was still removing spawns and a bot was still rebuilding them. Otherwise, the game would have been over.

In the end, this is a design decision I made. I am not sure about it. Please state your opinions.

DolceTriade commented 9 months ago

I think it's reasonable to have bots force build at least two spawns regardless of whether there is a builder or not. We can always revert malicious builders anyways... inept builders and trolls on the other hand...let's hope the bots save us :D

sweet235 commented 9 months ago

Yes. Our bots are a little more useful than they used to be. But for them to be effective, some commands by users are required. I thought that losing spawns is so severe a problem that they should handle this without any user intervention.

There is a fifth option:

slipher commented 9 months ago

Now I remember reviewing that PR. So yeah I'm writing a lot of stupid comments.

But then, a few days ago, I was watching a game with a malicious deconner. When they switched teams and started to remove spawns again, I was away from my computer, and people started to cry for an admin intervention.

Don't they know how to use vote kick?

Anyway building when there is still a remaining spawn AND another builder seems overly aggressive. Bots can react instantly to changes in conditions so the flesh-and-blood builder might not even have a chance to place a spawn himself.

sweet235 commented 8 months ago

Don't they know how to use vote kick?

Some know it, some do not. Also: votes are rather slow. The actual delay consists of:

Some know about the denybuild vote, but might need 10 or 20 second to issue it (there is no GUI). In practice, the whole delay can be over 60 seconds.