OBLIVION MOD作成支援/相談スレPart6
1 :
名無しさんの野望 :
2010/10/29(金) 15:24:30 ID:qjXK1sjZ
2 :
名無しさんの野望 :2010/10/29(金) 15:24:54 ID:qjXK1sjZ
あ、スレ番間違っちゃった
3 :
名無しさんの野望 :2010/10/29(金) 23:27:09 ID:cwISep/X
スレ建て乙です。 >システムはGetSittingが「11」になってもIdleAnimationsをチェックしていない これは自分も試してみましたが、その通りでした。 11に乗馬時のアイドルを指定、12に乗馬時のアニメが指定されていますが、 乗馬アニメが終わったあとに11のアニメは再生されませんでした。仕様みたいですね。 そこで、こんな妥協案を考えました。これでそこそこいけます。 バイクに添付するスクリプト Begin OnActivate If NR500Ignition == 0 Set NR500Ignition to 1 Activate ElseIf NR500Ignition == 1 player.PickIdle <<<<<<<<<<ここ Set NR500Ignition to 2 Else Set NR500Ignition to 0 Activate EndIf End 2回目のActivateでアイドルモーションを選ばせます。 GetSitting==13で指定してあれば、これでポーズを変えてくれます。 あとは乗車アイドルモーションが、降りる時と降りた後までいつまでも ポーズが続かなければいいのですが、これは仕方ないかなと思ってます。
4 :
3 :2010/10/29(金) 23:29:58 ID:cwISep/X
すみません、Tabスペースが使えなかったみたいです。 Begin OnActivate If NR500Ignition == 0 Set NR500Ignition to 1 Activate ElseIf NR500Ignition == 1 player.PickIdle <<<<<<<<<<ここ Set NR500Ignition to 2 Else Set NR500Ignition to 0 Activate EndIf End player.PickIdleをこのスクリプトの他の場所にいれても機能しませんでした。
5 :
名無しさんの野望 :2010/10/30(土) 00:19:40 ID:1DhZztof
>>3 うーん、GetSittingの「11」はやっぱダメなのかもですね。
PickIdleの道を追求するのなら多分色々な開始/終了のタイミングの取り方はあると
思いますよ。
現在再生中のSpecialIdleの停止は「Playgroup Idle 1」で行けると思います。
6 :
3 :2010/10/30(土) 01:12:17 ID:vbBqip/+
「Playgroup Idle 1」を馬を降りる時のActivateの前後に入れてみたのですが、 なぜか何の変化もなく、乗馬アイドルポーズのままでした…。 しかも「Playgroup Idle 1」を使うとポーズの解除ができなくなってしまいます…。 OBSEはv18b4ですが、これが問題でしょうか??(エラー等はありませんでした) GetSitting==13で指定したアイドルが強すぎるみたいです…。 乗馬時のポーズを馬を降りるアニメで上書きする方法が今のところ見当たりません(汗)
7 :
名無しさんの野望 :2010/10/30(土) 08:02:33 ID:1DhZztof
>>6 申し訳無い、
>>5 は適当な書き方をしてしまいました。
「PlayGroup Idle 1」はそのkfにIdleAnimationGroupSectionで「SpecialIdle」が指定して
あると停止出来ないかもです。
上で言ったのは漠然とkfのControllerSeqence名が「SpecialIdle」でidleanimsフォルダ
に入っているkf、という意味だったのですが。説明不足ですみません。
そのkfの目的がデフォのIdleの代替で乗車姿勢全体の常時変更、という事なら特に
GroupSectionがSpecialIdleである必要は無いと思うので、指定は「WholeBody」とかで
OKだと思います。
8 :
名無しさんの野望 :2010/10/30(土) 10:11:47 ID:/e280tRx
今人口増加系のMODを作っているんですが 行き詰ってしまいまして、質問させて下さい。 From2ch LivesのようにNPC同士のPTを組ませるには どこの設定を見ればいいのでしょうか?
9 :
名無しさんの野望 :2010/10/30(土) 10:19:41 ID:mYyU8L8N
その時間のAIがfollow→ref誰々になってるかどうかだけでは? 戦闘も考えて、より繋がりを強くするなら同じfactionに入れるとか あとfollow行動のときにfollow先のNPCが消えてると CTDの原因になることもあるんで NPCを作ったり消したりしているときは 特に気をつけた方がいいかもしれません
>>9 レスありがとうございます。
followの設定でしたか・・・
おかげで完成が近づきました。
ありがとうございました。
11 :
3 :2010/10/30(土) 12:22:46 ID:vbBqip/+
>>7 Getsitting==13の待機アニメーションの指定をSpecialIdleからWholeBodyにして、
Begin GameModeで「If Player.IsRidingHorse == 0」の条件で
「Player.Playgroup Idle 1」させたところ、降り終わったところで普通のポーズに戻ってくれました。
これで馬を降りる時のモーション以外は大丈夫になりました!
ここだけは色々試していてどうにもならないので、妥協しかかっています(汗)
>>11 上のコードで実際に試してみましたけど、最後の「Else」の下に
「Player.PlayGroup Idle 1」を書けば3回目のActivateでSpecialIdleは停止しますよ。
その後馬を降りるアニメも普通に再生されます。
GameModeも使ってOKなら、乗りアニメが終わったらすぐにSpecialIdle開始、みたいな
動作にも出来ると思います。
NPCにも対応してサーキットとか作ってバイクレースとかも出来ます。多分。
13 :
3 :2010/10/30(土) 14:37:20 ID:vbBqip/+
>>12 うぉぉぉぉぉぉぉー!! おっしゃる通りできましたぁぁ!!
あの時できなかったのは、WholeBodyの設定になってなかったからかもしれません。
ありがとうございました!!!
GameModeの負荷について疑問があるのですが、
Bigin GameMode 〜 End までに書かれたスクリプトは、
ゲーム内で1フレームにつき、1回だけ走るのでしょうか?
もしそうなら、短いスクリプトならそんなに負荷にならなそうです。
AIを使って、あるフラグONで指定の場所へ移動開始…とかでサーキットになりますか??
「GetInCell」でセルに到着したかを判定できるようなので、
PlayerとNPCでどちらが先にゴールしたかがわかりそうですね!
この場合、例えばGameModeのレースに関わるスクリプトが長くなっても、
GameModeのスクリプト1行目に、フラグがOFFならGameModeはすぐに終了…
とかにすれば、負荷はほぼないのでしょうか??
14 :
3 :2010/10/30(土) 15:52:44 ID:vbBqip/+
>>13 おー、動きましたか。よかったです。
GameModeブロックは1フレームにつき1回実行されます。
スクリプトの長さはもちろん短い方が処理は早いですが、if文と単純な状態取得の
関数一つ二つ程度、全体が十数行未満程度で特に処理に時間のかかる実行関数を
毎フレーム呼んだりしていないのならそんなに気にする必要は無いと思います。
またスクリプトはSave時に中間コードにコンパイルされるのでタブやスペース、
変数等のラベル名、コメントの長さは無関係です。多分。
サーキットはどうしましょうね。
PathGridをうまいこと敷いて要所にマーカーを置き、各マーカーをLocationにした
TravelのAIパッケをNPCに付けて順次切り替えたり、マーカー自体を動かしたりすれば
NPCを周回させたり出来そうな気もするのですが。
でも実際にやってみないとどんな挙動になるかは少し謎です。
ゴールの判定はTriggerZoneで多分簡単に出来ると思います。
あと、スクリプトがどうしても長くなってしまう場合は、処理が不要な条件を先に
判定して「Return」文で早め早めに終了させると負荷削減に効果があるみたいです。
最初の一行でフラグ変数一つを判定してすぐReturnするのならその負荷は無視して
OKなレベルだと思います。
16 :
3 :2010/10/30(土) 16:49:03 ID:vbBqip/+
>>15 GameModeブロックは1フレームにつき1回実行され、短いほうが良いので、
先に実行条件で実行するか否か(GameModeブロック終了)判断させるほうがいいのですね。
「return」は、このフレームのGameModeブロックの処理を終了するということになるんですよね?
サーキット…なかなか複雑そうですね…。
周回するということは、各PathGridに着くたびに目的地を設定してある
次のAIパッケージに切り替えていく…ということになる感じですか??
なかなか大変そうですが、AIパッケージとかはいじったことがないので
これを機会に少し触れてみたいと思います!
サーキットMOD、面白いかもしれません! 作るのもプレイするのも。
17 :
3 :2010/10/30(土) 23:27:51 ID:vbBqip/+
すみません、足音を消すことができないのですが、これは仕様でしょうか? NR500は種別がHorseで、どう設定されていようと馬の足音が再生されてしまいます。 Creatureの設定画面のSoundsタブでLeft/Right Footなどの設定が ・何も設定がない場合、馬の足音がする ・何らかの設定があると、馬の足音とミックスして再生される 種別を馬とした時点で、馬の足音が強制的に再生されるような気がします。 諦めるしかないでしょうか…。
>>17 forward.kfなどのNiTextKeyExtraData内にあるEnum:Right(BackRight),Enum:Left(BackLeft)は消して試してみました?
まずはそれらの削除を試してから判断すべきかと思いますが
19 :
3 :2010/10/31(日) 00:29:47 ID:XkXO+vTE
試してみましたが、残念ながら消えてくれないみたいです…。 全ての馬の足音が消えることを覚悟で、 「TestHorseSkeleton」の足音の設定を消すしかなさそうです。 プレイヤーは馬に乗らない、NPCの馬の足音は我慢ということで…。
製作とかやったことないんで出来るかすらわからないが 無音の音を作ってそれに指定変更するじゃダメ?
21 :
3 :2010/10/31(日) 01:19:05 ID:XkXO+vTE
>>20 はい、それも試したのですが、なんとバイクの音設定がどうなっていようと、
馬の足音は絶対に再生されてしまうのです。
バイク側の音の設定は、「どの音を馬とミックスして再生しましょうか」というなんです。
とても謎な仕様だと思うのですが…。
ベースとなる馬が一匹いて、馬クラスの生物は全てその音の設定を引き継ぐ…
…と、重複をなくせるという意味では有意義ですが…自由度が…。
>>21 足音のタイミング指定って>18さん仰る通りkfのTextKeyですよ。
前進のkfはforward.kf、fastforward.kfの二つあります。もう一度確認を。
結論を急ぐ前にまず予断を捨て、自分の確認手順自体の確認を。
23 :
3 :2010/10/31(日) 12:12:33 ID:XkXO+vTE
forward.kf、fastforward.kf、backward.kf、turnleft.kf、turnright.kf のEnum:Right(BackRight),Enum:Left(BackLeft)はすべて消しましたが、ダメみたいです。 start、end、Enum: RiderSoft、Enum: RiderLoud これらは消さずにいいんですよね??
>>23 TextKeyを消したのなら音は消えますよ。今無音で走ってますし。
変更する前のkfをバックアップのつもりで例えば「fastforwardBak.kf」みたいに
拡張子を「kf」のままファイル名を変えただけで同じフォルダに入れてたりしてません?
それをやるとシステムはそのkfも読み込みます。
なのでkfのバックアップを同じフォルダ内で取るなら「fastforward.kf.bak」みたいに
拡張子を別物に。
そうでないとしたらよく分からんです。
25 :
3 :2010/10/31(日) 17:45:33 ID:XkXO+vTE
もともと「forward.kf.ori」といったようにバックアップしてましたが、 これら余計な物を全てどかしてみてもダメでした…。なんでだろう…。 根本である「TestHorseSkeleton」の足音から消すというのは強攻策だと思うので もう少し様子を見てみたいと思います。エンジン音で多少は紛れてるので…。
以下のような(簡略化していますが)処理をQuestScriptで作成しました。 キー**を押すと選択肢が表示され、それによって処理が進むものです。 予定通り、キー**を押すとMessageBoxExが表示されるのですが、 どちらの選択肢を押しても必ずbuttonに-1が代入され、 "none of buttons are pressed"に行ってしまいます。助けてください。 short state Begin GameMode if ( onKeyDown ** && state == 0 ) messageBoxEx "選択肢一覧|%n|%n|中止" a, b set state to 1 elseif ( state == 1 ) set button to getButtonPressed if ( button == -1 ) set state to 0 message "none of buttons are pressed" return elseif ( button == 0 ) set state to 0 message "2" elseif ( button == 1 ) set state to 0 message "2" endif endif End MessageBoxとGetButtonPressedが同じスクリプト内にないと-1を返しつづけるらしい話は知っています。 この場合は同じスクリプトに書いているので該当しないはずなんですが… 他に-1が返され続ける条件ってどんなものがあるんでしょう?
>>26 次フレームで押されたボタン番号が確実に返ってくるとは限らないよ
MessageBoxを出した後はGetButtonPressedの値が0以上になるまで監視を続けて
0以上になった時に押されたボタン番号として解釈すればOK
>>26 第三者からみると、「予定通り」というのが、どういう予定かわからないよ〜。
デバッグを肩代わりする場所ではないので、期待通りに動かないなら、もうちょっと調べ方が足りない気がするよ。
とりあえず、以下を試して、整理してから。
1.messageの表示内容を全部別のものにする。(どのメッセージが呼ばれたか明確にする目的)
2.各分岐後にDebugPrintなどの出力を仕込んで、どの順番で実行されているかを確認する。
(脳内の予想の動きを信じない。実際の動きを追うようにする)
※GetButtonPressedが本当に-1を返し続けてるのか、きっと確認せず脳内でそう思ってるだけじゃない?変数「button、state」等を出力してみるべし。
それでも解決しないようなら、再度質問してみるといいかも。
そのときは「こういう順番でmessageが表示されてほしい(予定)」のに「こういう順番でmessageが表示されてしまう(結果)」をちゃんと書く。
※
>>26 の書き方では、予定も結果も、どうしたいのか、どうなってるのか、が読み取れない。
>>27 な…なんですと!?
ちょっと確実になるように書き直してみます。
>>28 何もかも説明不足で申し訳ありません。
書いたのは処理の枠にあたる部分だけで、実際には色々と代入や処理が入っており、
message、printCなどでどこまで進んでるか段階を追っています。
GetButtonPressedをbuttonに代入させて、
コンソールに出力させ、確認してみると必ず-1が入っていました。
で、button == 0かbutton == 1になっていれば
端折った部分でそれなりの分岐に行くように作っていました。
それすらなくbutton == -1だった場合の処理ばかり起きていたので、
処理そのものの部分ではなく、MessageBoxExとGetButtonPressedの値の受け渡しで
問題が生じるような構造になっているのか?と思った次第です。
それをひとまとめに書いて、「GetButtonPressedで-1ばかり返ってくる」という表現になりました。
アドバイスに従い、値がbutton > -1であることが確実になってから
分岐に入るように書き直してみます。
ありがとうございました。
すみません初歩的な質問かもしれませんが ある本が既読かどうかを調べるにはどうすればいいんでしょうか?
>>25 うーん、なんででしょうね。
確認時にゲームの終了→再起動は当然していますよね。
以前ここでゲーム実行中にkfを書き換えて変更を手早く確認する小技の話が出ましたが
あれってゲーム実行時に必要に応じてファイル読み込みをするIdleAnimationsで指定
されるkfの話です。
アクターに直接指定されるkfに関しては多分事情が違うのでその辺も。
で、なんかこのまま苦労し続けるよりは素直にSkeletonとkfを作り直した方が良さそう
な気がするのですが。
一連の問題って馬を流用している事に全て起因している訳ですし。
Skeletonが自前なら普通にBlenderでkfを扱えるので、例えばウィリーとかマックス
ターンみたいなSpecialIdleがすんなりといくらでも作れたりしますよ。
きちんと作れば車輪を回転させたりハンドルを切ったりも多分。
なんか大変そうで取っ付きにくいとは思いますけど。
でもNifSkopeの経験が多少あってBlenderでヒトのポーズとか作ったことがあるのなら
操作手順的には難しくは無いです。
そのバイクだったらSkeletonは単純でボーン数個で済みますし、死なないのなら
RigidBodyのコリジョン指定は不要です。
kfは多分19個で済みます。殆んどがバイク自体は静止しているだけです。
また、有り物流用で泥縄的に限定的な小技だけでの対策に終始するよりは、基本部分に
手を付けて全体を整理、同時に系統立った知識を手に入れた方が次に繋がる気も。
余計なお世話かもですが。
もしその辺の検討をする上で何か必要でしたらまた。
MessageBoxとGetButtonPressedとの関係って分かりにくいですよね。 まず、MessageBoxは「入力待ち」ではないです。 MessageBoxが表示された後もスクリプトは動き続けます。 MessageBoxが表示されるとMenuModeになり、ボタンが押されるとMessageBoxは消えて GameModeに復帰します。 またGetButtonPressedはボタンが押されるまで「-1」を返し、押されると「0」以上の値を 返します。 で、ここで厄介なのは、GameModeに復帰した直後にGetButtonPressedが必ずしも0以上 をすぐに返す訳では無い、という点です。 押されたボタンがGetButtonPressedに反映するのに遅延する可能性が常時あります。 なのでMessageBoxの呼出し後に押されたボタンの種類を判定するのなら、GameModeで 毎フレームGetButtonPressedで「-1」以外の値が返って来るまで監視する必要が。
あれ、「GetButtonPressedに反映が遅延する」と言ってしまうと少し違うかもですね。 MessageBoxは実行するとすぐに表示される訳では無く、現在のスクリプトが全部終了 してからMenuModeに自動的に切り替わりそこで初めて表示される。 なのでスクリプト上でMessageBox実行の直後に一度だけGetButtonPressedを判定しても ボタン押下の結果は得られない。 MessageBoxを実行した後は、GameModeでGetButtonPressedに「-1」以外の値が返るまで 繰り返し判定する必要がある。 と言った方がいいんですかね。 いずれにしろMessageBoxを実行したら、GetButtonPressedで「-1」以外の値が来るまで ずっと判定して待っていればそのうちボタンの結果は返って来るよ、て事です。
34 :
3 :2010/11/01(月) 11:11:32 ID:vsEn4FqF
>>31 はい、ゲームは再起動しています。
IdleAnimationsは使われる寸前にファイルが読み込まれるのですか。
ポーズMODで調整するときにいいですね!
おおー、バイクを使ったエクストリームができるのなら最高ですね!!
>車輪を回転させたりハンドルを切ったり
これができたら最高です。目標は(高く)ここにしたいと思います。
誤魔化しで何とか使えるものができて一段落しているので、
kfファイルの作成に挑戦してみようと思います。
装備品を作成中なのですが、エクスポートするときに 「weight設定されてない頂点があるぞゴルァ!!設定できてない所は黄色で選択してやるから確認しやがれ」 と言うような意味のエラーが出てきます。 ですが、どの頂点を見ても選択された箇所はありませんでした。 Zキーで確認しても同様です。 vertex groupsで全てのBip01〜を選びSelectを押してみましたが、 weight設定されてない頂点は見つかりませんでした。 bone weight copyする時はAで全選択してるから選択し忘れということはないはずですが・・・。 いったいどうすれば良いのでしょうか?
BPにAssign
失礼します、どなたか助力をお願いします。 NPCにエンチャ武器を持たせて NPCのステータスを参照して攻撃力を弄ろうとしているのですが 上手くいきません。 エンチャントのScriptEffectがtouchのみでNPCのステータスが参照できず困っています。 参照させる手はないでしょうか?
ヘルプとか日本語wikiのチュートリアルの次ってどのあたりを参考にするのが常道なの?
>>37 武器のエンチャだとOnHitでしか、しかも攻撃対象にしか発動しないんじゃないかな
武器にOnEquipスタートのobject scriptはっつけたほうがいいんじゃないかな
>>38 作りたい物に近いMODをCS WikiとOBSE Document片手にバラすのが一番
>>30 多分、vanillaやobseでそれを判定する機能はないです
なので、自分で判定機能を作る必要があります
読んだ本のIDを取得して、既読リスト(特定チェストやobse配列)に記憶しておき、判定が必要ならこれを検索
という処理でできると思います
読んだ本の取得は、menumode 1026(本モード)で、GetActiveMenuObjectでいけると思います
過去スレで同じ話題があって、判定modも挙げられてたと思うので、検索してみるといいかも
>>39 レス感謝です。
OnHitはアクターに添付しないと効果を発揮しないと記憶しています。
やはりNPCは不可能なんですかねぇ。
質問なんですが、マスターになるespを一度指定したら外れないようにするにはどうすればいいんでしょうか? あるespをマスターにするアドオンを製作しようとしたのですが、whryやgeckoで指定してもCSで開くとマスター指定が外れてしまいます。 試しに一般公開されてる、同様にespをマスターとするMODをCSで開いてみて保存したところマスター指定は外れませんでした。 whryやgecko以外でマスター指定が解除されないように指定する方法はあるのでしょうか?
>39 ありがとうございます ただまだ基本的な仕組みが掴みきれてない感じなんで 間にもう一ステップ挟む感じのところはありませんかね 英語wikiのビギナーズガイド訳しながら読んでるんですが時間がかかりすぎて
>>35 1.bone→shift押しながらmeshで選択し、
ctrl+pでarmature→creat from bone heat、
vertex groupsを全部deleteして、もう一度weightコピーしてみる
2.だめならコピー元のmeshを変えてみる
これで大抵直るハズです
↑失礼 mesh→shift押しながらboneです
>>42 whryというのはわかりませんが(WyreBashのこと?)、
CSでは espのマスター指定をするespを作成するっていうことを想定して作られていないようなので
CSで saveしてマスター指定が外れるのを防ぐのは不可です。
勿論 esmにマスター指定は名前の通りですのでマスター指定して Save出来ます。
r_basilico さんという方が [マスターの指定、ファイルの更新日時(Modの並び順)] を復元してくれる
ソフトウェアを公開してくれているのでこれが便利です。CS起動する前にこれを起動しておくだけです。
ちなみに自分はWin7 64bitですが問題なく使えてます。
RestoreESP v1.1
http://shy.jsphr.net/upload/img/ups18286.7z
>>46 どうもです。whryはWyreBashの間違いでした。
他の一般公開されているespをマスターとするMODが、CSで開いて保存してもマスター指定が外れなかったので、
(外れてしまう)自分が作ったものは大丈夫か?と思ってたんです。
調べていくと、どうやらEsmify Mastersによってマスター元espをesmとして扱うことでそうしていたようです。
Esmify MastersがされていないMODで試したところ、普通にマスター外れたので,
他の方も公開している時は普通にWyreBash等で指定しているだけなんですね。
WyreBashの知識が足りず良くわからない質問をしてしまい申し訳ないです。
細かいけど、WhryでもWyreでもなくて、Wryeな
>>254 罠というか、結構丁寧に書いてあるんだよReadMeには
でも、書いてあるだけの事をしただけじゃ導入できない
ReadMeの手順以外に、Wyre Bashについての基本知識があれば、当然やってるだろう事をやらないといけない
しとしん版って基本知識が無くてもReadMeの通りに辿って行けば導入できるってのが基本スタンスだから、
このMODを入れるに当たって、「自分の知識が足りないせいで、当然やってるだろう手順を踏んでない」
とはなかなか思い至らない
「なんでReadMeの通りにしたのにうまくいかないんだろう?」って3日悩む事になる
52 :
3 :2010/11/03(水) 17:34:56 ID:5/9b1T+4
>>51 おおぉぉぉー!!! あなたは神様ですかぁぁー!!!
ゲーム上で確認してみました! 見事に動いてます!
Readme通り水陸両用になってたのは笑いました(笑)
とてつもなくありがたいのですが、まだ自分の知識がなさすぎて
どうすればいいかわからない状態です。
かなり初歩的なところから既にわかりません…。
CS Wikiでアニメーションを調べているのですが、ペースが遅い…。
なのでとても時間がかかると思いますが、
是非ともアップしていただいたファイルを参考にして取り組んでいきたいと思います。
どうしてもわからないところが出たら、またお答え頂ければ幸いですm(_ _)m
おー、動きましたか。 水陸両用っていいですよね。それが楽しくて今水中ばかり走ってます。 MOD制作は自分のペースで行くのがやっぱ一番だと思います。 こちらもレスはいつものんびりですし。なんか謎な事がありましたらまた。
>>44 お礼がおそくなりましたが、直りました!
どうもありがとうございます!
>>51 のtxtで一番重要な部分を間違えてました。最後の方55行目です。
(誤)「TargetType」を必ず「Bip02」に変更を
(正)「TargetName」を必ず「Bip02」に変更を
ここが本当に一番のキモだったんですけど。申し訳無い。
もうね、なんでそこを間違えますか。
56 :
3 :2010/11/04(木) 09:59:03 ID:/1b8qE1a
>>55 まだその段階まで全然到達してないですが、その時は気をつけます!
wktkしつつ芸能山城組のBGM用意してバイクMOD待ってる
58 :
3 :2010/11/04(木) 18:46:50 ID:/1b8qE1a
>>57 マジですか!? バイクMODを期待している方がいらっしゃったなんて…。
芸能山城組って初めて知りましたけど、どう考えてもCivのほうが向いて(ry
59 :
名無しさんの野望 :2010/11/04(木) 19:04:42 ID:PvYweUq5
最近modを勉強してみようかと思い立ち、既存のmodをいじったりしているものです。 いろいろ弄れるようにはなってきたのですが、horadric cube modにお手上げ状態です。 宝石追加時のエンチャ値を変えてみようかと思い、CSで開いてみると、 SigilStoneのところにそれらしいデータがあるのですが、数値を変えてもゲームに反映されません。 アドバイスをお願いします。 modの道は深く険しいですね…。
>>59 Horadric Cube に限ったことではありませんが、
クリーンインストールしないとスクリプトが更新されない Mod があります。
Horadric Cube は、日本語化したときスクリプトの文字列が更新されず
手を加えても以前の英語の文字列のままだったことがあります。
それが影響しているかもしれませんよ。
>>59 DIABLOのhoradric cubeなら知ってるけど、MODは使ったことないから、ちょっとイメージわかないけど、合成できるやつだよね。
なんとなく想像だけど・・・。
スクリプトで制御されていたりすると、アイテムを一旦消してから、新しく生成して初めて反映されることがあるよ。
もしくはSaveデータに保存されているか、かなあ。
以下の手順を試してみたらどうかな?
(あらかじめ、新規で保存しなおしてからやると確認だけできると思う。あと、持ち物のMODのアイテム番号をメモっておく)
1.MODをはずして、Saveデータをロードする。
2.MODのアイテムが消えてることを確認してSave。終了。
3.MOD組み込んでロード。メモしたアイテム番号からadditemする。
「バイク」と聞くと油断してると頭の中で「Bone to Be Wild」が鳴る私はどうしたら いいですか。 上の例って自転車的なモノにも応用出来たりしますよ。 ペダルと脚を動かしたり。立ち漕ぎさせたり。 あと船にも。 馬同様swim〜.kfを用意して、本来馬には無いswimfastforward.kfを追加、陸上用各kf の動き量を充分小さく(1.0とか2.0とか。0は多分問題有り)すると、水中では普通に 高速で動いて陸に上がろうとすると急に進めなくなる「船」的動きがスクリプトとか無し でそのまま出来たりします。 水上バイクとかスワンボートとかも多分。
うっかり上げてしまっってすみません。
>>59 様、
>>60 様素早い回答ありがとうございます。
数値を書き換える → modはずす → 起動してsave → mod入れなおして起動
でも結果変わらずでした。
CSで開いて、Item\SigilStone以下の"hc(宝石名)"の数値をいじってみたんですが、
そもそも根本的に書き換えてるところが違うんだろうか。
CSで数値をいじるところから始めて、wiki見ながらItemの色変えてみたりして、
もう少し複雑そうなことをやってみようと、HoradoricCubeに手を出してみたらこの有様。
お気入りの帽子に宝石埋め込めるようになるのはいつのことやら。
もそっとがんばってみようと思います。
アドバイスくれた方ありがとう。
64 :
3 :2010/11/05(金) 13:37:48 ID:huwW6cAs
>>62 自転車的なモノ(ペダルと脚を動かしたり。立ち漕ぎさせたり)+ 船
=>あひるさんボートなわけですね。わかります。
水上ではあひるさんボート、陸上ではあひるさんバイクなんて素敵過ぎる!
現在、
・乗り手のポーズのblendファイル開く
・そこにNR500.nifをインポート
・人車一体、nifファイルとidle.kfファイルとしてエクスポート
・ゲーム上で表示されない
なんてアホなことやってます。
BlenderからExportしたファイルはNifskopeで加工しないと使えないんですよね。
いえ、人車合体させてる時点で、それが使えるかどうかすらわからないですが…。(無知
バイクを自分で作るのは大変すぎるので流用したいのですが、できますか??
後から何らかの処理で、ハンドルを切らせたりホイールを回すことはできるのかな…?
直感的には、Blenderでハンドルの位置を動かしたアニメーションのkfファイルでできそうな気が…。
なんだか全てを質問してやってる感じだね
66 :
3 :2010/11/05(金) 14:09:19 ID:huwW6cAs
>>65 その通りですね。しばらく山にこもってきます(゚◇゚)ゞ
別に聞いてもらってOKですよ。
むしろ些細な事に躓いて諦めたり、逆に単にマニュアル類を見ただけで基本を誤解した
まま作った謎構造のMODを公開して世界中のユーザーのゲーム動作を不安定にする方が
お互いずっと不幸な気が。
>>64 まず先に乗り物の完全水陸両用化の細かな話ですけど。
多分見た目にいいかんじにするには喫水線位置が問題に。
水中でのクリーチャーの体の沈み具合ってコリジョン形状によって自動的に決定され
ます。多分。
調整はskeleton.nifのBSBound→Center/Dimentionsの変更である程度は可能です。
SS上はサンプルのまま、下は試験的にそのZをそれぞれ「30」にしてあります。
http://shy.jsphr.net/upload/img/ups19828.jpg ただ、クリーチャー生存時のコリジョンって完全な任意形状に出来る訳ではないので
指定には限界はあるとは思いますが。
続く)
続き) 次にその仰る手順の話ですけど、 それって何が目的でどのファイルを開いて最終的にどのkfをExportしているかという 基本的な前提が分かんないとなんとも主旨自体が謎ですよ。 乗馬kfを作る手順の概要は雰囲気的にこれで大体合ってるか、て事ですか? だとすると、その手順通りという事ならバイクのSkeletonをImportする過程が明らかに 無いので、乗り物kfとして意味あるkfはExportされないと思います。 NifSkopeでの加工とかの話以前に。またnifって何の為にExportしてるんでしょう。 >流用したいのですが、できますか?? 流用ってそのNR500.nifの事だと思いますけど、技法上の意味での流用は別にいくら でも出来ると思います。 バイクみたいに各部が固定の形状なら、Skeletonを適切に作って車体各部を別nifに して該当BoneへのAttachで指定したり、または普通にBoneアニメとしてWeightを付ける なりすれば通常のBlenderのアニメ操作でkfを作ってハンドルも車輪も動かせます。 でもそのNR500の場合についてだけの具体手順、というのはちょっとご勘弁を。 それって私が作ったMODじゃないので結果に責任が持てないので。 そのMOD個別ではない一般的な話ならいくらでもOKですけど。 で、人が乗れるクリーチャーって色々な要素が関係しているですよ。 その要素それぞれの把握を抜きに先を急いでも多分状況は変わらない気が。 人を乗せる話や車輪を動かす話はとりあえず置いといて、まずバイク単体で クリーチャーとして正常に動かすにはどうするか、を把握する事を今は第一目的に するのがいいと思うんですけど。その辺どうでしょね。
自分で調べるのも大切だけど、自力に拘りすぎてスパゲッティになっちゃうってのはよくあるしな
playable属性を外したアイテムをPCが入手する際、左上に「〜〜を手に入れました」と 表示がされるようになってしまったのですが、これっていったい何が原因なんでしょうか……。 playable属性は確かに外れていて、入手した、という表示が出てもインベントリには何も(見かけ上は)増えていません。 もちろんNPCに取得させても見えないままです。 ゲームに支障はないのですが、アイテムにアイコンを設定していないため、四角い紫色のアイコンが表示されてしまうので見栄えが悪く……。 数日前まではこんな事はなかったと思うので恐らく何かいじってはいけない部分をいじってしまったのでしょうが、思い当たる節がなくて……。 よろしければ知恵をお貸しください。
>>70 スクリプトからaddItemしてるんですよね?
playale属性のあるなし関係なく、単にaddItemすればメッセージ出ます
OBSEのaddItemNSを使うか、
Message " "を2回、addItemする前に書くとメッセージ出ない
>>70 たぶん属性は関係ないと思う。
AddItemNSをAddItemにしたとかじゃないかな?
これの違い把握してるかな?
AddItemNS:アイテムをこっそり渡す。「〜〜を手に入れました」が出ない。
AddItem:プレイヤーに通知して渡す。「〜〜を手に入れました」が出る。
ほかにも後ろにNSがつく関数は、通知がないものだよ。(これはOBSEの関数ね)
>>71 >>72 まさしくお二方のご指摘の通りでした。
AdditemNSに書き直したところ、表示は出なくなりました。
以前は出なかった、というのは単に自分が見落としていただけだったようです。
不勉強が恥ずかしい……。
お二方とも、ご指導ありがとうございました!!
74 :
3 :2010/11/07(日) 15:39:03 ID:YCLBerwu
>>67 バイクMODは
・(特殊な設定が必要な)乗り物である
・バイクグラフィックの流用+各部を動かすのに、色々と加工が必要
と、無知な自分にはとんでもなく敷居が高すぎるですので、
完成までには数カ月〜数年かかりそうですね…(汗)
かなり広く深い知識が必要そうなので、じーーーっくりと腰を据えて取り組んでいきたいと思います…。
ひとつ質問なのですが、このMODはバイクのグラフィックをお借りしています。
TESNでオリジナルMODのアップロード者さんに連絡をとっているのですが、返事がありません。
この場合、グラフィックを借りたMODを公開することは不可能となるのでしょうか?(盗作?)
>>74 TESNEXUSのルールで言うと駄目でしょうね。
作者が明に許可を出している場合を除いては盗作扱いです。
私なら公開せずに個人の趣味で使うか、TESNEXUSに公開するつもりのものは一から作ります。
TESNEXUSではなく例えば2chなどで公開するのであれば、ここは全くの無法地帯なので個人の判断でしょう。
>>74 nifの借用については特に何かを示唆するつもりは無いです。
各コミュニティのローカルルールで。なのでその話はいいとして。
で、確かに理屈の把握をまずお薦めはしたのですが、それには実践も当然伴う訳で、
もしその過程でヒトと乗り物でのツール操作手順の違いみたいな本質的で無い部分で
詰まって「敷居が高い」としているならそれはそれでやはり不幸な気が。
なのでご参考までに細かな手順的な話を。また長くなりますが。
>・(特殊な設定が必要な)乗り物である
ヒトポーズを作った事はあるんですよね?
乗り物kfを作るのは原理的にはヒトポーズ作りと全く同じです。
使うSkeletonが違うだけでヒトも単体クリーチャーも乗り物も全部やる事は同じです。
自作乗り物にはヒトポーズ作成パックみたいに初期状態を一発でLoad出来るblendが
用意されている訳では無いので恐らく手順的に難しそうな印象はあるかもですが。
また、失礼ですけど、恐らくそういった特定のヒトポーズ作りの手順に捕らわれ
すぎて、別な事をしようにも何をしていいのかサッパリ、という状況な気も。
上のサンプルを例にするなら、kfを作るのは単にskeletonEdit.nifをImport→ヒト同様
の方法でキーを打って→kfをExport→NifSkopeで諸指定を相当するバニラ馬kfと見比べ
て同じに書き換えれば原則それでOKです。
または同梱のkfをSkeletonと一緒にImportすればそのkfの改造が出来ます。
またヒト体nifや車体nifのImportをするのはBoneの具合を確認する操作上の利便の為で
それ自体はkf作成の本質とは関係無いです。
あと初期状態でblend形式でSaveすれば恐らく
>>74 さんがヒトのポーズ作成手順で多分
いつも使っているのと同様な初期状態blendになります。
続き)
>・バイクグラフィックの流用+各部を動かすのに、色々と加工が必要
これもNifSkopeを使った事はあるんですよね?
Skeletonを作る、てのはNifSkopeでskeleton.nifを書き換える、て事です。
車体nifの改造も同様です。
(車体はBlenderでメッシュのWeightで、という方法もありますがそれは今は置い
といて。装備とか作った事があるのでしたらそっちの方が分かり易いかもですが)
例えば上のサンプルの後輪を回すのなら、skeleton.nifのBip01PelvisBの子供として
NiNode(Bone)を追加、適当な名前を付け(「Bip01 RWheelB」とか)その位置を車軸位置に
合わせ、車体nifの後輪部分だけを別nifにし、中心座標を0にしてStringExtraDataでの
Attach位置指定をその追加したBone名にし、CSでバイククリーチャーの体パーツの一つ
として指定すれば準備はOKです。
これってバニラ馬の眼球の構造と同じ事なのでそれを参考に。
下準備が出来たらskeletonEdit.nifにも同じBoneの追加をして該当kfにそのBoneが回る
動きを付ければゲームで車輪が回ります。
同様にフロントフォーク部分も作ってその子供として前輪を付ければ親子構造で
ハンドルを切れば前輪も曲がります。
で、いずれの手順も上のサンプルについての話であれば具体的に答えられるので、
その場合はいくらでも具体手順を聞いてもらってOKですよ。
そのNR500をもし借用するのなら多分手順は同じで行けると思いますし。
あと上のサンプルって失礼ですけど特に
>>74 さん専用という訳ではないので、
どなたが使ってくれても質問してくれてもOKです。
78 :
3 :2010/11/07(日) 22:41:46 ID:YCLBerwu
>>75 自分が作ったMODが勝手に借用されてたら嫌な気分になりますよね…。
連絡がとれない以上、致し方ないです。
仮に2chのような限られたエリアで公開するとしても
ちょっとやっぱり引っかかるものがあります。。。
プラス思考に良い経験だと思って…バイクも作ってみます。。。
>>76 いつもながら、実に鋭いご指摘ばかりでして…(汗)
自分から見ると、とてつもなく凄い人・神様って感じに見えます。。。
>で、いずれの手順も上のサンプルについての話であれば具体的に答えられるので、
>その場合はいくらでも具体手順を聞いてもらってOKですよ。
とても助かる一方、他の利用者さんからは
「おいおい、いつまで質問しまくる気だよ…」みたいに見られて焦りますので、
できるだけ絞って質問させていただくよう気をつけます…。
79 :
3 :2010/11/07(日) 23:00:35 ID:YCLBerwu
>>76 早速の質問(しかも初歩的)で申し訳ないのですが、
上のMODのskeletonEdit.nifをImportするとバイクが表示されず、
人間も基本骨格だけのワイヤーフレームになってしまいます。
皮膚をつけるためには、base_female.nif(女性のNifファイル)のようなものから
NiTriStripsやNiTriStripsDataをCopy Branchして、
skeletonEdit.nifの各部位に貼り付けを繰り返すしかないのでしょうか?
それとも、皆様はあのワイヤーフレームで作業を続けていますか??
人間を表示したあと、バイクはMarkerBike.nifをインポートして、
それをBlendファイルとして保存すれば初期状態完成でしょうか…??
NifSkopeは浅く限定的な使い方しかしたことがないため、
ご説明いただいた手順は頭で想像はできるのですが、自信は全くないため
バニラの馬とかと見比べて色々試してみたいと思います。
質問ばかりで重ね重ね申し訳ないです…。
>>79 実はこちらも人馬一体Skeletonで乗馬kfを一発で作ったのは初めてなので、質問の
検証過程で手法自体の問題が見つかる可能性もあったりするですよ。
そいういう意味でも色々聞いてもらった方が有り難かったりします。
なのでご遠慮無く。
で、skeletonEdit.nifってボーンだけのnifなのでワイヤーフレームっぽくて正解
です。その状態にヒト体nifやバイクnifをImportすればヒトポーズ作成初期状態blend
みたいな絵面になります。
各nifのImportはそのSkeletonオブジェを選択状態にして
「ImportGeometryOnly+ParetnToSelectedArmature」ボタンをONで。
但し、そのSkeletonの場合ヒトのBip01位置がActorParentの位置だけずれているので
体nifの位置がヒトSkeletonとずれます。補正はBlender上で手動で体オブジェ位置の
LocZを+1.0に。その話は同梱のtxtに。
またMarkerBike.nifはAttach位置がBip01PelvisBで、SceneRootノードにその座標補正
量が書いてあるので、Importすると多分Skeleton全体の位置が下に-5ぐらい沈みます。
その補正はBlender上で「SceneRoot」オブジェ(ヒト足元の下)のzを0に。
体nifと全体のズレが無くなったらその状態でSaveすればいわゆる「初期状態blend」に
なると思います。
でもそのままだとバイクの絵はBip02を動かしても追従しないので、Blender上では Weightを付けといた方がいいかもですね。 バイク各部オブジェへのWeithtの付け方は、概念的にはバイク各オブジェにSkeleton オブジェをParent指定し、VertexGroupの「Bip01 SpineB」に全頂点のWeightを1.0に Assignすればいいんですけど、操作手順的にはちょっと説明がややこしいので、そこ だけはBlender操作関係を調べてもらう、という事でここはひとつ。 大元のBip02ではなくて特に「Bip01SpineB」にする理由は、今後アニメでバイク本体を 宙に浮かせたりウィリーさせたりする時の為です。
OBMMのCreateで、Zip形式にしてomodファイル作ると、ReadmeとScriptの日本語が文字化けするね・・・。 内部で使ってるZipライブラリが日本語対応してないっぽい。 素直に7-zip形式にしたほうがよさそう。(サイズもぜんぜん7-zipのほうが小さくなるし)
凄い基礎的な質問なのですが CS等で、leveled creatureリスト内にドラッグして放りこめるNPCと 放り込めないNPCがいるのですが 両者の違い、分かれ目はどの設定になるのでしょうか? ご教示いただけると幸いです
>>83 そのアクターの「NoLowLevelProcessing」オプションがOFFだとLeveledCreatureの
リストに加える事は出来ないです。多分それでは。
で、その指定って単なるおまじない的指定では無く、それによるアクターの挙動の
違いに加えて、LeveledListで出現するアクターと、CSで直接初期配置したアクター
ではシステムの内部的に大きな違いがあったりします。
そのアクターの行動範囲がそのセル内限定で全然重要でないキャラならLeveledListで
別にOKなのですが、ロードドアを通って別セルへの移動が必要だったり、そのアクター
のRefを使って何か細かな事をする予定がある場合は、LeveledListを使う事自体が
適切かを含めて要検討だったりすると思います。
>>84 的確なご回答と、ご指摘をいただき感謝します
ありがとうございました
質問させていただきます Reanimateの範囲魔法を作りたいのですが、Reanimateの効果自体 範囲が設定できません。 スプリクトエフェクトで同じ効果を作りたいのですが いいやり方をご教授願えないでしょうか?
○ スクリプトエフェクト × スプリクトエフェクト
>>86 単に一定時間生き返りさえすればOKで、見た目効果もある適度それっぽければOKなら、
MagicEffectScriptのScriptEffedtStartでResurrect、適当なEffectShaderをPlayMagic
ShaderVisualsしてScriptEffectFinishでStopMagicShaderVisualsしてKillすればOK
だと思うんですけど。
でもそういう事ではないとすると少し話がややこしくなると思います。
もしScriptEffectでReanimateと全く同等な見た目と効果を自前で一から作れるか、と
いう事だと難しいかもです。
Havokで体をズルズル持ち上げたり、目の色を変えたりは多分現状Scriptでは出来ない
ですし。
また実際のCast動作無しでバニラやOBSEの関数呼び出しだけでReanimateがCastされた
事にして等価な挙動をさせる事は出来るか、というとそれも多分出来ない気が。
なのでReanimateそのものの範囲魔法化がどうしても必要、という事なら、透明な
アクターを用意してScriptEffectのArea内の各死体に順次MoveTo→Reanimateを実際に
Castさせる、みたいな手しかやはり無いかもです。
なんか冗長な方法ですが。でも要領良く作ればスクリプト自体は多分単純で済みそう
な気も。
その際のReanimate独特の制限や不特定多数の死体に一人のアクターで順次Castさせる
方法とかその辺の細かな話が必要でしたらまた聞いて下さい。
ダンジョン作成で質問させてください。 Kvatch攻城戦の改変ダンジョンを作りたいと思っています。 ただ、実際のcellを弄るとストーリー展開に支障が出る為、cellを複製できればと考えています。 ChapelやCastle等、World SpaceがInteriorsの物はDuplicate Cellで複製できるのですが World SpaceがKvatchEastにあるKvatchEastArena等はDuplicate Cellしても複製できず困っております。 この様なCellを複製する方法はありますでしょうか。
別のワールドスペースを作ってオブジェクトはコピーするしかないかなぁ
ワールドスペースごと丸ごとコピーできたような?
それで親スペースを別世界にしておけば、尚安全かも
今はちょっとCS上の確認がとれませんが
http://shy.jsphr.net/upload/img/ups16426.zip これは以前にMMMのアドオンとして作った
バニラの街をコピーした戦場MODです
(高台へのMOB配置についてご教示下さった方、その節はありがとうございました)
自分用に作ったものなので、遊ぶには必要スペックがきつめですが、何かのご参考になれば
ワールドスペースごとコピーすると espがとんでもない大きさになってムリだと思う。 そもそも途中で高確率でエラー。 なので 親をTamrielにして オブジェクト(街とかまるごと)コピーして移すしかないとおもいまう
93 :
89 :2010/11/11(木) 19:20:55 ID:9pQO9uxs
>>90 〜92
アドバイスありがとうございます。ワールドスペース自体を弄れるとは知りませんでした。
コピーで済むのか、新規で作ってコピーしなければならないのか、試してみないと分かりませんが
何とか解決できそうです。ありがとうございました。
>>92 tamriel全体をコピーするかのような誤解を招いてしまったでしょうか?
ワールドスペースといっても
>>89 氏や私の用途であれば、範囲は「kvatchworld」など街とその周辺スペースなので
複製するとサイズが数百kbは増すかもしれませんが、おそらくそのぐらいです
いらないオブジェクトをどんどん丁寧に削除していけばもっと節約できるかもしれません
あまり知識のない人間ですが、個人的には複製した街worldはtamrielとは
別の親ワールド下においた方が使い勝手がいいのではないかと思っています
KvatchEast程度なら丸ごとDuplicateでいけるんじゃないですかね。
>>89 WorldSpaceってInteriorCellと違って複数のCellを持っていて、その中の一つだけを
複製する事は出来ないです。
WorldSpaceとして出来る事は、丸ごと複製するか、そのWorldSpaceを親にしてその中の
一定領域を新規の子供WorldSpaceとして作るかのどちらかです。
でも子供WorldSpaceとは言ってもCell地表形状だけを親から継承しただけの全く別物の
独立したWorldSpaceなので、Cell境界が解放した領域を子供にしても親との間で自動的
に行き来出来たりする訳では無いです。
子供WorldSpaceを作る場合は例えばバニラの各町みたいに塀等で囲まれていて必ず門を
介して出入りする様な、周囲が閉じた地形構造である必要がまずあります。
で、仰るその場合、CSのWorld→WorldSpaceの左リストの「KvatchEast」を右クリで
Duplicateするのが一番ご希望に近い気が。
でもCellを複製する事とストーリー展開を妨げない事とはそもそも関係は無いですよ。
複製したKvatchEastにドアを繋ぎ直してもクエ進行に支障が無いか、各部仕掛けが
うまく動くかは関連各クエとDuplicateした各オブジェの状態を良く見てみないと。
KavatchEastの場所に依存する重要なクエってなんかありましたっけ。
96 :
89 :2010/11/11(木) 20:45:12 ID:9pQO9uxs
>>95 詳細な説明ありがとうございます。
>>でもCellを複製する事とストーリー展開を妨げない事とはそもそも関係は無いですよ。
>>複製したKvatchEastにドアを繋ぎ直してもクエ進行に支障が無いか、各部仕掛けが
>>うまく動くかは関連各クエとDuplicateした各オブジェの状態を良く見てみないと。
>>KavatchEastの場所に依存する重要なクエってなんかありましたっけ。
KavatchEastと書きましたが、具体的には城門入ってから王の寝室までの領域を使いたいと思っています。
EntranceやPlazaも使いそうですね。具体的に言うとBUDと言うMODのダンジョンの1つとして使いたいと思っていまして。
専用オブジェクト、トラップ、MOBが存在する為、それらを複製前のcellに配置すると
メインシナリオ進める為にKavatchに行った際にBUMOBが闊歩している状況になるかなと。
その為、独立したcellが欲しいと思った次第です。
とりあえず教えていただいた方法で複製してみます。ありがとうございました。
あー、バニラのKvatch関係の地形を自MOD用に別物のダンジョンとして流用する、て 事ですか。 でしたら上の方法でWorldSpaceを丸ごとDuplicateして、複製されたオブジェにバニラ クエ関係の何かをしているものが無いか調べて取り除きさえすれば、後は改造でも 敵配置でもなんでもOKだと思います。
書き忘れましたけど、もしその複製したKvatch関係のWorldSpaceのCell地表形状も改造 するのなら、World→WorldSpaceの「ParentWorldSpace」を「NONE」にしとかないとマズい かもです。 子供WorldSpaceのCell形状変更は親にも反映されるので。
100 :
89 :2010/11/11(木) 22:02:56 ID:9pQO9uxs
>>あー、バニラのKvatch関係の地形を自MOD用に別物のダンジョンとして流用する、て事ですか。 改変ダンジョンと言うと、既存cellに手を加えた物も該当しますね。分かりにくい表現で申し訳ありませんでした。 >>書き忘れましたけど、もしその複製したKvatch関係のWorldSpaceのCell地表形状も改造 >>するのなら、World→WorldSpaceの「ParentWorldSpace」を「NONE」にしとかないとマズいかもです。 >>子供WorldSpaceのCell形状変更は親にも反映されるので。 丁度複製が終わった所なので設定しておきます。 試してみた所、今のところはいい感じです。後はドアのテレポート設定で 複製セル同士を繋げれば下地は完成しそうです。重ね重ねありがとうございました。
仮面とか頭部アクセサリー作りたいんですが、設定方法がわかりません 頭部が消えて、アクセサリーだけが浮いてる状態になってしまいます どこかに設定方法を解説してくれているサイトはありませんか?
head属性じゃなくてアミュレットとかリングにしてゲーム内で確認してみれ
できました。ありがとうございます。 よく見たらライトアーマーの兜ってHairなのね Head属性は鎧等と同じく頭を完全にすげ替えるので hair属性は髪型みたいなもん アミュレットやリングは座標さえあっていればその位置に装着される って感じでおkですか?
鎧召喚の石碑とかで試せばわかるけどheadは首から上の頭そのものを置き換えるし hairは髪の毛と置き換える。解説してるサイトはあったと思うけどURL忘れたすまん
105 :
名無しさんの野望 :2010/11/12(金) 00:38:08 ID:49mtxIgd
イカ娘のmodがスレに貼ってあったのでダウソしたら、エロサイトのウィルス入りでした そもそもイカ娘の物は配布されていないのでしょうか? ゲハ板で貼られていたのを見て、一気にGOTY版をカオスで買って遊ぼうとしていたので すごく気になっています。まさか画像をアップロードした人がウィルス踏ませるためにやってるとは思いたくはないです
なんだsteamの使い方がわからない子か
荒らしにしてもつまらなすぎる
本人は真面目に書いているんだから生暖かい目で見守ってあげようw
スクリプト系の質問です Begin GameModeなどではなく 魔法の類がヒットした瞬間に計算される Begin ScriptEffectStartについてなのですが GAMEMODE等の継続的にチェックを行っているスクリプトについては タイマーを利用したものも普通ですが、 ScriptEffectStartのように、基本的にその場で当たって終わりのスクリプトについては 時間差をおいて処理を行うといったことはかなり難易度が高いのでしょうか? (例えばトークンアイテムを3秒後に外すといった処理です) SaveIP if (3秒経過していればトークンアイテムをremove) else RestoaIP endif というのも試しにやってみましたが、もの凄い勢いで無駄に計算しているのか? スクリプトが発動した瞬間にゲームが固まってしまう代物に…… ご教示をいただければ幸いです、お願いします
すみません、Wrye_Bash_275_-_Self_Installer-22368.exeをインストールして 動作確認後、Wrye_Bash_290_-_Archive_Version_-_Update_Only-22368.7zを 展開上書きしましたらWrye Bashが立ち上がらなくなりました。 正しい導入はどうすればいいでしょうか?
>>110 ここ作成支援スレですけどWryeBashを一から作ってるの?
とりあえずScript見直してみたら?
112 :
110 :2010/11/12(金) 18:14:38 ID:kBh5zz2o
誤爆しました。移動します。
あ、すみません。教えてもおらいました。 290は286以上が対象って落ちでした。
>>109 MagicEffectScriptには「ScriptEffectStart/Update/Finish」という三つのブロックが
あり、そのうちの「ScriiptEffectUpdate」が「GameMode」に相当します。
で、「ScriptEffectUpdate」でGameModeと同様なタイマー的な事も出来ますが、例えば
魔法が当たって3秒経ったら何かをして終了、みたいな事をするのであれば、
SpellのScriptEffect→Durationを「3」に指定して「ScriptEffectFinish」ブロックで
それを実行するのが素直な方法だと思います。
あとMagicEffectScriptって、いつでもDispelされる可能性があり、システム上も
変数内容が保証されていなかったりで元々「万一動かなくても特に問題が無い用途向け」
という位置付けの機能です。
なのでもし、ScriptEffectStartでトークンをAdd→三秒経ったらトークンをRemove、
みたいな事を予定していて、そのトークンは必ずRemoveされないと動作上色々マズい、
という事なら、MagicEffectScriptだけでその処理をするのは問題かもです。
その場合は例えばMagicEffectScriptではScriptEffectStartブロックでそのトークンを
Addするだけにして、Removeはトークンに付けたObjectScriptのGameModeでタイマーを
見て3秒後に自分をRemoveMe、みたいな構造にした方がいいかもです。
服装備作成関係で質問です。 tona氏の装備作成チュートリアルの手順に沿って blenderでメッシュをnifファイルでエクスポートし、 nifskopeでMake All Skin Partitionsを行ったところ以下のメッセージが出ました。 "reduced 1167 vertices to 4 bone influences (maximum number of bones per vertex was 9)" "did 3 partitions" このメッセージを見ると、いくつかのボーンに関連付けられた頂点が削られているようで、 ゲーム中で確認すると複数の頂点がマージされたようになって、正しく表示されません。 チュートリアルだと、nifskopeでMake All Skin Partitionsを行うと "did 0 partitions"となっているのですが、私の方では毎回頂点削除が行われてしまいます。 どこを直せば正しく表示されるのか分からず困っています。 どなたか服装備作成に詳しい方がいたらアドバイス願います。
>>115 第二版が出てるよ
wikiかご本人のブログでチェックしてみれ
>>115 それって一つの頂点に5つ以上のVertexGroupがWeightとしてAssignされているから
です。本来は4つ以下である必要が。
EditModeで各頂点のTransformPropertiesのVertexDeformGroupeのリストを見れば
ボーンが5つ以上最大で9つ割り当てられている頂点がたくさん見つかる気が。
原因は恐らくBlenderでWeightを付ける作業上の何かなのでその辺をやり直してみると
状況が変わるかもです。
>>114 氏
詳細なご解説ありがとうございました、感謝いたします
確かに待ち時間までに魔法が止まってしまうおそれはありますし
それに対して、アイテムのスクリプトなら所有している限りは発動してくれますね、目から鱗です
本題の方なのですが試してみたところ、魔法の効果でTokenを一つ与えるところはまでは問題なく動いております
ですが、トークンにスクリプトを持たせると
上記のRestoaIPと同じ同じ症状で、魔法がヒットした瞬間に固まったりエラーを吐いてしまいます
問題に関連するtokenのアイテムスクリプトとしては大体以下のような記述をおいています
tokenの条件付けによる動作は切った状態で試しているため(tokenを持っていても何も起きません)
そちらが原因ということは、おそらくないように思えます
ご助言をいただき、更に甘えてしまいますが
何か致命的な過ちを犯していたら、識者の方のご指摘をいただけると、大変有り難いです
*このスクリプト開始時には、魔法の結果として既にTokenが一つ付与された状態です
ref me
short Rank
float timer
Begin GameMode
set me to GetSelf
If me.getitemcount Token >= 1
if Rank == 0
set timer to timer + GetSecondsPassed
set Rank to 1
elseif timer >= 2 && Rank == 1
me.additemNS Token 1
set Rank to 2
elseif timer >= 3 && Rank == 2
me.removeitemNS Token 2
set Rank to 0
endif endif end
またタイマーについては、減算方式を見よう見まねで試してみましたが、こちらでも同じでした
>>118 オリジナルデータを見てみたらざっと見た感じ最大5にしているようです
本来は4ではなく、だいたい4ぐらいのものだと考えていました
これによるゲームへの影響はシステムへの演算負荷と考えたらいいんでしょうかね
>>119 me にアイテムを所持している人をセットするには、
set me to GetSelfではなく、set me to GetContainer とします
確認ですが、
これはToken自体に付けたスクリプトで、自分自身をaddItemして数を増やすことがある、ということ?
だとすると、その増えたToken自体もスクリプト付きで、独自に動作するので制御しにくいと思います
Tokenの数を制御するスクリプトは、また別のnon-playableアイテムに付けて1箇所で制御した方が楽かと
魔法の方ではTokenと同時に、スクリプトでTokenを制御するアイテムを1個だけaddItemする、という形で
あと、処理終了時にこのnon-playbleアイテムを取り除くことになりますが、removeItemを使ってはだめです
自分自身を取り除くときには、RemoveMeを使います
とりあえず気付いたのはこんだけ
>>119 やっぱり確認ですけど。
そのスクリプトはObjectID名が「Token」のオブジェに付けてあり、目的の動作は、
アクターにそのTokenを一つAddして2秒経つと同じものがもう1個追加され、3秒経った
ら全部Removeする、というかんじに見えるのですが、それで合ってます?
だとすると同じスクリプトの付いたアイテムをまたAddして数を増やすと話が非常に
ややこしくなると思います。
やはりタイミングやトークンの数を制御するスクリプトを付けたアイテムとトークン
自体は別物にした方が。その他も上の方の仰る通りです。
で、それって例えばアニメ再生関係の話だったりします?
あるアニメを2秒再生して次に別なアニメを一秒再生して、みたいな事でしたら別な
方法もあったりします。
それ以外でも場合によってはトークンを使う必要は特に無かったりするので、大体の
大枠の目的を教えてもらうと話が早いかもです。
>>121 確かにバニラnifでも「6」ぐらいまでは見た事ありますけど。
でも一つのnifで5以上は数十頂点程度だった気も。全部は調べてませんが。
上の話は、NifSkope推奨のデフォが本来「4」なので、デフォでMakeSkinPartitionする
なら「4」以下の必要がある、という事です。
Maxが「4」より大きい必要があるのなら5,6と自由に増やしてもらってOKだと思います。
というか見た目に動けばOKなら別にMakeSkinPartitionをする必要は無いです。多分。
で、その数が大きければ演算負荷も増えるのでしょう。恐らく。
ただ、実際に何がどのぐらい増えるかは多分描画系やPCの構成次第だと思います。
またObの場合それが幾つまでOKかは謎です。
>>124 レスdです
おおよその予想が外れてなかったのでとりあえず安心です
しかし軽く作るという事は相変わらず難易度高いです
バニラの装備はホントよく出来ています、さすがプロだなぁ
まあコンシューマだと一つの頂点に対して基本1、多くて2か3ってのはざらみたいだな ウェイト付けって一番面倒で精神的にやってらんないらしい
pose→bone選択→weightpaint もしくは edit→頂点選択→boneにassign 最初のうちはどのくらいの強度でどの部位に付けるかわかり辛いかも知れないけど 自分でポーズ取ってみたり動いてみればだんだんわかってくると思う
>>122 ありがとうございます、
ご指摘の通りに直したところ、動くようになりました
高い知識と洞察力を持った方が、惜しみなくご教示を下さり
このスレにはとても助かっています
>>123 氏もご教示をいただきありがとうございます
ご指摘の通りのようでしたので、お恥ずかしい限りです
>で、それって例えばアニメ再生関係の話だったりします?
実はその通りです、といってもそんなに高レベルのことをやるわけではなく
次次再生しなくてもよくて
魔法効果が現れた後、あるモーションが数秒表示されてから
元に戻るのがありがたいなといった感じです
できましたらお教えいただければとても有り難いです
>>128 いや申し訳無い、別な方法、と言っても特に画期的でも何でもなく単にトークン
アイテムの代わりにFactionを使う、というだけの事だったのですが。
具体的には、適当なFaction(仮に「AAFaction」)を作り、IdleAnimationsで例えば
「GetFactionRank AAFaction == 0」を条件にして再生は以下みたいなかんじで。
me.SetFactionRank AAFaction 0
me.PickIdle
me.SetFactionRank AAFaction -1
SetFactionRankで指定する値は何でもOKなので、複数のIdleAnimation指定は条件の
値を変えて一つのFactionを使い回しで。
でもこの方法って結局アイテムのAdd/Removeと同じ事なので、処理の雰囲気を少し
変えたかったり、非Playable指定で装備個所無しアイテム宿命のCSロード時のWarning
をどうしても無くしたいマニア向けな気も。
という事で特に拘りが無い限りやはりトークンアイテム方式がいいかもです。
こちらに行けと言われたのでこちらでも聞きます TESNからHGECをDLしてください。 meshs\characters\_maleの中に格納されている4つのnifが、上半身・下半身・手・足先のnifになります。 今回はHGEC用のシャツを作りますので、femaleupperbody.nifをworkフォルダにコピーしてください。 俺はイカちゃんに合わせて、貧乳ボディを素体として創りたいんだが、どうすればいいんだ?
>>130 はあちこちのオブリスレ荒らして回ってるので無視
132 :
名無しさんの野望 :2010/11/13(土) 16:33:31 ID:q94Y/EEC
手に入らないものは仕方ないと諦めて、自らでMODをつくろうとする者と それを邪魔して難癖つけることしかしない者と どちらが正しいのか。 ここで親切に支援してくれるのなら、他のスレに迷惑をかけることはないだろうが そういう態度なら他のスレにも聞きまくるほかない
>>129 とんでもないです、とても面白いし参考になりました
ありがとうございました
皆様からいただいたご助言で、色々と試してみます!
134 :
115 :2010/11/13(土) 21:16:14 ID:YN0ZUaz/
皆様、色々な助言ありがとうございます。 ボーン一個に対して5つ以上のウェイト載せてたのが悪かったんですね。てかnifskopeに英語でそんなの注意書きで書いてあるし。 現在blenderでウェイト再調整中、肩とか鎖骨のボーン鬼畜過ぎる・・・。 ここで、やってることを自分用メモがてら。 服のメッシュの何百、何千ある頂点から一個一個ボーンにウェイトがアサインしてるかどうか確認するのって面倒極まりない。 「Edit Mode」の「Link and Materials」にある「Vertex Groups」から各ボーンを選択して、「Select」を実行すると 選択したボーンにアサインされている頂点がアクティブになるので、それで5つ以上のボーンにアサインされた箇所を探して要らない部分のウェイトを0に。 さらに一度ペイントしてアサインしたけど、ウェイト0で塗り直したからアサインをリムーブしたい場所も沢山発見。 で、blenderで使えそうな機能を発見。 blenderの「Weight Paint」→「Paint」→「Clean Weight」を実行。 これで指定値以下のウェイトが乗った頂点から余計なアサインをリムーブ出来る、ぽい。 レスを読み返すと、MakeSkinPartition無しでもOKみたいな意見がありますが それやらないとうちの環境だと全く表示すらされないんで。 また何か詰まったら相談に来るかもです。
クエスト等の会話の結果として ギルドを追放するにはどうすればいいのでしょうか? GetはinFactionという記述があるのに Setの方はFactionrankしか見あたらず RANK==0でも加入しているという意味のようなのですが 宜しければ教えてください
ごめんなさい、CSwikiでMODの方をみてだめだと思ったら set -1と描いてありました とりさげます、スレ汚し失礼しマシた
マントとかヒラヒラした部分を作る場合、地道にウェイトを設定していくしかないんですか? あとボーンのない武器や盾の場合ヒラヒラさせるにはどうするんですか?
138 :
3 :2010/11/14(日) 14:50:25 ID:GsllPS9P
しばらく前にバイクMODでお世話になったものです。 その節は大変お世話になりました。 3Dモデリング無経験者がバイクを自作するのは極めて無謀だということを痛感し、 少し調べてみたらこのNR500はBlenderのフリー素材のものを使っていることがわかり、 流用もOKかもしれないと考えています。 とりあえず「MarkerBike.nif」を入れ替えてみようとしたのですが、 自分で色々やってみましたが、ゲーム上で表示されませんでした。 ・nr500.nifと入れ替え(部位の名前を変えたり色々してみた) ・Blenderで何かを編集してnifエクスポート=>「1 BSXFlags」がない 「skeleton.nif」やkfファイルなどと構造が一致していないと表示されないのでしょうか? skeleton.nifなども同時に作るしかないのでしょうか? 説明が複雑で大変になりそうなら、無視していただいて大丈夫です(汗)
質問なのですが、あるオブジェクトをゆっくり移動させたい場合はどのようなスクリプトが必要になるのでしょうか? SetAngleやposのように瞬間移動するのではなく、rotateのようにゆっくりと動かしながら位置を変えたいのですが
orogみたいなデカキャラ大好きだけど顔がアレすぎる スパミュ種族作ってフォークスさんプレイがやりたいなぁ 違法だろうからスルーしてもらっていいんだがfo3のデータから種族作るのって初mod作成には荷が重いもん?
>>138 いや説明が大変とかではなくて、あるユーザーMOD独自のnifについてだけの改造手順を
聞かれても、そのnifの正当性自体がよく分かんなくて結果に責任が持てず答え難い
んですよ。
一般的な話ならクリーチャーにnifを付ける場合は、そのnifのBSXFlagsとNiStringExtra
Dataを適切に指定して(無ければコピペでも追加でも)CSでそのCreature→ModelList
タブでそのnifにチェックを入れればOK、みたいな事は答えられえますけど。
要するにそのMarkerBike.nifやバニラ馬の眼球nifと同じに、て事ですが。
NifSkopeの操作手順的な話でしたら、BlockListで右クリすると色々出てくるので
その中のそれっぽいのを。NifSkopeを二つ立ち上げれば相互にコピペ出来ます。
>>79 の件はもういいんですか?
>>139 Rotateって内部的には毎フレームSetAngleしているのと同じ事です。
角度の変化量が少なくて等量だから滑らかに連続的に動いている様に見える訳で。
移動も同様で、例えばGameModeで毎フレーム位置を少しずつ変えてSetPosすれば
ゆっくり動いている様に見えます。
具体的な座標の計算方法とかスクリプトの書き方は状況に応じて色々です。
またオブジェの種類によってはSetPosでコリジョン位置が反映されなかったり、
動かせる距離に限界があったり、物理演算が異常になったりする事も。
その辺って状況次第なので、細かな話が必要でしたらもう少し詳しい状況込みでまた。
143 :
3 :2010/11/14(日) 20:16:23 ID:GsllPS9P
>>141 以前そうおっしゃっていましたね…。大変失礼いたしました。
ただ少し説明不足な点がありまして、このnr500.nifもそうなのですが
MarkerBike.nifをBlenderで編集してExportした場合も「BSXFlags」が
なかったりして表示されなかったので、それについてお尋ねしていました。
>>79 の件で、Blenderへのインポートに適用できた設定
1)skeletonEdit.nif…「Inport Animation」のみ
2)base_female.nif(人間)…「Inport Animation」のみ
3)MarkerBike.nif…「Inport Animation」と「ImportGeometryOnly+ParetnToSelectedArmature」
>各nifのImportはそのSkeletonオブジェを選択状態にして
>「ImportGeometryOnly+ParetnToSelectedArmature」ボタンをONで。
とありましたが、1)と2)はそれを指定するとエラーになってしまいます。
なので上記の設定でインポートしているのですが、すると
2)の時点で実体がある人間の上に全く無意味なワイヤーフレームができてしまいます。
本来は人間の方にはワイヤーフレームがなくて、
それに実体の位置を合わせるのだと想像するのですが…。
これをクリアしたら、BSXFlagsやNiStringExtra
Dataなどにも取り掛かりたいと思います…。
>>143 いやですから無ければコピペなり追加で。
nifってOblivion専用ではなくて別な会社が作った汎用のフォーマットです。
またBlenderもNifScriptもOblivion専用では無くて汎用です。
一方「BSXFlags」てのはBethesda独自のnifの拡張です。
なのでExportされたnifにBSXFlagsが無くても何も不思議ではないです。
で、覚悟を決めてもうステップ毎に一つずつやりましょう。規制中なんでやりとりに
時間はかかるとは思いますが。
Blenderを起動し、Import画面でまず「skeletonEdit.nif」を指定し、ボタン画面で一回
「RestoreDefaultSetting」を押し、「ImportSkeletonOnly+ParentToSelectedArmnature」
を押してON状態にし、「ImportAnimation」ボタンを押してOFF状態にして「OK」を。
どうなりました?
作業状況が分かる様にSkeltonがよく見える位置に視点を適当に変え、Skeletonを選択
状態にしてBlenderの全画面のSSをUPして下さい。
文字が読めればOKなので圧縮率は超高く。BlenderとNifScriptのVerも教えて下さい。
その状態でPoseModeにしてキーを打てばもうkfは作れるのですが、その辺は後で適当に
試してもらうとして、まずはSkeletonのImportだけが正常に出来たかを確認させて
下さい。
145 :
3 :2010/11/14(日) 22:28:58 ID:GsllPS9P
>>144 自分にとってはとても助かるのですが、非常に申し訳ないです。
色々知ることができたら、(需要があるかわからないですが)
自分なりにOblivion用の解説ページを作ってみたりしたいと思ってます。
「ImportSkeletonOnly+ParentToSelectedArmnature」は無く、
「ImportSkeletonOnly+ParentSelected」と
「ImportGeometryOnly+ParetnToSelectedArmature」はあります。
後者は必ずエラーになり、前者ならかかしのような人間が表示されました。
http://moto4life.web.fc2.com/material/bl01.jpg ※直リンクなのでFC2の特性上、Firefoxからだと見れない可能性があります。IEなら必ず大丈夫です。
・Blender v2.49b
・Blender Nif Scripts v1.5.7 windows ←v2.xだとImport/Exportのメニューが出ません…。
>>145 あ、申し訳無い、「ImportSkeletonOnly+ParentSelected」です。
そのSSの案山子状態で正解です。
というか日本語Blenderってあるんですね。用語が混乱しないか心配な気も。
で、次に体nifのImportですけど、まずバニラのheadhuman,upperbody,lowerbody,hand,
footの各nifを用意して下さい。female〜でも多分OKです。
上でも言いましたけど、バニラ以外のnifは動作に責任は持てないです。
用意が出来たら、Skeletonを選択状態のままImport画面で例えばheadhuman.nifを指定、
ボタン画面で「ImportGeometryOnly+〜(後半部は間違い易いので省略)」を押して
「OK」を。「ImportAnimation」はOFFです。
で、オブジェの位置操作の為にObject→TransformPropertiesを出し、Importした頭を
選択してそのTransformPropertiesの「LocZ」を+1.0します。これで頭とSkeletonのズレ
が無くなるはずです。
以降Skeletonの選択→体nifのImport→LocZ+1.0を必要なだけ繰り返します。
体nifが全部Import出来たらPoseModeで各ボーンを動かして体メッシュが追従して動く
か確認を。それが正常なら体nifのImportはOKです。
blend形式でのSaveは別にいつでもOKなのでこの辺で一度Saveしとくといいかもです。
問題が無ければSSはいいですけど、経過を見たい人もいるかもなのでUPしても。
後はバイクnifを同様にImport、SceneRootオブジェのZ位置を調整すればImportは終り
なんですけど、バイクをBlender上で動かすには他にWeight付け作業が必要なので
手順的に少しややこしくなるかもです。
という事で今日はこの辺で。
>>148 exeは持ってるんですけど、インストールしようとすると
先にBlender入れろよ、みたいな警告でるだけで
>>148 すいません、導入できました。
他にも必要なものあったんですね。
自分が早漏でした。
スレ汚しすみません。
ありがとうございます。
あー、ちょうどNifScriptの話が。
>>145 Verはやっぱ2.5台の方がいいかもです。導入の確認を。
あとBoneに体メッシュが追従するかの確認の時ですけど、Skeletonオブジェを選択→
PanelsのEditing→Armature→EditingOptionsの「X-Ray」ボタンを押すと、Boneが
体メッシュに隠れずに見える様になって選択し易くなります。
153 :
3 :2010/11/15(月) 15:38:56 ID:zLCrA43+
154 :
3 :2010/11/15(月) 16:23:15 ID:zLCrA43+
>>152 Blender NIF Scripts ver.2.5.5にしました。問題なく使えるみたいです。
以前、2.5.xを入れたとき、Import/Exportにnifが出なかったのは
インストール要件をしっかり守ってなかったからだと思います。
1)Blender ver.2.49b
2)Python ver.2.6.4 ←2.6.5をインストールしてた
3)PyFFI ver.2.1.5
4)Blender NIF Scripts ver.2.5.5
の順番にバージョンを守ってインストールが必要みたいです。
>>153 あれ、バイクのImportまで行ってたんですか。
MarkerBike.nifのImport自体はそれでOKです。
全体の位置が下にズレるのはゲームでの表示の辻褄併せにバイクnifの「SceneRoot」に
Bip01SpineBとの位置が合う様に暫定的にその値が書いてあるからです。
その下に沈んだ状態の修正は、ヒトの足の下の「SceneRoot」オブジェを選択して
TransformPropertiesでLocZを「0」に。
あと、少し話が逸れますが。
本来はMarkerBikeのモデルはBip01SpineBの位置を原点にするのが筋な気もします。
でも今その辺の話をするのは混乱の元な気がするので、モデルの座標には色々な考え方
や方法があり、このサンプルのnifや方法手順だけが別に唯一では無い、という事だけ
をとりあえず頭の隅に。
で、また別な一般的な話ですが、明らかにObと違う座標系で作られたモデル(NiNode/
TriStripesの変換では無く、Y:P:Rが0の「素の状態」で横倒しだったりひっくり返って
たり前後が逆だったりするモデル。ObはY正方向が「前」でZ正方向が「上」)の修正は、
NifSkopeでNiNode/NiTriStripesに好きな移動/回転変換値を入れて右クリ→Transform
→Applyで出来たりします。
続き) 話が逸れましたが。手順の続きを。 Importはそれで全部です。でも上でも言いましたけど、バイクの絵はそのままでは Boneに追従しないのでWeightを付ける作業が必要に。 まずバイクの「Frame」オブジェを選択、Shiftを押しながらSkeletonを選択して二つを 同時に選択した状態にし、Object→Parent→MakeParentしてMakeParentToで「Armature」 を、CreateVertexGroups?で「NameGroups」を選びます。 次にFrameオブジェだけを選択し、EditModeにして全頂点を選択します。 「A」キーを何度か押してワイヤーフレーム全部が明るくなれば全選択状態です。 その状態でPanels→Editing→Link and MaterialsのVertexGroupsのBone名(多分最初 は「EntryPoint」となっているはず)の左のボタンでBoneのリストを出し、 「Bip01 SpineB」を選び、「Weight:1.000」なのを確認して「Assign」ボタンを。 これで一つのオブジェのWeight付けは完了です。 同じ事をバイクのFWheel,RWheel,FFork,Seat,SBar各オブジェに。これでバイクと 乗員が一緒にBip01SpineBに追従して動きます。確認を。 これで初期状態を作る作業は全部終わりです。 後はヒトアニメを作る手順と同じです。
>>157 Version違うだけだと思うよ
俺も無いけど別にUVマップ作るのに不自由しないしな
Editモードで切りたいところを選択してCtrl+Eでマークして展開するだけ
俺もそれで1日費やしたわw そのチュートリアルはBlenderのバージョンが低いんだよね 最近のBlenderはUVがエディットモードに統合されてる エディットモードでUを押すか、Meshの項目にUV展開があるはず Blenderはバージョンによっていろいろ変わるんだよな おかげでちょっと古いチュートリアルとかだと参考にならないときがあるぜ
>>158 ‐159
なるほど。
ちょっとした改変でもここまでいちいち設定しないといけないんですね・・・
つうかブレンダーのUIが統一されなさすぎでわけわかめ
質問なのですが、現在worldspaceでの作業で困っています。 Tamrielを親とするworldspaceを作成したのですが、遠くを見た際に色々妙な事になります。 具体的な例で言えば、ICから見たコロルが空中に浮いている・コロルから見た場合ICの建物が見えない、などです。 Tamrielと同様の遠景を、このTamrielを親とするworldspaceでも使用したい場合はどのようにすればよいのでしょうか?
blenderで髪型をいじってみたけど何かいろいろとダメだった 参考になるサイトがあれば教えてほしい
何がダメだったかによります Blenderの操作自体なら有名どころがすぐ引っかかると思いますが 髪型のことならここでSS付で質問したほうが早いかも オブリ系のブログとかでも断片的な情報はあると思いますが、なかなか探してる情報は無かったりしますし 情報の揃ったとこがあったとしても個人ブログとかはさらせませんしね〜
>>165 内側のmeshから順に貼り直せば直る
Editで内側のメッシュの頂点選択、Ctrl+Lでmesh選択してコピー、元を削除
後nifskope上でおかしく見えてもゲーム内で大丈夫ってこともあるからちゃんと中で確認した方が良い
ここ見て、おっし!俺も!と思ってBlender2.49入れて、nif scriptとかも入れて、 おっしゃ!と適当な装備品インポートしたら、Editモードにできなかった… TABキーで最初からある箱はEditモードにできたのになぁ… どこの解説サイト見ても、「TabキーでEditモードにして編集してね」って書いてある もうね、俺、センスとか技術とかそういう問題じゃない世界に突入しちゃってるよ
メッシュ選択してないんだろう
170 :
名無しさんの野望 :2010/11/16(火) 15:32:17 ID:KGwCNHpW
>>167 ありがとうございます
早速やってみたところ完全には直りませんでしたが大分マシになりました
感謝です
それともう一つかなり初歩的な問題ですが、そもそも髪に色が着けれませんでした
あまりにも前知識が足りなくて泣きそう
>>170 VertexPaintを確認
白がテクスチャの影響を強く受けて黒はテクスチャの影響を受けない
>>169 いや、その状態でDELETE押せば削除できるから、メッシュは選択されてると思うんだけど…
いろいろ違った マシになったと思った透過はテクスチャ変えたからだった VertexPaintも黒白灰と試したけどCSではなんの変化もなし そもそも手順がぶっとんでる気がする blenderで合成したい髪をインポート ↓ いらない部分を削除 ↓ ctrl+Jで結合 ↓ materialをひとつにしてエクスポート nifskopeではテクスチャくらいしか弄ってないし端折りすぎだろこれ
>>162 視界の開けた巨大子供WorldSpaceを作ってたりしません?それか超高空とか。
もしそうならちょっとややこしい話になるかもです。
遠くの建物が浮いて見えるのは恐らくその領域の地表LODが表示されていない
からです。多分。
TamrielはCell数が通常のWorldSpaceより多く、地表LODの数も多くて他に比べ遠く
まで見渡せます。
でも子供WorldSpaceは親の事情とは関係無く自分を中心にした最低限の32x32Cellx4の
範囲しかLODを表示しないかもです。
Tamrielの子供で遠くまで見渡せる様なWorldSpaceはバニラには無いのでシステム自体
が元々その辺を考慮していない可能性が。
なので現在のCell座標から最短で16Cell程度離れた位置の地表が表示されなかったり、
建物なんかの遠景オブジェも表示されなかったり欠けたりするかもです。
で、以前少し試してみた事があるのですが、そのWorldSpaceをTamrielの子供ではなく
独立した普通のWorldSpaceにしてMapDataをTamrielと同じにし、Tamrielの地表LODの
nif/dds、遠景オブジェのファイルを全部コピーして各ファイル名をそのWorldSpace
相当に変えればTamrielの遠景がまんま表示されるかもです。
とりあえずここが多分参考に。
http://cs.elderscrolls.com/constwiki/index.php/Landscape_LOD_Tutorial でもLODを一から作る話とも少し違うと思うので、何か謎な事がありましたらまた。
175 :
3 :2010/11/16(火) 18:58:32 ID:B4SbPoBg
>本来はMarkerBikeのモデルはBip01SpineBの位置を原点にするのが…
>で、また別な一般的な話ですが、明らかにObと違う座標系で作られたモデル…
大変興味深いです。
たしかに、例えば宇宙での乗り物だったら地表とは違う座標になるかもしれませんし、
そもそも使う環境によってXYZ軸の方向が違うということですね。
NR500が倒れてたり地面から生えてたりしたら「NiNode/NiTriStripes」をいじってみます。
全てのバイクオブジェでWeight付けした後、PoseモードでBip01 SpineBを動かしたところ、
体全体とバイクが連動して動きましたが、Bip01 PelvisBとBip01 NonAccumBは動かず残りました。
これで正しいでしょうか??
ポーズを作ることができました。
http://ime.nu/moto4life.web.fc2.com/material/bl05.jpg kfファイルとしてExportしても、NifSkopeで設定を上手く変更しないとまだ使えないみたいですね。
こちらも規制対象になったみたいです…。書き込めません…。
一時的に携帯から書き込みました。
>>175 座標系については「右手系」「左手系」とかで検索してみて下さい。
また各軸の意味は、Xが左右、Yが上下、Zが奥行き、みたいな考え方をする場合も
あったりします。
ツール環境や目的によって座標の方向や意味は色々、て事です。
そういう色々な環境や解釈で作られたモデルをObに持ってくると横倒し/上下逆/前後逆
になったりすることがあり、その修正はBlenderだけでなくNifSkopeでも出来る場合が
あるよ、という話です。
で、Bip01SpineBを動かしてもその親Boneが動かないのはそれでOKです。
前進/後退でバイクを動かす時は「Bip02」を動かします。
例えばウィリーさせる、みたいな場合に、Bip02を「前」に動かしながらBip01SpineB
(PelvisBでも多分NonAccumBでも)を回転/移動させて相対的なバイクの位置や向きを
作ります。
またPelvisやSpineというのは動物の場合の命名規則に倣っているだけなので、Boneの
名前自体は実は「Frame」でも「Seat」でも「ABC」でも何でも良かったりします。
あとkfの設定は、相当する馬kfとNiControllerSequenseの名前とCYCLE_TYPEを同じに
してTargetNameを「Bip02」にすればOKです。
TimeLineとかTextKeyの指定はヒトポーズやアニメを作る時と同様に必要なフレーム数
やキーを指定で。
>>172 objectを複数選択してるとeditモードにならない
複数選択で削除は出来る
確認してちょ
178 :
3 :2010/11/16(火) 22:18:11 ID:B4SbPoBg
>>176 できましたぁぁ!!
・Idle
http://moto4life.web.fc2.com/material/bl06.jpg ・Forwardでウィリー
http://moto4life.web.fc2.com/material/bl07.jpg 出力されたkfファイルを、もともとあったIdle.kfやForward.kfと比べて
・ファイル名を一致
・「0 NiControllerSequense」の名前を一致
・「0 NiControllerSequense」の中にある「TargetName」を一致(Bip02へ)
・「NiTextKeyExtraData>TextKeys」内のTextKeys2つの「Value」を一致
以上で置き換えることができました!
連続で申し訳ありませんが、疑問があります…。すみません。
Blenderで決めたBip02での前進後進の移動量は、ゲーム中での移動距離に直接影響するのですか?
とすると、CreatureのSpeed以外に、kfファイルでスピードも自在に変更できることになります?
GameModeブロックでIsKeyPressed3を使って<Fキー>を押したらウィリーなどと設定したいのですが、
任意のkfファイルを再生させるためにはどうすればよいでしょうか…??
ポーズMODを見ても理解できませんでした。
>>174 非常に分かりやすい説明でホントありがとうございます
ページを参考にして頑張ってみようと思います
player.Playgroup って、もしかしてモーション中は移動操作受け付けなくなります?例えば player.Playgroup CastSelf 0 で、前進中に再生が入ると、終了まで前進し続ける、みたいな。 いや、そんなことないよ、って言われた方がありがたいのではあるのですが。
>>178 おー、動きましたか。よかったです。
後は好きなバイクのモデルを必要ならBlenderなりNifSkopeで素の状態で
MarkerBike.nifと同じ位置/向きになる様に加工すれば同様にゲームに出したり
kf作成用のImportが全く同じ手順で出来るので応用はご自由に。
で、ゲームでの前進後退の移動距離はkfの移動距離を変えれば変わります。
でも移動距離とフレーム数って、馬の場合は足の動きの周期と歩幅の結果ですし、
バイクなら車輪の回転数と円周で一意に決まると思うので、結局アクターのSpeedで
移動アニメを早く/遅く再生するのと同じ事だったりするかもです。
任意kfの再生はIdleAnimationsの指定を。クリーチャーもNPCと同じです。
条件はトークン用アイテムのGetItemCountでも上で出たFactionでも。
相手がバイクならトークンアイテムは多分何でもOKです。有り物のリンゴでも何でも。
IsKeyPressed3でのキー入力検知はここの二つ目のコード例を。
http://cs.elderscrolls.com/constwiki/index.php/IsKeyPressed3 その例のif文の前に「set MyKey to 33」と書き、そこの「do stuff,〜」に例えば
トークンアイテムがAppleなら、
AddItem Apple 1
PickIdle
RemoveItem Apple 1
と書いてバイクにそのスクリプトを付ければとりあえずは動くと思います。
でも多分PCが乗っていなくても動くのでリモコン操作も出来てしまうかもですが。
またIsKeyPressedは環境によってはOblivion.iniの「bBackground Keyboard」とも関係
するので、動かない場合はその辺の確認も。
>>180 あー、そうなるかもですね。
PlayGroupの後に動けなくなるのは「PlayGroup Idle 1」で復帰はしますけど、
多分そうではなくて再生中に操作が出来無い事が問題なんですよね。
CastSelfだけの話なら「Player.Cast XXXX Player」ではダメなんでしょうか。
また他の動作もOBSEの「TapKey」や「Holdkey」でその操作キーが押された事にすれば
PlayGroupと見た目同じ事になるかもです。
Flip Normalは?面がちゃんと外向きになってるか確認 VertexPaintでtextureの影響を受けるようになっているか確認
>>183 blenderでUV再設定するしかなさそう
nifskopeでやるなら、たぶんUVのボタンの頂点があっちこっちに飛んじゃってるからNiTriStripsを右クリックTextureのEditUVで
ひとつずつ頂点を移動させてやればいけるかな
左クリックドラッグで動かしたい頂点を指定してその頂点を左クリックドラッグで移動させる
Ctrl+Zでアンドゥできるから
>>182 ありがとうございます。んー、やっぱりですか。
魔法に失敗要素を持たせようとしているのですが、要素はともかく結果をどうしたものかな、と思いまして。
PlayGroupを割り込ませると確実に動作をキャンセルできるようですが、再生中身動きできないというジレンマが。
他にScriptEffectでコストゼロのダミー魔法を作って・・・というところまで考えたのですが、
まずは本来Castされるはずの魔法を止めないとどうにもならないですよね。
スクリプトもMOD作成も素人ですので、Wikiを見ながらぼちぼちやってみます。
・・・でも煮詰まったらまた相談に来させてもらうかも。
187 :
3 :2010/11/17(水) 20:22:35 ID:Cl9ZL9dj
>>181 アクターのSpeedは、kfファイルの再生の速度なんですね。
確かに、馬のSpeedを255にしたら、足をバタバタさせてました。
>バイクなら車輪の回転数と円周で一意に決まる
この辺りがすんなりわかってしまうのが、やっぱり凄いなぁと感動しました!
任意kfの再生を試したかったのですが、その前に問題が…。
おっしゃる通り、他MODの流用にはトラブルがつきものだと痛感しました…。
NR500のオリジナルnifで、素直にkfファイルを出力した結果がコレです。
http://ime.nu/moto4life.web.fc2.com/material/bl08.jpg NR500の方はnr500.nifの「0 NiNode」の「Rotation」を変更すれば真っすぐになり、
人間の方はkfファイルの「Bip01 NonAccum」の「Rotation」を変更すれば真っすぐになりました。
http://ime.nu/moto4life.web.fc2.com/material/bl09.jpg しかし、まだ位置ズレがあります。
出力されたkfファイルをエクスポートする度にこれらを修正するのはかなり手間になるので、
いっそBlenderで編集の時点で横にして編集すれば良いのではないかと考えたのですが、
これは可能と考えられるでしょうか…??
最初の写真から、左に90度向いてそのまま地面に倒せば、そちらが正面になりそうですが…。
>>186 目的はプレイヤー操作によるCastが起きた時に、動きや操作は通常通りで魔法が出るの
だけをキャンセルする、て事でしょうか。だとするとCastが起きた時に例えば、
PlayGroup CastSelf 1
PlayGroup Idle 1
と続けて実行すれば行けるかもです。AnimGroupの種類は状況に応じて。
実行のタイミングは操作によるCastが開始した直後のフレームより少し遅らせた方が
いいかもなのでその辺要テストですが。
でも単に魔法だけが不発で後の動きは全くそのままだと、魔法の失敗というよりは
システム上の何かの不具合みたいに見えそうな気も。
他にもPriorityがCastより高いSpecialIdleを再生してCastのHitキーを再生させずに
魔法をキャンセル、みたいな方法もあると思います(いわゆるポーズの再生と同じ事
です)。
この場合移動操作は下半身のProority次第で可能にも不可能にも。
爆発音や失敗っぽいEffectShaderと併せて魔法が暴発してよろめく、なんて事も多分。
技法的には色々可能だと思うので、その辺何をどうするかは演出上の要求との兼ね合い
だと思います。
>>187 うーん、どうしましょ。
モデル自体を直さずにNiNodeの回転やkfで辻褄を合わせると後々に禍根を残す事に
なりそうな気がするですよ。
>>181 で言ったのは、そのモデルをNiNodeでの辻褄合わせの回転が無い「素の状態」で
MarkerBikeと同じ向きになる様に加工すればMarkerBikeの代わりにそのまま何もせずに
入れ替えて使えるよ、て事です。
具体的には、そのモデルの0番NiNodeのTransformとRotationを全部0にして素の状態
にし、MarkerBikeと同じくY軸正方向が「前」になる様に0番NiNodeのRotationのRを180に
して0番NiNodeを右クリ→Transform→Applyすれば修正自体は終りです。
後は0番NiNodeのTransformとNiStringExtraDataのBone名をMarkerBikeと同じにすれば
互換になります。
そのバイクモデルの修正の具体手順って実はこれだけです。
出来れば直接の手順の話は避けたかったので色々回りくどい言い方をしてしまって
分かり難くて申し訳無かったのですが。
>>188 一番目の方法は始めに思いついて試してみたのですが、やはりPlayGroupの動作中は融通が利かないようです。
(後にidleを入れることでモーションが固まるのを防ぐことはできると思いますが)
その後、参考になりそうなMODを探していたところ、AudaciousMageryというMODに気になる記述がありました。
曰く、「Cast時に、player.AddSpellでAbilityのSpellを追加することで、魔法効果をキャンセルできる」そうです。
(略、魔法の成否判定)
player.AddSpellNS XXXX
player.RemoveSpellNS XXXX
とすることで、モーションはそのまま、魔法は不発という状況を作れました。
後はmessageなりSoundなりを追加すれば、一応は失敗の確認をとれると思います。
ただ、作者自身も理由はよくわからないようで、
adding an ability to the player interrupts the casting... who knew? と言ってますので、
もしかしたら、仰られたようにOblivion自体が持つ不具合かもしれません。
ご助言ありがとうございました。
まー、メインは判定方法なので、ここからが本番なのですが・・・w
191 :
189 :2010/11/18(木) 01:06:48 ID:aDfMNQKT
誤) NiNodeのTransformとRotation 正) NiNodeのTranslationとRotation です。「移動」です。NiNodeのX,Y,Zの事です。二個所も間違えてます。 もうね、寝ます。
>>190 あれ、それと同じ様な例が前スレ913,914にありますね。
Cast中にエンチャント付き装備をEquipすると魔法が不発になる、て話です。
Abilityでも不発になるって自分で書いてますし。やっぱもう寝ます。
動作が固まるのは多分タイミングによります。
実際に試しましたがユーザー操作のCastが始まった直後は多分マズいです。
数フレーム以上待てばOKだと思います。
NPC等特殊なキャラではなく、一般NPCが戦闘時にどんな回復/支援魔法を優先的に使うか もしおわかりになっている方がいらしたらアドバイスをいただけないでしょうか? 体力が一定以下になった際に、この回復魔法を使うと この演出が起こる、といった感じに使いたいのですが 種族スペル欄やNPC個別スペル欄に追加したスペルをなかなか使ってくれません (おそらくclassごとのleveledspellや、Breton種族のシールド能力などは 見ていてもわりかし使っているようなのですが) 武器防具などは、Classごとの得意武器や 装備箇所や総合評価の高いものを使うといった感じがあってわかりやすいのですが 魔法にもなにか似たような基準があればと
×NPCなど特殊な ○MPCなど特殊な でした、失礼しました
すみません、使ってくれるようになりました 取り下げます、失礼しました orz ただ戦闘開始時や終了時ではなく 戦闘中に回復支援魔法を使う頻度というのは どのあたりの影響を受けて決定されるのですかね? 攻撃性や勇敢さといったAIの数字を わりと下げても、死ぬまで回復を使わないで頑張ってしまいます combatstyleにはあまりそんな感じの項目はありませんし stopcobatをかけると その場で回復魔法を使用して回復をはじめるので 回復を持っているという認識?はしているようなのですが
>>184 >>185 ありがとうございます。
EditUVを見た所、ボタンのUVだけメチャクチャになっていました。
nifskopeでの修正は困難なのでblenderで再設定しようと思います。
>>196 editでボタンの頂点を1つ選択、Ctrl+Lでボタン全体を選択してUVUnwrapでおk
マテリアル一緒にしてくっ付けた場合でも簡単に選択できるから覚えておいた方がいいよ
198 :
3 :2010/11/18(木) 18:55:55 ID:gRBFPsxJ
>>198 おー、なんかいいかんじに。
SpecialIdleでウィリーさせるならkfでBip02とその他BoneのPriorityの大小関係を
うまく指定すると車体姿勢を変えたままで自由に移動操作が出来ますよ。
で、もし
>>51 のサンプルを元したここでの一連の話をまとめてサイトに、という事
だと、実はそのサンプルってとりあえずはゲームでは動きますけど正当性自体はまだ
未知なのでその辺にご留意を。
例えばCSでPreviewしようとすると大量のWarningが出たりしますし。
(これはモデル指定にSkinInstanceを含むnifが無い、とかその辺だとは思うのですが
全く未確認です)
また人馬一体kfを一発で作る、という作業上の利便の為に特殊なBone名の付け方を
していたりでSkeletonの構成が一般的では無く、システム的な整合や安全性再現性の
保証は無いです。
MODとして最終的な成果物だけを公開するなら「動けばOK、動かなかったらごめんね」
的なポリシーでこのサンプルを現状のまま流用でOKだと思います。
でも確立した作り方の手順として一般化して公開する場合は手法の根拠や正当性の
検証がもう少し必要な気が。
特に手順マニュアル的な厳密な物ではなく、その辺の不確実さも含めての事例的な
ものであれば別に全然OKだとは思うのですが。その辺が少し気になって。
>>197 UV展開を一からやり直さなきゃと思ってたのですが
Ctrl+Lって凄い便利ですね!
ありがとうございます!
201 :
3 :2010/11/19(金) 14:55:08 ID:5gyveVoI
>>199 >SpecialIdleでウィリー
なるほど、ウィリーしながら移動させるにはPriorityを調整すればできるのですね。
ウィリーでステップに立ったまま移動とか、かっこいいかもしれません!
>>51 のサンプルのまとめサイト
なるほど…バイクMODを作れたので思わず作り始めてしまいましたが、
必ずしも正しいやり方という保証はないということですね…。
それも含め、私自身には何ら細かい知識がないですので、
そういったことを注意書きで書いておこうと思います。
「動けばOK、動かなかったらごめんね」くらいのスタンスで。。。
現状、こんな感じになってます(すごい途中)。
http://life4oblivion.web.fc2.com/ まずかったら全然All削除OKです。どうでしょうか…。
武器MODとか作りたいと思うのですが、モデリングとかはMAYAでも出来ますか?
濃いなぁw騎乗できるクリーチャーに興味あるのでこういう話題はありがたい
>>202 objでインポートしてBlenderに読み込みnifでエクスポートでできますよー
TesnにnifスクリプトとかセットになったBlenderあるので便利ですよ
objでエクスポート、でした
>>204 なるほど、早速試してみます。
一応調べてみたんですが、MAYAのNIFプラグインをダウンロードすることでNIFファイルにエクスポート可能だという事が分かりました。
実際試したところNifScopeでファイルを読み込んでみたところ、メッシュも問題なく表示されました。
この場合Blenderでなくても製作できるということでしょうか?
3Dツールのことは詳しくないけど、 無料のBlenderで出来て、100万円するMayaで出来ないことってあるのか…
>>201 うお、立派なチュートリアルですね。どうしよう。
そのサンプルはもうこちらの手を離れてしまったのでどの様な形で利用してもらっても
全くOKなのですが、でも正直そのサンプルって適当に試して「あ、なんか動いたかも、
オッケーオッケー」的なノリでUPしてますよ。
そのサンプルの手法の根拠は、一度馬とヒトのSkeletonをNifSkopeでくっつけて
「Bip01〜」と「Bip02〜」が混在する状態にしてBlenderにImport→kfをExportしてみたら
なんかおかしな事になったので、その状況を追求するのも大変そうだし、じゃあ大元の
一つだけを残して後は「Bip02〜」をやめて全部「Bip01〜」にしてしまえ、という非常に
単純で短絡的な発想に基づいています。
そもそもBip01/02が混在すると本当に問題があるのか、もしあるのなら何か対策は
無いのか、という前段階の検証は実はほとんどしていません。
似た様な件で、異種Skeletonを続けてImportすると片方に問題が起きる、という状況を
以前経験した事があるので、Bip01/02が混在していてもダメなのかな、と勝手に憶測
してそれっぽい解決策を試してみただけです。
それが果たしてツールやシステム的に問題が無いかの結論はもう少し様子を見た方が
良さそうな気もしていたのですが。
と言う事で、今後何か致命的な問題が発覚して、「この件は無かった事に」、という
事態になる可能性もある、という事にさえ留意してもらえればもうどの様に使って
もらってもOKです。
なんか乗り物MODが徐々に開発が進んでるみたいなんだが フリーザ様の浮いてる台座作って欲しいなあ・・・
>>201 うほ、メモにしょっぱな自分の投稿した文章も載ってて吹いた(笑)
製作関連を解説したサイトって少ないから、このサイト作成のほうも頑張ってほしい。
かげながら応援してます〜w
212 :
3 :2010/11/19(金) 19:24:45 ID:5gyveVoI
>>209 立派に見えますか!? ありがとうございますっ!
自分には知識がないので、あくまで教えていただいた事柄を
丁寧に解説しているだけですが、何かのお役に立てばと。。。
Blenderって、妙な仕様で妙なエラーが起こったりしますよね…。
直感的に何かをしようとしても、それはできないってなったり…。
検証はほとんどしていないとありますが、
文章からはそれなりに調べていらっしゃるように見えます…。
また、ゲーム中でも問題なく動いています。
なので、「この件は無かった事に」なったらそれはそれでいいので、
このまま続けていこうと思います。
>>210 私は設定をいじることくらいしかできませんのでフリーザ様の台座を
作るのはムリですが、きっと誰かが作ってくれる気がします!
>>211 大変貴重なリンクでしたので、メモらせていただきました!
私自身に知識がないので中身の乏しいサイトになりそうですが、
自分にできることはこれくらいですので続けていきたいと思います。
ウィリー走行で敵を攻撃とかって可能かな? いや、馬でも乗馬中に馬の攻撃モーションで攻撃できたらいいなぁ〜と思うので
214 :
3 :2010/11/20(土) 00:13:15 ID:o05fszY1
>>213 実は(できるかわからないけど)それを狙ってました!
ウィリーや突進などで敵を攻撃、
スピンターンやジャックナイフからの転回で素早く方向転換などなど…。
酔わないようにカメラワークには注意が必要ですが、とても面白そうです。
あー、その辺が狙いですか。乗馬中の馬での攻撃って少し厄介かもです。 乗馬時の馬攻撃アニメの再生自体は馬ならhandtohandattackforwardpower.kfを そのままSpecialIdle化してPickIdleで可能ですし、バイクも同様にウィリーでも 何でも攻撃っぽいアニメを作って再生すればそれで見た目はOKだと思います。 でもSpecialIdleは単にアニメの再生だけで攻撃の当たり判定(TextKeyの「Hit」)は 実行されないのでその辺を自前でなんとかする必要が。 相手にダメージを与える事自体はスクリプトで適当なオブジェを出してダメージ系の SpellをCastさせたり、Trapオブジェを出してそのままダメを与えたり、TriggerZoneを 出して交差したアクターにModAV2 Healthしたり、みたいに方法は色々あります。 でもそれだけだとダメージ元がPCでは無いので戦闘が始まらず犯罪にもならなかったり します。 この、他のオブジェ起因のダメージをPCがやった事にしてシステムのCrime関係の辻褄 を合わせる、てのが非常に厄介です。 似た様な例で遠距離武器の話が前スレにあるのでそれを。 あと以前ネタでやった事があるのですが、走行中にTriggerZoneを常時前方にSetPos して交差したアクターをPushActorAwayすると通行人を跳ね飛ばしたり出来ます。
>>207 元々モデリング勉強している人ならMAYAやMAXを使っていても全然おかしくないと思うのだけど
オブリのためにMAYAで1から勉強してモデリングしますって訳じゃないでしょ
ついでに言うと今はもう100万もしない、学生用なら更に安価
今で言うならインフェルノくらいじゃないかな
>>216 おかしいなんて一言もいってないような?
nifscriptのこと知らない人が言ったことだし気にしなくておk というか失礼なこと言う輩は大抵自分で作らない様な人種だから放置しれ
高い方ができないことなんてあるの?と言ってるだけなんだから あるんだよ、ならレスになってるけど 高いから使うのがおかしい、なんて言ってもないことにまで 勝手に反論してるのは 傍目には貴方が一人で勝手に深読みしてるように見えるよ それが自意識過剰かなんなのか、私にはわからないけれど
221 :
3 :2010/11/20(土) 11:51:13 ID:o05fszY1
>>215 handtohandattackforwardpower.kf ってまさに
バイクでの圧殺のためにあるような名前のような気が…。
問題はPCが攻撃したことにならないということなのですね。
そのための上手いやり方が見つかったらいいんですけど、
それまではプレイヤーの倫理に任せるということでいいかな…と(汗)
>あと以前ネタでやった事があるのですが、走行中にTriggerZoneを常時前方にSetPos
>して交差したアクターをPushActorAwayすると通行人を跳ね飛ばしたり出来ます。
これ最高じゃないですかw まさにバイクでの圧殺のためにある(ry
うほ、いけないことを想像してしまった…。
すみません、ホイールの別体nifについて質問なのですが、
ゲーム中に可動可能なホイールとして追加できましたが、位置の調整が難しいです。
ポーズModeでRWheelBの位置を後輪の中央にすれば
そこを中心にして回転することはわかったのですが、
ゲーム中でRWheelBの表示位置自体がズレてしまいます。
ひたすらskeleton.nifのNiNode「Bip01 RWheelB」の
「Translation」を試行錯誤するしかないのでしょうか?
>>221 ポーズで位置を調節するからいけないと思う
あらかじめ前輪・後輪・ハンドルとか用のボーンをskeleton.nifに正しい位置で入れておけば、
あとはウェイトつけてボーン操作するだけでいいはず
ボーンを選択してEdit、ボーン以外を削除してSkeletonとしてExportね
文見ると、なんとなくホイールを別nifで追加してるように見えるけど、バイクと一体でいいと思う
全身一体成型でのSkinアニメに切り替えた方がいいんですかね。 車輪みたいな機械的な動きはObjectアニメの方が考え方としては単純なのでとりあえず そっちで始めたのですが。 最終的にはハンドルやらサスペンションみたいな微妙な可動部分を含むボディはSkin アニメで、単に回るだけの車輪は別nifでObjectアニメ、というのをなんとなく イメージしてたので、とりあえずは車輪の回転の話から入って追々Skinアニメの 話になればいいのかな、みたいな心積もりではあったのですが。 でもクリーチャーのパーツ単位でのObjectアニメって手順的に以外に面倒だったり するので、全部Skinアニメの方が分かりやすい、というのであればその方向で。
224 :
3 :2010/11/20(土) 20:59:26 ID:o05fszY1
>>222 申し訳ないですが、手順がよくわかりません…。
Armatureを追加して、Armatureを後輪のユニットの親にして後輪が回るようになったら
このボーン(スケルトン?)と作ったArmatureを以外を全て削除して
nifとしてExportすれば、それがSkeleton.nifになるということでしょうか??
あとはそのSkeleton.nifをImportしてヒトとバイクをImportして、
PoseモードでArmatureを動かしてkfファイルを作ればOKということでしょうか…??
後輪のユニットのWeightは作ったArmatureにつけるといった感じですか…??
>>223 自分にはどちらがいいのか全然わからないですが、色々試してみたいと思います。
>>224 それって
>>51 のサンプルを改造する話ですよね。だとするとその具体手順を人様に
聞いても確たる回答は返って来ない気も。
で、ゲームで実際に使うSkeletonをBlenderで作るのってそれはそれで色々細かな話が
ありますし、Skinアニメってモデルによってはその必要が無かったり負荷的に避けた
方が良かったりする場合もあるですよ。
また今後例えばカウルの色違いVerを作る時とかにnifの分割は結局必要になったりも
しますし。
そういう意味でサンプルでは敢えて全部Objectアニメにして、
>>77 では手始めに車輪を
別nif化してSkeletonをNifSkopeで弄る方法を紹介してます。
あと
>>221 って
>>77 の手順の話だと思うのですが、どっちのモデルの車輪の事です?
モデルの作り方によって車軸座標の調べ方や車輪nifの作り方も変わります。
226 :
3 :2010/11/21(日) 13:42:01 ID:LNvOqKLw
>>225 NR500での話です。。。
他MODで不確定要素が出てきてしまい申し訳ないのですが…。
nifを分割するやり方ですが、
NifSkope上で対象のオブジェクトのグラフィックをクリックして
該当の「NiTriStrips」だけを「Block→Remove」で消して作りました。
これでゲーム上では動作に問題なかったみたいですが、
nif上には設定が残っているみたいでファイルサイズもほとんど変わらなかったのですが、
こんなやり方でいけますか? 作業量が少なくてやりやすかったです。
それとも、BlenderにImportして余計な物を消してExportして、
NifSkopeで加工したほうがいいですか?
>>226 NiTriStirpsだけをBlock→Removeしたのならメッシュの実データはまだnifに残って
ます。消去はNiTriStripsをBlock→RemoveBranchで。
で、まず以前出た方法でy軸正方向が「前」に加工済みでSceneRootのTranslationと
Rotationを全部0にしたモデルを用意して下さい。
操作はNifSkopeでもBlenderでもどっちでも。
車輪部分だけを残して他のNiTriStripsなりオブジェは全部削除を。
Blenderで車輪の全頂点を選択した時のTransformPropertyのMedianが車輪の中心が
どのくらい原点からズレているかの値です。多分。
それをマイナスして車輪を移動すれば車軸位置が原点になると思います。
Skeletonの車軸Boneの位置はそのMedianの値です。
とにかく最終的にNifSkopeで見て車輪の中心が原点でyz平面にタイヤが沿っている
(転がり方向が「前」になっている)状態になればOKだと思います。
でも上の手順はこちらでは実際には試していないので、逆にこれでOKなのか結果を
教えてもらえると有り難かったりします。
あとMarkerBikeの場合は元々車輪は原点を中心に作ってあるのでNiTriStripsの
Translationを0にすればそれで。また車軸Boneの位置はそのTranslationの値です。
228 :
3 :2010/11/21(日) 20:10:09 ID:LNvOqKLw
>>277 やってみたのですが、Blender上とゲーム上で座標の単位が違うように思えます。
1)分割したnifをBlenderで読み込ませ、nifの各メッシュを1つにまとめる
2)編集モードで全選択、TransformPropertyの値をメモして、XYZ全て0にしてExport
3)Skeleton(Edit).nifをNifSkopeで開き、該当部位のNiNodeのTranslationに
先ほどメモった値の+-を逆にして入れる(+-両方試しました)
ゲーム中で確認すると、バイクの後ろ側(Bip01 PelvisBの近く?)に別体nifが固まっているのです。
問題なのは座標の移動量。バイクが宙に浮くのをZ:-50で帳消しにしていますが、
親であるSpineBからのそれぞれの新Boneの移動量が10にも満たないのです。
Blenderだと単位が小さすぎるように見えます(1/10くらい?)。
加えて疑問があるんですが、ゲーム中で例えば<W>+<D>すると右に曲がりながら進みますが、
これは「forward.kf」と「turnright.kf」ファイルをミックスして再現しているのですか??
それで少し考えてみたのですが、
例えば右に曲がる場合、ハンドルがゆっくり切れていき、最大まで切れた後も
曲がっている最中はハンドルは切れっぱなしにしたいのですが、
ということは「CYCLE_LOOP」は使えませんよね?
でも前輪は回り続けるのでこちらは「CYCLE_LOOP」が望ましい…。
解決するには
1)曲がる時は前輪を回すのを諦める
2)曲がる時はハンドルは最初っから最大まで切れている(モーションの変化がない)
3)曲がるモーション自体は1.5秒くらいで、1.5秒から30秒まではモーションは固まったままにする
まさか30秒も曲がり続ける人はいないと思うので、3ならCYCLE_LOOPでも問題なさそうです。
>>228 あ、そうです。忘れてました。BlenderとObでは座標の扱いが違うので1:10の補正が
必要です。
前進後退中の左右方向転換はkfアニメの合成で回るのではなくてシステムが直接Zを
回しているのだと思います。
ゲームで今どのkfが再生されているかはコンソールでtdt、sdt1を。
前進後退中に左右に向きを変える時にPickIdleでハンドルを切るアニメを重ねる、
て事なら車輪の回転はPriorityの指定が適切なら問題無いと思います。
でも、ハンドルが切れ始める短いアニメ→ハンドルが切れたまま固定のアニメ→それを
任意に中断して→ハンドルが戻る短いアニメ、みたいにする場合はタイミングによって
はPickIdleが不発になる事もあるかもなので色々要テストです。
それよかNR500だと一人称時に車体が表示されないんですけど、うちだけですか?
これちょっと原因が謎です。なんか緊急課題な気が。
あー、NR500って各パーツオブジェの原点が全部同じで0なのでPCの視点位置との 関係でオブジェによってはまだ見えていていいはずなのにクリッピングされる可能性が あるかもですね。 これって多分どこかの時点で覚悟を決めてモデル自体に手を入れる必要があると 思いますよ。 オブジェの原点の調整や頂点数を減らしたり一つにまとめたり。また着せ替えに備えて パーツを別nif化したり。 目的に応じた構成にしてゲーム/アニメ向けに色々整備する必要が。多分。
231 :
3 :2010/11/21(日) 22:54:22 ID:LNvOqKLw
>>229 10倍も試してみたのですが、どうやらそれでもダメみたいです。
目視のトライアンドエラーで近づけたものと比較してみます。
※X軸は省略。()の中の数字は「Median * -10」したもの。
前輪:Y:94.0(69.7) Z:25.5(-27.7)
後輪:Y:-10.0(-66.0) Z:25.5(-30.3)
Fフォーク:Y:75.0(47.1) Z:57.0(-68.4)
Medianから出した数字よりも、だいぶ前方へズレています。
推測するに、新BoneをBip01 PelvisBの子供にするのでなくて、
Bip02とかにしたらもしかしたら合う…? とかめっちゃ勘ですがそんな気がします。
あとMedianから*-10したらFフォークがむしろ前輪より下になってますが、
X軸とY軸だけマイナスかけて、Z軸は10倍するだけでいいのかな…?
それでも、前輪とFフォークの高低差が目視とで違ってたり…(汗)
あと自分でBlenderでExportしたものには影がつかないのですが、
UVマップか何かが足りないのでしょうか……??
ハンドルを最大に切っている状態から戻すモーションも入れられるのですか??
それは諦めて、左から右に切るならハンドルがいきなりまっすぐに戻るようなつもりでいました。
確かに、妙な位置でパーツが見えなくなったりします。。。
「3人称視点でご利用下さい」で何とかなりま…せんかねー(汗)
232 :
3 :2010/11/21(日) 23:13:41 ID:LNvOqKLw
>>229 試しに前輪・後輪・FフォークをBip01 PelvisBでなくBip01 NonAccumBの子供にして
XY軸は(Median*-10)、Z軸は(Median*10)したのが以下です。
http://ime.nu/moto4life.web.fc2.com/material/bl12.jpg 前後であるY軸は、あと少しだけ値を小さくすれば大丈夫そう。
でもZ軸は問題ありありで、3つとも絶対的にもっと高くして、
さらに相対的にもやっぱりズレてる…。
Z軸のTranslationはあと1.5倍〜2.0倍くらいしないとダメそうです…。
なんでぴったり位置が合わないのか不思議です…(汗)
特定の武器の攻撃音だけ変更させる方法ってありますか? PSOのファルクローの武器のMODを使っているのですが音もファルクローにしたいんです
>>231 多分こちらの説明が色々足りなかったんですよね。
その車輪の中心座標って車軸位置の「絶対座標」です。
車軸BoneがBip01PelvisBの「子供」になっている場合、指定するTranslationは「親」の
PelvisBの位置の影響を受けます。
目的の座標が仮に0,50,50で親が0,10,10なら子供のTranslationは0,40,40に。
Skeletonの「親子構造」ってそういう事です。とりあえずその辺の確認を。
NR500については具体的な数値を聞かれても分からんです。
また車軸BoneをBip02やNonAccumBの直接の子供にして絶対座標を入れれば確かに位置
は合うと思いますが、PelvisBと動きが別々になってkfを作るのが非常に面倒に。
PelvisBを動かせば車輪を含めてバイク全体が動く、という構造にしたいから親子構造
にする訳で。
あとちなみにハンドルBoneは動物で言えば前足に相当するのでBip01SpineBの子供に
するのが適切な気が。
影はなんでしょうね。分からんです。
モデルに手を入れる件はご自由に。
でも現状の色々な問題ってモデルの表面的な流用で適当に済まそうといるから起きて
いる訳で。基本部分に手を入れない限り今後も苦労し続けそうな気がするですよ。
なんかデジャヴな気もしますが。
>>235 ありがとうございます
普通にあったんですね
便利なページもご紹介下さり、これまたありがとうございました
こんなのがあったんですね
239 :
名無しさんの野望 :2010/11/22(月) 16:46:15 ID:vO0VQsIS
240 :
3 :2010/11/22(月) 20:20:31 ID:GKohylA8
>>238 おおー! 見事に車輪が回ってますね!
>>236 あれから、Bip01 PelvisBの座標分をマイナスしてみたり、
分割する前にScaleを0.8にしていたことを思い出して
座標に0.8を掛けてみたり色々試行錯誤しましたが、結局合わず。
おまけに影が発生しなくなったり、ブレーキディスクの穴が無くなってたり
と色々不都合が多いので、残念ですが可動はなくそうと思います。
車体全体が傾いたり、乗り手が動けばそれで十分です。
これからは各kfファイルの作成、
>>181 を参考に特殊モーションの再生、
>>215 を参考にした乗馬攻撃に取り組んでいこうと思います。
え、やめちゃうんですか?車輪を回すのって結構目玉な機能だと思ったんですけど。
クリーチャーの体パーツを可動させる事と影が出ない事とは関係無いです。これ車輪も
回ってます。
http://shy.jsphr.net/upload/img/ups20581.jpg 多分その穴が無くなるのも別な理由でしょう。恐らく。
で、そのNR500ってよく見ると元々Scaleが0.9だったりで少し状況がややこしいので、
一度SceneRootだけでなく全部のNiTriStripsをTransform→Applyしてから加工すれば
迷わなくて済むかもです。
あとBoneのTranslationの値って単に引き算だけで出るので、恐らく単純に何かを
取り違えているだけな気も。
でも別にもういいと言うのならそれはそれで。
242 :
3 :2010/11/23(火) 01:27:34 ID:pKhO/p0c
>>241 車輪が回ったりハンドルが切れたりすれば大幅に臨場感UPすると思うのですが、
どう悪あがきしてもダメでしたので、ここは退くべきかなと。
実際、車輪はいいのですが、ハンドルが切れると人間側のポーズの修正が大変ですし…。
影や穴の問題は、nifファイルの座標を(0.0.0)にするためにBlenderでExportする際に
何か問題が起きているんだと思います。
自分の力では全くどうにもならないので妥協すべきと考えました。
現在、鋭意kfファイルを置き換え中です。
いやNR500って元々影無いですし、影とExportは関係無いですし、ディスクの穴も そのままExport出来ますし。 Exportに異常がある、と言うのなら先に進む前にとにかくまず環境の整備を。
244 :
3 :2010/11/23(火) 19:55:53 ID:pKhO/p0c
>>243 環境の整備ですか…どうしたらいいか全くわからなくて…。
NifSkopeで必要なパーツ以外を全てRemoveBranchして、
それをBlenderで読み込んで複数のパーツをCtrl+Jで1つのメッシュにまとめて、
Editモードで全選択してプロパティのXYZを0にしてExportしているだけなのですが、
なぜか穴が無くなったり、フロントフェンダーに影がかからなくなって
太陽の方向に関係なく真っ赤だったり…。
また、最初にnr500.nifのScaleを0.8にしてTransform→Applyしたため
その後、0.8の大きさながらScaleは1.0となっていて、
これが座標のズレ(前輪後輪共、前後にはみ出る)の原因かなとか…。
諦めモードに入ってしまいました…orz
>>244 整備ってツール類が正常に動いているか確認して必要なら再インストールとかする事
です。動作の確認はバニラnifのImport/Exportで。指定類はそのnifの種類に合わせて
操作上の間違いが無い事を当然まず充分に確認を。
>>232 のSSを見る限りその前輪って明らかに後輪と同じオブジェな気が。
後輪ディスクには元々穴無いですし。
そのモデルのMatrerialって元々単色フラットなので光源やAmbientの加減によっては
明暗が無いノッペリした単色に見える事もあると思います。
Exportを疑うのでしたらオブジェの移動やMaterialの操作はNifSkopeですればいい
気が。
また全てのオブジェのScaleが1.0なら座標にScale要素が関係する事は無いのでScaleの
事は忘れてOKです。
246 :
名無しさんの野望 :2010/11/24(水) 20:57:38 ID:JhB9tvGz
ものは相談なのですがバニラのモーションで良いので 全てのモーションをBBBに対応させて頂けないでしょうが よろしくでごわす
>>246 ここ作成支援スレだけど、
「頑張ってVanillaのモーションをBBBに対応させます」という宣言とみていいのかな
248 :
3 :2010/11/24(水) 21:19:47 ID:9Gf6yH+F
>>245 Pythonの再インストールをやってみましたが、状況は変わらず…。
Blender 2.49b、Python 2.6.4、PyFFI 2.1.6、Blender NIF Scripts 2.5.5という環境です。
おっしゃる通り、前輪に後輪のnifが使われていました。
なぜか前輪をBlenderでExportできなかったので、Oblivionボタンを押した
デフォルトの設定から「StripifyGeometries」をオフにしたらできました。
しかし座標は相変わらずズレたままで…
http://ime.nu/moto4life.web.fc2.com/material/bl13.jpg NifSkopeで試したら不思議なことが起きました。
Blenderのプロパティで出たnifファイルの座標の数値でNifSkopeで座標を
修正してみたところ、中心になりません。ズレています。
そこでNifSkopeで中心にしてみたところ、Blenderとでの数値と関連性がありました。
(Y座標) NifSkope:55.7900 Blender:69.7900 →約80%
私が馬鹿なやり方をしたせいか、Scale=0.8が問題になっていたようです…。
Blenderで出た値を8掛けして試してみますね。。。
249 :
3 :2010/11/24(水) 22:16:26 ID:9Gf6yH+F
不用意な連投、ムダなスレ汚しすみません。
やはり8掛けでした。
各nifの中心座標は0になっていたので、skeleton.nifでの取り付け位置を
(Blender上での座標 * 0.8 - Bip01PelvisBの座標)
とすることで気持ちいいくらいぴったり合いました。。。
http://ime.nu/moto4life.web.fc2.com/material/bl14.jpg また、フロントフェンダーに影が発生しない、ブレーキキャリパーの色が白になる
などの現象は、BlenderのExportで発生するようで、Blenderを使わずに
NifSkopeでNiNodeのTranslationをいじってズラすことで回避できました。
あとは同様にSkeletonEdit.nifにも前輪・後輪・Fフォークを作り、
それをBlenderで読み込んでPoseモードでそれらを動かせばいいのですよね??
車輪の回転量と進む距離ですが、車輪1回転で、直径の3.14倍の地面を進ませればよいのでしょうか??
kfファイルは車輪1回転分だけの動きのデータ(少ないフレーム数)でOKですか?
「Oblivion装備MOD製作チュートリアル 第二版」に挑戦してみましたが、最初のほうで躓いてしまいました。
「4-4.メッシュの作りこみ」のコピーメッシュを削除するところなんですが、素体?ごと半分全て消えてしまいます。
ソフトはblender2.49bで、femaleupperbody.nifをインポート。
editモードでshift+D→P→A→S→1.05→Enter
この時点でPを押したときに何もメニュー出ませんでした。チュートリアルにはPキー>separatedとあります。
自分のblenderでPがどのように割り当てられてるのか確認したところ、メッシュ→頂点→別オブジェクトに分離とあります。
ただ、Pを押したときに何も起こらなかったので効果があるのか不明です。
shift+Dを押したときは、マウスを動かすと分身が出ます。
チュートリアルでは動かさずにそのままとあるのでそのままにして作業を進めました。書いてある通りの操作はしています。
出来上がったものを見てみると、一応コピーとサイズ拡大はできているように見えます。
ttp://skm.vip2ch.com/-/hirame/hirame128749.jpg ttp://skm.vip2ch.com/-/hirame/hirame128750.jpg しかし、その後「テンキーの「1」で真後ろからの画面になりますので、Bキーで範囲選択するといいと思います。」をやると
選択したつもりの体半分が全て消えてしまいます。内側の素体も選択されてしまっている?
ttp://skm.vip2ch.com/-/hirame/hirame128751.jpg ttp://skm.vip2ch.com/-/hirame/hirame128752.jpg そもそもチュートリアルの画像では素体と網目状の二つに別れていて、自分のようにどちらも網目状にはなっていません。
どの段階で間違えたのでしょうか?内側の素体を残して外側の黄色い部分の選択範囲のみの消したかったのですが…
実作業は1→B→マウスの左クリックしながらドラッグで体半分を選択→delete→削除メニューがでるので頂点を選択。
初歩的な質問かと思いますが、どなたか教えて頂けませんか?何度やり直してもダメでした。
何がやりたいのか全然伝わってこないけど、 範囲選択したらコピーも元も両方選択されるに決まってるじゃないか EditでShift+Dしてコピー、動かさずに右クリックで戻るとコピーの頂点が選択されてるから Gでわかりやすいように移動させた後に元のmeshを削除すれば簡単でしょ Objectモードでコピーして別のレイヤーに持ってって作業した方が楽だけど、まぁやりたいようにやればいいさ もしかしてBlenderのチュートリアルやってないのか?
>>250 Shift+DしたあとEnter押してないだけかな?
shift+D→Enter→P→A→S→1.05→Enter
>>251 ,252
ありがとうございます。shift+dのあとにenter押したら求めるような形になりました!
勉強不足なのでもう一度チュートリアル観直してみます
>>249 とりあえず動いたようで。
上でも言いましたけど「全部の」NiTriStripsでTransform→Applyしてます?
nifのScaleって大元のNiNode(SceneRootとか)だけでなく各NiTriStripsにもあるので
それらを全部1.0の状態にしてからでないと当然色々な面倒が予想されます。
BlenderのMedianってオブジェの現在のScaleとは関係無く1.0の時の値を示すかも。
「前輪をExportできなかった」てのがどう出来なかったのかは謎ですが、Stripify
Geometriesは関係無いと思います。Exportにかかる時間は変わると思いますが。
前輪ディスクって頂点数が凄いみたいなので。
あとフェンダーとブレーキの色はBlenderとnifでのMaterialのパラメータ種類の違い
とかその辺の話でしょう。多分。Exportの問題では無く構造的なものな気が。
必要なら手修正するなりすればそれで。
で、失礼ですけど、いずれの場合もツールではなくて使い方の問題だった気がします。
前にも言いましたが、BlenderはOb専用ツールでは無いので、単にそれっぽい手順なら
自動的に必ず思った通りになる訳では無いです。
ツールの機能や制限、自分が何の為に何をしているかの把握を。
あと、もうBoneの配置は済んだのなら別にいいのですが、ハンドルBone位置はMedian
ではなく回転軸はフレームのヘッドチューブの中心線です。車輪の場合はMedianが
回転軸の位置に等しい、と言うだけで、全部のオブジェがMedian=Boneの位置という事
では全く無いです。
車輪のkfを作る話はそれでやってみて問題無ければOKな気が。多分。
質問なんですが、スクリプト上でクリーチャーの種類を判別する方法ってあるのでしょうか? GetCreatureTypeでUndeadとかって括りは取得できるみたいですが、 どのクリーチャーなのかを取得する方法がわかりません。 そのクリーチャーがBaliwogなのかElytraなのかなど… ※MOD独自にSkeletonから追加したクリーチャーについては判別出来ないと思いますので、 既存クリーチャーについてになります 現状見当たらないので独自にクリーチャー種類別のFaction作って それをクリーチャーのFactionタブに設定して判別できるようにしているのですが、 この方法だともとからあるクリーチャーにも全部登録しないといけません。 もし、クリーチャーがもともと持ってる情報から判別する方法があれば教えてください。
>>255 CompareNameあたりで名前に含まれてる文字列で判定するとか…。
>>256 やはりそれしかないですかね…
CSで分かれてるのはSkeletonのパスとかから判断してるのかなぁ。
だとしたらSkeletonパス取得する関数でもあれば何とかなりそうですがそれもなさげですね。
名前だと怖いのでとりあえず今のやり方のままでいきます。
ありがとうございました。
すみません質問なのですが 武器のリーチ判定を修正しています 武器AとBを地面にドロップした時と装備して構えた時で nifファイルの設定上などでAとBの大きさが違う事はありえますか? (CSでのReferenceの縮尺は使わないとして) 現在MOD武器のリーチを直していまして テストセルにWeaponからドラッグしてFキーで地面に落とし まとめて並べて目視でリーチを直しています でも構えた時はどうなのかな?というわけです どなたかよろしければアドバイスお願いします
>>257 OBSE18にCreatureのModelPathを取得する関数って無かったでしたっけ。
使った事無いですけど。
>>259 GetCreatureModelPathsの事ですか?
どうも説明を読む限りだとModelListにあるメッシュのリストを取得するものみたいです。
でも、Skeletonと同じ所にあるはずなので上手くやればできるのかも…
Will-o-the-Wispとか何もないのでどうなるか不明ですが。
少し試してみます。有難うございます。
>>258 構えてる時は持っている人のScaleに影響されます
落とした時は…試したことないけどScale1に戻されるんじゃないかなぁ
実質リーチの修正はCSからです、これはScaleに影響されません
外見の長さならCS上でTesthallとかで数値合わせて並べた方が楽じゃない
>>261 レスありがとうございます
>外見の長さならCS上でTesthallとかで数値合わせて並べた方が楽じゃない
なるほどそうですね!数値でソートして並べてみます
>>260 アクターのSkeletonのPathを取得するのならGetModelPathでもいいのかもです。
今Spellのスクリプトで少し試した限りでは動いてるみたいです。Will-o-the-Wispも。
でもGetModelPathは特にアクター用では無いと思うのでその辺要テストかもですが。
264 :
3 :2010/11/25(木) 17:44:29 ID:prCNJIKw
>>254 ご指摘の通り、「全部の」NiTriStripsでなくNiNodeでのみApplyしていました。
全てのNiTriStripsでApplyしたところBlenderでも正しい値となりました。
無知すぎて全く申し訳ないです…。
前輪のExportのエラーは「Python Script」のエラーとダイアログが出ます。
「StripifyGeometries」ボタンオフでエラーが起こらなくなりますが、
それで出力されたnifファイルはBlenderでImportできませんでした。
フェンダーとブレーキの色はBlenderにImportした時点でおかしくなり、
これはNifSkopeで「NiMaterialProperty」の色がおかしくなっているのを直すだ
けでOKでした。
Import/Exportの設定で回避できるのかは不明ですが、対症療法で何とかしてい
ます。
265 :
3 :2010/11/25(木) 17:45:55 ID:prCNJIKw
前輪・後輪と違い、確かにFフォークは原点がフレームとの取り付け位置になり ますね。修正しました。 使い方が問題なのは承知しております。 知らない事だらけのところを直感を頼りにした試行錯誤の連続でやってます…。 急いでもしょうがないので、1つ1つ確実にクリアしていくべきですね…。 Boneについての疑問なのですが、SkeletonEdit.nifにImportしたヒトのメッシュは Boneに連動して動きますが、新しくSkeletonEdit.nifに追加した前輪・後輪・F フォークは RWheelBなどのそれぞれ追加されたBoneを動かしても連動しません。 SkeletonEdit.nifにBoneを追加する際は、Bip01PelvisBの 「NiNode」と「NiTransformController」と「NiTransformInterpolator」を コピペして修正して作っているのですが、 どこでそのBoneに相当するメッシュを指定しているのかわかりません。 ただこれはBlender上でBoneを動かしたときにメッシュも一緒に動けばわかりや すいというだけで 手動でメッシュを動かすこともできるので、大きな問題ではないのですが…。
>>265 初めてなら知識が無いのは当然ですしそれ自体は問題では無いです。
問題は安易に出来ないと結論付けて次を急いでまた出来ない、という状況な気が。
前輪のExportでどんなエラーが出てImportが「どう」出来ないかはこれまた謎なので
なんともなのですが、通常は出来ますし、それをなんとかしない限り次の車輪オブジェ
をBoneに追従させる話には至らない気もします。
というかその手順ってご自分の解説サイトに。
またそのモデルについては各操作等の具体手順の提供はご容赦を。
以前手順を詳しく説明したのは自分がUPしたものについての事だったからで、他所様の
モデルについては原則なんとも。
何を対象に「use item it」を指定すると どんなidleをとるかというのを 一覧で見られるような資料はありますでしょうか? CS wikiでも簡潔に済まされていたので…
268 :
3 :2010/11/26(金) 19:45:42 ID:aC+1yb21
>>266 Pythonを2.6.4から2.6.6にしてみましたが、同様にエラーが起こります。
====================================================================
File "C:\Python26\lib\site-packages\pyffi\object_models\common.py",
line 180,in set_value
raise ValueError('value out of range (%i)' % val)
ValueError: value out of range (80114)
====================================================================
Blenderと連動しているウィンドウの最後にはこんなメッセージが出ています。
value out of range…データ量が多すぎるとかでしょうか…??
Pythonの2.6.xは2.6.6が最後で、2.7以降は
Blender NIF Scripts ver.2.5.5側が対応してない様でnifを扱えなくなります。
Blenderで出た座標を10倍した値を使ってNifSkopeで座標修正すれば
Blenderを使わずに前輪のnifを用意できるので、進めることはできるのですが…。
なぜエラーが出るのか…不安な要素です。
武器作りに挑戦してるんですけど、ひと通り出来たと思って装備させてみたら、インベントリ画面や武器を足元に置いた際には 表示されるんですけど、それ以外では剣の鞘みたいにずっと腰に身に付けたままになっていて、武器を構えると透明なままで 何も表示されません。 waraxe.nifにRemoveBranch、PasteBranchした物を使用し、Scaleは1のまま、Normal Mapは作成済みです(BC3/DXT5)。
>>267 ドキュメント化された一覧があるかは知りませんが、各kfとTargetとの関連はCSの
IdleAnimationの「AnimObjectAnims」で指定されてます。
Weapon/Spell類は任意指定ではなく通常操作で使われるkf決め打ちです。
またUseItemAtが各Target毎にどう動くのかが知りたい、という事でしたら、単にkf
だけでなくPackageの各指定も併せての話になると思います。
>>268 前輪パーツ群をCtrl+Jしてたりします?
以前そのモデルに手を入れてオブジェを整理、みたいな話をしましたが、それは同時に
頂点数も減らす事に意味があります。
単にCtrl+Jするだけだと一つのオブジェの頂点数が莫大になって逆に別な問題を招く
可能性が。
>>269 nifのNiStringExtraDataでの「SideWeapon」等の装備個所の指定と、CSのTypeでの
「BladeOneHand」等の動作の指定の不一致かもです。
希望する片手/両手動作と同じ動作のバニラ武器nifとCSの各指定を見て確認を。
>>272 出来ました!ありがとうございます!!
waraxe.nifのNiStringExtraDataってどうしてSideWeaponになってるんだろう・・・
274 :
3 :2010/11/27(土) 14:07:28 ID:7L4qGgCP
>>271 まさにおっしゃる通り、Ctrl+Jで頂点数が莫大すぎたのが問題だったみたいです。
NifSkopeで前輪の座標を先に変更しておき、
その後BlenderにImportしてすぐにExportで3.64MB→1.34MBになりました。
グラフィックの変化は私が見る限りでは全くわかりません。負荷も軽くなりそうですね。
もしよろしければ、Boneにメッシュを連動させる方法を教えていただけないでしょうか?
よろしくお願い致しますm(_ _)m
毎回いうのも面倒でやめたのかしらんが その前にお礼ぐらいいっといたほうがいいんでね
276 :
3 :2010/11/27(土) 17:05:40 ID:7L4qGgCP
>>275 しまった、最近お礼言ってなかったですね…。すみません。
>>271 さんがいらっしゃらなければ一切進みませんでした。
本当にありがとうございました!
これだけ教えていただいてお礼を言うだけでは到底足りないですので、
何か自分にできる作業とか面倒事みたいのがあればやりますので、
何かありましたらお気軽にどうぞ。
自分で考えられるのは、ノウハウの紹介まとめ程度しかないですので…。
バイクMOD作成を主軸にしてその周辺知識まで説明出来れば本望なのですが、
自分に知識がないのでできないという笑えない状態です。。。
>>274 上で言った「頂点数を減らす」、というのはパーツを作り直したりPolyReducerとかで
積極的に頂点数を数〜十数分の一とかに減らす事です。
前輪ディスクの穴なんかはStencilにすれば多分劇的に。テクスチャは車体の地面の影
を出すのいずれ必要になりますし。
またそのうちステッカーとか張りたくなったり痛単車に目覚めたりする事もあるで
しょうし。
今出来る出来ないは置いといて、MODとしての完成度を上げるのならそのうちいずれ
モデルに色々手を入れる事になるかも、という事を頭の隅に。
あと、Boneにメッシュを連動って
>>201 のサイトの「4.BlenderにバイクをImport」と
同じ事では。
MarkerBikeと同様車輪をImportして車軸Boneの位置に移動、車軸BoneのWeight付けを。
>>276 横からだけど。
感謝の気持ちがあるのは、教えてる本人もわかってるだろうから、あんまり
>>275 は気にしなくてもいいと思うよ。
あと、教えてる立場としては、「何か作業」とかして欲しいわけじゃなく、きっと「完成させること」が一番の恩返しじゃないかな?
せっかく教えたのに「途中で断念された」とか、やっぱり悲しいと思うし。
焦らずに、ステップ踏んで頑張って欲しい。
279 :
3 :2010/11/27(土) 21:18:14 ID:7L4qGgCP
>>277 PolyReducerを設定を変えずにやってみたところ、前輪は1.34MBから1.19MBにさらに減少しました。
ただ場所によってはシンプルになりすぎてしまうので、設定とか使い方を試行錯誤してみます。
ブレーキディスクにはPolyReducerでなく、黒い穴のテクスチャを貼ったりする感じでしょうか。
痛単車…! これは激しく目覚めそうです。
これ入れればリアルに注目度10倍増しくらいになりそうですね…。
とてもやり甲斐を感じます。ありがとうございます!
色々手を加えてMODの完成度を出来る限り上げていきたいとは思いますが、
今はPolyReducerで多少サイズを減らすくらいにして、
乗り物として機能するようになった後に
nifファイルをじっくりと修正したいと考えてます。
あ、確かにBoneにメッシュを連動は確かにWeight付けでしたね…。。。
今見たところ、ヒトのメッシュは最初からWeight付けされてるみたいですね。
>>278 なんという温かいお言葉! 自分にはもったいないです!
いくらか使い方は違いますが、「親しき仲にも礼儀あり」というコトワザもありますし、
実際に言葉にしないと伝わらないこともありますし、
言葉にしたほうが絶対にいいと思うので今後は気をつけたいと思います。
MODは必ずや完成させたいと思います。
完成度は置いておいて、完成までの目処はかなり立ってきているように感じています。
>>279 PolyReducerって単にそれだけだと元々あるメッシュの部分的な尖ったエッジが
無くなったりするかもなので、その復元に部分毎にSmooth/SolidしたりModifireで
EdgeSplitしたりが必要になると思います。
エッジの話はBlender操作関連を探せば多分色々見つかる気が。
これっていわゆる「ローポリ化」なんですけど、これはこれで色々大変だと思うので
気長にじっくり行くのが正解だと思います。
あと、Stencilの話はこちらが少し先走りすぎたかもです。
ディスクの穴はテクスチャのAlphaで抜いたり単に穴の絵にしたりで充分な簡略化は
出来ると思います。
それをさらに簡略化してディスクの裏面のFaceも省略してNiStencilPropertyで表側
だけのモデルを裏からも見える様にする手もあるよ、というかなり後の段階の話です。
でもNR500って前輪ディスク裏面のFaceが最初から無いみたいですね。なんでだろ。
ヒトの体nifは元々Skinアニメなのでnifに既にWeightが付いた状態になってます。
車輪はObject単位のアニメなのでWeightの情報はnifには不要なのですが、Blender上で
kfを作る際の操作の為にヒトの体同様なWeightを付ける必要が。
その辺少しややこしくて煩雑かもです。
質問スレか迷ったのですが、 「プレイヤーがワールドスペース(Interiors)内のEditorID(ABC)内にいる場合」 という条件式を教えていただけませんか。 現在はplayer.GetInSameCellですべてのcellを指定して制御していますが、 CELLを増やすと条件文も直さなければなりません。
282 :
3 :2010/11/28(日) 03:16:20 ID:K3GYBy1q
>>280 いい意味で、表からだけ見れるハリボテみたいにすればいいのですね。
バイクが原因で重くなったりするのは嫌なので、ちょっとずつ勉強してみたいと思います。
ただ相当に時間がかかりそうなので、じっくりじっくりと…(汗)
なるほど、以前話題になりましたが、Weight付けにはSkinアニメとObjectアニメの2つがあるのですね。
Skinアニメはnifファイルに最初からWeight付けの設定がされており、Blenderでも最初から適用される。
Objectアニメもskeleton.nifと各nif間でWeight付けの設定はされているが、
BlenderにImportしたnifは自分でWeight付けしないと連動しない…と。
毎度ながらとてもわかりやすいご解説、ありがとうございます!
少しずつ知識を吸収させていただいております。
あのー、idle.kfで首だけPriorityを30、あとは全部99にしたのですが、関係なしに上半身が
近くの生物に向かって動いてしまいます。ハンドルから手が離れるので非常にシュールです。
idle.kfのPriority値は下半身にしか適用されないのでしょうか??
SpecialIdleを活用して回避したりすることになりますか…??
もしかしたら、Blenderの「SetBonePriority」でまとめて設定したことが原因…??
リバーシブルなマント作りたいんですが、 ひとつの面に片面ずつ別のテクスチャを張ることはできますか? 厚みを持たせるしかない?
>>284 自分の知る限り無理かも・・コピーして面を反転、ちょっとずらすくらいしか思いつかないです
ずらすって必要あるの?
>>256 ずらさないと(重なってると)オブジェクトの重なりで
表面でテクスチャが混ざってチカチカしたり見苦しいことになるのでは?
アルファが絡むものだと、オブジェクトが見えなくなって透けてしまったり
便乗質問なのですが
シスター用のケープ装備で外側からみると、ちゃんと黒いのに
内側(裏側)からみると、何もないように透けてしまってるものがあるんですけど
何が原因なんでしょうかね?
装備に厚みはなさそうでした
>>288 meshにNiStenciProperty付け足せば裏も表示されるようになるよ
NifSkopeで適当なNifからコピペすればOK
>>289 おお!
仰る通りの内容で、無事、速攻解決しました
ありがとうございました!
>>284 >>289 も同じような事書いてあるけど、NifのNiStencilProperty→Draw ModeをDRAW_CCW_OR_BOTH(?)にすれば片面表示にできる
装備ならSkinアニメで変形するだろうから、厚みありのテクスチャ両面表示だと曲がった部分に裏の模様がチラつくかも
>>288 Weigh設定されているメッシュの場合、ずらさないほうが不具合が出ない。
表、裏用のメッシュを逆法線で重ねて、NiStenciPropertyが無い状態にすればOK
実際に試してみると理解し易い。
メッシュをコピーしてを表と裏で表示を分けているんじゃないでしょうか テクスチャを分けられる両面ポリゴンは、内部的には頂点を同じくする別ポリゴンだと聞いたことが
294 :
281 :2010/11/28(日) 17:25:55 ID:9V8jl+Bs
295 :
3 :2010/11/28(日) 19:04:21 ID:K3GYBy1q
IdleAnimationですが、一度追加したものに対して親を追加する方法って無いのでしょうか? 例えば、 characters\_male\IdleAnimsの下の階層に"testAnims"ってのを追加してあったとして、 testAnimsの親としてtestParentAnimsを追加するなどです。 CSでtestParentAnimsを追加しておいて TesEditでtestAnimsのRalate#0(parent)にtestParentAnimsを設定したらいけるかなと思いましたが、 CSで見るとツリーがTesEditで修正する前と変わらずツリーが別々に… CSだとこうなるようにしたいです。 characters\_male\IdleAnims |_testAnims ↓ characters\_male\IdleAnims |_testParentAnims |_testAnims 今はこうなっちゃってます。 characters\_male\IdleAnims |_testParentAnims |_testAnims
一番下ずれちゃいました… testParentAnimsとtestAnimsが同階層になってると思ってください。
>>298 SS/MODスレの人かな
同じくMAYA使ってMOD作ってる者だけども、その類のサイトは無いと思っていいかも
使ってるのは2009?
MAYAのバージョンですか?
>>300 バージョンだね
2010以降だとnif pluginが対応してないんでnifへのExportが出来ない
飽くまで自分の踏んでる手順だから参考までにどうぞ
MAYA2009からnifへExport
↓
Blenderで読み込み コリジョン生成 簡単な情報を設定して再度Export
↓
Nifscopeで各種パラメータ微調整 および関連付け
↓
CSで設定 nifとdds dds_nに関連付け esp作成
↓
TES4Editでesp洗い流し
↓
動作確認(→NifScopeで微調整)
↓
.終了
64bit用のMAYA2009だとpluginの読み込みが出来ないんで一応注意
win7の64bit環境でも32bitのMAYA2009を一緒にインストールしておくと便利
慣れない内は既存のnifデータの情報を真似てみるか丸々コピーしてみるといいかも
maya8.5ですね。 nifプラグインをインストールして、ファイルをエクスポートしてNifscopeで読み込んだら一応メッシュは表示されてます。
>>302 メッシュだけかな、テクスチャはどうだろう
もし見えないのであればNifscope上でRender→Settings...→Renderingタブ→Auto Detect Game Patchを
それで駄目ならパスが間違ってるのだろうから、最終調整する時に指定し直してやるといいかも
305 :
3 :2010/11/28(日) 23:26:01 ID:K3GYBy1q
ハンドルの切れ・バンク角・体のモーションを戻す方法が見つかりませんでした…。 通常のturnright.kfは適当なフレーム数でCYCLE_LOOPさせ、 重ねるkfファイルは短い15フレームでCYCLE_CLAMPで一度だけ実行させる。 後者は通常姿勢から最大バンク時までのアニメーションが入っており、Priorityは99で最優先。 前者は最初から最後まで最大バンク時のポーズ。進む距離はなどはこちらで指定。 ゲーム上では、<d>押して右旋回させると姿勢が徐々に変わっていき、 最大バンク時の姿勢のまま曲がり続け、ここまではいいのですが、 それから<d>をどこかで離してもバンクしっぱなしで戻らず、 約9秒以上経っている時に<d>を離すと、ひょっこり通常のidle.kfのポーズに戻ります。 なぜ9秒程度でポーズが戻されるのかわからないのですが、 これのせいで仮に別にポーズを戻すようなアニメを作って実行させたとしても、 2重に戻って変なポーズになってしまうかもしれません…。 もしかしたら、その別に作った戻すためのポーズも9秒で戻ったりして…。 妥協して、turnright.kfだけ使って、徐々に動くというのをなしにして 最大バンクのポーズで固定…としたほうが無難かもしれません…。
>>304 後は地面に置いた時その位置で不動になっちゃうからコリジョンの設定かな
重量とか質感とか当たり判定をここで決める
これはMaya上で出来ないからBlenderに読み込んでそっちでの作業になるね
不動で構わないよって場合は省いていいけど、BlenderとMAYAのnifpluginとでNodeの構造に微妙に差があるから、面倒でも経由した方がいいとは思う
コリジョンの作り方に関しては某氏のチュートリアルにあるからそっちを参考に
もしうまくいかないようであれば、既存の剣とか何か形状の近いもののコリジョンのスケールを拡大して代替しても大丈夫だと思う
307 :
名無しさんの野望 :2010/11/28(日) 23:30:22 ID:+geGqy27
まずメニューを閉じるんだ
>>306 ありがとうございました。
とりあえずチュートリアルDLして頑張って見ます。
>>308 の者です。
MAYAでモデリングテクスチャを作成して、Blenderでインポートしてコリジョン生成
エクスポートしたらテクスチャーが表示されなくなりました。
エクスポの設定を弄る必要があるのでしょうか?
>>309 恐らくパスが間違っているのだと思う
Nifskope上で紫色の花みたいなアイコンがあるから、そこでパスを指定し直してやるといいかも
この時すでにOblivion\Data内で作業するよう心がけておくと楽だね
>>305 上体が回る件は少しややこしいのでとにかくまずは視線関係のシステム動作の充分な
把握を。過去スレを「視線」とか「トラッキング」で。話はそれから。
IsKeyPressed3の話はそれをやってみた結果はどうだったんですか?
その結果次第な気が。
あとCYCLE_LOOPのSpecialIdleの中断はWholeBodyなら「PlayGroup Idle 1」、それ以外
は別なkfをPickIdleで。kf間の補間をゆっくりにするならTextKeyの「Blend」を。
Blendは発進停止の加減速にも使えます。
ただ
>>229 でも言いましたがPickIdleは状況によっては不発になる事もあります。
ですがその9秒問題は多分PickIdleやシステムのせいでは無いと思うので結論を急がず
原因の切り分けを慎重に。
出来る出来ると言うだけではアレなのでとりあえずバンクさせた例です。
http://shy.jsphr.net/upload/img/ups20876.zip この例はBlendで補間の時間を長くした左右にバンクしたSpecialIdleのkf二つを用意
して左右キー押下で再生、解放で別kfをPickIdleして停止しているだけです。
また
>>229 の話はそういう事が出来るか聞かれたので一例として挙げただけで、他にも
以前出たアクターの体各部のスケールを動的に切り替えるのと同じ要領でバンク量を
スイッチしたりも多分。方法は一つでは無いと思います。
>>312 右上のCollision optionsの木目になっている所をMetalにしてやった方がいいかな
後からNifskope上でいくらでも変更は出来るからあまり拘らなくて大丈夫
315 :
名無しさんの野望 :2010/11/29(月) 22:09:04 ID:u0zEpbQM
初めまして すいません版違いを承知で質問させていただきたいのですが、現在ルーセントハートというゲームのMODを作成しています そのゲームは過疎でMODやっている人は全然いなさそうで聞ける相手がいない状態でして、OBLIVIONは同じdds+nifということでツールの使い方等こちらで質問させていただこうと思いました 今は巨乳化をしたいのですが、blender nif script でnifインポート→乳だけリサイズしてエクスポートnif(nifのバージョンはちゃんと元nifに合わせてあります) →ゲームで透明に・・・ 比較したところ元nifでNiTriShapeだったものが編集後はNiTriStripになっていました いろいろググったりしてNiTriStripをNiTriShapeに修正し、NODEの数字も修正してSAVEしたのですが、SAVEすると修正したはずの数字が元に戻ってしまいます やはりゲームでは透明になりました blenderで編集後におかしくなった設定をnif skopeで修正したいのですが設定変更がきちんと反映されないのですがどうしたらいいでしょうか?
>>315 nif使っててもflagや内部の形式が違う場合が殆どだから、ゲームが違う時点で出力の設定も全然異なる
というかまずオンラインゲームのファイルの改変は公式的に認められてないと思うよ
著作物を違法に流用するということがこのゲームでは特にタブーだから話題ですら持ち込まないで欲しい
違法性のある行為を薦めるためにこのスレッドがある訳じゃない
俺も始めて作ったのが100tハンマーなわけだが、それどうやって収めるの? おかげで無難な大きさのハンマーになってしまった
普通に片手権扱いですね。 地面にめり込みます・・・・
>>318 MHFでも納刀状態で地面にめり込んでる装備ごまんとあるし、そこを気にすること無いんじゃない?
どうしても気になるならMHじゃランスは背中に背負うから、2Hや杖の位置に収めるのがいいかな?角度は好きにすればいい
100tハンマーなら召喚武器が合いそう。
刃先・柄と別ポリゴンとして選択できるからスクリプト分かれば帯刀時にMHみたいに短く出来るかも・・・ スクリプトに関しては知識0ですが・・・
>>321 敵の頭上におっことすのかw
マイダス(だっけ)にありそうな気もするけど。
>>316 >著作物を違法に流用するということがこのゲームでは特にタブーだから話題ですら持ち込まないで欲しい
このスレに持ち込むなというのはわかる
けど現実とかけ離れた綺麗事も、、、
TESNなんてmusicpackをはじめ違法アップ品のオンパレードで
日本も一見五月蠅いようでいて
ainmhiボイスのように既成事実化してしまえば
当然のように扱われるようになるし
本来は問題である、バニラファイルの改変配布も
わりと前提になってしまっている現実
>>323 いや、100tハンマーなんて漫画的な物だしいきなり手の中に現れてもいいんじゃないかって事じゃない?
と・・・・技術的なアドバイス以外はちょっと慎んだほうがいいね、自重します。
シティハンターのギャグにあったような。あっちは40トンだったっけか?
328 :
3 :2010/11/30(火) 08:12:15 ID:TgkRCx7E
>>311 おおー!!! これは実に見事なバンクです!
それを目指してやっていこうと思います!
キーワードは「視線」「トラッキング」「Blend」ですね。
ありがとうございます。現在それで色々過去ログなどを探っています。
同時実行出来るSpecialIdleは1つであり、PickIdleで切り替えられるということですね!
まずはこれを試してみたいと思います!
329 :
3 :2010/11/30(火) 16:33:42 ID:TgkRCx7E
>>311 >上体が回る
「Bip01Head」と「Bip01NonAccum」の角度の不一致 => システムが勝手に回す
1)「Bip01Head」を好きな角度に回転させる
2)「Bip01Pelvis」を1と同じ角度戻す
3)「Bip01NonAccum」を1と同じ角度回す
2と3で体の回転量は帳消し、かつ頭と「NonAccum」の回転量が同じなので
頭の向きが変わっても上半身は回らなくなる。
「Bip01Head」のPriorityは低くてもOK。顔が生物に向くだけ。
こんな感じで解決できるでしょうか??
>IsKeyPressed3
これは教えていただいた方法でバッチリでした! ありがとうございます!
SpecialIdleが右バンクしか試していなかったので、一向に戻らなかったのだと思います。
・任意のキーでSpecialIdleが再生され、切り替えられる。
・新しいSpecialIdleが再生されない場合、Idleに戻ったと判断してIdleと同じポーズのSpecialIdle再生
こんな感じでいけるかなーと推測してます。
>TextKeyの「Blend」
TextkeyのValueに「Blend:n」と入れると、nフレームの間、
同時再生中のkfファイルが混ざって再生される…ですね?
これらを全ての(もしくは一部の)kfファイルに入れれば、kfファイル切り替えが滑らかに…!
発進停止の加減速に使えるというのはとてもいいですね。
レースモードみたいのでは、Shiftキー押している間、バイクのSpeedを+10し続け、
Shiftキーを離すと増えた分のSpeedをデフォまで戻していき、
<s>でブレーキで一気にSpeedを減らすとか、<a>や<d>と同時押下で(SpecialIdleで)低速で急旋回とか、
とか、実現できるか全くわからないけど色々なことを妄想してました。
Blend:nが使えるとちょっと楽になりそうです。
MAYAで作ったモデリングをNifファイルにエクスポートして、blenderでインポートすると 余計なエッジが追加されてしまいます。 これを回避することは不可能ですか?
>>317 おお、おめでとう
地面に置いたりは出来たのかな、なんにせよあともう少しだね
>>330 の人は同じ人かな
四角形ポリゴンが三角形ポリゴンになる現象ならnifに限らず起こるよ 仕様みたいなものだと思う
自動机共通形式のfbxなんかでも同じ
>>329 その方法はポーズ等でヒトの頭向きを変えた時の話です。kfでで頭向きを変えると
上体が自動的に追従して体が思わぬ方向を向く事があるのを抑止する方法です。
ご希望の動作は多分、ポーズではなくて何かを注視して自動的に頭の向きが変わった
時にその頭の動きを追って上体が回らない様にしたい、と言う事では。
この二つは似てますけど微妙に違います。なんともややこしいのですが。
で、その方法ですけど、以前何かで後者の状態になった事は覚えているですが、その
時の状況がネタ帳に記載漏れでどうにも思い出せなくて。話はそれから、とか言った
手前非常に申し訳無いのですが、その件はとりあえず保留で。
あと書き忘れましたが、上の例は5フレ程度のIdleと同じ姿勢のkf(Bip02のPriorityは
低い)を用意してバンクのSpecialIdleの停止用にPickIdleしています。
またPickIdleの不発対策なら、OBSEの「IsAnimGroupPlaying」でSpecialIdleが再生
されているはずの時に再生されていない事の判定は出来ると思います。
判定結果を見て再度PickIdleしたり。でもその辺はかなり後の段階の話な気も。
Blendをシフトやスロットルに応用するには移動速度の違う前進のSpecialIdleを複数
用意して逐次切り替え、常時再生の必要がありそうな予感が。
でもそうすると他のバンクとかのSpecialIdleと共存出来なくなるかもです。
Speed変更のレスポンスはスクリプトで遅延を計算してSpeed自体を操作するのが
適切かも。
レースならオーバースピードでコーナーに入ると転倒するとかどうですかね。
乗員やバイクをPushActorAwayで。またIdleAnimationsのGetUpFaceUp/Down指定で
泣きながらバイクを起こすアニメとか出来たりするかもです。やった事無いですが。
同じです。 となるとそのままにするか、blenderで一辺一辺削除するしかないんですね。 blenderでエッジを削除すると面まで消えるから、そのままにします。 テクスチャも作り直さないといけないし・・・
>>333 nifは三角ポリゴンしか使用できないから、削除するのは意味無いよ
Export時にまた三角に変わります
MAYAの時点であらかじめ三角ポリゴンに変換しておくと、
勝手に変換されて意図しないことが起きるのを防げるかも
なるほど、nifファイルは三角ポリゴン確定なんですね・・・
scriptとか全く知識がないですが、自作魔法で波動拳とかサマーソルトキックみたいに動作を伴う物を作ってみたりすることは可能なんでしょうか
337 :
3 :2010/11/30(火) 23:24:38 ID:TgkRCx7E
>>332 頭の向きの件はそうです、頭だけが向いて、他の体は微動だにしないのが望みです。
バイクの場合、動けるのは顔だけだからですが、
最悪動かないとしても諦められる範疇ではあります(乗り手は運転に精一杯だ)。
思い出したらで全然結構ですので、よろしくお願い致しますm(_ _)m
SpecialIdleの切り替えがなぜかなくても、ポーズが通常のidle.kfなどに戻ります。
ただしNR500のスクリプトのGameModeブロックはこんな感じになっています。
set MyKey to 32 ;Dキー押したら
If IsKeyPressed3 Mykey && Keydown == 0
set Keydown to 1
AddItem HondaNR500TurnRight 1 ;SpecialIdleの開始条件ファイルを1つ与える
PickIdle ;ただし開始条件は「1つだけ」持っている時
ElseIf IsKeyPressed3 MyKey == 0 && Keydown ;これはPickIdleの連続実行を防ぐため
set Keydown to 0
RemoveItem HondaNR500TurnRight 9999 ;トークンアイテムを0個に戻す
endif
338 :
3 :2010/11/30(火) 23:26:23 ID:TgkRCx7E
各SpecialIdleアニメにBlend: 15としたら、かなりいい感じに 切り替えが滑らかになりました! ありがとうございます!! PickIdleの不発発見は、おっしゃる通り各PickIdleの後に「IsAnimGroupPlaying」で 個別に判定すればできそうですが、よく考えたら、どうやら私の環境では 同じキーを押し続けていてもトークンアイテムの入手が何度も実行されているようなので、 もっと後ろの方にPickIdleを1つだけ書けばいい上、 不発を探す必要がないかもしれません。 もっといいスクリプトの書き方があるのかもしれませんが…。。。 Blendは切り替えの滑らかさに使うくらいにして、Speedをいじるほうが良さそうですね。 >スクリプトで遅延を計算してSpeed自体を操作するのが適切かも。 Shiftキーの押下で加速/惰性をトグルしてスピード調整とか、色々考えられますね! 想像するだけで(作るのが)楽しそうです。操作性悪くてクレームがきたり…(汗) いいですねー、事故死。高所から落ちるみたいなダメージをプレイヤーに与えるとか。 無駄にノーマルモードとエキスパートを用意して、後者だと事故が起こるようになります。 でもちょっとアドバンテージもあります…とか。。。 「泣きながらバイクを起こす」これ笑いました(笑) 是非とも実現したいです!
339 :
3 :2010/12/01(水) 00:00:10 ID:+VotEKUE
>>332 追加で質問すみません。
現在、「TurnLeft/Right.kf」の「Bip02」で座標位置の調整(少し前進しながら回転するため)、
重ねるSpecialIdleの「Bip01NonAccumB」でバンク角の調整を行っています。
ここに回転速度(Z軸)をもっと速くしようと、「Bip02」で回転させたところ
バイクは速く回転しているのですが、人間側の回転速度に変化がなくカメラ位置がずれてしまいます。
また降車した時もキャラが変な方向を向いており、バイクの角度と同期していません。
そこで「ActorParnt」も「Bip02」と同量の角度を回転させたのですが、効果がありませんでした。
乗り手をバイクと同期させる方法、またはカメラ位置を調整する方法はありますでしょうか??
ちなみに、SpecialIdleのPriorityの関係で「Bip01NonAccumB」は使えません。
質問をたたみかけて大変申し訳ありませんが、どうぞよろしくお願い致しますm(_ _)m
全く作れるスキルとかないんだけどやろうと思ったらディアブロみたいなランダムダンジョンってできるのかな? いや、ディアブロ引き合いに出したけど全然やったことないんだが とにかくローグな雰囲気のダンジョンあったら楽しそうだなあって思って、それに纏わる街とかクエストとか妄想してて もしできるなら一から勉強しようと思って
バニラで一通りちゃんと動いてたのでちょっとだけMod作成をしようと思って色々調べてみたけど CS(であってる?公認エディターのあれ)の理解度が低いので ゲーム最初から持ってる魔法を別効果のものに置き換える程度の事しか出来ない・・・ ものすごいド素人的質問で申し訳ないけど 最初から装備を持たせたり魔法を覚えさせるのってどうすれば・・・? 人のMod見てみてもちんぷんかんぷんで頭がスパークしそう
>>342 ありがとう!
BUDってランダムダンジョンだったのか
今からCS覗いてスクリプトと戦う作業に入ります・・・
>>342 まさかこんな時間に丁寧な即レスが・・・
参考にしつつ精進します 大感謝
>>342 >>344 続き...
と思ってCS日本語ヘルプ(の跡地?)に見に行ってきましたがアクセス不可でした 一応ご報告までに
本家?のTES CS WIKI へぐーぐる翻訳先生と一緒に行ってみたらカオスな事になったけど・・・ちょっとMy脳と格闘してきます
>>296 完全スルーって事は方法がないって事なんでしょうか?
うちは問題なく出来るし どこかやり方をミスってるんじゃないか、prevが残ってるとか FormIDも親>子で昇順になってないとエラー出るし、できるだけCSで編集した方が良いと思う
>>337 申し訳無い、ちょっと文意が分からないです。
思った通りに動かないけどこのスクリプトで合ってる?、という事なのか、
これで思った通りに動いてるよ、という事なのか。
いずれにしろ目的とする動作をまず具体的に教えてもらわないと。
こちらは質問個別にその都度単発的に答えているだけで、今現在
>>337 さんが何を
目的に何をしていて何が問題なのかの詳細の把握は出来てはいないですよ。
また通常のIdleに戻る、という事ですが、システムが今再生しているkfとのPriority
でSpeccialIdleが停止した様に見える事もあるのでtdtで再生中のkfの確認を。
PickIdle不発は多分2つのSpecialIdleが切り替わる時に一時的にSpecialIdleを2つ
同時に再生している状態になり、その時にさらにPickIdleすると起きると思うので、
それが問題になる状況以外では関係は無いと思います。
>>339 Bip02は原則回転させない方がいいかもです。回転させると多分アクターの向きと
移動の方向が妙な事に。
Turnの速さを変えるならGameSettingの「iHorseTurnDegreesPerSecond」を。
デフォは45度/秒です。
また馬の足踏み旋回みたいなその場回転的な動きではなく、操舵輪での最小回転半径的
な事をするのでしたらTurnのkfでのBip02の前進量とiHorseTurnDegrees〜との調整で
多分。GameSettingはスクリプトから動的に変える事も出来ます。
で、SpecialIdleでのバンクって最終的に走行中に必要になるだけでTurnの時はそのkf
でバンクすればいい気がするのですが、今Turnの時にSpecialIdleでバンクさせている
理由ってなんですか?
ゆっくりハンドルを切る繋ぎの動作の為ならBlendで良さそうな気も。
またTurnも走行もバンクはSpecialIdleで統一、みたいにすればなんか共通化出来て
良さそうに思えるかもですが、SpecialIdleでのバンクはいわば苦肉の策で今後不発
問題が起きる可能性もあり共通化にはあまり適していない気も。
351 :
3 :2010/12/01(水) 15:41:38 ID:DrdnjWvt
>>349 理解に苦しむ文章を書いてしまい本当にすみませんm(_ _)m
turnright/left.kfにはおっしゃる通りSpecialIdleは必要なかったですね…。
以前はBlend:を知らなかったので、ポーズのゆっくりな変化をSpecialIdleを重ねて
実現するしかないと思っていたので、それで無駄にバタバタしてしまいました。
重ねるSpecialIdleには、Forward(歩き)やFastForward(走り)の時の
左右回転にしか必要なかったですね。
その際は同時押しを感知することになりますが、それは
==========================================
set MyKey1 to 17
set MyKey2 to 32
If IsKeyPressed3 Mykey1 && Keydown == 0
If IsKeyPressed3 Mykey2 && Keydown == 0
==========================================
こんなやり方でできるのでしょうか…??
すみません、HotkeyMODを見てもよくわからなくて…m(_ _)m
いずれバイクの設定とかをプレイヤーが切り替えられるようにするなら、
この辺りの知識は必須になりますね…。
ちょっとずつMODを見たりCS Wikiを読んだりして勉強しておきます。
回転速度は「con_SetGameSetting iHorseTurnDegreesPerSecond 75」のようにして
スクリプト中で変更することができました!! ありがとうございました!!
>>351 結局
>>337 ってどういう意味だったんですか?
いや別にもういいならそれはそれで構わないんですけど、でも走行中もそれと全く同じ
事をするのでまた同じ話になりそうな気も。
で、今キー検出の方法に話を広げると混乱しそうな気がするので、とりあえず
スクリプトの先頭にこの三行を。
if IsMovingForward == 0
return
endif
これで前進走行中以外は以降のスクリプトは実行されなくなるので、今までやって来た
事をそのまま走行中だけに適用出来ると思います。
とりあえず走行中にバンクさせてみてSpecialIdleの挙動と操作の充分な把握をまず。
スクリプトを教えてください 不特定のNPCがある装備(仮にAとする)を装備すると魔法(script effect)が発動する スクリプトを作ろうとしています。 vanillaにも存在する装備にも適応させたいと思い、装備ごとにスクリプトを設定するObjestタイプ ではなく、Questタイプで判定させようとしています (Actor).GetEquippedObject 装備部位 とか (Actor).GetEquipped ID のActorの部分です。 Questスクリプトでは GetSelf は使えないみたいなので良い方法はないでしょうか?よろしくお願いします
354 :
352 :2010/12/02(木) 00:33:19 ID:01LMb4kK
途中の文章が抜け落ちてました('A`) (Actor).GetEquippedObject 装備部位 とか (Actor).GetEquipped ID のActorの部分です。 ↓ 装備しているNPCをActorとすると (Actor).GetEquippedObject 装備部位 とか (Actor).GetEquipped ID のActorの部分です。 です。よろしくお願いします('A`)
355 :
353 :2010/12/02(木) 00:34:33 ID:01LMb4kK
そして名前を間違えた・・・ 354 = 353 です('A`)
>>348 IDの値とかが影響してたのかも知れません。
親用のツリー作った後にTESEditで子にしたいツリーをコピーしてRalate変えたらいけました。
アドバイス有難うございました。
357 :
3 :2010/12/02(木) 07:07:22 ID:ca4SFhX+
>>352 >>337 は「SpecialIdleの切り替えがなくても、なぜかポーズが通常のidle.kfなどに戻る」
ということで不思議だったので、スクリプトがおかしくないか一応書いてみました。
でも結局turnright/left.kfにはSpecialIdleは必要ないということで取り下げました。
スクリプトも無茶苦茶です(汗)
SpecialIdleの切り替えがよく分かっておらず、試行錯誤してようやくできました。
・SpecialIdleにはCYCLE_LOOPを使う。CYCLE_CLAMPだと切り替え不可
・1つのSpecialIdleにつき、PickIdleは1回だけ行うべし。
>>352 様のおかげで、今とても順調に動いています!! 本当にありがとうございます!
後で少し動画を撮ってアップしてみたいと思います!
>>353 ある装備Aが特殊で1つしかない装備で、questscriptっで処理したいなら、
武器にscript貼って
scn wepon
begin onadd
set quest.who to getcontainer
end
questに
scn quest
ref who
という感じでActor部分を入れられます
不特定多数なら、OBSEのsethandler使って、onaddかonequipが使いやすいと思う
359 :
3 :2010/12/02(木) 18:53:11 ID:ca4SFhX+
おお〜すごいですねー 自分は部外者でしたけど、形にしたあなたとサポートした方々のやりとりはこのスレの財産ですよ〜みなさんGJです
>趣味でヘヴィメタを入れてしまったので、 あんまニコ厨がどうだといいたくないんだが 動画をやる人って、なんでこんなにナチュラルに 音楽を違法使用するのかね
363 :
3 :2010/12/02(木) 20:22:29 ID:ca4SFhX+
>>360 ありがとうございます! 動画説明文にもある通り、
このMODの9割(以上)はここの住人様のおかげです。
あとNR500をアップしてくれたオリジナルMOD様も。
このスレの財産とは大変身に余る言葉です。すげー嬉しいです!
>>361 申し訳ないですが、荒れる原因になるのでやめてもらえると助かります。
>>362 できれば荒らしたくないです。
364 :
353 :2010/12/02(木) 20:24:00 ID:01LMb4kK
>>358 ありがとうございます。
やっぱり装備自身にスクリプトつけたほうがいいかなぁ。
vanillaの装備(その系統全て)にも反映させたいけど、あまり装備自体は
触りたくないなぁと思って、先にCompareMaleIconPathでその系統一群を括
っておいてと思ったのですが・・・一個一個貼っていくのがスゴク大変です('A`)
ライバッシュのタグでスクリプトだけ反映させることって可能でしたっけ。
ところでOBSEのsethandlerは新しいものです?
検索してもひっかからなかったです・・・
>>363 >申し訳ないですが、荒れる原因になるのでやめてもらえると助かります。
あんたこそ音楽の違法使用をやめれば?
他人のせいのような口ぶりで、盗人猛々しいな
>>359 おー、これはすごい。
Ver1.0のリリースは近そうですね。2で攻撃が出来る様になって謎の敵ライダー登場、
Episode3でサーキット兼闘技場で因縁の対決、みたいな展開が個人的に大好きです。
>>337 の件は、そのスクリプトだとCLAMP、LOOPいずれにしろその仰る結果にはならない
はずなので、状況に謎が多く少し引っ掛かってました。解決したのならそれで。
CYCLE_CLAMP再生中もPickIdleが不発になるかもです。
別なkfをPickIdleする以外に現在のSpecialIdleを単純に停止する方法があれば今後
色々楽になりそうな気がするのですが、どうにも無さそうな雰囲気も。
367 :
3 :2010/12/02(木) 20:55:40 ID:ca4SFhX+
>>366 ありがとうございます!! 本当に
>>366 様のおかげです!
とりあえず全ての基本モーションkfができればVer.1.0としては出せますね!
謎の敵ライダー笑いました(笑) 攻撃で妨害も可能なサーキット! いいですねー。
>>337 のスクリプトは現在もっとシンプルに改良して、問題なく動いてます。
1)IsKeyPressed3で分岐
2)PickIdleする前に、既にそのSpecialIdleが再生中かどうか、変数調べる
3a)再生していないならPickIdleして、変数に該当番号を入れる
3b)再生しているならスルー
9)SpecialIdleがもはや必要ないなら、Idleと同等のものを一度だけPickIdleさせて戻す
現在はこんな感じです。
CYCLE_LOOPでは必ずPickIdleが不発になるようです。
終了フレームまで再生され、解除されます。
368 :
3 :2010/12/02(木) 22:19:57 ID:ca4SFhX+
>>367 すいません、PickIdleが不発になるのはCYCLE_LOOPではなく「CYCLE_CLAMP」でした。
話は飛びますが、Episode4ではサーキットで蹴落したはずの因縁のライバルが
痛単車仕様で大変痛くなって復讐に来るなんていいですね。どうしてこうなった。
おお、動画拝見させてもらいました。 形になってきてるw 苦労してたタイヤ部分もちゃんと回ってるし、速度もそれらしく見せれるぐらいにみえるので、いい感じですね。 Ver1.0の公開楽しみにしてますw
370 :
3 :2010/12/03(金) 00:00:13 ID:YtRboxkt
>>369 自分なんかがこれほど温かいお言葉をいただけるとは思っておりませんでした。
速度は迷ったのですが、このくらいが使い勝手がいいかなーと思って。
レースモードではもっと爆発させたいです!
早くVer1.0完成できるように気合入れて取り組んでいきたいと思います。
動画みたよ! これはすごいね、ちょっと感動したよ。
372 :
3 :2010/12/03(金) 18:47:48 ID:YtRboxkt
>>371 おお、感動されるほどでしたか! これから完成度を上げていきたいと思ってます。
すみません、SpecialIdle(horsemount.kf)でのサウンドの再生なんですが、
CSでNR500の「LeftFoot」にChance:100でサウンドを設定して、
kfファイルのTextkeyに「Enum: Left」や直接「Sound: HondaNR500Ignition」
と設定してみたのですが、一向に音が鳴りません。
ヴァニラの「bowattack.kf」と同様の「Sound: WPNBowDraw」でも鳴りませんでした…。
以前、馬モーションを流用した際の足音を消す際にもなぜかできなかったですが、
何か問題になってそうな所とかありますでしょうか…?
kfファイルでサウンドのタイミングを調整出来ればとても楽になるのですが…。
373 :
3 :2010/12/03(金) 20:15:33 ID:YtRboxkt
>>372 すみません、今試してみたら鳴ってました。
どうやらものすごく音量が小さく再生されていたみたいです。
大変失礼致しました。
家的なMODを作成中なのですが、疑問点があります。わかれば教えてください。 何もない空間に島を1つ その島から飛び降りた場合、 同じ島の上や、指定した場所に戻ってこさせるにはどうしたらよいのでしょうか。 ミダスのアストラル界等を参考にしたのですが、いまいち仕組みがよくわからなくて・・・
こちらで良いか迷いましたが質問させてください。 ・重くなった為OBLIVIONの再インストール。 ↓ ・tes_construction_set_1.2.404+TES_CS_1.2.404_Jplus_090411をインストール。 ↓ ・WryBashインストール。 ↓ ・各種MODをインストール。 とここまで来てCSを起動し、NPCの編集をしようとEditor IDをダブルクリックしたところ、 キャラデータのウィンドウの右端にプレビューの画像が表示されず、 また、コピーボタンを押すとクラッシュしてしまいます。 再インストール前は平常に動いており、色々とググって見たのですがお手上げです。 どなたか解決方法分かる方いらっしゃいますか??
MOD本体というよりはテクスチャなのですが質問です 既存のテクスチャにグラデーションをかける方法はありますか? 現在GIMPとPain.netを使用しているのですが、イマイチ良くわかってないんです。 改めて塗るのではなく、既に塗られている色そのままに、フィルタのようにグラデーションをかけてみたいんです。 もし分かる方おられましたらよろしくお願いします。
377 :
375 :2010/12/04(土) 22:39:18 ID:onCP0jvP
375です。 書き込み忘れましたが、 ・Windows Vista x64 Business、 ・OBLIVION本体はsteam版です。 CS以外は問題なく動作しています。
>>375 もしそのNPCが追加種族の場合、
該当ESPを読み込んでおかないとフェイスデータが表示できずにクラッシュすることが多いけど、
それとは違う?
>>378 Vanilla種族もMBP追加種族もダメですね。
読み込みまではしてるっぽいのですが、
プレビューの下のFullとFaceのチェックボックスがグレーアウトして
選択できない状態なんですよね。
NPCにTail属性の服を装備させたいのですが CSでどのように設定すればできますか? 教えていただけたら幸いです。
381 :
353 :2010/12/05(日) 00:14:08 ID:X5BhP9Io
初心者の質問ですがすいません CSでLop-EarsElf等の追加種族のNPCを追加して遊んでいたんですが X117系のNPCを導入しプレイすると体が伸びた様に表示され 人ではなくオブジェクトの様になってしまいます(動かない) x117系のものは通常と同じ方法では駄目なのでしょうか?
正しいことを言っているはずなのに完全スルーで荒らし扱いのID:mKuWBf+9かわいそうです(´;ω;`)
今更蒸し返す辺りお前は間違いなく荒らしだけどな
これがオブリ系スレの実体だからな
>>324 が綺麗事ってのは、そういうこと
>>374 島の下にトリガーゾーンを配置し、飛び降りた人が引っかかるようにしておく
OnTriggerブロックで拾って、島の上にmovetoするスクリプトを付ける、というのでどうだろう
ここってMOD作成支援スレだよな 間違って全力スレでも開いちまったのかと思ったぜ
興味ない話題でバイクも興味なかったのでスルーしていたのですが、 何度もぶり返されるのもつらいので 一応ニコ動はジャスラックを通して海外の楽曲に対しても使用量を払ってます。 ただし、ジャスラックもニコ動も完全に信用できるかといえばそれには疑問符がつきますが・・・。 ニコ動は利用者の利便性を図るためにこのような仕組みをとっていますので、 もし対応漏れの楽曲を使用してると気づいた場合はジャスラックかニコ動に対して異議を言う必要があります(違法性があるとわかればすぐ削除してくれます)。 著作権が誰のためのものかを考え、もしジャスラックとニコ動がその権利をないがしろにしている(著作者に対価を払っていないなど)と感じた場合、 1利用者に文句を言うよりジャスラック、ニコ動に直接話をしたほうが著作者の権利を守ることにもつながります(運営のあり方に異議のある場合もあるでしょう)。 いいですか、誰のための著作権なのかをよく考えて誰を相手にすればいいのか間違えないでください
要約すると、どんどん違反してもいいお^^って事ですね
>>388 思いっきり誤った知識で訳知り顔で語ってしまってますよw
ニコニコの包括的提携の対象となっているのは
「歌ってみた」「演奏してみた」といった
元のソースを使わない実演系の動画です
元の音楽ソースを使用したものについては、包括使用の対象にありません
個別に別途契約を結んで使用しない限りは
全て、考えるまでもなく、対応していません
前提が完全に間違っているので
利便性・対応内外どうこうのくだりは、完全な貴方の妄想にすぎません
問題は、このスレに持ち込むことを、このスレとして許容するかであって
音楽を使用した動画をアップし、このスレにアドレスを貼って
このスレに持ち込んでくる当人に何もいうなというのも
全くもっておかしな、噴飯ものの言い訳です
OBSE経由でCSを起動しようとしているのですが、「FIle'Better Cities.esp'is not a vaild TES file. と出て はい いいえ キャンセル どれを選択してもすぐにCSが落ちてしまいます。 どのようにすればよいのでしょうか。。
すいません、391の件については自己解決しました。 現在、海外の文字化けしているMODのクエストダイアログを日本語化しようとしているのですが、 トピックを開くと必ずCSが落ちてしまいます。 翻訳している方とかはどのように開いていますか?
>>392 俺は翻訳はしてないが
wiki jp 避難所の Tool - その他 にesp/esmダイアログ入手ツールへのリンクがあるよ。
十分に友好度の高い雑魚敵NPCを、説得して所属していた敵組織と戦わせるMODを考えているのですが 組織メンバー同士は友好度+100があるため、脱退させようと考えました。しかし Getclassでクラスを一発で取得出来るのに対し、Faction(所属組織)については一つ一つ組織を指定し、 それに入っているか否かを返答させるコードしか見つけられませんでした。 また、Factionの変更はリスポーン後にも適用されるようで、単純にFaction脱退だけをさせるとリスポン後も同士討ちをしてしまいました。 そこで考えた方法が ・友好度チェックの後、追加した重量0、プレイヤーに見えない服(フラグ)をNPCに入れる魔法の追加。 ・GetFirstRefを使って近くのNPCを認識し、服(フラグ)を所持していて、尚且つ指定したBanditやVampire等の「一般的な雑魚敵」の組織に属している場合に それらから脱退させ、新たに追加した代替Factionに所属させる。 また逆に、代替Factionに所属しているのにリスポーンして服(フラグ)を持っていないNPCには、 代替Factionから脱退させ、元のFactionの元のランクに所属し直させるクエストスクリプトを常時走らせる。 というものでした。しかし常時走らせる上にランク・組織ごとに十数個ものif文を重ねる事になりますので、負荷がかからないか心配です。 このままで大丈夫か、それともより賢い方法がないかご助言を頂けないでしょうか? 長文失礼しました
>>375 Face、Face Advancedタブを選ぶ前に、右下のPreview □ Full □ Head どちらかのチェックボックスをOnにする
で不正終了しないようになりませんか?
>>394 createfullactorcopyするとfactionがクリアされるので、これを使うのはどうでしょうか?
雑魚NPC相手に使うということなので、説得された本体はdisableしておけばrespawnで消えますし
>>396 レスありがとうございます!早速コンソールにてCreateFullActorCopyを手近なBanditに試させて頂いたのですが
CSwikiにも「Factionデータは写されない」と書かれている筈が、コピーNPCもBanditのFaction(BaseID:177e3)に所属していました。
これはコンソールから使用した場合の特異な状況なのでしょうか・・・?一応下記CSwikiにも似たような報告が載っていましたが
ttp://cs.elderscrolls.com/constwiki/index.php/Talk:CreateFullActorCopy もう一つ、ガードや野盗等の名前のないNPC(Generic NPC?)は、リスポーンする度に次々と新たなBaseIDを持って生成されるため
たとえDisableで消し続けても、そのうちID数分を使いきり野盗が出なくなってしまう… という事は起こらないと考えて宜しいでしょうか?
もし違うならばDisable後にまたクエストスクリプト等でEnableしなければならないとは思いますが・・・宜しければご助言お願いします。
>>397 ちょっと横からレスをして申し訳ないけど、そのURLには全く逆のことが書いてある
CreateFullActorCopyはFactionをクリアしない
だからプレイヤーのクローンを作ったとき、ファクションの情報をクローンから取り除いておかないと、
クローンを攻撃したときや盗みを働いたときにギルドから追放されるかも
>>398 中間辺りで、暫くしてからチェックをかけると派閥を脱退している、とあるからエリア切り替わるまで、とかの制限つきとか?
short fnum
ref nfac
set fnum to getnumfactions
while (fnum)
set nfac to getnthfaction fnum
setfactionrank nfac -1
set fnum to fnum + 1
loop
このscriptは試してないですけど、copyactorのfactionをクリアしてしまえば確実ではないかと
脱退させるから、3行目はset nfac to getnthfaction 0になるかも
>>397 leveledcreatureなら、このobjectが敵を出してるだけなので平気だと思いますけど
ガードみたいに直接配置されてると消えっぱなしになるから、disableのあとkillかけるのはどうかな
loop止まらない気がした。何度もすいません。 short fnum short num ref nfac set fnum to getnumfactions while (num < fnum) set nfac to getnthfaction num setfactionrank nfac -1 set num to num + 1 loop
すみません、質問させてください。 オブジェクトから物理干渉を取り除くにはどのようにすれば良いのでしょうか? 本来動かせる小物等をその場に静的なオブジェクトとして固定したくて、 イメージとしては、バグ状態の絵筆が分かりやすいかと思います。 nifskopeだけでできるのでしょうか?それともblender等が必要になるのでしょうか?
>>397 横からですけど。
Factionの変更はRespawn以外にも同じBaseIDのアクターが複数同時に存在する場合も
多分問題があったりで話がどんどんやこしくなりそうな気が。
なのでFactionではなくその改宗アクターの他の同Factionの各アクターに対する
Dispositionを直接変更した方が早いかもです。
GetFirst/NextRefや範囲魔法で周囲の同Factionのアクターを検出して-100するとか。
またその他のアクターのDispositionも適切に変更すれば、その改宗アクターを一気に
袋叩き状態にしたり実際に攻撃が起きてからの助太刀動作にしたりも。多分。
あと、もしそのその改宗アクターを他の場所にも連れ出す、という事だとまた話は少し
変って来るのでその際はまた。
>>401 NifSkopeで出来ます。
とりあえずそのnifのbhkRighdBody→MotionSystem以下4つのパラメータを適当な
Staticなオブジェのnifと同じにすれば「絵筆バグ」と同じ状態にはなると思います。
きちんとStatic化するならLayer、LayerCopyも「OL_STATIC」に。
blenderに関する質問です blenderの2.49bを使用しているのですが6角柱メッシュを生成したときカメラをテンキーで水平、垂直位置にして生成しても微妙に斜めになるのですがこれは仕様でしょうか?8角柱や4角の場合はカメラに対して水平垂直に生成されます 実用上は8角柱か四角形を作って変形させればいいので問題ないのですが少し気になったので
>>403 ありがとうございます
今までdetailの存在を知らなかったので、目から鱗でした
1人称視点の目線の高さを変更したいのですが Data\Meshes\Characters\_1stPerson\skeleton.nifのどこで設定されているのか場所がわかりません ご存知の方教えていただけませんか?
>>406 確かカメラnodeがあるんじゃなかったっけ?頭の辺り
目線の高さは確かにそのSkeletonの「Camera01」の位置で決定されますけど、でもその
座標を直接変更してもゲームには反映されないですよ。
>>406 とりあえず手っ取り早く変更するならそのskeleton.nifのSceneRoot→Scaleを。
直接変更が反映されない理由は特にCamera01だけに限らない別な話なので必要でしたら
また。
あと0.2とか極端にScaleを下げると腕が見えなくなったりの問題が起きるかもです。
目線を極端に上下させたり動的に切り替えたりする場合は別な方法もあるかもなので
その際はまた。
409 :
3 :2010/12/08(水) 21:02:10 ID:TLmz10Yv
>>409 おー、ついにVer1.0が。バンクがいいかんじです。
スクリーンの半透明化はNiAlphaPropertyの追加で行けると思います。
あと走行音はSoundオブジェをMoveToでも行けるかもです。
適当なタイミングで音オブジェをDisable→PCかバイクにMoveTo→2フレぐらい待って→
Enableで。音ON/OFFはEnable/Disableで。
一人称時に車体パーツが消えたりするのはそのパーツの原点位置の関係です。多分。
対策は各パーツオブジェの大体中心に近い位置が原点になる様にその全頂点を移動、
オブジェ単位で元の位置へ移動で。車輪でやった事と似てます。
また一人称時のPCの腕は一人称肩越し視線MODみたいに「con_Show1stPerson」で
一人称時にも三人称モデルを表示、みたいな方法も。
その場合多分カメラ位置が問題になると思うのですが、一人称Skeletonの変更がOKなら
カメラ位置を動的に変える事は可能です。
著作権違反の動画も消してもよカス
>>411 何も出来ないカス以下の存在が雑音がなりたてるんじゃねえよ
さっさと消えちまえよ臭せぇから
オメエみたいな存在は朝鮮人の肛門にこびりつくクソ以下の価値しかねえよ
俺にレスするのもやめてくれよ
魂が汚れちまうからよ
>>409 完成オメです!
オブリの可能性を感じさせる素晴らしいMODだと思いますよ
>>409 いいですねーー
これ、Youtubeに動画もアップしてTESNにも貼った方がいいと
思いますよ。動画観ればMODの完成度もより伝わりますし。
415 :
3 :2010/12/09(木) 14:56:09 ID:jzSC70vC
>>410 毎度ながら、適切なご助言ありがとうございます! 試してみます。
nifファイルの修正はかなり骨が折れそうですが、ハンドル周りだけでもやっておきたいです。
>>413 ありがとうございます!
確かにバイクまで登場できるのですから、Oblivionの可能性は凄まじいですね。
>>413 もう少し改良したらYouTubeに動画を投稿してみたいと思います。スクリーンとか…。
416 :
3 :2010/12/09(木) 20:22:24 ID:jzSC70vC
>>410 スクリーンの透明化は、「NiTriStripsを右クリック>Block>Insert>NiAlphaProperty」して
NiTriStripsのPropertiesでそれを指定してからNiMaterialPropertyのAlphaで変更できました!
本当に勉強になります! ありがとうございます!
Soundオブジェですが、これはWorldObjectsのActivatorなどで透明な適当なものを作って、
それのスクリプトで音を再生するようにして、NR500のスクリプトでそのオブジェを
適宜MoveToしたり、Enable/Disableすればよいのでしょうか??
Soundという分類のオブジェを探しましたが、なかったのでこういうことかな…と(汗)
「con_Show1stPerson」で確かに一人称でも頭部後ろからの視点になりました。
ただ、これを有効に使うには
1)一人称視点の時のみ有効にする。三人称視点時にはOFFにする必要がある
2)カメラ位置を変更するためにSkeletonファイルの変更が必要
の2点が問題になるわけですね…。
2については、ファイルが置き換わるというだけで通常時にカメラがズレるなどの
デメリットがないなら全く問題ないと思ってます。
でも1が問題っぽくて、今、一人称なのか三人称なのかを判断する
「IsThirdPerson 」がOBSE v0019みたいなんです…。
私はOBSE 0018b4なのですが、OBSE v0019ってまだ普及していないように思えます。
必要なOBSEバージョンが高いと利用出来る人が減ってしまいそうです…。
あ、しまった、OBSE v0015以上必要ってReadmeに書き忘れた!! やってしまったorz
>>416 「Soundオブジェ」ってMiscellaneous→Soundの「HondaNR500Running」等の事です。
走行音はどうしましょうね。
Loopで2D指定のSoundオブジェをPCにMoveToすればそのSoundオブジェのあるセルが
ロードされている限りプレイヤーの耳元で音が鳴り続けるので簡単だと思ったの
ですが、良く考えたらこれだと敵ライダーの場合うまくない気が。
Loopではなく数秒程度の短い単発音にしてスクリプトで時間を計ってPlaySound3Dを
必要な間だけ繰り返した方がいいのかもです。
Loopだとなんか止める方法が無いみたいですし。
でも単に一つのSoundをPlaySoundで連発しても多分システムの音連発予防措置で再生
されなかったり音の繋ぎが目立ったりするかもです。
なので例えば0.5秒でフェードイン/アウトする5秒の走行音wavを作り、その同じwavを
指定したSoundを2つ作って4.5秒毎に交互にPlaySound3Dするとか。
「IsThirdPerson」はOBSE初期からある関数です。確か。コンソールで打って確認を。
で、少し話が逸れますが、OBSE関数で戻り値がコンソールに表示されない場合は
適当なGlobal変数かクエ変数を用意して例えば「set aaa to isthirdperson」とか
すれば値が即表示されます。
でもこれって他に正統な手段がありそうな気も。
その辺詳しい方がいらっしゃいましたら。
続き) カメラ位置の変更は前スレに関連した話が色々あります。 でもこれも良く考えたら乗馬時のカメラ位置ってヒトBip01の親になるActorParentに 従うので、各kfのActorParentとヒトBip01NonAccumの位置関係を調整してActorParent が乗車姿勢時のヒト頭位置の「前」に来る様にすれば三人称モデルの頭が一人称カメラに かぶらず、一人称Skeletonを変更する必要も無いかもです。 この辺少しややこしいですし、前傾姿勢でかなり前方にある頭位置にカメラを合わせた 場合の一人称時のバイク前部の見え方や三人称時の注視点(カメラ回転中心)が今より 前方になる事での操作感等々少し謎なので色々テストが必要だとは思いますが。 という事で細部の作り込みって実は場合によっては大枠を作るより色々大変だったり します。でもその辺は気合で。
419 :
3 :2010/12/10(金) 12:36:49 ID:betFfhW7
走行音の繰り返しはこんな感じでできました。 set ForwardTimer to ForwardTimer + GetSecondsPassed If ForwardTimer > 4 If ForwardSound == 0 PlaySound3D HondaNR500Forward01 set ForwardSound to 1 Else PlaySound3D HondaNR500Forward02 set ForwardSound to 0 EndIf set ForwardTimer to 0 EndIf すごく…力技です…。こういう具合に総当りで他にも設定していくと冗長な感じにみえますが、 これは仕方ないですよね。この程度なら負荷にならないことを祈ります。 あとは他のkfに移ったときに、Timerを適切にリセットしたりすれば上手くいきそうです! kfを短時間で切り替えまくると音が重複しまくると思いますが、これは仕様として諦める…か、 前回再生した時間を判定して再生するか否かを…こんがらがりそうです…orz
420 :
3 :2010/12/10(金) 12:38:41 ID:betFfhW7
「IsThirdPerson」、普通に使えました(汗) すみません。 OBSE v0019のドキュメントに書かれていたのを見たので、それで追加されたのかと早とちりしました…。 >OBSE関数で戻り値がコンソールに表示されない場合は適当なGlobal変数かクエ変数を用意して >例えば「set aaa to isthirdperson」とかすれば値が即表示されます。 おおー!! これは凄いです! 溢れるハウツーが流石としか言いようがないです 打っても(エラーは出ないが)何も表示されずスルーされて判断できないので、これは非常に使えますね!!! >乗馬時のカメラ位置ってヒトBip01の親になるActorParentに従う なるほど…ということは、 1)カメラを前方に移動するために、ActorParentを前方へ移動 2)ズレたキャラ位置を直すために、Bip01NonAccumを後方へ移動 こうやってkfファイルを作りなおせばできるということですね!! 最初からCamera01で変更出来れば楽なのは確かですが、このやり方でクリアできそうです!! 曲がる時とかバックする時とかは、顔の向きの変化と同量のZ軸の回転を加えるというのも 面白いかも知れません。でもあんまりやると不自然感と3D酔いを起こしそうですね…。 でも夢・妄想が広がりまくりです! 本当にありがとうございます!
多分ここで、以前にスケルトンで体型を変更する方法が載っていたと思うのですが 首だけ少し細くとかスケルトンで変更可能なのでしょうか? HGECとか入れているとモデルの出来が良い分、余計に首が太いのが気になってしまって もしかしたら体型変更と同じで首だけとかいじれるんでしょうか?
blenderのウェイト設定で質問させてください。 あるボーンに設定してあるウェイトを、各頂点のウェイトバランスを崩さず 一括して変更する方法は無いでしょうか。 具体的に言うと、金属鎧で覆われた鎧内部の胸を揺らしたいのです。 胸部を覆う鎧は金属である為BBBで揺らしたく無い。 金属部分に当たらない範囲で胸を揺らしたいのですが、従来のBBBでは 揺れが激しく金属鎧を突き破ってしまう。 これを解決するには 1)従来のBBBによる稼動範囲でも接触しない様、鎧の形状を変更する。 2)激しく揺れない様、胸部ボーンを低いウェイト値で塗りなおす。 だと思います。出来れば鎧の形状は変更したくないので、2)で行きたいのですが 胸部ボーンのウェイトを塗りなおすにあたり、プリセットの綺麗なグラデーションを 維持したまま値を下げる事が出来ず四苦八苦しております。 そこでボーンのウェイトを全体的にコントロールする方法は無いかと思った次第です。 「ここを1/2にすると、ボーンに設定されている全てのウェイト値が1/2になる」 様な機能は無いでしょうか。 読みにくい文章で申し訳ありません
>>421 Skeletonでの体型の変更は各ボーンに体メッシュがどうWeight付けされているかに
よってどこがどんなかんじに変更出来るかが決まります。
Blenderでヒトポーズを作る時と同じ要領で首周辺のBoneのScale/Translationを
変えてみて、それで目的とする形状になるのならSkeletonでの変更で行けますし、
うまく行かないのなら無理かも、て事です。
その場合はメッシュの形を直接変えたりの別な方法で。
>>422 BlenderのWeight値って一旦nifにExportすると合計が1.0になる様に正規化されるので
その応用で行けないですかね。
例えばA:Bが0.7:0.3なら1.0のCを追加してA:B:Cを0.7:0.3:1.0とBlender上で指定
するとnifでは0.35:0.15:0.5に。そんなかんじで。
バイクの二人乗りやサイドカーに牛を乗せるのはどうしましょう。 同乗者アクターの位置操作はGet/SetPosで出来無い事はないのですが、でもバニラ 状態での毎フレームGet/SetPosには値の変化の連続性に少し問題があって高速移動時 にそれが顕著になるので、動きを滑らかに見せるには単にGet/SetPosだけでは うまくないかもです。 このGet/SetPosの挙動はOSR(Oblivion Stutter Remover)を入れると改善したり します。理由はフレーム更新のタイミングとかその辺です。多分。 とりあえずOSRを入れ、同乗者にしたいNPCに適当なアイテムでも持たせて そのスクリプトでGet/SetPosすれば同乗者が誰で現在どんな状態であれバイクの後ろに くっついて一緒に動いて見えるとは思いますが。スクリプトはこんなかんじで。 set x to バイク.GetPos X ;----x,y,rzはFloat変数 set y to バイク.GetPos Y set rz to バイク.GetAngle Z set x to x - ( sin rz ) * 130 ;----「130」は仮。バイクコリジョンの大きさに応じて set y to y - ( cos rz ) * 130 同乗者.SetPos X x 同乗者.SetPos Y y 同乗者.SetAngle Z z わざわざ三角関数でバイク中心から「130」離れた後ろの位置にするのはコリジョンが 重なるのを防ぐ為です。同乗者の見た目位置の移動はSpecialIdleで。 またz位置もきちんと同期させるにはzもSetPosする必要があるのですが、その場合 同乗者の自由落下動作を抑止する必要があったりで少し細かな話に。 いずれにしろ最終的にどの程度滑らかに動いて見えるかは描画環境にもよるので、 どういう手法で行くかも含めその辺の把握にまずテストが色々必要だと思います。 後で試験的に二人乗りさせた動画をUPします。
AttackRight/Left等の攻撃モーションについて質問があります。 プレイヤー用のオリジナルの攻撃モーションを作成しゲーム上で繰り返しモーション検証(剣をぶんぶん振りまわし)を繰り返していたところ 自キャラの向きが徐々に右向きにずれていくことに気付きました (通常Wキー押下で自キャラは画面奥に向かって移動するが、右向きにずれているときは 画面右奥側に向けて移動してしまう)。 質問: このようなキャラの向きが徐々に捻じれる原因は何が考えられるでしょうか? 個人的にはPelvisのRotYに角度が付いているのが原因かと推測しているのですが だとすると攻撃モーション中Pelvisを回転させるような体幹をねじるようなモーションは問題があったりするのでしょうか? このあたり、モーション作成における「べからず」ルールがあるなら教えて頂けると幸いです。 ※例えばモーション開始時のPelvis RotYは0である必要がある、 TextKeyのa:Lやa:R再生フレーム以降、PelvisのRotYは0でなければならない、など。 現状、Bip01とBip01 NonaccumはY軸の角度はつけておらず常にRotY=0をキープさせています。 一方でPelvisについてはRotYを左右に動かしてしまっています
Loading画面について質問です いくつか自作し、自作Cellへの移動時のみ表示で設定したところ、 何度読み込んでもload_in_game_default.ddsが表示されてしまいます。 サイズがでかいのが原因かと思い、DX1で同サイズにしても同じ結果でした。 Loading画面自作したことのある方いらっしゃいましたら、何をチェックすればいいのか教えてください。
>>426 Bip01の「RotZ」が怪しい気が。
もしそこが「-90」以外になっていると移動方向が妙な事になるかもです。
Pelvisはどう動かしてもOKです。多分。
ただ、歩く/走りながら同時に再生する可能性があるkfの場合、バニラに倣った
Priority指定ならPelvisは下半身のそれで上書きされる、というルールはあります。
なので静止時にだけいいかんじに見える様にPelvisを大きく回すと歩く/走る時に
上半身の向き(移動方向ではない)が静止時と違って見える事があり、それが問題になる
場合はあまり動かさない方がいいかも、みたいな事は結果として言えるかもですが。
でもそれも「べからずルール」みたいに特にやってはいけない訳でも無いです。
自由に弄って結果オーライなら別にそれで。
それにどのボーンをどう動かすのが適切かは場合によって全く変わるので、各ケース
毎に「べからず」を列挙するのは逆に超大変だったりしますし。
とりあえずはまずバニラ各kfを良く見て色々な場合の各ボーンの動かし方の把握を。
その方が多分話も早く後に繋がる気が。
>>429 ビンゴでした
パスがMenus\Loading\でした…まさか大文字小文字でアウトとは気づきませんでした
ありがとうございました〜
431 :
3 :2010/12/15(水) 14:33:02 ID:w/siPFEs
>>425 おおおー!!! 最高のタイミングで!! ありがとうございます!
私はOSRを導入しています。また、この機能を入れた際には、
「二人乗りする場合は、OSRを入れてないと挙動がおかしくなる可能性があります」
と注意書きすれば大丈夫だと思います。OSR自体も素晴らしいMOD(?)ですし。
アイテムのスクリプトに「Begin OnAdd 」として添付して試してみたのですが、
「同乗者.SetPos X x」の「同乗者」はどうやって指定すればいいでしょうか…??
「そのアイテムを取得した人」にすればいいとは思うのですが、CS Wikiを見てもわかりませんでした…。
または、CTAddPoseのTouch魔法を見て「GetSelf」が使われていたので、
これの値をグローバル変数に入れて「グローバル変数.SetPos」とやろうとしても、
「ObjectReference か ReferenceVariables のみが指定できます」となってしまいます…。
エラーメッセージ通りなのでしょうが、Referenceとして同指定すればいいかわかりませんでした…。
>>425 ではないですが
>>431 アイテムを持っている人のRefは GetContainer で取得できます
アイテムの入っているContainerのRefを返す関数ですが、
ActorやCreatureなどの場合はContainer==Actorになります
owner == Player && owner.IsActor == 1 などでチェックしないと
ContainerやCreatureの死体に入れたときにも動作するので注意
あと、CSHelpのAddItemの項目に書いてありますが、OnAddはAddItemでは呼ばれないです
この場合はGameModeで動いているでしょうからその辺で処理すればいいかと
433 :
3 :2010/12/15(水) 17:45:38 ID:w/siPFEs
>>432 大変的確なご回答ありがとうございます!
アイテム添付スクリプトとして下のような感じにして、MPCに渡してみたのですが、
どうも何も起こりません…なんでだろう…orz
ref owner
Begin GameMode
set owner to GetContainer :owner=アイテムの所有者
If owner != Player && owner.IsActor == 1 ;プレイヤー以外のActorなら
set StartTandemRiding to 1 ;現状ではダミー
else
Return
EndIf
set x to HondaNR500.GetPos X ; x,y,rzはFloat変数
set y to HondaNR500.GetPos Y
set rz to HondaNR500.GetAngle Z
set x to x - ( sin rz ) * 130 ; 「130」は仮。バイクコリジョンの大きさに応じて
set y to y - ( cos rz ) * 130
owner.SetPos X x
owner.SetPos Y y
owner.SetAngle Z z
End
ダミーメッセージを入れて確認してみたところ、プレイヤーが所持している間は
常にReturnを返していて、MPCに渡したところ一度だけSetPosが実行され、
それ以降は何も起こっていないようです。またそのMPCは全く移動しません。。。
あぁゴメン、条件が違ってた。正しくは owner == Player || owner.IsActor == 1 「プレイヤーかつNPC」じゃなくて「プレイヤー又はNPC」だよね
435 :
426 :2010/12/15(水) 20:19:49 ID:E1PsUgeP
>>428 >Bip01の「RotZ」が怪しい気が。
>もしそこが「-90」以外になっていると移動方向が妙な事になるかもです。
その辺りは注意していたのでまさかそんな初歩的ミスは…と思いながら見直してたら
一部の攻撃モーションでBip01のQuatZやYにところどころ変なキーが打ってありIPOカーブが変なことになってました。
ああああああ。どこで間違えたのやら。お恥ずかしい。
Bip01はせいぜい平行移動程度で弄ってないはずという先入観があって見落としてたみたいです。
バッファにコピーしたりミラーでペーストしたあとなんかに変なキーを入れてしまったのかも。
おかげで気持ち悪いねじれもなくなりそうです。
結局Pelvisは気にしなくてよかったのか。
>なので静止時にだけいいかんじに見える様にPelvisを大きく回すと歩く/走る時に
>上半身の向き(移動方向ではない)が静止時と違って見える事があり、それが問題になる
>場合はあまり動かさない方がいいかも、みたいな事は結果として言えるかもですが。
その辺のPriorityはバニラのモーションを若干上書きする感じで調整して弄ってあります。
バニラの正面向いた蟹走りが好きじゃないので体は横向きっぽくしつつ攻撃自体は画面正面に向かって振って違和感のない感じに。
今作っているMODはかなり広範囲のモーションに手を入れているのですがようやく形になってきたので
完成したらこちらでお披露目させて頂こうかと思います。
有難うございました。
OnAddって原則AddItemでトリガーされますよ。
日本語CSHelpのAddItemの解説は古いかもです。現在の本家CSWikiを。
またロード状況によってはAddItemは例外的な動作をするのでそれ自体少しややこし
かったりします。
で、今回の場合アイテムの渡し方自体はまだ未定で、現状仮に多分PC→コンパニオン
のインベントリ操作経由で渡しているみたいなのでAddItemとはまた別な話な気も。
いずれにしろ主眼はGet/SetPosの検証だと思うのでその辺の細かな話はまた追々、
と言う事で。
>>433 アイテム所有者Refの取得は多分それで行けると思います。
また所有者Refの取得方法はそのアイテムを相手にどうやって渡すかによって最適な
方法は変わる場合もある、という事を頭の隅にでも。
で、申し訳無い、
>>425 のコード例って最後の行の変数名が間違ってました。
誤) 同乗者.SetAngle Z z
正) 同乗者.SetAngle Z rz
あと「HondaNR500」っていわゆる「BaseID」だと思うのですが、GetPosに必要なのは
「ReferenceID」です。
配置したバイクをWクリ、Reference→ReferenceEditorIDに例えば「HondaNR500Ref」
みたいに適当な名前を。GetPosではその名前の方を使います。
437 :
3 :2010/12/15(水) 22:52:35 ID:w/siPFEs
TESNにも謝辞ぐらい書けば?
>>423 レスありがとうございます
NifSkopeでいじれるのかなっと思って聞いてしまいました…
考えが浅かったようですすみませんでした(汗)
段々と個人の作業所と化してきたな
質問する必要のあるMOD作ってる人が少ないだけじゃね 今まで無いタイプのMODだし、ログは後々の参考になるから 黙って作って公開するより、このスレ的にはありがたいと思う
前にも書いたけど、騎乗できるクリーチャーには興味があるので非常に助かるよ、この流れは。 このスレは過去ログも情報の宝庫でとてもありがたい。 それに情報が分散するより集中している方が見やすいしね。
ぶっちゃけこのスレでこんなレベルの低い質問しちゃっていいのかなって尻ごみしたりはする
>>437 動いた様で。同乗者の高さ(z位置)は上の例ではまだ考慮していないので、現状だと
同乗者は足元の地面高さに影響され、結果地面の上をズルズル引きずられる様な動き
になると思います。
同乗者のzをバイクと同期させるにはSetPosZをすればいいのですが、
アクターって不用意にzを変えると自動的に自由落下が始まってダメージを受けたりの
挙動があって思わぬ結果になったりします。
なのでSetPosZは色々テストが必要かもです。可能そうな方法は多分こんなかんじ。
a) とりあえず単にバイクのzをそのままSetPosZしてみる
b) 椅子に座らせる(PC/NPCは座ると自由落下しなくなる)
c) CollisionBoxを常時足元に移動させる
d) con_TCLしてみる
b)でやってみた例です。高低差が無い場所なのでzの同期はよく分かりませんが。
SetPos方式だと全体の雰囲気的に大体こんなかんじ、という事で。
http://shy.jsphr.net/upload/img/ups21272.zip
445 :
422 :2010/12/16(木) 13:53:49 ID:baRo+Eit
>>424 なるほど、一度Exportですか。さっそく試してみます。
レスありがとうございました。
446 :
3 :2010/12/16(木) 19:58:57 ID:0vaHkSJi
>>444 おー!! これは見事な二人乗りです! 意外にも椅子のポーズが合ってますね。
自分でも少し試してみたのですが、
a) 上手く追従します。ただし、やはりたまに落下ダメージを受けることがあります
b) 現在この方法をテスト中です。過去ログに任意に椅子に座らせる方法があったので
c) これはまだ試していません。
d) 「con_TCL」「owner.con_TCL」「owner.con_TCL 1」とか色々やっても上手くいかず…。
椅子方式で上手くいけばいいのですが、もしも「con_TGM」みたいのがあれば
それでも十分な気がします。披ダメージボイスは出ないに越したことないですが…。
a方式でだけ試したものを録画したのがコレです。SpecialIdle切り替えに成功しています。
http://www.nicovideo.jp/watch/sm13038557
>>446 シュールすぎです。好きですが。それは置いといて。
アクターの落下ダメージ自体は「ResetFallDamageTimer」で抑止出来ます。
なのでとりあえずの二人乗り実現にはa)が一番お手軽かもです。
でも今後例えば同乗者がバイクまで実際に歩いて行って乗り降りする動きを付けたり
するのならb)が逆に最終的に単純になるかもです。
例えば透明な椅子オブジェをMoveToしてその椅子をLocationにしたTravelの
AIパッケをAddScriptPackageすれば同乗者をバイクまで歩かせて座らせる事は
出来ます。
IdleAnimationsでそのアイテムを持っている事を条件に椅子に座る/立つ/座りIdle
を追加指定すれば好きな乗り/降り/乗車姿勢アニメは多分簡単に。
座った状態を維持するのは「SetRestrained 1」で可能です。
これはこれで充分ややこしいとは思いますが。
手法的には色々可能だと思うのでその辺はまた必要に応じて、と言う事で。
あとc)は単にアクターが自由落下しなくなる、というだけなので今回の場合は
労多くしてあまり報われないかもです。手法的には面白いんですけど。
またd)は「owner.con_TCL」で多分OKだと思うのですが、PC以外のアクターに対する
TCLの挙動は少し謎なので関数単体で充分確認する必要がまずあるかもです。
手間暇さえかければ戦車戦とか出来そうだな
チハのキグルミ被せて弓撃つとか
世界設定的にFOのほうがそういうの簡単そうな気がするんだが、そうでもない?
451 :
3 :2010/12/18(土) 00:11:30 ID:MqeALDNi
>>448 >>449 AK-47で魔法弾打つやつがあったので、あんな感じで主砲も撃てるかもしれません。
>>450 FOってFallout3ですよね? Fallout3には確か乗り物がなかった気がします。
このバイクMODは馬のシステムをいじって使っているので、Fallout3は厳しそうです。
>>447 詳しくありがとうございます。色々な手法があるのがよくわかりました。
b)でやってみて、それっぽいのがようやく出来てきました。
http://ime.nu/moto4life.web.fc2.com/material/test_moto24.jpg ただ、問題もいくつか…。
1)バイクで座標を合わせているのに、椅子に座ったあとしばらくは左右にずれる
左右フルバンクしたりしてSpecialIdleを何度か切り替えると合い、以降はずれない
2)バイクの速度が上昇に比例して同乗者が後ろに離れていく(仕様だからしょうがない)
画像は位置を調整した後のものです。15回ぐらいSpecialIdleを切り替えて、ようやく合いました。
なぜ横にずれてしまうのかは全く謎ですが、見栄え以外には影響ないので我慢してもらうしかないかもしれません。
速度による離れについても、二人乗り時は速度制限(安全運転)を加えれば限度を設定できそうです。
ところで
>>447 様のクレジットですが、TESNやReadmeに英語・日本語で
>OBLIVION MOD作成支援/相談スレの住人様方
>
http://www.2ch.net/ >尊き住人様方がいらっしゃらなければこのMODはできませんでした。厚く御礼申し上げます。
と書いてはありますが、これでは弱すぎるように思えるので、HNで載せさせていただけないでしょうか?
"God of Blender"とか"Great Nanashi"とか"Oblivion Father"とか何か偉大な名前でお願いしますm(_ _)m
>>451 1)は状況にもよるのですが、例えば座り動作中に椅子とアクターの位置関係を変えると
座り動作が途中で止まってそのままになる事があり、その時にBip01がアニメ途中の
半端な位置だとそうなる事もあるかもです。
その状態のGetSittingの値の確認を。
2)はGetPosした位置って1フレーム前のバイク位置なのでそれをそのままSetPosしたら
今のフレームでは少し後ろになって見えるのは仕方無い気も。
真面目に移動ベクトルで補正すればある程度は改善するかもですが。
あと椅子をMoveToするのにDisable/Enableすると思うのですが、AddScriptPackageと
TargetのDisable/Enableの状態変化のタイミングが重なったりするとクラッシュする
事もあるかもなのでその辺も要注意です。
あと私に関してはクレジットは特に不要です。HNとか面倒ですし。適当で。
動画重すぎ
>HNとか面倒ですし
とのことなので
>>452 に素敵なHNを考えてあげるべきじゃないかと思うんだ
>>454 その人はHNあるが名乗ってないだけだよ。
自分もこのスレの何人かの人に結構お世話になってるんだけど ハンドルなんてなくていいんじゃない?ここは2chだしあんまり恩恵もないだろうし、負担が大きくなるだけかと
名乗ったら名乗ったでおまいらここぞとばかりに叩いて追い込むからな
アンチな奴も居るから名前なんてない方が良いと思うよ
まあ叩きと妬むのが生きがいの奴が粘着する機会を常に狙ってるわけだし 真面目に作成とかやりたい奴は2ch以外でやった方がいいってのは結論出てるしな
全力スレで質問しようかと迷ったのですがこちらで質問させて下さい
MOD Brew Houses of Cyrodiilで何個か看板メッシュのテクスチャパスがc:\program filesから指定されていたので修正したのですが
修正するとぶら下がっている看板が地面に落ちてきます。
地面に落ちないようにテクスチャを反映させるにはどうすればいいのか教えてください。
変更したメッシュのテクスチャパス
フォルダMeshes Clintmich retexture clutter signs内の00skoomasign.nif
c:\program files\bethesda softworks\oblivion\data\textures\clintmich\retexture\clutter\signs\00skoomahousesign.dds
↓に変更
textures\clintmich\retexture\clutter\signs\00skoomahousesign.dds
ttp://loda.jp/tamanegiii/?id=244
質問です OBSE18にて作成されたModを改造する際に OBSE19b環境で改造した場合は、触っていないScriptも全てコンパイルしないと 正常な動作はしなかったりするんでしょうか
すみません、質問です ニュートラルアイドルの時にランダムで出るモーションの頻度を変えたいのですが どこで変更できるかご存知の方はいますか? 多分、iniファイルでどこかの項目で変更できそうな気がするのですが 見つけられませんでした
>>462 待機モーションのことですよね?
CSでespファイル開いてgameplay>idle Animations
LoiterIdles>Male(Female) IdleのGetRandamPercentのValue値で変更できます
個別のモーションもその下のツリーで
>>460 う〜む、絶対パスになってますねー、普通ならネクサスにもそういうコメントついてそうなんですけどねなにか理由があるのだろうか?
とりあえず対症療法ですが自分とこのドライブからのパスに変えるとか
他の正常なメッシュのテクスチャーパス変更して、リネームしてみるとか
そのくらいしかとりあえず思いつきません、すみません
あと、テクスチャーが圧縮されてないんですがそれが原因なんてことあるのかな?小さいテクスチャーなので良いのかもしれませんが
モーションについて質問させて下さい。 現在、歩きモーションを制作しております。 ゲーム上でアニメーション自体はうまく再生できたのですが、 足音がなりません。 ググってみて、足音の設定があるということは分かったのですが、 どこをどういじっていいのか分かりません。 詳しい方がいらっしゃいましたら、お教えいただけると幸いです。
>>465 nifskopeで実際に音がなるkf開いて、NiControllerSequenceの一番下にNiTextKeyExtraDataがあるのでクリック
BlockdetailsにTextKeysがある
いくつかのstringでEnum: Rightと記述されてるとおもうけど、これが音を鳴らすコマンド
左足はLeft、右足はRightという感じでそれぞれの音がなります
467 :
3 :2010/12/20(月) 19:13:55 ID:FtRggopJ
>>452 1)はまさにおっしゃる通りで、座り終わるまでReturnしたら大丈夫でした!!
2)は、なるほど、GetPosって1フレーム前の位置をとってくるんですね!
NR500のSpeedが変化するようにしてあるので、そのSpeedで位置を修正するようにしました!
おかげさまで無事にv1.2を作れました! 本当にありがとうございます!
椅子のEnable/Disable、同乗者のAIの追加/削除は苦労したのですが、何とか安定しました。
クラッシュすることはありませんでしたが、二人乗りAIが働かなくなることがありました。
クレジットは確かに無用な負担のもとにかもしれないですので、残念ですけどなしということにします…。
PCは以前からでしたが、ついに携帯電話まで書き込み規制されました。
これは書き込み代行サービスの方に書きこんでいただいています。
今後しばらく書き込めないかもしれませんが、本当にありがとうございました!
>>466 ありがとうございます。無事に足音が鳴りました。
>>464 skingradの看板メッシュがテクスチャパスがc:\program filesではなかったので同じ形のメッシュでc:\program filesから指定されていたLeyawiinの看板メッシュと差し替えてみました。
結果テクスチャパスがskingradのままだとぶらさがっていますが、Leyawiinのテクスチャにパス変更すると地面に落ちます。
テクスチャの圧縮についてなんですがskingradとLeyawiinのテクスチャサイズ、容量ともに同じでした。
あきらめてこのMODのテクスチャフォルダをCドライブに入れて対応しました。
>>463 レスありがとうございます。
今帰宅したので早速やってみます
ありがとうございました。
質問です。鉢金をtail属性で作っているんですが、helmetのようにegmファイルも作ったほうがいいのでしょうか?
>>471 無いと頭にめり込んだり隙間ができたりするのであったほうがいいと思います
でも、少し大きめにつくって隙間ができても構わないなら無くてもいいですよ、正面以外は髪の毛で隠れると思いますし
473 :
471 :2010/12/22(水) 13:37:10 ID:xPk4tZkF
>>472 上手くいきました!ありがとうございました!
質問スレから参りました。 どなたかお助け下さい Blenderで髪型を作成したのですが、CSやゲーム内でその髪型が表示されません。CSで見るといわゆるハゲ状態です。 (以前同じように髪型を作りExport→登録した際には問題なく表示されたので、今回何か初歩的な勘違いをしている可能性も大きいですが;) CSでの髪型登録から種族への適応の手順を誤ったかと思い何度も確認しましたがやはり表示されず・・・。 また、調べてみたところ「Blender上で複数のオブジェクトがあるとゲーム上で表示されない」とありそうした可能性も考えたの ですが、作成した髪型のオブジェクトは一つにまとめてありました。 Blenderを使い始めて日が浅い為、下らない質問で申し訳ないのですが、考えてもネットを見ても良く解りません。 一体何が原因で表示されないのか、教えて頂けると嬉しいです。
475 :
474 :2010/12/23(木) 15:35:58 ID:v+OuWqNt
状況の書き方が詳しくない上、安易に書き込むのはこちらのスレの方々に迷惑だろうとお叱りを受けました。 確かにそう思います;; どうか上の質問はスルーして下さい、スレ汚し申し訳ございませんでした
>>474 ノーマルマップが無いとかStripにしてるとか?
装備として追加するのと大差ないからまずは頭装備として出力してみたら?
TES4の髪型では躓かなかったから的確なアドバイスできなくてすまないが
477 :
486 :2010/12/23(木) 17:57:34 ID:v+OuWqNt
>>476 解り辛い書き方であったにも関わらず、アドバイスどうも有難うございます。
それで試してみます
478 :
3 :2010/12/23(木) 20:14:21 ID:OAu8gyQ9
VPN接続に書き込み規制回避の使い道があったなんて…。。。 すみません、バイクMODを作っていたものです。大変お世話になっておりますm(_ _)m NPCを専用のバイク(馬と同等の存在)に乗せることについて疑問があります。 二人乗りに使っていた椅子に座らせるAIと同様のやり方で、 LocationをNPC用バイクにしてAddScriptPackageしてみたのですが、 バイクに近寄るだけでActivateしてくれません…。通常のNPCに対しても同様でした。 フラグとして「馬を使う」や「条件を満たすまで」をON/OFFしても変わらず、 同時にプレイヤーをFollowするAIをAddScriptPackageしたら異常終了しました…。 馬に乗せるというのは、普通とは違った扱いが必要になるのでしょうか…?? 本来、コンパニオンMOD側で調整すべきことなのは(AIの干渉もあると思うし)わかるのですが、 とりあえず乗せてみるだけしようとしたところ上手くいかなかったので質問させていただきました。 「mpc」(コンパニオンMOD)の場合はコンパニオンの馬のSkeletonの指定をバイクにするだけで動いたのですが、 海外産のコンパニオンMODの場合は上手くいかないみたいで、 それでスペルでバイクを召喚してコンパニオンにAIを追加すればいけるかと思ったのですが…。 もちろんコンパニオンMODのAIと衝突する可能性は濃厚ですが、まずは試してみたいと思いました。 スペルで上手くいけば、コンパニオンMODごとにパッチを作る必要がなくなるという利点もありそうです。
>>478 NPCが馬に乗る動作が起きるのは、現在のAIパッケにTravel動作が含まれ、UseHorse
にチェックが入っていて、かつTravel動作がパッケ内部で実際に起動した時です。
なので例えばUseHorse指定のFollowパッケを単にAddしても現在位置が既にPCに充分
近かったりすると移動の動作が起きずに馬に乗る動作もすぐには起きなかったり
します。
例えばコンパニオンの馬の乗り降りをPCのそれと同期させたい場合は色々工夫が
必要に。CSWikiにもその辺の話が。少しややこしいですが。
http://cs.elderscrolls.com/constwiki/index.php/NPCs%2C_Horses%2C_and_you また特定NPCにスクリプトを仕込むのでは無く、不特定のNPCを一時的に馬に乗せるの
なら、そのNPCをOwnerにした馬を側に置き、例えばTravelでUseHorse、Locationが
PC、Radiusが「1」(これがミソ)のAIパッケをAddすればPCとそのNPCの位置関係が
どうあれ移動の動作がすぐに起きて即馬に乗ってくれると思います。
その後Follow等させるならGetSittingを見て別の適当なAIパッケを再度Addで。
解放はRemoveScriptPackage、evpすれば勝手に馬を降りて元の動作に。
またNPCが複数の馬のOwnerになった場合、どれに乗るかは恐らく現在その馬がロード
されているかとかIDの若い順とかその辺が関係して来る気が。
なので例えば既に馬に乗ってついてくるMartinをその場で別な馬に乗り換えさせたり
するのは地味に高難度かもです。
481 :
3 :2010/12/24(金) 13:18:29 ID:X2jBN93N
>>480 見ろ!タマネギがゴミのようだ!!はっはっはっはうわなにをするやめろ
轢かれる直前のタマネギのアップに爆笑しましたw 役ハマリすぎですw
TriggerZoneの移動についてですが、「TriggerZone.SetPos」とか指定したらReferenceエラーになり、
どう指定したらいいかわかりませんでした。
TriggerZoneを移動しない場合は、「Begin OnTriggerブロック」は実行されませんでした。
>>479 なるほど! これは大変わかりやすい貴重な情報をありがとうございます!
その通りのAIを追加してみたのですが、なぜか「SetOwnership」が上手く機能せず進めません…。
Begin ScriptEffectStart ;(バイク召喚やAI追加などをするTotchスペル)
set Companion to GetSelf
Companion.AddItem NR500CompanionNowRiding 1 ;これは機能する
SummonedNR500.SetOwnership Companion ;これはなぜか機能しない
SetOwnershipの対象を空白にするとちゃんとPlayerの所属になるのですが、
なぜかCompanionだと機能しません。ゲーム中に確認しました。さらにゲーム中にコンソールで直接
SetOwnershipで8ケタのIDでCompanionを指定してもReferenceエラーに…。
このSetOwnershipの対象は、あらかじめCSで指定したReferenceIDしか使えないのでしょうか…??
あとはNR500CompanionというFactionを作って、バイクとCompanionに入会させましたが
これでは乗ってくれませんでした。
>>481 この手の体を張った仕事はなんか世界共通で彼の役目らしいです。
TriggerZoneも普通のオブジェクトです。Activatorの仲間です。
なので例えば椅子なんかと同様に初期配置→Ref名を付けて「Ref名.SetPos」で。
上の例は適当な「TrigZone〜」オブジェをコピーしてスクリプトを付け替え、適当な
場所に初期配置してScaleを0.1位にしています。
またSetPosとMoveToの組み合わせってやはり少しややこしいので、とりあえずは
MoveToだけでやってみてまず動作を確認、OnTriggerやPushActorAwayの挙動の
把握をするのがいいかもです。
あとSetOwnershipの引数はNPCのRefIDではなくてBaseIDです。ここも。
http://cs.elderscrolls.com/constwiki/index.php/SetOwnership RefIDからBaseIDの取得はOBSEで。
483 :
3 :2010/12/24(金) 21:07:54 ID:X2jBN93N
>>482 TriggerZoneは普通のオブジェクトだったんですね!
各Creatureが個別に持っている何かの属性かと思ってました。
苦戦しながらもOnTriggerやPushActorAwayは何とか形になりました。
現在、直接Healthにダメージにしています。犯罪にはなりませんが、これは後回しで(汗)
常に攻撃ありだとマズイので、<CapsLock>で切り替えられるようにしたいと思います。
SetOwnershipの引数については普通にWikiに書いてありましたね(汗)
日本語訳版v1.1だけ見てて油断してました。すみません。
コンパニオンの乗車とPushActorAwayは絶望していたのですが、ご助言のおかげで
アップデートができそうです!! 毎度ながら本当にありがとうございます!!
すごい基本的な感じですけど、CSのオブジェクトウィンドウで左に表示される Armorなどのカテゴリの下に独自のカテゴリを作るにはどうしたらいいんでしょう?
>>484 Armorならmeshes\armorに独自の新フォルダを作ってそこにnifを入れ、CSでArmor
オブジェを作ってWorldModelにそのnifを指定すれば新フォルダの名前が左ツリーの
Armorの下に追加されます。
要するにバニラのIronとかSteelみたいな各装備のディレクトリ構成とおなじかんじに
すればOK、て事です。
486 :
3 :2010/12/25(土) 20:46:52 ID:AF3kk71i
>>410 ,
>>418 で教えていただいた一人称視点時のプレイヤーキャラの表示ですが、
カメラの位置が「ActorParent」で決まることと、「Bip01NonAccum」で「ActorParent」で
ズラした分の位置を修正できるということで無事に適用することができました。
通常のSkeletonには「ActorParent」ってないですよね。これほどまでに汎用性を持たせて
あのバイクサンプルMODを作ったのかと思うと、まさに畏敬の念を覚える次第です。。。
結果として、当然ながらご助言あってですがここまで色々なことができました! ありがとうございます!
いくつかわかったことを還元というほどでも全然ないのですが、書いておきたいと思います。
【kfファイルのSpeedとBlend: n】
アクターのSpeedはkfファイルの再生速度に影響しますが、SpecialIdleはその影響を受けません。
バイクMODの場合、SpecialIdleによる移動速度をSpeedを増減することで変えることはできませんでした。
SpecialIdleは常に一定速度(多分 作成時に指定した1秒あたりのフレーム数)で再生されます。
同様に「Blend: n」によるkfファイル移行の滑らかさもSpeedの影響を受けません。
この「Forward.kf」などと「SpecialIdle」の違いを利用すると、より複雑なものが作れるかも知れません。
【con_Show1stPerson実行時の挙動】(IsThirdPersonと組み合わせて)
三人称視点時…PCの表示/非表示を繰り返すのみ
一人称視点&PC表示時…三人称視点に変更され、PCは表示されたままで、実体(通常時のPC)が消える
一人称視点&PC非表示時…三人称視点に変更され、PCは表示されたままで実体と同居
「con_Show1stPerson」はあくまでトグルできるだけであり、現在どちらなのかを判定する関数はなし。
自分で管理する必要がある。また一人称視点時に使うとマズイことになるので、扱いが少々面倒。
<R>キー時に実行とか単純では達成不能。わざとタイムラグを発生させたり、また<R長押し>にも対応させる必要あり。
他にいくつかしょぼいサイトに書いてありますが、もうこのサイトどうしようか迷ってますorz
http://life4oblivion.web.fc2.com/ の
http://life4oblivion.web.fc2.com/vehicle/02.html
487 :
名無しさんの野望 :2010/12/26(日) 00:27:07 ID:Joag9EXg
説明へただけど教えてください。 OBMMで日本語化やっとできたので次にMODのmoonshadowをダウンロードして ダブルクリック→青印でチェックできたと思うんですが反映されません。 また画面左右二分割で左側にmoonshadowって表示でてません。 Launch Oblivionから起動してみました。 けど最初のキャラ作成画面ではそれらしいのはありませんでした。
>>487 MODというのはデータ構造が正しくないと反映されません。
ほとんどの場合は、そのまんまOMODを作ると上手くいきません。作り直してください。
OBMMの下のボタンから「Create」をクリック、情報を適当に入力したら、
「Add folder」を選択し、MODで使うファイルを含む適切なフォルダを指定します。
慣れるとどのフォルダを指定すればいいかすぐわかるようになりますが、
「meshs」や「textures」といった名前のフォルダがある階層の「1つ上のフォルダ」を
指定してください。「Data」というフォルダがあれば間違い無くそれ、あとはMOD名のフォルダだったり。
正しく指定した場合、下に表示されるファイルは「meshes\....」や「textures\...」といった感じになります。
で、適切にOMODを作ったら後はそれをダブルクリックしてファイルを実際に配置させればOKです。
espファイルを含むならそれをONに。OBMMは確かデフォルトでONにしますが。
文面から、espファイルが必要になりそうなMODのようですが、
espファイルは「meshes」や「textures」フォルダと同じ階層に位置するようにします。
わからなければ、自分のOblivionのインストールフォルダを見てみれば一発でわかると思います。
「Data」フォルダ以下がどうなってるか。OBMMは、この「Data」フォルダの中にファイルを作成します。
スクリプトで装備の種類(服、軽装、重装)を得るにはどうすれば良いでしょうか? ご教授、宜しくお願いします
>>489 服と鎧は、IsClothing、IsArmorで判別
重装と軽装は、GetArmorTypeで判別できるね
全部OBSEの関数です
>>486 遅レスですが。
「ActorParent」って別に私が考えたのではなくてシステム予約のノードですよ。
乗馬状態になると乗員のSkeletonはシステムによって馬のActorParentの位置に
Attachされて馬Skeletonと一体化します。
馬のkfに乗員のキーが含まれているのはその辺が理由です。
あと一/三人称の切り替わりってRキーだけでなくマウスホイールや麻痺を食らった時
等々色々な契機で起きるので、その条件全部を検出するよりはIsThirdPersonで現在の
状態を常時監視して変化があったら三人称モデルのON/OFF、みたいにするのが
簡単かもです。
一人称になった後で三人称モデルを出すには以下みたいに続けて書けばOKみたいです。
ToggleFirstPerson 0
con_Show1stPerson
ToggleFirstPerson 1
またRキー長押し(VanityMode)で問題になるのは一人称の時で、状態は一人称なのに
見た目だけが三人称になる、という場合だと思います。
なのでそのタイミングだけは検出して、Rキーが押しっぱで0.5秒(デフォ)経ち、かつ
一人称なら一時的にToggleFirstPersonで三人称に切り替えて三人称モデルを消し、
Rキーが解放されたら一人称に戻して三人称モデルをまた表示、みたいにすれば
行けると思います。
その辺は要領良く書けばそれほど複雑にはならない気が。
むしろややこしいのは無入力放置で自動的にVanityModeなった状態の方かもです。
これも工夫すれば方法はあるとは思いますが、とりあえずはGMSTの
「fVanityModeAutoDelay」をうんと大きくして自動でVanityModeになるのを
なるべく回避するのが手っ取り早いかもです。
493 :
名無しさんの野望 :2010/12/27(月) 22:47:26 ID:cwypRYj6
MBP++ のmodを導入したのですが、髪型が設定できない種族がいます。 対処方法はないでしょうか?
>>493 それはこのスレで聞くことじゃないと思うが一応答えておくと、
CSでその種族に対して髪型を登録してください。
495 :
名無しさんの野望 :2010/12/27(月) 23:42:19 ID:cwypRYj6
>>494 ごめんなさい
説明ありがとうございます。
OBSEv0020betaが出ましたね
497 :
3 :2010/12/28(火) 01:06:10 ID:rsB/m4Nv
>>492 「ActorParent」に関する詳しい説明ありがとうございます!
ただ私が畏敬の念を覚えたのはそれだけではなく、Nifの分割、ボーンの階層などなど、
終わってから見れば、さも当たり前にピースがはまるかのように整っていた環境。
漠然とした「バイクMOD作りたい」なんて私の質問からここまで先のことを見通して
サンプルMODを作ったのかと思うと、名無しの人さんは底なしに凄いなと感服いたしました。
「con_Show1stPerson」に関する具体的な解説ありがとうございます!
「ToggleFirstPerson」というのもあったんですね。スクリプト側で視点を切り替えられるのは知りませんでした。
自分なりにスクリプトを作ったのですが、一人称視点時にR長押しでPCがダブってしまうという問題がありました。
そこで教えていただいたやり方でつくり直してみたら見事にそれが解決して、しかも切り替えがより目立たなくなりました。
「fVanityModeAutoDelay」もバイクに乗るときに「3600」にセットしてみました。これで完璧に動きました!
できればクレジットに「名無しの人」さんとして入れさせていただけないでしょうか??
これでは誰かわからなすぎでもありますが、当たり障りもないかと…。いかがでしょうか?
>>496 ちょっとしか見てませんが「GetCursorPos」なんてありましたね。シューティングゲームも作れたり。
有名MODが要最新OBSEになって普及するといいですね。
質問があります 任意のアイテムについてEditorIDの文字列(ヘキサ表現のIDじゃない方)を取得する方法御存じないでしょうか? CSで例えばJailPantsにカーソルを合わせると「'JailPants' (00000015)」なんて表示が出るかと思うのですが この'JailPants'などの文字列です 以下の関数や処理は試してみたんですが、ヘキサのIDか名前は取れるもののEditorID文字列は取れませんでした GetName / GetEditorID / GetFormIDString / GetFormIDString2 ん〜、これは取れないのかな…
ごめんなさい、前の質問が片付かないうちにさらに全く別の質問で申し訳ないのですが教えて下さい IK_skeleton2.blend/IK_skeleton3.blendについてのピンポイント質問になります 「IK_skeleton2の公開ファイルには既存kfファイルからのインポート用にskeleton2.nifを付けて頂いてますが これを使ってインポートした場合、足部分(*3.blendならPelvis含め)に既存kfの動きを反映する方法はあるでしょうか?」 シチュエーションとしては、今まで古いBlendファイルで作りためていたモーションがある中で上記の素晴らしいBlendファイルがあるのを知り そちらの環境に移行したいのだが、既存のkfをインポートすると下半身などが(当然ですが)制約により動かず 既存の資産をこのBlendファイル上でうまく弄ることが出来ないでいる、というものです 選択としては以下1か2になるでしょうか?或いは3の選択もありえたりしますか? 「1.新しいBlendファイルへの移行をあきらめる」 「2.過去の資産をスパッと捨てて新しいBlendファイルで作りなおす」 「3.実は過去の資産をうまいこと新しいBlendファイル環境で弄る素晴らしい手がある」 私はBlenderにあまり詳しくないため、2と3の安易な折衷案で過去の資産はインポートしたあと IK制約だけ消して(AutoIKの恩恵だけ貰って)使うというやり方をとっていたのですが さきほど海外のMODDERの方から 「素晴らしいファイルがShyにあったので3がやりたいんだけどやり方を知らないか?」 という質問があり、改めて、もし3のやり方があれば教えて頂ければというところです どうぞよろしくお願い致します
>>498 取れなかったと思う
EditorIDは一部の例外を除いてメモリ内に存在しないとかそんな話だったはず
>>500 CSでのコンパイル時以外は参照出来ないとかそんな感じですかね。
使い道からしてもゲーム起動後はIDとしては一意性を維持出来ないし名前は別に存在するし
参照出来る必要性がないですもんね。
了解です。回答ありがとうございました!
いやいや、ゲーム中もEditorIDは参照はしまくってるだろ??
>>502 ああいや、EditorIDの文字列表現の方の話です。ヘキサ4Byteの方じゃなくて。
EditorIDの名前どおり?scriptを組むときに使うくらいだもんなー ゲーム始まると全部FormIDで管理してるし cocやstartquestとかでコンソールからでも使えるcellとquestだけ特別だったのか…初めて知った
>>504 そう、名前というか表示上のID通りの方です
cellとquestは特別なのでGetEditorIDでもサポートされてました
この件は自分の中ではNifのモデルパスで解決することにします
>>498 OBSEのGetEditorIDのリファに「殆んどのフォームのEditorID(BaseIDの名称の文字列)
はゲーム実行時にはロードされないよ、今はこの関数はCellとQuestのEditorIDを
返すだけだよ」、とあるので現状ではやっぱ無理そうな気が。
>>499 IKってボーンの連鎖の終端ボーンだけに位置回転を与える事で中間のボーン群の
位置回転は自動的に計算で出す、というのが身上です。
なので既に位置回転が細かく決定済みの中間ボーン群のキーをIKのボーン群にImport
するのは構造的に無理な気が。
今あるkfをIK用に変更するのなら、例えば上半身のキーは残して脚のキーは一旦消し、
IKで再計算させて以前と同様な動きをまず再現してから以降はIKで操作、みたいな
かんじになると思います。多分。
具体的には、IK_Skeletonの場合は左右各Footは「IK Foot.L/R」で操作されるので、
ImportしたSkeletonの方のFootの動きの要所でIK Footを動かして今のFootがImport
したFootと同じ位置方向になる様にしてキーを新規に打ち、Thigh、Calf、Footの
元のキーは全部消してIKの結果を打ち直せばなんとかそれっぽくはなりそうな気も。
でもそれを手動で操作すると多分非常に煩雑になりそうですし、何らかの方法で
省力化出来るのかもちょっと実際に色々やってみないとなんともなのですが。
>>507 回答2件、ありがとうございます
前者後者了解しました
後者は書きこんだあと自分なりに考えてみたのですが、足に打ってある制約を裏返してIK Foot側にかけて
既に計算された下半身側からIK関連ボーンのあるべき位置を復元するような
インポート下準備専用のArmatureを用意するなどがいるかもって感じでしょうか
少し試行錯誤してみようと思います
ちなみに、skeleton2.nifのファイルは何をExportしたものになるんでしょうか?
というのは、skeleton2はIK_FootやKneeがついてなかったので
IK_skeleton2.blendのArmatureをそのままExportしたものとも違うのか、気になりまして
もしよろしければ教えて下さい
>>508 IK Footが逆にFootに追従する様にしてその結果のIK Footの位置回転を絶対値として
キーに残す事が出来れば手動でのFoot位置合わせ操作無しで行けるかもですね。
また一連のIK_Skeletonは実験的にIKとか頭向き等を試した例なので、他にも
Constraintの付け方はあると思います。
既存kfImport時の使い勝手が良い様にIKの付け方自体を根本的に変えるのも
アリな気が。
skeleton2.nifは手で作ったと思います。確か。曖昧で申し訳無いのですが。
実際の作業手順自体はあまりよく覚えてなくて。
「〜Dummy」という名前のボーンはImportした時の各ArmatureのTail位置を決める為に
末端ボーンの対向方向や、Tail位置を誘導したい方向に追加してあります。
なんでそんなダミーのボーンが必要かは、nifボーンとBlenderのArmatureの違い、
Import時のArmatureのTail座標の決定方法、AutoIKを使う場合のTailとHeadの
連結条件、またImport時に一度決定されたTail位置の移動はkf出力時にボーンの
回転とみなされるのでImport後にBlender上での適当なTail位置変更はNG、みたいな
色々な要素や縛りがあってもう非常にややこしい話に。
要するに最終的にPelvisからHeadまでを一貫してAutoIK指定をしたかったので
PelvisとSpine2のTail位置を特定の子供方向に向ける必要があったのと、
UpperArmTwistやSideWeapon等の末端ボーンのArmatureのTail位置の見た目を
いいかんじにする為に、ダミーのボーンを付けたImport専用Skeletonを使う事で
Import後のArmatureのTail位置を操作してる、て事です。
これもなんか別にもっと単純簡単な方法があるかもです。
510 :
3 :2010/12/29(水) 22:02:54 ID:W/6sWkuQ
>>506 クレジットは次のバージョンから入れさせていただきます!
まだまだもっと色々な機能を追加・整備したいのですが、何とももどかしいです。
左右バンクモーションの改善、各モーションに加速か否かの2パターンの用意(スロットル回すポーズを追加)、
現速度によるモーション変化(低速ならハンドル切って浅いバンクで曲がる、高いならハングオフとか)
モーションはスクリプトで再生していることから、コンフィグによる使用モーションの切り替えなどなど。
あとCTAddPoseの機能も簡単に実装できそうです。
Havokオブジェというと、最初のダンジョンで丸太が転がってゴブリンが死ぬようなヤツですよね。
Horseとして、バイクMODの一部を変更(大部分を流用)したものなら作り易いと思ったのですが、
Havokというものにも興味があります!! ご説明いただいてもよろしいでしょうか?
バニシング・ポイント…すみません、見たことないです(汗)
トルクなら見たことあるのですが…アプリリアRSVがカッコイイ。ラストはちょっとアレでしたが…。
サンプル見させていただきました! 是非ともNR500にヘッドライトをつけたいと思います!!!
指輪を装備している間、2つのLightオブジェを装備者にSetPosし続けるといった感じですね!
>Lightの高さ/距離/角度は調整出来る様にクエ変数(クエ名「A1KQ」)にしてあります。
こっこれは…!!? Lo/Hiビームが実現できます!! Hiビームを人に当てると友好度が下がったり…。
馬肉の好きなお姉さん(?)に金を払ってHIDを入れてもらったり…!? 何でもできますね!!
それと、スクリプトの数学の公式的な部分は全くわかりませんでした…。凄いですねあれ…。
あの…素朴な疑問なのですが、TestingHallって複数のMODに変更されないのでしょうか??
同じセルを複数のMODが変更ってできましたっけ?? 自分の勘違いだと思うのですが…。
>>509 回答ありがとうございます
Skeleton2はそんな感じなんですね
今日試しにIK_skeleton2.blendのArmatureをエクスポートしたNifで過去に作成したkfのインポートを試してみました
このBlendファイルから作ったものはkf内にIK関連キーも残っているので
IK関連ボーンを含んだSkeletonファイルの方が環境的にインポートに向いているかも、という感じでした
(ただZ軸の座標系はずれがあったので多少微修正要りそうですが)
バニラのモーション取り込み環境は別途検討するとして過去素材の修正がやりやすくなりそうな予感です
これまであのファイルで作ったkfファイルは不可逆というか、エクスポート出来てもインポート出来ないイメージだったのですが
私の理解不足だったようで、Blendファイルを失ってしまったkfファイルも弄り直しが出来そうな気がしてきました
今やAutoIK/IKなしでのモーション作成は考えられないのであのBlendファイルはとてもありがたいです
今後より一層あのファイルを活用させてもらいます
どうもです
あとCellに単にオブジェを追加配置するだけならMOD間で特に実質的な競合は起きない です。位置が偶然重なったりして見た目に変になる事はあるかもですが。 問題になるのは同じオブジェに対して変更を加えたり、地表の形状を変更したりする 場合です。 でもそのサンプルがTestingHallにオブジェを初期配置しているのは単にやっつけな だけなので、もし自MODに組み込むのでしたら適当な専用のInteriorCellを作って そこに初期配置の必要なオブジェをまとめて置いておく、みたいにした方が後々 何かと便利かもです。
514 :
3 :2010/12/30(木) 17:03:19 ID:OYrJhMQt
>>512 Havokオブジェについてのご説明ありがとうございます!
時間がかかりそうですが少しずつ調べていきたいと思います。
ただ、今思いつく心配事としては、SetPosで位置を調整する場合は
位置の調整にカクつきが出てしまいそうというのと、Speed変化で前フレームとの
位置のズレが生じてしまうと思われる点です。バイクMODの二人乗りもそうでした。
それでも、車のオブジェがあるので自由に人や荷物を置けそうなのは面白そうに感じます。
まだ試していないので全然わからないのですが…。
すみません、ヘッドライトについてなのですが、サンプルにあったように
ライトの照射方向を前方(水平より少し下方向)へするにはどうすれば良いのでしょうか??
「rot」は「ライトの位置の方向(Z軸)を装備者からどれだけズラすか」に使うもののようでした。
それと、スワップとして2つのライトを交互にEnable/Disableするのにはどんな意味が
込められているのでしょうか?? 1つのライトを使い続けるのには何か弊害があるのでしょうか??
515 :
3 :2010/12/30(木) 17:07:22 ID:OYrJhMQt
間違えて途中で書きこんでしまいました
>>513 なるほど、オブジェの追加配置なら競合しないのですね! 知りませんでした!
装備品MODなどで「有名場所をどのMODが指定するのか」みたいな水面下の争いがあるのかと
考えていましたが、これなら大丈夫ですね。
ありがとうございました。
516 :
3 :2010/12/30(木) 18:17:35 ID:OYrJhMQt
無駄すぎる連投すみません。 ライトをSetAngleしてみたりしましたが、どうやら照射方向という概念は無くて 360度を照らしてしまうみたいです。これは実に残念…。 照射半径を小さくしたものなどを用意して、ヘッドライト近くは小さく…とかやれば 擬似的に再現できそうですが、光源が多いともちろん処理が重くなると思うので Hi/Loの2個程度で諦めておこうと思います。 でも目の前の壁が照らされないのは本当に残念orz
>>514 Havokオブジェの乗り物化は技術要素的にはある程度揃ってはいますが、まだ実際の
応用例があまり無いので道程はやっぱ少し長いかもです。
で、ObのLightってスポット状には出来ないです。Lightは全部全方位等拡散の単純な
点光源だけです。
SSの場合、高さはタマネギの顔辺り(100とかその辺)、距離は300前後、角度は0(正面)
にしてバイク前方少し離れた位置にLightを置いています。
なのでSSの状況ならいいかんじに見えますが、実際は位置関係によっては本来明るい
はずの近場が逆に暗かったりする不具合が構造的にあるとは思います。
Lightオブジェを2つ使う理由はそのサンプルが出た経緯を見てもらうと多分。
で、実用重視であれば、単に松明をPCに装備すればそれでOKだったりします。
光源の位置はAttachLightのノード位置で多分調整出来ますし。
ただ、松明だと現状メラメラ音を消す方法が無いのと、ライトを点灯したまま
バイクを離れる事もあるかも、という理由でとりあえずスクリプトでLightを制御
する例を紹介しました。
確かにスクリプト制御は複雑で色々面倒ではあるので、どの方法で行くかは
状況に応じて、と言う事で。
あとバイクが集中的に攻撃されたり敵を勝手に追いかけたりの挙動の抑止は
「SetGhost 1」で行けるかもです。
518 :
3 :2010/12/31(金) 00:00:24 ID:ONwD8zg7
>>517 詳細な説明ありがとうございます!
スポット状は無理でしたか…円状のほうが処理が簡単とか何かしら理由があるのでしょうね…。
結局Lightはスクリプト制御で2つ利用することにしました。
距離400と600の位置に高さ200のLightを2つ配置して、SetPosを続けています。
NR500をGetAngle Xして、車体の傾きでLightの高さを調整するようにしました。
しかし、ここで初めて不可解なバグに遭遇しました。
(1)NR500をGetAngleしているのに、なぜかマウスの操作による上下角をとってくる
(2)Lightオブジェを0.2秒毎にMoveToしたところ、その度にバイクのサウンドが消されてしまう
(1)は、プレイヤーを対象にすればプレイヤーの上下の視点の角度を取ってくるのは
わかるのですが、なぜかNR500でもそうなります…。馬だからでしょうか???
透明なダミーオブジェを一緒にSetPosして、そちらからGetAngleするしかないかもしれません。
(2)はOblivionの仕様を初めて強く実感したもので、2つのLightをMoveToする度にサウンドが消えてしまい
どうしようか頭を悩ませていたのですが、Idleは0.85秒毎、Forwardは0.51秒毎に再生しているので、
その間をとって0.93秒毎にLightをMoveToさせたら気にならなくなりました。
最初は原因究明に大変手間取りましたorz
MoveToは便利ですが、ほどほどにしないとマズイということを痛感しました。
「SetGhost 1」で無敵のバイクになりました。
これでバイクが無人運転で独りでに逃走したり敵を追いかけ回すことはなくなりそうです。
立て続けでまことに申し訳ないのですが、オブジェに接触したらバイクが吹っ飛ぶのを実装しようと思い、
TriggerZoneの接触物の判定でIsActorで1なら相手を飛ばし、0なら自分が吹っ飛ぶとしたのですが、
自分が飛ばされることは一度もありませんでした。
だとすると、IsMovingForwardとかSpeedとかで前進中と判断した時に、GetPosで前フレームと位置を比較して
位置が動いていなかったら自分をPushActorするというような処理でいくのが良さそうでしょうか…??
>>518 (1)は、「GetAngle X」ってPC以外のアクターの場合例え坂でコリジョンが傾いていても
常に0を返します。でも乗馬中はPC同様マウスの視線上下角を返すみたいです。
地形によるアクターの傾き角を検出するのって実は非常に困難で、こうすれば必ず
OK的な簡単な方法はちょっと思い当たらないです。
(2)は、MoveToって本来静的なオブジェを動かす為の関数では無く、実は動作する
方がむしろ偶然なので場合によっては思わぬ事が起きるかもです。
その辺の挙動はオブジェの種類によっても違いますし、不明な部分もあったりする
ので可能ならMoveToの頻度はなるべく減らす方向で行くのが安全かもです。
あとTriggerZoneって原則StaticなオブジェにはOnTriggerしないです。 なので地形や建物、木や岩との衝突を検出するなら自前で別な何かをする必要が。 簡易的には現在の状態と移動ベクトルの急な変化の監視でそれなりに行けるかも です。 真面目に前方の地形を判定するならGetLOSと視線判定用のアクターオブジェを使う 方法(前スレ503)もあるのですが、非常にややこしいですし高速移動の場合は少し 無理があるかも。 それか考え方を全く変えて、衝突しそうな場所にTriggerZoneをあらかじめ配置、 そのスクリプトのOnTriggerでバイクが高速走行中ならPushActorAway、みたいに する手も。 これって全ての状況に対応しようとすると手間や規模が実際的では無いので一見 無謀な方法に思えますが、でも仕組み的には超単純ですし、例えば自前のサーキット みたいな場所限定なら充分アリだと思います。 それともその辺の物理的な挙動のリアルさを追求するならHavok乗り物の線がまた 浮上して来たりして。 でもHavokで二輪ってどうやればいいんでしょうね。立ちゴケさせない事自体が 超難しそうな気も。ネタ的には面白そうなのですが。 一般的にシステムで提供されている以外の事をしようとすると急に難しくなったり 実際に試さないと予想が付かなかったりするので色々大変だと思いますが。 でもその辺は気合で。 なんか話が散漫になってしまいましたが。そんなかんじで。よいお年を。
521 :
3 :2010/12/31(金) 18:43:13 ID:ONwD8zg7
>>519 こちらこそ、よいお年を。今年はMOD作りで大変楽しい時間を過ごすことができました。
バイクMODが自分に作れるなんて全く思っていなかったので、今は至福です。
「GetAngle X」ってちゃんと機能しないんですね…残念です。Lightの可変高度は諦めます。
「MoveTo」は確かに、RPGツクールでいう「場所移動」ですもんね。「位置調整」に用いる
というのは誤った使い方ですね。でも便利だから使っちゃう。
TriggerZoneについては「現在の状態と移動ベクトルの急な変化の監視」をまず試してみたいと
考えています。それに加え、もしもサーキットのようなものを作るなら、そこに衝突判定用の
TriggerZoneを配置してみようと思います。今わざと名無しの人さんのサンプルMODの荷車に
体当たりしまくって吹っ飛びまくってるんですが、これとても笑えますw
Havokでバイクは試みとしてはきっと面白いと思いますが、ちょっと難産そうなので
やめておこうと思います。でも車MODを作るとしたらその時は是非検討させていただきます。
バイク自体は馬のシステムの存在の上なのでまだ作りやすいですが、色々手を出していくと
簡単にはいかなくなってきますね。精神論的なものは得意なので気合でクリアしたいと思います。
522 :
3 :2010/12/31(金) 18:46:00 ID:ONwD8zg7
ベクトルの計算でやってみたのですが、どうもGetPosの値が不安定なようでダメでした。 ;前フレームのGetPosとベクトルをバックアップ set x2 to x set y2 to y set vector2 to vector1 ;ここから平方根の計算 set x to NR500PlayerREF.GetPos X set y to NR500PlayerREF.GetPos Y set rz to NR500PlayerREF.GetAngle Z set x to x + ( sin rz ) set y to y + ( cos rz ) set posgapx to (x - x2) * 2 ;x2(前フレームのGetPos Xの位置)から進んだ距離を測定 set posgapy to (y - y2) * 2 ;y2(前フレームのGetPos Yの位置)から進んだ距離を測定 set posgapx to abs posgapx set posgapy to abs posgapy set vector1 to posgapx + posgapy set vector1 to SquareRoot vector1 ;ここまで平方根の計算 If (vector1 - vector2 < -5) ;前フレームのベクトルより5小さければ MessageBoxEX "Crash!!! EndIf
523 :
3 :2010/12/31(金) 18:49:42 ID:ONwD8zg7
ですが、実際はなんにもない直線でいきなりCrash!!!になったりします。 その時のベクトルを確かめてみると、「vector1: 100 vector2: 150」とかになってたりして GetPosからの値が安定していないようです。 ベクトルの急激な変化の監視に加え、前フレームと現フレームの位置を比較して、 現在のSpeedからどうなのかも調べて、二重でいったりする必要があるかもしれません。 でも結局それもGetPosを使ってるので、どうかわかりませんが…。 あと、なぜかfloat同士の割り算をしたらスクリプトが動かなくなってしまいます。 If (vector1 / vector2 < 0.1) ;現フレームのベクトルが前フレームの1/10だったら これは全く理由がわかりませんでした。 自分をPushActorAwayさせるのはなかなか困難みたいです…。 多分自分が吹っ飛びまくるとプレイヤーもストレスが溜まるだろうし、 サーキットにZoneTriggerを置くだけでいいかもしれません。
CSで回復のポーションの値段を変えたいのですが 何処をいじればいいでしょうか? あと、チェイデンハルに花を植樹したいんですけど どうすればいいでしょうか?
>>524 その質問はまずCSのヘルプを読むべき。
>>1 をダウンロードしなさい。
簡単に作れると言った手前質問しづらいのですが…Tona先生の魔方陣を指輪だけで表示できるようにしようと色々いじって単品だけは表示されるようになったのですがスクリプトが動いてくれません。どこが悪いかわかる方いらっしゃいますでしょうか。 ref actor short MGC Begin gamemode set actor to GetContainer if(actor) if (MGC == 0) ;■状態フラグが0なら if ((actor.GetEquipped aaTonaMGring2) && (actor.IsWeaponOut)) ;指輪装備、抜刀状態 set MGC to 1 ;■状態フラグを1にする actor.AddItem aaTonaMGCRing,1 ;魔方陣装備追加 actor.EquipItem aaTonaMGCRing ;魔方陣装備 else ;■条件未成立なら set MGC to 0 ;■状態フラグを更新 if (actor.GetItemCount aaTonaMGCRing > 0) ;■魔方陣装備を持っているなら actor.RemoveItem aaTonaMGCRing,1 ;■魔方陣装備を削除 endifendif else if ((actor.GetEquipped aaTonaMGring2 == 1) && (actor.getequipped aaTonaMGCRing == 1) && (actor.IsWeaponOut == 1)) ;魔方陣装備、抜刀状態 ;■条件成立中なら set MGC to 1 ;■状態フラグを更新 else ;■ set MGC to 0 ;■状態フラグを0にする if (actor.getitemcount aaTonaMGring2 > 1) actor.equipitem aaTonaMGring2 endifendifendifendifend
>>526 もうちょっと要件が整理されてれば答えられるかもしれません
「相手も分かるだろう」という判断での要件説明の割愛は混乱のもとなのと
それが他人のMODの改造の話となると尚更回答出来るひとを絞ってしまうので
一回何をしようとしているのかとどこまでは出来ててどこで詰まってるのかを汎化して簡潔に書いてみては如何ですか?
528 :
526 :2011/01/01(土) 19:37:57 ID:j2G34cPJ
すいません正直自分でもよく解らなくなっているのですが 現状では単品(Anchorite_outfitの魔方陣のみ)をアミュレットとして登録して装備した場合正常に表示されますが 指輪(同じくAmchorite_outfitのモノをそのまま流用しただけの指輪)に上記のスクリプトをつけて装備を切り替えようとしているのですが スクリプトの最初の方の if ((actor.GetEquipped aaTonaMGring2) && (actor.IsWeaponOut)) ;指輪装備、抜刀状態 set MGC to 1 ;■状態フラグを1にする actor.AddItem aaTonaMGCRing,1 ;魔方陣装備追加 actor.EquipItem aaTonaMGCRing ;魔方陣装備 まですら動いていない?状態です 動作としてはTona先生の魔方陣装備、もしくはGradriel_Armorとセットの剣のような動作が目的となります
529 :
3 :2011/01/01(土) 19:53:31 ID:MLJfC9ja
>>519 たたみかけるような連投すみません。
例のサーキットの件、ジムカーナですがちょっと試してみました。
http://www.nicovideo.jp/watch/sm13192027 パイロンが熱狂的(ryで、走行ラインは黒い影をつけて書いてあります。
あとはTriggerZoneをパイロンの近くに置いて実際に通ったかどうかを判定しようと
考えています。
例えばTriggerZoneを30個置いたとして、それぞれに固有のReferenceIDをつけます。
添付するスクリプトの中身として、1つTriggerZoneを通過するごとに変数を+1していって
ゴールに着いたときに変数が正しい数値ならゴール。GetSecondsPassedを使ってタイムを
記録するといった感じにしようと思っています。
ミスコースへの対応としては、スクリプトで自分のReferenceIDを確認して、例えば
8個目の「TriggerZone08REF」だとしたら、変数の値が07になっていないと+1の処理をしない
といった感じにしようと考えてます。
あとは、そのZoneTriggerを如何にして表示するかですが、ZoneTriggerはゲーム中には表示されない
みたいなので、適当な当たり判定のないオブジェのグラフィックを使うか、地面に色を付けて
「ここは絶対通るように」と明示すればいいかなと思ってます。
実際にサーキット(動画はジムカーナですが)が作れるとは思ってもいませんでした。
「名無しの人」さんは本当に神です! ありがとうございました!
>>528 ちょっと整理するとこんな感じでいいですか?
装備A:aaTonaMGCRing スロット「Amulet」見た目「魔法陣」
装備B:aaTonaMGring2 スロット「Ring」 見た目「指輪」
で、装備Bを付けていてかつ抜刀したら装備Aを追加して装備させ、
納刀したら装備Aを外して削除すればOK?
追加で教えて頂きたいことが2つあるんですが、
1.スクリプトが付与してあるのはどのアイテム?装備B?
2.魔法陣がよくわかってないのですが装備Aはスロットは「Amulet」でいいんですよね?「Ring」ではなく
そして装備Aは何も弄らずに単に装備している場合は表示に成功している状態でよいですよね?
それでよければ見た目は魔法陣じゃなくてバニラの適当なNIFになると思いますが
サンプルを作ってみます。
531 :
526 :2011/01/01(土) 21:09:37 ID:j2G34cPJ
>>530 スクリプト付与は装備Bですね
2はそのとおりです。名前がRingなのは最初リングで作ってみたら魔方陣が表示されなかったので…
すいませんよろしくお願いします
>>531 作ってみました。
一応簡単に動作確認して動いているので仕組みは問題ないと思います。
動きを分かりやすくするために作りを変えて変数は極力とっぱらいました。
また、エラー処理が入ってないので例えば
「アミュレットを装備しようとしたら既にアミュレットが装備されてたのでつけられない」
「アミュレット装備中にインベントリ開いて外されたらどうするか」
など諸々は入ってないです
環境が許すならOBSEのGetEquipmentSlotでアミュレット装備可能かチェックするなどした方が
あとあと困らない気がします
(というか、一番堅いのは指輪として装備するのではなくアミュレットとして装備して
アミュレットのNIFを魔法陣じゃないものから魔法陣に差し替える、という気がしなくもないです)。
サンプルはこちらのURLになります。
http://shy.jsphr.net/upload/img/ups21727.7z
>>531 すみません、途中で送信してしまいました。
スクリプトはURL内に含まれています(改行数関係でここには書ききれないので)。
READMEに記載しましたが、動作確認の際はplaceatmeなどで指輪を取得して下さい。
また、Amuletである関係上UpperBodyの装備によっては隠れてしまい分かりにくいので
上着を脱いで動作確認して下さい。
抜刀とともに皮手袋が手に装備されるはずです。
535 :
526 :2011/01/01(土) 23:39:19 ID:j2G34cPJ
うーん、やっぱり指輪からアミュレットよりアミュレットからアミュレットの方が手堅いですか… 色々有難うございます。今から動作確認とかスクリプト眺めたりとかしてきます
謹賀新年。
>>523 移動量での判定ってfpsとの兼ね合いもあるのでやっぱ少し面倒かもですね。
単にフレーム毎のxy変化量だとfpsが確実に一定で無い限り比較してもあまり意味が
無いので、まず移動量を単位時間当たりに正規化する必要があるかもです。
また、もし二点間の距離を真面目に出すなら平方根が必要になるのですが、単なる
大小比較なら特に平方根は不要だったりします。
例えば(x0,y0)と(x1,y1)という二点間の距離の場合、
dx = x1-x0
dy = y1-y0
距離の二乗 = dx*dx+dy*dy
なので大小比較はこの段階の値同士ですればOKですし、別の値(例えばspdなんて名前
の速度の比較基準値があるとしたら)と比較するなら「spd*spd」としてから比較すれば
OKです。多分。
あと割り算については、もしその「vector2」が0になる状況があるとゼロ除算になって
以降そのスクリプトは停止するのでその辺注意が必要かも。
パイロンはなんかそれっぽい形状のHavokオブジェを作って置いとくと衝突の反応も
それなりになっていいかんじに見えるかもです。
ミスコース判定はその方法で行けると思います。それかTriggerZone通過で特定の
トークン用アイテムをAddして、そのアイテムを持っているかどうかでチェック
ポイント通過を判定するとか。
徹底的にやるならTriggerZoneでコースをみっしり取り囲んでコース外走行を確実に
判定するとか。その辺方法は色々ありそうな気も。
スクリプト作成未経験者の質問なんですが Drop Lit Torchesにあるような盾を持って武器を構えた際に明かりを地面に落とす機能を FranやOOOにあるイルミネートスタッフや各種MODにあるランタンなど、松明以外の手持ち光源に対して 汎用的に拡張するのは単純にできるものなんでしょうか 決め打ちする泥臭い方法ならなんとなく実装できる感じはするのですが
CSである場所に家(ヴァニラのコピー)をたてて、エクステリアにItemsを置きました 家の位置が気に入らなかったため家とItemsを少し移動したところ ゲーム内では家だけ位置が変わり、Itemsは元の位置のままでした 回避方法を教えてもらえないでしょうか OBMMのArchive InvalidationでFile Typeを 全てチェックして実施しましたが改善しませんでした よろしくお願いします
アイテムや、条件は判らんけど一部のワールドオブジェはセーブデータに位置情報が残る つまり、その作成中の家MODを外すか 外せない理由のあるMODならオブジェを削除してゲームをセーブする必要がある その後は、配置をいじってる途中でセーブせずに、常にそのMODに対してクリーンなセーブでテストすれば同じ事は起きない
540 :
3 :2011/01/05(水) 18:14:38 ID:Mvw0DW9O
>>536 おっしゃる通り、3フレームで判定したら誤検知はなくなりました! ありがとうございます。
岩などにぶつかってからクラッシュまでわずかにラグがありますが、安全マージンという
ことで全然許容できる範囲です。判定にはSpeedも用いました。
0除算ですが、自分もそれかなと思って最初に1などを代入して試してみたのですが、
なぜか効果なし…。よくわからないです。今はこの処理は必要なくなりました。。。
パイロンは熱狂的(ryよりパイロンのほうが処理も軽くなってよさそうですが、
ここはあえて熱狂的(ryを使い続けたいと思います。
>ミスコース判定はその方法で行けると思います。それかTriggerZone通過で特定の
>トークン用アイテムをAddして、そのアイテムを持っているかどうかでチェック
>ポイント通過を判定すると
うーん、自分的には変数のほうがいいかなと思ったのですが、トークン用アイテムの方に
何か利点はあったりしますでしょうか?? クエスト変数にすれば他からも参照できますし…。
今のところは、コースアウトしても失格とかにはならなくて、ただ本来の場所に戻る必要が
あるだけにしようと考えています。草地や砂地とかに行ってもスピードは落ちないしスリップも
しないわけではありますが、TriggerZoneを路面にだけ置けばいずれにせよそこを通るしかないので。。。
複数のTriggerZoneを配置してタイムを記録できるようにはなりました。これから、レースを取り仕切ったり
ルールを説明したりするNPC(オフィサー??)を作ったり、一緒に走るライバルNPCを作ろうとしています。
パスグリッドで上手くコースを走ってくれればいいのですがどうなることやら…。
>>539 なるほど・・そういう仕様なんですか
ありがとうございました
>>540 じゃ次はパイロン作r(ry と思ったら要らない流れですねw
自分はCSでの作業とかscriptとかド素人なのでアレな意見かもですが、
所持するだけで移動速度をスポイルする不可視アイテムみたいのを作れれば、
・コースアウト検知の際にそれを強制的に懐に突っ込む
・コース復帰検知時に没収する
という手法で自然なコースアウトとそのペナルティーを演出できないでしょうか?
いやその方法とか実際できるか否か等、全く解ってないんデスケドねb
流れぶった切って素人質問してすいません プレイヤーの重量オーバーを検出する、またはプレイヤーが持っているアイテムの総重量を検出する方法ってありますか? Construction Set Wikiを探したのですが、GetActorValue Encumbranceで所持可能重量を取得できるところまではわかったんですが、 現在の総重量、または重量オーバーかどうかを検出する関数がどうしても見つからない… 所持している全アイテムについて重量を合算するしかないんでしょうか Double-Tap Dodgeでdodge中に重量オーバーで動けなくなるのをなんとかキャンセルしたいんです feather薬飲んだり、コンソールからIdle状態にすれば復帰できるんですけど…できればちゃんと復帰して feather系魔法で復帰したいところです
544 :
3 :2011/01/06(木) 01:46:52 ID:4hPsoVmO
>>542 正直自分には熱狂的(ryと普通のパイロン、どちらがプレイヤーに望まれてるのか
わかりません。自分は単に前者が好きなのでそちらにしただけです。
なるほどー、減速させるというのはアリですね! ありがとうございます。
実装は難しくないと思います。TriggerZoneを路面の両側にうまく敷き詰めて、
それのOnTriggerで減速用アイテムを1つAddItemする。
バイク側のスクリプトでは常に減速用アイテムを1つRemoveItemし続けて、
それがある場合はSpeedを直接低下させる。あまりにも高速でオフロードに
侵入したらPushActorAwayで転倒というのも面白いかもしれません。
オンロード車でオフロードを走るのはマジ恐怖です。
色々調整は必要だと思いますけど面白そうです!
うーん、AIPackageって難しいですね…。TriggerZoneをLocationにしたAIPackageを
Add/RemoveScriptPackageしているのですが、上手く動いてくれません。
ライバルとの競争は後回しにして、まずはタイムアタックだけでも十分かもしれませんね…。
>>543 GetActorValue Encumbrance → 現在の総重量
GetBaseActorValue Encumbrance → 所持可能重量
じゃなかったっけ
>>537 遅レスですが。汎用にする事は出来るとは思います。
でも必ずしも「汎用=単純(簡単)=泥臭くない」、ではない予感も。多分。
まずは実際に何かを作ってみてからの方が色々話が早い気が。
>>540 トークンアイテムの利点って逆に外部変数を使わなくて済む事だったりします。
FactionのRankを変数代わりにするのも同様です。
特にどの方法が優れている、と言う事ではなく、外部変数の要不要は多分レース全体
の構造次第だと思うのでその辺は必要に応じて、と言う事で。
AIはどうしましょうね。
ジムカーナ的な同時一台走行なら、StartとGoalにマーカーを置いてコース上に一本
PathaGridを敷き、Start位置でGoalマーカーにTravelするパッケを開始すれば後は
成り行きでコース上のPathを通ってGoalまで走って行きそうな気もするのですが。
複数台の場合はスターティンググリッド毎にマーカーを置いて専用の独立した
PathGridを複数敷けば渋滞せずに並んで走って行くかも。
でもPathGridだと予定調和の出来レース的になりそうな気もするので、TriggerZone
やマーカー類、PlayGroup FastForward、GetHeadingAngle、SetAngle Z等々を
駆使して特定経路の自律走行を自前でスクリプトで作るのもアリかもです。
で、新年いきなりOb用PCが壊れてしまい、その辺実際にどうなるかは今ちょっと
試せないので上の話はとりあえずの予想、と言う事で。
復旧したらまた試してみます。
548 :
3 :2011/01/06(木) 18:09:46 ID:4hPsoVmO
>>547 変数って内容がセーブデータに保存されたりして、
使わずに済むならそうすべきなのかもしれませんね。
アイテムだったら、1つも持っていなければデータには影響しなさそうですし。
AIですが、色々試してみたのですが上手くいきませんでした…。
LocationをTriggerZoneにしたAIPackageを与えているのですが、
なぜか最初のTriggerZoneに留まり続けてしまってダメでした。
PathGridもしっかり繋がっているのですが…。
「予定調和の出来レース」笑いました。確かに何らかの状況を
変化させる要素を入れないとただ順番に走っているだけになりますね。
スクリプトで逐一NPCの動きを変化させるのはなかなか骨が折れそうですが、
TriggerZoneとの距離に応じてSpeedを増減させる程度だったらできるかもしれません。
このレースシステムは実装出来ればかなり面白いものになりそうですが、
どうも自分ではだいぶ力不足みたいなのでこれは今後の課題にしておいて、
まずはタイムアタック機能だけにしておこうと思います。
ああ、PCが…お気の毒さまでした…。OSの入れ直しとか、パーツ交換などの
簡単な処置で直ることを祈ってます。
>>545 ありがとうございました
modified valueって説明があったから、魔法とかで補正された値だと思ってた…
よく見たらGetBaseActorValueの解説のNotesのところに、そうした効果で補正された値を取れるわけではないって書いてありますねorz
GetBaseActorValue Encumbranceは常にStrength*5の値になってて、
GetActorValueは実際のアイテムの総重量からFeather魔法の効果分引いた値が表示されてるようでした
…が、よく見るとGetBaseActorValue Encumbranceで取得できる値はStrength*5よりなぜか+4多い…なんだろうこれ
試しにFortify StrengthのポーションでStrength増やしてみても、やっぱり+4多い値でした
これについてご存知でしたらご教示いただけないでしょうか
訂正 modified valueって説明があったから、魔法とかで補正された値だと思ってた… なので、てっきりGetBaseActorValueは補正前の値だと思ってました
プレイヤーの所持(インベントリ)アイテムを全て奪う(消す)にはどうすれば良いでしょうか?
>>551 メインクエのどこかにnpcにアイテムを全て持っていかれるイベントがあったかと。
それを参考にしてみては。
555 :
3 :2011/01/08(土) 20:22:13 ID:VDTH/TZq
>>553 復旧しましたか! 良かったです。
原因は電源でしたか…目立たないパーツですが、PC全体の安定度を大きく
司っているという…でも自分は電源には金を惜しむ派です。
サンプル拝見致しました。これは素晴らしいですね! 非常にシンプルな作りなのに
かなりいい仕事します! 「AIPackage+PathGrid」や専用スクリプトより全然いいです。
これでNPCをサーキットで走らせてみたいと思います。
set rz to CntRef.GetAngle Z + ( CntRef.GetHeadingAngle LocRef / GetFPS * 2 )
CntRef.SetAngle Z rz ;----目的地に向けて少しずつ曲がる仕組み 適当
この辺りが特に素晴らしいですね! 目標物への方角を返す「GetHeadingAngle」なんて
便利な関数があるとは…。「/ GetFPS * 2」というのも流石の配慮です。
最後のTriggerZoneの親としてスタート地点である「A1ZTriggerZone00Ref」が
設定されていないのは何か理由があるのでしょうか??
私もこの前体験したのですが、アクターが乗馬中だとOnTriggerに引っかかるのは
馬側のようですね。騎手を返すには「GetRider」を使えば良かったのを今知りました。
Locationを次のTriggerZoneにしてある「AddScriptPackage」で困ったのがこれでした。
馬にAIPackage付けても動いてくれないので…。
それと別の質問になるのですが、
DisableControl 10;(Run)
DisableControl 11;(Always Run)
これをやればプレイヤーは歩きしかできないと思っていたのですが、実際は
Shiftキーによる歩き/走り切り替えと、Always Runの切り替えが不可能になるだけでした。
プレイヤーのAlways Runを検出したり切り替えたりする関数ってないですよね??
バイク乗車中に、歩きor走りだけを使わせたいのですが、Always Runが問題になっています。
「PlayGroup (Fast)Forward 1」とかだと、SpecialIdleの切り替えで一瞬硬直が起こったりします…。
556 :
名無しさんの野望 :2011/01/09(日) 06:02:34 ID:haG3pqxF
物と物を糸のような物でつなげることって可能ですか?たとえばアイテムやNPCの死体を天井からぶら下げたり・・。(洞窟内のサンドバックのようにつるされてる罠を見て思いました。)CSとかmodでできますかね?
>>556 やりたいことによると思う
動くようにしたいのならBlenderでボーン入れ込む必要があるし
動かなくていいならCSでそれっぽいオブジェクトを組み合わせればいい
MODとはなにか、ツールは何があるのか調べたほうがいいよ
言葉の意味がわかっていないと聞いても結論が得られないことが多い
558 :
名無しさんの野望 :2011/01/09(日) 09:38:44 ID:dllboV85
ありがとうございます。ちゃんと勉強しようと思います。できたらおもしろいなと思って聞いてみた次第であります。
559 :
3 :2011/01/09(日) 11:05:47 ID:shwiF+CE
あの〜、バイクMODを作っている者なのですが、自分のサイト
http://life4oblivion.web.fc2.com/ に使っている手法とかを掲載したりすることもできるかなーと思ったのですが、
それって需要ありますでしょうか??
今簡単に思いつくのは、
・アニメーション雑記(車輪の回転とか)
・PickIdleで任意のSpecialIdleを再生させる方法
・ヘッドライト
とかくらいで、大した物でもなく狭い範囲のことになりそうなのですが…。
そういった情報が実際にどこにあるのか、この支援スレの過去ログにあったり
他の方のサイト・ブログにあったりするとは思うのですが、それをよく把握していないので
無駄に重複してしまったりすることも考えられるのですが…。
>>559 ステキ。ぜひぜひ。重複は気にしなくていいと思う
どんどん書いてOKだと思いますよ。
色んな手法を実際の制作で使った観点からの解説って貴重ですし。
>>555 上のPlayGroupの方法だとPickIdleとうまく共存出来ないかもなので、もし実際に
応用する場合はその辺が問題になるかもです。
少しずつ曲がる仕組みはあくまで仮です。
実際には割り算の安全措置が多分必要ですし、弧と接線みたいなもう少し数学的物理的
な曲がり方をするとカッコいいかも。
Parent指定で親子をループさせる事は多分出来ない気が。
A1ZTriggerZone00Refは一番最後の子供です。
また子→親の順に辿っているのは単にバニラのGetParentRefを使っているからで、
GetNthChildRefを使えば親→子の順でも行けるかもです。分岐とかも出来るかも。
人馬一体の時に馬とヒトどちらのRefに何がどう有効かは分かり難いですよね。
どちらかやってみて動いた方が正解、と言う事なのでしょう。多分。
PCのAlwaysRunのトグル状態の検出は「IsRunning」で、切り替えは「TapControl 11」
で行けると思います。
562 :
3 :2011/01/09(日) 17:38:10 ID:shwiF+CE
サイトには少しずつ書いていこうと思います。
>>561 「IsRunning」と「TapControl 11」で見事に解決しました! 流石です!
ありがとうございました!
>実際には割り算の安全措置が多分必要ですし、弧と接線みたいなもう少し数学的物理的
な曲がり方をするとカッコいいかも。
ちょっとそういうのは全然わからないので、とりあえずこのままでいこうと思います。
実際に試してみたら困ったことが起こりました。
( CntRef.GetDistance LocRefO > 400 ) ;----今のTZとの距離が充分離れたら
TriggerZoneとの距離が離れたらフラグを0に戻してトークンを消すという処理ですが、
ウチのサーキットの場合、TriggerZoneが大きかったり重なってたり超近かったりしていて
うまく切り替えが行われておらず、あちこちに暴走します。
「今触れているTriggerZoneに触れない距離になったら、フラグを戻す」ようにするか
「触れているTriggerZoneが同じな限り、何の処理もしない」としたいのですが、
少し考えた結果、これが非常に困難に思えました。
以下のような「不可能」なことができれば、上手くいくのですが…
・TriggerZoneのOnTriggerで、GetSelfで得た自分のTriggerZoneのREFを
走者側の変数に格納して、走者側は前回と違ったREFの場合のみ処理をする。
・走者側から現在触れているTriggerZoneのREFを検知する。
前者の場合、クエスト変数を使えばできますが、台数分だけ用意して
条件分岐するしかないし…。それでも十分といえば十分なのですが…。
やっぱりTriggerZone同士の距離を置いて、距離が離れたらフラグOFFが一番そうです。
2種類のTriggerZoneを交互に…というのも思いつきましたが、これも少し複雑になりそう。。。
563 :
3 :2011/01/09(日) 18:27:37 ID:shwiF+CE
と思ったらすみません、上手くいきました! AIPackageをWonderからTravelにして、(Wonderだとなぜか暴走) CntRef.GetDistance LocRefO > 1100 と400から1100に変更して、TriggerZoneを少し配置しなおしたところ、 途中で謎の定常円旋回することもなく無事にコースを周回し続けてくれるようになりました! TriggerZoneの位置の関係で姑息なショートカットを使ってくれたりしてくれますが、 これならレースにも使えそうです!! これは楽しみです! あとは、「GetAngle Z」で変化していたら減速、変化なければ加速とか、 ランダムなパラメータを少し与えてみたりして、面白みが出るように試してみます。 ライバルのTriggerZoneによるPushActorAwayも上手く機能すれば面白いのですがどうかな。
質問です。 NPCが特定の挨拶をしてきた時に("やぁ"とか"こんにちは"とか)プレイヤーキャラにも挨拶を返させることは可能でしょうか?
565 :
3 :2011/01/10(月) 12:44:20 ID:fY7v00+p
すみません、↑の方とは別ですが、 逆に近くに誰かいても関知せずに挨拶しないというのはできますか?? 該当NPCのDialogueボタンからGREETINGトピックの全てをDeleteしてみましたが、 これはあくまでプレイヤーがActivateした際のNPCの返答で、挨拶はしてきます。 しかもこれは全NPC共通の設定で、Deleteしてしまうと他のNPCにも影響が出ました。
>>562 上の例って作った本人は面白かったんですけど、やっぱOnTriggerをアイテム側の
スクリプトに通知する辺りが少しややこしいのでそのまま使うとその辺後々禍根を
残すかもですね。
別な考え方として、TriggerZoneの代わりに同様に親子指定したXMarkerか何かを
配置し、OnTriggerの代わりにアイテム側で現在目的のRefとの距離を判定して
処理をアイテムのスクリプトだけで完結させる方法も。
これって単にOnTrigger→トークンAdd→トークンがあるか判定、の処理が距離判定に
置き換わるだけなので、アイテムスクリプト側の構造はあまり変わらないのですが。
でもTZ自体やトークンは不要になるので部品点数は減らせるかもです。
>>564 不可能では無いと思います。
PCと一定距離以内のNPCを「IsTalking」と「GetCurrentAIPackage」で監視すればPCに
挨拶したかどうかは多分。また「Say」、「SayTo」はPCにも有効です。
>>565 NPCのPCへの挨拶ってConversation→HELLOです。
挨拶が起きるのは基本的に下の条件が全部満たされた時です。
a) そのNPCがPCに気付いている
b) 今のAIパッケの「SkipFalloutBehavior」がOFF
c) PCとの距離がGMSTの「fAIMinGreetingDistance」より近い
このうちのどれかをなんとかすれば多分。
あと全く未確認な方法ですが、既存の任意NPC一人だけをAI等はそのままで挨拶だけ
を抑止、みたいな場合は、「fGreetingTimer」の値を一時的に極端に大きくして
一回「SayTo Player HELLO」させ、またfGreetingTimeを元に戻すとそのNPCだけ次の
挨拶が起きるまでの時間が極端に長くなる可能性が。
569 :
564 :2011/01/10(月) 19:30:41 ID:mio4Ri4w
>>567 ありがとうございます。なんとか出来そうな気がしますが、いつもscriptで
分けがわからなくなっちって結局ボツにしちゃうのがNPCの検出なんですよね、
自分の場合('A`)
簡単でもいいので↑のNPC検出の例を教えてもらえませんか?
>>565 あ、勘違いしてました。PCに限らず誰とも挨拶→会話しない、て事ですか。
その場合はb)で。そのNPCが既存なのか自前なのかとかその辺の条件次第で
何が出来るかは変わって来る気はしますが。
Dialogue側に細工する事も可能かもですが、既存部分はなるべく弄りたくない気も。
>>569 付近のNPCの検出は「範囲魔法」や「GetFirst/NextRef」等の方法があるのですが
とりあえず後者で。ここを。
http://cs.elderscrolls.com/constwiki/index.php/GetFirstRef 処理的には多分、「IsTalking == 1」で「GetCurrentAIPackage != 6(DIALOGUE)」の
NPCがいたらそのNPCが話し終わるのを待ってPCに「SayTo そのNPC 適当なTopic」、
とかそんなかんじです。多分。必要ならTopicの作成も。
また、この場合NPCの検出や判定は毎フレームする必要は無いので1秒に一回とか
そのぐらいで。恐らく。
とりあえず好きな様に作ってみてどこが訳分からないかを具体的に提示すると
多分話も具体的になるかもです。
572 :
564 :2011/01/10(月) 22:56:26 ID:mio4Ri4w
>>571 とりあえず形にしてみます。丁寧にありがとうです。
573 :
3 :2011/01/10(月) 23:21:14 ID:fY7v00+p
>>568 >>570 ええと、とりあえずPCへの挨拶を止めようとしていました。
「SkipFalloutBehavior」って初めて知ったのですが、これをチェックした
AIPackageを使ったら無事に挨拶してくれなくなりました。ありがとうございます!!
「fGreetingTimer」を使った方法はちょっと難しそうなので試してません、すみません。
レースですが、とてつもなく苦戦しながらもようやくベータレベルになってきました。
[問題1]…NPCのライン取りが上手すぎる
普通に置いてあるTriggerZoneの中心に向かって進むだけの簡単なお仕事のはずなのですが、
なぜかショートカットしたり、ラインを狙いすぎて海にドボンしたり、
TriggerZoneを踏み損なったのか謎の定常円旋回を延々としてくれたりします。
次のTriggerZoneへの方向があまりに違う場合、強制的にSetAngleすることで妥協…。
でも…この人達の動きほんとありえないよ…orz
[問題2]…無人のNR500が走り回る
1回目はいいのですが、2回目以降、再びNPCのバイクをスタートラインにMoveTo+SetPos
すると、なぜか人が乗ってなかったりします。で、無人のバイクが超高速で走りまわります。
どうも遠くでバイクに乗っている人をMoveToとSetPosで持ってくると、
乗っている人がどっか行ってバイクだけカムバックしてくることがあるようです。
正常に人車一体で来ることもあり、もうほんと謎です。
WorldSpace、またはCellをRespawnできれば状況を戻せると思ったのですが
やり方が分からなかったので、リセット用として、サーキットに着くたびに
バイクとNPCの位置を「PositionWorld」でリセットするようにしました。
しかしなぜかバイクの位置は変わらず何がなにやら…orz
それでも一応、色々小細工してNPCがバイクに乗り直せるようにしました。。。
レースシステム実装への道のりは遠い…_| ̄|○
>>573 距離判定に変更しました?OnTriggerよりその方が多分確実ですよ。
上のサンプルって、「こういうのって普通はマーカーとの距離判定でやるんだけど、
TriggerZoneのOnTrigger『でも』出来るよ」、という意味合いもあったりします。
手法的にはマーカー+距離判定の方が一般的です。多分。
またもしWorldSpaceで何セルにも跨る様な巨大コースだったりすると、ロードされて
いないセルのスクリプトは原則動かないのでこの方式自体に無理があったり。
その辺ってOKなんでしょうか。
細かな問題個別の対策に入る前に、レース全体の動作の流れとかも含めて全体の
構造に問題が無いか一度確認した方がいいかもです。
すみません、Blenderで装備を作ろうと落としてみました。 しかし普通に必要なツール等を集めても。 上手くnifファイルが読み込めなかったので。 そこで、TES NEXUSで公開してくださっている。 必要ツールをまとめた2.49bバージョンをダウンロードしてみました。 こちらのおかげで、nifは読み込めるようになったのですが。 今度はこのBlenderを日本語化しようとしたところ。 何度かしたように上のツールバーを引き下げて設定を出しLanguageをjapaneseに変えようとしました。 しかし、Englishしかなく、どうしても日本語化出来ません。 どうすればJapaneseが表示されるようになるのでしょうか。 どうかお力をお貸し下さい。
576 :
3 :2011/01/11(火) 20:36:02 ID:aTgJJhKV
>>574 全体の流れは恐らく問題ないと思います。ライン取りとMoveToが問題になっています。
諸事情からOnTrigger方式のままでしたが、Markerからの距離方式に変えて
みようと思います。路面の両側の草地・砂地にTriggerZoneを敷き詰めて、
それで減速という風にするのがおそらく一番ですね。
Markerに使うオブジェは何でも使えるのでしょうか? 過去ログにNPCやネズミを
Disableしたのが安全みたいなのがあった気がしますが、どうでしょう…??
PCがいないエリアにいるNPCはやっぱり動いてなかったりするみたいです。
一回抜かして距離を開けるとそこに留まり、周回遅れとして再会みたいな感じに…。
でもAIパッケージでも使わない限りそれは仕方ない気がします。
違うエリアでもスクリプトを動かさせる優先権みたいのを設定できれば最高なのですが…。
現在目指しているのは、競争というよりは共走です。
NPCの挙動がもう少し改善できれば、競争としても成り立ちそうですが。。。
TESNで二人乗りが機能してないと報告を受けて、実際に試してみたら
エリアロードで乗客が置いてけぼりになってて(´・ω・`)
乗客は椅子に座っていて、椅子の位置はそのまま乗客のみをSetPosしているのですが、
エリアロードに引っかかるみたいです。しかし乗客をMoveToしちゃうと座りが解除
されてしまうし、椅子をSetPosやMoveToしても全く効果なし…。
椅子方式をやめて、本人だけをSetPosやMoveToするしかないかもしれません。
少し前に試したところ上手くいかなかったのですが、また試してみます。
>>578 Blenderの本家から最新版DLして別の場所にインストールして試してみるとか
あと、ぶっちゃけ日本語化の恩恵はあまりないかも、解説サイトでも英語表記が多いですし
ちなみに自分はx64のOSつかってるのでnifのインポート、エクスポートはx32版で実作業はx64版でやってます。
作業が1段落したらBlendファイルで保存、x32版を起動してBlendの読み込みか最後のセッションを復元で再開してnifでエクスポートしています。
少しだけめんどいですけどフリーのツールなので仕方ないかと諦めてます
有難う御座居ます! 本家から落としてきたものを別の場所にインストールして スクリプトなどをTES NEXUSのものからコピーすると 日本語化出来、nifも読み込めました。 本当に、本当にありがとうございました!
>>576 ライン取りは、TZ同士が近かったり大きさに対して判定距離が適切でないと色々
変な動作をすると思うので、TZをマーカーにしてを判定の距離を適切にすれば多分。
馬のMoveToは、対象が現在ロード(PC中心の5x5セル以内)されていないと乗員と一緒
には移動してくれないかもです。
遠い場合は馬と乗員それぞれをMoveToして改めて乗馬させる、みたいな手当てが
多分必要に。
マーカーはXMarker等の普通のオブジェでOKです。
マーカーにアクターを使うのは、マーカーを移動させる必要があってかつ移動後の
位置をSaveに保存も必要、みたいな特殊な場合です。
例えばコンパニオンの住居位置の指定とか。
また、別にXMarkerが「危険」という事では無くて、特殊な状況の時はマーカーに
アクターを使った方がいいかも、という事なのでその辺誤解なきよう。
通常の用途ならXMarkerが適当です。
「エリアロードで置いてきぼり」って状況がよく分からないのですが、単にロード中に
乗員の動きが極端にガクガクする、て事ならロード中の描画タイミングとかその辺の
関係でGet/SetPosが反映されなかったり遅延する、とかでしょう。恐らく。
その場合は座り状態である事や椅子の位置は関係無いです。MoveToも多分状況は同じ
です。
要するにGet/SetPos/MoveTo方式は元々構造的にLaggyな上、ロードでカクつくと
それが極端になる、て事だと思います。
OSRで改善し切れないとなると簡単には行かなそうな気も。
582 :
3 :2011/01/13(木) 12:35:35 ID:HMC77zKo
>>581 マーカーの使い方について理解しました。ありがとうございます!
マーカー方式にしたところ、マーカーの置き方によってライン取りを操作しやすく
なってよくなりました。マーカーの測定距離内に入って目的地変更の処理が
確実にされているはずなのに、処理がされていないのかラインオーバーしたり
戻り始めたりと、スクリプトが動いていないと思われる時がありますが許容範囲内です。
おかげ様でスクリプトも大幅にシンプル化できました! ありがとうございました!!
このスクリプト動作不良はもしかしたらOSRの影響かもしれません。
OSRは設定次第では色々な処理を省略化することがあると聞いたことがあります。
MoveTo不良の件ですが、人もバイクも両方共設置したXMarkerにMoveToしたら
乗ったまま来るようになりました! 保険として1人でも乗っていなかったら
Returnで待つように、8秒以上乗らなかったらレース開始としています。
スピード調節も可変的にして、ライン取りも良くなったおかげで大分まともになった
と思います。近々バージョンアップできそうです!
「エリアロードで置いてきぼり」というのは、エリアとエリアの境目で同乗者の
グラフィックがピタリと止まってしまうという現象です。なぜかShiftキーを押して
加速している時だけ発生し、Shiftキーを離してスロットルオフするとついてきます。
ヘッドライトの時も同様の現象が起こっていて、Shiftキーに何の意味があるのか謎です。
あと、初期設定の二人乗り時の最高速度は280ですが、これを400とかにしてスピードを
出していると、その内同乗者がスッと消えて、最初に乗った(椅子のある)場所に
佇んでたりします。何らかのシステムに引っかかっているのかもしれません。
ヘッドライトの場合は約1秒周期でMoveToしていますが、同乗者の場合はMoveToすると
椅子への座り状態が解除されてしまうため使えません。SetPosの限界のように見えます。
Blenderの質問はここでいいのかな? つぎはぎで装備作ってたら、光源の近くで肌のテクスチャが表示ずに、真っ白になってしまいます 暗いとこならしっかり表示されるのですが・・・ どなたか、解決法をおしえていただけませんか?
>>583 わかるかどうかわからないけどnifskopeの画像plz
出来れば肌部分のツリーの階層を開いて
>>585 aatestmanSCの7行目「TestAman」は「TestBman」では。多分。
>>582 大体動いた様で。
で、今更ですが、動作が不安定ならNPCの走行は素直にAIにするのもアリかもです。
自分でサンプルを作っておいてこんな事を言うのもなんですが、アクターに一定経路
を走らせるのならAI+PathGridにするのが本来ですし、動作も確実です。
AIを使うのはあまりにも当然なので細かな話は省略しただけで、別にサンプルの方式
の方が優れている、と言う事では全然無いのでその辺も誤解なきよう。
例えばこんなかんじにPathを敷いて適当なAIを付ければ普通に動きますし、追い越し
もある程度は起きると思います。
http://shy.jsphr.net/upload/img/ups22117.jpg わざわざPlayGroupで走らせる利点って、方向転換の計算をそれなりに書けば現在の
速度や進行方向によって経路がある程度変わり、NPC同士の追い越しも多分それなりに
自然になるかも、て事だけだったりします。
一方欠点は、開始/終了/再開操作が煩雑、見えている範囲でしか動かない、
PickIdle出来ない、z角を常に変更しているのでそのままだとラグドール
(死亡/麻痺/Fatigue/PushActorAway等)になると異常になる等々いっぱいあります。
ラグドールの対策は実は厄介かもです。
なので最終的にどちらの方法で行くかはその辺の兼ね合いで。
あと「置いてきぼり」ですけど、もし同乗者がコンパニオンだったりするとSpeedが 極端に大きいと処理落ち等何かの拍子にPCとの距離が離れすぎてコンパニオン側の 離れすぎ予防措置で勝手にMoveToして訳の分からない状態になる可能性も。 確認の為こちらでも自前の同乗者スクリプトでSpeedを400にして少し走り回って みましたが、位置の遅延が1〜2馬身の間を行き来して盛大にガタつく以外は特に SetPos自体には問題は無いみたいです。 そのガタつきこそが問題だと言えば問題なのですが。 特定の操作で明らかに異常が起きるならSetPos以外の別なアクター操作に何かある 可能性も。 またアクターの場合はMoveToすると付随して色々な処理が起きるので、単にMoveTo すれば万事解決、という訳でもないです。 まずは原因要素の切り分けを慎重にするのが良さそうな気が。
Summonable Aegis v0.21を改造してオリジナルのコンパニオンMODを 作りたいのですが、どうすればいいでしょうか? Beautiful People 2chEdは使わず、バニラ種族だけで作りたいのです。
何を残してどうしたいのかが不明 VanillaRaceでNPCを作成してCompanion用のAI作成して指定すればいい とりあえずDialogueやTopic、Script組んでFollowとWaitだけ付ければ簡易Companionになる 既存のCompanionModを観察しながら学んでいけばいいと思うよ
すみません、便乗でいいでしょうか? EXHouseのメイド達に座って本を読む、という行動をさせたい場合には AIはどのように組めばいいのでしょう? 本はもう持たせてあります やっとEatで物をたべさせたり、Travelで移動して座らせるというのを理解してきたところです…
>>592 UseItemAtパッケージでTargetを本、Locationを椅子にすれば座って本を読むはず
VanillaのAnvilメイジギルドに座って本を読むNPC(赤い服のBreton男)が居るので参考になるかも
594 :
3 :2011/01/14(金) 17:57:00 ID:qz/+iiMi
>>587 >>588 これは見事な8の時ですね!
いえいえ、PlayGroupで走らせる方法には遠方でスクリプトが動かず止まるという
構造的欠点はありますが、それよりも利点のほうが遥かに大きいですよ!
「開始/終了/再開操作が煩雑」は確かにそうで小細工は必要ですが、レースシステムで
共有の処理を1つ作ってしまえばあとは大丈夫です。ラグドールに関しては、
PushActorAwayしか試していませんが、自分の環境では問題なかったです。
NPCのライン取りとかアニメーションの変化とかSpeedの変化とかに成功しているので
もしよかったらアップデートしたバイクMODで確認してみてください。
シンプルな処理でここまでNPCがレーサーのように動くとはw 思いもよりませんでしたw
本当に名無しの人さんの発想力(しかも実際に実現可能)には感服しきりです!
二人乗りについては複雑みたいですね…。まず突然消えるのは恐らくMPCだからだと思います。
高速時のズレへの対策は、もはや自分でSpeed制限をつけることくらいしかなさそうですね。
エリアの境目でグラフィックが静止してしまう問題はかなり検証が必要そうです。
これはゆっくり調べてみようと思います。
>>586 ありがとうございます、動くようになりました!
>593 できました ありがとう〜
CSでNPCの顔色を変えるには どこのパラメータをいじればいいですか?
>>597 FaceAdvancedのTextureにチェックしてお好きなところをどうぞ
顔色で思い出した。
OBSEでゲーム中にリアルタイムで顔とか体のテクスチャパスを変更できるようにならないかなぁ・・・
体に模様が浮かび上がるようにしたり、化粧品屋作ってそれ使うと化粧変えれたり、タトゥー屋作ったり
色々アイデアはあるだけどなぁ・・・
>>597 バニラのNPCはunlockerを使わないと顔色は変えられません
オブリビオンへの応用を念頭に置いたマテリアルの設定とかテクスチャの作成についてわかりやすく解説しているサイトありませんか? あとテクスチャについてですが、うまいテクスチャを作るにはやはり絵心とかフィギュア作成の知識がないと無理ですか?
>>594 レース拝見しました。みんないい年して超速いです。これだけ速いとロードエリア
を頻繁に飛び出してその辺の辻褄合わせの比重が大きくなって大変そうな気も。
で、PlayGroupとPickIdleですが、本来スクリプトからPlayGroupでFastForward等を
再生した場合はPickIdleするとそのFastForward等は停止します。
でもそのレースの場合、恐らくFastForwardはスクリプトからのPlayGroupではなく、
乗員側のAIで自律的に起動されているので通常の移動時と同様SpecilIdleと普通に
共存出来ているのだと思います。
スタート時のSetRestrainedで馬の自律的な方向転換を抑止、でも乗員のマーカーへの
AlwaysRunのTravelAIは生きているので位置を強制的に移動するとマーカーに行こうと
してFastForwardが始まり、結果として馬はAIが起因で走リ出し、SpecialIdleは有効
だけど馬の方向転換だけは起きない、という猪突猛進状態に。恐らく。
なのでスタート時のPlayGroupは多分無くても。
これって乗馬時特有の挙動だと思うのですが、バイクレースには非常に都合の良い
状況なのかもです。
あとPushActorAwayですけど、みんな速くて全く追いつけず状況の確認が出来ません
でした。
602 :
3 :2011/01/18(火) 20:58:12 ID:oNecwaJT
>>601 まさにおっしゃる通りで、PlayGroup FastForwardは必要なく、AIPackageの
AlwaysRunによって彼らは走っていたみたいです。道理でバイクを吹き飛ばされた後、
バイクは独りでに走らずにライダーが戻るまで大人しく待っているわけですね。
バイクが待機している理由がわからなかったのですが流石です。
ロードエリアを飛び出す件は、仮にスクリプトが停止しても乗車したまま待機しているし、
Speedはその状況のままなので、近づいてスクリプト処理開始とともに爆走し始めるので
多分大丈夫と言えると思います。NPCが先行している場合、引き離し距離に制限ができますが、
それは全然いいと思います。NPCを星にしてるなら、次に再開するのは周回遅れとしてです。
NPCのスピードは速すぎるみたいです。テストプレイしまくって慣れているはずの
製作者でさえ1位のおっさんといい勝負なので、もっと遅くさせとこうと思います。
到着順位で賞金も出るようにしました。なぜかたまに順位が狂ったり名前が登録
されなかったりしますが、これは全く不明です。
603 :
3 :2011/01/19(水) 00:02:44 ID:oNecwaJT
連投すみません。既出の可能性の高い質問ですが、 見つけられずわからなかったので教えていただけませんか? 馬はファストトラベルすると付いてきますが、これはスクリプトで ファストトラベルを検知してPlayerにMoveToしているのでしょうか?? 馬にはAIとして「HorsePCStandStill」と「HorsePCStay」の2つが 設定されていますが、どちらも関係なさそうでした。 馬の機能を拡張するMOD「Horse Commands Revamped 1.3」では クエストスクリプトで色々と監視しているようなのですが、このように クエストで常時監視といった感じにしないとできないでしょうか?? Playerと対象のセルを確認して、同じ場所でなければMoveToのようにすれば できそうですが、やはりクエストで常時監視する方法しかないでしょうか?? よろしくお願い致します。
>>603 馬がFTで付いて来るのはシステム側の処理です。多分。
システムはPCが最後に乗った馬のRefを保存して、PCが降りた後もFT時に一緒に
移動し、行き先が町の中(行き先MapMarkerが別WorldSpaceかSubSpace内にある場合)
なら近場の厩(HorseMarker)に移動する、みたいなルールで処理している気が。
HorseMarker移動時のメッセージはGMSTの「SFastTravelHorseatGate」に。
でもシステムがやっているのはそこまでで、バニラ馬の場合その後の動作は馬側の
AIで自分のIsPlayersLastRiddenHorseを判定してその場に留まるか厩に帰るかを
決めていると思います。
移動自体は馬のスクリプトとかAIとは関係無く起きるので、バイクの場合も特に何も
しなくてもバニラ馬同様一旦乗りさえすれば後は勝手に付いて来ると思うのですが。
普通の馬とは別な挙動にしたい、て事ですか?
605 :
3 :2011/01/19(水) 13:38:44 ID:L3kfBNyR
>>604 詳細な説明ありがとうございます。
少し勘違いしてました。バイクでも普通にファストトラベルでついて
きますね。UnSummonで専用CellにMoveToさせれば出現しなくなりますし。。。
馬と同様についてくることで不満はないのですが、ファストトラベルや
普通の移動で街やOblivionGate内やInteriorのCellに入ったときにも
プレイヤーに追従してついてくるようにするとしたら、
やはり「常時監視→MoveTo」の流れになるでしょうか??
クエストの監視間隔を3秒くらいにすればほぼ負荷はないと思うのですが、
もしも何かいいアイデアがあったらと気になってしまいます。
例えばプレイヤーが他のCellに移動する時に実行されるスクリプトか何か
があるなら、そこに処理を追加するなど…でもないですよね…。
常時プレイヤーの周りで動作可能である、クエストかアイテムなどの
スクリプトで監視するしかなさそうに思えます。
>>605 やっぱ一定間隔で監視するのが簡単な気が。他に良い方法も思い付かないですし。
同じWorldSpace内での乗った/乗らないによる挙動は馬同様システムに任せるとして、
PCがInteriorやWorldSpace間の移動をした時にだけMoveToするならPCとバイクの
距離が、
4096(セル一辺の距離) * 120(バニラTamrielの一辺の約最大セル数) * 1.4(対角)
この値以上離れたかどうかを判定すれば現在のバイクの位置に関わらずPCの
Interior/WorldSpace間の移動だけを検出出来ると思います。
GetDistance一つぐらいなら負荷的には全く無問題な気も。多分。
ただ、以前どこにでも付いてくる馬コンパニオンを作った事がありますが、そのまま
だと店の中やWaterfrontの狭い自宅にまで入って来てえらく邪魔臭かった覚えも。
お買い物の荷物持ちには便利なんですけど。
なのでもし場所によってMoveToする/しない等その辺も考慮するなら少し複雑になる
かもです。
607 :
3 :2011/01/19(水) 22:12:20 ID:L3kfBNyR
>>606 教えていただいた式を使って試してみたところ満足いくものができました!!
本当にありがとうございました! 「GetInSameCell」などのセル判定を使う場合、
距離を図らないとちょっと移動しただけでCellが切り替わったことを検知して
しまうんですね。WorldSpaceやCellの理解が曖昧なので非常に助かりました!!
こんな感じでオブゲート内外、ダンジョン内、街内外、WorldSpaceを判定できました。
If (Player.GetInSameCell NR500PlayerREF == 0) ;プレイヤーと違うセルにいるなら。別途距離判定も必要
;OblivionGateExterior
If (Player.GetInWorldSpace OblivionMQKvatch || Player.GetInWorldSpace OblivionRD001);以下略
;OblivionGateInterior
ElseIf (Player.IsInInterior) && (Player.GetInCell Oblivion)
;Dungeon
ElseIf (Player.IsInInterior) && (GetCellMusicType == 2)
;CityExterior
ElseIf (Player.IsInInterior != 1) && (Plyer.GetInCell Anvil || Player.GetInCell Bravil || Player.GetInCell Chorrol || Player.GetInCell IC || Player.GetInCell Leyawiin || Player.GetInCell Skingrad)
;CityInterior
ElseIf (Player.IsInInterior) && (GetCellMusicType == 1)
;Worldspace
ElseIf (Player.IsInInterior != 1)
EndIf
EndIf
608 :
3 :2011/01/19(水) 22:24:15 ID:L3kfBNyR
(続き) オブリビオンゲート内の判定は、「GetInWorldSpace」で1つ1つWorldSpaceを 指定するしかないと思います。ゲート内の内部セルの場合は、 「IsInInterior == 1」と「GetInCell Oblivion」でできました。 「GetInCell」は「現在のセルがその名前を含むかどうか」を判定しますが、 存在しないセル名は指定できないので「Oblivion」という名前のダミーセル を使っています。競合したら(他の方が)困りますが…。 ダンジョンの場合は「IsInInterior == 1」と「GetCellMusicType == 2 」 なんて誤魔化しっぽいので判定しています。でも多分大概は上手く動くと思います。 都市の外部セルは「IsInInterior != 1」と「Plyer.GetInCell」で1つ1つ都市名を 指定する力技しかないと思います。都市の外部エリアへの扉出てすぐのエリアは Tamrielでなくまだ都市のWorldSpaceなので、少し注意が必要でした。 脳内イメージ的には、都市の外部セルは例えばICだったら外壁の内側だけなのですが…。 都市の内部セルは「IsInInterior == 1」と「GetCellMusicType == 1」でOKでした。 WorldSpaceのTamrielは、残り物的に「IsInInterior != 1」で判断できます。 もしかしたら条件が要らなかったり、他の条件のほうがいいかもしれません。
時代は日本戦国時代。 プレイヤーは忍び、侍、武将、農民、商人、遊女、泥棒、辻斬り、役人、職人等をクラスとして選び生活。 そのクラス通りにするもよし、農民から役人になることを目指すもよし。 忍びになって指令をこなしていくもよし、裏切って頭領を殺し追われる立場になるもよし。 MAPは衛星の日本地図から正確な情報を縮尺を少しいじってゲーム用にし 日本全国を回れるように。 そのままだと余りに広すぎてゲームにならないから、その辺は調整で。 街道をあるいていると茶屋があったり、盗人に襲われたり。 時には合戦が行われる事も(これはスペックの関係で無理そう) モンスターは妖怪変化。 っていう超大型MODがでるっていう夢を見たんだ。
>>607 「Oblivion」ダミーセルの競合って内部的に実際にどうなるかは少し謎なのですが、
以前複数のコンパニオンのespを作って各々同じ「Oblivion」ダミーセルを定義して
GetInCellした限りではそれぞれ問題無く動いていたとは思います。確か。
また、OblivionなWorldSpaceかどうかはClimateの判定でも行ける、という話が以前
ありました。
あと、都市の外部セル、外部エリア、内部セル、というのが何を指すのか少し良く
分からないのですが、GetInCellはInteriorCell用の関数で、WorldSpace各Cellの
EditorID名については動作は保証されていないかもです。
そこが各都市のWorldSpaceかどうかを判定するならGetInWorldSpaceでOKな気も。
それとはなんか別な話なんでしょうか。
で、MoveToの可否をInteriorCell/WorldSpace毎にシナリオ上の設定的な意味も含めて
真面目に判定しようとするとどんどん大掛りになりそうな気が。
判定量が多くなる様なら、GetParentCell、GetParentWorldSpace等で現在PCがいる
InteriorCell/WorldSpaceの変化を一定間隔で監視、変化した時だけ判定する、
みたいな方が負荷的に有利かもです。
また、逆に簡易的でいいなら、InteriorCellの時だけMusicTypeを見てBGMが平和
(!=2)なら普通の室内とみなして除外、それ以外は全て問答無用でMoveTo、という
おおざっぱな考え方もあるかもです。
animationに関して質問です スクリプトでforward以外のアニメを動かすことは可能でしょうか? たとえばドアはNIFで見た場合openというグループなんですが、CSで playgroup openと打ち込んだ場合、グループが見つかりませんと言われます。 また、NIFscopeでOPENの部分をforwardに書き換え、playgroup forwardと打ち込んでも変化がありません。
>>608 ,
>>611 枝葉の話ですが、OBSE0020の中ではisInOblivionが実装されています。
もうじき正式リリースになるのでその際は使うのもありでしょう。
IsInOblivion - returns 1 if the calling reference is in a cell or worldspace marked as belonging to the realm of Oblivion.
>>610 太閤立志Oblivionか
100%ムリだと断言できる
おー、便利な関数が。
>>612 PlayGroupで指定可能なGroupNameはここを。
http://cs.elderscrolls.com/constwiki/index.php/AnimGroups Open/Closeってドア特有のシステム予約のNiControllerSequence名です。多分。
スクリプトからドアの開閉をするなら「Activate」でシステムのドア処理経由で。
また、ドアnifのNiControllerSequenceを例えばForward/Bavkwardに書き換えれば
「PlayGroup Forward/Backward 1」でアニメを直接操作する事は出来ます。
でもDoorオブジェとしてはActivateで開閉しなくなったり内部的な開閉状態の辻褄が
合わなくなったりするかもです。
なのでもし「自動ドア」的なものを作るのなら、通常のDoorオブジェとしてActivateで
開閉するか、NiControllerSequenceをForward/Backwardに書き換えてDoorではなく
StaticなりActivatorなオブジェにしてレバーやボタン類みたいにスクリプト側で
責任を持ってPlayGroupで操作するか、のどちらかにするのが安心かもです。
質問です。 BetterMusicSystemなどを使わずに、オブリビオンゲート内だけ違う音楽を数種類の中から ランダムで再生させたいのですが可能でしょうか?
>>616 私はEnhanced Music and Controlを使い、そういうスクリプトを作って運用してます
EMCのような音楽制御系コマンドなしで作るのは、非常に難しいと思います
こんな感じで作ってますよ、というのを紹介しておきます
オブ界でランダムに鳴らしたいmp3ファイル複数を、data\Music\MyFolder\ に入れておく
short plistnum ;現在設定されているプレイリスト
short inOblivion :オブ界にいるのかいないのか
begin GameMode
;ゲームロード時に初期化、オブ界用プレイリストを生成
if(GetGameLoaded)
emcCreatePlayList "MyList" "data\Music\MyFolder\*.mp3"
set plistnum to 0
endif
if(オブ界に居たら) ;この判定は上の方のレスを参考に
set inOblivion to 1
else
set inObvlivion to 0
endif
;現在、デフォのプレイリストでかつオブ界に居るならば、ダンジョン音楽を"MyList"に切り替え
if(plistnum == 0 && inOblivion==1)
emcChangePlayList 2 "MyList" ;2はダンジョン音楽を示す
set plistnum to 1
elseif(plistnum == 1 && inOblivion==0) ;上の逆
emcChangePlayList 2 "obDungeon" ;ダンジョンのデフォのプレイリストは"obDungeon"という名前に決まっている
set plistnum to 0
endif
end
>>615 なるほど
ちなみにコンテナに登録した場合、挙動がStaticなどと異なるという場合はありますか?
一応やりたいこととしては、コンテナをアクティベートしたらドアが開いてコンテナが開く、ということなのですが
とりあえずnifの書き換えからチャレンジしてみます
619 :
3 :2011/01/21(金) 00:30:52 ID:t8obpokn
>>611 他の方がダミーセルでなく作りこんだセルとして「Oblivion」という名を使った場合
どうなるのかなと気になりました。しとしんさんの地名日本語化espでは自分の記憶では
「地名だけ変更というのはできないから、他のところも含まれちゃってるけど、
これをBashedPatchの直前に置いても大丈夫」となっていたと思います。
実際に自分の環境でも異常なく地名の日本語化だけが行われてます。
Oblivionゲート内の「Climate」は「MQ14OblivionWorld」以外は全て
「OblivionDefaultClimite」みたいなので判定に使えそうですね。
>>613 「isInOblivion」これはピンポイントに便利な関数ですね。
OBSE0020が普及したら使いたいですが、ちょっとまだ時期尚早そうですね…。
620 :
3 :2011/01/21(金) 12:35:37 ID:t8obpokn
(続き) すみません、思いっきり書き込みミスってましたorz 上記の地名日本語化espの話は言葉足らずで、同じIDのCell/WorldSpace(?)を 後ろに置いても上手く動いているみたいだ、という補足です。 Oblivionゲート内の「Climate」は「MQ14OblivionWorld」以外は全て 「OblivionDefaultClimite」みたいなので判定に使えそうですね。 すみません、セルの定義とかよくわからないのでいい加減な言葉を使いました。 「都市外部セル=都市内の室外」「都市内部セル=都市内の室内」、 「外部エリア=Tamriel」という意味でした。「GetInWorldSpace」だと 帝都とかだと膨大な定義数になりそうですが、勘違いでしょうか?? >「GetParentCell」「GetParentWorldSpace」などの使用 全く考えていませんでした。これらのほうがシンプルにできそうですね。 よりシンプルで負荷の少ない機能的なものを試してみたいと思います。
621 :
616 :2011/01/21(金) 15:00:47 ID:UgEbJ9z9
>>617 分かりやすい解説ありがとうございます。
やっぱりEMCでないと難しいですよね・・・自分の環境ではDirectShow Filterの競合は無いはずなんですが、なにをやっても
数秒ごとにカクつきが出るので外してしまいました('A`)
>>618 アニメするnifをContainerに指定する事は出来ます。
でも動作の保証は多分無いのでその辺は実際にやってみてから、と言う事で。
NiControllerSequenceの名前は大文字小文字さえ気を付ければ単に書き換えるだけで
OKだと思います。
>コンテナをアクティベートしたらドアが開いてコンテナが開く
この状況が今ひとつ謎なのですが、何かをActivateすると別な何かが動く、
的な事でしたらやはりバニラのレバーやスイッチ類が参考に。
あと細かな話ですが、場合によっては例えば「ドア」に見えるモノでも実際に「Door」で
ある必要は無かったり、逆にDoorではない方が良かったりする事も。
特にDoorってアクターのAIにも影響したりするので。
でもその辺はどんなものを作るか次第なので、これまた実際にやってみてから、
と言う事で。
>>620 申し訳無い、GetInCellとGetInWorldSpaceの話、実はこちらも適当に曖昧な事を
言ってしまいました。
少しややこしい話になるのですが、まず、GetInCellがWorldSpace用ではない、
というのは、WorldSpaceのCellのEditorID名を直接指定する事が出来ない、
と言う事で、InteriorCellのEditorID名を指定すればそれを先頭に含むWorldSpace
のCellも普通に検出します。
なので使い方自体はそれで正しいです。
でも、例えばEditorID名の先頭に「IC」を含むCellはTamrielにも存在しますし、
都市WorldSpaceの城壁内部であっても端っこの微妙な位置のCellは「Wilderness」
だったりして、GetInCellだけではそこが都市WorldSpaceかどうかの判定は厳密には
出来なかったりします。
と言う事で、GetInCellは「動作が保証されていない」というのはウソで、「動作はする
けど都市WorldSpaceの検出と言う意味では判定結果は保証されない」、が正しいです。
その辺細かく追求し始めると話が長くなりそうだったので、つい
「別にGetInWorldSpaceでいいじゃん」みたいに適当な事を言ってしまいました。
確かにGetInWorldSpaceだと判定量が増えるのでこの場合適切では無いです。
適当な事を言ってごめんなさい。
お詫びに代案を。
各都市のWorlsdSpaceって必ずTamrielの子供なので、
「GetWorldSpaceParentWorldSpace」で今のWorldSpaceの親がTamrielかどうかを
判定する手が。
今実際に少し試した限りでは行けそうな雰囲気が。多分。恐らく。きっと。
続き) あと「外部エリア=Tamriel」と言う事なのですが、 >都市の外部エリアへの扉出てすぐのエリアはTamrielでなくまだ都市のWorldSpaceなので、 都市外壁にある扉を中から外に出た場所って既にTamrielです。 ただ、Tamrielであっても都市周辺のCellはID名先頭にその都市名が付いてたりする ので、上の話の通りGetInCellだとそこは都市WorldSpace、という判定結果になりそう な気が。多分その事では。 各都市はTamrielの「子」WorldSpaceですが、親子WorldSpace間でのPCの行き来に 関しては別に特殊な事は無く、ドアを介した普通のWorldSpace間移動です。 またGetDistanceも親子に関係無くInteriorCell/WorldSpaceが別になれば 単精度float(多分)のMax値(すごく大きい)を返します。 各都市WorldSpaceの塀の外の領域って中から塀越しに見える地形の外観の為だけです。 Tamriel側にある各都市の塀内部も外観だけのハリボテで、どちらも通常はPCがそこに 立ち入る事は無いです。
625 :
3 :2011/01/21(金) 17:52:44 ID:t8obpokn
丁度書き込みが同じタイミングになりました。先に書いていた分だけ書き込みだけします。 教えていただいた方法で改善できました! オブゲート内は「IsInInterior != 1」と「GetCurrentClimateID」が 「Obliviondefaultclimate」or「OblivionMountains」or「OblivionTESTclimate」 で判定できました。 オブゲート内のダンジョンの場合は「IsInInterior == 1」で判定できます。 洞窟や遺跡などのダンジョンは「IsInInterior == 1」と「GetCellMusicType == 2」で。 都市内の室外エリアは「IsInInterior != 1」と「GetParentWorldspace == Tamriel」で。 都市内の室内エリアは「IsInInterior == 1」と「GetCellMusicType != 2」で Tamrielは残り物的に「IsInInterior != 1」で。もっと的確な条件もあるかも。 「GetParentCell」は必要ありませんでした。また「GetParentWorldSpace」は 各街がTamrielの子であるという判定にだけ使っています。 常時監視のスクリプトの手順はこんな感じです。 まず「4096(セル一辺の距離) * 120(バニラTamrielの一辺の約最大セル数) * 1.4(対角)」 以上の距離、ワープさせたい対象とPlayerが離れているか測定する。 「プレイヤーの場所が変わってない」&&「上の判定の結果、距離が離れていない」 ならReturn。そうでなければ「プレイヤーの場所変更フラグ」を立てて次の処理に。 ここからはそのセルがどの種類なのか判定して、該当種のセルのIf条件分岐内で そのセルで移動の設定ならフラグを戻してMoveTo。そこは移動しないならReturn。 5秒毎にプレイヤーの居場所の判定が来るので、移動の設定になってる種類のセルに きたらMoveTo。フラグを戻す。
626 :
3 :2011/01/21(金) 18:06:20 ID:t8obpokn
>>623-624 「GetInCell」の件、理解しました。なるほど、動作はするけど判定が厳密でない
ということですね。なぜかWorldSpaceのCellの名前って変更できないんですよね。
ヴァニラのならともかく、コピーセルとかなら変更させて欲しいのですが…。
はい、「GetParentWorldspace」はこの場合非常に有用で、クヴァッチを含めた
各街は必ずTamrielの子WorldSpaceなんですね。判定が非常に楽になりました!
>都市外壁の扉からTamrielに出た瞬間のエリアが都市のWorldSpaceの気がした
これはまさに「GetInCell」の誤判定だと思います。Tamrielだったんですね…。
今回一番強かったのは、「set float to (4096 * 120 * 1.4)」です。これが最高でした。
同じWorldSpaceやInteriorにいる限り必ずこの距離以内になり、違うエリアへ行った時に
必ずこの距離以上になる。つまり場所移動を確実に判定できる、というこの式は最強です。
おかげでPlayerのいるセルを記憶したりする必要がありませんでした。
正直作成中はかなり頭を悩ませましたが、非常に満足のいくものができました!
本当にありがとうございました!!
627 :
3 :2011/01/21(金) 19:03:59 ID:t8obpokn
あ、間違えました。 「set float to (4096 * 120 * 1.4)」じゃなくて、 2つのREF間の距離を「GetDistance」で判定した結果が 「4096 * 120 * 1.4」以内かどうか、ということです。
>>622 解決しました
>>NiControllerSequenceの名前は大文字小文字さえ気を付ければ
どうやらこの大文字小文字ってのが引っかかってたみたいです。
csずっとやってると大文字小文字の区別に頓着しなくなるので気がつきませんでした
TES NEXUSにMODファイルを投稿するにはどうしたらいいでしょうか?
>>629 右にある一覧からfile>Add new fileを選択
あとは適当に入力すべし
632 :
3 :2011/01/22(土) 15:43:00 ID:2GBnm7Kf
度々すみません。 バイクのタックルでPushActorAwayされたActorが倒れている時に 近くでバーンアウトすると必殺攻撃を出せるようにしたのですが、 倒れている状態を判定する関数が見つからず、GetPosを利用した 複雑なものになってしまいした。そういった関数ってないですよね?? 「GetKnockedState != 0」(ノックダウン・アウト)では判定できませんでした。 移動量の判定は以遠教えて頂いた「dx = Target.GetPos X - x」を使っています。 もしも「IsActorDown」みたいな関数があればもっとシンプルになると思い 書き込みさせていただきました。無ければ「無い」だけの回答で大丈夫です! 倒れている時に串刺し攻撃ができるDR5のスクリプトを少し見てみたのですが、 キックとかで相手が倒れた場合に、独自フラグを入れているだけのようでした。 以下はチラシの裏的な書き込みで申し訳ないですが、流れを書いてみます。 1)Targetを轢いてPushActorAwayして飛ばす 2)TargetのRefを記憶して、そこから0.3秒はReturn。 3)GetPosでTargetの動きが小さくなったら倒れていると見なし必殺フラグオン 4)その後、前フレームより10倍の移動量ならば立ち上がったと見なしフラグオフ ■攻撃の手順 1)バーンアウトすると専用TriggerZoneを後輪近くに展開 2)TargetにOnTrigger&&フラグオンなら、バイクを相手先に1回だけSetPosしてダメージ 「IsInAir」や「GetPos Z」を使えるかと思ったのですが、PushActorAwayって 高さは実は変わってないんですね…。XY座標にしか変化がないみたいです。
>>632 >倒れている状態を判定する関数が見つからず、GetPosを利用した
>複雑なものになってしまいした。そういった関数ってないですよね??
あまりちゃんと検証出来てないけど恐らくこれでいけるんじゃないですかね
そのNPCがref:npcだとして、
if ( npc.GetCurrentAiProcedure == 39 )
;;; 倒れている、又は起き上がり中 or その後のAI再評価待ち
if ( npc.isAnimPlaying == 0 )
;;; 倒れている状態
;;; 恐らく目的の状態
Else
;;; 起き上がりアニメ中 or 復帰後の棒立ち状態
;;; 処理をどうするかはご自由に
EndIf
Else
;;; 倒れていない
EndIf
http://cs.elderscrolls.com/constwiki/index.php/GetCurrentAIProcedure GetCurrentAIProcedure
状態39は「MOVEMENT_BLOCKED_WAIT」
少なくとも突き飛ばした直後に状態39になるのは確か
但し、起き上がった後も39の状態が長いのと、他の要因で39になる可能性は多分にあるので
利用する状況は限定されるかも、ですが
634 :
3 :2011/01/22(土) 18:45:08 ID:2GBnm7Kf
>>633 ありがとうございます!
「GetCurrentAiProcedure」を試してみたのですが、自分の場合、突き飛ばした時に
「StartCombat」させてしまっているので、「13 = COMBAT」が優先されてしまうようです。
突き飛ばした時に「StartCombat」、その後バーンアウトで攻撃する際に先に
「StopCombat」してから「GetCurrentAiProcedure」した場合は「7 = WANDER 」の
ような通常時のAIパッケージになってしまいました。
大変使い勝手の優れた関数ですので、違う局面では是非活用したいと思います。
ありがとうございました。
>>634 じゃあこれだとどうかな?というかこちらの方がスマートだったですね
if ( npc.AnimPathIncludes "_male" )
;;; 正常状態
;;; 何も処理しない
else
;;; たぶんラグドール状態(PushActorAwayの他、modav2 fatigue -1000のような気絶状態)
;;; 轢くなり跳ね飛ばすなり自由に
Endif
Skeleton,nifについて質問なのでが 一部モンスターの体形を変更しようと思い Skeleton.nif内の部分Scaleを弄って CS内のクリーチャーのプレビューでは変形しているのを確認したのですが ゲーム内では変形を確認できません これはSkeleton.nif以外の何かを変えないと反映できないのでしょか? 以前にキャラクターの手足などの比率を変化させるMODがあったと思うので システム上できないことは無いのではないかと考えているのですがどうでしょうか?
637 :
3 :2011/01/22(土) 22:57:17 ID:2GBnm7Kf
>>635 「AnimPathIncludes」を使って倒れている状態を判定できました!
ただ倒れていない普通の状態の時でも、たまに結果として「0」と出てしまうことが
あるので、PushActorAwayしたNPCのRefを記憶してそのNPCにのみ使えるようにしました。
それと「AnimPathIncludes "_male"」だと人間の判定しかできないので、
「AnimPathIncludes "IdleAnims"」としたところ全ての生物で正常に動作するようです。
GetPosを使った移動量判定はやはり誤判定が付き物だったし処理量も問題でしたが、
非常にシンプルに、しかも正確な判定ができるようになりました!!
本当にありがとうございました!!
バーンアウトスペシャルアタック、非常に強力な攻撃手段になりました。
自分なんかがMODを作れるのはこのスレの住人様方のおかげです!
毎度のことながら、本当に頭が上がりませんm(_ _)m
nifscopeを立ち上げようとすると強制終了してしまいます。 どうしたらいいでしょうか? OSはvista32ビットです
639 :
636 :2011/01/23(日) 02:00:02 ID:qffSnV33
>>639 ssスレかこっちか、どちらかに絞りなよ
>>638 バージョン変えてみてだめならちょっとそのPCでは無理なのかも
環境は人それぞれなのでフリーソフトの導入に関するトラブルは結局自分で試行錯誤するしか無いです
お役に立てず申し訳ない
>>639 新しいセーブデータじゃないと反映されないとか?
>>637 横からですが。解決したみたいで。でも少し気になったのでいいですか。
PushActorAwayで宙に浮いている時もラグドール状態なのですが、それって特に
問題ないんでしょうか。
最初のお話の雰囲気だと、後輪に関係する技(多分轢き潰すとか?)なので、同じ
ラグドール状態であっても宙に浮いている時は技は無効で、「地面に接して」倒れて
いる時にだけ有効にしたい、その判定方法は?、みたいに受け取れたのですが。
そういう細かな話ではなく、単にPushActorAwayのラグドール状態はGetKnockedState
では検出出来ないから他に方法は無いのか、という事だったのなら別にいいのですが。
また実際の操作感上も恐らく細かく判定してもあまり変わらない気もしますし。
その辺何をどの程度問題にしているかが少し謎だったのと、最終的に目的とする動作
次第で話は多分全く変わって来るので少し気になりました。
現状で問題無いのなら別に全然OKです。
>>639 Skeletonの各ボーンのScaleって、ゲーム実行時にその時再生されているkfにその
ボーンのScale値(例えば1.0とか)が含まれているとそちらが適用されます。
なのでSkeleton.nifの既存のボーンのScaleを変えてもゲーム上では反映されて
いない様に見えたりします。
(CSでHealthを0にして死体の状態で配置するとゲーム時には一切kfアニメが再生され
ないので変更が反映されたりします)
以前出たNPC体各部の大きさを変えるSkeletonは、独自のボーンを挿入してその
Scale/Translationを変える事で再生されるkfの影響を受けずに大きさや位置の
変更を有効にしています。
クリーチャーも多分同様な方法で。
>>644 ありがとうございます!
おお〜そうだったんですか
なるほど・・
って独自ボーン挿入ですか・・
いきなり難易度上がっちゃったなぁ・・
それってNifSkope上での操作で可能ですか?
646 :
3 :2011/01/23(日) 12:40:07 ID:bxXEyxKg
>>643 はい、厳密な判定という面ではまさにおっしゃる通りです!
「AnimPathIncludes」を使った場合、PushActorAwayして吹き飛ばされた瞬間から
転がって立ち上がろうとする瞬間まで「0」を返します。倒れている時だけじゃないです。
GetPosを使った判定法よりは遥かに良かったのでこちらを採用させていただいて
解決はしましたが、何にもしていない通常時にも時たま「0」を返してしまうということで
立っているNPCの周りでバーンアウトしていると、いきなりNPCが巻き込まれて死んでしまう
事態が起こるので、突き飛ばしたNPCのRefを記憶してその1人だけに適用させています。
もしも「倒れている状態を判定する方法」が別にあるのならですが、そちらの方がより
完成度が高まって凄い良いと思います。Refを記録する必要がなくなり、複数の対象に
同時実行できますし。
>>646 >何にもしていない通常時にも時たま「0」を返してしまうということで
それは判定をAnimPathIncludes "_male"からAnimPathIncludes "idleanims"に変えたからだと予想してます。
人間の場合普通のスケルトン"_male"の下にデフォルトのモーションと"specialanims"があるので
無差別にやるのだと"idleanims"だと誤判定だらけになると思います。
こんな感じです
meshes/characters/_male
├移動操作等のモーション
├idleanims
│└ポーズMODなどが使うSpecialIdle用
└specialanims
└特別な移動操作用
(例えば、棒立ちだと通常は_male\idle.kfなどが再生されidleanimsではマッチしません。)
最初 _male をお勧めしたのは人間だけを対象としていると思ったからで、
生物全般に適用したいならAnimPathIncludes "meshes"か、チェックを2回に分けて
AnimPathIncludes "creature"とAnimPathIncludes "character"など両方評価するのがいいです。
コンソールからtdtとsdt 1を撃ち込みNPCの再生中のモーションファイル名を見れば理解が深まるかと思います。
あと、後輪で轢く?跳ね飛ばす?感じのものであるなら(ちょっとグロいですね)、
ラグドール状態かつ対象Actorがプレイヤーの近傍幾つ以内に居て、角度が-75〜-105以内にいるなら、とかになる感じですかね。
スミマセン。なんか647はところどころ日本語がおかしいですね。 ごめんなさい。
649 :
3 :2011/01/23(日) 15:32:59 ID:bxXEyxKg
>>647 うーん、残念ながら「_male」でも「IdleAnims」でも「meshes」でも平時で
たまに、戦闘状態においては頻繁に「0」を返してしまうようです。
一応自分でも理屈は理解しているつもりなのですが、もしかしたら
何らかのMODが悪さをしているのかもしれません。
現状、PushActorAwayされて確実に倒れているはずのターゲットのRefを
記録しておくしかないみたいです。
この特殊攻撃は、多分ご想像されているものより相当にしょぼいと思いますorz
単純にターゲットの近くに1回だけSetPosで移動させて、フレーム単位で
高めのダメージを入れ続けているだけです。血が出るエフェクトとか、
断末魔の叫びをあげるとか、そういった演出はないです。。。
一度トラップオブジェを「Disable→MoveTo→Enable」で呼び寄せてみたのですが、
なぜか一度MoveToして召喚されると、以降動かなくなってしまって諦めました。
あと、コリジョンの関係で倒れた相手に近づく・重なるというのが多少困難なので、
TriggerZoneを大きくして発動条件をかなり緩くしています。
強力ですけど、余興みたいな存在となってます。
>>644 新しいボーン(NiNode)の挿入についてですが
該当箇所に合わせてInsert>Block>NiNode、NiTransformInterpolator
としてもScene Root直下に置かれてしまうのですがどのような操作で
親子関係を繋ぐことができるのでしょうか?
かなり基本的な操作のことですみません・・
651 :
3 :2011/01/23(日) 15:48:39 ID:bxXEyxKg
>>650 多分こんな感じでできるんじゃないでしょうか??
1)親にしたいNiNode上で右クリック「Block→Insert→NiNode」
2)親のNiNodeの中の「Num Children」を1つ増やす
3)すぐ下の「Children」上で右クリック「Array→Update」
4)増えた空き枠に、新規作成したNiNodeの番号を登録
多分これで親子関係が成立するかと思います。
>>649 ありゃぁ、そうですか。頻繁に起きるんだとすると手段としてちょっとイマイチかもしれないですね。
逆に検証でお手間取らせたようで申し訳なかったです。
653 :
3 :2011/01/23(日) 18:47:50 ID:bxXEyxKg
>>652 あ、いえいえ、理論上はそれでいけるはずでしたし、1つ経験も増えたということで
全然問題ないですよ。でもある意味これは怖いことかもしれません。
もしも自分の環境で問題が出なくて、他の環境では致命的なバグが出るとすると…。
とにかくありがとうございました!
>>651 ありがとうございます
とりあえず試行錯誤中ですが
ゲーム内でミノタウロスの頭を小さく出来る事は確認しました
死後でも変化は維持されるようです
当初の目論見は必要な分のScle用Boneの挿入で
なんとかなりそうな感じです
scriptについて初歩的な質問です。 NextRef / GetFirstRef で NPCを検出する場合に、例えば GetIsSex male == 1 としただけで、プレイヤーとの距離を指定しない場合はどういう 処理になるんでしょうか?そのcell内のNPCを全員検出したりす るんでしょうか?
>>655 以下のように書いた場合かな?
そのセルのNPC全員を検出して、そのうち男だけに処理ということになりますね
set NPCref to GetFirstRef 35
while(NPCref)
if(NPCref.GetIsSex male == 1)
;何か処理
endif
set NPCref to GetNextRef
loop
657 :
655 :2011/01/24(月) 22:51:24 ID:xbPmyaKi
>>656 ということはプレイヤーとの距離などで対象を絞ったほうが
当然負荷は軽くなるということですね。ありがとうございました。
NPCを作成するとき人種族から編集した? もしそうでSkeletonがそのままなら、Skeleton_beastに変えると直るかも
nifを変えようとしましたが skeletonBeast.nifが見つかりません。 どこにファイルがあるのでしょうか?
オブリのデータフォルダーにあるOblivion-Meshes.bsaというファイルにひとまとめになってます。 bsaはオブリのデフォのデータが収納された圧縮ファイルで通常はこちらを参照します。 OBMM使って Utilities→BSA Browser→Open→Oblivion-Meshes.bsa Skeletonbeast.nifを選択→ExtractしてSave んでコピーしたnifをオブリフォルダ内でData\Meshes\characters\_maleの階層に置いて CSのキャラデータ編集で指定してください。 セーブしちゃえば、あとでコピーしたnifは取り除いても元々あったbsaファイルを見に行ってくれるはず。
>>646 遅レスですが。
ラグドール状態の判定は「IsAnimPlaying」で行けると思います。
何が起因かの判定も必要ならGetKnockedStateやHasMagicEffectの併せ技で多分。
TrapオブジェはDisable→MoveTo→Enableで移動可能です。Trapはラグドール状態でも
有効で、「一回だけ/継続して」有効、みたいな指定もあります。
で、PushActorAwayで特に「地面の上に」倒れている状態だけを検出する話ですが、
直接の検出って多分無理です。
システム的には起き上がりアニメかIdleが始まった時が地面に倒れている(倒れきって
大体静止した)時なのですが、でも多分それではマズいんですよね。
そうすると、押す/押される側の位置関係と押す強度から滞空時間を予測、みたいな
近似的な方法しか無いかもです。
簡易的には例えば、Pushする時にクエ変数にその強度の値を格納、アイテムをAddして
アイテム側のOnAddでその強度を取得、その値に応じた時間で自分をRemoveMe、みたい
にすればそのアイテムの有無で空中かどうかの判定はある程度は可能かもです。
または全然別な考え方として、その判定が不要になる様にその攻撃動作自体を再検討
する、という方向も。
そのバーンアウトすると相手位置にSetPos(ワープ?)する、という動作故に話が
ややこしくなっている雰囲気もありそうな気がするので。
もしその攻撃の主眼が相手位置にワープする事ではなく、後輪で倒れた相手を轢く事
の方なら他にも持って行き方はあるかもです。
665 :
3 :2011/01/25(火) 19:35:48 ID:4exXmi+B
>>664 的確な推察、ご助言ありがとうございます!
「IsAnimPlaying」で判定したところ、通常時に0を返すことはなくなり
ふっ飛ばして倒れている間だけを判定できるようになりました。
Trapオブジェの移動は、ヴァニラのTrapから流用したスクリプトの一部を
不要と思って安易に削除したのが問題だったようで、そのまま使ったら動きました。
思ったほどは派手に血が出ることはないみたいですが使いたいと思います。
倒れている状態の予測法を考えていただきありがとうございます。
大変ありがたいのですが、どうやら「IsAnimPlaying」でラグドール状態を
しっかり判定できるようになったので大丈夫そうです。
またPushActorAwayの強度は押す側のSpeedで変化するのですが、
ここから滞空時間を割り出すのはなかなか大変そうなのと、
保険用の処理を入れる必要もあることなどから、「IsAnimPlaying」
の使用だけに留まらせていただきたいと思います。
あとSetPosで一度だけ移動するというのはほとんど演出的なものです。
コリジョンの接触と操作法からプレイヤーが自力で後輪近くに敵を捉える
ことが非常に困難なので、広いTriggerZoneを展開してそれを使ってます。
凄いやる気があれば、敵と相手を強制的にSetPosして位置を合わせ、
専用SpecialIdleを使って必殺モーションなんかの演出もできるかもしれませんが、
多分そこまで求められてないし作るのも大変なので、1回だけのSetPosにしてます。
質問です。初歩的な質問・・・だと思います。 例えばプレイヤーがアミュレットのスロットを使用するもので、主に首に装備するアミュレット、ネックレス、スカーフ、マフラーなど を装備している時に発動させるスクリプトの場合 player.GetEquippedObjyect 8 は分かるのですがこれだとそれ以外、首に装備するしない関係無しにアミュレットのスロットを使う装備全てに影響与えますよね。 これを上記のアミュレット、ネックレス、スカーフ、マフラーの類のみを検出したいのです。 数が少ない場合はそのものずばりのIDでいいんですが、エンチャント付きだとかを含めると数が数十に及ぶ場合、1つずつIDを 指定していくのが大変なのでこれをまとめて検出したいと思っています。○○NamesとかName系かID系、pass系のコマンドだと は思うのですがいまいち使い方が分かりませんでした・・・よろしくお願いします。
>>666 ref Amulet
set Amulet to Player.GetEquippedObject 8
If (Amulet.CompareName "Necklace" || Amulet.CompareName "Scarf")
;装備しているときに行う処理
EndIf
一応上のような判定でできそうな感じはしますが、「CompareName」での判定を
どうするかが難しそうですね…。
あとは「発動させるスクリプト」というのがどういうのかわからないのですが、
もしも常時発動型みたいのだったら、まずクエストか何かのスクリプトでプレイヤーの
装備変更を監視して、該当装備に変更されたら実行間隔を0.01にしたクエストをStartQuestして
それのクエストスクリプトで実行させるというやり方が考えられるかもしれません。
装備した瞬間に一度だけ発動だったらこんなのは必要ないですが…。
大したアドバイスできなくて申し訳ないのですが、何か使える部分があれば…。
>>667 EventHandlerにOnActorEquipがあるので装備変更検出はそれで
そのあと常時何かをさせたいならそのイベントをトリガにしてAbilityとしてScriptEffectを行わせるのが容易ですかね
ちなみにCompareNameだと日本語化してるかしてないか程度で影響を受けるし
見た目同じでも名前がちょっと違うだけで影響受けるのでどうせ名称で比較するなら
私ならそのアミュレットのNIFのファイルパスでチェックします
>>667 >>668 着脱の前後だけ発動させようと思ってます。
たしかに名前だと日本語化のものとかもあるのでNIFのファイルパスで行こうと思います。
ありがとうございました。
blenderやnifskope関係の質問です 既存の人間用のheadメッシュにblenderで手を加えたいのですが 一度blenderで編集すると ボーンがおかしくなってしまったり、高さが狂ってしまったりして その後まともにゲームに適用できません いじる前に112.4410となっている高さなどを0にし、 いじった後に戻したり、いじった後にobjにして読み込み 元のhead.nifのファイルでモデル指定のみ変更するといった手段をとってみましたが それでも顔が崩れてしまいます どのような手順を踏むべきなのかを教えていだけると嬉しいです
連レスすみません egmが合わなくなっているのかとも思いましたが その場合、egmの作成について参考になるページなどがありましたら 検索のヒントをいただければと 髪のegmを作成するソフトはtesnにあるようなのですが、、、
あ、とな氏のmemoが見つかったので ひとまず質問を停止させていただいて、試してきます 最後質問する際はお願いします、スレ汚しすません
一度blenderで出力したheadメッシュはダメだったような… renなら多分崩壊しないと思う
>>673 NifScriptのVerは?
それと頂点の追加や削除をしてたりします?
他スレの話ですが。 Skeletonにボーンを挿入して体各部の位置大きさを変える話ですけど、手に持った 武器について同じ事をするなら「Weapon」の前に同様にNiNodeを挿入すれば多分。 武器で問題が出る、というのは武器nif側にノードを仕込んで操作しようとした場合 だったと思います。
持ち手がずれる気がするんだけど やってみないとわからんな…
Translationの調整でいけるんじゃないですかね。 位置/回転/倍率全部有効なのでその辺の調整は多分いくらでも。
これの話でしたら武器のズレは無いですよ
http://shy.jsphr.net//upload/img/ups22531.jpg 1H、2Hで色々試してみました
手の長さ(肘先の長さも)も変えています
武器の大きさは変えたくなかったのでHandのスケールで調整はしてますが
計算はしてないのでだいたい同じ大きさって感じです
Skeleton.nifはStyleModifier v0.9付属のものを使用させて頂きました
まぁ直接スケールを弄ってしまってますが・・
680 :
3 :2011/01/28(金) 01:18:47 ID:mvtVTX6m
すみません、色々試してみてどうしても出来なくてほぼ諦めてるので、簡潔で いいのでお答えを頂ければ幸いです。 「StartConversation」でAがBに話しかけるのですが、Bが何をやっても返答しません。 NPCが何があっても会話しない、というのは起こりえるのでしょうか?? 流れとしては ・「StartConversation」でA(話し手)がB(聞き手)に近づき始める ・一定距離内(1000くらい?)で、最後のトピックのResult Scriptに設定したダミーメッセージの再生を確認 ・AがBに一番最初の(Helloでない)トピックを話す ・Bは会話の苦手な困ったちゃんです。さぁ、果てのないお見合いが始まりました! やり方はCS Wikiに書いてある通りにしています。 ・セリフ毎に変数を1つずつ増やし、その値で順番に会話させる ・「Allow Repeated...」や「Run Immediately」などはWiki通り設定 試したもの。 ・Conditionを甘くしたり厳しくしたり…GetIsIDやGetStageの有無など ・AI Package所持数を0に、最低1つは保つなど。「Skip Fallout Behavior」の有無 ・自分で無音mp3を作って配置&「Edit Response」内の録音機能からwav作成・配置の両方 ・会話の順番用の変数の有無(なくても、GetIsIDの違いで最小限機能するはず) ・AがBに話す最初のトピックを「Goodbye」に。そのResultスクリプトでB→Aへの 「StartConversation」を設定→Bは会話しに行かず、AI Packageの目的地を維持し続ける Bが怪しい思うのですが、特別なことはしていない普通のNPCです。何が彼女を 封じているのでしょうか…?? NPC同士の会話は単に演出上やりたいだけなので、 なくても全然構わない心境です。なので、NPCが会話したがらないことがあるのか どうかだけを知りたく、書き込みさせていただきました。よろしくお願いします。
681 :
679 :2011/01/28(金) 01:23:00 ID:U1cm7uoA
ああ・・確認してみたら武器の手前でScale変更すると 敵倒した時に武器の空中停止現象起きますね・・ HandでScale調整だと大丈夫みたいですが・・ わざと大きくしようとする場合なんかは問題になりそうですね
682 :
3 :2011/01/28(金) 01:25:06 ID:mvtVTX6m
お教えありがとうございます
>>674 だとしたら、非常に残念ですが仕方がないですね……
>>675 nifskopeは1.0.12
blenderは2.47です
やはりもう少し新しいverの方がいいのでしょうかね
>>681 関係ない話ですがWAC1.0bでゴブリンがその症状だったんですけど原因はそれですねw
>>683 補足です
頂点の削除などは行わず、ctrl+sで一部分を縮小しているだけです
できましたらお願いします
686 :
679 :2011/01/28(金) 02:08:58 ID:U1cm7uoA
>>684 ってことは人間だけでなくモンスでも起こるってことなんだ・・
>>685 画像を見る限り、egmが新しくなったメッシュとあってない状態みたい
髪型でegm作るの忘れてそういう風になったことある
頭のegmも髪のヤツ作るので作れるような・・・
>>680 指定が適切なら普通に会話します。なんか同じ様な話が上にあった気が。
会話って指定類が非常に敏感で一箇所違うだけで全く動かなかったりします。
なのでその辺に嵌まると何をやっても動かない様に見える事も。
とりあえずまずそのアクターAにコンソールで「startconversation アクターB hello」
としてみて正常に世間話を始めるか確認を。
>>681 あー、空中静止しますね。これはマズい。
それって多分本来武器を手に持った時にリンクされるはずのHand位置のコリジョンが
別なノードを挿入する事で見つからなくなって妙な事になる、とかそんなんです。
恐らく。
その挿入したノードにHand同様RigidBodyの構造を付ければ空中静止は起きなくなる
とは思います。
でも単に普通のコリジョンだと、今度はそのノードがkfに影響されないが故に
例えば不死アクターが武器を手に持ったまま倒れた場合、物理演算の成り行きで変化
したConstraintの位置関係がそのまま保持されて立ち上がった時に武器が変な方向を
向いたまま、みたいな事態に。多分。
これってあちら立てればこちら立たず的なややこしい状況で解決策は現在ちょっと
不明です。
なので申し訳無い、
>>676 の件は保留で。また後で調べてみます。
>>683 「NifScript」のVerです。
BlenderでImport/Exportする時の指定画面の左上に出るヤツです。それを。
ついでにPyFFIのVerも。
その状態って多分頂点の順番とegmとの不整合なのですが、単にImport/Exportするだけ
で原則そうなると思います。
でも最近egmの読み込みがサポートされ始めてVerによってはその辺の状況が多分違う
かもなので。
BAG OF ALCHEMYの問題として 自動収納処理の際?に処理用のアイテムが盗む扱いになって店の中でとかで困るというのがありますが これを修正しようと思ったんですがどうすればいいでしょうか。 検索してると個人で修正している人がいたみたいで、できるのかなと。 別な問題なんですがCSで開いてはみたんですが、 一切変更を加えていないのに保存しようとするとエラーが出て保存できないスクリプトがあります。 aaBagOfAlchemyがそうなんですがこれは何故でしょう? 他のMODでも保存できたりできなかったりというのが結構あります。 今回の場合のエラー内容は、28行目にBagってあるけどそんなコマンドみつからないよ、的な事でした。
692 :
3 :2011/01/28(金) 16:01:52 ID:mvtVTX6m
>>688 ありがとうございます。
おかしいのが、CSで設定した「参照用 Editor ID」(NPCをセルに置いて、それを
ダブルクリックして設定できるもの)をゲーム中にコンソールで指定して実行しても
「is not object」みたいなエラーが出て、リファレンスが使えず死んでいることです。
当然スクリプト内では何度も指定してますし、他の動きも問題ないのですが…。
実例が存在する確立された方法ですので、自分のケースは何かの相性が悪かったと考えて
すっぽり諦めようと思います。ありがとうございました。
>>679 の
>Skeleton.nifはStyleModifier v0.9付属のものを使用させて頂きました
についてなんですけが
何故だか判りませんがDR4のシールドバッシュを使用すると
体が段々大きくなるって現象が起こります・・
最初は比率を弄ったせいかな?と思ってましたが
数値を変えなくても起きます
DR4固有の問題かもしれません
他のVerでも起きるかは不明です
>>693 ですが
どうもDR4のシールドバッシュに起因するのではなく
カウンターシールドモーションそのものに起因するようです
防御75以上で確率発生するシールドカウンターでも
同様の現象が発生していました
変ったScaleはPlayer.Setscleなどでは直せませんが Loversの放心やRFの転びなど一旦ラグドール化が入ると リセットされ元に戻るようです
>>692 >「is not object」みたいなエラーが出て、リファレンスが使えず死んでいることです。
>>498 >>500-505 >>693-695 DR4は入れてないけど、カウンターシールド発生しても何も起こらないです
でも、その現象自体は興味深いかも。
モーションとかは、普通繰り返し再生しても前の効果は累積されないはずですが、
段々大きくなるなら前の効果が累積してるってことかもなので
・・・まあ、何に使うかとか言われてもとんと思いつかないんですがw
>>696 個人環境によるものなのかもしれませんね
ちなみに現象自体は必ず起きるものではなく
3〜4回かに一回大きさにして数%なので
かなり数をこなしてその他のNPCと比較して大きくなってるという感じです
バッシュ連打が判り易いです
現象が起きる瞬間、一瞬原点方向にメッシュが引っ張られ
ちょっと大きくなってまた元に戻る・・といった感じでした
698 :
3 :2011/01/29(土) 01:42:36 ID:58jErKEr
>>696 あ、なるほど。コンソールではFormIDを考慮しないといけなかったんですね。
コンソールでは8桁の16進数の英数字のみ使え、頭2桁がOBMM等で見れるespのロード順、
残り6桁がCSのオブジェクトウィンドウでマウスオーバーした時のID。
ご教示ありがとうございます
>>690 勘違いでお手を煩わせてしまい済みません
恥ずかしながらverの表示がよくわかりませんでしたので
とりあえず最新版を落としてきたので、時間ができたらまた試してみます
>>687 これまた勘違いかもしれませんが
The Conformulatorだとheadのtriファイルがあるのが前提だと思ってました
とりあえず調べてみます
お世話になります
>>699 NifScriptのVerって、Exportする時のボタンがいっぱい出る画面の左上の、
「Blender NIF Scripts X.X.X (running on 〜」の「X.X.X」の事です。
旧Verでも直せるかもですし、新VerならOKとも限らないのでVerを記して履歴に
なれば、という意味で確認しました。
>>698 コンソールでStartConversationする時の引数はCSでマウスオーバーして出る値では
ないですよ。
多分私が曖昧な書き方をしたのがいけなかったと思うのですが、
>コンソールで「startconversation アクターB hello」としてみて
この「アクターB」てのはアクターBのReferenceのFormIDの事です。
コンソールでそのNPCをクリックして上に出る値か、CSのRenderWindowで配置したその
NPCをWクリ、Reference→ReferenceEditorIDの欄右側の「(01001234)」みたいな値の
下6桁にそのespのロード順2桁を頭に付けた値です。
まずはバニラのNPC同士で会話させてコンソールからの指定方法自体の確認をして
みるのがいいかも。
で、もうやりとりの内容が厳密な用語用法を避けて通れない段階なので、ここで
FormID、EditorID、Reference、BaseObjectの意味の確認を。
http://cs.elderscrolls.com/constwiki/index.php/Modding_Terminology
HTSCLの調理用ボウルのnifを自作のnifに差し替えたら 調理機能が働かなくなってしまったのですが、scriptの方もいじる必要があるのでしょうか?
703 :
666 :2011/01/29(土) 12:01:33 ID:5SFkjB/t
助言を元に色々と試したのですが結局検出してくれませんでした・・・どういうものを作ろうと思っていたかというと、プレイヤーが Amuletスロットの眼鏡を装備した時に手でさわるアニメを再生しようとしました。questで装備を検出したらアビリティを追加して ScriptEffectでpickidleを実行、装備した時だけでいいのでScriptEffectUpdateでアビリティを消去、という感じです。装備自身に scriptを仕込む方法では簡単なのですが、他にも応用が利きそうだったのでquestscriptでやりたいなぁと。 scn zzzEquippedSpectaclesPlayerQuestScript ref SpectaclesPC short EquippedPC Begin GameMode set SpectaclesPC to player.GetEquippedObject 5 if (SpectaclesPC.ModelPathIncludes "Spectacles" || SpectaclesPC.ModelPathIncludes "glasses") if EquippedPC == 0 player.addspell zzzEquippedPCAnims set EquippedPC to 1 printtoconsole "player Equipped Spectacles" else printtoconsole "player Equipping Spectacles yet" endif else if EquippedPC == 1 set EquippedPC to 0 printtoconsole "player Not Equipped Spectacles" endif endif end printtoconsoleは確認用です。nifの名前や装備の名前、スロットは確認済みです。ModelPathIncludesの部分はCompareNameや IconPathもやりましたがだめでした。根本的に○○Nameや○○pathの認識が間違っているのかなと思いますが、検索しても分か りやす例が見つかりませんでした。EventHandlerのOnActorEquipも同じような感じでいけるんでしょうか?よろしくお願いします。
704 :
668 :2011/01/29(土) 13:04:14 ID:8ejFeSnC
>>703 拙作CCAOがほとんど同じ処理をやっているので踏み台としてはこれを眺めて頂くのがよいかもしれません。
このMODは装備している武器の変更をEventHandlerで検出して変更された武器の
Nifファイルパスを取得してパス内に特定文字が含まれていたら
武器の所有者に適切なSpecialAnimを有効にさせるというものです。
実装は別として動きの骨子はほとんど
>>703 の概要と変わらないと思います。
http://www.tesnexus.com/downloads/file.php?id=36261 文字列比較部分は zzCCAOFuncNifNameChecker の
let sModelPath := GetModelPath wref
でwref(武器のObjectIDを入れた変数)のModelPathを取得して
一方マッチングさせたい文字列は
let sType := ptr[weaponType][i]
で取ってきています。配列を使ってるのはMODの都合なだけなのでsTypeはString_Varならなんでもいいです。
その後、
if ( sv_Find $sType sModelPath >= 0 )
でマッチしたかどうか検出してます。
用法: sv_Find <マッチさせた文字列> <文字列全体>。返り値が0以上ならマッチしてます
上記のModelPathIncludesは使ったことが無いので分かりませんが期待値にそう大差はないものと思います。
ご参考まで、EventHandlerの利用を考えているなら
NPCにEventHandlerを付与しているのはzzCCAODistributerScriptのSetEventHandler文、
EventHandlerで呼び出されるのはzzCCAOFuncOnEquipEventHandlerScript
です。
705 :
668 :2011/01/29(土) 13:06:01 ID:8ejFeSnC
>>703 すみません、typoです。
> 用法: sv_Find <マッチさせたい文字列> <文字列全体>。返り値が0以上ならマッチしてます
>>703 >player.GetEquippedObject 5
SlotIDの5番はfootだと思うんだけど・・・
それはともかく、デバッグする時は正しく動作した時にログ出すだけじゃなく、
例えば SpectaclesPC.GetModelPath を毎回表示する、とかやると色々判りやすいと思う
ログが埋まるから確認したらコメントアウトなり前回と変わってたら表示とかその辺は適当に
>>691 aaBAUpdateWeightスクリプト内の"Foo.activate player"の前に
Foo.setownership
を追加すればBafooの所有権が自分に移るので
どこでバッグを操作してもBafooが盗んだアイテムにはならないよ
別の問題の方は、過去ログに
「messagebox内で改行があるので問題がある」ようなことが書いてあった
messageboxex "What do you want to do?%rBag Weight以下略"
みたいにOBSEのコマンド、messageboxexを使って、改行を"%r"で行うといいみたい
>>707 返答ありがとうございます。
早速やってみます。
709 :
3 :2011/01/29(土) 19:35:07 ID:58jErKEr
>>701 詳しい説明ありがとうございます。大体理解できたと思います。
BaseObject:種類、型、クラス。戦艦で例えるなら「アイオワ級ミズーリ」のアイオワに相当。
Reference:BaseObjectを実際にセルに配置した各オブジェクトへのアクセス。
EditorID:BaseObjectのCSで扱うための英数字の名称。基本的にCS内でのみ有効。
FormID:BaseObjectや実際にCellに置かれたオブジェクトの16進数8桁のID。コンソールでも有効。
問題になりえるものが1つあって、A(話し手)は新種族で既存種族の持つ通常のトピックを
持ちません。自作したConversationを実行させてるので影響がどれほどかはわかりませんが、
不確定要素です。
FormIDを使ってB(聞き手)からA(話し手)へHelloさせたところ、Bからの最初の一言で
会話は終了し、AからBへHelloする場合は「I HAVE NO TOPICS」なので会話しないようです。
Aは世間話用トピックを持たないのでこれは正しい動作です。
いずれにせよ、今回のケースではConversationしないということで諦めます。
ありがとうございました。
髪型作成関係ですが、ご存知の方がいたらご教示ください。
Blender2.49を使用しています。
髪テクスチャを書きながら、適宜髪Meshを調整…という作業をしているのですが、
先ほどBlenderからエクスポートしてゲーム上で確認したところ、
↓の画像のように表示がおかしくなっていました。
http://shy.jsphr.net/upload/img/ups22606.jpg エクスポート前後の作業は、BlenderでのMesh編集自体は頂点の移動のみ、
エクスポートする直前にUser Preferences>Gameの設定を変えたり戻したりしたこと。
エクスポート後にNifSkopeでFace Nomals/Smooth Nomalsの設定、
NiVertexColorPropertyの追加とHasVertexColorsの設定後、Objデータのエクスポート。
The Conformulatorでegmの作成後、ゲームで確認という感じです。
>>710 _hhとか_hlとかのテクスチャーありますか
なければ適当な髪から持ってきてとりあえず試してみるか、メインテクスチャーリネームでもいいかな あるいはメッシュが反転してるとか、その場合はblenderでflip nomals
>>711 ご返信ありがとうございます!
ご意見を参考にテクスチャの方を確認しましたら、
ノーマルマップをメインテクスチャで上書きしていました…。
ともあれ無事に解決しました。ありがとうございました。
>>709 諦めるのはいいのですが、状況や動作しない原因ははっきりさせておいた方が。
まず、上のHelloさせて確認、というのはNPCのRef自体が「死んで」いるのでは?
という話だったので、普通のNPCという前提でそのRefが正常に機能しているかどうか
を確認してもらうのが目的でした。
Raceが自前(Playableでない)と言う事ならそのRaceなりNPC固有の「HELLO」を
あらかじめ仕込まない限りStartConversation Helloしても何も起きないです。
なのでHelloで確認する意味は全く無いです。
条件の後出しはなるべく無しの方向で。
で、Playableではなくて「I HAVE NO GREETING」なNPCであっても、そのNPC用に適切に
Topicを作ったのならStartConversationでそれを話しますし、後続のInfoの指定も
適切なら会話も続きます。その場合はRaceが自前かどうかは関係無いです。
と言う事で、動作しないのはそのケース固有の何か特殊で例外的な理由、と言うより
恐らく単に指定をなんか間違っていた可能性が極大な気が。
715 :
3 :2011/01/30(日) 11:26:46 ID:1bQSzjVN
>>714 よくわからないのですが、Conversationって同じクエスト内のTopic同士でしか反応しない
のでしょうか? これ自体は自作Conversationには関係のないことなのですが。
Genericでない自作クエストのConversationに設定したHelloトピックをAからB(既存種族)へ
StartConversationすると、Bは返答用トピックを持つにもかかわらず返答せず。
この場合、Aが新種族でも既存種族でも、自作クエストのものをHelloする限りBは返答しない。
HelloをB→Aにした場合、Aが既存種族の場合は普通に会話をする。
Aが新種族の場合はAが返答用トピックを持たないのでBからの一言で会話終了。
それで、試しにAを既存種族に戻して同様に自作Conversationをさせてみましたが、
これでもなぜか最初のAからの一言でお見合いが始まります。
となると怪しいのはやはりConversationの設定だろうということになると思うので、
Conversationの設定画像を貼ってみます。
■一言目の設定
http://moto4life.web.fc2.com/material/a1.png ■二言目以降の設定
http://moto4life.web.fc2.com/material/a2.png 自分が見る限りこれで動くはずだと思うのですが…。
>>715 まず、「HELLO」の追加とそこからの会話開始の話は今は置いといて下さい。
単独Topicでの会話がまだ動かないのにそちらに話を広げると混乱するので。
SSを見る限りではその順番変数の判定を「==」にし、ゲームでその値を「1」にして
クエのStageを20に、「A1DCNorris」のRefをクリックして、
startconversation <A1DCQNLadyのRefのFormID> A1DCQNCnv01a
とすれば少なくとも最初2つのセリフは出ると思うのですが。音声が無い場合は
表示時間が短くて分かり難いかもです。
そうしたけど動かなかった、て事でしょうか?
Options→GamePlayのGeneralSubtitlesはONになってますよね。念の為。
718 :
3 :2011/01/30(日) 15:46:24 ID:1bQSzjVN
>>716-717 GeneralSubtitlesはONで字幕は出る仕様になっています。
どうやってもできないようです。少し設定を変えてみても相変わらずダメでした。
スクリプトでAからBにこのConversationをStartConversationさせているのですが、
これまでは会話の最後で会話用変数を0にリセットしていました。つまり再び
一番最初の会話のConditionを満たし、どうやらそれで一言目だけ実行されていたようです。
会話の最後で変数をリセットせずに+1すると、今度はStartConversationさせているのに
全く話さなく(字幕が出なく)なりました。会話が可能な距離でないのに、会話は一瞬で終了し
WanderのAIパッケージに従って彷徨い始めます。スクリプトでもコンソールからでも同様です。
また当初はStartConversationでなく、FindのAIパッケージでAからBにActivateさせて
Helloトピックから始めさせていたのですが、こちらもConversation用トピックにLinkせずに
失敗していました。万策尽きています。
>>718 その順番変数がセリフ表示前に数が既に増えているのは問題無いです。
「RunImmediately」にチェックが入っているからそうなる訳で。セリフ自体はキューに
入っている(多分)ので後から順に再生されます。
バニラの会話もそうなってますし。
なので順番変数の事は一旦置いといて。
三番目のInfoがどうなっているかも見せてもらえます?
あとスクリプトではなくコンソールで確実に
>>716 の通りにして確認したんですよね?
720 :
3 :2011/01/30(日) 17:09:04 ID:1bQSzjVN
>>716-717 はい、確実にコンソールに打って確認しています。順番変数も0にリセットしています。
どうぞ。
http://moto4life.web.fc2.com/material/a1.png http://moto4life.web.fc2.com/material/a2.png http://moto4life.web.fc2.com/material/a3.png ResultScriptの1行目が「;set A1DCQDialog.Cnv to 0」となっていますが、
これが当初の設定です。こちらの時は一言目だけが再生されます。
2行目の「set A1DCQDialog.Cnv to A1DCQDialog.Cnv +1」にすると会話は全く
発生しません。会話可能な距離まで近づき、一瞬立ち止まっただけで終了します。
3行目の「DCQNLadyREF.AddScriptPackage A1DCQNLadyAIWander」は、
BにWanderのAIパッケージを加えているだけで、有無で変化はありませんでした。
なるほど、キューに入るというのは初耳でした。
QuestのトピックのResultScript内で「SetStage」でステージを進めて、そのトピックの
コンディションから外れてしまうと、ResultScriptだけが実行されてInfoの会話が再生
されなかったので、例えば
・現在のステージ:15
・ResultScriptでSetStageする値:20
だったら、そのトピックのConditionは「== 15」じゃなくて「<= 20」にして
凌いでいたのですが、何か自分の環境はおかしいのかもしれません。
「RunImmediately」にはチェックを入れていないのにです。
話が激しくズレて申し訳ありません。
>>720 順番変数に必要な初期値はこの場合「0」でなく「1」です。
「<=」を全部「==」にしてValueは変えてないですよね?
順番変数に「1」を入れ、も一度
>>716 の通りにやってみてもらえます?
先に説明してしまうと、それって多分Conditionsの評価とResultScriptの実行の 順番を取り違えているか、なにか勘違いをしていた気が。 Conditionsの評価がまずあって、その結果が真だった場合にResultのScriptが 動きます。「RunImmediately」でも多分同じです。 なので順番変数の初期値が0なら最初のInfoの判定は「==0」であるべきで、その後 ResultScriptで+1され、二番目のInfoの判定は「==1」に。以降同様に。 バニラのMS29とかの実際の例をまずよく見てもらうと多分話が早かった気が。 でもMS29はInfoの並び順が逆で「==0」の判定が省略されているので微妙に分かり難い かもですが。
723 :
3 :2011/01/30(日) 18:47:50 ID:1bQSzjVN
>>721-722 順番変数の初期値は間違ってました。会話が始まる前は「0」なので、一言目の
条件も「0」であるべきでした。これで一言目は出ましたが、相変わらずそこから
お見合いになってしまいます。
明らかに誤解を招く書き方ですみません、その画像の1枚目と2枚目は既出のもので
「<=」をを使っていたときのものです。3枚目にある通り現在は「==」を使っています。
TopicのConditionの件は私の環境では
・そのTopicが使われるかどうかはCondition次第
・だがそのResultScriptでConditionから外れる処理をした場合は
ResultScriptのみが実行され、Infoは表示されない(会話が無言)
となります。MODか何かのせいでおかしいのかもしれません。
環境のせいでおかしな挙動をしているとすれば、不毛な作業につき合わせて
しまい申し訳ないです。
724 :
3 :2011/01/30(日) 18:50:08 ID:1bQSzjVN
>Infoは表示されない(会話が無言) 表現を間違えました。会話が起こりません。GoodByeとかは有効ですが、 何もセリフが出ずに一瞬で終了します。
え、まだ動かないとな。 環境が原因、というのならそれはそれで大問題なので追求すべきな気も。 二番目のInfoは「==1」、三番目は「==2」に直しました? そのNPCに対して自分で何か特殊な事をしていないのは確実なんですよね? あと音声mp3とか。また最後のAddScriptPackageやRunImmediatelyとGoodbyeの オプションを取ってみたり。 それか別espでまっさらな状態で一回純粋に会話動作だけを作ってみて、それでも 動かないならそれをUPすれば皆さん確認してくれると思います。 環境依存なのかはそれで多分はっきりする気が。 とにかく複雑化する方向ではなく、単純化する方向で確認を。
>>726 FF関連は隣の国の違法なぶっこ抜き
それ以外は普通のあるんじゃない?
まぁどっちにしても激しくスレ違い
728 :
3 :2011/01/30(日) 21:57:10 ID:1bQSzjVN
>>725 新NPCを二人配置して、クエストを1つ新設、そこにConversationを1つ作っただけの
シンプルなespを新しく作り、それでコンソールから試してみましたが、同様に
一言目しか再生されず…。
おまけに、適当にinfoの中で「録音→保存」した音声も再生されません。
自分の環境で自分が作ったMODは上手く機能しないのかもしれません。
ヴァニラや他のMODをプレイしているときはそういった問題とは無縁でしたので…。
>>728 そのespをUPしてもらえます?
別な環境で確認して原因を特定しないとこれ以上はなんとも。
サイズが大きいのなら音声は不要です。
730 :
3 :2011/01/30(日) 23:33:40 ID:1bQSzjVN
731 :
3 :2011/01/30(日) 23:54:34 ID:1bQSzjVN
↑訂正 音声がないと世間話を始めると思いきや、再び試すとConversationの 一言目だけを話すようになったり…ウチの環境ちょっとヤバいかもしれません。
>>730 クエA1Q→QuestDataの「Allow repeated conversation topics」がOFFになってます。
733 :
3 :2011/01/31(月) 00:14:22 ID:ew5imLzh
>>732 あ、失礼しました。アップしているファイルを修正しておきました。
それでもまだウチの環境では一言目しか話しません…。
また、元々のMODのほうのクエストはチェックされています。
EDialogueとかで表情変えたのを一時的にじゃなくてずっと保っていられたら 顔作りの幅が広がって楽しそうだと思ったけどやっぱ無理なのかな セーブ&ロードしてもそのままだったら面白そうだけど
>>733 うちはその「Allow〜」をONにしたら#01から#04のセリフが順番にパッパッと出る様に
なりましたよ。
その「一言目しか話さない」という状況をはっきりイメージ出来る様になるべく詳しく
書いとくといいかもです。
例えば#01が出たらどのくらいで消えるとか、その後二人のNPCは見つめあったまま
固まるのか、PCの方を向くのか、なにかデフォの挨拶をするのかとか。
こういう場合って、どうやったらその症状になるかを色々試して原因を探したりする
ので、どれがその状態なのか判断出来る様に出来るだけ具体的に。
その状態に心当たりのある人もいるかもですし。
736 :
3 :2011/01/31(月) 01:51:21 ID:ew5imLzh
>>735 流れはこんな感じです。
1)Aがテクテク歩いてBに近づいていく
2)Aが会話の仕草をしながらセリフを8秒間続ける
3)8秒後セリフが消えてもAは延々と仕草をしている
4)Bはずっと黙ってじっと聞き入っている
5)何らかの外部環境の変化、介入が無い限り果てしなく無音の会話は続く。
それで、8秒間というのは「OBSE -Elys- Universal Silent Voice 0.93」
という、音声が存在しないInfoに8秒間の無音音声と口パクを設けるという
OBSEプラグインによるものなのですが、これが原因の可能性も考えれたので
外してみたところ、8秒間が2秒間ほどになっただけで他は全て同じ結果でした。
そもそも異常なのが、自分で適当に音声を「録音→保存」したInfoであっても、
このOBSEプラグインが有効で8秒間の無音口パクになってしまうことです。
Oblivionクリーンインストールが必要かもしれません。
でも別の視点に立つと、仮に自分がそれで正常になったとしても、他人が
プレイした際に会話が成立しない可能性もあるんですよね。
とりあえず会話はなしの方向でいきたいと考えています。
>>736 そのプラグインはmp3ならそれなりに動くんじゃないですかね。
NPC音声にwavって元々使わないですし。
またそのプラグインをはずしても状況が同じなら特にこの件とは関係無い気も。
とりあえずバニラの会話が正常に動くか確認しては。
NewGameしてコンソールで「cow ICMarketDistrict 7 17」、「setstage MS29 20」
として夜11時過ぎまで待って店から出たThoronirの後を付いていけばAgamirとの
会話が起きると思います。
その会話も同様ならもう明らかにゲーム自体が正常に動作していない、と言う事だと
思います。
その不正な環境でさらに別な何かを検証しても結果は疑問ですし、MODを作るのも
危険な気が。
でもいきなり再インストールではつまらないので、MODを抜いたりiniを消したりして
どの段階で会話が動く様になるかをついでに調べると有用な例になるかもです。
738 :
3 :2011/01/31(月) 15:14:29 ID:ew5imLzh
>>737 ThoronirとAgamirの会話は正常に動作しました。全く問題なかったです。
MODかなと思い、Oblivion.esmとテスト用espのみアクティブにして開始したら
セーブデータのロードはもちろん、NewGameも不可能orz ローディング中に落ちます。
MODを使ってプレイしている以上仕方ないですが、検証には時間がかかりそうです。
>>738 え、バニラは動いたとな。
となると動かない要因をバニラとその会話テストとで違う部分に絞り込めたり
しないですかね。Infoの構造、音声ファイルの状況、会話Idleの状態とか。
でも会話テストでStartConversationした時点で既に順番変数が「4」になっているの
ならInfoの構造自体は正常に動いている、と言う事ですし、
また音声ファイルが一切無い状態でも同様に動かないのであれば多分音声関係では
無いでしょうし。
その会話テストの二人のNPC同士でtartConversation Helloで問題無く会話が続くの
なら会話時のIdleAnimations等の何かでも無い気も。
その辺って多分確認済みですよね。
それ以外の確認可能な両者間で違う要素って何があるんでしょうね。
スクリプトのIf文についてお伺いしたいのですが ref tmpr でref形式で変数が定義されていて if tmpr と書かれている場合ってどう動作するのでしょか? if文は判定が真か偽かのどちらかで判定だと思うのですが このような文の場合何を想定しているのでしょうか? これはLoversで使用されているNudeFlag制御の部分なのですが if Call xLoversCmnIsBodySizeEquip tmpr この返り値は0〜3まであるのですが返り値が2や3の場合は どう判定されるのでしょうか? この部分がどう動いてるのか今ひとつ理解できません ;Upper set tmpr to me.GetEquippedObject 2 if tmpr if Call xLoversCmnIsBodySizeEquip tmpr if eval(nudeflag & 1) set nudeflag to nudeflag - 1 endif endif endif
>>741 if文は条件式が数値や変数だった場合、0は偽、0以外は真で扱われる
if tmpr
tmprが空だったら偽、何か値が入ってたら真
if Call xLoversCmnIsBodySizeEquip tmpr
戻り値が0なら偽、それ以外なら真
>>741 この場合のif tmpは、xLoversCmnIsBodySizeEquip tmprの結果、
リファレンスが取れていれば処理しなさいって意味
つまり、(関数の中身知らないからたぶんだけど)xLoversCmnIsBodySizeEquipは
装備箇所を指定して、そこに装備されてるもののREFを取ってきてるので、
装備されていれば処理しましょう。装備されてなければここはスルーしましょう
って処理なんだと思う
次のif Call xLoversCmnIsBodySizeEquip tmprの場合、0〜3が入るということですが
この場合、0以外なら処理しましょう、って意味になります
つまり、処理内容を決める(?)フラグの値0の場合はスルーするということになります
1以上の場合は中の処理で判別するよ、みたいな使い方ですね
>>742 ,743
ありがとうございます
なるほどそうだったんですか・・
1以外は全部偽じゃないかと思ってました
もう一度読みなおしてみます
>>742-743 とても参考になりました。
今までただ「== 1」を省略するという意味で
If (tmp)
;処理内容
ElseIf (tmp == 2)
;処理内容
ElseIf (tmp == 3)
;処理内容
EndIf
とやってハマったことがあったのですが納得しました
「If tmp」と書くと、「tmpが0じゃないなら」という意味になるのですね。
勉強になりました。ありがとうございます。
そもそも、省略しても同じ処理になる場合は書くべきだよ。 可読性が格段に上がるんだからさ。 if文で省略されてるのは基本フラグ変数という意味を持たせて省略してる。
プレイヤーキャラが死亡時に自動的に復活して。 その後イベントが起こるスクリプトを組んでいます。 しかし、死亡時に体が倒れてゆくのと一緒にカメラが下がって行くのですが。 この復活した後もカメラの位置がどうしてももとに戻らず。 復活を2度にしたり、位置を変えてみたりもしたのですが。 やはりどうしても死亡時にカメラが下がります。 時折成功するのが。 カメラが下がりだす前に復活を完了するパターンなのですが。 これは常にではなく、理由もわからないので再現もできません。 どうすれば復活後も正常なカメラ位置でを維持できるのでしょうか。 どうぞどなたかご教授下さい。 何卒宜しくお願い致します。
748 :
747 :2011/02/02(水) 09:01:50 ID:v47ykZGY
カメラが移動しないときは、どうも優先順位の高い関数を実行した場合みたいです。 普通にResurrectionを行っただけでは、ロード画面が開く寸前まで復活しませんが、前に優先順位の高い命令。 例えば、アビリティを覚えるなどを思ってくると、その後の関数も一緒に呼び出される様な感じかも知れない気がしてきました。 詳しく分かる方、いらっしゃいますでしょうか。
>>747 その目的とする動作ですけど、カメラが下がる事を抑止する事なのか、下がった
カメラ位置を元に戻す事なのか、どっちです?
PCが死亡後に即時Resurreすればカメラは下がらないです。
また一旦下がってしまったカメラ位置をゲーム中に復帰させる方法って無いかも
です。多分。
あとそのスクリプトの種類がObject、Quest、MagicEffectのうちどれか、もし
QuestScriptなら実行周期を変更しているか、デフォのままとか、その辺が死亡の
判定やResurrect実行のタイミングに関係します。
で、PCのResurrectって元々システム上はあくまでイリーガルな操作なので、それ
以外にも問題はたくさん起きると思います。まずここを。
特に「Using on Player」の項のリンク先を。
http://cs.elderscrolls.com/constwiki/index.php/Resurrect
その記事の「キャラ飛び問題」は多分対策出来ますよ。他の問題の対策も多分。 でもPCのResurrectってあくまでイリーガルなので、それ自体が本当に必要かをまず 充分検討した方が良さそうな気も。
752 :
747 :2011/02/02(水) 19:02:55 ID:v47ykZGY
お返事本当に有難う御座います。 カメラを戻す方法も探していたんですが、やはり無理なんですね。 戻す方法は使わないのに踏ん切りつきました。 スクリプトは if Gead == 1 player.resurrction 0 とやっています。 実行周期の変更というのはどうやるのでしょうか。 クエストのプライマリーでしょうか・・・一応その部分は0に設定してあります。 以前、実行周期が5秒だと読んだ事はあるんですが。 それを1フレームごとに変更したり出来るのでしょうか。 しかし、おかしな挙動をすることも多いので。 プレイヤーキャラの復活を使わない方向も検討してみます。
Rosethorn Homeというmodをbashed pachに組み込みたいんですけど タグは何をつければいいんでしょうか?
>>752 PCの死亡とResurrectの処理についてはわからないですが、
クエストの実行周期の変更でしたら、そのクエストにスクリプトを添付してその中で
「float fQuestDelayTime」と変数を宣言して、同スクリプト内か他のスクリプトから
その値を「0.001」のように細かくすれば、毎フレーム実行されるようになります。
毎フレームの監視はそれでできますよ。
一応、↓のページにも最後の方にも少し書いてあります。
http://life4oblivion.web.fc2.com/modmemo/questscript.html でも不具合と不安定さを避けられないかもしれないので、最善はやはり復活を
使わないことかもしれないですね。
755 :
747 :2011/02/02(水) 20:44:06 ID:v47ykZGY
有難う御座いました。 float fQuestDelayTimeなんて言う便利なスクリプトがあったんですね。 これがあればあんな事やこんな事を実現できるかも。 でも、ヘルプに処理を見なおせとか警告文が有るとか。 しかし、プレイヤーのリザレクションはWIKIにもある場所移動とか怖いです。 あと、ロードした後など発動しないことも有るんですよね。 CTDも頻発しますし。 種族や星座の特殊効果解除に関しては、解除された様子がなかったので。 WIKIの文章を書かれた方が参考にしていらっしゃるDeath IncのMODを見たところ。 ディスペルの掛かるアビリティをプレイヤーに追加していたので、それが原因なのかなと思いました。 この関数は一つくらい解決できそうかなぁと思ったら、次の問題が出てきます。 本当におかしな挙動が多いです。 本格的に他の方法を探さないといけないかなと思っています。
>>747 ちょうど同じコトやりたくて同じ実験してたんだ
英語だけどこんなページが
ttp://www.uesp.net/wiki/Tes4Mod:Resurrecting_the_Player ・・・もう大体話題は出尽くしたかな?
出てない話だとOBSE環境だと、タイトル画面からのロード時のみカメラのズレを直してくれるらしいリ
ゲーム中にロードしてのスタートでは直らない、タイトル画面からのロードだけ
カメラのズレがほぼ気にならない速度で毎回リザできるようならもしかしたらズレ気にならなくなるかも・・・ってトコで作業停滞中
もし死んだフレームで確実にリザできるなら、2回目死亡した時に即ロードメニュー出ちゃうのにも対応できないかなぁ・・・
あと仕組みがまだ良く分からないけど、リザ一回目で透明になった後は
OBSEに最近追加された「Update3D」でも透明キャラから普段のキャラグラに復帰できるみたい
757 :
747 :2011/02/03(木) 07:27:40 ID:B56ikdXl
星座の効果が消えるのはここにも書かれてるんですね。 という事は私の勘違いで、やはり確実に存在する訳ですか。。。 もし、OBSEで治してくれるなら、上手く復活さえ出来れば殆どカメラは下がらないので。 OBSE環境専用スクリプトにしてしまえばいいのかな、とは思いました。 しかし、2回目のセーブ画面が出てしまうのはアレは面倒ですよね。 一応既に別の方法でスクリプトを組みだしてはいますが、リザレクションが上手く行くなら、そちらの方がかなり良いので。 出来ればそうしたいですね。。。 OBSEの透明状態を治すのは素敵ですね。
タイトル画面からのロードでカメラ位置が復帰するのはOBSEが無くてもOKかもです。 また「Update3D」は多分内部的にDisableと等価な処理を含んでいそうなので現状では 原則PCに対しては禁じ手と考えた方が良さそうな気が。 あとPCのResurrectでカメラが下がる、PCの位置がピョンと移動する、二回目以降に すぐSaveの選択画面が出るのは解決出来ます。多分。大体。 上の質問の件ではそれらやPCのSpellEffect問題の対策が難度的な意味で問題になり そうだったのでその件個別の対応としてResurrect以外の方法の検討を薦めた訳で。 Resurrectする事自体が目的で、難度は不問、途中で未知の問題が出ても泣かない、 という事ならその道もアリかもなので必要でしたらまた。
会話が出来ない、て件はその後どうなったんでしょうね。 読み返してみて一つ気になったのが、度々出て来る「CSで録音〜」、なのですが。 CSで録音した音声はwavで、wavはiniの[voice]→「SFileTypeGame」の指定を変えない 限りゲーム時には再生されずに無視される気が。うちではそうなります。 wavで字幕表示時間を調整している、という事はそこが変更されているかもなので、 その辺を標準的な環境にしとかないと動作の検証上問題があるかもです。
760 :
3 :2011/02/03(木) 15:14:59 ID:7AcTkn9f
>>759 会話の件については原因不明で未解決のままです。
会話時に使われる音声については少し試してみたところ「mp3 64kb/s 44100Hz 1ch」
の条件なら再生されることを確認しました。wavが再生されるかどうかは試してないです。
mp3を使って音声を再生させても、相変わらず一言目しか話してくれませんでした。
会話文も音声も一言目しか出ません。無音mp3を使うOBSEプラグインの有無も関係
ありませんでした。他に会話機能に関係ありそうなMODは入れていないと思うのですが…。
次の検証はバックアップしてから再インストールが適当そうです。
>>760 mp3についてはそれでOKなので置いとくとして、今までのお話だとCSで録音したwavで
字幕表示の時間を調整した、という事だったので。
最後に確認いいですか?
オプション類が適正になってこちらで確実に動作を確認したのは
>>733 のespです。
そのespについて、
・iniは「SFileTypeGame=mp3」
・音声(wav、mp3、lip)は一切無い
この条件でも動作しない(最初のセリフで止まる)、てのは確実なんですよね?
762 :
3 :2011/02/03(木) 16:33:47 ID:7AcTkn9f
>>761 ・iniは「SFileTypeGame=mp3」
・音声(wav、mp3、lip)は一切無い
はい、この条件で最初のセリフで会話が止まります。
色々小細工してみましたが進展は一切ありませんでした。
繊細な部分に何らかの外部のMODの影響が加わり妙な挙動になっているのだと思います。
>>762 了解です。あとはそのespの二人の間でStartConversation Helloすると問題無く
世間話が始まるのも確実なんですよね。
だとするとバニラ会話はOKでとにかく自作会話だけがNG、と言う事が確実に。
一体なんでしょね。こちらではそういう状況は経験無いですし、どうやればその状況
を再現出来るかもちょっと見当が付かないです。
ただそれが他MOD起因かどうかの結論は、再インストール→素の状態で動作する事を
確認→今と同じMOD環境に復元→動作しない事を確認、が出来てからだと思います。
764 :
3 :2011/02/03(木) 18:13:24 ID:7AcTkn9f
>>763 はい、Helloで世間話はします。会話の順番変数を0に戻さずに自作会話を
StartConversationさせても世間話をします。
確かにMODが原因かどうかはおっしゃる手順を踏まないとわかりませんね…。
今更な質問のような気はするんですが、Obliでのテクスの最小サイズって幾らくらいでしょ? まさか1X1なんてないだろうし、128以下にするとCTD起こした気も 大きい方は4096等あるので、そのサイズまでなら問題ないと解るんですが・・・ ちょっとテクスのサイズが大きくなってきたので小さくしようにも、 はて?そーいやオブリで最低のテクスサイズって? となって 無論アイコンでは64X64と解っていますのでそれ以外の(ノーマルマップ含む)テクスです
>>765 ゲーム自体は1x1でもクラッシュする事は無いと思いますが、その辺はテクスチャを
作成するツール類にも関係して来ると思うので実用上はどうなんでしょうね。
とりあえず実績のある例、という事なら適当な画像ビュアーでバニラのTexture以下を
ガーッと全部見てみるといいかもです。
16x16の「blooddrop01.dds」てのが今見つかりましたけど。
他にもっと小さいのもあるかもですし。
あとResurrectの話ですけど、なんか気を削いだみたいで申し訳無いので少し。
まず、
>>749 のリンク先のさらにリンク先の記事は概念的な話なので、詳細な挙動や
数値とかその辺の記述は必ずしも正確とは限らないです。多分。
で、そにもある様に考え方は幾つかあると思うのですが、とりあえず下の例で。
a) PCが「本当に死んだ」事をGetDeadか何かで判定
b) PCをEssentialにして「気絶した」事を死亡の代用に
c) PCのHealthを監視して充分危険な状態だったら「もう死んでいる」事に
a)は、判定自体は単純ですし、上でも言いましたがResurrectによる見た目上の妙な
挙動は大体全部解決出来るので、考慮の重点は、落した武器/盾をどうするか、
消えたSpellEffectをどうするか、の二点です。これ非常に厄介そうな気が。
でも逆に言えばその二点さえ解決すれば大体OKだったりします。恐らく。
b)は、武器/盾を落とさずSpellEffectも消えず、Resurrectによる妙な挙動も無いの
ですが、一人称の時にGetKnockedState等では気絶状態の判定が出来ない問題が。
気絶時に自動回復するHealthの特定の値の監視だと誤検出の可能性があり、
またはGMSTの「FEssentialHealthPercentReGain」を0にすればHealthが0かどうかで
判定可能になるのですが、他のEssentialなアクターへの影響が未知です。
この二つのどちらかを許容するか、うまく回避出来るならこの方法が一番簡単です。
c)は必ず誤検出/検出漏れの可能性が。
でもSIの「Sheogorath's Protection」はそれで良しとしていますし、細かい事を気に
しなければ別にそれで充分なのかもです。
と言う事で、どの方法で行くかはResurrectする目的や、それにどの程度の確実さを
要求するのか、とかその辺次第な気が。
768 :
747 :2011/02/04(金) 18:52:54 ID:JVKDbmhL
bのPcをEssentialって言うのは凄いですね。 しかし、1人称で検出できないのは・・・本当にもったいない。 cは一撃死が怖いですね・・・ヘルスが1以下にならないようにさえ出来れば何とかなるのかなぁ。 星座はもう、初めにメッセージボックスで入力してもらうとかくらいしか思い浮かびません。。。
Doorを街中や屋外に設置した場合、Minimal Use(NPCの使用最低限)をチェックすることで一般NPCが入り込むという現象を防止することができますか?
>>769 単純にNPCにドアを使わせないなら、ドアにスクリプトをつけてOnActivateで
プレイヤーの場合だけActivateすることで達成できるかもしれません。
NPCがそのドアを使おうと近づくかどうかはわかりませんが…。
>>768 BirthSign付け直しの手順自体は自動化出来そうな気も。
ただその前に、死亡で実際にPCのパラメータの何がどうなるか、BirthSignの付け直し
で元の状態にきちんと復帰するかは一度きっちり確かめといた方がいいかもです。
そういう検証作業を含めて厄介、という意味です。
あと死亡時の武器/盾はGMSTの「iDeathDropWeaponChance」を0にすれば落さなくなるの
ですが、他のアクターも全て同じに。
その辺どう判断するかもやはり目的次第な気がします。
>>769 そのチェックをすればNPCはそのドアを大体使わなくなりますが、絶対に使わない
訳では無いです。
「Minimal」と言う通り、そのDoor以外にPathが無い場合等は通ります。
NPCにそのドアを完全に無視させてPC専用にするのであれば、ドア単体で配置して
リンクせずに、そのスクリプトでPlayerのActivateの場合だけMoveToでドア移動を
した様に見せたり、リンク済みのDisableした隠しドアをActivateさせたりすれば
多分。
そういえばコロールの配達人途中の洞窟でゴブリンや盗賊との集団に巻き込まれた時 極稀に洞窟の中に逃げる時があるぞ。
ごめん途中送信 洞窟とかは通常のドアと別扱いなのかな? 各町共通自宅地下キッチンMODだと町〜町移動するNPCが通ると聞くけど、 通常の家や洞窟は袋小路なのでNPCの自宅等移動ルートに設定されて居なければ近寄らないのかな? NPCも不法侵入は避けるのかな?あ、公共とプライベートって設定があるのだろうか?
洞窟のドアも普通のドアですよ。 通常NPCはそのドアの先に目的が無いから入らないだけで、誰かをFollowしたり 中に目標物が指定されたり、その洞窟を経由した先に目的地があったりすると普通に 入ります。
NifSkopeでメッシュを見ていると 時々、表示の所々が欠けている(とゆうか所々見えている)メッシュがあります CSで開いて見ると(クリーチャーの場合)そのメッシュを表示されなかったりします がゲーム上で見ると特に問題なく見えている・・とゆうようなNifってなんなんでしょうか? CS上でも見えないと不便なので表示できるようにしたいのでが・・
なるほど 以前家を作成したときに中に入り込まれたのはベッドがあるからってことですか
Sleep等で特に目的のベッドが指定されていない場合は現在のセル内でベッドを探す と思います。 うちに帰ったら知らない人がベッドで寝てた、という事だと、何か別な要因で まずそのNPCが自宅セルに出現し、夜になったから近場のベッドで寝た、みたいな 状況かも。 その「別な要因」こそが謎ではあるのですが。
>>776 自己レスですがどうもCSから参照DDSのノーマルマップが見えない時に発生する現象のようでした
失礼しました
地面に落ちたアイテムをクリックで消したいんですが Disable命令は消してもスクリプトは残って動き続けるみたいで (Testすると子アクターをDisableしてもスクリプトで表示したメッセージはずっと表示され続けてていました) なので、このスクリプトも消える方法で消す、もしくはスクリプトを別で消すor停止させる方法は無いでしょうか 何度も出現するアクターなので完全消去は困るのですが(例えばその親アクターから子アクターが生成できない、スクリプトが再生できないみたいな)
>>780 「Disable」はオブジェを「消去」するのではなくて「見えなくする」だけです。
見えない触れないだけで実体はまだそこに残っていてスクリプトも動きます。
で、アイテムとアクターどっちに何をする話です?
「地面に落ちたアイテムをクリックで消す」のと「親/子アクター(?)」の「生成(?)」
の関係やその言葉の意味するところが失礼ですけどサッパリ。
状況が具体的なら多分色々具体策も出る気が。
一般論的には、「消去」してスクリプトを止めるのではなく、Disableされたら何も
せずReturnする様にスクリプトを書く方向もあるかも、ぐらいは言えるかもですが。
でもその「生成」というのが少し気になって。
オブジェの無制限な生成はシステム的に全く推奨されていないです。
その辺もあるので現状では迂闊な事は少し言えない気も。
自分の場合、ダミーのゴミ捨て場セルにMoveToしてます。 それでゲームへの影響はなくなると思いますし、Mod外してRemove Bloatすれば セーブデータへの多分もなくなりそうですし。
手法的には色々あると思います。 また、作る方も使う方も承知の上でやっているのなら何であれ問題は全く無いです。 この場合その辺が明確でないので、細かな話に入る前に状況の確認をしておいた方が 良さそうな気がしたので。
ご返答、本当にありがとうございます 状況としては罠みたいな地面に落ちたアイテムをスクリプトを走らせた後、消去したいんです メッセージを表示した後みたいな感じです 親アクター子アクターは 親オブジェクト子オブジェクトみたいな感じでして、ある解説で使われていたのでそっちが正しいんだと思ってました。 782さまの仰られるようにダミーのゴミ捨て場を作っておけば 大抵3日たてばリスポーンされる筈ですよね、おおお もし、あれならResetInteriorでリスポーンさせるという方法もあるかもですか 地面に落ちたアイテムを直接消去する方法はないんですね、スクリプトを停止させる方法も Disableで消した後動いているスクリプトは子オブジェクトのものなんでしょうか 例えば、もしスクリプトの付いた同じアイテムオブジェクトを100個消したとします すると100個のスクリプトが常に動きつづけているという恐ろしいことになるのでしょうか・・・。 最後に、地面にあるアイテムをプレイヤーに一度取得させる方法は無いでしょうか そこからRemoveと言う手で行けないかなと思いました CSwikiを読んで見ましたがそれらしい関数を発見できませんでしたOrz
>>784 「メッセージを表示した後」てのがまた分からないのですが、なんか忍者の撒き菱みたい
なモノ、と言う事でいいんでしょうか。
で、まず、「親」、「子」、「生成」、という言葉の意味を明確にしときましょう。
「親子」という言葉はシステム上の意味があり、CSでそのReference→EnableParentタブ
で指定されたRefernceの主従関係を示す用語です。
なので別な意味で使っている場合はその説明をまず。
また「生成」というのは予想するにゲーム中にPlaceAtMeしたり、インベントリから
Dropする事を言っていると思うのですが、それで合ってます?
あと、PlaceAtMeやインベントリからDropしたアイテムはどこかの部屋に移動しても 三日たっても消えず永遠に存在し続けます。ResetInteriorしても同じです。 「リスポーン」というのは部屋のオブジェがCSで配置された初期状態に戻ったり、 敵アクターが自動的に再出現する事を差します。 撃って壁に刺さったり地面に落ちた矢が自動的に消えるのはまた少し別な話です。 地面に落ちたアイテムを直接消去する方法は、それがアクターではないDynamicな Reference(PlaceAtMeやDropしたアイテム)であればOBSEの「DeleteReference」で 消す事は出来ます。スクリプトだけを停止する方法は無いです。 スクリプトの付いた100個のアイテムを「生成」したのならスクリプトは100個同時に (時分割という意味で)動きます。 地面に落ちたアイテムはそれが拾うことの可能なものならPCにActivateさせる事で 拾わせる事は出来ます。 一旦インベントリに入ったアイテムならRemoveItemや自分自身をRemoveMeで消す 事は出来ます。 で、希望する動作の見た目の流れが分かればそれに応じて手法が決まるので、 まずそれを教えてもらえると話が早いと思うですよ。 例えば、走りながらある操作をすると地面に何かがポロポロ落ちて、敵がそれを 踏むとアイタタになって10秒ぐらいすると自然に消える、とかそんなかんじで。 でもネタバレが心配、という事なら別にいいですけど。
おおお、アクティブにしたときに作動するスクリプトの付いたオブジェクトでも スクリプトからアクティベートするとちゃんとイベントリに入るんですね!!! 有難う御座いました、何とかなりそうです! 詳しい内容も分からないのに丁寧に質問に答えて下さって、本当に有難う御座いました。
>>786 すみません、便乗質問になるのですが
Begin gamemodeのスクリプトがついた装備品を
コンテナの中に入れておいた場合
一度プレイヤーがコンテナをあけて中を確認してしまうと
コンテナの中にあるアイテムのスクリプトは
走り出してしまうのでしょうか?
またはプレイヤーが自分のインベントリから
コンテナに移した場合も、スクリプトはとまってないということでいいのでしょうか?
お手数ではありますが
もしよろしければおねがいします
え、もういいんですか。 何とかなるならそれでいいのですが、とりあえずは使おうと思っている機能や関数が 自分の思っている通りのものなのか、まずそれ自体の確認を充分に。 またObのシステムって特定のシナリオを実現するためだけの専用システムなので、 例えば各関数等は汎用には作られておらず、リファだけを見て「多分こういう動作を するはず」、と予想しても思った通りには動かなかったりします。 その辺に充分ご注意を。 あと、「アクティブにしたとき」ってまた分からない言葉なのですが、アイテムに 付けたスクリプトは地面に置いてもインベントリの中でもその辺のコンテナの中に 入れてあっても常に動作してます。 例えばAddItemでインベントリにそのアイテムを「生成」するとそのスクリプトは その時点で動作を始め、もしそのアイテムを100個AddItemしたのならスクリプトも 100個動きます。 スクリプトが止まるのは、現在有効なセルにそのオブジェがロードされていない (PCから遠い場所にある)場合か、そのオブジェの入ったコンテナ(アクターの インベントリも同じ)がやはりロードされていない場合です。 ただ、コンテナ(インベントリ)を開いた状態って「GameMode」ではなく「MenuMode」 なので、スクリプト自体は動いていてもGameModeブロックは実行されません。 この辺少しややこしいです。
紛らわしくてすみません
>>788 は他人の便乗質問なのです
ともあれ、ご教示ありがとうございました
自分が便利だからと、そこらのコンテナをスクリプトアイテムの集積場にしておくと
負荷になってしまったりするのですね
参考になりました
>アクティブにしたときに作動するスクリプトの付いたオブジェクトでも >スクリプトからアクティベートするとちゃんとイベントリに入る これは恐らく添付したオブジェクトスクリプトの「Begin OnActivate」ブロック内で 「Activate」を実行すると、そのオブジェクトを入手できるということを指してるんだと 思います。多分そこから「RemoveMe」するのではないかと。。。 「落ちているオブジェを拾う」ことと「RemoveMeする」ことから、全てのオブジェクトでは できないと思うので、その専用オブジェクトに専用のスクリプトを添付して、スクリプト内で 「Drop→スクリプトで拾う→RemoveMeで消す」という流れになるんだと思います。 Dropは外部のスクリプトからやるのかもしれませんが。
>>791 希望的観測で解釈すればそういう事なのかもですが。
でも全体の流れは結局不明ですし、用語用法の話の流れで念押しの意味と、万一
何か概念的な誤解があった場合の用心の為に、敢えて「分からない言葉」と指摘し、
>>788 さんへの回答も含めてアイテムのスクリプトの細かい話をしました。
あと「DropMe」で自分をDropさせる事は出来ます。
でもDropMeして出現したアイテムは今の自分とは別物なのでスクリプト変数の内容の
持ち越しは出来ないです。
私もアイテム関連で教えてください。 アイテムスクリプト内では、GetSelfが使えませんが、 AddItemでコンテナ内に作成したアイテムの自分自身のRefのFormIDを取得するのは可能でしょうか? 一旦PlaceAtMeしてActivate で拾わせてOnAddでクエスト変数経由でrefをセットみたいなのも考えてみましたが、 もし、安全かつスマートなやり方はこれだ!という方法があれば教えてください。
>>793 基本的には無理です
目的によっては、GetBaseObjectで取れるbaseIDで解決できるかもしれませんよ
どうしても必要なら、OBSE command documentationの、Inventory Referenceを参照するといいかもしれません
私は使ったことがなく、詳しいことは分かりませんが
インベントリ内アイテムに擬似的にリファレンスを与えて処理出来る、みたいなことが書いてありました
追記 本当にリファレンス的なものが必要なのかを、まず検討した方がいいですね というわけで、目的を書いてみてはどうかな
目的が分かると確かに話が早いですよね。
>>793 まず、コンテナ/インベントリに入っている状態のアイテムのRefってシステム的に
存在しないです。
PlaceAtMeやDropで生成されたDynamicなRefはインベントリに入ると無効になり、
次にDropした時のRefIDは別物になります。
(IDが同じになる場合はありますが、それはシステムの使用済みIDの再利用の結果
偶然同じIDになっただけで、実体は別物として新規に生成されてます。多分)
また、OBSEにインベントリ内アイテムのRefを取得する関数はありますが、それは
一時的に仮のRefを生成してその場でRefの必要な処理を実行して完了させる為の
限定的なもので、その仮のRefは次のフレームには消滅します。恐らく。
あと、CSであらかじめ配置して静的なRefのFormIDが割り当てられているアイテムは
インベントリに入ってもそのRefは残っており、スクリプトでインベントリ内から
そのRefの参照も出来るのですが、でもその状態って恐らくシステム的に保証されて
いない雰囲気が。
そんなかんじでシステムには、インベントリアイテムにRefは不要、というポリシーが
あるらしく、不要なRefは存在させない方向で作られているみたいです。
なのでそれに逆らうのはそもそもあまり安全でもスマートでも無い気も。
という事で、OBSEで解決出来るならそれでもいいのですが、Refを必要としない方向
で全体の構造を考え直すのもアリです。
その辺はやはりRefが必要な理由次第な気が。
MessageBoxについて質問なのですが。 どうしても、メッセージボックスの入れ子が出来ません。 messagebox "messeag" "A" "B" "C" if A == 1 messeagebox "Aを選択しました" "A1" "B1" "c1" endif if B == 1 messeagebox "Bを選択しました" "A2" "B2" "c2" endif みたいなことをやりたいのですが 最初のメッセージボックスしか出なかったり 2番目のメッセージボックスが先に表示されたりします 一体どうすれば良いのでしょうか
>>797 CSWikiの日本語訳の「Script→Script Tutorial」にズバリ載ってますよ。
http://wiki.oblivion.z49.org/redist/TES4_CS_Help_v1.1.zip それと、MessegeBoxをGameModeブロック内で表示するのか、OnActivateブロックなどの
1回だけ実行されるところで表示するのかで大分難易度…というか面倒臭さが違います。
後者ならわりと簡単です。
前者なら結構面倒なので、その時は自分が使ってる方法をお教えいたします。
そのスクリプトに足らないところは、プレイヤーが選んだ選択肢を取得する
「set 変数 to GetButtonPressed」です。あとはIfを使って変数の結果で分岐
させればできます。
でも独特の注意点があるので、日本語訳ヘルプを見るのがきっと一番ですよ。
選択肢は本当に難しい
MessageBoxって、「多分入力待ちの関数だからきっとこうすれば動くはず」、 と適当に解釈して書いても全然動かない代表選手みたいな関数ですよね。 MessageBoxは「入力待ち」ではなく、実行した後もスクリプトは動き続ける事と、 どのボタンが押されたかは「GetButtonPressed」で値が返るまで待つ必要がある、 という二点がキモな気がするですよ。
Scriptname test short Button begin onEquip MessageBox "選択してください" "A" "B" set Button to GetButtonPressed if(Button == -1) return elseif( Button == 0 ) MessageBox "選択してください" "A1" "B2" set Button to GetButtonPressed if(Button == -1) return elseif( Button == 0 ) message "A1" elseif( Button == 1 ) message "A1" endif elseif( Button == 1 ) MessageBox "選択してください" "A1" "B2" set Button to GetButtonPressed if(Button == -1) return elseif( Button == 0 ) message "A2" elseif( Button == 1 ) message "A3" endif endif end とやってみたんですが、駄目ですOrz 動きつづけているせいでプレイヤーが選択してる間にスクリプトが終わってしまって 表示されないということでしょうか
でしょうね。多分。 MessageBoxを出した直後に下のGetButtonPressedが実行されて結局ボタン入力は 得られないまま終了している気が。 最初のMessabeBoxを出す契機はOnEquipでいいと思うのですが、以降はGameMode等 (この場合OnEquipで以降の階層化もあるのでMenuModeになるのかも)の繰り返し実行 されるブロックの中でGetButtonPressedにボタン値が返って来るまで待っている 必要があります。 で、いきなり階層化は厳しいと思うので、とりあえずは上の方ご紹介の チュートリアルや、GetButtonPressedのサンプル等を見て、まずはMessageBox一つ だけをきっちり動かす事を目指すのが良さそうな気が。
>>801 直感的にはそうなるのですが、実はそれではダメです。一工夫が必要です。
ヘルプをそのまま改造が一番早いと思います。
scn test
short state ;進行度の管理用
short button ;プレイヤーが選んだ選択肢の保存用
Begin OnEquip
If (state == 0)
set state to 1 ;再実行できないようにフラグオン。終了時に0に戻す
MessageBox "選択してください" "A" "B"
EndIf
End
(続き) Begin GameMode If (state == 0) ;0なら何もせずすぐに処理終了 Return ElseIf (state == 1) ;プレイヤーがアイテムを使ったら処理開始 set button to GetButtonPressed If (button == -1) ;プレイヤーが選択するまでは-1で終了し続ける Return ElseIf (button == 0) ;"A"を選択した場合 set state to 2 MessageBox "選択してください" "A1" "A2" ElseIf (button == 1) ;"B"を選択した場合 set state to 2 MessageBox "選択してください" "B1" "B2" EndIf ElseIf (state == 2) set button to GetButtonPressed ;以下はstate==1と同様に EndIf End 自分では試していないので上手く動作するかわかりませんが、 恐らくこんな感じの流れになると思います。 コツは、MessegeBoxは一度だけ実行すること。state変数で進行度を 切り替えて、「GetButtonPressed」で結果を待ち続ける感じにします。 動かないとか(テストしてないので)、不明な点があればどうぞ。
連投すみません。半角スペースとタブスペースが使えないのを忘れてました。 あまりに見づらいので書き直します。 全角スペース使っているためこのままじゃ使えないので、参考程度に…。 Begin GameMode If (state == 0) ;0なら何もせずすぐに処理終了 Return ElseIf (state == 1) ;プレイヤーがアイテムを使ったら処理開始 set button to GetButtonPressed If (button == -1) ;プレイヤーが選択するまでは-1で終了し続ける Return ElseIf (button == 0) ;"A"を選択した場合 set state to 2 MessageBox "選択してください" "A1" "A2" ElseIf (button == 1) ;"B"を選択した場合 set state to 2 MessageBox "選択してください" "B1" "B2" EndIf ElseIf (state == 2) set button to GetButtonPressed ;以下はstate==1と同様に EndIf End
>>801 MessageBoxは今すぐ画面にメッセージボックスを表示させるという処理ではなく
スクリプト全体の処理が終わった後に表示されるメッセージボックスを予約登録しているだけ
ということを意識するとわかりやすいと思います。
同一フレームでMessageBox→GetButtonPressedを行っても
まだ画面にメッセージボックスが表示すらされていないのでボタン押下状態も取得できません。
次フレームで初めてメッセージボックスが表示されてボタンが押されたかもしれない状態になります。
blenderで少しファイルサイズ大きいnif読み込むとロード中で止まってしっかり読み込んでくれないのですが これって仕様なんですか? 1Mちょいだとまず止まるんですが verは2.49bです
スペック低いと読みこむのに時間かかるよ
Athlon 64 X2 6000+ メモリ 4GB その他も普通なスペックですが、5MBか7MBくらいのnifも読み込めましたよ。 待ちが足りないか、スペックが足りないのだと思います。
810 :
801 :2011/02/07(月) 00:43:02 ID:BGROckKq
上手く行きました 変数でブロックごとに分けて、待つですね 何となくスクリプトの流れもわかりました 本当に有難う御座いました
装備等の部位(胸や腕)の大きさだけを変更したいんだが,nifscopeでその部位のninodeのscaleを弄ったりすると,nifscope上だと反映されてるんだが,ゲームでは反映されん ググると髪については色々でてくるが,そういうのってnifscopeだけじゃできないんかな?
ボーンをいじって大きさを変えるのかメッシュ自体を編集するかによるけど
前者ならこのスレの
>>644 からの流れを追えばわかるかも、この方法は大胆な変更してもモーションで破綻しにくいけど弄り方の自由度は低いです
後者ならBlender等3D編集ソフト使わないと無理
後者も出来ますよ。 NiNodeではなく各パーツのNiTriShapeかNiTriStripsのScale/Translationを 適宜変更して右クリ→Transform→Applyで多分。
あと
>>689 の件の続きです。
Weaponの前に挿入したノードに適当なBlendCollisionObjectを付ければ武器の
空中静止は起きずに正常に落下する様になります。
でも麻痺やPushActorAway、Essential等で武器を持ったままラグドール→復活した
時にやはり武器の向きは変になります。
これはその挿入したノードの位置回転を初期化するkfを必要に応じて再生すれば
直るのですが、でもそもそもそういう面倒な事をせずにSkeletonの変更だけで
済ませる、というのが本来の主旨な気も。
という事で、効果に対してその手間が充分引き合う、というのならアリかもです。
コンパニオンに自動的に歩いてクエストターゲットに向かわせるMODを作ろうと思ってるのですが、 現在のクエストターゲットを取得する方法ってありますか? もしくはプレイヤー以外をコンソールのmovetoptのようにクエストターゲットの所に飛ばす方法はありますか? 無さそうなら観念してAIパッケージをクエストターゲット分作成するつもりですが… どなたかご助言をお願いいたします。
>>815 普通に
NPC名.Moveto マーカー名
を任意のスクリプトに組み込んでぶっ飛ばせばおk
817 :
811 :2011/02/08(火) 04:19:30 ID:X9LtbAL5
>>812-
>>813 レスthx
とりあえずNiTriStripsのScale/Translationを変更することで,meshそのものの大きさを変更できることはゲーム上でも確認できた
meshそのものではなくて,meshの1部分だけのscaleを変更っていう操作はnifscopeにはないん?
一度大きさを変更したい部分だけを切り離してやるしかないのかな
ちなみに変更したいのはskeletonのnifファイルじゃなくて,普通の装備用のnifファイルです
装備の1部分だけ大きさ変更するのに3時間以上かかってるとか
>>816 ありがとうございます
クエストのターゲットの近辺にマーカーを置いてそこに飛ばすというのはできるのですが
movetoptのように一つの命令でクエストターゲットの場所に移動するという方法は無いのでしょうか?
一つ一つのクエストごとに命令が違うとAIパッケージをクエストターゲット分作成するのと作業量的に変わらないので…
>>815 QuestTargetのRefやマーカーの取得、PC以外のアクターを自動的にそこに移動する
方法って無さそうな雰囲気が。
これ出来れば面白いんですけどね。
案内役に露払いさせたりPCをクエ目的地まで自動で歩かせたり。
で、TravelのAIを個別に作る以外にマーカーネズミの方法もあると思うのですが、
「PC以外をターゲットの所に飛ばす」って多分その事ですよね?
それが出来ないのなら、マーカーネズミ方式でもスクリプトで現在のクエやStageを
判定する事になり、結局個別にAIを作るのと同じだ、だったらAIで、という事だと
思うのですが、そういう事で合ってます?
いずれにしろ作業量が多いのはもう仕方無いとしても、AIの場合は数が極端に増える
とどうなるか謎ですし、「現在どのクエがActiveか」の判定もどこかで必要になると
思います。
その辺を考えるとマーカーネズミ+スクリプト判定にも利点はあると思うので、
どちらかにするかはまだ検討の余地がありそうな気も。
>>817 NifSkopeではNiTriShape/Stripesの単位以外の部分的なメッシュの変形操作は
出来ないです。
おー、なんか面白そうな。 PCに自動的に何かをさせる方法は色々あると思います。このスレでも何度か。 でもここで問題になっているのはその前段階の、「まず動作の目的地をどうやって 決定するか」、という事だったりします。恐らく。 その後もしPC動作の自動化が必要ならそれはそれでまた別な話に。 ネタ的に面白い分野なんでつい先に振ってしまいましたが。
>>819 ありそうで無いみたいですね。
コンパニオンと並んで歩いて一緒に旅してる感を出したいんですが
結構難しそうです。
ネズミを飛ばしてそこに向かわせるというのも手ではあるのですが
movetoqtのように飛ばせなければ、マーカーを設置してmovetoで飛ばすか、
イベントターゲットの位置を調べてmovetoで飛ばすかになると思うのですが、
それだと二度手間な感じがするので、AIで直接向かわせたほうがまだコピペで済むので手間かからずいいかなと。
思ったんですがアクティブなクエストを判別する関数のGetActiveQuest(ですよね?)はobseの関数なので
tes4editでは使えず(うちの環境ではCSでAIパッケージを編集できない)
tes4editでAIをクエストターゲット分作り、CSでクエストターゲット分のフラグ管理をするという
結局二度手間状態に。
一応クエストターゲットを直接指定できる後者でやろうかなと思ってますが。
プレイヤー以外にmovetoqtをさせてくれればこんなに手間はかからないんですけどね。
>>824 「並んで歩く」事自体が目的なら別な方法もありそうですがそれは置いといて。
>イベントターゲットの位置を調べてmovetoで飛ばす
位置を調べる、というのが少し分からないのですが、ネズミはQuestTargetのRefに
MoveToすればそれでOKでは。
QuestTargetのRefにEditorIDが無い場合は、そのFormIDが例えば「00001234」なら
スクリプトで「set aaa to "1234"」とか「aaa.MoveTo "1234"」と書けばOKです。
例えばバニラクエの「FG01Rats」の最初のQuestTargetの判定はこんなかんじに。
if Stage番号 == 20 || Stage番号 == 60
set TargetのRef変数 to "4ce5f"
:
endif
ネズミ.MoveTo TargetのRef変数
あとはそのネズミをLoccationに指定したTravelのAIをAddすればOKです。
確かに大量のif文を書く必要はありますが、一つのTargetの判定部分は二行で
済みますすし、定型的なのでそれほど無謀でもないと思うのですが。
AIパッケは一つでOKですし。
でもその辺実際にどう作るかは本人の好みやポリシー次第だと思います。
あとご存知かもですが、OBSEからCSを立ち上げているならF11でScriptEditorの
フォントが選べます。
ロード画面が出るけど、 1.プレイヤーの現在地を記憶 2.movetoqt 3.プレイヤーの現在地をクエストターゲットの位置として記憶 4.Playerを1で記憶した位置に飛ばす 5.コンパニオンを3で記憶した位置に飛ばすなり歩かせるなりする こういう力業なら…
nifの書き換えでの質問なんです。 ARDoor02等をリテクスチャしてただの塊として使用したいんですが、ただテクスチャ替えしただけでは元のモデルと同様に側面が暗かったり正背面が光ったりします。 NiMaterialPropertyのEmissive Colorかな?と思い、それらを全部白に統一しても変わりません。 モデルが光ったり一部の陰影があったりなどをnifscopeで弄ることは可能なのでしょうか?
>>828 そういう絵的な質問は画像つけたほうが判断しやすいよ。
どういう風にしたいのか分かりませんが・・・
そのオブジェクト(nif)自体を発光させたいの?環境光(太陽の光とか)で反射するのをなくしたいの?
前者ならNiMaterialPropertyで可能。暗闇でも光ります。
後者はテクスチャの_n.ddsってやつのアルファチャンネルを金属みたいに激しく反射させたいなら白く、
反射させたくないなら黒くして_n.ddsにインポートする。
側面が暗いのは多分VertexColerな気が。 NiTriShape(Stripes)Data→HasVertexColorsを「no」にするか、その下のVertexColors の内容を全部同じにすれば頂点毎の明るさが平坦にはなると思います。 並んで歩くMOD面白いですね。 以前PCと並んで歩くお散歩犬を作ろうとした覚えが。 アクター移動の操作はAI+マーカー移動やPlayGroupで色々出来るので、 並んで歩く事が目的ならそれらの併せ技である程度いいかんじにする事も出来ると 思います。
お散歩犬いいなあ
>>825 アドバイスありがとうございます。
MQ02とMQ03で試したところ、ちゃんとネズミを飛ばせました。
あとは単純作業でいけそうです。
>>827 見た感じ良さそうですね。
試してみます。
コンパニオンを視界に捕えつつ行動したいと思ってる人はやっぱり結構いるみたいですね。
>>830 犬の散歩みたいにちょっと先行するくらいがコンパニオンの挙動を眺めつつ移動出来ていいですね。
細かい挙動も作りがいがありそうです。
騎乗用クリチャーについて質問なのですが 騎乗可能な馬に跨った場合キャラクターのScaleが騎乗した生物のScaleに合わせて変化しますが この変化割合は何処に記述されてるのでしょうか? ラクダが大きすぎなので修正したら乗ってる自分が不自然に小さくなって しまったので・・・
>>835 確か3つの場所で替えられたと思いますよ。
1)NifファイルのNiNodeのScale(NifScope使用)
2)CSのラクダさんの登録のところでのScale
3)「OnActivate」などでのスクリプトの中でスケール変化
2で変える場合は、3でも変更を加えて辻褄を合わせると書いてあった気が…。
あと1の場合、Scale変更後NiNodeで右クリック「Transform→Apply」して、
その後各ホーンでも同様に「Transform→Apply」する必要があります。
>>836 1)でいけました
ありがとうございます
Skeleton.nifのSpine1の先にxformというノードがあり
その部分のScaleで騎乗NPCのScaleを調整しているようでした
このケースではTransform→Applyは必要ではなかったのですが
必要な場合と弄ってはダメな場合ありますよね
この区別が今だに良く判りませんが・・
kfについてなのですが あるモーションの間中、ずっと目を閉じ続けさせるには textkeyにどのような記載をするべきなのでしょうか? 表情の解説をしているサイトを参考に timeが0のときにモーフ開始で Enum: Face BlinkLeft Enum: Face BlinkRight 数字は、例えば4秒のモーションなら左から 1又は100(100%目を瞑る) 0(0秒で100%にする) 4又はもっとずっと長い時間(その間続ける) 1-30程度(眼をあけるのを遅らせるために長い時間を入れてみたり) な感じで試しているのですが、目を開けたり閉じたりな感じです ご教示をいただけると有り難いです
>>838 >1又は100(100%目を瞑る)
>0(0秒で100%にする)
の順番は逆でした
左をゼロにしております
あれ、左が100で良かった
すみません、
>>839 は無しで
スレ汚し失礼しました
>>838 目(視線の向き+瞼)のEnumでの制御は2つの癖があり、理解しないと意図したように動かず苦戦します。
私の理解する範囲でですが、これらを押さえれば大体は意図したようになると思います。
1. HeadTrackingと瞬きが有効になっていると目の制御は実質出来ないのでこれを解除する必要がある
2. 視線の向きについては複数のパラメータを設定しないと表情に反映されない
瞼だけに限れば1だけ解決すればよかったと記憶してるので解除の仕方を記載するとやり方は2つで、
方法1.対象のキャラに一旦Setunconscious 1をかけて続けてSetunconscious 0をかける
方法2.Oblivion.iniのヘッドトラッキングをbDisableHeadTrackingを1にしてDisableにする
+瞬きをfBlinkDelayMinとfBlinkDelayMaxの数値を大きくして瞬きが起きないようにする
というものが自分の知る方法です。
方法2がOblivionの正しい仕様だと思うのですが、制約が厳しく面倒な要素が多いので
特別な事情が無ければお手軽な手段として方法1一択だと思います。
詳しいところはこの作成支援スレPart4の過去ログ856〜890に関連情報があります。
すぐに試したい場合はコンソールから対象NPCにSetunconscious 1⇒Setunconscious 0すると表情が自動では動かなくなるので
あとはAFANコマンド+Enum指定で表情が意図した通りになるか確認出来ます。
一通り試してからkfファイルのTextKeyを編集するのがラクチンです。
もしスクリプトから制御する場合は、モーション再生の前にSetUnconscious 1とSetUnconscious 0を入れます。
なお、この状態になるとそのままだとヘッドトラッキングが無効なままなので元に戻したい場合は
何か適当な装備を着脱させる必要があります(最近のOBSEだとUpdate3dでもOK)。スクリプトから使うならその処理も事後に必要です。
最後に、表情制御を詳しく書いた方のブログもあるのでそちらを見ると理解が早いかもしれません
「Oblivionでの表情の作り方」をキーに検索してみて下さい
>>841 詳細なご解説ありがとうございました!
もっと簡単なのかと思っていたら
目を瞑らせるのも結構手間なのですね
大変参考になりました、感謝です
ご紹介いただいたページもみにいってみます
>>842 細かく書いてしまったのでアレですが、単にSS撮影するだけ、かつ目を瞑らせるだけでよいなら
コンソールからコマンド1つで大丈夫です。
kfファイルが動きの無いポーズMODなどならそれを再生してから、最初の
SetUnconscious 1
で目をつむったままになり意識がなくなります。
ただ、これだと目を瞑った状態というか意識もなく表情も無くなって寝ているみたいになってしまいます。
もうちょっと表情をつけたりNPCに何かさせたければ、一旦
SetUnconscious 0
で意識をもどして、そこからAFAN(AddFaceAnimNote)コマンドで
AFAN "Happy 0.8 0.1 30 0.1"
AFAN "BlinkLeft 1 0.1 30 0.1"
AFAN "BlinkRight 1 0.1 30 0.1"
とかで表情を付けた状態で目を閉じさせることが出来ます。
経験の無さから手が尽きてしまったのでこの方面に強い方のお力を借りたく。ほとんど望み薄だと思うのですが…
なお、限定された状況での話になるために質問の前に背景を書きますがご了承ください。
背景:
自身の作成しているMODでほとんどのNPC(Dead/Disabledなど除く)に対して
Update3dを実行したいという動機があります。但し、Update3d単体の問題があることが分かりました。
Oblivionバニラのチュートリアルクエスト「Charactergen」クエストについて、
進行に関わるNPCの一人(refid:000176FF,baseは000000176FFのCGMythicDawnAssassin05)について、
このNPCの配置されたセル(帝国地下:00022288)に入ってすぐにOBSEのコマンド、Update3d(コンソール/スクリプトどちらでも良い)をかけると
該当NPCのAIが正しく動作しなくなるのか、本来stage 34でこのNPCが動き出すはずが、手動でEVPするまで動かなくなります。
このNPCは本来QuestStage 34未満ではAI:CGAssassinsAmbushBWaitを、34以上ではAI:CGAssassinsAmbushB1を実行します。
コンソールコマンドで確認する限りUpdate3d後も34未満では実行AIは正しく、
一方、34に移った時点でAI:FF001205が割り当てられているため、Update3d後のAI評価がおかしいように見えています
(文字列長エラーになったので質問は
>>845 に記載します)
(
>>844 から続き)
質問:
5つあります。1以外は回答得られないかもとは思っています。
1.上記背景で出てくるAI:FF001205とはどういう時に付与されるパッケージか?
(基本的な質問ですみません、環境により番号など変わる場合、
FFで始まる一時的パッケージの元ネタはどこから作られどういう時に割り当てられるのかの一般論でよいので教えて下さい)。
2.このNPCについて、上記背景のようにセル侵入後にUpdate3dを実行した後でなお
Stage34に達した時点で本来のAI:CGAssassinsAmbushB1を選択可能にさせる「事前対策」はあるか?
(Update3d実行後に何らかの事前準備をすることで再びAI評価が正しくなるように出来るか?)
3.2のような特定NPCへの個別処理でなく汎用的な処理にするために、このようなNPC或いはAIを事前に見分ける(フィルタする)方法があるか?
4.3のフィルタについて正確な法則が無い場合、こうしたNPCを「概ね」弾く手段はあるか?
現状は相当乱暴な考えですがLowLevelProcessingアリでScriptが付与されたNPCはクエストに関連している可能性が
比較的「高いかも」とみなして区別することを考えていますが根拠が薄くかつ誤検出が多いフィルタなので、より確度の高い見分け方が無いか探しています
5.2については事前対処が不可でも正しくないAIが選択されたことが分かればEVPなどの「事後対処」で救済出来る可能性がある。
正しくないAIが選択されたことを概ね検出する(多少誤検出があってもOK)方法はあるか?
以上、ご回答お待ちしてます
システムの瞬き抑止の話ですが。 少し試してみたのですが、Blinkを常時BuildupTime(パラメータ二つ目)の状態に するとシステムの瞬きを抑制出来るかもです。 具体的には例えば、 0.5000 ENUM: Face BlinkLeft 1.00 0.6 1 0 0.5000 ENUM: Face BlinkRight 1.00 0.6 1 0 1.0000 ENUM: Face BlinkLeft 0.99 0.6 1 0 1.0000 ENUM: Face BlinkRight 0.99 0.6 1 0 :以下同様に1.0と0.99を交互に みたいに、0.5秒毎にBuildupが0.6秒のキーを実行すると瞼がずっと閉じたままになる みたいです。 (閉じ具合が1.0と0.99の二種類あるのは、その値が同じだと動作がスキップされる ので値を変えて交互に実行する必要が) この理由を予想するに多分、常時Buildup状態なのでシステムのBlinkが重なっても 何も起きない様に見える、またはシステムのBlinkはキャンセルされる、とか そんなん雰囲気が。あくまで予想ですが。 また現状での重大な欠点としては、最初瞼が閉じるタイミングが左右で一致しない 場合があったりで動作が不確実です。 また同じ部位のBuildup時間を常時重ねてもシステム上問題が無いかは謎なので その辺の充分なテストが必要に。多分。 とりあえずネタレベルの話として。
>>844 お話の主旨は、Update3DするとAIが変になる、という事だと思うのですが、
うちではNewGame→coc ImperialDungeon02→そのAssassinにUpdate3D→
setstage charactergen 34、とするとそのAssassinは即戦闘状態になりました。
背後のドアにぶつかってそこで足踏みしますけど。
1は、最上位2桁がffのAIって多分CombatのAIです。下6桁の値が小さいのが気に
なりますが。
NewGameでやってますよね?
あとシステム変更系のMODを入れたまま作業してたりします?
それとUpdate3Dの代わりにそのアクターをコンソールでDisable→Enableするとどう
なるかとか。これってUpdate3Dと意味的には同じ事です。
まずはとにかく、その状況は本当に変なのか、変だとしたら本当にUpdate3Dに起因
するのかの切り分けが必要そうな気も。対策だけを急がずに。
もしUpdate3Dに問題があるのならそれ自体が大問題な訳ですし。
また、OBSEの挙動を問題にするならVerを教えてもらえると助かるですよ。
あと、そもそも全NPCにUpdate3Dが必要な理由って何ですか?
いや別に秘密ならいいんですけど。
なんかUpdate3Dでなくてもよさそうな予感もするので。
>>847 有難うございます。あなたの回答が頂けるのを期待してました。
全NPCにUpdate3dが必要な理由は今作成しているCCAOという私のMODのためです。
簡単に申し上げると、NPCについて装備している武器を元にその武器のためのモーションを割り当てるために
SetModlePathによるSkeleton変更かToggleSpecialAnimsによるSpecialanimsの追加をするのが目的なのですが
それを即時にNPCに反映させる手段としてUpdate3dを必要としています。
厳密には全NPCで無くてもよいのですが、出来るだけ多くのNPCの動きを変えたくて周囲2セルのNPCを一定頻度で検出しています。
1は了解です、確かにPackageもProcedureもCOMBATになっていました。
GameはNewGameでやっています。
あと、OBSEは0020b5です。
コンソールからのDisable/Enableだと事象は再現しませんでした。
ただ、おかしな動きと言うかDisableにしたのにそのNPCが消えないのが分かりました。
なんだこれは?
とても奇妙なんですが、DisableしてもこのNPCが消えない事象が起きています。あれ?他は普通に効いてるけどこれだけおかしいな。
システム変更系のMODは若干入っています。大きいものではOblivion Stutter Removerです。
OSRを多くのユーザが入れていてかつこれを入れてる場合のみ起きる問題の報告が複数あったため入れっぱなしでDebugしてます。
ただ、このDisableの振る舞いを見る限りだと何か環境がおかしい気がしてきました。
一旦自分のMODだけの環境を作って確認してみます。
仰る通り一度環境を簡素にして再質問します。多分そうかからないと思うのでまた状況をここに書きますね。
>>848 あ、申し訳無い、ImperialDungeon02のAssassin達って特定の一人をParentに指定
してあるので個別にDisableは出来ないかもです。
複数の魔法が収録されたMODから一つの魔法だけ欲しいんだけど、その魔法で使用しているスクリプトやエフェクトなどを抽出してくれる ツールって何かないかな?
>>849 すぐ試すとか書いておきながら環境準備中に寝てしまってました。
で、GoTY仕様の最小セット(knights.esp+DLCShiveringisles.esp)+Oblivion.exeは日本語パッチ適用+OBSE0020b5で試してみたのですが
やはり挙動は変わらず、Ref:000176ffについてはUpdate3d実行後にStageが34まで達しても動き出しませんでした。
クリーンインストールではないですがOBMMからDeactive+CleanALLでMDOを全て外しBushed patch.esp等も無効ですので
OBSEを除けば環境的にバニラになっていると思います(データももちろんNEWGAMEです)。
一応、OBSEのPlug-inにConScribeとCSE用のDLLが入っていますが流石にこれは今回のケースとは無関係と思いそのままにしてあります。
そちらだと同じ問題は起きないんですよね?だとするとまだ何か差分があるのか、ん〜。
いずれにせよ自環境だけでなく他の方からも同じ事象が出ている(というより調査の切っ掛けが他の方の申告だったりする)ので
割と最小セットに等しい環境でも起きうる問題なのだと考えると、起きる前の対処か回避、起きたあとの対策の3つのいずれかを検討したいと考えています。
本件について分かるところがあれば引き続きコメント頂きたく、宜しくお願いします。
>>843 続けて有り難うございました!
ただ今回は、SSではなくモーションの方で
またできればプレイヤーが自動的に手を加えなくても
目を瞑って欲しいので
>>841 で教えて下さった方で試そうかと思います
>>846 同じ方でしょうか
詳細な追加検証ありがとうございました!
しかも、私の用途だと、今回ご教示いただいたやり方のほうが
都合がいいぐらいです!
これまた大変参考になりました、ありがとうございます!
こちらも試してみます
>>851 え、動かないとな。うーん、なんでしょうね。
Update3D単体で他の方も問題が出てる、て事ならやっぱ何か環境に敏感な部分が
あるんですかね。
Update3Dってそのフレーム内で処理が完了せずに複数フレームに跨る処理なので
確かに元々構造的な問題が起きる可能性がある関数だとは思うのですが。
Update3Dするとアクターは点滅すると思うのですが、消えているタイミングで
例えばStartCombatしても戦闘は始まらなかったりしますし。
完了までの数フレームの間は他からの重要な処理が無効になる可能性が常にあるので、
関数単体での問題以外にその辺にも留意が必要かもです。
でもそれって特にUpdate3Dに限らず、Disable→自前でウエイト→Enableでも同じ
ではあるのですが。
ついでにDisable/Enableとの細かな挙動の違いも確認しとくといいかもです。
例えばその辺のNPCをStartCombat PlayerしてDisable/EnableとUpdate3Dでどう挙動
が違うかを見てみたり、NPC同士の会話中に試してみたり。
>>853 ビーム部がStencilでDRAW_BOTH指定なのにメッシュは表裏両面あるので二重に描画
されているのが原因な気が。
ビーム部のNiTriStrips→PropertyのNiStencilPropertyを取るか、メッシュを片面
一枚だけにすれば多分OKです。恐らく。
>>854 回答ありがとうございます。
もしかすると詳細の記載が足りず正しく伝わっていないかもしれないので追記させて頂きます。
・Update3d自体はStageが34になる十分前に実行済み
・その後クエストを手動進行させてStageが34に至ったところで事象発生
※セル侵入後コンソールからUpdate3dを実行し、以降は手動でクエスト進行して
動作を確認(Stage34到達はコンソールから確認)しているので間に1分ほど間あり、点滅終了も目視確認済み
なので、Update3d実行直後の間に巻き込まれての問題とは直接的な関係は見えにくい状況ではあります。
Update3d実行時点もこのNPCはAmbushしてるとこなので動きはなく(idle.kf実行中)、
実行前後でPackage/Procedure/playgroupいずれも変わりはない状態です。
今投稿を見返していて気付いたのですが、もしかしてこちらがリファレンスを伝え間違ってたり…はないですよね
該当のアサシンは扉に向かうことは無い位置にいるので少し気になりました。
>setstage charactergen 34、とするとそのAssassinは即戦闘状態になりました。
>背後のドアにぶつかってそこで足踏みしますけど。
該当のリファレンスは000176FFで皇帝達が通る通路の左側に位置する2階というか
上のあたり、皇帝達の左死角にあたる位置にいるやつで本来は飛び降りて襲ってくる感じです。
或いは足踏みの意味は2階にとどまったままになり降りてこないという意味でしょうか?
もしそうであればこちらで起きている事象もそうなので、私の表現が悪いだけで同じ事象が起きているのかも
とりあえずこちらでは事実確認出来てない部分としてAIの遷移がどうなってるか正しく把握出来てないことに気付いたので
OnPackageChangeの動作確認を兼ねて該当NPCにイベントハンドラをセットして様子を見てみることにします。
あと、もしSさんがOBSE0020b4以前をお使いならVerを教えて頂いてもいいでしょうか?
同じVerで問題が軽減されるか確認してみようと思います
(自分のMODの推奨Verをそこに合わせたり、苦し紛れではありますが)
A魔法でプレイヤーにBトークンを付与する Bトークンスクリプトは付与初期にCクエストを開始し、removemeする直前にCクエストをSTOPする Aクエストが動作している間は、当該セルにいて 且つ、Bマーカー(REF)から一定距離以内にいるNPC(actor)は スクリプトで指定された効果を受ける 以上の流れにしたいのですが、クエスト内でこういった感じに 近くにいるNPCを無差別に指定するには ref meなどに対し、何をgetして指定すればいいのでしょうか? それともこういった流れは、クエストでは無理なのでしょうか? 宜しくお願いします REFつきのCトリガーゾーンをダミーセルに横敷きして クエスト開始でREFマーカーにmovetoさせ 終了時に元のダミーセルに戻すというのも考えましたが movetoで出てくる位置ってわりといい加減そうだったり スマートではなさそうなので、できれば上記でいきたいのですが……
>>857 お書きになった内容だとクエストかどうかはあまり意識する必要が無い
(プレイヤーにアイテムを与えてそのアイテムのObjectScriptが処理する)ように思いました。
魔法開始がクエスト開始とアイテム付与を行い、また魔法終了ないし別のトリガがクエスト停止とアイテム剥奪をするとして
その間の処理自体はアイテムに付与されたObjectScriptがやるのであれば、そのObjectScriptの書き方次第になります。
その中で特に困っておられるのが
マーカーから距離 n にあるNPCを全て拾い上げる方法、ということであってるでしょうか?
その場合は、OBSEの使用がOKな状況ならGetFirstRef/GetNextRef/Whileを使って実現出来ます。
以下のようなループを書いて、周囲1セル内にいるNPCを順々にピックアップしていきます。
let npc := GetFirstRef 35 1
While( npc )
if ( npc.GetDistance マーカー < 指定距離 )
そのNPCに行いたい処理
EndIf
let npc := GetNextRef
Loop
みたいな感じです。
詳しくはCSWikiやOBSEコマンドリファレンスをGetFirstRefで検索してみて下さい。
****_n.ddsというのがノーマルマップというのは分かるのですが、****_g.ddsというのは何なのでしょうか?
グロウマップ
ん〜、AIの遷移を手繰ってみたんですがAI自体の切り替わりは行われていて stage 34で反応すべきAIも一度動いてるんですがそのあとFFで始まるAIに変わるも 皇帝達に襲いかからずその場で動かなくなるという挙動でした。 AIが正しく切り替わらないというよりAIは切り替わっているが期待した動作をしないというのが正しいようです。 この状態からEVPすると皇帝達に襲いかかるんですが、このハマり状態になる前にEVPを打ってもハマりが防げるわけではないようで これだと汎用的な対処は難しそうです。 やりたくないけどID指定でこのNPCだけ弾くかなぁ。根本的には何の対処にもなってないけど…
>>861 あー、真面目に最初から通しでStage34までやったら仰る状況が再現しました。
CGAssassin05Refが降りて来ずにその場で素手構えでジリジリしている状態ですよね。
適当な事を言って申し訳無かったです。
OBSEは0019(初版)と0020b5両方で確認しました。
また、CGAssassin05Ref(176ff)だけでなく、皇帝御一行様の進行方向ドアの中にいる
CGAssassin06Ref(17708)もUpdate3Dすると武器を使わず素手になったりの妙な挙動に
なるみたいです。多分他のAssassin達も。
で、これはAssassinのAbilityの「AbBoundArmorMaceMD」が怪しい気が。
Update3Dではなく、単にRemoveSpell 3e91bとしても同じ挙動になると思います。
この状態って恐らく武器装備関係の不正な状態か何かな雰囲気なので、それが
リセットされる様な事をすれば解決するかもです。
この場合は例えばコンソールで
update3d→additem 19171 1→removeitem 19171 1
(「1971」はIronDagger、他の武器でも)
としてみたり。復帰の確認をするだけならAddItemだけでも多分。
他にももっと汎用な方法はあるかもです。