Jump to content

Custom suffix and custom rating mod


AInur
 Share

Recommended Posts

On 08/11/2024 at 11:18 AM, guerringuerrin said:

If I remember correctly, the hypothesis was that RatingBot was still maintaining an open session with the previous xmppID and that was why it was not granting the rating to the player's new xmppID when rejoinin after disconnection

Yes, this is my hypothesis for what causes users to not see their own rating when they should.

Another possible explanation is if the user has an additional session (which is a connection to the lobby server) with greater or equal "priority", with another XMPP client. It could be a seemingly-crashed process of 0ad with nothing visible, or a third-party XMPP client like Pidgin, Psi, or Gajim.

The lobby server is designed to send the rating list as IQ stanzas to one session per nickname. Based on what I have observed, and maybe based on reading about the design of slixmpp's xep_0045 method get_jid_property and ejabberd, that is the user's session that has the highest priority. If there is more than one session with the highest priority then the last session will be the one that will receive the rating lists. XMPP clients usually hardcode a priority value to each availability status. So, a session marked as "Online" has the highest prority. A session marked as "Away" or "Busy" has lower priority.

When you have an existing session and connect another one then the new session will not receive the rating list right away. It will only receive the rating list once another user has connected to the lobby or completed a rated match. Sometimes this takes many minutes when it is late at night and there aren't many players online.

Troubleshooting the situation where a user can't rejoin a game because they don't have their rating involves the following.

  1. Get tired of superstitious methods like "host a game and come back", or "reconnect to the lobby server", or "host a rated 1v1 with an AI and complete the game", or "disable TLS encryption for the lobby", or "arrange rocks in the sand to say please please please RatingsBot give me my rating with as much faith, hope, and desperate longing as you can muster'.
  2. Disconnect all of your sessions to the lobby server and wait long enough for the lobby server to terminate hung connections associated with your username. How long this takes is a research topic. It might be right away, or 60 seconds, or it might be more. Remember to check Task Manager and terminate all pyrogenesis.exe, 0ad, or "main" processes that might still be running despite closing all visible 0ad windows. Remember to disconnect third-party XMPP clients.
  3. Start 0ad and login to the lobby. You should get your rating instantly.
  4. If you still haven't gotten a rating then it's probably because RatingsBot hasn't considered your new connection to the lobby server to be a new connection with highest priority. That means that you probably have another session connected. If your new session has greater or equal priority to the old session then you will eventually get a rating, but only once another user joins the lobby server. Either double-check the earlier steps or wait long enough for someone to join the lobby. This should trigger another ratinglist broadcast.
Edited by Norse_Harold
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 2 weeks later...

The cases I looked into so far were all caused by being online with multiple instances of 0ad. So unless that was done intentionally it'd be interesting to figure out why that happened.

I believe it might be important to learn why rejoining a running game is necessary in the first place. Is that because 0ad crashes or because the player looses the connection to the host?

Link to comment
Share on other sites

4 hours ago, Dunedan said:

The cases I looked into so far were all caused by being online with multiple instances of 0ad. So unless that was done intentionally it'd be interesting to figure out why that happened.

It's caused by a delay in the lobby bots before it can confirm that a player has quitted. This is common when there are many players joining and leaving at the same time

On the client side, the gui has already reached the pregame page but a backend connection might still be alive

4 hours ago, Dunedan said:

I believe it might be important to learn why rejoining a running game is necessary in the first place. Is that because 0ad crashes or because the player looses the connection to the host?

- bad connection to host, especially intercontinental games

- game bug or crash, e.g. suddenly cannot click, OOS, RAM overflow

- OS or hardware failure

- player is distracted by real life situations

Link to comment
Share on other sites

8 minutes ago, AInur said:

It's caused by a delay in the lobby bots before it can confirm that a player has quitted.

In the cases I've looked into that's not the problem.

9 minutes ago, AInur said:

On the client side, the gui has already reached the pregame page but a backend connection might still be alive

A connection to the lobby server stays alive the whole time during pregame, as well as during the game itself.

10 minutes ago, AInur said:

- bad connection to host, especially intercontinental games

- game bug or crash, e.g. suddenly cannot click, OOS, RAM overflow

- OS or hardware failure

- player is distracted by real life situations

Listing possible cases doesn't help. I'm interested in the actual cases which result in that problem.

Link to comment
Share on other sites

4 hours ago, Dunedan said:

I believe it might be important to learn why rejoining a running game is necessary in the first place. Is that because 0ad crashes or because the player looses the connection to the host?

Disconnecting is pretty common when players have spotty internet or otherwise poor connection. It could also be crashes, or restarting to fix errors.

Link to comment
Share on other sites

5 minutes ago, Dunedan said:
17 minutes ago, AInur said:

 

A connection to the lobby server stays alive the whole time during pregame, as well as during the game itself.

The connection thinks that it is alive even after I have killed all pyrogenesis processes in the system. When I restart 0ad and rejoin the lobby 30 seconds later, there is still no game list (previous session is considered active by the bot). Not sure why that is.

Link to comment
Share on other sites

On 06/11/2024 at 11:40 AM, Dunedan said:

Since when is this problem happening on a regular basis?

It's been happening since pre-2017.

There used to be a workaround where you would join via IP. It would also allow you to replace players if someone leaves mid game. But this workaround got closed in a22. https://trac.wildfiregames.com/ticket/3549

#3549 seems really unnecessary and causes more problems than it's worth. But I digress 

It is also worth noting that while players sometimes get temporarily locked out of games because their rating disappear there are also other instances where games get permanently ruined because a player initially joins a lobby without any rating. Then the game believes they have no rating. But if they drop and try to return their rating appears (as it is supposed to). As a result, the game doesn't recognize them and they are unable to rejoin a game unless this (relatively rare) bug reoccurs. 

Edited by chrstgtr
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...