SRC質問掲示板Mk2
(現在 過去ログ121 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■21265 / inTopicNo.1)  自作システムの改善すべき点
  
□投稿者/ 夜叉 -(2008/11/14(Fri) 13:27:55) [ID:ieYK4nIL]
    今作っている固有能力で、Aを使った後にBを使うとBをキャンセルしてCが発動するというものを
    考えたのですが何度テストしても動いてくれません。
    どうすれば動くようになるのでしょうか?
    ご教授お願いします


    ○はキャラクタ


    *攻撃 ○ 敵:
    #もし必要特殊能力があれば
    if IsAvailable(○,必要特殊能力) = 1 Then
    #前に使った武器がなかったらセットする
    if 前に使った武器 = "" Then
    SET 前に使った武器

    #前に使った武器があっても次に使った武器がないならセット
    elseif 前に使った武器 = 1 and 次に使った武器 = "" Then
    Set 次に使った武器

    #電気を使った後に氷結を使ったら氷結をキャンセルして痺れ光線発動
    elseif 前に使った武器 = "【PSI】電気" and 次に使った武器 = "【PSI】氷結" Then
    Cancel
    Attack ○ 【PSI】痺れ光線 敵 "自動"
    Unset 前に使った武器
    Unset 次に使った武器

    #電気を使った後にショットを使ったらショットをキャンセルしてショックウェイブ発動
    elseif 前に使った武器 = "【PSI】電気" and 次に使った武器 = "【PSI】ショット" Then
    Cancel
    Attack ○ 【PSI】ショックウェイブ 敵 "自動"
    Unset 前に使った武器
    Unset 次に使った武器

    #氷結を使った後にスラッシュを使ったらスラッシュをキャンセルしてアイスエッジ発動
    elseif 前に使った武器 = "【PSI】氷結" and 次に使った武器 = "【PSI】スラッシュ" Then
    Cancel
    Attack ○ アイスエッジ 敵 "自動"
    Unset 前に使った武器
    Unset 次に使った武器

    #ショットを使った後にショットを使ったらショットをキャンセルしてペネトレイトショット発動
    elseif 前に使った武器 = "【PSI】ショット" and 次に使った武器 = "【PSI】ショット" Then
    Cancel
    Attack ○ ペネトレイトショット 敵 "自動"
    Unset 前に使った武器
    Unset 次に使った武器

    #スラッシュを使った後にスラッシュを使ったらスラッシュをキャンセルしてツインスラッシュ発動
    elseif 前に使った武器 = "【PSI】スラッシュ" and 次に使った武器 = "【PSI】スラッシュ" Then
    Cancel
    Attack ○ ツインスラッシュ 敵 "自動"
    Unset 前に使った武器
    Unset 次に使った武器
    endif
    #特殊能力もってないなら
    elseif IsAvailable(○,必要特殊能力) = 0 exit
    endif
引用返信/返信 削除キー/
■21266 / inTopicNo.2)  Re[1]: 自作システムの改善すべき点
□投稿者/ Mr -(2008/11/14(Fri) 14:32:33) [ID:zBoOxBW0]
    まず根本的な問題として、攻撃ラベルでこれから使用する武器名を普遍的に取得することは非常に困難です。(全ての武器の射程や使用するための条件が重複していなければ特定は不可能ではありません)
    SRCにおいて「これからどの武器を使うか」を変数で取得することはできません。「最後にどの武器を使用したか」なら取得できます。
    それらをふまえて可能な限り要件を満たそうとすれば、
    『武器Aで攻撃したら武器Bが武器Cに変わる。次に攻撃した後、武器Cは武器Bに戻る』
    というのが考えられるでしょう。

    以下、アップされたインクルードの問題点に//コメントで注釈を入れておきました。参考にしてください。

    // このインクルードだけでは、変数「前に使った武器」と変数「次に使った武器」には「1」しか入りません。
    *攻撃 ○ 敵:
    #もし必要特殊能力があれば
    if IsAvailable(○,必要特殊能力) = 1 Then
     #前に使った武器がなかったらセットする
     if 前に使った武器 = "" Then
      SET 前に使った武器
     #前に使った武器があっても次に使った武器がないならセット
     elseif 前に使った武器 = 1 and 次に使った武器 = "" Then
    // ↓変数「次に使った武器」には「1」が格納されます
      Set 次に使った武器
     #電気を使った後に氷結を使ったら氷結をキャンセルして痺れ光線発動
    // 現状では変数「前に使った武器」と変数「次に使った武器」には「1」しか入るチャンスがありません。
    // そのため、これ以降のelseifの条件が満たされることはありません。
     elseif 前に使った武器 = "【PSI】電気" and 次に使った武器 = "【PSI】氷結" Then
    // Cancelコマンド以降のイベントコマンドは全て無視されます。elseifの条件を満たしても攻撃は実行されません。
    // また、Cancelすると攻撃前の状態に戻ってしまいます。つまり行動終了になりません。イベントコマンドなどで無理やり行動終了にしてやる必要があります。
      Cancel
      Attack ○ 【PSI】痺れ光線 敵 "自動"
      Unset 前に使った武器
      Unset 次に使った武器
     #電気を使った後にショットを使ったらショットをキャンセルしてショックウェイブ発動
     elseif 前に使った武器 = "【PSI】電気" and 次に使った武器 = "【PSI】ショット" Then
      Cancel
      Attack ○ 【PSI】ショックウェイブ 敵 "自動"
      Unset 前に使った武器
      Unset 次に使った武器
     #氷結を使った後にスラッシュを使ったらスラッシュをキャンセルしてアイスエッジ発動
     elseif 前に使った武器 = "【PSI】氷結" and 次に使った武器 = "【PSI】スラッシュ" Then
      Cancel
      Attack ○ アイスエッジ 敵 "自動"
      Unset 前に使った武器
      Unset 次に使った武器
     #ショットを使った後にショットを使ったらショットをキャンセルしてペネトレイトショット発動
     elseif 前に使った武器 = "【PSI】ショット" and 次に使った武器 = "【PSI】ショット" Then
      Cancel
      Attack ○ ペネトレイトショット 敵 "自動"
      Unset 前に使った武器
      Unset 次に使った武器
     #スラッシュを使った後にスラッシュを使ったらスラッシュをキャンセルしてツインスラッシュ発動
     elseif 前に使った武器 = "【PSI】スラッシュ" and 次に使った武器 = "【PSI】スラッシュ" Then
      Cancel
      Attack ○ ツインスラッシュ 敵 "自動"
      Unset 前に使った武器
      Unset 次に使った武器
     endif
    #特殊能力もってないなら
    // ↓endifの直後がexitならこの行は不要です
    elseif IsAvailable(○,必要特殊能力) = 0 exit
    endif


    といったところです。

引用返信/返信 削除キー/
■21267 / inTopicNo.3)  Re[2]: 自作システムの改善すべき点
□投稿者/ 中箱 -(2008/11/14(Fri) 18:06:31) [ID:1E558AWX]
    横から失礼。


    >まず根本的な問題として、攻撃ラベルでこれから使用する武器名を普遍的に取得することは非常に困難です。
    >SRCにおいて「これからどの武器を使うか」を変数で取得することはできません。「最後にどの武器を使用したか」なら取得できます。

    使用イベントや攻撃イベントの時点で
    システム変数の「対象ユニット使用武器」「相手ユニット使用武器」「対象ユニット使用武器番号」「相手ユニット使用武器番号」には使用される(予定の)武器名、武器番号が入っているはずですが。
引用返信/返信 削除キー/
■21268 / inTopicNo.4)  Re[3]: 自作システムの改善すべき点
□投稿者/ Mr -(2008/11/14(Fri) 19:02:00) [ID:zBoOxBW0]
    前に自作インクルードで取得できなかったのですが、ずいぶん前なので記憶違いかもしれません。
    中箱さんの方で取得できたということならば、取得できるのでしょう。
    それを踏まえて、「前に使った武器」と「次に使った武器」にシステム変数「対象ユニット使用武器」(もしくは「相手ユニット使用武器」)の中身を入れてやればとりあえず解決できそうですね。

引用返信/返信 削除キー/
■21269 / inTopicNo.5)  Re[4]: 自作システムの改善すべき点
□投稿者/ 夜叉 -(2008/11/14(Fri) 20:57:39) [ID:cJxSKIPo]
    本当にすみませんが例文とか作っていただけないでしょうか?
    全く理解できてないわけではないのですがやはりATTACKイベントが発動してくれていないのです
引用返信/返信 削除キー/
■21270 / inTopicNo.6)  Re[5]: 自作システムの改善すべき点
□投稿者/ 中箱 -(2008/11/15(Sat) 15:37:07) [ID:1E558AWX]
    >全く理解できてないわけではないのですがやはりATTACKイベントが発動してくれていないのです

    所々は理解できていても、具体的にどこにどんな問題があるのかが理解できていない、ということでしょうね。


    夜叉さんが作られたものは、ざっくり言ってしまえば
     ・変数に何をSetするか。
     ・If分岐のさせ方(条件の選び方)
    が間違っています。



    条件分岐に慣れていないようですので、
    ここはSRCを使わず、作ったものを単純化させて順番に辿ってみると
    なぜAttackコマンドが実行されないのかが分かりやすいでしょう。

    コメントやバリエーションを削ると
    #=====
    *攻撃 ○ 敵:
    if IsAvailable(○,必要特殊能力) = 1 Then
     if 前に使った武器 = "" Then
      SET 前に使った武器
     elseif 前に使った武器 = 1 and 次に使った武器 = "" Then
      Set 次に使った武器
     elseif 前に使った武器 = "【PSI】電気" and 次に使った武器 = "【PSI】氷結" Then
      Cancel
      Attack ○ 【PSI】痺れ光線 敵 "自動"
      Unset 前に使った武器
      Unset 次に使った武器
     endif
    elseif IsAvailable(○,必要特殊能力) = 0 exit
    endif
    exit
    #=====
    となります。

    この時、
     1.電気を使った
     2.次に、氷結を使った。
     3.もう一度、氷結を使った。
    という状況の場合にどう処理されていくかを見ていくと


    1.・攻撃手段として電気を選んだ。
      ・「*攻撃 ○ 敵」ラベルが始まる。
      ・ 前に使った武器 = "" なので、
        「SET 前に使った武器」 が実行される。
      ・イベントが終わる
      ※イベント終了時点で、「前に使った武器 = 1」になっている。

    2.・攻撃手段として氷結を選んだ。
      ・「*攻撃 ○ 敵」ラベルが始まる。
      ・ 前に使った武器 = ""」では無い
      ・「前に使った武器 = 1 and 次に使った武器 = ""」なので、
        Set 次に使った武器 が実行される。
      ・イベントが終わる。
      ※イベント終了時点で、「前に使った武器 = 1」「次に使った武器 = 1」になっている。

    3.・攻撃手段として氷結を選んだ。
      ・「*攻撃 ○ 敵」ラベルが始まる。
      ・ 前に使った武器 = "" では無い
      ・ 前に使った武器 = 1 and 次に使った武器 = "" でもない
      ・ 前に使った武器 = "【PSI】電気" and 次に使った武器 = "【PSI】氷結" でもない。
      ・なにもせずにイベントが終わる。
      ※イベント終了時点で、「前に使った武器 = 1」「次に使った武器 = 1」になっている。



    慣れていないうちは、一気に請った事をやろうとせず、
    単純なものからテストを重ねながら徐々に拡張していくことをお勧めします。


    また、If分岐を利用して作ったものが思ったように動かないのであれば、
    分岐の条件が間違っているのかそうでないのかの確認からはじめるべきかと




    PS.
    例文ではないですが、何かの参考にしてください。
    #=====
    *攻撃 味方 敵:
    If 前攻撃 = "" then
     Talk
     $(対象ユニット使用武器)を使います。
     End
     前攻撃 = 対象ユニット使用武器
    else
     Talk
     $(対象ユニット使用武器)を使います。;味方がこの前に使った武器は$(前攻撃)です。
     End
     Unset 前攻撃
    endif
    exit
    #=====
引用返信/返信 削除キー/
■21271 / inTopicNo.7)  Re[6]: 自作システムの改善すべき点
□投稿者/ 夜叉 -(2008/11/15(Sat) 18:41:40) [ID:cJxSKIPo]
    中箱さん、Mrさんありがとうございます
    自分なりに色々と試行錯誤していった結果最初に作った物とだいぶ離れたもので一応の動作確認をいたしました
    ですが敵の撃破後にエラーメッセージ
    D:\SRC\新規シナリオ\Data\include.eve:216行目
    イベントデータが不正です
    215: Refresh
    216: Attack ○ 【PSI】アイスエッジ 相手ユニットID 自動
    217: Unset 前に使った武器
    が出てしまいます。他の武装では出ないのですがこの武装でのみ出るのです
    式も他のをコピーして使っているのでエラーが出るのなら他も出ると思うのですが正直わからないです
    武装データです
    【PSI】アイスエッジ, 1500,1,1, +5,-,-,-,AAAA,-10,超氷吹L1(チェインコンボ)
    それと式です
    使用後に前いに使った武器をセットし、使用イベントで前に使った武器と比較するという内容です
    式の全てが長くて申し訳ありませんがご教授お願いします
    使用後 エイル=クランジス 【PSI】ショック:
    SET 前に使った武器 【PSI】ショック
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】フリーズ:
    SET 前に使った武器 【PSI】フリーズ
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】スラッシュ:
    SET 前に使った武器 【PSI】スラッシュ
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】ショット:
    SET 前に使った武器 【PSI】ショット
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】ブレイク:
    SET 前に使った武器 【PSI】ブレイク
    talk
    $(前に使った武器)がストックされました
    end
    exit
    #######装備でのPSI######################
    使用後 エイル=クランジス 【PSI】フレイム:
    SET 前に使った武器 【PSI】フレイム
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】ウォール:
    SET 前に使った武器 【PSI】ウォール
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】ライフマテリアル:
    SET 前に使った武器 【PSI】ライフマテリアル
    talk
    $(前に使った武器)がストックされました
    end
    exit
    使用後 エイル=クランジス 【PSI】ライトニング:
    SET 前に使った武器 【PSI】ライトニング
    talk
    $(前に使った武器)がストックされました
    end
    exit

    #########################アクションエンチャント######################

    使用 エイル=クランジス 【PSI】ショック:
    if 前に使った武器 = 【PSI】フリーズ Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】フリーズカノン 相手ユニットID "自動"
    Unset 前に使った武器

    elseif 前に使った武器 = 【PSI】ショット Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】ショックウェイブ 相手ユニットID "自動"
    Unset 前に使った武器

    elseif 前に使った武器 = 【PSI】ブレイク Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】スパークウェブ 相手ユニットID "自動"
    Unset 前に使った武器

    endif
    exit

    使用 エイル=クランジス 【PSI】フリーズ:

    if 前に使った武器 = 【PSI】ショック Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】フリーズカノン 相手ユニットID "自動"
    Unset 前に使った武器

    elseif 前に使った武器 = 【PSI】スラッシュ Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】アイスエッジ 相手ユニットID "自動"
    Unset 前に使った武器

    endif
    exit

    使用 エイル=クランジス 【PSI】スラッシュ:
    if 前に使った武器 = 【PSI】フリーズ Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】アイスエッジ 相手ユニットID "自動"
    Unset 前に使った武器

    elseif 前に使った武器 = 【PSI】スラッシュ Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】ツインスラッシュ 相手ユニットID "自動"
    Unset 前に使った武器

    endif
    exit

    使用 エイル=クランジス 【PSI】ショット:
    if 前に使った武器 = 【PSI】ショック Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】ショックウェイブ 相手ユニットID "自動"
    Unset 前に使った武器

    elseif 前に使った武器 = 【PSI】ショット Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】ペネトレイトショット 相手ユニットID "自動"
    Unset 前に使った武器

    endif
    exit

    使用 エイル=クランジス 【PSI】ブレイク:
    if 前に使った武器 = 【PSI】ショック Then
    Cancel
    PlaySound Flair.wav
    Font 24pt P明朝 RGB(255, 255, 255) Italic Bold
    PaintString 240 140 Action
    PaintString 250 160 Enchant
    Refresh
    Attack エイル=クランジス 【PSI】スパークウェブ 相手ユニットID "自動"
    Unset 前に使った武器

    endif
    exit



引用返信/返信 削除キー/
■21272 / inTopicNo.8)  Re[7]: 自作システムの改善すべき点
□投稿者/ 中箱 -(2008/11/15(Sat) 19:51:58) [ID:1E558AWX]
    >敵の撃破後にエラーメッセージ
    >D:\SRC\新規シナリオ\Data\include.eve:216行目
    >イベントデータが不正です
    >215: Refresh
    >216: Attack ○ 【PSI】アイスエッジ 相手ユニットID 自動
    >217: Unset 前に使った武器
    >が出てしまいます。他の武装では出ないのですがこの武装でのみ出るのです

    「イベントデータが不正です」というメッセージが出てしまうことに関しては本体バグの可能性があるようです。
    質問掲示板のNo20902や、バグ報告掲示板の3274番を確認してみてください。
    (吹属性で敵を移動させた事で、反撃できる武器がなくなったのかもしれません)
引用返信/返信 削除キー/
■21275 / inTopicNo.9)  Re[8]: 自作システムの改善すべき点
□投稿者/ 夜叉 -(2008/11/17(Mon) 16:04:26) [ID:eS70O1if]
    本体のバグでしたか、わかりました
    ありがとうございます
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -