パラメータが巻き戻る現象についての考察

現状の処理として、

・シナリオ、エネミー、フィールドイベント

が全て同時に実行されるような作りをしている場合、最後に実行された処理によって全て上書きされる可能性が高い。


例えば

  • チャットバトルでエネミーと戦う
  • スキルをトリガーとしてプレイヤーのatk+1する

の2つが同時に動くとすると、


  1. エネミーにスキル攻撃する
  2. エネミーが反撃してダメージを受ける & シナリオのトリガー(スキル使用)によってプレイヤーのatkを+1する
  3. プレイヤーのatkが上昇し、HPのダメージは無かったことになる

ダメージを受けてHPの低下が反映された後に、atk+1という順になればいいけれど、それぞれが同時に動くため、どっちが先に処理が終わったとしても、最後に反映された変更で上書きされてしまう。


a. HP8 ATK1 ( ダメージ2が反映された方 )

b. HP10 ATK2 ( atk+1が反映された方 )

で、ダメージ処理"a"はあったが、その後の"b"が上書きしちゃっている。

ここで、"b"が実行されるまでに十分な時間(ダメージを受けて、それをローカルに取得して反映されるまでの500ms程度)があれば、おそらく問題ない。


ユーザー側の暫定対処法

  • 同時に実行させない
  • スキルをトリガーとした処理でパラメータ増加させる前に「メッセージ」を挟むなど時間を少し開ける


WoRの実装としての対処法

  • 差分だけ送信する。パラメータの変化があった部分だけ送信(atk+1という情報のみ)してサーバー側でマージするようにすれば対処可能かもしれない…

World of Role

ワールド運営RPG!ルールを作り、ワールドを管理し、その世界の住人になりきってロールプレイを楽しもう!