Skip to content

Commit

Permalink
Docs: Mention the "last received item index" paradigm in the network …
Browse files Browse the repository at this point in the history
…protocol docs (ArchipelagoMW#2989)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
  • Loading branch information
NewSoupVi and Exempt-Medic authored Mar 28, 2024
1 parent 4d954af commit cfc1541
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions docs/network protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ There are also a number of community-supported libraries available that implemen
| GameMaker: Studio 2.x+ | [see Discord](https://discord.com/channels/731205301247803413/1166418532519653396) | |

## Synchronizing Items
After a client connects, it will receive all previously collected items for its associated slot in a [ReceivedItems](#ReceivedItems) packet. This will include items the client may have already processed in a previous play session.
To ensure the client is able to reject those items if it needs to, each item in the packet has an associated `index` argument. You will need to find a way to save the "last processed item index" to the player's local savegame, a local file, or something to that effect. Before connecting, you should load that "last processed item index" value and compare against it in your received items handling.

When the client receives a [ReceivedItems](#ReceivedItems) packet, if the `index` argument does not match the next index that the client expects then it is expected that the client will re-sync items with the server. This can be accomplished by sending the server a [Sync](#Sync) packet and then a [LocationChecks](#LocationChecks) packet.

Even if the client detects a desync, it can still accept the items provided in this packet to prevent gameplay interruption.
Expand Down

0 comments on commit cfc1541

Please sign in to comment.