最終更新: kenken2020 2023年08月23日(水) 14:48:12履歴
目次
◎CKでESPを読み込む時、同時に「UIExtensions.esp」も読み込みマスター指定する
◎衣装変更したいArmorのセットをOutifitリスト(コーデセット)として作成する
例)
Armor「ブレザー(黒)+スカート+タイツ+ローファー」をOutifitリストとしてまとめる
Armor「ブレザー(黒・半脱ぎ)+スカート+タイツ」をOutifitリスト「Outifit_Set_A02」としてまとめる
→上記「Outifit_Set_A01」の衣装変更バリエーション
◎フォームリストを作成しOutifitリスト(標準衣装セットとその衣装の変更バリエーション)を登録する
・フォームリストは「標準衣装セットとその衣装の変更バリエーションを登録したOutifitリスト」と
上記のフォームリストをまとめたフォームリストの2種類ある
◎CKでフォームリストをスクリプトのプロパティと結びつける?
◎パピルスコンパイラの設定「Advanced Papyrus.ini」に「UIExtensions」のスクリプトへのパスを追記する
◎衣装変更したいArmorのセットをOutifitリスト(コーデセット)として作成する
例)
Armor「ブレザー(黒)+スカート+タイツ+ローファー」をOutifitリストとしてまとめる
Armor「ブレザー(黒・半脱ぎ)+スカート+タイツ」をOutifitリスト「Outifit_Set_A02」としてまとめる
→上記「Outifit_Set_A01」の衣装変更バリエーション
◎フォームリストを作成しOutifitリスト(標準衣装セットとその衣装の変更バリエーション)を登録する
・フォームリストは「標準衣装セットとその衣装の変更バリエーションを登録したOutifitリスト」と
上記のフォームリストをまとめたフォームリストの2種類ある
◎CKでフォームリストをスクリプトのプロパティと結びつける?
◎パピルスコンパイラの設定「Advanced Papyrus.ini」に「UIExtensions」のスクリプトへのパスを追記する
;男の場合は処理を中断する if ActorRef.GetActorBase().GetSex() == 0 Debug.Trace("@@@:Faild!!!:Not Female!") return false endif
;-------------------- ;---メインメニューの処理--- ;-------------------- ;フォームリストを配列に収納する(メインメニュー) ;フォームリスト「OurfitList」はCKで予めプロパティ設定しておく Form[] Fuku_Form = OurfitList.ToArray() ;リストUIの作成(メインメニュー) UIListMenu listMenu = UIExtensions.GetMenu("UIListMenu") as UIListMenu ;第1段落のメニュー設定(メインメニュー) Corde_Main(listMenu) ;メニューをゲーム上で表示する(メインメニュー) listMenu.OpenMenu()◎選んだメニューの結果を取得する(メインメニュー)
;選んだメニューの結果を取得する(メインメニュー) int result = listMenu.GetResultInt() string sResult =listMenu.GetResultString() Debug.Trace("@@@:result:Main:" + result +"::"+sResult)◎メニューの戻り値が想定外の場合
;メニューの戻り値が想定外の場合 if result == -1 Debug.Trace("@@@:Faild!!!:Mian menue") return false endif
;-------------------------------------- ;---アクターに適用するOutifit情報を取得する--- ;-------------------------------------- ;先程取得したメインメニュー用フォームリスト「Fuku_Form[result]」を ;新しく定義したサブメニュー用のフォームリスト「OurfitList_Sub」に入れる FormList OurfitList_Sub = Fuku_Form[result] as Formlist ;フォームリストを配列に収納する(サブメニュー) Form[] Fuku_Form_sub = OurfitList_Sub.ToArray() ;取得したいOutfit(コーデセット)のフォームリスト(サブメニュー用) Outfit outfit_ref = Fuku_Form_Sub[result_Sub] as outfit Debug.Trace("@@@:FormID(SUB)::" + Fuku_Form_sub[result_Sub])
;---------------------- ;アクターにOutifitを適用する ;---------------------- ;ユニークでないアクターの衣装変更を行う場合「ActorBase」に適用させる ;ユニークなアクターの衣装変更を行う場合「Actor」に適用させる ActorRef.SetOutfit(outfit_ref)
◎Script
My_Spell_PositionSelector_MagicEffect.psc
My_Spell_PositionSelector_Ailias.psc
◎Quest
My_Quest_PositionSelector
◎MagicEffct(魔法効果)
My_MagicEffct_PositionSelector
◎Spell
My_Spell_PositionSelector
◎Book
My_SpellTome_PositionSelector
My_Spell_PositionSelector_MagicEffect.psc
My_Spell_PositionSelector_Ailias.psc
◎Quest
My_Quest_PositionSelector
◎MagicEffct(魔法効果)
My_MagicEffct_PositionSelector
◎Spell
My_Spell_PositionSelector
◎Book
My_SpellTome_PositionSelector
◎グローバル?変数の定義
◎変数
;----------------------------- ;グローバル?変数の定義 ;----------------------------- ;体位別のモーションリスト sslBaseAnimation[] Anim_List_Sub ;取得したスレッドコントローラーから参加中のアクターのリストを取得 Actor[] Positions ;現在再生中のモーション名を取得 string Now_Ani ;指定するタグ string tag_Base = "sex" ;除外するタグ一覧 ;Aggressive(レイプ) , LeadIn(前戯) , InvisFurn(家具) string tag_NO_01 = "Aggressive,LeadIn,InvisFurn"
◎変数
;アクターが現在関連付けられているスレッド コントローラーを検索 sslThreadController controller controller =SexLab.GetActorController(ActorRef) ;取得したスレッドコントローラーから参加中のアクターのリストを取得 Actor[] Positions = controller.Positions ;現在再生中のモーション名を取得 string Now_Ani = controller.Animation.Name ;再生中のアニメーションリストを取得(大元のアニメーションリスト) sslBaseAnimation[] Anim_List_Main Anim_List_Main = controller.Animations
;------------------- ;対象がセックス中かの判定 ;------------------- bool Act_Now_Sex = SexLab.IsActorActive(ActorRef) if Act_Now_Sex == true Debug.Trace("@@@:対象:"+ActorRef.GetLeveledActorBase().GetName()+"はセックス中!!!") else Debug.Trace("@@@:対象:"+ActorRef.GetLeveledActorBase().GetName()+"はセックス中でない") ;セックス中でない場合は処理を飛ばす return false endif
;----------- ;UILIBの定義 ;---------- ;UILIBはこのスクリプトの取り付けているオブジェクト(Quest)に取り付ける ;↑エイリアス(PlayerRef)ではなくQuestの方にUILIBのスクリプトを取り付ける! ;MODのESP名とUILIBを取り付けたクエストのフォームIDからフォームを取得し、UILIB_1型にキャストする ;UILIB_Nの「N」はバージョン?「1」で良い? UILIB_1 UILib = Game.GetFormFromFile(0x052D57, "My_Spell_01.esp") as UILIB_1 ;UILIBが取得出来たかの確認 ;Debug.Trace("@@@:UILib:"+UILib)
;-------------- ;メインメニューの表示 ;-------------- ;リストメニュー用の配列(メインメニュー) String[] sOptions = new String[5] ;リストメニューの内容を定義 sOptions[0] = "0:キャンセル" sOptions[1] = "1:正常位" sOptions[2] = "2:バック" sOptions[3] = "3:騎乗位" sOptions[4] = "4:" ;選択したエントリのインデックス用 Int iInput ;タイトル、エントリのリスト、開始インデックス、関数に渡されたデフォルトのインデックスを含むリスト メニューを表示する ;UILib.ShowList( メニューの上部に表示されるタイトル, 表示されるエントリのリスト, メニューが開いたときに選択されるエントリのインデックス, デフォルトのエントリのインデックス) iInput = UILib.ShowList("体位の選択", sOptions, 1, 0) Debug.Trace("@@@:選択されたメニューのインデックス(メイン)["+iInput+"]")
;------------- ;サブメニューの表示 ;------------- ;サブメニューの戻り値用 Int iInput2 ;アニメーションのタグ用 string tag_Add ;リストメニューの内容を定義 ;配列の定義はもっと良い感じに出来ないか? String[] sOptions_sub = new String[15] ;------------------------ ;選択肢「キャンセル」が選ばれた場合 if iInput == 0 return false endif ;選択肢「正常位」が選ばれた場合 if iInput == 1 ;指定するタグ ;「,」を忘れない事! tag_Add =",Missionary" endif ;選択肢「バック」が選ばれた場合 if iInput == 2 tag_Add =",DoggyStyle" endif ;選択肢「騎乗位」が選ばれた場合 if iInput == 3 tag_Add =",Cowgirl" endif
;--------------------------- ;再生するアニメーションリストを作成する ;--------------------------- Debug.Trace("@@@:Show_List():") ;指定するタグ tag_Add = tag_Base + tag_Add ;SexLab.GetAnimationsByTags(<参加するアクターの人数>, "指定するタグ(カンマ区切り)","除外るタグ(カンマ区切り)",<タグの指定条件をAND又はORにするか>) Anim_List_Sub = SexLab.GetAnimationsByTags(Positions.Length, tag_Add, tag_NO_01, true) ;アニメーションリストの長さ Debug.Trace("@@@:Anim_List_1.Length:" + Anim_List_Sub.Length) ;アニメーションリストを作成 int i = 0 While i < Anim_List_Sub.Length sOptions_sub[i] = "["+i+"]" + Anim_List_Sub[i].Name i += 1 EndWhile ;リストメニューを表示する iInput2 = UILib.ShowList("体位の選択(サブ)", sOptions_sub, 0, 0) Debug.Trace("@@@:選択されたメニューのインデックス(サブ)[" + iInput2 + "]")
;--------------------- ;アニメーションリストを変更する ;--------------------- ;アニメーション制御スレッドにアニメーションリストを登録する controller.setanimations(Anim_List_Sub) ;アクターの整列?SexLabのホットキーにある機能? controller.RealignActors() ;アニメーションを変更する・アニメーションリストの配列番号?を指定する? Controller.SetAnimation(iInput2) ;ステージ進行度の変更 controller.GoToStage(2) ;デバッグ用 Now_Ani = controller.Animation.Name Debug.Trace("@@@:ChangeAnimation:"+Anim_List_Sub[iInput2].Name+" Anim:"+Now_Ani)
コメントをかく