協力して岩を壊せ!長期メンテナンス開始 追記付き

投稿者:Aa mini #いお 投稿日:2012/08/29 19:05

協力して岩を壊せがメンテナンス中です。
内容は、

ゲームデータの送信、受信、削除の不具合
不法的な間違いがある

そこを直しています
たぶん長期化してしまうので、みなさんにお願いがあります
この不具合を直したいので、僕の石のスクリプトを見て誰か指摘してください。
http://rmake.jp/published_items/35176
こちら↑に石のまるまるスクリプト(現在の不具合付き)があります。
不具合の内容は、

「たたいた回数は・・・NaNです!」

と出る。
どこでNaNと設定してしまったか知りたい。
これが主な不具合です
あと、テストプレーのメッセージに
「action : syntax error, コードに文法的な間違いがあります。 line(行): 92」
と出ていますが、92行数えられないので、数えてません。
他には「56 not defined variable : k」
があります。
誰か助けてください。

何回目が小さい数になってるのは、テストプレー用だからです。
このスクリプトは限定公開です。
※このスクリプトは、あくまで不具合を直すためにあります。
 コピーしたりするのはやめてください(参考にするのはうれしいですでもコピーしちゃダメ!!!!)

追記
aoihikawaさんご回答ありがとうございました
本当に感謝しています
マップシーンの公開は、本日で終了します。
メンテナンスは引き続き行いますが、よろしくお願いします

コメントする

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

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/08/30 01:00, 履歴)
case speakWithSelect(2,"はい","いいえ", 
    "岩をたたきますか?")
  when 0
    value=loadGameData("k")#データを読み込み、変数に置き換える。
    value=toNumber(value)#文字列を数値へ変換
    value=value+1#値を足す
    
    #---- 文字列に直す必要があるのはセーブする前 ----
    value=toString(value)#数値を文字列へ変換
    #----------
    
    #変数「r」に「0」~「9」の中からランダムに1つの数(乱数)を取得して入れる
    r = rand(10)
    
    #変数「r」の内容を元に分岐する
    if r < 1
      #変数「r」が「1」より小さい場合
      playSound(86371)
      speak("クリティカル!!")
      speak("ダメージが5倍になるぞ!")
      
      #---- 折角ロードした「value」を上書きしている無駄な処理 ----
      value=loadGameData("k")#データを読み込み、変数に置き換える。
      value=toNumber(value)#文字列を数値へ変換
      #----------
      
      value=value+5#値を足す
      
      #---- 文字列に直す必要があるのはセーブする前 ----
      value=toString(value)#数値を文字列へ変換
      #----------
    end
    
    speak("ちょっと待ってね")
    waitTime(998)
    
    #---- ロードしたデータをどこにも確保していない ----
    loadGameData("k")
    #----------
    
    #---- 「value」が文字列になっているのに数値で比較している ----
    if value>=7
    #----------
      setEventTarget("playerCharacterEvent", 7, 10)
      runEventMove()
      setEventTarget("event0", 7, 8)
      runEventMove()
      setEventTarget("event0", 8, 8)
      runEventMove()
      
      saveGameData("k", value)#データをセーブ
      
      speak("岩が崩れていく・・・。%Wait%うごきました・・・。")
      speak(value ,"回目です!(ちなみに)")
      speak("岩を崩したのは、")
      playSound(138400)
      waitTime(2000)
      
      #---- ここまでの間で、"h"がセーブされていない ----
      setVariable("s", loadGameData("h"))
      #----------
      #---- "s"がここでしか使用されていないのに、通常変数を利用するのは無駄な処理 ----
      speak(getVariable("s") + "さんです!") 
      #----------
      openActivityFeedWindow("他の石が叩けるようになったみたい!・・・。")

      setFlag("1700回突破", true)
    else

      playSound(63622)
      playSound(138400)
      waitTime(2000)

      saveGameData("k", value)#データをセーブ
      
      speak("あなたは")
      playSound(16423)
      speak(value,"回目にたたきました!")#結果を表示
      openActivityFeedWindow(value ,"回目にたたきました!")
      speak("少しお待ちください")
      waitTime(1000)
      speak("ロードが終わりました。")
      
      #---- ロードしたデータをどこにも確保していない、文字列が引数になっていない ----
      loadGameData(k)
      #----------
      
      #---- 「value」が文字列になっているのに数値で比較している ----
      if value==6
      #----------
        #---- 丁度の値になったときしか判定に入らないため、クリティカルで超えた場合実行されない ----
        
        setEventTarget("playerCharacterEvent", 7, 10)
        runEventMove()
        setEventTarget("event0", 7, 8)
        runEventMove()
        setEventTarget("event0", 8, 8)
        runEventMove()
        
        speak("1700回に達したので岩・・・?が壊れました%Wait%動きました・・・。")
        openActivityFeedWindow("他の石がたたけるようになったみたい!")
        speak("少しお待ちください")
        setVariable("gohito", getValueFromCharacterParam(getPlayerParam(),getCharacterNameIndex()))
        #---- "gohito"がここでしか使用されていないのに、通常変数を利用するのは無駄な処理 ----
        saveGameData("h", getVariable("gohito")) 
        #----------

        speak("セーブが完了しました。\nなお、ゲームのセーブではないです。")
        setFlag("1700回突破", true)
        
        #----------
      end
    end
  when 1
    speak("たたこう!")
end

Aa mini #いお(投稿日:2012/08/30 10:16, 履歴)
ありがとうございます.
こんな長文を・・・。
指摘されたところを直していきます
ありがとうございました。
Aa mini #いお(投稿日:2012/08/30 11:07, 履歴)
ところで、どういう条件でNaNという文字が出るのでしょうか
Aa mini #いお(投稿日:2012/08/30 11:08, 履歴)
あ、ごめんなさい調べたらありました
Aa mini #いお(投稿日:2012/08/30 11:20, 履歴)
1通り見たところ、NaNと出る条件がまったく見当たりません。
どこが間違っていたのでしょう
あと、少し指摘されたところを直しました
直したやり方も正しくないかもしれませんが
#編集時のヒント
#waitTimei(1000)
#value=loadGameData("k")#データを読み込み、変数に置き換える。
#value=toNumber(value)#文字列を数値へ変換
#value=value+1#値を足す
#value=toString(value)#数値を文字列へ変換
#waitTime(1000)
#saveGameData("k", value)#データをセーブ
#speak("あなたは")
#speak(value,"回たたきました!")#結果を表示
case speakWithSelect(2,"はい","いいえ", 
    "岩をたたきますか?")
  when 0
    value=loadGameData("k")#データを読み込み、変数に置き換える。
    value=toNumber(value)#文字列を数値へ変換
    value=value+1#値を足す
    value=toString(value)#数値を文字列へ変換
    #---- 文字列に直す必要があるのはセーブする前 ----
    
    #----------
    
    #変数「r」に「0」~「9」の中からランダムに1つの数(乱数)を取得して入れる
    r = rand(10)
    
    #変数「r」の内容を元に分岐する
    if r < 1
      #変数「r」が「1」より小さい場合
      playSound(86371)
      speak("クリティカル!!")
      speak("ダメージが5倍になるぞ!")
     
      #----------
      
      value=value+4#値を足す
    end
    
    speak("ちょっと待ってね")
    waitTime(998)
    
    #---- ロードしたデータをどこにも確保していない ----
#saveGameData("k", value)#データをセーブ
    #----------
    
    #---- 「value」が文字列になっているのに数値で比較している ----
    if value>=7
    #----------
      setEventTarget("playerCharacterEvent", 7, 10)
      runEventMove()
      setEventTarget("event0", 7, 8)
      runEventMove()
      setEventTarget("event0", 8, 8)
      runEventMove()
      
      saveGameData("k", value)#データをセーブ
      
      speak("岩が崩れていく・・・。%Wait%うごきました・・・。")
      speak(value ,"回目です!(ちなみに)")
      speak("岩を崩したのは、")
      playSound(138400)
      waitTime(2000)
      
      #---- ここまでの間で、"h"がセーブされていない ----
      setVariable("s", loadGameData("gohito"))
      #----------
      #---- "s"がここでしか使用されていないのに、通常変数を利用するのは無駄な処理 ----
      speak(getVariable("s") + "さんです!") 
      #----------
      openActivityFeedWindow("他の石が叩けるようになったみたい!・・・。")

      setFlag("1700回突破", true)
    else

      playSound(63622)
      playSound(138400)
      waitTime(2000)

      
      
      speak("あなたは")
      playSound(16423)
      speak(value,"回目にたたきました!")#結果を表示
      openActivityFeedWindow(value ,"回目にたたきました!")
      speak("少しお待ちください")
      waitTime(1000)
      speak("ロードが終わりました。")
      

      
      #---- 「value」が文字列になっているのに数値で比較している ----
      if value==6
      #----------
        #---- 丁度の値になったときしか判定に入らないため、クリティカルで超えた場合実行されない ----
        
        setEventTarget("playerCharacterEvent", 7, 10)
        runEventMove()
        setEventTarget("event0", 7, 8)
        runEventMove()
        setEventTarget("event0", 8, 8)
        runEventMove()
        
        speak("1700回に達したので岩・・・?が壊れました%Wait%動きました・・・。")
        openActivityFeedWindow("他の石がたたけるようになったみたい!")
        speak("少しお待ちください")
        setVariable("gohito", getValueFromCharacterParam(getPlayerParam(),getCharacterNameIndex()))
        #---- "gohito"がここでしか使用されていないのに、通常変数を利用するのは無駄な処理 ----
        saveGameData("h", getVariable("gohito")) 
        #----------

        speak("セーブが完了しました。\nなお、ゲームのセーブではないです。")
        setFlag("1700回突破", true)
        
        #----------
      end
    end
  when 1
    speak("たたこう!")
end

と、わかりやすいようにヒントも過去に投稿した質問掲示板から持ってきました
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/08/30 23:39, 履歴)
#_/_/_/_/_/ 編集時のヒント _/_/_/_/_/
#waitTimei(1000) 
#value=loadGameData("k")#データを読み込み、変数に置き換える。 
#value=toNumber(value)#文字列を数値へ変換 
#value=value+1#値を足す 
#value=toString(value)#数値を文字列へ変換 
#waitTime(1000) 
#saveGameData("k", value)#データをセーブ 
#speak("あなたは") 
#speak(value,"回たたきました!")#結果を表示 
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

case speakWithSelect(2,"はい","いいえ",  
    "岩をたたきますか?") 
  when 0 
    value=loadGameData("k") #データを読み込み、変数に置き換える。 
    value=toNumber(value)   #文字列を数値へ変換 
    value=value+1           #値を足す 
    
    #---- 文字列に直す必要があるのはセーブする前 ---- 
    value=toString(value)   #数値を文字列へ変換 
    #---------- 
     
    #変数「r」に「0」~「9」の中からランダムに1つの数(乱数)を取得して入れる 
    r = rand(10) 
     
    #変数「r」の内容を元に分岐する 
    if r < 1 
      #変数「r」が「1」より小さい場合 
      playSound(86371) 
      speak("クリティカル!!") 
      speak("ダメージが5倍になるぞ!") 
      
      #---- 「value」は文字列なので数値を足すと異常値になる可能性がある ---- 
      value=value+4#値を足す 
      #----------
    end 
     
    speak("ちょっと待ってね") 
    waitTime(998) 
     
    #---- ロードしたデータをどこにも確保していない ---- 
    #saveGameData("k", value)#データをセーブ 
    #---------- 
     
    #---- 「value」が文字列になっているのに数値で比較している ---- 
    if value>=7 
    #---------- 
      setEventTarget("playerCharacterEvent", 7, 10) 
      runEventMove() 
      setEventTarget("event0", 7, 8) 
      runEventMove() 
      setEventTarget("event0", 8, 8) 
      runEventMove() 
       
      saveGameData("k", value)#データをセーブ 
       
      speak("岩が崩れていく・・・。%Wait%うごきました・・・。") 
      speak(value ,"回目です!(ちなみに)") 
      speak("岩を崩したのは、") 
      playSound(138400) 
      waitTime(2000) 
       
      #---- ここまでの間で、"gohito"がセーブされていない ---- 
      #---- つまり、空のデータ[NaN]がここで"s"に格納される ----
      setVariable("s", loadGameData("gohito")) 
      #---------- 
      #---- "s"がここでしか使用されていないのに、通常変数を利用するのは無駄な処理 ---- 
      speak(getVariable("s") + "さんです!")  
      #---------- 
      openActivityFeedWindow("他の石が叩けるようになったみたい!・・・。") 
 
      setFlag("1700回突破", true) 
    else 
 
      playSound(63622) 
      playSound(138400) 
      waitTime(2000) 
 
      speak("あなたは") 
      playSound(16423) 
      speak(value,"回目にたたきました!")#結果を表示 
      openActivityFeedWindow(value ,"回目にたたきました!") 
      speak("少しお待ちください") 
      waitTime(1000) 
      speak("ロードが終わりました。") 
       
      #---- 「value」が文字列になっているのに数値で比較している ---- 
      if value==6 
      #---------- 
        #---- 丁度の値になったときしか判定に入らないため、クリティカルで超えた場合実行されない ---- 
         
        setEventTarget("playerCharacterEvent", 7, 10) 
        runEventMove() 
        setEventTarget("event0", 7, 8) 
        runEventMove() 
        setEventTarget("event0", 8, 8) 
        runEventMove() 
         
        speak("1700回に達したので岩・・・?が壊れました%Wait%動きました・・・。") 
        openActivityFeedWindow("他の石がたたけるようになったみたい!") 
        speak("少しお待ちください") 
        #---- もし、"gohito"に確実にプレイヤー名を入れておくなら、if文の中で実行するべきではない ----
        setVariable("gohito", getValueFromCharacterParam(getPlayerParam(),getCharacterNameIndex())) 
        #---------- 
        #---- "gohito"がここでしか使用されていないのに、通常変数を利用するのは無駄な処理 ---- 
        saveGameData("h", getVariable("gohito"))  
        #---------- 
 
        speak("セーブが完了しました。\nなお、ゲームのセーブではないです。") 
        setFlag("1700回突破", true) 
         
        #---------- 
      end 
    end 
  when 1 
    speak("たたこう!") 
end


一旦、大まかに
何をどういった順序で実行していくか
手順をまとめてからの方が良いかも。

現状が、継ぎ接ぎ状態なので
混乱しているのではないでしょうか。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/08/30 23:50, 履歴)
・ユーザ名が通常変数に格納されているか判定

<格納されていない場合>

 ・ユーザ名を通常変数に格納

・岩をたたくかどうかの選択

・乱数でクリティカルがでるかどうかの判定

・加算されるダメージの値を算出

・セーブ領域から総ダメージデータのロード

・総ダメージデータが既に破壊値を超えているかどうかの判定

<超えている>

 ・総ダメージデータに今回のダメージを加算

 ・セーブ領域からユーザ名のロード

 ・メッセージの表示

<超えていない>

 ・総ダメージデータに今回のダメージを加算

 ・総ダメージデータが破壊値を超えたかどうかの判定

 <超えた>

  ・岩破壊のエフェクト実行

  ・通常変数からユーザ名を取得する

  ・セーブ領域にユーザ名を保存する

  ・メッセージの表示

 <超えてない>

  ・メッセージの表示

・セーブ領域に加算されたダメージを保存する


本来は、こういったものを
自分でつくっていくところから
始めるのですよ
Aa mini #いお(投稿日:2012/08/31 09:21, 履歴)
あ、ありがとうございます!
本当に感謝です!
Aa mini #いお(投稿日:2012/08/31 11:53, 履歴)
これでもわからなかったらどうしようもないので、もう1つイベントを作ってすくりぷとを最初から書き直そうと思います
Aa mini #いお(投稿日:2012/08/31 12:03, 履歴)
わからない・・・
イベントもう1つ作ろうかな・・・
でも今日中に終わらせないと・・・