Bannerlord-Coop-Team / BannerlordCoop

MIT License
263 stars 51 forks source link

Sync MilitiaPartyComponent #799

Open garrettluskey opened 7 months ago

garrettluskey commented 7 months ago

Description

  1. Sync the values in the Synced list below.
  2. Create an integration test for all values (1 for server changing the value and 1 for client changing the value if applicable)
  3. Create a command to test changing the value in game see similar command

Also see additional information at the bottom for more information and templates

Key Server side only (only allow the running of the function on the server side) Client side only (only allow the running of the function on the client side) Client side sync (request the server to change the value, server then changes the value and replies to the client allowing the change) Server side sync (only server allows running of the function and send to all clients the value changed and clients update the value/call original function)

Synced

Method/Field Name Sync Type
Settlement Server side sync

Deferred

None

Externally Deferred

None

Non-Synced

Intended Design

Message networking image Integration Testing image

Location

Create a branch based from development

Related Issues

N/A

Requirements

N/A

Additional information

Using the GameInterface Service Tempale create commands to test the synced values.

For network communication use Server Service Template and Client Service Template

It is recommended to start with an integration test, you can create one using the test template.

Definition of Done

georgyrudnev commented 3 months ago

Please assign me trial dev role

georgyrudnev commented 3 months ago

Do I understand correct that basically only the case needs to be synced when MilitiaPartyComponent.Settlement changes (seems to only happen in case a Settlement gets destroyed via MilitiaPartyComponent.OnFinalize)?

garrettluskey commented 3 months ago

@georgyrudnev

Correct, a good example would be MapEventSide prefix -> MapEventSide data handler internal receive -> MapEventSide data handler network receive

This is the general data flow that we use. You will likely have questions so please ask away in the discord. If needed I can walk you though what needs to be done sometime