beyond-all-reason / teiserver

Middleware server for online gaming
https://www.beyondallreason.info/
MIT License
55 stars 53 forks source link

Sometime Small Team OS can be shown in Chobby for Large Team games #338

Closed L-e-x-o-n closed 2 months ago

L-e-x-o-n commented 3 months ago

Chobby gets ratings to display from SPADS. For each player SPADS requests ratings for type Team, Teiserver then returns either Small Team or Large Team OS by checking the team count and size in that player's lobby.

SPADS doesn't recognise Small vs Large Team OS. My guess is that when a lobby starts as a Small Team game type SPADS requests ratings for current players, if the lobby then gets increased to Large Team game type SPADS won't send the request again to update the ratings (because it still sees it as game type Team).

Yaribz:

https://github.com/beyond-all-reason/spads_config_bar/blob/main/var/plugins/barmanager.py#L250 , the BarManager plugin already offers a way to force SPADS to trigger skill updates for all players in the battleroom. So I guess it just needs to be called when the team size category changes.

https://discord.com/channels/549281623154229250/549282587487502347/1251901770071015544

jauggy commented 3 months ago

Chobby gets ratings from SPADS? Not from teiserver directly? How does it get it from SPADS?

L-e-x-o-n commented 3 months ago

Chobby gets ratings from SPADS? Not from teiserver directly? How does it get it from SPADS?

I am not sure where the relevant Chobby code is exactly, but when testing small/large team split we found out that Chobby displayed the same ratings SPADS was displaying with status command. SPADS is using an endpoint that returns the correct response only if the requester is host/SPADS . I don't see a way for Chobby to get it directly from Teiserver so I think it must be getting it from SPADS.

jauggy commented 3 months ago

Looking at the discussion on discord: https://discord.com/channels/549281623154229250/549282587487502347/1253622924523339829

The way it works is that when a new user joins, SPADS will only request the rating for that user. It only requests the rating for all users when it thinks the "game type" has changed. SPADS has no idea that "Small Team" exists and only recognises the game types shown in this code: https://discord.com/channels/549281623154229250/549282587487502347/1253979029782921287

Say there are 10 people in lobby (5 per team). SPADS has requested from teiserver the "Team" rating for each player and teiserver returns "Small Team" rating. A new player joins. SPADS then asks teiserver for the "Team" rating for that new player only and then teiserver returns "Large Team" rating. So one person has "Large Team" rating and everyone else has "Small Team".

jauggy commented 3 months ago

This can be fixed in SPADS and doesn't require teiserver changes. A fix is here: https://github.com/beyond-all-reason/spads_config_bar/pull/131

Just need to get rid of some formatting changes.