自由きままに雑談

枢おとめ

ユーザー
半分相談半分ひとりごとって感じで投稿させて頂きます。

前提としてトリアコンタン様の時刻と天候プラグインを使用しています。
食べ物(アイテム)を一定時間経過したら腐るようにしたい
(EX:リンゴを取得してから24時間経過すると腐ったリンゴに変化する)
のですが、一体どのように仕組みを作ればよいのでしょうか……。

一応考えてみたのは
□アイテムひとつひとつに個別に変数を持たせて時間経過で変数を増やす/減らす
 →変数が一定以上/以下になったら「腐った」をアイテム名の接頭に追加
                 or「腐ったリンゴ」にアイテムを変化させる


問題点としては
□アイテムを完全に個別管理する為アイテムIDでの分岐が使えなくなる
 →たぶん他ユーザー様の合成プラグインが正常に動作しなくなる
□「腐ったリンゴ」にアイテムを変化させる場合(仕方ないことですが)データベースが膨大になる
□同じアイテムであっても取得時間が違うとスタックしなくなる

……等。

思いついてない問題も多分ありそうです。
もっと頭のいい感じの腐らせかたをしたい(?)
 

ツミオ

ユーザー
半分相談半分ひとりごとって感じで投稿させて頂きます。

前提としてトリアコンタン様の時刻と天候プラグインを使用しています。
食べ物(アイテム)を一定時間経過したら腐るようにしたい
(EX:リンゴを取得してから24時間経過すると腐ったリンゴに変化する)
のですが、一体どのように仕組みを作ればよいのでしょうか……。

一応考えてみたのは
□アイテムひとつひとつに個別に変数を持たせて時間経過で変数を増やす/減らす
 →変数が一定以上/以下になったら「腐った」をアイテム名の接頭に追加
                 or「腐ったリンゴ」にアイテムを変化させる


問題点としては
□アイテムを完全に個別管理する為アイテムIDでの分岐が使えなくなる
 →たぶん他ユーザー様の合成プラグインが正常に動作しなくなる
□「腐ったリンゴ」にアイテムを変化させる場合(仕方ないことですが)データベースが膨大になる
□同じアイテムであっても取得時間が違うとスタックしなくなる

……等。

思いついてない問題も多分ありそうです。
もっと頭のいい感じの腐らせかたをしたい(?)
枢おとめさん。
僕もちょうど時間経過でどうのこうのするゲームを制作中なので、少し考えてみました。

・リンゴアイテムは個別に管理する必要がない

ということでしたら、「リンゴを最初に拾った時刻を記録し、24時間経つたびスタックされているリンゴを一つ減らし、腐ったリンゴを一つ増加させる」でどうでしょうか。
もう少しわかりやすく書いてみます。


用意するアイテムデータ:リンゴ[ex:ID1]、腐ったリンゴ[ex:ID2]の二つ
リンゴの増減:
1.リンゴ[ID1]を最初に拾った時刻を記録
2.24時間経過した瞬間にイベントを起こす
3.イベント→リンゴ[ID1]を一つ減らす
4.イベント→腐ったリンゴ[ID2]を一つ増やす
5.さらに24時間経過した瞬間にイベントを起こす
6.イベント→リンゴ[ID1]を一つ減らす
7.イベント→腐ったリンゴ[ID2]を一つ増やす

以下ループです。
リンゴ[ID0]が0個になった場合は、リンゴを最初に拾った時刻をリセットし、次にリンゴを拾ったときの時刻を記録します。

この方法なら、リンゴ[ID1]と腐ったリンゴ[ID2]がいくつになろうが監視すべきデータは「リンゴを最初に拾った時刻を記録」のみなので、データ量も増えないかなと思います。

ただトリアコンタンさんの時刻と天候プラグインを使ったことがないので、全くの的外れでしたら申し訳ありません。


追記:プラグインの制作者ご本人と回答時刻が完全にかぶってしまって恥ずかしい。穴が合ったら遠慮なく指摘してください。
 
最後に編集:

枢おとめ

ユーザー
トリアコンタンさん、ツミオさん、返信ありがとうございます!


>>トリアコンタンさん

腐ったアイテムが別IDになるのはやっぱり避けられませんよね……。
一応対策としてこの前アイテムのIDではなく、名前の文字列を取得して任意の変数に
格納するプラグインを作ってもらったのですが、他ユーザー様の合成プラグインと
組み合わせる方法までは見つけていないのでちょっと考えものです。
もう合成システムも自作するしかない……!(切腹しながら)

>>ツミオさん
なるほど!考えもしなかった方法です。
MV(に限らないとは思いますが)は並列で変数をいじると、
ゲーム内全部の変数条件を確認する為動作が重くなると聞いたことがあるので、
監視するデータが減るのは大変助かります。一度試してみますね!


拾ったアイテムの種類ぶんの変数を監視しなきゃいけないのは変わらないので、
ある程度の数の変数を常に監視/変動させることと、それによって動作が重くなるのは避けられないでしょうね。
そのへんの軽量化が図れれば結構無茶ができるんですが……MV……ダイエットしてくれ……。
 

しぐれん

ユーザー
監視する変数を少なくする方法として、食べ物(腐る可能性のあるアイテム)の合計所持数に制限を付ける方法があります。

食べ物は20個まで持てるとして、変数の21~40を腐敗記録用とします。
食べ物を取得した際に、腐敗記録用から使っていない変数(=数値が0になっている)を探します。
アイテム画面は、最後に開いた時間を記録します。
アイテムの画面を開いた際に、前回開いた時間からまとめて腐敗チェック処理を行います。

これなら、変数は常時監視ではなく、メニューを開くたびに処理なのである程度軽減されると思います。

同種のアイテムをスタックすることが可能な実装はできそうですね。
 
最後に編集:

フトコロ

ユーザー
>枢おとめさん

こんな方法もあるのではないでしょうか。
使う変数は5つです。

1.アイテムを入手した時間を保存する変数(ID1)
2.アイテムを入手した個数を保存する変数(ID2)
3.アイテムを入手した時の手持ちの総数を保存する変数(ID3)
4.腐ったアイテムに変える処理で一時的に使用する変数(ID4)
5.腐ったアイテムに変える処理で一時的に使用する変数(ID5)

入手した時間と個数、手持ち総数を保存する変数を配列として使用して、アイテムを入手する度に変数に追加します。
そのため、変数は事前に配列として初期化します。
なお、ID1とID2の変数は、配列の中に配列を入れます。

以下をスクリプトで実行。
$gameVariables.setValue(1, [])
$gameVariables.setValue(2, [])
$gameVariables.setValue(3, [])
※ID4~5は配列にしません

りんご(アイテムID10とする)の入手と腐敗処理の例は以下の通り。

りんごを入手した時に以下のイベントを実行(必須)。

条件分岐(スクリプト):!($gameVariables.value(1)[10] instanceof Array)
 満たすとき→ $gameVariables.value(1)[10] = []
        $gameVariables.value(2)[10] = []
スクリプト:$gameVariables.value(1)[10].push(入手した時刻)
スクリプト:$gameVariables.value(2)[10].push(りんごを入手した個数)
スクリプト:$gameVariables.value(3)[10] = $gameParty.numItems(10)//りんごの所持数)


りんごの腐敗状況を監視するイベントは以下。

1.現在時刻と、$gameVariables.value(1)[10][0]を比較
 24時間経っていたら2以降を実行、経っていなければイベント終了。

2.腐ったりんごに変える数を取得する
 現在のりんごの所持数と変数ID3の値を比較して、りんごが途中で減っているか判定する。
 まず、現在の所持数を取得。
   変数の操作:ID5で「ゲームデータ - りんごの所持数」を代入

 「変数ID5の値<$gameVariables.value(3)[10]」ならりんごが途中で減っているので、
   変数の操作:ID4で「$gameVariables.value(2)[10][0] - ($gameVariables.value(3)[10] - $gameVariables.value(5))」を代入
   変数ID4が負の値なら 0 にします

 「変数ID5の値>=$gameVariables.value(3)[10]」なら、
   変数の操作:ID4で「$gameVariables.value(2)[10][0]」を代入

3.りんごを腐ったりんごに替える
 りんごを 変数ID4の値分 減少させる。
 腐ったりんごを 変数ID4の値分 増加させる。

4.変数の再計算
 ID1とID2の配列の0番を削除する。
  スクリプト:$gameVariables.value(1)[10].shift()
  スクリプト:$gameVariables.value(2)[10].shift()
 ID3からID4の値を引く。
  スクリプト:$gameVariables.value(3)[10] -= $gameVariables.value(4)

5.最初(1)に戻る、で処理をループさせます。


思いつきですが、どうでしょうか。

>修正
2の変数ID3と変数ID5の引き算が逆でした。

>修正2
アイテムIDを考慮
 
最後に編集:

枢おとめ

ユーザー
>>フトコロさん
大変丁寧な解説、ありがとうございます!
イベント等でリンゴ(腐るアイテム)の数が変動した場合にも適応できそうですね。
ただ腐る可能性のあるアイテムが100個くらいあるので、アイテム一種類につき変数5つを
使ってしまうと変数上限の5000をかなり圧迫してしまいそうです……。
(なんか内部いじって9999個まで使えるようにできる、みたいなのを聞いたことがある気もしますが)
そこでアイテムの腐敗に関してはグローバル変数を使いたいと思っています……が、
当方JSがまだまだ本当にさっぱりで、実はグローバル変数の仕様があんまりよく分からないまま使っています。
情報がどこに保存されてるのかもよく分かりません。無限に使えるし宇宙に保存されてるんですかね。


>>腐るリンゴについて返信をくださったみなさまへ
みなさま貴重なご意見、アドバイス等ありがとうございます。
自分では絶対に思いつかないようなものばかりで大変参考になり助かります!
時間の許す限りですが、教えていただいた方法は全て試させていただいております。
腐ったリンゴがインベントリに溜まりまくるのは中々に異様な光景です。
ちなみにまだテスト段階なのでリンゴは1時間で腐ります。生肉かな?
 

フトコロ

ユーザー
大変丁寧な解説、ありがとうございます!
イベント等でリンゴ(腐るアイテム)の数が変動した場合にも適応できそうですね。
ただ腐る可能性のあるアイテムが100個くらいあるので、アイテム一種類につき変数5つを
使ってしまうと変数上限の5000をかなり圧迫してしまいそうです……。
アイテムIDを考慮して先日の内容をちょっと直しました。
変数を配列にして、更にその中に配列を入れることで、アイテムの種類にも対応します。
このように組めば、アイテムIDが増えても使用する変数は5つですむと思います。
 
ご無沙汰しています。
遅ればせながら、リューイさんの
ツクールフォーラムが設立して早1ヶ月になります、これから何に期待していますか?」についてお答えします。

僕としては、ひとまず、こんな感じでいいのかな、と思っています。
可能なら、画面右に表示される「新規タイムライン」が現在5件までですが、「続きを読む...」ボタンを作って、
最低50件くらいまで表示できるようになってほしいなと思いました。
新しいスレッドについても同様ですが、やはり「新規タイムライン」は結構皆様の動向がいろいろ見られて便利です。
 

ザンちゃん

ユーザー
ご無沙汰しています。

可能なら、画面右に表示される「新規タイムライン」が現在5件までですが、「続きを読む...」ボタンを作って、
最低50件くらいまで表示できるようになってほしいなと思いました。
神無月サスケさんへ
右側の新規タイムラインと新規スレッドは、その文字部分をクリックすると、過去の分が表示されますよー。
ちなみにクリックすると、クリックした方が表示されますが、タブが表示されているので、タブをクリックすることによって好きな方を見られます。

新規タイムラインは10ページ目までありますね。

添付画像を見て貰うと分かりますが、「新規」項目の下にタブが合って、そこをクリックすると好きな方を見られます。
 

Attachments

ザンちゃんさん:
ナイスな情報ありがとうございます!ここ、触ったこともなかった……というか、
存在自体気づいておりませんでした。大変助かりました!
まだまだ分からないことがあるため、まさに「聞くは一瞬の恥、聞かぬは一生の恥」を
実現出来て良かったです。ザンちゃんに感謝。
 

ザンちゃん

ユーザー
神無月サスケさん
いいえー。わたしも他の方が説明しているのを見て分かったので……。
タブの存在も、説明の為にSSを撮って始めて気付きました。神無月サスケさんの質問がなかったら、タブには気付けなかったので、こちらこそありがとうございます。
 

枢おとめ

ユーザー
なんかいつも流れをぶった切りしてしまって申し訳ないですが、ちょっと気になったことがあるので投稿させて頂きます。

以前からMVの暗号化についての話(標準機能の素材暗号化に問題がある?等)を耳にすることがあるのですが、
現状はどうなっているのでしょうか。

一度自分で試してみたところ、デプロイメントしてもマップチップ素材が普通に抽出できたりしちゃったので、
有料素材を使用していることもあり、このままのファイルを配布するのはまずいかなあって感じです。
私がMVの暗号化を使いこなせていないゴリラだという可能性は大いにあります。
 

トリアコンタン

モデレーター
スタッフ
モデレーター
こんにちは。
暗号化に成功すると、Balloon.pngがBalloon.rpgmvpとなり、中身も暗号化され、直接ビューアなどで閲覧できなくなります。
もしなっていない場合、暗号化に失敗している可能性があります。
なお、以下の仕様にも注意が必要です。
  • キーがdata/System.jsonに出力されるのでやろうと思えば複合化が可能
  • Window.pngおよびLoading.pngは暗号化されない。
  • 暗号化した作品はRPGアツマールにはアップロードできない。
 

しぐれん

ユーザー
フォーラムで質問していい内容が、どのあたりまでかわからないので、雑談スレに書き込みます。
普段はvscodeで編集していています。
少し前に、ツクールでもgitによるバージョン管理は有効という話を見て、人によってはマップもバージョン管理してると知って自分でもやろうとしました。
以前から.jsのみgitで管理してしましたが、途中あたりからコミットを省略して有効活用していませんでした。

このあと、何があったかはあまり覚えていませんが、.gitフォルダの名前を一度変更してしまった後で動かしたためにあちこちでデータが壊れたようです。
ツクールのプラグインやデータは無事なのですが、gitでコミットしようとすると、「Git: Failed to execute git」と出て失敗します。
過去の履歴が消えてもいいので、なんとかする方法はないでしょうか?

出ているエラーは
fatal: ambiguous argument 'master': unknown revision or path not in the working tree.
あたりがありました。
前に動くようにしたときに何をしたか思い出せないです。

【追記】
自己解決しました。
configにメアド設定し忘れていました。
おまけとして、ツクール用のgit除外設定ファイルができました。

#.gitignoer
#ツクール用
#音声ファイル
*.m4a
*.ogg
#desktop.iniというwindowsの設定用隠しファイル
desktop.ini

#ツクール本体が自動生成するスクリプト
#プラグインパラメータを保存したいのであれば、コメントアウト
/js/plugins.js

# エディタ用の無視設定
/.vscode/
#セーブデータ
/save/
#その他リソース
/audio/
/img/
/fonts/
/icon/
/movies/
#あまり変更しないlib
/js/libs/
 
最後に編集:

枢おとめ

ユーザー
名前出していいのか微妙なところですが、ニコニコ動画の実況者である幕末志士さんがプロデュースしたMV製「ゲラーマン」やたらすごいですよね……。
(あくまでプロデュースであり、システムやイラスト等は外注しているそうです。)

特に色んなアプリが起動できるスマホの中身(仕組み)を是非のぞいてみたいです。
案外大した処理はなく、ただピクチャで錬成してるのかもしれませんが。
 

しぐれん

ユーザー
属性の状況を見て弱点かどうかを表示するプラグインの、新しいバージョンを作成中です。
いわゆる「効果は抜群だ!」的な意味での用語の質問です。
日本語だと、弱点・軽減・無効ですが、対応する英語って何がいいでしょうか?
変数名で困っているので。
 

枢おとめ

ユーザー
属性の状況を見て弱点かどうかを表示するプラグインの、新しいバージョンを作成中です。
いわゆる「効果は抜群だ!」的な意味での用語の質問です。
日本語だと、弱点・軽減・無効ですが、対応する英語って何がいいでしょうか?
変数名で困っているので。
ポケモンの「こうかはばつぐんだ!」は英語で「It’s super effective!」だそうですが、effectiveだと他の変数名と被りそう感が凄まじいですね……。
 

しぐれん

ユーザー
直訳するともっと違う単語が出てきそうですが、弱点=weak 軽減=guard 無効=block みたいな表示をほかのゲームでよく見かける気がします
無効でblockは良さそうですね。使ってみます。

ポケモンの「こうかはばつぐんだ!」は英語で「It’s super effective!」だそうですが、effectiveだと他の変数名と被りそう感が凄まじいですね……。

「こうかはばつぐんだ!」は英語だと、effectiveですか。
こっちは直感的にイメージできるか怪しいので使うのはつらそうです。

参考になる意見ありがとうございました。
 
トップ