in-game_bodychanger/IchirouRaceMCMMenu.psc
2023-03-22 20:15:40 -07:00

488 lines
17 KiB
Plaintext

scriptName IchirouRaceMCMMenu extends SKI_ConfigBase
;-- Properties --------------------------------------
headpart property HeadOriginal auto
Int property BodyChangeShapeFlag auto
formlist property IchirouBodyWardrobe auto
textureset property FaceTextureOriginal auto
armor property SkinOriginal auto
spell property IchirouBodyChangeSpell auto
formlist property IchirouBanRaceList auto
Bool property IsSystemEnable hidden
Bool function get()
if self.PlayerSexAllow() && self.PlayerRaceAllow()
return true
else
return false
endIf
endFunction
endproperty
Int[] property ArmorShapeFlag auto
Bool property IsWardrobeEnable hidden
Bool function get()
if self.IsSystemEnable && !self.IsOriginChange() && IsWardrobeCheck as Bool
return true
else
return false
endIf
endFunction
endproperty
;-- Variables ---------------------------------------
Int OptionBodyShapeRegenerate
Int[] ShapeEnableFlag
Int OptionResetOrigin
Int[] OptionShape
String[] BodyShapeName
Int[] OptionWardrobeSlider
Bool IsShapeChange
Int OptionAddCurrentArmor
Int[] OptionWardrobeSlotClear
armor CurrentArmor
Int ResetOriginEnableFlag
Int WardrobeSize
Bool IsWardrobeCheck = false
Int RegenerateEnableFlag
Int ToggleWardrobeEnable
Race RaceOriginal
Int OptionClearUpWardrobe
Int OptionBodyShapeCurrent
;-- Functions ---------------------------------------
function GetPlayerOriginalSet()
SkinOriginal = game.GetPlayer().GetActorBase().GetSkin()
HeadOriginal = game.GetPlayer().GetActorBase().GetNthHeadPart(0)
FaceTextureOriginal = game.GetPlayer().GetActorBase().GetFaceTextureSet()
RaceOriginal = game.GetPlayer().GetActorBase().GetRace()
debug.Notification("OriginSetting")
endFunction
function ClearUpWardrobe()
IchirouBodyWardrobe.Revert()
ArmorShapeFlag[0] = 0
ArmorShapeFlag[1] = 0
ArmorShapeFlag[2] = 0
ArmorShapeFlag[3] = 0
ArmorShapeFlag[4] = 0
ArmorShapeFlag[5] = 0
ArmorShapeFlag[6] = 0
ArmorShapeFlag[7] = 0
ArmorShapeFlag[8] = 0
ArmorShapeFlag[9] = 0
self.ForcePageReset()
endFunction
function GenerateWardrobeUI()
WardrobeSize = IchirouBodyWardrobe.GetSize()
Int k = 0
OptionWardrobeSlotClear = new Int[10]
OptionWardrobeSlider = new Int[10]
while k < WardrobeSize
self.AddHeaderOption(IchirouBodyWardrobe.GetAt(k).GetName(), 0)
OptionWardrobeSlider[k] = self.AddSliderOption("BodyShape", ArmorShapeFlag[k] as Float, "{0}", 0)
OptionWardrobeSlotClear[k] = self.AddTextOption("", "Clear", self.OPTION_FLAG_NONE)
self.AddEmptyOption()
k += 1
endWhile
endFunction
Bool function IsOriginChange()
if !IsShapeChange && BodyChangeShapeFlag == 0
if SkinOriginal != game.GetPlayer().GetActorBase().GetSkin() || HeadOriginal != game.GetPlayer().GetActorBase().GetNthHeadPart(0) || FaceTextureOriginal != game.GetPlayer().GetActorBase().GetFaceTextureSet() || RaceOriginal != game.GetPlayer().GetActorBase().GetRace()
return true
else
return false
endIf
else
return false
endIf
endFunction
function OnGameReload()
parent.OnGameReload()
Pages = new String[2]
Pages[0] = "Ichirou Body"
Pages[1] = "Ichirou Wardrobe"
if self.IsOriginChange()
self.GetPlayerOriginalSet()
endIf
if self.PlayerRaceAllow() && self.PlayerSexAllow()
IchirouBodyChangeSpell.Cast(game.GetPlayer() as objectreference, none)
endIf
endFunction
function AddArmorToList()
if !IchirouBodyWardrobe.HasForm(CurrentArmor as form)
IchirouBodyWardrobe.AddForm(CurrentArmor as form)
endIf
self.ForcePageReset()
endFunction
function OnOptionHighlight(Int a_option)
if a_option == OptionShape[0]
self.SetInfoText("OriginalShapeInfo")
elseIf a_option == OptionShape[1]
self.SetInfoText("3BA Body")
elseIf a_option == OptionShape[2]
self.SetInfoText("BHUNP Body")
elseIf a_option == OptionBodyShapeRegenerate
self.SetInfoText("RegenerateAfterSRM")
elseIf a_option == OptionResetOrigin
self.SetInfoText("ResetOriginInfo")
elseIf a_option == OptionAddCurrentArmor
self.SetInfoText("AddToWardrobeInfo")
elseIf a_option == OptionWardrobeSlider[0]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[1]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[2]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[3]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[4]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[5]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[6]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[7]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[8]
self.SetInfoText("SetArmorBodyShapeInfo")
elseIf a_option == OptionWardrobeSlider[9]
self.SetInfoText("SetArmorBodyShapeInfo")
endIf
endFunction
function OnOptionSliderOpen(Int a_option)
if a_option == OptionWardrobeSlider[0]
self.SetSliderDialogStartValue(ArmorShapeFlag[0] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[1]
self.SetSliderDialogStartValue(ArmorShapeFlag[1] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[2]
self.SetSliderDialogStartValue(ArmorShapeFlag[2] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[3]
self.SetSliderDialogStartValue(ArmorShapeFlag[3] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[4]
self.SetSliderDialogStartValue(ArmorShapeFlag[4] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[5]
self.SetSliderDialogStartValue(ArmorShapeFlag[5] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[6]
self.SetSliderDialogStartValue(ArmorShapeFlag[6] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[7]
self.SetSliderDialogStartValue(ArmorShapeFlag[7] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[8]
self.SetSliderDialogStartValue(ArmorShapeFlag[8] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
elseIf a_option == OptionWardrobeSlider[9]
self.SetSliderDialogStartValue(ArmorShapeFlag[9] as Float)
self.SetSliderDialogDefaultValue(0 as Float)
self.SetSliderDialogRange(0 as Float, 9 as Float)
self.SetSliderDialogInterval(1 as Float)
endIf
endFunction
; Skipped compiler generated GetState
function EnableFlagUpdate()
ShapeEnableFlag = new Int[3]
Int k = 0
if self.IsSystemEnable
if !self.IsOriginChange()
while k < 10
if k != BodyChangeShapeFlag
ShapeEnableFlag[k] = self.OPTION_FLAG_NONE
else
ShapeEnableFlag[k] = self.OPTION_FLAG_DISABLED
endIf
k += 1
endWhile
ResetOriginEnableFlag = self.OPTION_FLAG_DISABLED
RegenerateEnableFlag = self.OPTION_FLAG_NONE
else
while k < 10
ShapeEnableFlag[k] = self.OPTION_FLAG_DISABLED
k += 1
endWhile
ResetOriginEnableFlag = self.OPTION_FLAG_NONE
RegenerateEnableFlag = self.OPTION_FLAG_DISABLED
endIf
else
ResetOriginEnableFlag = self.OPTION_FLAG_DISABLED
RegenerateEnableFlag = self.OPTION_FLAG_DISABLED
while k < 10
ShapeEnableFlag[k] = self.OPTION_FLAG_DISABLED
k += 1
endWhile
endIf
endFunction
function OnPageReset(String a_page)
self.SetCursorFillMode(self.TOP_TO_BOTTOM)
if a_page == "Ichirou Body"
IsShapeChange = false
self.SetBodyShapeName()
self.EnableFlagUpdate()
if self.IsSystemEnable
self.AddHeaderOption("Ichirou Race System Enabled", 0)
else
self.AddHeaderOption("Ichirou Race System Disabled", 0)
endIf
self.AddEmptyOption()
if self.PlayerSexAllow()
self.AddHeaderOption("Ichirou Race FemaleCharacter", 0)
else
self.AddHeaderOption("Ichirou Race MaleCharacter", 0)
endIf
self.AddEmptyOption()
if self.PlayerRaceAllow()
self.AddHeaderOption("Ichirou Race RaceAllow", 0)
else
self.AddHeaderOption("Ichirou Race RaceBan", 0)
endIf
self.AddTextOption("RaceCurrent", game.GetPlayer().GetActorBase().GetRace().GetName(), self.OPTION_FLAG_DISABLED)
OptionResetOrigin = self.AddTextOption("OptionResetOrigin", "Reset", ResetOriginEnableFlag)
self.AddEmptyOption()
self.AddHeaderOption("BodyShape", 0)
OptionBodyShapeCurrent = self.AddTextOption("BodyShapeCurrent", BodyShapeName[BodyChangeShapeFlag], self.OPTION_FLAG_DISABLED)
OptionBodyShapeRegenerate = self.AddTextOption("BodyShapeRegenerate", "ClickToEnable", RegenerateEnableFlag)
self.AddEmptyOption()
self.SetCursorPosition(1)
self.AddHeaderOption("BodyShapeList", 0)
OptionShape = new Int[3]
OptionShape[0] = self.AddTextOption(BodyShapeName[0], "ClickToEnable", ShapeEnableFlag[0])
OptionShape[1] = self.AddTextOption(BodyShapeName[1], "ClickToEnable", ShapeEnableFlag[1])
OptionShape[2] = self.AddTextOption(BodyShapeName[2], "ClickToEnable", ShapeEnableFlag[2])
endIf
if a_page == "Ichirou Wardrobe"
CurrentArmor = game.GetPlayer().GetWornForm(4) as armor
self.AddHeaderOption("BodyChange_Wardrobe", 0)
ToggleWardrobeEnable = self.AddToggleOption("EnabelWardrobe", IsWardrobeCheck, self.OPTION_FLAG_NONE)
OptionClearUpWardrobe = self.AddTextOption("", "ClearUp", self.OPTION_FLAG_NONE)
self.AddEmptyOption()
self.AddHeaderOption("CurrentArmor", 0)
if !IchirouBodyWardrobe.HasForm(CurrentArmor as form)
OptionAddCurrentArmor = self.AddTextOption(CurrentArmor.GetName(), "AddToWardrobe", self.OPTION_FLAG_NONE)
else
OptionAddCurrentArmor = self.AddTextOption(CurrentArmor.GetName(), "AlreadyInWardrobe", self.OPTION_FLAG_DISABLED)
endIf
self.AddEmptyOption()
self.AddHeaderOption("DebugInfo", 0)
self.AddTextOption("BodyFlag", BodyChangeShapeFlag as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag0", ArmorShapeFlag[0] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag1", ArmorShapeFlag[1] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag2", ArmorShapeFlag[2] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag3", ArmorShapeFlag[3] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag4", ArmorShapeFlag[4] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag5", ArmorShapeFlag[5] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag6", ArmorShapeFlag[6] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag7", ArmorShapeFlag[7] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag8", ArmorShapeFlag[8] as String, self.OPTION_FLAG_DISABLED)
self.AddTextOption("ArmorFlag9", ArmorShapeFlag[9] as String, self.OPTION_FLAG_DISABLED)
self.SetCursorPosition(1)
self.GenerateWardrobeUI()
endIf
endFunction
function ClearArmorFromList(Int Index)
armor ArmorToClear = IchirouBodyWardrobe.GetAt(Index) as armor
IchirouBodyWardrobe.RemoveAddedForm(ArmorToClear as form)
Int k = Index
while k < WardrobeSize - 1
ArmorShapeFlag[k] = ArmorShapeFlag[k + 1]
k += 1
endWhile
ArmorShapeFlag[WardrobeSize - 1] = 0
self.ForcePageReset()
endFunction
function OnOptionSliderAccept(Int a_option, Float a_value)
if a_option == OptionWardrobeSlider[0]
ArmorShapeFlag[0] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[1]
ArmorShapeFlag[1] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[2]
ArmorShapeFlag[2] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[3]
ArmorShapeFlag[3] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[4]
ArmorShapeFlag[4] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[5]
ArmorShapeFlag[5] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[6]
ArmorShapeFlag[6] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[7]
ArmorShapeFlag[7] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[8]
ArmorShapeFlag[8] = a_value as Int
self.ForcePageReset()
elseIf a_option == OptionWardrobeSlider[9]
ArmorShapeFlag[9] = a_value as Int
self.ForcePageReset()
endIf
endFunction
function SetBodyShapeName()
BodyShapeName = new String[3]
BodyShapeName[0] = "Default"
BodyShapeName[1] = "3BAv2"
BodyShapeName[2] = "BHUNP"
endFunction
function OnOptionSelect(Int a_option)
if a_option == OptionShape[0]
BodyChangeShapeFlag = 0
self.UpdateShapeSelection()
IchirouBodyChangeSpell.Cast(game.GetPlayer() as objectreference, none)
elseIf a_option == OptionShape[1]
BodyChangeShapeFlag = 1
self.UpdateShapeSelection()
IchirouBodyChangeSpell.Cast(game.GetPlayer() as objectreference, none)
elseIf a_option == OptionShape[2]
BodyChangeShapeFlag = 2
self.UpdateShapeSelection()
IchirouBodyChangeSpell.Cast(game.GetPlayer() as objectreference, none)
elseIf a_option == OptionBodyShapeRegenerate
self.SetOptionFlags(OptionBodyShapeRegenerate, self.OPTION_FLAG_DISABLED, false)
IchirouBodyChangeSpell.Cast(game.GetPlayer() as objectreference, none)
elseIf a_option == OptionResetOrigin
self.SetOptionFlags(OptionResetOrigin, self.OPTION_FLAG_DISABLED, false)
self.GetPlayerOriginalSet()
elseIf a_option == OptionAddCurrentArmor
self.SetOptionFlags(OptionAddCurrentArmor, self.OPTION_FLAG_DISABLED, false)
self.AddArmorToList()
elseIf a_option == ToggleWardrobeEnable
IsWardrobeCheck = !IsWardrobeCheck
self.SetToggleOptionValue(ToggleWardrobeEnable, IsWardrobeCheck, false)
elseIf a_option == OptionClearUpWardrobe
self.ClearUpWardrobe()
elseIf a_option == OptionWardrobeSlotClear[0]
self.ClearArmorFromList(0)
elseIf a_option == OptionWardrobeSlotClear[1]
self.ClearArmorFromList(1)
elseIf a_option == OptionWardrobeSlotClear[2]
self.ClearArmorFromList(2)
elseIf a_option == OptionWardrobeSlotClear[3]
self.ClearArmorFromList(3)
elseIf a_option == OptionWardrobeSlotClear[4]
self.ClearArmorFromList(4)
elseIf a_option == OptionWardrobeSlotClear[5]
self.ClearArmorFromList(5)
elseIf a_option == OptionWardrobeSlotClear[6]
self.ClearArmorFromList(6)
elseIf a_option == OptionWardrobeSlotClear[7]
self.ClearArmorFromList(7)
elseIf a_option == OptionWardrobeSlotClear[8]
self.ClearArmorFromList(8)
elseIf a_option == OptionWardrobeSlotClear[9]
self.ClearArmorFromList(9)
endIf
endFunction
function UpdateShapeSelection()
IsShapeChange = true
self.EnableFlagUpdate()
Int k = 0
while k < 10
self.SetOptionFlags(OptionShape[k], ShapeEnableFlag[k], false)
k += 1
endWhile
self.SetTextOptionValue(OptionBodyShapeCurrent, BodyShapeName[BodyChangeShapeFlag], false)
endFunction
; Skipped compiler generated GotoState
Bool function PlayerRaceAllow()
Race PlayerRace = game.GetPlayer().GetRace()
String RaceName = PlayerRace.GetName()
if RaceName == "Argonian" || RaceName == "Khajiit" || RaceName == "Werewolf" || RaceName == "Vampire Lord"
return false
elseIf IchirouBanRaceList.Find(PlayerRace as form) == -1
return true
else
return false
endIf
endFunction
function OnConfigInit()
ModName = "Ichirou Race Menu"
Pages = new String[2]
Pages[0] = "Ichirou Body"
Pages[1] = "Ichirou Wardrobe"
BodyChangeShapeFlag = 0
ArmorShapeFlag = new Int[10]
ArmorShapeFlag[0] = 0
ArmorShapeFlag[1] = 0
ArmorShapeFlag[2] = 0
ArmorShapeFlag[3] = 0
ArmorShapeFlag[4] = 0
ArmorShapeFlag[5] = 0
ArmorShapeFlag[6] = 0
ArmorShapeFlag[7] = 0
ArmorShapeFlag[8] = 0
ArmorShapeFlag[9] = 0
endFunction
Bool function PlayerSexAllow()
if game.GetPlayer().GetActorBase().GetSex()
return true
else
return false
endIf
endFunction