Skip to content

サーバー起動後プレイヤーが参加しなかった場合次のマップが決まらないまま試合が終了する #208

@fltuna

Description

@fltuna

現状の実装だと、コードのコメントに書いてあるとおり、TimeLeftUtil::ReDetermineExtendType() をMapが完全にスタートする前に呼び出すとサーバーが死ぬため、ラウンドスタート後にVoteタイマーをスタートしている。

// This is for late timer start
// Since we cannot obtain McsMapExtendType before map is fully loaded
// So we'll wait for first round started
Plugin.RegisterEventHandler<EventRoundPoststart>((@event, info) =>
{
if (_isMapStarted)
return HookResult.Continue;
_timeLeftUtil.ReDetermineExtendType();
_isMapStarted = true;
RecreateVoteTimer();
return HookResult.Continue;
});

が、この場合タイトルの通りの状況になるとマップが決まらないままマップが終了してしまうためバグる。

現状思いついている対策は2つ

1. ユーザー参加時の処理でランダムマップにフォールバック

ユーザー参加時(0 -> 1)に VotePending && 投票開始時間 > Timeleft だった場合に強制的に次のマップをランダムで選ぶという対策

2. タイマーの開始タイミングを調整し、正常に動作させる

OnMapStart時にServer.NextFrameなどを呼び出し次のフレームで操作させることでクラッシュを回避する。

3. 2つとも作る

多分これが一番良い

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions