admin admin List
2ちゃんねるの製作相談スレで公開されていたサンプルを元に弄った物なんですが、まだ不具合があるということで、バグ撲滅のために記事にしてみます。(記事にしないと眺める機会がなくなる@@

糞長いので追記に記入します。
宜しければbugfixにご協力お願いします。
bug以外に、もっと良いのあんじゃね?ってのがありましたら、コメントお願いします。
拍手する
武器収納時に他の武器を装備すると落ちたり。
落ちなくてもインベントリに残ってしまうってのは見辛いですよね。
なので、二刀モデルを装備していない時は削除する。
begin OnUnequip Who
if Who.GetEquipped aaLaevatainDM == 0 && Who.IsWeaponOut == 0 && Who.GetItemCount aaLaevatainDM = 1)
Who.removeitem aaLaevatainDM 1
↑を二刀モデルの一番下に加えれば問題ない…はず?
でもそのまま入れたらクラッシュしそうだなーw
結果は明日報告します。
私の場合二刀を使っていてCTDしたこと無いので、それは解決できません。(何回も言ってますけどw


右手武器に付けるスクリプト
ScriptName aaaAutoEquipLaevatainOH

ref Who
short ExcF
float ExtTmr

begin OnAdd
set Who to GetContainer
if ( Who.IsActor != 0 )
set ExcF to 1
else
set ExcF to 0
endif
end

begin GameMode
if ( ExcF != 0 )
set ExtTmr to ExtTmr + GetSecondsPassed
if ( ExtTmr < 0.2 )
return
else
set ExtTmr to 0
endif
endif

if (Who.GetEquipped aaLaevatainOnehand == 1 && Who.IsWeaponOut == 0)
if (Who.GetEquipped aaLaevatainOffhand == 1)
message " "
message " "
if (Who.GetEquipped aaLaevatainOffhand == 1)
Who.UnequipItem aaLaevatainOffhand
endif

if (Who.GetItemCount aaLaevatainDM == 0)
message " "
message " "
Who.AddItem aaLaevatainDM 1
endif
message " "
message " "
Who.EquipItem aaLaevatainDM
endif

elseif (Who.GetEquipped aaLaevatainOnehand == 1 && Who.IsWeaponOut == 1 && Who.IsShieldOut == 0)

if (Who.GetItemCount aaLaevatainOffhand > 0)
message " "
message " "
Who.EquipItem aaLaevatainOffhand
endif

if (Who.GetItemCount aaLaevatainDM > 0)
message " "
message " "
Who.RemoveItem aaLaevatainDM 1
endif
endif
End

左手武器に付けるスクリプト
scn aaaLaevatainOffHandScript

ref Who
short ExcF
float ExtTmr

begin OnEquip
set Who to GetContainer
if ( Who.IsActor != 0 )
set ExcF to 1
else
set ExcF to 0
endif
end

begin OnEquip who
if ( ExcF != 0 )
set ExtTmr to ExtTmr + GetSecondsPassed
if ( ExtTmr < 0.2 )
return
else
set ExtTmr to 0
endif
endif

if (Who.GetEquipped aaLaevatainDM == 1)
message " "
message " "
Who.UnequipItem aaLaevatainOffhand

elseif ((Who.GetEquipped aaLaevatainOnehand == 1) && Who.IsWeaponOut == 0)
message " "
message " "
Who.UnequipItem aaLaevatainOffhand

if (Who.GetItemCount aaLaevatainDM == 0)
message " "
message " "
Who.AddItem aaLaevatainDM 1
endif

message " "
message " "
Who.EquipItem aaLaevatainDM

endif

end

二刀モデルに付けるスクリプト
ScriptName aaaLaevatainOnehandDualsc

ref Who
short ExcF
float ExtTmr

begin OnAdd
set Who to GetContainer
if ( Who.IsActor != 0 )
set ExcF to 1
else
set ExcF to 0
endif
end

begin GameMode
if ( ExcF != 0 )
set ExtTmr to ExtTmr + GetSecondsPassed
if ( ExtTmr < 0.2 )
return
else
set ExtTmr to 0
endif
endif

if ((Who.GetEquipped aaLaevatainDM == 1) && Who.IsWeaponOut == 1)
message " "
message " "
Who.EquipItem aaLaevatainOnehand

elseif (Who.GetEquipped aaLaevatainOnehand == 0 && Who.GetEquipped aaLaevatainDM == 0 && Who.GetItemCount aaLaevatainDM > 0)
message " "
message " "
Who.RemoveItem aaLaevatainDM 1
endif

End



オマケ
鎌と、斧と刀ができました。
斧はnikoroshiさんのそのままお借りしてます。
ミスラは双斧じゃなかったんで、1本でいいかな。
問題は防具…。



SSは鎌です。背負った位置をもう少し下げた方がそれっぽいんですけど、あまり端っこもって振り回すのも変なんだよなー。
Scythe.jpg

あまりドーンと出しちゃうとプレイする時のwktkがなくなってしまうのでチラチラ。





 お久しぶりです。なんだか難しいスクリプトで頭がこんがらがってきますね。特に、同じアイテムを複数持っていた場合や、コンパニオンとのやり取りをした場合なんかを想定すると大変ですね。
 取り敢えずクラッシュについては、二刀モデルというのがaaLaevatainDMのことですよね。
 私は以前RemoveItemでスクリプトの動いてるアイテム自身のIDを指定して数を減らそうとしたことがあるのですがクラッシュしました。もしWho.RemoveItem aaLaevatainDM 1の箇所でクラッシュしているのならそういうことかと思います。
 RemoveMeの命令なら余計なメッセージも出ず自分を一個減らしてくれます。同じフレーム内で追加された途端にそれを減らすとクラッシュするそうですけどまあ大丈夫かな、と。ちょっと試しただけですのでもしかしたら駄目かも知れません。その場合は申し訳ないです。

 ところで、RemoveMeが有効であった場合は、オフハンド側にスクリプトをつけることなく片手剣とダミーだけのスクリプトで動かせるのではないかと考えました。上記の修整だけでうまく動いていれば特にわざわざ試す必要もないかも知れませんし、私自身が未検証ですのでとんでもない不具合を引き起こすかも知れないので(ダミーを地面に捨てた瞬間とか、ダミーを装備したコンピニオンのインベントリを開いて閉じると装備してくれないとか)、ご参考程度になさって下さい。
 全然違ってたら申し訳ありません。
 以下続きます。
【2009/02/18】 URL | 狂気太郎 #KnHW2vQ.[ 編集]
右手武器に付けるスクリプト案
ScriptName aaaAutoEquipLaevatainOH

ref Who
short ExcF
float ExtTmr

begin OnAdd

set Who to GetContainer
if ( Who.IsActor != 0 )
set ExcF to 1
else
set ExcF to 0
endif

end

begin GameMode

if ( ExcF != 0 )
set ExtTmr to ExtTmr + GetSecondsPassed
if ( ExtTmr < 0.2 )
return
else
set ExtTmr to 0
endif
endif

if Who.GetEquipped aaLaevatainOnehand == 1 && Who.IsWeaponOut == 0 && Who.GetEquipped aaLaevatainOffhand == 1
message " "
message " "
Who.UnequipItem aaLaevatainOffhand
message " "
message " "
Who.AddItem aaLaevatainDM 1
message " "
message " "
Who.EquipItem aaLaevatainDM
RemoveMe ;メッセージ消し不要
endif

end
【2009/02/18】 URL | 狂気太郎 #KnHW2vQ.[ 編集]
二刀モデルに付けるスクリプト案……ダミー武器のことと解釈
ScriptName aaaLaevatainOnehandDualsc

ref Who
short ExcF
float ExtTmr

begin OnAdd

set Who to GetContainer
if ( Who.IsActor != 0 )
set ExcF to 1
else
set ExcF to 0
endif

end

begin GameMode

if ( ExcF != 0 )
set ExtTmr to ExtTmr + GetSecondsPassed
if ( ExtTmr < 0.2 )
return
else
set ExtTmr to 0
endif
endif

if Who.GetEquipped aaLaevatainDM == 1 ;ダミーが装備されていて
if Who.IsWeaponOut == 1 ;ウエポンアウトの時
message " "
message " "
Who.AddItem aaLaevatainOnehand 1
message " "
message " "
Who.EquipItem aaLaevatainOnehand
message " "
message " "
Who.EquipItem aaLaevatainOffhand
RemoveMe ;ダミー自身を消す
elseif Who.GetItemCount aaLaevatainOffhand == 0 ;ウエポンアウトでなく、オフハンドが存在しない時。つまりダミーを装備してる時にオフハンドを捨ててしまった時。本来の片手剣に交換して再装備。
message " "
message " "
Who.AddItem aaLaevatainOnehand 1
message " "
message " "
Who.EquipItem aaLaevatainOnehand
message " "
message " "
RemoveMe
endif
else ;ダミーが装備されていない時。本来の片手剣に交換。
message " "
message " "
Who.AddItem aaLaevatainOnehand 1
RemoveMe
endif
【2009/02/18】 URL | 狂気太郎 #KnHW2vQ.[ 編集]
⇒狂気太郎様
お久しぶりです!
RemoveMe自体は特に問題なく通過できますが、
下のスクリプトで組むと、CTDが発生します。
たぶん、武装解除⇒武器追加⇒装備⇒削除の流れでクラッシュしているかもしれません。同じフレームに詰め込みすぎかもしれません?

応急策として
if Who.GetEquipped aaLaevatainDM == 0 && Who.IsWeaponOut == 0 && Who.GetItemCount aaLaevatainDM == 1)
removeme
を二刀スクリプトの最後に加えたところ、問題なく稼動しました。
MPCも双剣抜刀時にインベントリを開いて閉じても正常になりました。

装備解除時に自動削除され、捨てるのはまたクエストアイテム属性にすることで何とかなると思います。
【2009/02/19】 URL | VanillaBeans #-[ 編集]
ありゃー、そうでしたか。
理論上は完璧だ、ウヘヘッてなことを思ってましたがご迷惑をおかけしました。
【2009/02/19】 URL | 狂気太郎 #KnHW2vQ.[ 編集]
oblivionに理論は通用しないって事ですねw
さすがベゼスダクオリティ。
いえいえっ、わざわざ有難うございます。
【2009/02/19】 URL | VanillaBeans #-[ 編集]














お忍びでコメント



| HOME |


Design by Vanilla Beans.
Copyright © 2023 Vanilla's Village, All rights reserved.