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

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

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

■21433 / inTopicNo.1)  インクルの記述を短くしたい
  
□投稿者/ ゴメラモス -(2009/03/13(Fri) 06:51:43) [ID:4C8V9exN]
    共属性を持たせてもきちんと弾数管理をしてくれないので
    こんなのを作ってみたんですが…
    なおライフルやバズーカはアイテム装備です。

    *使用 味方 ビームライフル:
    *使用 味方 ビームライフル2連射:
    *使用 味方 ビームライフル3連射:
    *使用 味方 ビームバズーカ:
    *使用 味方 ビームバズーカ2連射:

    If 対象ユニット使用武器 = ビームライフル or 対象ユニット使用武器 = ビームライフル2連射 or 対象ユニット使用武器 = ビームライフル3連射 Then

    共属性武器弾数 = Info(ユニット, 対象ユニットID, 武器, ビームライフル, 弾数)
    ElseIf 対象ユニット使用武器 = ビームバズーカ or 対象ユニット使用武器 = ビームバズーカ2連射 Then

    共属性武器弾数 = Info(ユニット, 対象ユニットID, 武器, ビームバズーカ, 弾数)
    Endif

    Exit


    *使用後 味方 ビームライフル:
    *使用後 味方 ビームライフル2連射:
    *使用後 味方 ビームライフル3連射:

    If 対象ユニット使用武器 = ビームライフル2連射 And Not Info(ユニット, 対象ユニットID, 武器, ビームライフル, 弾数) = 共属性武器弾数 - 2 Then
    SetBullet 対象ユニットID ビームライフル (共属性武器弾数 - 2)
    ElseIf 対象ユニット使用武器 = ビームライフル3連射 And Not Info(ユニット, 対象ユニットID, 武器, ビームライフル, 弾数) = 共属性武器弾数 - 3 Then
    SetBullet 対象ユニットID ビームライフル (共属性武器弾数 - 3)
    Endif

    SetBullet 対象ユニットID ビームライフル2連射 (Info(ユニット, 対象ユニットID, 武器, ビームライフル, 弾数) \ 2)
    SetBullet 対象ユニットID ビームライフル3連射 (Info(ユニット, 対象ユニットID, 武器, ビームライフル, 弾数) \ 3)

    Exit


    *使用後 味方 ビームバズーカ:
    *使用後 味方 ビームバズーカ2連射:

    If 対象ユニット使用武器 = ビームバズーカ2連射 And Not Info(ユニット, 対象ユニットID, 武器, ビームバズーカ, 弾数) = 共属性武器弾数 - 2 Then
    SetBullet 対象ユニットID ビームバズーカ (共属性武器弾数 - 2)
    Endif

    SetBullet 対象ユニットID ビームバズーカ2連射 (Info(ユニット, 対象ユニットID, 武器, ビームバズーカ, 弾数) \ 2)

    Exit


    これだと似たような武器全てに対応する場合、記述が物凄く長くなってしまうので
    なんとか変数、関数を使って短くしたいのですがどうすればいいのでしょう?

引用返信/返信 削除キー/
■21434 / inTopicNo.2)  Re[1]: インクルの記述を短くしたい
□投稿者/ 千奈 -(2009/03/13(Fri) 07:36:49) [ID:uq0qrkAA]
    連想配列と【ForEach】コマンドを使えば、ある程度短い記述に出来るとは思いますが…
    こういう武装で共属性が上手く機能しないということはあまり無いと思います。
    武装データの記述方法に問題があるのかもしれません。

    データ側を治せば済むのでしたらその方が良いと思いますので、
    よろしければユニットデータ(またはアイテムデータ)を見せていただけませんか?
引用返信/返信 削除キー/
■21435 / inTopicNo.3)  Re[2]: インクルの記述を短くしたい
□投稿者/ ゴメラモス -(2009/03/13(Fri) 16:04:00) [ID:4C8V9exN]
    以下のデータでテストし、まずデータ自体にエラーが無い事を確認しました。

    テストロボット
    テストロボット, ロボット, 1, 2
    陸, 3, M, 1000, 100
    特殊能力なし
    3000, 100, 1000, 100
    AAAA, -.bmp

    ビームバズーカ
    ビームバズーカ, 汎用, 強化パーツ
    特殊能力なし
    0, 0, 0, 0, 0
    ビームバズーカ, 1000, 1, 4, -20, 10, -, -, AA-A, +0, B共
    ビームバズーカ2連射, 2000, 1, 4, -20, 5, -, -, AA-A, +0, B連L2共

    弾数管理が上手くいかないというのは、共属性の仕様についてです。

    ↑の武器を使用する場合

    ビームバズーカを1回使用→ バズ:弾9 2連射:弾5 (バズ:弾9 2連射:弾4が正しい)

    次に2連射を1回使用 → バズ:弾8 2連射:弾4 (バズ:弾7 2連射:弾3が正しい)

    となり3発分撃っているのに2発しか弾が減らない為、
    交互に使う事で最大15発分撃ててしまいます。

    それで使用イベントを作ってみたという訳です。

引用返信/返信 削除キー/
■21436 / inTopicNo.4)  Re[3]: インクルの記述を短くしたい
□投稿者/ 中箱 -(2009/03/13(Fri) 18:48:42) [ID:fDmQ2QlE]
    >交互に使う事で最大15発分撃ててしまいます。

    いや、15発は撃てないでしょう。
    交互に使えば、単発5回+2連射5回の計10回使って弾切れです。



    さておき、

    援護や再攻撃が無いなら、
    動作確認していませんがダミー属性を利用してこんな感じでしょうか。


    #武器データ

    #・ビームライフル系にはダミー属性「類L1」を付けておく。
    #・ビームバズーカ系にはダミー属性「類L2」を付けておく。
    #・マシンガン系にはダミー属性「類L3」を付けておく。
    #(ダミー属性「類」のレベルは弾を共有させたい系統ごとに変える)

    #・弾数共有する攻撃にはダミー属性「弾L」を付けておく。属性レベルは消費弾数に合わせる

    #ダミー属性の名前は適当です

    データ例
    ビームライフル, 800, 1, 4, +0, 12, -, -, AA-A, +0, B類L1弾L1
    ビームライフル2連射, 1600, 1, 4, +0, 6, -, -, AA-A, +0, B連L2類L1弾L2
    ビームライフル3連射, 2000, 1, 4, +0, 4, -, -, AA-A, +0, B連L3類L1弾L3

    ビームバズーカ, 1000, 1, 4, -20, 10, -, -, AA-A, +0, B類L2弾L1
    ビームバズーカ2連射, 2000, 1, 4, -20, 5, -, -, AA-A, +0, B連L2類L2弾L2


    #インクル

    *使用 味方 全:
    Local 武器系統 = Info("ユニット",対象ユニットID,"武器",対象ユニット使用武器,"属性レベル","類")
    If 武器系統 > 0 Then
     共属性武器弾数 = 0
     Local i 弾レベル
     For i = 1 To Info("ユニット",対象ユニットID,"武器数")
      If Info("ユニット",対象ユニットID,"武器",i,"属性レベル","類") = 武器系統 Then
       弾レベル = Info("ユニット",対象ユニットID,"武器",i,"属性レベル","弾")
       共属性武器弾数 = Max(Info("ユニット",対象ユニットID,"武器",i,"弾数") * 弾レベル,共属性武器弾数)
      EndIf
     Next
    EndIf
    Exit

    *使用後 味方 全:
    Local 消費弾数 = Info("ユニット",対象ユニットID,"武器",対象ユニット使用武器,"属性レベル","弾")
    If 消費弾数 > 0 Then
     Incr 共属性武器弾数 (-1 * 消費弾数)
     Local 武器系統 = Info("ユニット",対象ユニットID,"武器",対象ユニット使用武器,"属性レベル","類")
     Local i
     For i = 1 To Info("ユニット",対象ユニットID,"武器数")
      弾レベル = Info("ユニット",対象ユニットID,"武器",i,"属性レベル","弾")
      If Info("ユニット",対象ユニットID,"武器",i,"属性レベル","類") = 武器系統 and 弾レベル > 0 Then
       SetBullet 対象ユニットID i (共属性武器弾数 \ 弾レベル)
      EndIf
     Next
    EndIf
    UnSet 共属性武器弾数
    Exit
引用返信/返信 削除キー/
■21437 / inTopicNo.5)  Re[4]: インクルの記述を短くしたい
□投稿者/ ゴメラモス -(2009/03/13(Fri) 22:28:01) [ID:4C8V9exN]
    中箱さんの処理を参考に目的のインクルを作ることができました。
    ありがとうございます。


    後、唯の勘違いにいちいち反応する必要はないと思いますが、
    聞きたいことだけ聞いて後はスルーってのも冷たい感じがするので一応。

    > いや、15発は撃てないでしょう。
    > 交互に使えば、単発5回+2連射5回の計10回使って弾切れです。

    15発ではなく15発分撃てるなので
    単発5発+2連射5発(2×5=10発)で15発分です。


    では改めてレスを下さったお二人に感謝致します。
    ありがとうございました。

解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -