最終更新: kenken2020 2023年08月23日(水) 14:58:29履歴
目次
■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関数(ファイルやディレクトリの状態を取得する)
◎フック関数(プログラムにおいて、本来の処理を横取りして独自の処理を割りこませること)
◎関数式(関数を変数に代入して値として扱う式のこと)
アクター関連の何か?
■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
・IsRunning と同様に、現在再生中のアニメーションの数 (最大 15 個中) を示す読み取り専用プロパティ
int property ActiveAnimations hidden int function get() return ThreadSlots.ActiveThreads() endFunction endProperty
参考:SexLabの音声の弄り方
https://skyrim-sweetslab.blogspot.com/2018/05/tips...
「GetSound」関数?
SexLabのデフォルトの設定ではセックス中の音声は各アクターの「OnUpdate」のタイミングで「sslBaseVoice.psc」スクリプトの「PlayMoan」関数が呼ばれることで発声するようになっています。
条件としては「isSilent」、つまり再生されているアニメーションが「音声無し」のフラグがついているかどうかしか見ていません。
なのでフェラチオ時かどうかの判定は、「PlayMoan」関数を呼び出している大元の「sslActorAlias.psc」でやります。
「sslActorAlias.psc」というのはその名前の通り、SexLabのセックス中のアクター全員にかかっているセックス中の人物の挙動を司るスクリプトです。
「SetVoice」関数?
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
◎概要
これは、あまり多くのコードを必要とせずに Sexlab アニメーションを開始するための簡単かつ迅速な関数です。
StartSex と QuickStart の違いは、StartSexにはアニメーションのリスト (少なくとも 1 つ) が必要であるのに対し、
QuickStart はアニメーション タグを使用してアニメーションを取得することです。
◎サンプルA
◎サンプルB
これは、あまり多くのコードを必要とせずに Sexlab アニメーションを開始するための簡単かつ迅速な関数です。
StartSex と QuickStart の違いは、StartSexにはアニメーションのリスト (少なくとも 1 つ) が必要であるのに対し、
QuickStart はアニメーション タグを使用してアニメーションを取得することです。
param | Positions | アニメーションで使用されるアクターの配列であり、最大 5 人のアクターがサポートされます。 一番最初のものは「パッシブポジション」とみなされます。 アクターが指定されていない場合、この関数は失敗します。 |
param | Anims | sslBaseAnimation の配列であり、どのアニメーションを再生するかを指定するために使用されます。 アニメーションの場合 |
◎サンプルA
◎サンプルB
◎FindAvailableActor
・指定されたエリア内で SexLab の有効な俳優を検索します
◎パラメータ
◎返り値
・Actor : 有効なアクターが見つかった場合。 有効なアクターが見つからない場合はなし。
◎例
◎FindAvailableActorByFaction
・指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab の有効な俳優を検索します
◎FindAvailableActorWornForm
・ 指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab の有効な俳優を検索します
◎FindAvailableCreature
・指定されたエリア内で SexLab 有効なクリチャーを検索します
◎FindAvailableCreatureByFaction
・指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab 有効なクリーチャーを検索します。
◎FindAvailableCreatureWornForm
・指定されたエリア内で、指定された派閥の有無にかかわらず、SexLab 有効なクリーチャーを検索します。
◎FindAvailablePartners
・指定されたエリア内で複数の SexLab 有効なアクターを検索します
・指定されたエリア内で SexLab の有効な俳優を検索します
◎パラメータ
CenterRef | ObjectReference | 検索の中心点として使用するオブジェクト。 |
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 有効なアクターを検索します
◎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")
◎アニメーションのリストの長さ
・第1引数:参加人数
・第2引数:アニメーションのタグ
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 - 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: イベントをキャッチするための名前。
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: イベントをキャッチするための名前。
https://www.creationkit.com/index.php?title=SendMo...
「イベントの発生」をどう行うかというと、SendModEventという関数を使ってイベント実行を行います。
SendModEventは以下のように、イベント名とコールバック関数(登録した関数)に投げる引数を指定します。
・イベント名は「RegisterForModEvent」の第1引数?
「イベントの発生」をどう行うかというと、SendModEventという関数を使ってイベント実行を行います。
SendModEventは以下のように、イベント名とコールバック関数(登録した関数)に投げる引数を指定します。
SendModEvent("TEST_setName", strArg, numArg)
・イベント名は「RegisterForModEvent」の第1引数?
・SSLは15本スレッドを持っている
・「sslThreadController」はスレッドIDを指定して取得する。
・SSLが走っているActorからも「sslThreadController」を取得できる。
・「sslThreadController」はスレッドIDを指定して取得する。
sslThreadController controller = SexLab.GetController(tid)→tidはStartSex()の返り値やmEventで勝手に入るtid等を使う
・SSLが走っているActorからも「sslThreadController」を取得できる。
sslThreadController controller = SexLab.GetActorController(Actor)
「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()
function AdvanceStage(bool backwards = false)
function ChangeAnimation(bool backwards = false)
function ChangePositions(bool backwards = false)
function CenterOnObject(ObjectReference CenterOn, bool resync = true)
function MoveScene()
・「GetLeveledActorBase」と組み合わせでアクターベースを取得する事でアクターに関する様々な情報を取得出来る
参考:ActorBase :https://www.creationkit.com/index.php?title=ActorB...
参考: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.NewThread() を使用して取得できる TheadModel で完全に定義できます。
・これらは、StartSex() 関数を使用してすばやく設定することもできます。
・基本的な考え方は、スレッドのフックを定義し、SexLab によって
生成されたイベントに登録し、必要なことを何でも行うことです
フックの使用例)
・開始中の SexLab アニメーションが終了するときに何かをしたいと想像してください。
これを行うには、フックを定義し、それを Thread に設定し、AnimationEnd イベントに登録して、必要なコードを実行します。
Event myAnimEndEventHandler(int tid, bool HasPlayer) <-- 登録したこの関数は自動的にトリガーされます
sslThreadController Thread = SexLab.GetController(tid) <-- tid パラメータを使用してスレッド インスタンスを取得します。
Actor[] Positions = Thread.Positions ;[firstActor, SecondActor] シーンからのさまざまな情報を操作またはアクセスします。
・これらは、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] シーンからのさまざまな情報を操作またはアクセスします。
・イベントを受信するために作成する関数は次の形式にする必要があります
・2 つのパラメータは SexLab スレッド コントローラの ID であり、
プレイヤーがいずれかのポジションにあることを示すブール値です。
Event myEventHandler(int tid, bool hasPlayer)・イベント ハンドラー関数に使用する名前は、RegisterForModEvent に登録しているものと同じである必要があります
・2 つのパラメータは SexLab スレッド コントローラの ID であり、
プレイヤーがいずれかのポジションにあることを示すブール値です。
SexLabDisabled | SexLab が無効な場合に送信されます |
SexLabEnabled | SexLab が有効な場合に送信されます |
SexLabOrgasm | 俳優がオーガズムに達したときに送信されます イベントのパラメータは次のとおりです 俳優、フルエンジョイメント、および現在のシーンのオーガズムの総量 |
SexLabSlotAnimations_<category> | アニメーションの特定のカテゴリが登録されたときに送信されます カテゴリー: 正常位, バック, カウガール, 横向き, 立ち, アナル, 経口, 乳コキ, 前戯, レズビアン, 足コキ, その他, ソロ, 乱交 |
SexLabSlotAnimations | アニメーションの再読み込みと再登録が必要なときに送信されます |
SexLabSlotCreatureAnimations_<RaceKey> | 特定の RaceKey が定義された後に、RaceKey ごとに 1 つのイベントが送信されます。 |
SexLabSlotCreatureAnimations | Crature アニメーションの再ロードと再登録が必要なときに送信されます |
SexLabRegisterCreaturekey | SexLab のすべての RaceKey が初期化されるときに送信されます (RaceKeys に追加の Race を追加するのに役立ちます) |
SexLabConfigClose | SexLab の MCM が閉じられたときに送信されます |
SexLabReset | この ModEvent は、Sexlab がセットアップまたはシステム クリーンアップを実行するときに送信されます。 |
SexLabSlotExpressions | SexLab Expression が初期化されるときに送信され、追加の式を登録するために使用できます |
SexLabGameLoaded | プレーヤーがゲームをロードするたびに送信されます |
SexLabDebugMode | SexLab がデバッグ モードに設定されている場合に送信されます |
SexLabLoadStrapons | StraponsAre が初期化またはリロードされるときに送信される カスタム ストラップオンを追加するために使用できます |
SexLabStoppedActive | すべてのアニメーションが強制的に停止されたときに送信されます |
SexLabSlotVoices | この ModEvent は SexLab Voice が初期化されるときに送信される 追加の音声を登録するために使用できます。 |
・次の形式でイベントが特定のフックに送信されます。
・次のイベント名を持つグローバル フックも送信されます。
Hook<イベント タイプ> (例: "HookAnimationStart")
例)
Hook<イベント タイプ>_<フック名>例)
HookAnimationEnd_TestSpell→イベント「AnimationEnd(アニメーション終了時)」、カスタムフック「TestSpell」
・次のイベント名を持つグローバル フックも送信されます。
Hook<イベント タイプ> (例: "HookAnimationStart")
例)
;スレッドにカスタムフック名「TestSpell」を設定 Thread.SetHook("TestSpell") ;イベント「AnimationEnd(アニメーション終了時)」を登録する ;書式:Hookイベント名_カスタムフック名 RegisterForModEvent("HookAnimationEnd_TestSpell", "AnimationEnd")
AnimationStart | アニメーションの開始時に送信されます |
AnimationEnding | アニメーションが終了しようとしているが、スレッドがまだいくつかの最終タスクを実行しているときに送信されます。 |
AnimationEnd | アニメーションが完全に終了したときに送信されます |
LeadInStart | アニメーションが開始され、LeadIn があるときに送信されます。 |
LeadInEnd | LeadIn アニメーションの終了時に送信されます |
StageStart | アニメーション ステージが開始されるたびに送信されます |
StageEnd | 完了したアニメーション ステージごとに送信されます |
OrgasmStart | アクターが最終段階に到達したときに送信されます |
OrgasmEnd | 最終ステージが完了したときに送信されます |
AnimationChange | 再生中のアニメーションがホットキーによって変更された場合に送信されます。 |
PositionChange | アニメーション (関係するアクター) の位置が変更された場合に送信されます |
ActorsRelocated | アクターが新しい配置になった場合に送信されます |
ActorChangeStart | 関数 ChangeActors が呼び出されたときに送信されます |
ActorChangeEnd | ChangeActors 関数によるアクターの置換が完了したときに送信されます |
コメントをかく