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

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

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

■3839 / inTopicNo.1)  取得経験値算出法
  
□投稿者/ 隼人 -(2002/06/07(Fri) 14:22:56)
    以前質問した召喚に関連することなのですが、
    召喚したユニットが得た経験値をそのまま召喚元ユニットに反映する
    インクルを組もうとしているんですが、
    取得経験値の算出方法がわかりません。
    (相手のパイロット経験値+ユニット経験値)*レベル差による修正
    というところまではわかったんですが、
    レベル差の修正がどのくらいなのかがわかりません。
    よろしくお願いします。
引用返信/返信 削除キー/
■3840 / inTopicNo.2)  Re[1]: 取得経験値算出法
□投稿者/ 宇宙世紀0079 -(2002/06/07(Fri) 14:51:48)
    毎度、宇宙世紀です。

    過去ログをサーチしたところ、以前幻魔の公子さんが答えられているようです。
    そちらを御参照になってはいかがでしょうか?

    尚、記事No2622、サーチした際のワードは、「経験値」「計算」の二つです。
    サーチしたログは過去ログ15になります。

    それでは。
引用返信/返信 削除キー/
■3842 / inTopicNo.3)  Re[1]: 取得経験値算出法
□投稿者/ コウ -(2002/06/07(Fri) 15:22:38)
    ども、コウです。

    現在でも召喚ユニットが得た経験値は召喚元ユニットと共有されます。
    わざわざインクルードを導入するまでもないと思いますが?
    それとも現状とは全く異なるシステムで算出したいということでしょうか?

    では。
引用返信/返信 削除キー/
■3844 / inTopicNo.4)  Re[1]: 取得経験値算出法
□投稿者/ MrSamba -(2002/06/07(Fri) 16:20:53)
    コウさんの仰る通り、アビリティーで召還されたユニットの取得する経験値
    は、召還元ユニットにも加算されます。

    が、もし隼人さんがイベントコマンドで召還を再現している場合、やはり
    取得経験値算出法は必要になるので、幻魔の公子さんのものを補足させて
    もらいます。

    実際はSRWFの式とは倍率が少し違います。幻魔の公子さんのソースを
    お借りして修正したものが下のものです。

    経験値倍率:
    Set レベル差 (Level(相手ユニット) - Level(対象ユニット))
    Switch レベル差
    Case -7
    Set 倍率 4.5
    Case -6
    Set 倍率 4
    Case -5
    Set 倍率 3.5
    Case -4
    Set 倍率 3
    Case -3
    Set 倍率 2.5
    Case -2
    Set 倍率 2
    Case -1
    Set 倍率 1.5
    Case 1
    Set 倍率 0.5
    Case 2
    Set 倍率 0.25
    Case 3
    Set 倍率 0.16666
    Case 4
    Set 倍率 0.125
    Case 5
    Set 倍率 0.1
    Case Else
    If レベル差 > 0 Then
    Set 倍率 0.08333
    Elseif レベル差 < 0 Then
    Set 倍率 5
    Else
    Set 倍率 1
    Endif
    EndSw
    Return 倍率

    これを攻撃イベントなどで使う事で取得経験値の算出は可能ですが、
    M兵器使用時、経験値に影響を与える特殊能力、精神などの影響を
    考えると全体的にかなり複雑になりますので、あまりお勧めはしま
    せん。それよりも直接任意のパイロット(今回の場合は召還ユニット
    ですが)の経験値を取得する方が簡単だと思うので、経験値を取得
    するCall関数を下に載せておきます。

    ExpCheck:
    P_LEVEL = Level(Args(1))
    ExpM[1] = 125
    ExpM[2] = 25
    ExpM[3] = 5
    ExpM[4] = 1
    For i = 1 to 4
    For j = 1 to 5
    ExpUp Args(1) ExpM[i]
    If Level(Args(1)) > P_LEVEL Then
    ExpS[i] = (j - 1)
    ExpUp (Args(1) - ExpM[i])
    Break
    EndIf
    Next
    Next
    Exp_Buf = (125 * ExpS[1] + 25 * ExpS[2] + 5 * ExpS[3] + 1 * ExpS[4])
    ExpUp Args(1) (- Exp_Buf)
    Return (499 - Exp_Buf)

解決済み!
引用返信/返信 削除キー/
■3845 / inTopicNo.5)  マルチレス
□投稿者/ 隼人 -(2002/06/07(Fri) 16:30:04)
http://isweb43.infoseek.co.jp/play/ha_ya_to/
    宇宙世紀0079さん>
    ありがとうございます。
    過去ログにあったんですね。
    わざわざ探していただいてお手数おかけしました。
    ただ、Case文で分ける以外の方法がなさそうなので、
    召喚パイロットと召喚元パイロットの経験値の同機をとる方法にしました。
    これでも20行くらいになってしまいましたが、
    レベルアップした戦闘後のことを考えるとこの方が理想的かもしれないです。
    (例えばLv10の召喚パイロットが同レベルの敵と戦闘しレベルアップすると、
    Lv11でLv10を倒したと計算してしまうという可能性があります)

    コウさん>
    普通に召喚アビリティで召喚した召喚ユニットではなく、
    インクルードで召喚ユニットをCreateするという方法をとっているため、
    召喚元に経験値が割り振られないということになってしまっているのです。
    召喚後の「召喚解除」を無効化するための措置です。
    詳しくはここのNo.3762のツリーを参照してください。
    また、リンクのURLにinclude.eveをアップしておきましたので、
    そっちを見ていただいてもわかると思います。

    MrSambaさん>
    ありがとうございます。
    このサブルーチンってExpCheck(召喚元パイロット名)って使い方であってますか?
    使い方のせいかもしれないですけど、召喚元パイロットの経験値がみるみる増えて、
    逆に召喚ユニットのほうは経験値が減ってるみたいなんですけど。
    配列使ってFor文で回すような処理ってまだ使ったことなくて、
    そのままコピペして、

    取得経験値 = ExpCheck(召喚元パイロット)
    AutoTalk システム
    召喚元パイロットは$(取得経験値)の経験値を得た。
    End

    みたいに書いてみたんですが・・・
    ごめんなさい、まだ複雑なイベントになれていなくて・・・
解決済み!
引用返信/返信 削除キー/
■3856 / inTopicNo.6)  Re[2]: マルチレス
□投稿者/ MrSamba -(2002/06/08(Sat) 12:49:32)
    このサブルーチンは単にArgs(1)に入れたパイロットの経験値を返す関数です。
    (データに指定されている経験値ではなく、プレー中に確認できるレベルの横
    の括弧内にあるあの数値です。紛らわしいのでここでは累積経験値と呼びます。)
    従って、今回の件に限らずこのCall関数はどのパイロットに対しても汎用的に
    使用できます。

    このサブルーチンは、

    @。召還されたユニットが参加する攻撃イベントラベルで同ユニットの累積
    経験値をこのサブルーチンで取得、変数に収納。
    A。攻撃後または破壊イベントラベルでもう一度同ユニットの累積経験値を取得。
    B。@とAの結果の差を求め、それを召還元ユニットに加える。
    ※手順@は変数のやりくりのしようによっては省略できます。

    という手順を踏むのに使用します。

    具体的に示した方が分りやすいでしょうか...

    まず、
    召還インクルード内でユニットが召還された時点で「累積経験値[ユニットID]」
    という変数に「0」を指定。(ユニットIDは召還された方のものです。)

    攻撃後 全 全:
    If 対象ユニット = 召還されたユニット Then
    攻撃後累積経験値 = ExpCheck(対象ユニット)
    ExpUp 召還元ユニット (攻撃後累積経験値 - 累積経験値[対象ユニットID])
    累積経験値[対象ユニットID] = 攻撃後累積経験値
    EndIf
    破壊 全:
    If 相手ユニット = 召還されたユニット Then
    攻撃後累積経験値 = ExpCheck(相手ユニット)
    ExpUp 召還元ユニット (攻撃後累積経験値 - 累積経験値[相手ユニットID])
    累積経験値[相手ユニットID] = 攻撃後累積経験値
    EndIf
    Exit

    以上のイベントラベルをインクルードファイルに付加してください。
    ※If文やユニット名等は適当に入れたのでご自分のソースに合うように変更
    してください。一目見て分ると思いますが、これは上で示した手順@を必要と
    しない方法です。








解決済み!
引用返信/返信 削除キー/
■3888 / inTopicNo.7)  Re[3]: マルチレス
□投稿者/ 隼人 -(2002/06/10(Mon) 13:18:18)
    なるほど、うまくいきました。
    これなら同期を取るより簡単ですね。
    ありがとうございました。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -