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

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

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

■8224 / inTopicNo.1)  関数が動いてくれない。
  
□投稿者/ ドラゴンライダーΦズ -(2003/05/15(Thu) 19:39:30)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    SRCのことでいくつか質問があります。

    関数を使って専用指定抜きの機体クラスを取得するにはどうすればいいのでしょうか。

    「(ザコ)」や「(汎用)」を指定したパイロットとそうでないパイロットでイベントを分岐させたいのですが、どうすればいいのでしょうか。

    どれも関数が複雑になる上、私の定義した関数では正常に動かないようです。

    専用指定抜きの機体クラス取得には
    「Left("Info(Unit(),機体クラス)",(InStr("Info(Unit(),機体クラス)",`(`) - 1))」
    というのを、

    「(ザコ)」や「(汎用)」を指定したパイロットとそうでないパイロットの判別には
    「Right("$()",InStr("$()",`(`))」
    というのを定義していますが、二つともおかしな値が返ってくるらしく私の思惑通りに動きません。

    ちなみに「Right("$()",InStr("$()",`(`))」で返ってくるはずのものは
    「(ザコ)」や「(汎用)」です。これで判別を行ってます。
引用返信/返信 削除キー/
■8225 / inTopicNo.2)  Re[1]: 関数が動いてくれない。
□投稿者/ ヒロキ -(2003/05/15(Thu) 19:53:41)
    こんばんは、ヒロキです。

    >「(ザコ)」や「(汎用)」を指定したパイロットとそうでないパイロットで
    >イベントを分岐させたいのですが、どうすればいいのでしょうか。

    「(ザコ)」および「(汎用)」は名前の一番最後につくものですから

    Right(パイロット名,4)

    として右から4文字取り出せばいいんじゃないでしょーか。

    それでは
引用返信/返信 削除キー/
■8228 / inTopicNo.3)  Re[1]: 関数が動いてくれない。
□投稿者/ 玖琺祐一郎 -(2003/05/15(Thu) 20:49:56)
    どうも、玖琺祐一郎です。

    >関数を使って専用指定抜きの機体クラスを取得するにはどうすればいいのでしょうか。

    >「(ザコ)」や「(汎用)」を指定したパイロットとそうでないパイロットでイベントを分岐させたいのですが、どうすればいいのでしょうか。

    ヒロキさんの指摘したRight関数でもできますが、機体名と専属名が同じであればNickName関数を使って同様の事が出来ます。

    NickNameならゲルググ(シャア専用)がシャア専用ゲルググとかになってしまいますが、ローカルデータで対応すれば問題なくなります。
引用返信/返信 削除キー/
■8229 / inTopicNo.4)  Re[1]: 関数が動いてくれない。
□投稿者/ TomTom -(2003/05/15(Thu) 21:01:14)
    TomTomです。

    ザコ・汎用の判定はヒロキさんのものが簡単でよいと思います。


    ユニットクラスの専用指定ですが、どうも文字列の使用方法に根本的な間違いが
    あるように思います

    > Left("Info(Unit(),機体クラス)",(InStr("Info(Unit(),機体クラス)",`(`) - 1))

    これでは、「"Info(Unit(),機体クラス)"」という文字列の左から〜文字目まで、
    という指定になるはずです。Left及びInStrでの上記の記述を
     「Info(Unit(),機体クラス)」
    としてみましょう。

    またSRCでは、一般に文字列をあらわすのに"を使用しますので、InStrの「`(`」
    という記述を「"("」とした方が良いかと思います。この辺は好みの問題でもありますが。


    それでは。
引用返信/返信 削除キー/
■8233 / inTopicNo.5)  まだ動いてくれない。
□投稿者/ ドラゴンライダーΦズ -(2003/05/15(Thu) 21:40:43)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    パイロット判定がまだ動きません。
    関係のあるサブルーチンを含む全てを公開します。
    不備があればご指摘ください。

    ちなみにこれはユニットの護衛として毎ターンユニットを生成するルーチンです。
    護衛ユニットには「プラントAI(ザコ)」というパイロットが乗っており、これは定義してあります。

    例えば、
    「CreativeInfinity 敵 スードリ ティターンズ将校(ザコ) 15 15 ガンダムMkU(ティターンズ仕様) 1 ブラックガンダム」
    と指定すると、敵のスードリに「ティターンズ将校(ザコ)」が乗って出撃、
    その上、敵ターンに「ガンダムMkU(ティターンズ仕様)」を1機ずつ出撃させてくるというものです。
    最後の「ブラックガンダム」というのは「ティターンズ将校(ザコ)」の識別用IDです。

    #基盤
    CreativeInfinity:
    Create Args(1) Args(2) Call(平均ランク) Args(3) (Call(平均レベル) + 2) Args(4) Args(5) Args(8)
    Switch Right(Args(3),4)
    Case (ザコ) (汎用)
    If Not Args(8) = "" Then
    無限生産ユニットID = Args(8)
    戦艦情報[無限生産ユニットID] = 対象ユニット
    指定陣営[無限生産ユニットID] = Args(1)
    生産元ユニット[無限生産ユニットID] = Args(2)
    護衛増援ユニット名称[無限生産ユニットID] = Args(6)
    護衛増援数[無限生産ユニットID] = Args(7)
    Call 無限生産 戦艦情報[無限生産ユニットID] 指定陣営[無限生産ユニットID] 護衛増援ユニット名称[無限生産ユニットID] 護衛増援数[無限生産ユニットID]
    EndIf
    Case Else
    If Args(8) = "" Then
    無限生産ユニットID = Args(3)
    戦艦情報[無限生産ユニットID] = 対象ユニット
    指定陣営[無限生産ユニットID] = Args(1)
    護衛増援ユニット名称[無限生産ユニットID] = Args(6)
    護衛増援数[無限生産ユニットID] = Args(7)
    Call 無限生産 戦艦情報[無限生産ユニットID] 指定陣営[無限生産ユニットID] 護衛増援ユニット名称[無限生産ユニットID] 護衛増援数[無限生産ユニットID]
    EndIf
    EndSw
    Return

    #敵ターンに敵を指定数生成する。
    *ターン 全 敵:
    For 生産増援ナンバー = 1 To Count(無限生産ユニットID)
    If 指定陣営[生産増援ナンバー] = 敵 Then
    Call 無限生産 戦艦情報[生産増援ナンバー] 指定陣営[生産増援ナンバー] 護衛増援ユニット名称[生産増援ナンバー] 護衛増援数[生産増援ナンバー]
    EndIf
    Next
    Exit

    #中立ターンに中立を指定数生成する。
    *ターン 全 中立:
    For 生産増援ナンバー = 1 To Count(無限生産ユニットID)
    If 指定陣営[生産増援ナンバー] = 中立 Then
    Call 無限生産 戦艦情報[生産増援ナンバー] 指定陣営[生産増援ナンバー] 護衛増援ユニット名称[生産増援ナンバー] 護衛増援数[生産増援ナンバー]
    EndIf
    Next
    Exit

    #無限生産ルーチン。
    無限生産:
    If Not 戦艦突入後 Then
    If Not 生産増援ストッピング Then
    For 生産増援グループナンバー = 1 To Args(4)
    Create Args(2) Args(3) Call(平均ランク) プラントAI(ザコ) Call(平均レベル) X(Args(1)) Y(Args(1)) 護衛ユニット[無限生産ユニットID]
    Next
    EndIf
    EndIf
    Return

    平均レベル:
    ForEach 味方
    Incr 味方レベル合計 Level()
    Next
    ForEach NPC
    Incr NPCレベル合計 Level()
    Next
    Return Int(((味方レベル合計 + NPCレベル合計) / (味方数 + NPC数)))

    平均ランク:
    ForEach 味方
    Incr 味方ランク合計 Rank()
    Next
    ForEach NPC
    Incr NPCランク合計 Rank()
    Next
    Return Int(((味方ランク合計 + NPCランク合計) / (味方数 + NPC数)))


    「Info(Unit(),機体クラス)」で「聖獣戦機(和人専用)」を返すパイロットを対象ユニットにして
    「$(Left(Info(Unit(),機体クラス),(InStr("Info(Unit(),機体クラス)","(") - 1))))」を使ったら空文字を返しました。
    TomTomさんの言われたとおりに改善しました。なんでこうなるのかよくわかりません。

引用返信/返信 削除キー/
■8234 / inTopicNo.6)  Re[3]: まだ動いてくれない。
□投稿者/ TomTom -(2003/05/15(Thu) 21:57:10)
    TomTomです。


    先ほどのレスでも描きましたが、

    > 「$(Left(Info(Unit(),機体クラス),(InStr("Info(Unit(),機体クラス)","(") - 1))))」

    InStrの部分のInfoが修正されていません。
    おそらくこれでは正常動作しません。

    また、サブルーチンを挙げられていますが、肝心の正常動作しないという
    Left文が、どのような状況で使用されているのかが分かりません。


    空文字列が返ってくる、とのことですので、考えられることとしては
    「Unit()のカッコ内を省略できない状況で使用している」
    ということでしょうか。
引用返信/返信 削除キー/
■8235 / inTopicNo.7)  Re[4]: まだ動いてくれない。
□投稿者/ ドラゴンライダーΦズ -(2003/05/15(Thu) 22:19:12)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    公開したサブルーチンはパイロット判定用の関数を使っているサブルーチンです。
    紛らわしくてすみません。
    関数自体はヒロキさんが言われていたものに直しましたが、
    護衛ユニットが出てきません。

    「Info(Unit(),機体クラス)」で「聖獣戦機(和人専用)」を返すパイロットを対象ユニットにして
    「$(Left(Info(Unit(対象ユニット),機体クラス),(InStr(Info(Unit(対象ユニット),機体クラス),"(") - 1))))」を使ったら空文字を返しました。
    TomTomさんの言われたとおりにさらに改善しました。なんでこうなるのかよくわかりません。
    ちゃんと言われたとおりにしたのに。
引用返信/返信 削除キー/
■8238 / inTopicNo.8)  Re[5]: まだ動いてくれない。
□投稿者/ TomTom -(2003/05/15(Thu) 22:51:24)
    TomTomです。

    試してみたところ、InStrに不具合があるようです。
    「InStr(Info(Unit(対象ユニット),機体クラス),"(")」
    を一度別の変数に代入し、その変数を使用してLeft文を
    実行してみてください。

    また、
    「Info(Unit(),機体クラス)」
    と、
    「$(Left(Info(Unit(対象ユニット),機体クラス),(InStr(Info(Unit(対象ユニット),機体クラス),"(") - 1))))」
    は連続して実行されているものでしょうか?
    双方で元になるユニットが「Unit()」と「Unit(対象ユニット)」で
    違う表記がされているのは何故でしょうか?
引用返信/返信 削除キー/
■8240 / inTopicNo.9)  Re[6]: まだ動いてくれない。
□投稿者/ ドラゴンライダーΦズ -(2003/05/16(Fri) 00:35:04)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    TomTomさんの言うとおりにしたら
    「)」付きで返ってきました。
    「)」は最後の括弧であると思われます。

    違う表記と言うのが何と何を比較して言っているのか良くわかりません。
    ちなみに連続しては実行していません。
引用返信/返信 削除キー/
■8241 / inTopicNo.10)  Re[7]: まだ動いてくれない。
□投稿者/ TomTom -(2003/05/16(Fri) 07:01:46)
    > 「Info(Unit(),機体クラス)」で「聖獣戦機(和人専用)」を返すパイロットを対象ユニットにして
    > 「$(Left(Info(Unit(対象ユニット),機体クラス),(InStr(Info(Unit(対象ユニット),機体クラス),"(") - 1))))」を使ったら空文字を返しました。

    この2つの式で実験されたわけですよね?
    このような実験の場合、連続して表記しなければ
     「Info(Unit(),機体クラス)」
    で「聖獣戦機(和人専用)」を返したとしても
     「Info(Unit(対象ユニット),機体クラス)」
    で必ず「聖獣戦機(和人専用)」を返すという保証がありませんので。

    これ以上は、実際にLeftを実行しているラベルを見せていただかなければ
    対処のしようはありません。
引用返信/返信 削除キー/
■8243 / inTopicNo.11)  Re[8]: まだ動いてくれない。
□投稿者/ ドラゴンライダーΦズ -(2003/05/16(Fri) 13:29:52)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    関数が使われているサブルーチンを公開します。
    攻撃後に「戦艦に突入できるか」の判定を行うものです。
    動作の確認のため、実際の突入処理は省いてあります。

    問題の関数が使われている場所は二つ目のSwitch文で、
    このSwitch文で機体クラスの判定をしています。

    不備が直ってなかったので、スイッチ文の不備も直しましたが、
    変な値が返ってくることに変わりは無いので、正常動作はしないと思います。

    #攻撃したユニットの条件判定と突入イベント呼び出し。
    *攻撃後 味方 敵:
    If IsAvailable(相手ユニット,母艦) Then
    Set 戦艦突入可否判定
    戦艦名 = Unit(相手ユニット)
    Switch 戦艦名
    Case スードリ
    護衛兵力 = ティターンズ兵士(ザコ)
    EndSw
    EndIf
    If Info(Unit(),武器, 対象ユニット使用武器, 最大射程) = 1 Then
    Switch Left(Info(Unit(対象ユニット),機体クラス),(InStr(Info(Unit(対象ユニット),機体クラス),"(") - 1)))
    Case 聖獣戦機 霊機 モビルファイター 獣戦機
    Set 突撃兵突入
    Switch Info(Unit(),武器, 対象ユニット使用武器, 属性)
    Case 突 武 接
    Incr 戦艦突入可否判定
    EndSw
    Case Else
    If Not IsAvailable(相手ユニット,母艦) Then
    Switch 対象ユニット使用武器
    Case ドリルクラッシャー
    Switch 対象ユニット
    Case 旋風寺舞人 サンダーバロン
    Incr 戦艦突入可否判定
    EndSw
    Case ドリルアタック
    Switch 対象ユニット
    Case ドリルランダー ドリルシルバー ドリルボーイ
    Incr 戦艦突入可否判定
    EndSw
    Case ミラクルドリル
    Switch 対象ユニット
    Case ツワブキ=サンシロー
    Incr 戦艦突入可否判定
    EndSw
    Case ダブルドリラー
    Incr 戦艦突入可否判定
    Case 超電磁スピン
    Incr 戦艦突入可否判定
    Case ドリルアーム
    Incr 戦艦突入可否判定
    Case ゲッタードリル
    Incr 戦艦突入可否判定
    Case クラフトドリル
    Incr 戦艦突入可否判定
    Case ランダードリル
    Incr 戦艦突入可否判定
    EndSw
    EndIf
    EndSw
    EndIf
    Talk ナレーター
    $(戦艦突入可否判定)は$(Left(Info(Unit(対象ユニット),機体クラス),(InStr(Info(Unit(対象ユニット),機体クラス),"(") - 1))))のカタパルトからの侵入を強行しました。
    End
    Exit

    このサブルーチンでは相手が戦艦であるかどうか、こちら側の使用した武器が条件に当てはまるかというのを判定します。
    条件は「射程1の武器で格闘武器又はドリルで突撃するタイプの武器である」というものです。
    格闘武器の場合、「操縦者が戦闘能力を持っている」という条件を満たす必要があるので、
    機体クラスで分岐するようにしました。

    ユニットの機体クラスが「聖獣戦機(和人専用)」のユニットが条件を満たすと、
    最後のTalk文で「2は聖獣戦機のカタパルトからの侵入を強行しました。」と表示されるはずなのですが、
    現状では「1は聖獣戦機)のカタパルトからの侵入を強行しました。」と表示されてしまいます。
    動作テストで戦艦に攻撃しているので、「相手が戦艦である」という条件は満たしています。
引用返信/返信 削除キー/
■8244 / inTopicNo.12)  Re[9]: まだ動いてくれない。
□投稿者/ TomTom -(2003/05/16(Fri) 17:39:24)
    先のレスでも書いた
    > 「InStr(Info(Unit(対象ユニット),機体クラス),"(")」
    > を一度別の変数に代入し、その変数を使用してLeft文を
    > 実行してみてください。
    ということを実行されていないようですが?

    あと、2つあるのLeft文のカッコの数を数えてください。
    両方とも閉じカッコの数が違っています。

    また、長文の(今回のようにIfやSwitchを多用している場合は特に)コードを
    掲示板に挙げるときは、インデントをしていただいたほうが見やすいので、
    以降、コードの提示をした頂く場合はインデントをした状態でお願いします。
解決済み!
引用返信/返信 削除キー/
■8245 / inTopicNo.13)  とりあえずの報告
□投稿者/ ドラゴンライダーΦズ -(2003/05/16(Fri) 19:07:38)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    専用指定抜きの機体クラスの取得に成功しました。
    が、まだパイロット判定用の関数が動かないので、
    解決チェックは押せません。すみません。
引用返信/返信 削除キー/
■8266 / inTopicNo.14)  Re[11]: とりあえずの報告
□投稿者/ (゚ε゚)ノ -(2003/05/17(Sat) 04:59:16)
    CreativeInfinity:
    If Args(8) <> "" Then
     Create Args(1) Args(2) Call(平均ランク) Args(3) (Call(平均レベル) + 2) Args(4) Args(5) Args(8)
    Else
     Create Args(1) Args(2) Call(平均ランク) Args(3) (Call(平均レベル) + 2) Args(4) Args(5)
    EndIf
    無限生産ユニット[Count(無限生産ユニット) + 1] = 対象ユニット
    護衛増援ユニット[対象ユニット] = Args(6)
    護衛増援数[対象ユニット] = Args(7)
    Call 無限生産 対象ユニット
    Return

    #敵/中立ターンに敵を指定数生成する。
    *ターン 全 敵:
    *ターン 全 中立:
    Local i
    For i = 1 To Count(無限生産ユニット)
     If Party(無限生産ユニット[i]) = フェイズ And Status(無限生産ユニット[i]) = "出撃" Then
     Call 無限生産 無限生産ユニット[i]
     EndIf
    Next
    Exit

    #無限生産ルーチン。
    無限生産:
    Local i
    If Not (戦艦突入後 Or 生産増援ストッピング) Then
     For i = 1 To 護衛増援数[Args(1)]
      Create Party(Args(1)) 護衛増援ユニット[Args(1)] Call(平均ランク) プラントAI(ザコ) Call(平均レベル) X(Args(1)) Y(Args(1))
     Next
    EndIf
    Return

    平均レベル:
    Local level_sum
    level_sum = 0
    ForEach 味方
     Incr level_sum Level()
    Next
    ForEach NPC
     Incr level_sum Level()
    Next
    Return Int(level_sum / (味方数 + NPC数))

    平均ランク:
    Local rank_sum
    rank_sum = 0
    ForEach 味方
     Incr rank_sum Rank()
    Next
    ForEach NPC
     Incr rank_sum Rank()
    Next
    Return Int(rank_sum / (味方数 + NPC数))

    #攻撃したユニットの条件判定と突入イベント呼び出し。

    *攻撃後 味方 敵:
    *攻撃後 味方 中立:
    If Not (IsAvailable(相手ユニット,母艦) And Info(対象ユニットID,武器,対象ユニット使用武器,最大射程) = 1) Exit

    Set 戦艦突入可否判定

    Switch Unit(相手ユニット)
    Case スードリ
     護衛兵力 = ティターンズ兵士(ザコ)
    EndSw

    u_class = Info(対象ユニットID,機体クラス)
    u_class_bracket = InStr(u_class,"(")

    If u_class_bracket > 0 Then
     u_class = Left(u_class,u_class_bracke - 1)
    EndIf

    Switch u_class
    Case 聖獣戦機 霊機 モビルファイター 獣戦機
     Set 突撃兵突入
     Switch Info(対象ユニットID,武器,対象ユニット使用武器,属性)
     Case 突 武 接
      Incr 戦艦突入可否判定
     EndSw
    Case Else
     Switch 対象ユニット使用武器
     Case ドリルクラッシャー ドリルアタック ミラクルドリル
      Switch 対象ユニット
      Case 旋風寺舞人 サンダーバロン ドリルランダー ドリルシルバー ドリルボーイ ツワブキ=サンシロー
       Incr 戦艦突入可否判定
      EndSw
     Case ダブルドリラー 超電磁スピン ドリルアーム ゲッタードリル クラフトドリル ランダードリル
      Incr 戦艦突入可否判定
     EndSw
    EndSw
    Talk ナレーター
    $(戦艦突入可否判定)は$(u_class)のカタパルトからの侵入を強行しました。
    End
    Exit
引用返信/返信 削除キー/
■8267 / inTopicNo.15)  解決です!
□投稿者/ ドラゴンライダーΦズ -(2003/05/17(Sat) 05:31:03)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    誰だかわかりませんが、全て解決です。
    どうもありがとうございました。
引用返信/返信 削除キー/
■8268 / inTopicNo.16)  これが本当の解決です!
□投稿者/ ドラゴンライダーΦズ -(2003/05/17(Sat) 05:32:40)
http://www2u.biglobe.ne.jp/~songokuu/Index.html
    私はドラゴンライダーΦズです。

    申し訳ありませんでした。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -