Jump to content


  • Content count

  • Joined

  • Last visited


About KicklerOfButts

  • Rank

Profile Information

  • Gender
  • Interests
    Porn, basically that.
    All of it, except scat.
    It's snowing on Mt.Fuji.

Recent Profile Visitors

624 profile views
  1. KicklerOfButts

    Papyrus Check if Armor is Enchanted?

    Would you mind linking to that wiki? I'm using the Creationkit.com wiki and that info isn't there in the GetEnchantment article. If there's an alternate wiki with more information than the creationkit website, I could really use it.
  2. Does anyone know how it would be possible to (with papyrus coding) check if an armor/clothing/weapon has an enchantment on it? I do not need to know what the enchantment is, merely if there is an enchantment at all. I'm thinking it could be done with the GetEnchantement() command, but the wiki states that it'll check the base object and not the object reference, meaning that player-forged and mod-added enchantments would seemingly slip through the cracks of such a check.
  3. KicklerOfButts

    MCM Menu Toggling [Solved]

    I don't necessarily need to store "a lot" of information, I just need to store is in a very specific way so that I can use it effectively without having to copy/paste hundreds of if/then/else checks. I'm creating a framework for "tagging" (without actual tags though) armors and outfits as more or less skimpy for other mods to make use of. Event OnPageReset(string page) SetCursorFillMode(LEFT_TO_RIGHT) SetCursorPosition(0) ; Can be removed because it starts at 0 anyway int mMetaLoop = 0 int mLoop = 1 string mToggleName if (page == "Activate Mod") elseif (page == "Vanilla Armors 1") while mMetaLoop < 14 AddHeaderOption(link_Container_Armors[mMetaLoop].VanillaArmor[0] as string) AddHeaderOption("") while mLoop < 5 if mLoop == 1 mToggleName = "Topless" elseif mLoop == 2 mToggleName = "Skimpy Top" elseif mLoop == 3 mToggleName = "Bottomless" elseif mLoop == 4 mToggleName = "Skimpy Bottoms" elseif mLoop == 5 mToggleName = "Shared Name" endif mcm_ArmorList_1_OID_B[mMetaLoop] = AddToggleOption(mToggleName, link_Container_Armors[mMetaLoop].VanillaArmor[mLoop] as int) mLoop += 1 endwhile AddEmptyOption() mMetaLoop += 1 endwhile elseif (page == "Vanilla Armors 2") elseif (page == "Vanilla Armors 3") endIf endEvent This is how my MCM menu's pagereset function looks now compared to before.
  4. KicklerOfButts

    MCM Menu Toggling [Solved]

    If the script is duplicated with each new container/3DArray and I need upwards of 200+ 3DArrays, wouldn't that take a massive toll on papyrus with 200+ copies of a script existing? Even though the script only contains data and no functions or events, won't it still cause issues for the engine just by virtue of quantity?
  5. KicklerOfButts

    MCM Menu Toggling [Solved]

    I know there's not. Currently I just have a bunch of arrays that I manually point to the specific indexes of other arrays, it's a solution that works but it's as basic as it could possibly get and requires a lot of manual if/then/else checking to use. But there's a way of simulating one that gives you an array that automatically references other arrays without having to write a long line of if/then/else checks. If I had one like that then I could use a while loop rather than manually typing out the 40+ scenarios for handling my outfit arrays, but I can't make enough sense of the CK wiki's instructions to make one.
  6. KicklerOfButts

    MCM Menu Toggling [Solved]

    That's pretty much what I've ended up doing (Only I write it as if !CMO_Array_OutfitEntry_1[3] then instead. Cleaner code like that.) Thanks for the help, I pretty much got it working. Now my framework is actually getting close to having basic functionality. Now if only I could understand how to do a proper multi-dimensional array so I didn't have to copy/paste so much...
  7. KicklerOfButts

    MCM Menu Toggling [Solved]

    Unfortunately it's absolutely not an option to have CMO_Array_OutfitEntry[] be any other type of array, it very much has to be strings for the rest of my mod to function. That's very valuable knowledge though, that a string need to be empty like so: "" in order for papyrus to be able to return it as a bool set to false. I would not have figured that out on my own, I just assumed it could translate "true" and "false" into bools just as it can translate true/false from them into strings. I'll fiddle around with it and see if I can get it to work now that I know what would make papyrus read it properly. I always cast variables that turn into other variable types manually for the sake of code clarity and because it's good coding practice to always make certain, minimizing any potential risk of compiler errors. (I've gotten compiler errors before in the creation kit because it wants the conversion to be explicit, may as well be on the safe side.) Thanks for the help so far, I'll let you know if I get it to work or if I need to beg for more feedback~
  8. KicklerOfButts

    MCM Menu Toggling [Solved]

    Can Papyrus not translate a string containing "0" into a bool if you tell it to read it as a bool? Because logically, mConverter = CMO_Array_OutfitEntry_1[3] as bool should translate into mConverter == 0 because CMO_Array_OutfitEntry_1[3] == "0" Will the string always return as true if I check it as a bool even when the string is "0" or "1" and the code says to read it as a bool?
  9. KicklerOfButts

    MCM Menu Toggling [Solved]

    The following lines: mConverter = CMO_Array_OutfitEntry_1[3] as bool mConverter = !mConverter CMO_Array_OutfitEntry_1[3] = mConverter as int SetToggleOptionValue(mcm_ArmorList_1_OID_B[0], CMO_Array_OutfitEntry_1[3]) Would ideally just look like this: (the standard way of doing it when you're not using arrays, but I'm using arrays.) CMO_Array_OutfitEntry_1[3] = !CMO_Array_OutfitEntry_1[3] SetToggleOptionValue(mcm_ArmorList_1_OID_B[0], CMO_Array_OutfitEntry_1[3]) But I was having doubts about whether that actually works properly. I broke out the value into an integer and manually flip it just to make certain it does work. mConvert = !mConverter accomplishes the same thing as your entire if/then/else section at even less cost of performance. (Though it's a completely negligible performance level regardless.) It doesn't need to check what the current value is, it just needs to flip it. My real trouble right now is that SetToggleOptionValue() seemingly isn't working and I can't for the life of me figure out why. Here's the whole segment of the code that deals with establishing, initializing and using the arrays. In case it helps. (I'm doing makeshift multi-dimensional array because I couldn't figure out how to do it according to the wiki) string CMO_Array_SelectedArray string[] CMO_Array_Index_0 string[] CMO_Array_Index_1 string[] CMO_Array_Index_2 int[] CMO_Array_Index_3 int[] CMO_Array_Index_4 int[] CMO_Array_Index_5 int[] CMO_Array_Index_6 string[] CMO_Array_OutfitEntry_1 string[] CMO_Array_OutfitEntry_2 string[] CMO_Array_OutfitEntry_3 string[] CMO_Array_OutfitEntry_4 string[] CMO_Array_OutfitEntry_5 string[] CMO_Array_OutfitEntry_6 string[] CMO_Array_OutfitEntry_7 string[] CMO_Array_OutfitEntry_8 string[] CMO_Array_OutfitEntry_9 string[] CMO_Array_OutfitEntry_10 Event OnConfigInit() Debug.Trace("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") int i = InitializeArrays(1) Debug.Trace("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC") Pages = new string[2] Pages[0] = "Activate Mod" Pages[1] = "Vanilla Armors" EndEvent int Function InitializeArrays(int mInt) mcm_ArmorList_1_OID_B = new int[100] CMO_Array_SelectedArray = new string[16] CMO_Array_Index_0 = new string[100] int mLoop = 0 while mLoop < 100 CMO_Array_Index_0[mLoop] = "placeholder" mLoop += 1 endwhile CMO_Array_Index_1 = new string[100] CMO_Array_Index_2 = new string[100] CMO_Array_Index_3 = new int[100] CMO_Array_Index_4 = new int[100] CMO_Array_Index_5 = new int[100] CMO_Array_Index_6 = new int[100] CMO_Array_OutfitEntry_1 = new string[7] CMO_Array_OutfitEntry_2 = new string[7] CMO_Array_OutfitEntry_3 = new string[7] CMO_Array_OutfitEntry_4 = new string[7] CMO_Array_OutfitEntry_5 = new string[7] CMO_Array_OutfitEntry_6 = new string[7] CMO_Array_OutfitEntry_7 = new string[7] CMO_Array_OutfitEntry_8 = new string[7] CMO_Array_OutfitEntry_9 = new string[7] CMO_Array_OutfitEntry_10 = new string[7] CMO_Array_OutfitEntry_1[0] = CMO_Array_Index_0[0] CMO_Array_OutfitEntry_1[1] = CMO_Array_Index_1[0] CMO_Array_OutfitEntry_1[2] = CMO_Array_Index_2[0] CMO_Array_OutfitEntry_1[3] = CMO_Array_Index_3[0] as string CMO_Array_OutfitEntry_1[4] = CMO_Array_Index_4[0] as string CMO_Array_OutfitEntry_1[5] = CMO_Array_Index_5[0] as string CMO_Array_OutfitEntry_1[6] = CMO_Array_Index_6[0] as string CMO_Array_OutfitEntry_2[0] = CMO_Array_Index_0[1] CMO_Array_OutfitEntry_2[1] = CMO_Array_Index_1[1] CMO_Array_OutfitEntry_2[2] = CMO_Array_Index_2[1] CMO_Array_OutfitEntry_2[3] = CMO_Array_Index_3[1] as string CMO_Array_OutfitEntry_2[4] = CMO_Array_Index_4[1] as string CMO_Array_OutfitEntry_2[5] = CMO_Array_Index_5[1] as string CMO_Array_OutfitEntry_2[6] = CMO_Array_Index_6[1] as string CMO_Array_OutfitEntry_3[0] = CMO_Array_Index_0[2] CMO_Array_OutfitEntry_3[1] = CMO_Array_Index_1[2] CMO_Array_OutfitEntry_3[2] = CMO_Array_Index_2[2] CMO_Array_OutfitEntry_3[3] = CMO_Array_Index_3[2] as string CMO_Array_OutfitEntry_3[4] = CMO_Array_Index_4[2] as string CMO_Array_OutfitEntry_3[5] = CMO_Array_Index_5[2] as string CMO_Array_OutfitEntry_3[6] = CMO_Array_Index_6[2] as string CMO_Array_OutfitEntry_4[0] = CMO_Array_Index_0[3] CMO_Array_OutfitEntry_4[1] = CMO_Array_Index_1[3] CMO_Array_OutfitEntry_4[2] = CMO_Array_Index_2[3] CMO_Array_OutfitEntry_4[3] = CMO_Array_Index_3[3] as string CMO_Array_OutfitEntry_4[4] = CMO_Array_Index_4[3] as string CMO_Array_OutfitEntry_4[5] = CMO_Array_Index_5[3] as string CMO_Array_OutfitEntry_4[6] = CMO_Array_Index_6[3] as string CMO_Array_OutfitEntry_5[0] = CMO_Array_Index_0[4] CMO_Array_OutfitEntry_5[1] = CMO_Array_Index_1[4] CMO_Array_OutfitEntry_5[2] = CMO_Array_Index_2[4] CMO_Array_OutfitEntry_5[3] = CMO_Array_Index_3[4] as string CMO_Array_OutfitEntry_5[4] = CMO_Array_Index_4[4] as string CMO_Array_OutfitEntry_5[5] = CMO_Array_Index_5[4] as string CMO_Array_OutfitEntry_5[6] = CMO_Array_Index_6[4] as string CMO_Array_OutfitEntry_6[0] = CMO_Array_Index_0[5] CMO_Array_OutfitEntry_6[1] = CMO_Array_Index_1[5] CMO_Array_OutfitEntry_6[2] = CMO_Array_Index_2[5] CMO_Array_OutfitEntry_6[3] = CMO_Array_Index_3[5] as string CMO_Array_OutfitEntry_6[4] = CMO_Array_Index_4[5] as string CMO_Array_OutfitEntry_6[5] = CMO_Array_Index_5[5] as string CMO_Array_OutfitEntry_6[6] = CMO_Array_Index_6[5] as string CMO_Array_OutfitEntry_7[0] = CMO_Array_Index_0[6] CMO_Array_OutfitEntry_7[1] = CMO_Array_Index_1[6] CMO_Array_OutfitEntry_7[2] = CMO_Array_Index_2[6] CMO_Array_OutfitEntry_7[3] = CMO_Array_Index_3[6] as string CMO_Array_OutfitEntry_7[4] = CMO_Array_Index_4[6] as string CMO_Array_OutfitEntry_7[5] = CMO_Array_Index_5[6] as string CMO_Array_OutfitEntry_7[6] = CMO_Array_Index_6[6] as string CMO_Array_OutfitEntry_8[0] = CMO_Array_Index_0[7] CMO_Array_OutfitEntry_8[1] = CMO_Array_Index_1[7] CMO_Array_OutfitEntry_8[2] = CMO_Array_Index_2[7] CMO_Array_OutfitEntry_8[3] = CMO_Array_Index_3[7] as string CMO_Array_OutfitEntry_8[4] = CMO_Array_Index_4[7] as string CMO_Array_OutfitEntry_8[5] = CMO_Array_Index_5[7] as string CMO_Array_OutfitEntry_8[6] = CMO_Array_Index_6[7] as string CMO_Array_OutfitEntry_9[0] = CMO_Array_Index_0[8] CMO_Array_OutfitEntry_9[1] = CMO_Array_Index_1[8] CMO_Array_OutfitEntry_9[2] = CMO_Array_Index_2[8] CMO_Array_OutfitEntry_9[3] = CMO_Array_Index_3[8] as string CMO_Array_OutfitEntry_9[4] = CMO_Array_Index_4[8] as string CMO_Array_OutfitEntry_9[5] = CMO_Array_Index_5[8] as string CMO_Array_OutfitEntry_9[6] = CMO_Array_Index_6[8] as string CMO_Array_OutfitEntry_10[0] = CMO_Array_Index_0[9] CMO_Array_OutfitEntry_10[1] = CMO_Array_Index_1[9] CMO_Array_OutfitEntry_10[2] = CMO_Array_Index_2[9] CMO_Array_OutfitEntry_10[3] = CMO_Array_Index_3[9] as string CMO_Array_OutfitEntry_10[4] = CMO_Array_Index_4[9] as string CMO_Array_OutfitEntry_10[5] = CMO_Array_Index_5[9] as string CMO_Array_OutfitEntry_10[6] = CMO_Array_Index_6[9] as string Debug.Trace("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB") return mInt EndFunction
  10. KicklerOfButts

    MCM Menu Toggling [Solved]

    THE ISSUE OF THIS TOPIC WAS: I have a mod with an MCM menu, but the toggle buttons would not toggle when pressed. It didn't work because I was asking papyrus to read a string as a bool incorrectly, in a way that always returns true. Thanks to Teutonic for figuring out the issue~ SOLUTION and LESSON LEARNED: If you tell papyrus to read a string as a bool, the string will always return bool=true unless the string contains nothing, like so: "". (IE: Absolutely nothing, not even a space.) if !RandomString -DO STUFF- else -DO OTHER STUFF- endif If RandomString holds anything at all, even just a blank space like so: " ", -DO STUFF- will happen. If RandomString holds nothing at all, that is to say "", -DO OTHER STUFF- will happen.
  11. KicklerOfButts

    Copies of Armor Not Showing on NPCs/PC

    What have you named the nif files? The engine can be very particular and fiddly with nif names. You absolutely must have at least one nif file for an ArmorAddon to point to, and that one file must end in "_1" if you only have one nif. If you have two nif files (IE slider support, one for weight 0 and one for weight 100) then both must contain the exact same vertices count, and the weight 0 file's name must end in "_0" and the weight 100 file's name must end with "_1". If they don't follow that naming scheme then it won't work. It's also possible that your nif files simply came out corrupted or defective in some way, you could try remaking them in bodyslide and see if it works. Other than that, it's difficult to figure stuff out without direct access to the nif files to check for ourselves if we can see anything. Maybe share them if none of the above works?
  12. KicklerOfButts

    Copies of Armor Not Showing on NPCs/PC

    Is it the armor you've copied or the ArmorAddon? You could just copy/paste the armor item and then point the new armor to the same ArmorAddon as the original. ArmorAddons are just the visual meshes, armor stats and all that stuff have nothing to do with those. If you plan on using a unique model for your new armor then you'll need a new ArmorAddon and nif file, but otherwise there's really no reason to not just set it to use the same ArmorAddon as the source armor is using.
  13. Is there any way to find a form's editor ID with papyrus? For example, if I have a copy of the first Fur Armor variant available and I need to check what it Editor ID it has. Fur Armor variant 1 has the Editor ID "ArmorBanditCuirass" and variant 2 has the Editor ID "ArmorBanditCuirass1", so being able to check the Editor ID would let me differentiate the two when searching through a list that contains both without having to compare them as entire "forms." (Because otherwise every entry in the list would have to be an entire armor form, which takes much more processing power to go through than simply comparing strings.) Alternatively, is there a way to retrieve an armoraddon's name? The name of an armor's armoraddon could also be used to compare to a list of armoraddon names, if only it could be retrieved through code first. If you're asking "why not just compare armoraddons directly?" then the answer is the same as above. It would take much more effort for the engine to compare armoraddons to each other than to just compare 2 strings, not to mention the size of the list itself would be much larger for having to store dozens upon dozens of armoraddons rather than just short strings. Any help or advice would be appreciated! ^^
  14. KicklerOfButts

    Multi-Dimensional Arrays?

    I'm working on a mod that requires the use of a multi-dimensional array, but I can't seem to write one that works. Basically, I have about 100 string arrays containing 16 entries each, and I need to store these 100 arrays in some form of list so I can reference/set/change them dynamically later on. I need help making such a list that works. I was originally going to use a formlist but I figured out that formlists can't store pure string arrays, so no dice on that. Does anyone here have a comprehensive description of how to make a multi-dimensional array? I've already tried making the one suggested over at the creation kit wiki https://www.creationkit.com/index.php?title=Arrays_(Papyrus) and I can't quite figure that one out. I can probably handle usage of the array myself if only I can get one working to begin with.
  15. KicklerOfButts

    Any mass effect adult mods?

    Thanks for the replies, I think I've got the gist of things with that. ^^