マップ上を歩行するとアクターが自動回復する方法について

ネクロノ蜜柑

マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ネクロノ蜜柑 » 2021年5月02日(日) 11:43

こんちにわ。いつもお世話になっております。

ローグライクのように歩行するとアクターのHPが1ずつ自動回復する方法を探しております。
可能であればHPが1ずつ自動回復する歩行数はアクター別に設定出来ればありがたいです。
良い方法をご助言いただければ、助かります。よろしくお願いいたします。

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ムノクラ » 2021年5月02日(日) 12:12

ネクロノ蜜柑 さんが書きました:こんちにわ。いつもお世話になっております。

ローグライクのように歩行するとアクターのHPが1ずつ自動回復する方法を探しております。
可能であればHPが1ずつ自動回復する歩行数はアクター別に設定出来ればありがたいです。
良い方法をご助言いただければ、助かります。よろしくお願いいたします。

こんな並列処理で可能です。

コード: 全て選択

◆変数の操作:#0001 = 歩数
◆条件分岐:#0001 ≠ #0002
  ◆変数の操作:#0001 %= 4
  ◆条件分岐:#0001 = 0
    ◆HPの増減:ハロルド, + 1
    ◆文章:なし, ウィンドウ, 下
    :  :ハロルド回復
    ◆変数の操作:#0002 = 歩数
    ◆
  :分岐終了
  ◆
:分岐終了


SS02.png

上記では4歩毎にハロルドのHPが1回復します。
剰余(%=)は割り算した余りの値を代入します。
(1歩毎となると、この処理ではできないとは思いますが)
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
sally
記事: 119
登録日時: 2019年8月06日(火) 05:11

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by sally » 2021年5月02日(日) 20:08

横から失礼します。

1歩ごとに設定するなら、
変数0001を0002で減算して1であれば、という条件にすればムノクラ さんがご提示された方法で可能かと思います

追記
間違えた。現在の歩数 - 取得時点の歩数なので、-1ですね。
最後に編集したユーザー sally on 2021年5月03日(月) 21:07 [ 編集 1 回目 ]
ネクロノ蜜柑

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ネクロノ蜜柑 » 2021年5月03日(月) 00:14

ムノクラ さんが書きました:
ネクロノ蜜柑 さんが書きました:こんちにわ。いつもお世話になっております。

ローグライクのように歩行するとアクターのHPが1ずつ自動回復する方法を探しております。
可能であればHPが1ずつ自動回復する歩行数はアクター別に設定出来ればありがたいです。
良い方法をご助言いただければ、助かります。よろしくお願いいたします。

こんな並列処理で可能です。

コード: 全て選択

◆変数の操作:#0001 = 歩数
◆条件分岐:#0001 ≠ #0002
  ◆変数の操作:#0001 %= 4
  ◆条件分岐:#0001 = 0
    ◆HPの増減:ハロルド, + 1
    ◆文章:なし, ウィンドウ, 下
    :  :ハロルド回復
    ◆変数の操作:#0002 = 歩数
    ◆
  :分岐終了
  ◆
:分岐終了


SS02.png
上記では4歩毎にハロルドのHPが1回復します。
剰余(%=)は割り算した余りの値を代入します。
(1歩毎となると、この処理ではできないとは思いますが)



ムノクラ様

ご返信ありがとうございます_(._.)_ムノクラ様の仰る通りにイベントを組むとHP回復しました!アクターごとに組んでも各アクター分しっかり回復しました。ありがとうございます!!

可能であれば結構なのですが、回復する対象を先頭のアクターのみ設定可能でしょうか?
例えばアクター2が先頭の場合、アクター2の歩行回数でアクター2のみ回復。
アクター3が先頭の場合、アクター3の歩行回数でアウター3のみ回復。後列のパーティーは回復しないようなイメージです。よろしくお願い致します。
ecf5DTTzl6h6lJj02
記事: 450
登録日時: 2018年12月23日(日) 13:55

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ecf5DTTzl6h6lJj02 » 2021年5月03日(月) 21:15

こんばんは。
横から失礼します。
ネクロノ蜜柑 さんが書きました:ローグライクのように歩行するとアクターのHPが1ずつ自動回復する方法を探しております。
可能であればHPが1ずつ自動回復する歩行数はアクター別に設定出来ればありがたいです。
良い方法をご助言いただければ、助かります。よろしくお願いいたします。

ネクロノ蜜柑 さんが書きました:可能であれば結構なのですが、回復する対象を先頭のアクターのみ設定可能でしょうか?
例えばアクター2が先頭の場合、アクター2の歩行回数でアクター2のみ回復。
アクター3が先頭の場合、アクター3の歩行回数でアウター3のみ回復。後列のパーティーは回復しないようなイメージです。よろしくお願い致します。

きちんとテストしてませんが、下記の方法でできるかと思います。

1.アクターのメモ欄に、回復する歩数間隔を設定するメタを記載する。
 この例では、<HealDuration:x> (x は任意の整数) というメタタグを記述するようにしています。

2.ゲーム開始時に、自動回復を管理するための設定をするイベントを作る。
 イベント内容は以下の通り
1ページ目:
出現条件: なし
トリガー: 自動実行
実行内容:

コード: 全て選択

◆注釈:パーティメンバー1番のアクターのID(=先頭アクターのID)を取得し 変数ID 0004 先頭アクターのID に代入。
◆変数の操作:#0004 先頭アクターのID = パーティメンバー1番のアクターID
◆注釈:歩数を取得し、変数ID 0005 現在の歩数、変数ID 0006 HP回復までの歩数 に代入。
◆変数の操作:#0005..0006 = 歩数
◆注釈:自動回復管理(監視)用のコモンイベントを有効にするためのスイッチを ON に
:  :自動回復を有効にするスイッチを OFF にしておく。
◆スイッチの操作:#0001 自動回復管理 = ON
◆スイッチの操作:#0002 自動回復有効フラグ = OFF
◆条件分岐:先頭アクターのID > 0
  ◆注釈:先頭アクターが存在している場合
  ◆注釈:先頭アクターのメモ欄を参照し、<HealDuration> の値を取得し、
  :  :変数 ID 0007 回復間隔 に代入。
  :  :記述がない場合、数値以外が入っていた場合、0 を代入する。
  ◆変数の操作:#0007 回復間隔 = Number($gameActors.actor($gameVariables.value(4)).actor().meta['HealDuration']) || 0
  ◆条件分岐:回復間隔 > 0
    ◆注釈:回復間隔に有効な値が代入されている
    ◆スイッチの操作:#0002 自動回復有効フラグ = ON
    ◆変数の操作:#0006 HP回復までの歩数 += 回復間隔
    ◆
  :分岐終了
  ◆
:分岐終了
◆セルフスイッチの操作:A = ON

2ページ目:
出現条件: セルフスイッチ A
トリガー: 決定ボタン
実行内容: なし

3.自動回復を管理するコモンイベントを作成する。
 イベント内容は以下の通り
トリガー: 並列処理
スイッチ: 0001 自動回復管理
実行内容:

コード: 全て選択

◆注釈:歩数を取得し、変数ID 0005 現在の歩数に代入。
◆変数の操作:#0005 現在の歩数 = 歩数
◆注釈:変数ID 0004 先頭アクターのID の内容を 変数ID 0008 旧先頭アクターのID に代入。
◆変数の操作:#0008 旧先頭アクターのID = 先頭アクターのID
◆注釈:パーティメンバー1番のアクターのID(=先頭アクターのID)を 変数ID 0004 先頭アクターのIDに代入。
◆変数の操作:#0004 先頭アクターのID = パーティメンバー1番のアクターID
◆条件分岐:先頭アクターのID < 1
  ◆注釈:先頭アクターが存在しない場合
  ◆注釈:回復スイッチをOFFにして、イベントを中断する。
  ◆スイッチの操作:#0002 自動回復有効フラグ = OFF
  ◆イベント処理の中断
  ◆
:分岐終了
◆条件分岐:先頭アクターのID ≠ 旧先頭アクターのID
  ◆注釈:先頭のアクターが変更されていた場合
  ◆注釈:先頭アクターのメモ欄を参照し、<HealDuration> の値を取得、
  :  :変数ID 0007 回復間隔 に代入。
  :  :記述がなかったり、数値以外が入っていた場合は 0 を代入。
  ◆変数の操作:#0007 回復間隔 = Number($gameActors.actor($gameVariables.value(4)).actor().meta['HealDuration']) || 0
  ◆条件分岐:回復間隔 < 1
    ◆注釈:記述が無かった、もしくは、数値以外が入っていた場合
    ◆注釈:回復スイッチを OFF にして、イベントを中断。
    ◆スイッチの操作:#0002 自動回復有効フラグ = OFF
    ◆イベント処理の中断
    ◆
  :分岐終了
  ◆注釈:設定を変更して、イベントを中断。
  ◆変数の操作:#0006 HP回復までの歩数 = 現在の歩数
  ◆変数の操作:#0006 HP回復までの歩数 += 回復間隔
  ◆スイッチの操作:#0002 自動回復有効フラグ = ON
  ◆イベント処理の中断
  ◆
:分岐終了
◆注釈:回復処理
◆条件分岐:現在の歩数 ≥ HP回復までの歩数
  ◆HPの増減:{先頭アクターのID}, + 1
  ◆注釈:回復までの歩数を更新する。
  ◆変数の操作:#0006 HP回復までの歩数 += 回復間隔
  ◆
:分岐終了


以上、
適当に作った上に、テストもしっかりしていないので、不具合があるかもしれませんが、
ご参考までに。
ネクロノ蜜柑

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ネクロノ蜜柑 » 2021年5月04日(火) 11:16

ecf5DTTzl6h6lJj02 さんが書きました:こんばんは。
横から失礼します。
ネクロノ蜜柑 さんが書きました:ローグライクのように歩行するとアクターのHPが1ずつ自動回復する方法を探しております。
可能であればHPが1ずつ自動回復する歩行数はアクター別に設定出来ればありがたいです。
良い方法をご助言いただければ、助かります。よろしくお願いいたします。

ネクロノ蜜柑 さんが書きました:可能であれば結構なのですが、回復する対象を先頭のアクターのみ設定可能でしょうか?
例えばアクター2が先頭の場合、アクター2の歩行回数でアクター2のみ回復。
アクター3が先頭の場合、アクター3の歩行回数でアウター3のみ回復。後列のパーティーは回復しないようなイメージです。よろしくお願い致します。

きちんとテストしてませんが、下記の方法でできるかと思います。

1.アクターのメモ欄に、回復する歩数間隔を設定するメタを記載する。
 この例では、<HealDuration:x> (x は任意の整数) というメタタグを記述するようにしています。

2.ゲーム開始時に、自動回復を管理するための設定をするイベントを作る。
 イベント内容は以下の通り
1ページ目:
出現条件: なし
トリガー: 自動実行
実行内容:

コード: 全て選択

◆注釈:パーティメンバー1番のアクターのID(=先頭アクターのID)を取得し 変数ID 0004 先頭アクターのID に代入。
◆変数の操作:#0004 先頭アクターのID = パーティメンバー1番のアクターID
◆注釈:歩数を取得し、変数ID 0005 現在の歩数、変数ID 0006 HP回復までの歩数 に代入。
◆変数の操作:#0005..0006 = 歩数
◆注釈:自動回復管理(監視)用のコモンイベントを有効にするためのスイッチを ON に
:  :自動回復を有効にするスイッチを OFF にしておく。
◆スイッチの操作:#0001 自動回復管理 = ON
◆スイッチの操作:#0002 自動回復有効フラグ = OFF
◆条件分岐:先頭アクターのID > 0
  ◆注釈:先頭アクターが存在している場合
  ◆注釈:先頭アクターのメモ欄を参照し、<HealDuration> の値を取得し、
  :  :変数 ID 0007 回復間隔 に代入。
  :  :記述がない場合、数値以外が入っていた場合、0 を代入する。
  ◆変数の操作:#0007 回復間隔 = Number($gameActors.actor($gameVariables.value(4)).actor().meta['HealDuration']) || 0
  ◆条件分岐:回復間隔 > 0
    ◆注釈:回復間隔に有効な値が代入されている
    ◆スイッチの操作:#0002 自動回復有効フラグ = ON
    ◆変数の操作:#0006 HP回復までの歩数 += 回復間隔
    ◆
  :分岐終了
  ◆
:分岐終了
◆セルフスイッチの操作:A = ON

2ページ目:
出現条件: セルフスイッチ A
トリガー: 決定ボタン
実行内容: なし

3.自動回復を管理するコモンイベントを作成する。
 イベント内容は以下の通り
トリガー: 並列処理
スイッチ: 0001 自動回復管理
実行内容:

コード: 全て選択

◆注釈:歩数を取得し、変数ID 0005 現在の歩数に代入。
◆変数の操作:#0005 現在の歩数 = 歩数
◆注釈:変数ID 0004 先頭アクターのID の内容を 変数ID 0008 旧先頭アクターのID に代入。
◆変数の操作:#0008 旧先頭アクターのID = 先頭アクターのID
◆注釈:パーティメンバー1番のアクターのID(=先頭アクターのID)を 変数ID 0004 先頭アクターのIDに代入。
◆変数の操作:#0004 先頭アクターのID = パーティメンバー1番のアクターID
◆条件分岐:先頭アクターのID < 1
  ◆注釈:先頭アクターが存在しない場合
  ◆注釈:回復スイッチをOFFにして、イベントを中断する。
  ◆スイッチの操作:#0002 自動回復有効フラグ = OFF
  ◆イベント処理の中断
  ◆
:分岐終了
◆条件分岐:先頭アクターのID ≠ 旧先頭アクターのID
  ◆注釈:先頭のアクターが変更されていた場合
  ◆注釈:先頭アクターのメモ欄を参照し、<HealDuration> の値を取得、
  :  :変数ID 0007 回復間隔 に代入。
  :  :記述がなかったり、数値以外が入っていた場合は 0 を代入。
  ◆変数の操作:#0007 回復間隔 = Number($gameActors.actor($gameVariables.value(4)).actor().meta['HealDuration']) || 0
  ◆条件分岐:回復間隔 < 1
    ◆注釈:記述が無かった、もしくは、数値以外が入っていた場合
    ◆注釈:回復スイッチを OFF にして、イベントを中断。
    ◆スイッチの操作:#0002 自動回復有効フラグ = OFF
    ◆イベント処理の中断
    ◆
  :分岐終了
  ◆注釈:設定を変更して、イベントを中断。
  ◆変数の操作:#0006 HP回復までの歩数 = 現在の歩数
  ◆変数の操作:#0006 HP回復までの歩数 += 回復間隔
  ◆スイッチの操作:#0002 自動回復有効フラグ = ON
  ◆イベント処理の中断
  ◆
:分岐終了
◆注釈:回復処理
◆条件分岐:現在の歩数 ≥ HP回復までの歩数
  ◆HPの増減:{先頭アクターのID}, + 1
  ◆注釈:回復までの歩数を更新する。
  ◆変数の操作:#0006 HP回復までの歩数 += 回復間隔
  ◆
:分岐終了


以上、
適当に作った上に、テストもしっかりしていないので、不具合があるかもしれませんが、
ご参考までに。




ecf5DTTzl6h6lJj02様
ご返信ありがとうございます。
ecf5DTTzl6h6lJj02様が仰る通りに自分なりにイベントを入力してみたのですが、添付画像のようなエラーが発生します。お手数をおかけしますが見て頂いてもよろしいでしょうか?イベント画像と変数等も添付しております。変数とスイッチだけ500~から取得していますのでそれが関係しているかもしれません_(._.)_

よろしくお願い致します。
添付ファイル
自動回復 エラー.png
自動回復 エラー.png (7.73 KiB) 閲覧数: 1950 回
自動回復04.png
自動回復01-2.png
自動回復03-2.png
ecf5DTTzl6h6lJj02
記事: 450
登録日時: 2018年12月23日(日) 13:55

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ecf5DTTzl6h6lJj02 » 2021年5月04日(火) 11:56

こんにちは。
回復間隔を取得するために、アクターのメモ欄を取得してくる部分

コード: 全て選択

  ◆変数の操作:#0007 回復間隔 = Number($gameActors.actor($gameVariables.value(4)).actor().meta['HealDuration']) || 0

のスクリプトですが、

コード: 全て選択

$gameVariables.value(4)

となっている部分で、先頭アクターのID の値を取得しています。
私の例では、変数ID 0004 に先頭アクターのID が入っているので 4 を指定しています。
ネクロノ蜜柑さんの場合は 変数ID 0501 に入っていますので、501 を指定してください。
ネクロノ蜜柑

Re: マップ上を歩行するとアクターが自動回復する方法について

投稿記事by ネクロノ蜜柑 » 2021年5月04日(火) 17:01

ecf5DTTzl6h6lJj02 さんが書きました:こんにちは。
回復間隔を取得するために、アクターのメモ欄を取得してくる部分

コード: 全て選択

  ◆変数の操作:#0007 回復間隔 = Number($gameActors.actor($gameVariables.value(4)).actor().meta['HealDuration']) || 0

のスクリプトですが、

コード: 全て選択

$gameVariables.value(4)

となっている部分で、先頭アクターのID の値を取得しています。
私の例では、変数ID 0004 に先頭アクターのID が入っているので 4 を指定しています。
ネクロノ蜜柑さんの場合は 変数ID 0501 に入っていますので、501 を指定してください。



ecf5DTTzl6h6lJj02様
ご返信ありがとうございます。
変数IDを501に変更しましたらエラーも発生せず、先頭アクターのみ回復もしました!
この度は対応して頂きありがとうございました!助かりました_(._.)_

“MV:質問” へ戻る