1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

時間経過でイベントを発生させるプラグイン

くらむぼん2017-05-03に開始した「ツクールMV」の中の討論

  1. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    一定の時間が経過した後に、特定のイベントを発生させるプラグインコマンドをご用意しました。
    一度イベントを設定すればセーブしてゲームを終了した後も時間経過はカウントされ、
    ロードした時に一気にイベントが発生します。
    いわゆる「放置ゲーム」などを作る時にお役立てください!

    プラグイン
    https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/TimeEvent.js
    (上のアドレスを右クリックして「保存」してください)

    使い方とプラグインコマンド
    ■on 時間(分)が経ったら確率でスイッチをオンする
    TimeEvent on 時間(分) 確率(%) ONにするスイッチ番号 if条件1(省略可) if条件2(省略可)
    (例)TimeEvent on 5分 60% \S[3] \S[7] \V[2]>60
    5分経ったら60%の確率で「スイッチ3番:三毛ネコ」スイッチをONにします。
    (ただし、スイッチ7番:赤いボールがONで変数2番:餌が60より上のとき)

    ※if条件1,2には「スイッチ番号」か「変数の比較」が入ります。省略可
    ※「分」と「%」は書かなくても大丈夫。\S[3]も単に3だけでもOK
    ※\S[7]と\V[2]>60は7と2にできません、比較する数字(60)と区別できないため

    ■addevery 経過時間ごとに確率で変数を足す
    TimeEvent addevery 時間(分) 確率(%) 変数番号 加算値or加算変数番号 if条件1(省略可) if条件2(省略可)
    (例)TimeEvent addevery 1分 80% \V[3](←単に3でもOK) 10
    1分ごとに80%の確率で「変数3番:人口」を10増やします。

    他にも便利な時間イベント用のプラグインコマンドがありますので、詳しくはプラグインのヘルプを見てください!

    権利表記
    MIT License
    プラグインに記載されている作者名は削除しないでください。
    それ以外は何の制限もありません、ご自由にどうぞ!
    • 製作者: くらむぼん
    • 非商用利用: 自由
    • 商用利用: 自由
    • 再配布: OK
    • 加工: OK
    • 加工後の再配布: OK
    • シリーズ: ツクールMV
     
    最後に編集: 2017-05-28
    #1
    ネコタ, くろうど, メルサイア他10人がいいね!しています
  2. みなみよつば

    みなみよつば ユーザー

    こんばんはー。

    放置ゲームコンテスト用の作品に使わせてもらいました!
    時間系のイベントが色々と作れそうで、とても面白いプラグインでした。

    もしかしたら使い方が間違っていたのかもしれませんが、
    うまくイベント発生しないことがあった気がしたので、
    ご報告しておきます。



    ■ TimeEvent commonで発動させたイベント後、リロードすると動かなくなる?

    TimeEvent commonでイベント発生を設定した後に、
    鳥小屋.txtさんのオートセーブのプラグインを設定させ、
    次のイベントに備えていたのですが。

    [​IMG]


    RPGアツマールの非公開でテストしたところ、
    同列の処理を行っているイベントを発生した時に
    リロードを推してしまうと、
    時間カウントがなくなってしまうような気がしました。
    (画像で言うと、フェードアウトが始まってからリロードすると、
    時間カウントが全くされないようになってしまう印象がありました)

    一度ロードから発生させちゃうと、
    発生しない仕様なのかなぁ……とも思いましたが……。

    バグか判断つかなかったので、一応報告しておきます。

    なお、発生はコミュニティ版のコアスクリプト(1.2)、
    Google Clomeで確認しています。
     
    #2
    印度一好色, kuroワタベ がいいね!しています
  3. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    早速ご使用頂けて嬉しいです!
    すみません、何らかのバグまたは違和感のある挙動があるようですね…
    まずこちらで何がバグなのか現状把握したいため詳しい情報を頂ければ幸いです。

    ・「RPGアツマールで~」とありますが、テストプレイでもバグが発生しますか?
    ・「リロードを押すと時間カウントが無くなる」とありますが、つまりそれはどのコモンイベントですか?
    ・「同列の処理」とはなんですか?
    ・「一度ロードから発生させちゃうと、発生しない」の前段と後段の意味を教えてください

    質問攻めスタートで申し訳ないですが現象を認識したいのでよければお聞かせ下さい><
     
    #3
    印度一好色kuro がいいね!しています
  4. みなみよつば

    みなみよつば ユーザー

    すみません、見直したらご報告内容が意味不明な感じになっていました。
    改めて詳細記載しておきます。不十分ですみません。

    ■ テストプレイでもバグが発生するか?

    RPGツクール(Ver1.4)のテストプレイから実施しても
    同じ現象が起きました。


    ■ 「同列の処理」について
    ■ 一度ロードから発生させちゃうと発生しない

    この点、説明が悪かったと思うので、
    発生内容の詳細記載しておきます。


    TimeEvent commonで、1分後にイベント発生を指定した後に
    オートセーブしてイベントを終了。
    その間は何も処理をせず、1分後に画像のようなコモンイベントでイベントを実施。
    コモンイベント内にTimeEvent commonで新しいコモンイベントの実行を1分後に入れておき、
    これを繰り返して1分毎にゲームを進行させています。

    これによって、オートセーブの後に一度テストプレイを終了し、
    1分後にロードを行うと、TimeEvent commonで指定したコモンイベントは発生してくれます。

    しかし、1分後にロードを行ってコモンイベントが発生した時、
    コモンイベントが完全に終わる前(画像で言えばフェードインが終わったあたり)で
    ゲームを終了して、同じセーブデータを読み込むと、
    先程はロード直後にTimeEvent commonで指定したコモンイベントが
    起きたのですが、直後にコモンイベントが起きなくなってしまいます。
    (1分経過してもイベントが発生しません)


    流れ基軸にまとめると

    1.イベントAでTimeEvent commonで1分後にコモンイベント5が起こるように指定
    2.イベントAで1の後にオートセーブ
    3.イベントA終了、ゲームも終了
    4.1分後に「2」のオートセーブされたデータをロード(コモンイベント5が発動)
    5.コモンイベント5発動直後にゲーム終了
    6.再度「2」のセーブを読み込むが、コモンイベント5が起こらない
    (1分経過しても起こらない)


    ■ 「リロードを押すと時間カウントが無くなる」とありますが、つまりそれはどのコモンイベントですか?

    TimeEvent commonで呼び出されるはずのコモンイベントです。

    セーブデータをロードした直後にTimeEvent commonで呼び出されたコモンイベント中に
    ゲームを終了して、再度同じセーブデータを読み込むと、
    TimeEvent commonで指定されていたコモンイベントが実行しない状態になります。



    うまく伝わっているか自信がないので、
    動画も貼っておきます。



    不明点などあればご連絡下さい。
     
    最後に編集: 2017-05-23
    #4
    印度一好色 がいいね!しました
  5. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    動画までつけて頂いて…ありがとうございます!
    その上で、私の方で実験したりアツマールに投稿されているものをプレイさせて頂いたりした結果を申し上げます。

    まず、上の画像を見る限り、髪の毛が生えるかどうか運次第(70%)なので、失敗側にデバッグメッセージとして「髪の毛判定は失敗しましたがコモンイベント5~12は発生しました」という表示を仕込んでもう一度試してみて下さい。

    その上で、これは本件バグに関与するか何とも言えないのですが、RPGアツマールに投稿されているゲームを動画と同様のタイミングでリセットしたところ、なんとセーブデータが消失(!)してしまいました。オートセーブの扱い方に何か問題がある可能性がございますのでご確認下さい。


    私の想定仕様ではTimeEvent commonは同じ地点からロードすれば何度でも発生します。
    従ってこちらのプラグインか、オートセーブか、それらの扱い方のどこかに問題があるのは間違いありません。
    複数の要素が絡むとややこしいですが、どうかめげずに追跡調査を続けて頂ければ幸いです!
     
    #5
    印度一好色 がいいね!しました
  6. みなみよつば

    みなみよつば ユーザー

    ありがとうございます。アツマールの方は、ちょっと処理変えてアップしています。同現象発生を防ぐためにコモンイベント発生直後(掲載していた画像のコモンイベント冒頭)にオートセーブの処理入れています。
    (イベント冒頭でセーブすることで、今回の事象が起きてもイベント冒頭のセーブを
    読み込み、事象回避できるようにしています)

    そのため、多分セーブ消えたのは、オートセーブの処理走ってる時にセーブしたからとかかも……。

    失敗時の件、2~3日以内できるだけ早く試してみます。結果できましたら、ご報告させて頂きます。
     
    最後に編集: 2017-05-23
    #6
    印度一好色くらむぼん がいいね!しています
  7. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    すみません、別の原因から大変誤解を招く解答をしてしまいました。

    その後別のゲームで遊んでいて気づいたことですが、
    RPGアツマールで、EDGEブラウザを用いてゲームをプレイ中に更新すると問答無用でロードが消える(たように見える)ようです。
    従ってセーブデータ消滅については関係ない可能性が高いです!
    今から運営さんに投げてきますね(T_T)
     
    #7
    印度一好色 がいいね!しました
  8. みなみよつば

    みなみよつば ユーザー

    こんばんは。遅くなりました。

    失敗側にデバッグメッセージを……ということですが、
    「それ以外のとき」の項目にデバッグメッセージという意味で
    よろしかったのでしょうか。

    分岐の有無によっての検証という意味かなぁ……と思いましたので、
    以下のように実験してみました。


    ・呼び出されるコモンイベントの冒頭にメッセージ表示「コモンイベント開始」
    ・成功時にメッセージ表示「成功時の処理」
    ・失敗時にメッセージ表示「失敗時の処理」
    ・オートセーブ処理をする時に使っているコモンイベントでメッセージ表示「オートセーブ処理」
    (画像参照)

    [​IMG]
    [​IMG]

    結果から申し上げますと、コモンイベント発生直後(コモンイベント開始のメッセージ表示時)から
    リセットをしてしまうと、再ロード時にイベントが再発してしまうようです。
    (念のため、成功時の処理・失敗時の処理が表示されたタイミングでも
    リセットしてみましたが、セーブを再ロードするとイベントが発生しないように思えます。
    今回は全てテストプレー機能から実行しています)


    なお、再ロード時に「オートセーブ処理」の記載などもありませんでしたので、
    ロード時にオートセーブ機能が走っていることもないかと思います。

    検証に使ったゲームのデータ、限定公開機能でアップしておきます。
    (1回目・2回目のみデバッグメッセージ載せています)

    https://game.nicovideo.jp/atsumaru/games/gm3345?key=819435247e62

    また、検証中に気づいたんですが、
    ゲームを一度閉じなければ大丈夫なようです。

    1分後にコモンイベントを呼び出すようにしたまま、
    ゲームを閉じずに1分経過。ゲームを起動したままの状態でコモンイベントが発動し、
    「成功時の処理」が表示されてからリロードした場合は
    コモンイベントが起きました。

    ただ、リロードで問題なく起きるセーブデータも、一度起動して再度リロードすると
    コモンイベントが発動しないように見えます。
     
    #8
    印度一好色 がいいね!しました
  9. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    状況確認ありがとうございます!こういう時に限定公開は便利ですね~
    さて、私の方でも動作を確認致しました。つまり起こって欲しいコモンイベントが起こってくれないという問題だということですね、ちょっとこちらの方で調査をしてみます。

    >結果から申し上げますと、コモンイベント発生直後(コモンイベント開始のメッセージ表示時)からリセットをしてしまうと、再ロード時にイベントが再発してしまうようです。

    すみません、念のためですがこれは「再発してしまう」ではなく「再発しない」でよろしいですね?
     
    #9
    印度一好色 がいいね!しました
  10. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    あっ、もう一点とんでもないことに気づいたのですが、こちらのゲームをロードさせて頂くと
    「オートセーブ処理」のメッセージが出る場合はもちろん、出ない場合も(!!)
    「サーバーセーブしました」と画面外右下のフキダシで表示されています。

    これは別のイベントの処理でロード後すぐにオートセーブが走ってるということではないですか?
    それならイベントが一度発生すると起こらなくなってしまう理由も納得がいきます。
    もう一度、どこか別の部分でロード後すぐにオートセーブしていないかご確認くださると嬉しいです!!
     
    #10
    印度一好色 がいいね!しました
  11. みなみよつば

    みなみよつば ユーザー

    毎回すみません。ご認識の通り、イベントが再発しない(コモンイベントが発生しなくなる)という意味で間違いありません。

    また、ご指摘の通りサーバーセーブ出ました確認しました。
    イベントの組み込み方が悪いのかなぁ……と思い、新規プロジェクトで「TimeEvent common」を
    使ったイベント作ってみたら問題なく動いた&オートセーブのスロット番号を変えたりしてみたら
    どうもこのゲームのプロジェクトだけセーブ処理が残ってしまうことが多いようで、
    ご指摘のセーブ処理が走ってる~という可能性が高いのかなぁと思っています。

    お時間、取らせてしまい、ご迷惑おかけしました。
    何度も見て頂き、ありがとうございます!

    ついでに、このプラグイン、経過時間の指定0.1(分)とかもいけるんですね!
    最低時間1分なのかと勝手に思ってたので、
    色々触ってたら、色んな使い方できて汎用性高いなぁ……とか思っちゃいました。

    また使わせてもらいます~
     
    #11
    kuroくらむぼん がいいね!しています
  12. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    おお、ついに原因が見つかったみたいですね!
    とりあえずプラグインのバグでなかったようですので私は一安心です、ゲームのバグ修正頑張ってください><

    そして経過時間ですが、小数も行けるんだ…w(←私も知らなかった)
    もちろんこれからも仕様として残しておきます、ぜひ便利にお使い下さい!


    あ、これは使用者の皆さん宛ですがプラグインについて。少し更新しました!
    対象となるスイッチや変数の番号を3,4の形だけでなく\S[3],\V[4]の形でも指定できるようにしました。
    (このページ一番上の「使い方とプラグインコマンド」の「単に3でもOK」と書いてある部分です)
    その右のifスイッチ番号やif変数条件と書き方をあわせるためです。
    意味自体は同じですし、これからもどちらの書き方でも構いませんので適当にどうぞ~
     
    #12
    印度一好色☆鶴香★ がいいね!しています
  13. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    プラグインを大幅更新しました~!><

    まず、「時間が来るたびに」実行するevery系のメソッドをすべての命令に追加しました。
    今まではaddeveryだけだったのですが、例えばoneveryと書けば指定時間が来るたびにスイッチをONにできます!

    そして、everystopという命令ですべてのevery系タイムイベントを削除できます、合わせてお使い下さい~
     
    #13
    印度一好色, ☆鶴香★, kuro他1人 がいいね!しています
  14. リューイ

    リューイ ユーザー

    更新作業お疲れ様です。
    こちらのプラグインに今凄くお世話になっております~

    早速ながら更新されたプラグインを試してみますね:kaojoy:
     
    #14
    印度一好色くらむぼん がいいね!しています
  15. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    かなーりちょっとした変更点ですが再びプラグイン更新しました。
    ifスイッチ番号とif変数条件をif条件1,if条件2としました。
    変数から先に条件指定したり、条件2だけ省略したり、2つとも変数条件にしたりできます!
     
    #15
    ☆鶴香★, みささぎかなめ印度一好色 がいいね!しています
  16. ワタベ

    ワタベ ユーザー

    こちらのプラグインを使用して放置ゲームを制作中です。
    現在、壁にブチ当たっており、御教授いただけないかと書き込みをしております。

    <ゲーム内容>
    時間経過やミニゲームで『変数1』が上昇。
    この変数を消費するとイベントを発生させることができるADV。

    <やりたいこと>
    ・ゲームプレイ中、『変数1』を約1秒ごとに『1』増やす。
     →並列処理にて『変数1に+1加算』『60秒ウェイト』で実現可能。
     →プラグインコマンドにて『TimeEvent addevery 0.02分 100% \V[1] 1』で実現可能。

    ・ゲーム終了後、『変数1』を約1分ごとに『1』増やしたい。
     →別に『変数2』を作り、『TimeEvent addevery 1分 100% \V[1] 1』で管理。
      SAVE時に『変数2』に『0』を代入し、
      ゲーム起動時に『変数2』の数字を『変数1』に足そうとしたが上手くいかず。

    ・ゲーム終了後に増加する『変数1』に上限を設定したい。
     →条件分岐などを使えば可能かと思いましたが、そもそも上記が上手くいかない。

    ・ゲーム再開時に放置によってプラスされた『変数1』を一瞬で表示したい。
     →プラグインコマンド『TimeEvent addevery』を使用すると、
      次回起動時に変数が足される処理が行われるようです。
      このため放置中の数字が加算されるのに時間が掛かり、
      イベントを起動すると加算が止まってしまいます。
      この計算や放置によってプラスされる数字を一瞬で表示する方法は無いでしょうか?

    ・放置ゲームを制作された方に『TimeEvent commonevery』を使えば出来ると教えてもらい、プロジェクトデータまで見せていただきましたが、やり方が分かりませんでした。

    よろしくお願いします。
     
    #16

このページを共有