カテゴリ:Oblivion;script( 2 )

 

DiabloRobe

   ■念のためスクリプト完成版メモ
scn aaDiabloWingschangeClaws

ref actor
short Now ;■状態フラグ 0=条件不成立中/1=条件成立中


begin GameMode
set actor to getcontainer
if(actor)
if (Now == 0) ;■状態フラグが0

if((actor.getequipped aaDiabloWings) && (actor.isweaponout))
actor.AddItemns aaDiabloClaws,1 ;■
actor.EquipItemns aaDiabloClaws ;■
actor.additemns aaDiabloWeapon,1
actor.equipitemns aaDiabloWeapon
actor.additemns DiabloShield,1
actor.equipitemns DiabloShield
message "Diablo is wake..."
message "Diablo is wake..."
set Now to 1
endif
endif

if(now == 1)
if((actor.getequipped aaDiabloClaws) && (actor.isweaponout))
set now to 1
else
if(actor.getitemcount aaDiabloClaws > 0)
actor.removeitemns aaDiabloClaws,1
if(actor.getitemcount aaDiabloWeapon > 0)
actor.removeitemns aaDiabloWeapon,1
if(actor.getitemcount DiabloShield > 0)
actor.removeitemns DiabloShield,1
if(actor.getitemcount aaDiabloWings > 0)
actor.equipitemns aaDiabloWings
set now to 0
endif
endif
endif
endif
endif
endif


if(now == 1)
if(actor.iscasting)
actor.additemns aaDiabloCast,1
actor.equipitemns aaDiabloCast
set now to 2
if(actor.isweaponout == 0)
if(actor.getitemcount aaDiabloClaws > 0)
actor.removeitemns aaDiabloClaws,1
if(actor.getitemcount aaDiabloWeapon > 0)
actor.removeitemns aaDiabloWeapon,1
if(actor.getitemcount DiabloShield > 0)
actor.removeitemns DiabloShield,1
if(actor.getitemcount aaDiabloWings > 0)
actor.equipitemns aaDiabloWings
endif
endif
endif
endif
set now to 0
endif
endif
endif

if(now == 2)
if(actor.iscasting)
set now to 2
else
if(actor.getitemcount aaDiabloCast > 0)
actor.removeitemns aaDiabloCast,1

actor.EquipItemns aaDiabloClaws ;■

actor.equipitemns aaDiabloWeapon

actor.equipitemns DiabloShield
set now to 1
endif
endif
endif
endif
end
[PR]

  by armord | 2010-10-19 02:53 | Oblivion;script | Comments(1)

DiablorobeのScript メモ

QuestやreffのIDの先頭に数字が入るとまずいらしい

Scriptメモ Anchrite_Outfitのスクリプト
ScriptName aaaChangeItemsRingBk ;■指輪用Script

short PCNow ;■状態フラグ 0=条件不成立中/1=条件成立中

begin GameMode
if (PCNow == 0) ;■状態フラグが0なら
if ((Player.GetEquipped aaaTNAORingBk) && (Player.GetEquipped aaaTNAORobeMagicNBk) && (Player.IsWeaponOut))
;■Ringを装備 && RobeMagicNを装備 && 抜刀なら(条件 初成立)
set PCNow to 1 ;■状態フラグを1にする
message "-Reinforce MagicalPower-"
message "-Reinforce MagicalPower-"
Player.AddItem aaaTNAORobeMagicBTBk,1 ;■RobeMagicBTを追加
Player.EquipItem aaaTNAORobeMagicBTBk ;■RobeMagicBTを装備
else ;■条件未成立なら
set PCNow to 0 ;■状態フラグを更新
if (Player.GetItemCount aaaTNAORobeMagicBTBk > 0) ;■RobeMagicBTを持っているなら
message " "
message " "
Player.RemoveItem aaaTNAORobeMagicBTBk,1 ;■RobeMagicBTを削除
endif
endif

else ;■状態フラグが1なら
if ((Player.GetEquipped aaaTNAORingBk == 1) && (Player.GetEquipped aaaTNAORobeMagicBTBk == 1) && (Player.IsWeaponOut == 1))
;■条件成立中なら
set PCNow to 1 ;■状態フラグを更新
else ;■Ringを装備していない || RobeBTを装備していない || 納刀なら
set PCNow to 0 ;■状態フラグを0にする
if (Player.GetItemCount aaaTNAORobeMagicNBk > 0) ;■RobeMagicNを持っているなら
Player.EquipItem aaaTNAORobeMagicNBk ;■RobeMagicNを装備
endif
endif
endif
end

↑をプレイヤー以外に適用する場合
scn

ref actor
short now

Begin gamemode
set actor to GetContainer
if(actor)
ifから始まるその他の関数、装備変更に必要な関数
endif;追加
end


  MOD作成支援スレ6の885氏の助言
・now==0でWingを装備中に抜刀→addItem&Equipして、nowが1に
この時点でnow==1なのに、if(now==0) の中にcast中の判定があるから、装備2へは移行しません

状態フラグ使うなら、
・初期状態 : 0
・フラグが0の時
 Wing装備してて抜刀状態→色々addItemしてフラグを1に
 それ以外のときは何もしない
・フラグが1の時
 castされた→装備2にしてフラグを2に
 抜刀状態解除なら、removeItemしてフラグを0に
 それ以外のときは何もしない
・フラグが2の時
 cast中なら何もしない
 cast中じゃなければ装備2を取り除いて装備1へ戻し、フラグを1に

こんな感じかな。フレームごとに毎回走るので、
フラグが0の時に毎回removeItemを走らせるのは負荷が大きいのでお勧めしません

あと、removeItemするときは
if~
 removeItem
 if~
  removeItem
の様に入れ子にすると、何かの拍子(捨てたり攻撃で武器落としたり)に一個だけ無くなるとそれ以降がremoveされないので、
それぞれendifで閉じた方が良いです
もしくは "EquipItem aaDiabloWeapon 1" の様にして、プレイヤーが勝手に装備を外せないようにするとか

メッセージを出さずにaddItemやEquipItemするには、OBSEの関数を使う必要があります
AddItemNS、 RemoveItemNS、 EquipItemNS、 UnequipItemNS
この辺がメッセージを出しません。使い方は元のAddItemなどと同じです



credit
The Elder Scrolls IV:OBLIVION 避難所の588.589氏
Tona's anchorite_outfit
MOD作成支援スレ6の885、888氏
CSヘルプ作成して下さった方、翻訳してくださった方
[PR]

  by armord | 2010-08-23 20:31 | Oblivion;script | Comments(0)

SEM SKIN - DESIGN by SEM EXE