■Unity開発メモ用のWiki◎現在扱っていること・Unity全般・MMDからUnityへの変換してインポート・MMDの仕様把握・BlenderでMMDモデルのカスタム


目次

SEXLABのAPI


■Modder向け SexLab Tips & Tricks
https://seesaawiki.jp/teslab/d/Modder%B8%FE%A4%B1%...

SexLabのスクリプトソースメモ

■ActorUtil.psc
アクター関連の何か?
■JsonUtil.psc
JSON形式のデータを扱う何か
■MiscUtil.psc
その他の機能?
■ObjectUtil.psc
オブジェクトのアニメーションのオーバーライド?
■PapyrusUtil.psc
パピルスの低レイヤー関連の機能?
SexLabFramework.psc
SexLabフレームワークの本体?
■SexLabUtil.psc
SexLabフレームワークの低レイヤー関連の機能?
■sslActorAlias.psc
アクターのエイリアス?
■sslActorCumEffect.psc
絶頂時のエフェクト?
■sslActorLibrary.psc
アクターの情報関連?
■sslActorStats.psc
アクターのステータス関連?
◎FACTORY FUNCTIONS:ファクトリ関数(オブジェクトを返す関数・オブジェクトを作成するためのひな型の役割)
◎STAT関数(ファイルやディレクトリの状態を取得する)
◎フック関数(プログラムにおいて、本来の処理を横取りして独自の処理を割りこませること)
◎関数式(関数を変数に代入して値として扱う式のこと)

確認?読み取り専用?プロパティ?


■SexLab が現在有効であり、新しいシーンを開始できるかどうかを示す読み取り専用プロパティ
 bool property Enabled hidden
 	bool function get()
 		return GetState() != "Disabled"
 	endFunction
 endProperty

■SexLab が現在セックス アニメーションをアクティブに再生している場合に TRUE を返す読み取り専用プロパティ
bool property IsRunning hidden
	bool function get()
		return ThreadSlots.IsRunning()
	endFunction
endProperty
現在稼働中のSexLabのスレッド数を取得する
・IsRunning と同様に、現在再生中のアニメーションの数 (最大 15 個中) を示す読み取り専用プロパティ
int property ActiveAnimations hidden
	int function get()
		return ThreadSlots.ActiveThreads()
	endFunction
endProperty

sslBaseVoice(SexLabの音声全般を担当?)

参考:SexLabの音声の弄り方
https://skyrim-sweetslab.blogspot.com/2018/05/tips...

「GetSound」関数?

SexLabのデフォルトの設定ではセックス中の音声は各アクターの「OnUpdate」のタイミングで「sslBaseVoice.psc」スクリプトの「PlayMoan」関数が呼ばれることで発声するようになっています。
条件としては「isSilent」、つまり再生されているアニメーションが「音声無し」のフラグがついているかどうかしか見ていません。

なのでフェラチオ時かどうかの判定は、「PlayMoan」関数を呼び出している大元の「sslActorAlias.psc」でやります。
「sslActorAlias.psc」というのはその名前の通り、SexLabのセックス中のアクター全員にかかっているセックス中の人物の挙動を司るスクリプトです。

「SetVoice」関数?
function SetVoice(sslBaseVoice ToVoice = none, bool ForceSilence = false)
	IsForcedSilent = ForceSilence
	if ToVoice && IsCreature == ToVoice.Creature
		Voice = ToVoice
	endIf
endFunction

スタートセックス(StartSex)

◎概要
これは、あまり多くのコードを必要とせずに Sexlab アニメーションを開始するための簡単かつ迅速な関数です。
StartSex と QuickStart の違いは、StartSexにはアニメーションのリスト (少なくとも 1 つ) が必要であるのに対し、
QuickStart はアニメーション タグを使用してアニメーションを取得することです。
paramPositionsアニメーションで使用されるアクターの配列であり、最大 5 人のアクターがサポートされます。
一番最初のものは「パッシブポジション」とみなされます。
アクターが指定されていない場合、この関数は失敗します。
paramAnimssslBaseAnimation の配列であり、どのアニメーションを再生するかを指定するために使用されます。 アニメーションの場合

◎サンプルA

◎サンプルB

クイックセックス(QuickStart)

アクター関連

アクターが有効かチェックする【SexLab.IsValidActor(ActorRef)】

セックス相手を検索する(FindAvailableActor)

◎FindAvailableActor
・指定されたエリア内で SexLab の有効な俳優を検索します

◎パラメータ
CenterRefObjectReference検索の中心点として使用するオブジェクト。
Radius [オプション]float検索する中心点からの距離。
FindGender [オプション]int検索する希望の性別 ID。任意の場合は -1、男性の場合は 0、女性の場合は 1。
IgnoreRef1/2/3/4 [オプション]Actorこの関数によって返されたくないことが確実にわかっているアクター。
◎返り値
・Actor : 有効なアクターが見つかった場合。 有効なアクターが見つからない場合はなし。
◎例
actor kPervert = None
kPervert = SexLab.FindAvailableActor(CenterRef = SexLab.PlayerRef as ObjectReference, Radius = 600.0, IgnoreRef1 = akTarget)  	

◎FindAvailableActorByFaction
・指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab の有効な俳優を検索します
◎FindAvailableActorWornForm
・ 指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab の有効な俳優を検索します

◎FindAvailableCreature
・指定されたエリア内で SexLab 有効なクリチャーを検索します
◎FindAvailableCreatureByFaction
・指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab 有効なクリーチャーを検索します。
◎FindAvailableCreatureWornForm
・指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab 有効なクリーチャーを検索します。

◎FindAvailablePartners
・指定されたエリア内で複数の SexLab 有効なアクターを検索します

アニメーション(sslBaseAnimation)関連

アニメーションの構築方法(sslBaseAnimation[]・アニメーションの配列)

◎SexLab.StartSex()に渡すsslBaseAnimation[]←アニメーションの配列
アニメーション名を直打ちで指定出来るが、条件が増えるとスパゲッティになるので以下の様にする
sslBaseAnimation[] anims
anims = SexLab.GetAnimationsByTags(2, "mf,kissing", "sex")

	sslBaseAnimation[] anims
	string tag = SexLab.MakeAnimationGenderTag(sexActors)
	tag += ",kissing"
	anims = SexLab.GetAnimationsByTags(sexActors.Length, tag, "sex")

アニメーションのリスト長や名前を取得する

◎アニメーションのリストの長さ
anims.Length
◎アニメーションの名前
anims[i].Name
◎SexLab.GetAnimationsByTags
・第1引数:参加人数
・第2引数:アニメーションのタグ
	;アニメーション
	sslBaseAnimation[] anims
	anims = SexLab.GetAnimationsByTags(2, "sex" )
	int i = 0
	Debug.Trace("@@@:anims.Length:" + anims.Length)
	While i < anims.Length
		Debug.Trace("@@@:anims.Name:" + anims[i].Name)
		i += 1
	EndWhile

スレッド関連

スレッドへの登録【RegisterForModEvent】

◎参考:RegisterForModEvent - Form
https://www.creationkit.com/index.php?title=Regist...
・指定されたイベント名のカスタム イベント コールバックを登録します。
・ゲームをロードするたびに登録を更新する必要があります。

・RegisterForModEventはイベントによるコールバックを自分で登録することができる関数です。
・第一引数としてイベント名を設定し、その名前のイベントが発生した場合に、第二引数の関数を実行します

・第二引数にて登録する関数の引数は、必ず「string、string、float、form」の4つの引数を持っておく必要がある
→SEXLABは引数は2つ?
→第1引数;SexLabスレッドコントローラID、第2引数:プレイヤーがいずれかのポジションにあることを示すブール値

◎スレッドの登録例)
Thread.SetHook("TestSpell")
RegisterForModEvent("HookAnimationEnd_TestSpell", "AnimationEnd")
→「HookAnimationEnd」+「_TestSpell」

RegisterForModEvent("eventName", "callbackName")
eventName: SendModEventによって送信されたイベントの名前。
callbackName: イベントをキャッチするための名前。

SendModEvent(イベント?コールバックの呼び出し?他のMOD?)

https://www.creationkit.com/index.php?title=SendMo...
「イベントの発生」をどう行うかというと、SendModEventという関数を使ってイベント実行を行います。
SendModEventは以下のように、イベント名とコールバック関数(登録した関数)に投げる引数を指定します。
SendModEvent("TEST_setName", strArg, numArg)

・イベント名は「RegisterForModEvent」の第1引数?

アニメーション制御スレッド(sslThreadController)関連

アニメーション制御スレッド(sslThreadController)の取得

・SSLは15本スレッドを持っている

・「sslThreadController」はスレッドIDを指定して取得する。
sslThreadController controller = SexLab.GetController(tid)
 →tidはStartSex()の返り値やmEventで勝手に入るtid等を使う

・SSLが走っているActorからも「sslThreadController」を取得できる。
sslThreadController controller = SexLab.GetActorController(Actor)

sslThreadControllerを使った取得・制御

「Hotkey functions」で検索する?

function AdvanceStage(bool backwards = false)
function ChangeAnimation(bool backwards = false)
function ChangePositions(bool backwards = false)
function CenterOnObject(ObjectReference CenterOn, bool resync = true)
function MoveScene()
ステージ数を取得(StageCount)
  • controller.Animation.StageCount
現在のステージを取得(Stage )
  • controller.Stage
任意のステージに変更(GoToStage)
  • controller.GoToStage(stagecnt - 2)
アニメーションを変更する(ChangeAnimation)
・ホットキーの「O」キー
  • controller.ChangeAnimation()
アニメーションを終了する(EndAnimation)
  • controller.EndAnimation()
スレッド内のActorを取得(アクターのRefID
・「GetLeveledActorBase」と組み合わせでアクターベースを取得する事でアクターに関する様々な情報を取得出来る
 参考:ActorBase :https://www.creationkit.com/index.php?title=ActorB...
controller.Positions[1]
	;スレッド ID を介して、このイベントをトリガーしたスレッドを取得します
	;sslThreadController ThreadController = SexLab.GetController(ThreadID)
	sslThreadController ThreadController = controller

	;このアニメーションスレッドに参加したアクターのリストを取得します。
	Actor[] Positions = ThreadController.Positions
	int i = Positions.Length
	while i > 0
		i -= 1
		Debug.Trace("@@@:ThreadID_1:" + Positions[i] )
		Debug.Trace("@@@:ThreadID_2:" + Positions[i].GetLeveledActorBase().GetName() )
	endWhile

フック関数とスレッドへの登録

◎SEXLAB のフックについて
・SEXLAB のフックはSexLab アニメーション中に何かが発生したときに ModEvent を取得するために使用されます。

フックの使用方法

・フックは、SexLab.NewThread() を使用して取得できる TheadModel で完全に定義できます。
・これらは、StartSex() 関数を使用してすばやく設定することもできます。
・基本的な考え方は、スレッドのフックを定義し、SexLab によって
 生成されたイベントに登録し、必要なことを何でも行うことです

フックの使用例)
・開始中の SexLab アニメーションが終了するときに何かをしたいと想像してください。
 これを行うには、フックを定義し、それを Thread に設定し、AnimationEnd イベントに登録して、必要なコードを実行します。
sslThreadModel Thread = SexLab.NewThread() <-- SexLab スレッドを取得 #
Thread.AddActor(firstActor) <-- 最初のアクターをスレッドに追加します #
Thread.AddActor(secondActor) <-- 2 番目のアクターをスレッドに追加します #
Thread.SetHook("Example") <-- フック名を定義します #
RegisterForModEvent("HookAnimationEnd_Example", "myAnimEndEventHandler") <-- 必要なイベントに登録します 本当に重要です。 #
Thread.StartThread() <-- SexLab アニメーションを開始して忘れてください。 #

Event myAnimEndEventHandler(int tid, bool HasPlayer) <-- 登録したこの関数は自動的にトリガーされます
sslThreadController Thread = SexLab.GetController(tid) <-- tid パラメータを使用してスレッド インスタンスを取得します。
Actor[] Positions = Thread.Positions ;[firstActor, SecondActor] シーンからのさまざまな情報を操作またはアクセスします。

スレッドのイベント(コールバック)を受信する

・イベントを受信するために作成する関数は次の形式にする必要があります
Event myEventHandler(int tid, bool hasPlayer)
・イベント ハンドラー関数に使用する名前は、RegisterForModEvent に登録しているものと同じである必要があります
・2 つのパラメータは SexLab スレッド コントローラの ID であり、
 プレイヤーがいずれかのポジションにあることを示すブール値です。

SexLab によって送信されるイベント(ModEvent)

SexLabDisabledSexLab が無効な場合に送信されます
SexLabEnabledSexLab が有効な場合に送信されます
SexLabOrgasm俳優がオーガズムに達したときに送信されます
イベントのパラメータは次のとおりです
俳優、フルエンジョイメント、および現在のシーンのオーガズムの総量
SexLabSlotAnimations_<category>アニメーションの特定のカテゴリが登録されたときに送信されます
カテゴリー: 正常位, バック, カウガール, 横向き, 立ち, アナル, 経口, 乳コキ, 前戯, レズビアン, 足コキ, その他, ソロ, 乱交
SexLabSlotAnimationsアニメーションの再読み込みと再登録が必要なときに送信されます
SexLabSlotCreatureAnimations_<RaceKey>特定の RaceKey が定義された後に、RaceKey ごとに 1 つのイベントが送信されます。
SexLabSlotCreatureAnimationsCrature アニメーションの再ロードと再登録が必要なときに送信されます
SexLabRegisterCreaturekeySexLab のすべての RaceKey が初期化されるときに送信されます
(RaceKeys に追加の Race を追加するのに役立ちます)
SexLabConfigCloseSexLab の MCM が閉じられたときに送信されます
SexLabResetこの ModEvent は、Sexlab がセットアップまたはシステム クリーンアップを実行するときに送信されます。
SexLabSlotExpressionsSexLab Expression が初期化されるときに送信され、追加の式を登録するために使用できます
SexLabGameLoadedプレーヤーがゲームをロードするたびに送信されます
SexLabDebugModeSexLab がデバッグ モードに設定されている場合に送信されます
SexLabLoadStraponsStraponsAre が初期化またはリロードされるときに送信される
カスタム ストラップオンを追加するために使用できます
SexLabStoppedActiveすべてのアニメーションが強制的に停止されたときに送信されます
SexLabSlotVoicesこの ModEvent は SexLab Voice が初期化されるときに送信される
追加の音声を登録するために使用できます。

フックイベント(スレッドにコールバック関数を登録する?)

・次の形式でイベントが特定のフックに送信されます。
Hook<イベント タイプ>_<フック名>
例)
HookAnimationEnd_TestSpell
→イベント「AnimationEnd(アニメーション終了時)」、カスタムフック「TestSpell」

・次のイベント名を持つグローバル フックも送信されます。
Hook<イベント タイプ> (例: "HookAnimationStart")

例)
	;スレッドにカスタムフック名「TestSpell」を設定
	Thread.SetHook("TestSpell")
	;イベント「AnimationEnd(アニメーション終了時)」を登録する
	;書式:Hookイベント名_カスタムフック名
	RegisterForModEvent("HookAnimationEnd_TestSpell", "AnimationEnd")
フックイベント一覧
AnimationStartアニメーションの開始時に送信されます
AnimationEndingアニメーションが終了しようとしているが、スレッドがまだいくつかの最終タスクを実行しているときに送信されます。
AnimationEndアニメーションが完全に終了したときに送信されます
LeadInStartアニメーションが開始され、LeadIn があるときに送信されます。
LeadInEndLeadIn アニメーションの終了時に送信されます
StageStartアニメーション ステージが開始されるたびに送信されます
StageEnd完了したアニメーション ステージごとに送信されます
OrgasmStartアクターが最終段階に到達したときに送信されます
OrgasmEnd最終ステージが完了したときに送信されます
AnimationChange再生中のアニメーションがホットキーによって変更された場合に送信されます。
PositionChangeアニメーション (関係するアクター) の位置が変更された場合に送信されます
ActorsRelocatedアクターが新しい配置になった場合に送信されます
ActorChangeStart関数 ChangeActors が呼び出されたときに送信されます
ActorChangeEndChangeActors 関数によるアクターの置換が完了したときに送信されます

フック・TrackActor(後で調べる)

・TrackActorのほうは指定できるフックが「Added / Start / Orgasm / End」の4種類。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

管理人/副管理人のみ編集できます