allow stop halt for each player#540
Conversation
teamhimeh
left a comment
There was a problem hiding this comment.
Automated code review by Antigravity.
This review was generated by analyzing the diff in the context of the full codebase.
| } | ||
| } | ||
|
|
||
| if( file->is_saving() && get_permissions()!=0 && file->get_OTRP_version()<56 ) { |
There was a problem hiding this comment.
古いフォーマットでセーブする際、if( file->is_saving() && get_permissions()!=0 && file->get_OTRP_version()<56 ) の条件では、ほぼすべての私有駅に HS_ALLOW_OTHER_PLAYER_CONNECTION が設定されてしまいます。
set_permissions では所有者のビットが必ずセットされるため、所有されている駅の get_permissions() は0になりません。他プレイヤーへの許可があるか確認するためには、例えば (get_permissions() & ~(1 << owner->get_player_nr())) != 0 のように判定する必要があります。
(Antigravity による自動レビュー)
| } | ||
| } | ||
|
|
||
| // Track permission changes for dirty-rect management |
There was a problem hiding this comment.
描画の不具合(グラフィカルグリッチ)が発生するリスクがあります。last_player_count は permissions != last_permissions の時のみ更新されます。しかし、公共の駅(permissions == 0xFFFF)の場合、プレイヤーが削除されたり倒産したりしても permissions は変わらないのに対し、player_count は減少します。
プレイヤーが離脱すると welt->get_player(i) が null になり、player_count が変わりますが、公共駅の permissions は変わらないため players_dirty が false のままとなり、古い描画領域が dirty としてマークされず、last_player_count も更新されないため、描画の残像(ゴースト)が残る可能性があります。ここでは if( permissions != last_permissions || player_count != last_player_count ) のように判定するべきです。
(Antigravity による自動レビュー)
teamhimeh
left a comment
There was a problem hiding this comment.
先ほどのレビューで位置指定を誤ってしまったコメントの再投稿です。
Automated code review by Antigravity.
| set_permissions(owner ? (1 << owner->get_player_nr()) : 0xFFFF); | ||
| } | ||
| } | ||
| else if( file->is_saving() ) { |
There was a problem hiding this comment.
セーブ中に実行中のゲーム状態を変更してしまっています。else if (file->is_saving()) の中で set_permissions(...) を呼び出すと、駅のアクセス権が変更され、スケジュール登録の再構築がトリガーされてしまいます。
セーブ処理(file->is_saving())はゲーム状態に対して読み取り専用であるべきです。ここで permissions を変更し rebuilt_schedule_registration() を呼び出すと、古いバージョンにセーブしたというだけで駅が公共駅になったり私有駅になったりと、実行中のゲーム状態を破壊してしまいます。このブロックは削除するべきです。
(Antigravity による自動レビュー・再投稿)
|
rdwrを修正しました |
|
コードの変更内容を分析し、変更を網羅するための手動テストケースを作成しました。 提案する手動テストケース
(Automated PR test case generation by AI agent) |
駅への他社乗り入れ許可について、各社ごとに個別に設定可能にします。
https://forum.simutrans.com/index.php/topic,23915.0.html の移植になります。