ロードの回数を制限(質問掲示板

投稿: User icon mini 退会したユーザー 投稿:2012/05/03 13:00:03(最新:2012/12/22 22:47:22)
セーブしたゲームデータを何度もロードさせず、
やり直しが利かないようにするにはどうしたらいいでしょうか?

  • フローチャート
<      セーブ手続き       >
          ↓
<       ゲーム終了       >
          ↓
<    タイトルからロードする    >
          ↓
<    ロードしたことがあるか    >
   ↓             ↓
   ある           ない
   ↓             ↓
<そのままゲームオーバー>   <続行>

コメントする

コメントするには、ログインする必要があります。

コメント一覧

User icon mini 退会したユーザー(投稿日:2012/12/22 22:47, 履歴)
流れて今更な気もするけど自己解決しました。

※これは2DRPGエディタの場合です。
 ノベルの場合はもう少し変更を加える必要があるかも

<開始スクリプト>

def sv(a, b)
  setVariable(a, b)
end

def gv(a)
  return getVariable(a)
end

def addv(a, b)
  sv(a, gv(a) + b)
end

def YNQ(str) #YesNoQuestion
  return (speakWithSelect(2, "はい", "いいえ", str) == 0)
end


<セーブポイントイベント>

if !getFlag("セーブフラグ")
  #中断セーブ
  if YNQ("セーブしますか?")
    sv("セーブ用変数", 0); setFlag("セーブフラグ", true)
    forceSavePlayDataCustom("それでは、中断セーブを行います。", "セーブ開始")
  end
else
  #ロード
  if YNQ("ゲームを再開しますか?")
    addv("セーブ用変数", 1) #ロードが1回目なら1になる
    setCanvasVisible(true)
    forceSavePlayDataCustom("それでは、セーブをお願いします。終わったら扉を調べてください。", "セーブ開始")
  end
end


<扉イベント>

  • 実行内容
if gv("セーブ用変数") == 1 && getCanvasVisible()
  #ロードして出ようとするとき
  speak("正常に、ゲームが再開できます。\nしかし次にロードすると詰みます。")
  setFlag("セーブフラグ", false)
elsif gv("セーブ用変数") == 0
  #中断中のとき
  speak("このままブラウザを閉じても構いませんが、\nゲームを再開したいなら、\n先にセーブマシンに話しかけてください。")
else  speak("2回目 アウト~");  setPartyMemberDeathAll()
end


  • 有効条件
getFlag("セーブフラグ")


キャンバス表示の設定
セーブでは保存されない情報であることを利用。

(3~4)*1マスの細長い道を作り、
中断中はマイキャラを扉が塞ぐようにする必要があります。

動作はこちら
Nyan mini rurun9(投稿日:2012/09/27 15:05, 履歴)
メニュー項目から「セーブ」「ロード」を非表示
そしてセーブは特定の場所にのみセーブ端末をイベントキャラで設置する
このセーブ端末によるセーブ時に、ロード回数チェックを行う自動開始イベントがONになるフラフを立ててデータ保存、直後にフラグは伏せる
ロード回数チェックを行う自動開始イベントは各マップ上にそれぞれひとつ配置しておく

ロードだけでなくセーブにも制限を付けたら似たような事ができる、てだけなんだけど。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/09/27 22:13, 履歴)
矛盾

イベントを終了しないと、セーブメニューが開けない

イベントを終了すると、ロードチェックの自動開始がスタート


さらに

セーブ→ロードの1セットは許可する

セーブ→ロード→(ロードしたかは保存されない)
→さらにロード=1セットと同じ判定になる
Nyan mini rurun9(投稿日:2012/09/28 00:42, 履歴)
>イベントを終了しないと、セーブメニューが開けない

イベントスクリプト中にspeak()を挟むとそこで止まるので、その間にメニューボタンでも押せば良いとか思ってたんだけど
確かにイベントスクリプト実行中には、アイテム、装備、セーブ、ロード、の項目がそもそも出てこない模様w
なかなかよく出来ておるわッ

という事でそこから先に意味なんか無いワケで。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/09/28 01:14, 履歴)
メニューは開くのですけれどね。

セーブメニュー表示が
スクリプトによる設定でオンになっていても
表示されないのです、、、


アイデアとして、
セーブでは保存されない情報を判定基準に
と考えていたのですが、

やはり、後者のロード→ロードが解決せず。
User icon mini 退会したユーザー(投稿日:2012/09/28 20:00, 履歴)
いずれかができないと無理な感じでしょうか・・・
  • スクリプトによるセーブ
  • イベント中に項目表示
      mini きゅうり(投稿日:2012/05/03 14:02, 履歴)
これをちょっと変えればok
User icon mini 退会したユーザー(投稿日:2012/05/03 14:14, 履歴)
でも、セーブせずに終了したら変数がセーブされず、
結局やり直しが効いてしまうような気が・・・

正確に言うと、ロードを1回限りにし、
途中からやれるけどやり直しはダメ、
っていうシステムを作りたいんです。

<使用候補>

  • グローバル変数
保存するのにクリアしなくてはならず、
そのままゲームを続けることができない

  • saveGameData関数関係
下手するとこれ1択・・・?
セーブした直後に変数0にして終了し、
ロード回数毎に+1する。
もし1以上でロードしようとしたら
「無理です」って言われて始めからになる・・・
そんな感じのものは考えていますが、
問題はユーザーごとではなく共用だという点ですね・・・

User icon mini 退会したユーザー(投稿日:2012/09/25 21:41, 履歴)
↑の方法は人数が増えると
文字数制限に引っかかって動作しなくなることが判明。

ノベルエディタならできる方法を思いついたけど
RPGエディタじゃできないという罠・・・
User icon mini 退会したユーザー(投稿日:2012/09/25 21:53, 履歴)
と思ったけどノベルのやり方も駄目だorz
      <変数生成>
        ↓
      <セーブ>
        ↓
      <ロード>
        ↓
 <ロードしたことを変数に保存>  #セーブなしだとここができない
  ↓           ↓
<セーブせずに終了>   <セーブして終了>
  ↓           ↓
<再度ロード>      <再度ロード>
  ↓           ↓
<強制ゲームオーバー>  <通常通りゲーム再開>
User icon mini 退会したユーザー(投稿日:2012/09/25 21:55, 履歴)
これさえあれば・・・OTZ OTZ OTZ OTZ OTZ orz orz orz orz orz