今更なオブリビオンブログ
おもにMOD関連のメモを書いていくと思います、MODをいじったり、作ってるのが楽しいです。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MOD作り9
ドラクエのニフラムのような魔法を作れそうだったので作ってみました。

動作としては、魔法を当てて、プレイヤーよりもLVが低かったらDisableするという単純なものです。
Disableしたオブジェクトは、実際は消えてなくなるのではなく、無効化して見えなくなるだけでデータはそこに存在しているのですが、
ザコ敵ならばセルのリスポーンの時に掃除されるはずなので、Disableして放って置いても問題は無いはずです。


ただし、LVだけの条件でどんな敵もDisableしていたらクエストに関係するNPCも消してしまう可能性があり、もしそうなったら大変なことになるのでもう少し条件を厳しくしました。

まずは「GetIsCreature」でクリーチャーかどうかを判断して相手がクリーチャーの時だけ発動するようにしました。
(「GetIsCreature」はクリーチャーだった場合は1を、そうではない場合は0を返す関数です。)


ただ、これだけでは羊などの無害な家畜も巻き込んでしまうのでもう一つ条件がほしい所。
そこで、「IsActorEvil」で相手が悪の派閥にいる場合の条件を足そうと思いましたが、これは断念しました。
なぜなら、「IsActorEvil」は、相手の所属している派閥が悪の派閥のみの場合のみ1を返す関数なので、悪ではない派閥と悪の派閥の両方に所属している相手には効かないことになってしまいます。
それに、一部の大型MODでは、野生動物の派閥を変更して悪の派閥ではなくしてあったりするので、これはちょっと使いづらいです。


そこで、「IsInCombat」をもう一つの条件に使いました。
これは相手が戦闘状態の時に1を返す関数です。これなら、無害な家畜を巻き添えにせずに済むと同時に、敵対的な相手に効果を与えることが出来ます。
…ただ、不意打ちは出来なくなってしまいましたが。


以下がスクリプトの内容になります。
if文が3つあって入れ子になっているため、ぱっと見複雑そうですが、順に見ていけば理解できると思います。

Ref Actor
Short PCLV
Short AcLV

begin ScriptEffectStart
if GetIsCreature == 1
 if IsInCombat == 1
 set PCLV to player.GetLevel ;PCのLVを取得
 set Actor to GetSelf ;ActorのRefを取得
 set AcLV to Actor.GetLevel ;ActorのLVを取得
  if PCLV > AcLV ;判定
  Actor.Disable
  MessageEX "%nを消し去った",Actor
  else
  MessageEX "%nのレベルが 高いため 実行できません(LV.%.0f)",Actor,AcLV
  endif
 else
 Message "相手が現在戦闘中ではありません"
 endif
else
Message "相手がクリーチャーではありません"
endif
end
スポンサーサイト

テーマ:PCゲー - ジャンル:ゲーム

コメント

コメントの投稿














管理者にだけ表示を許可する


トラックバック
トラックバック URL
http://5588ob.blog.fc2.com/tb.php/24-c5b91ba5
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。