gcrtnst / sw-vmark

Add vehicle marker features to Stormworks
https://steamcommunity.com/sharedfiles/filedetails/?id=2279684060
The Unlicense
0 stars 0 forks source link

Don't save peer_id #36

Closed gcrtnst closed 3 years ago

gcrtnst commented 3 years ago

The peer_id is unique only between the time the world is loaded and the time it is closed. Once the world is closed and reloaded, the peer_id counter is reset and peer_ids are assigned in order from 1 again. Therefore, there is a possibility that the same peer_id will be assigned to different players before and after reloading the world.

Currently, vmark provides a function to filter vehicles by peer_id, but this function becomes useless when peer_ids are overlapped.


peer_id はワールドが読み込まれてから閉じられるまでの間のみユニークである。一旦ワールドを閉じて再度読み込むと peer_id のカウンタはリセットされ、再度 1 から順番に peer_id が割り当てられる。そのため、ワールド再読み込みの前後で、異なるプレイヤーに同じ peer_id が割り当てられる可能性がある。

現状、vmark では車両を peer_id で絞り込む機能を提供している。peer_id が被った場合、この機能は使い物にならなくなる。

gcrtnst commented 3 years ago

Consider alternatives to peer_id for vehicle refinement information.

Idea 1: Steam ID

Steam IDs are always unique, and there is no need to worry about sharing them with others. However, Steam IDs have a much larger number of digits than peer_ids, making them more difficult to enter and harder to remember. Also, since there is no way to check the Steam ID in the game, a separate way to check the Steam ID must be provided.

Idea 2: Player Name

The idea is to provide a function to filter by player name in the same way as the function to filter by vehicle name. Player names are familiar and easy to understand for many people. However, because the search term is limited to a single word and cannot include spaces, players with names that include spaces will be inconvenienced. Also, there are cases where player names are covered.

Idea 3: Automatic conversion from peer_id to Steam ID

The idea is to record the Steam ID in g_savedata and use the peer_id to specify the refinement. When a peer_id is specified, vmark will identify the player assigned to that peer_id and get the Steam ID. Then, the Steam ID is used to narrow down the search.

This proposal does not require any change in the argument specification of the ?vmark list command, which reduces confusion for users. However, it would make it impossible to narrow down the vehicles of players who are disconnected (no longer in the world).


車両の絞り込み情報について、peer_id に代わる代替案を検討する。

案1. Steam ID

Steam ID は常にユニークであり、他人と被る心配は全く無い。ただし、Steam ID は peer_id と比較して非常に桁数が多く、入力が大変な上、覚えられない。また、ゲーム内で Steam ID を確認する手段が無いため、別途 Steam ID を確認する手段を提供しなければならない。

案2. プレイヤー名

車両名で絞り込むのと同じように、プレイヤー名での絞り込みを行う機能を提供する案。プレイヤー名は多くの人にとって馴染み深く、とっつきやすい。しかし、検索語句は1単語のみで、スペースを含められないという制約があるため、スペースを含む名前を持つプレイヤーは不自由を強いられることになる。また、プレイヤー名が被る場合もある。

案3. peer_id から Steam ID への自動変換

g_savedata には Steam ID を記録しておき、絞り込みの指定には peer_id を使う案。peer_id を指定されたとき、その時点でその peer_id に割り当てられているプレイヤーを特定し、そのプレイヤーの Steam ID を取得する。そして、Steam ID を使用して絞り込みを行う。

この案では、?vmark list コマンドの引数仕様を全く変える必要がないため、利用者の混乱を抑えられる。しかし、切断された(ワールドから居なくなった)プレイヤーの車両を絞り込めなくなってしまう。

gcrtnst commented 3 years ago

31 によると、当時の私は peer_id が永続的かどうか疑問に思いながら、peer_id による絞り込みを実装したらしい。一体何を考えていたのだろうか?

gcrtnst commented 3 years ago

After much deliberation, I decided to proceed with idea 3.


悩んだ結果、案3で進めることにした。

方針としては、まずインターフェイスの動作が変わらないようにバグ修正を行う。切断されたプレイヤーの車両を絞り込めない件については、バグ修正の完了後に検討する。おそらく、切断されたプレイヤーの車両を絞り込めなくても大して困らないので、バグ修正後に一旦リリースしようと思う。