[TUT]How to create Widgets using Flash tools

Post » Sat Nov 01, 2014 11:30 pm

Lately I had to keep a low profile due to various issues, probably all related to me spending to much energy into our all most famous hobby, modding. But now that my wife isn't home, I think it's a good opportunity to fulfill a promise and make this tutorial by popular demant. This tutorial will, more or less, teach you how to create a basic widget with Flash tools. Prepare for a long, long journey So let's begin:

1. Setting up the necessary tools

You will need Adobe Flash tools, this is inevitable. Tools like Trilix, SWiX or Sothink are good for basic 'code hacking', but not for serious development of Flash elements. You can download Sothink Decompiler to speed up decompilation and do basic stuff on .swf/.gfx files though. To create Widgets from scratch, I recommend using Flash CS6, to modifie existing .swf/.gfx I recommend, by proposal of SkyUI team and due to personal experience, using Flash CS4. You will need to keep in mind, that if you compiled/decompiled a file with either CS6 or CS4, you will need to recompile it with the same tool. If you, for example, decompile CS4 files and recompile them CS6 (which is perfectly feasible if you're upgrading, but not downgrading), they will create bugs in game, like weird symbols and messed up UI elements. You will get to notice anyways during the compilation process, because usually compiling with the wrong tool version, will spit out tons of compilation errors. Flash tools are free as trial for about 4 weeks, from there it will cost 24, 95€ a month to furtherly use flash tools. Also, as far as I understood it, you can ONLY buy a license for a year, you can't have the tools for just a month, or 3, or half a year, which is a bit of a disapointment. I'm just lucky I'm currently working on other Flash projects so I was allowed to buy the license.

http://de.sothink.com/product/flashdecompiler/index.htm
http://helpx.adobe.com/de/x-productkb/policy-pricing/cs6-product-downloads.html
http://helpx.adobe.com/de/creative-suite/kb/cs4-product-downloads.html

2. Setting up the necessary sources files

You will need source files, which are granted to us by SkyUI team. To create widgets from scratch I recommend using @Schlangster's source files, to modifie existing Skyrim UI elements, I recommend using @Mardoxx's source files. It's good practice to use CS6 for Schlangster's source and use CS4 for Mardoxx's source. You will want to use CS4 for Mardoxx's files anyways, because compiling them with CS6 will cause previously mentioned errors in game. Optionally you can do as Schlangster proposes and set up Github on your computer, to easily push files to the website. I did so previously, but since the loss of all of my source files, I don't feel the nerv to do it again, unless SkyUI-Team asks for. Instructions on how to interact with the web based part of Github is to be found on their website. ALWAYS make sure, to give proper credits, because as far as I can tell, with the exception of maybe Alex J. Velicky on his Falskaar project and the SKSE-Team, there's no community member even remotely having done so much for the community then Schlangster, Mardoxx and team did.

https://github.com/schlangster/skyui
https://github.com/Mardoxx/skyrimui

3. Setting up the necessary file structure

Now let's get to the setup of files. Let's concentrate on making new widgtes this time, we'll get to more experienced stuff another day. I assume you've already set up Adobe Flash CS6 and downloaded the zipped source files by Schlangster? Good. Now copy the source folder somewhere you can easily back it up, whenever you feel something went wrong. The structure you need to make should look something like this:


The only relevant folder inside this structure for you is the src folder. As the name suggest it has all the source files inside. For now we will concentrate on creating widgets, which will be achieved from inside the HUDWidgets Folder. To create a widget we do not make one from scratch, but use an already exisiting widget. Those widgets exist as .fla (Flash Movie) files. And the particular one you're searching for is the one labeled arrowcount.fla. So, opening your CS6 programm open the arrowcount.fla. Then follow the next steps:


Use this picture as help:

http://www.nexusmods.com/skyrim/Images/467230/?

So, if you now take a look at the top of the arrowcount.as file, you should see the following, green notes are made by me:


So, now that you've made sure that both files have the same file path set up, memorize this information to always do this again whenever you set up a new file. The easiest way to set up a new file, for example, if you would like to create a basic weight widget, is by duplicating the arrowcount.fla and .as files and change the file path, names and all relevant data. You can start creating files from scratch once you're more familiar with developing Flash elements. Remember, the first thing you always want to do, is sycronizing file path structure inside .as and .fla files. Also, it's probably best practice to learn by simple copypasta, but do read what the variables tell you and try to understand it. Copypasta has limits, for more experienced code you'll actually need to learn the code.

4. Learning how .as script files work

Now I will describe how variables inside .as files will be used in .fla and then be transported to Papyrus code using SKSE functions. This seems to be a very complicated task, and believe me, for a beginner it is. So first I will roughly describe how the structure looks, then I will give you a visual impression with screens, and then we care about the actual code. There's various relevant variables to be found in other .as files, primarly inside StatusWidget.as, Meter.as and ActiveEffect.as, use those variables with copypasta to start experimenting. Not all variables can be used on every flash element. Some variables are ONLY for counting widgets, others are only for meter widgets, you'll need to fiddle to figure. Go into the arrowcount.as file and read:

Spoiler

import skyui.widgets.WidgetBase /* <-- mentioned before, this imports 'mother' code from widgetbase.as */class skyui.widgets.arrowcount.ArrowCountWidget extends WidgetBase /* <-- defines this .as file and the corresponding .fla as ArrowCountWidget and extends on the 'mother' file */{      /* STAGE ELEMENTS */    public var countText: TextField /* <-- this is comparable to Papyrus propertys, here you actually define a public variable that will be used in .fla files as text counter using integral numbers. The term 'public' is comparable to Papyrus Auto, if you' want to have it 'hidden' you'd set it to privat. Public says this variable will be 'seen' by all other files. */   /* INITIALIZATION */    public function ArrowCountWidget() /* <-- a function, just as in Papyrus, with the difference that you actually define the widget as function */    {        super();        _visible = false; /* <-- this makes the widget visible on your Hud when set to true but you later need to define it as function as well*/        countText.text = "0"; /* <-- this will define the integral counter and set its count to 0 */    }  /* PUBLIC FUNCTIONS */    // @overrides WidgetBase    public function getWidth(): Number /* <-- a function that's been refred to directly from WidgetBase.as, see the WidgetBase.as to find this variable, hence the notification 'overrides'. This function gets the width of you flash element. */    {        return _width;    }    // @overrides WidgetBase    public function getHeight(): Number    {        return _height; /* <-- yes, gets the height */    }    // @Papyrus    public function setVisible(a_visible: Boolean): Void    {        _visible = a_visible; /* <-- visibility code your .fla file, respectively SKSE invoking code will use */    }        // @Papyrus    public function setCount(a_count: Number): Void    {        countText.text = String(a_count); /* count code your .fla file, respectively SKSE invoking code will use */    }}


So basically the above code will define various functions you can interact with from inside Papyrus code by invoking said variables. This code will allow you set the arrow count visible and define the integral count. You're probably getting confused by the string, which usually referes to letters rather then numbers. But the int that gets counted inside Papyrus, will be displayed as string inside the flash element, so this is perfectly good, irritating but good. Now let's take this further to the code I actually tinkered for my arrow counter...

Spoiler

import skyui.widgets.WidgetBase;import skyui.widgets.status.StatusWidget;class skyui.widgets.arrowcount.ArrowCountWidget extends WidgetBase{      /* STAGE ELEMENTS */        var _xscale, _yscale;        public var countText: TextField;    public var countText2: TextField;        public var _labelTextField: TextField;    private var _labelText: String;    public var _iconSize: Number;        /* INITIALIZATION */    public function ArrowCountWidget()    {        super();                _visible = false;        countText.text = "0";        countText2.text = "0";            }  /* PUBLIC FUNCTIONS */     // @overrides WidgetBase    public function getWidth(): Number    {        return _width;    }    // @overrides WidgetBase    public function getHeight(): Number    {        return _height;    }    // @Papyrus    public function setVisible(a_visible: Boolean): Void    {        _visible = a_visible;    }        // @Papyrus    public function setCount(a_count: Number): Void    {        countText.text = String(a_count);    }        // @Papyrus    public function setCount2(a_count: Number): Void    {        countText2.text = String(a_count);    }            // @Papyrus    public function setLabelText(a_val: String): Void    {        if (_labelText == a_val)            return                    _labelTextField.text = _labelText = a_val;            }        function get Scale()    {        return (_xscale);    }        function set Scale(scale)    {        _xscale = scale;        _yscale = scale;        this.invalidateSize();        //        null;    }    }


Not only does this code look much more 'tidy', it also made copypasta use by various functions from other .as files. It has two integral counts, one text field, is allowed to be turned off and on, its scale can be set, as well as its position and its transparency changed, either by usage of extended code from inside the WidgetBase.as or directly from inside this file. I figure this all looks complicated, probably also because I'm describing it extremely complicated, which I usually don't. But there's nothing I can do about it, developing flash elements IS complicated... :wink:

5. Learning how .fla movie files work

Ok, so now that you got yourself familiar with .as files, we're now going to make changes inside the arrowcount.fla, to make use of the newly imported code. Remember, always synchronize the file path structure, can't stop repeating to remind you of that. The original arrowcount.fla has a simple arrow icon and a global counter telling you how many arrows are inside your inventory. We're going to enhance this arrow count widget, by also displaying the currently equipped arrow name, and the numbers of currently equipped arrows. So basically we will duplicate the integral counter, import a string field, and as bonus, will also change the appearance and color of the arrow count widget. First have a look at this screenshot:

http://www.nexusmods.com/skyrim/Images/469436/?

You will notice it has a whole different look from the original arrow counter. To see how the arrow counter looks inside game, I recommend taking a peek at my http://www.nexusmods.com/skyrim/mods/59361/?. On the right sight you will recognize that there's also changes made to the library. The library basically contains everything that is used by the .fla file. This could be fonts, pictures, text and various other items. What you want to do now, is importing a small arrow icon made by @Psychosteve, which is the icon developer inside SkyUI-Team I assume. The new arrow icon will reflect bolts from DLC's, as well as spears and other ranged weapon ammo. Make it so:


This is one way how to import new icons and combine them. You can also use this to replace icons, so for example if you want to make a basic weight counter, you'd just replace the arrow icon with something that reflects weight. So now, since were learning here how to replace icons, let's teach us how to customize them. I like my UI colorful, in tradition of old RPG games. If this is not your cup of tea, and you simply want to use the icons as they are, then you're better off to skip the next lesson. So now we have a arrow icon symbol that has a bolt icon added, let's recolor it. To customize the single icons you will want to right click and edit it in the library. On some occasions, and based on how you've structured your customization (for example, you could also make this customized arrow icon outside of Flash and then have it imported), you can also furtherly customize the elements isnide the icon holder or the widget directly. You'll need to fiddle around to figure. Use CTRL-Z extensivley during trial and fail and only save if you're certain your changes are appropriate. Ok, now let's cusotmize the weapon bolt, right click it in the library and select edit.

Now it's probably best practice to get familiar with the right side customization bar. Basically it's the same as in programs like Paint, Photoshop or Gimp. The important information here is, a icon can have several layers which you will need to sometimes select seperately to customize them. It's all dependend on the icon and they're are not always the same. If you're lucky the icon has a single layer which you can modifie, if you're unlucky, then there's a miriad of layers which you will someimes have to split and glue back together later. If you need to do this, it's important that you do it correctly. It's basically the same as inside the CK, if you do not work carefully, you will create a lot of 'dirty edits'. You will notice if you made bad edits once your in game. Flash will not always necessarily inform you, if you did something wrong. Now, what you want to try is giving the bolt icon another base color and edge color.


There's tons of customization options available, so start playing with them and later see the results in game. The last thing we want to do now is setting up the functions that are used inside the .as file. So you will learn now how to import .fla counter and text elements.


Stop, now before we continue, just for reference, go into the arrowcount.as file and search for 'countText', found it? Good, you probably see what I'm up to?


Notice that you can also customize those counter/text elements. For example you could recolor them to adapt them to the recolorization of the icons. You probably ask yourself, what the heck was I doing? Well, you've made a copy of the already existing counter to later display the currently equipped arrows, and made another copy to later display the name of the currently equipped arrows type. Exchanging flash elements to show text instead of numbers is simply done by replacing numbers with letters. So if you want to show the arrow name, you just need to change it to show strings instead of integers. If you want to display floats, you will need to put a dot somehwere inside the number. Integers = 10000, floats = 10000.0, strings = xxx. The original counter will be used for what Schlangster intended it to do.Iit will display the global number of arrows inside your inventory. So ok, now that you've learned how to modifie .as and .fla files, it's time to learn how to connect both files in order to make them do what they're supposed to by compiling them.

6. Compile the fla. file into a format useable for the game

Before I'll explain how to compile, I want you to again read through the .as file and figure all the connections to the .fla file. I can't emphasize and encourage you enough to do so. It's important that you did not simply copypastaed what I presented you inside this tutorial. Learn all the diverse variables please. If you do so, you, and respectively the mod user community will benefit greatly. Capable Flash Modders are extremely rare, and I understand this is due to the degree of difficulty. With this tutorial you will scratch the surface of UI modding, rendering you an apprentice, but if you happen to have mastered this 'art', you will be amongst the finest of modders the community has to offer (I haven't even remotely mastered it yet). I want to honorably note @LordConti2 from the Nexus here. Go and have a look at his Mods, it's amazing what this guy achieved with UI modding, specially because it was way ahead in time of every other effort. However, let's continue with compiling:


Ok, now, this is something I can barely adress. If you happen to have compile erros, there's not a lot I can do, then telling you that something went wrong. Usually this happens to wrong file structure mentioned in part 3. of this tutorial. If you get a high number of compile errors, this is likely due to this reason. I fyou maybe have like 5 or 6 errors only, then you maybe have some typos inside your .as file, or you forgot to import information from other .as files, or you haven't correctly syncronized file structure and variables inside the .as and .fla file. All errors I ever experienced, were always related to me using the wrong tool version, or not having the correct file structure set up. Flash will search for .as and .fla files that are used by your widget in the correct folders and pack them inside the compiled file. If those files can't be found by Flash, then this will likely create said compile errors. Files compiled errors will NOT work in game, even if there's only one error. If everything works during the compilation process, you will have your newly created .swf file on your desktop. Please copy this file into your Skyrim folder:

Data/Interface/Exported/Widgets/YourWidgetFolderName

If you can't find those folders, please create them. Name your Widget Folder to something that reflects your Mod. For example my Folder is simply named 'WM' for 'Widget Mod'.

7. Build your actual Mod inside the Creation Kit

Ok, puhh...now that's done, now let's continue with the most important part. Make use of the .swf file from inside Papyrus script. The way it works, is by using various SKSE 'invoking' functions. You will now want to start the Creation Kit, and before, make sure that the SkyUI source files are copied to your Skyrim folder. I'm refering to the .pex and .psc files, NOT the flash files. Usually you can find the SkyUI SDK files https://github.com/schlangster/skyui/wiki, BUT, and that's the recommended way of getting the source files, they're also inside the .bsa that comes with the http://www.nexusmods.com/skyrim/mods/3863/?. Unpack those script files and copy them to your Data folder. Some files are missing from the Github download. Make sure to build your new plugin with Update and all DCLs as master enabled, IF you want to cover assets imported by this master plugins. For example, an arrow counter widget also wants to display bolts and spears from Dragonborn and Dawnguard.

So ok, pretty much the only thing needed to enable a widget is by creating a new quest. So head on:


Basic setup done, now let's ge to the funny part. Basically Widget Mods make use of three script types. The actual Widget Script, the Update script and the MCM script, if you want to be able to customize your widget from inside the ingame MCM menu. The update script will update information on a given interval for your widgets to display. Usually it does that by simply calling a function inside the widget script OnUpdate(). So please make three new quest scripts with appropriate names. Examples, where XXX resamples your Mods name:

1. XXX_ArrowCountScript2. XXX_MasterUpdateScript3. XXX_MCMScript


I will not describe how you actually build scripts inside the CK. Being capable of scripting with Papyrus is a prerequisite to even remotely think about creating UI related Mods. I will post the scripts of my Widget Mod instead, and let you figure how to do it. However, I will give you some hints on what actually happens inside those scripts. So let's continue:

Arrow Count Script:

Spoiler
Scriptname WM_ArrowCountQuestScript extends SKI_WidgetBase; <--- change this from Quest to SKI_WidgetBase

Actor Property PlayerREF Auto
FormList Property WM_ArrowFormList Auto
Ammo Property boundArrow Auto
Ammo Property DLC1BoltDwarven Auto
Ammo Property DLC1BoltDwarvenExplodingFire Auto
Ammo Property DLC1BoltDwarvenExplodingIce Auto
Ammo Property DLC1BoltDwarvenExplodingShock Auto
Ammo Property DLC1BoltSteel Auto
Ammo Property DLC1BoltSteelExplodingFire Auto
Ammo Property DLC1BoltSteelExplodingIce Auto
Ammo Property DLC1BoltSteelExplodingShock Auto
Ammo Property DLC1DragonboneArrow Auto
Ammo Property DLC2NordicArrow Auto
Ammo Property DLC2RieklingSpearThrown Auto
Ammo Property DLC2StalhrimArrow Auto
Ammo Property DraugrArrow Auto
Ammo Property DwarvenArrow Auto
Ammo Property EbonyArrow Auto
Ammo Property ElvenArrow Auto
Ammo Property FalmerArrow Auto
Ammo Property ForswornArrow Auto
Ammo Property GlassArrow Auto
Ammo Property IronArrow Auto
Ammo Property NordHeroArrow Auto
Ammo Property OrcishArrow Auto
Ammo Property SteelArrow Auto

Bool ArrowVisible = false
Int ArrowCount = 0
Int ArrowCount2 = 0; <--- this section is were to define your variables to call on the .swf file
String ArrowName = ""
Int ArrowSize = 100

Bool Property Visible
Bool Function Get()
Return ArrowVisible
EndFunction

Function Set(bool a_val)
ArrowVisible = a_val
If (Ready)
UI.InvokeBool(HUD_MENU, WidgetRoot + ".setVisible", ArrowVisible); <-- find me the .setVisible inside your .as file please, you can't? Your .as files extends WidgetBase.as, search there. Nothing found? Good. The .setVisble is actually called from inside the MovieClip.as that the WidgetBase.as extends. As far as I understand MovieClip.as source is somewhere inside the Flash tool.
EndIf
EndFunction
EndProperty

Int Property Count
Int Function Get()
Return ArrowCount
EndFunction

Function Set(int a_val)
ArrowCount = a_val
If (Ready)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setCount", ArrowCount); <-- please find me the .setCount inside the .as file, found it? Good, head on.
EndIf
EndFunction
EndProperty

Int Property Count2
Int Function Get()
Return ArrowCount2
EndFunction

Function Set(int a_val)
ArrowCount2 = a_val
If (Ready)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setCount2", ArrowCount2); <-- please find me the .setCount2 inside the .as file, found it? Good, see what happens here? I show, you learn... :wink:
EndIf
EndFunction
EndProperty

String Property MessageText
String Function Get()
Return ArrowName
EndFunction

Function Set(String a_val)
ArrowName = a_val
If (Ready)
UI.InvokeString(HUD_MENU, WidgetRoot + ".setLabelText", ArrowName); <-- you remember the setLabelText, do you?
EndIf
EndFunction
EndProperty

Int Property Size
Int Function Get()
Return ArrowSize
EndFunction

Function Set(int a_val)
ArrowSize = a_val
If (Ready)
UpdateScale()
EndIf
EndFunction
EndProperty

; now note there's a change in how the variables are called inside the .swf file, previously you had propertys defined, now you will use functions. To figure what is appropriate, you will need to look through the SkyUI Papyrus source files. They will teach you what's right.

Function SetX(Float afX); <-- horizontal position
If (Ready)
X = afX
EndIf
EndFunction

Function SetY(Float afY); <-- vertical position
If (Ready)
Y = afY
EndIf
EndFunction

Function SetHorizontalAnchor(String asAnchor)
If (Ready)
HAnchor = asAnchor
EndIf
EndFunction

Function SetVerticalAnchor(String asAnchor)
If (Ready)
VAnchor = asAnchor
EndIf
EndFunction

Function SetTransparency(Float afAlpha); <-- transparency of the widget
If (Ready)
Alpha = afAlpha
EndIf
EndFunction

Event OnWidgetReset(); <-- this is where the actual code that drives the widget starts
UpdateScale(); <-- transports to scaling maintenance needs to be done before the widget resets!
Parent.OnWidgetReset()
If PlayerREF.IsEquipped(DLC1BoltDwarven)
ArrowName = DLC1BoltDwarven.GetName() as String; <-- see how I called the arrows name?
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarven); <-- see how I called the current equipped arrow number?
ElseIf PlayerREF.IsEquipped(DLC1BoltDwarvenExplodingFire)
ArrowName = DLC1BoltDwarvenExplodingFire.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarvenExplodingFire)
ElseIf PlayerREF.IsEquipped(DLC1BoltDwarvenExplodingIce)
ArrowName = DLC1BoltDwarvenExplodingIce.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarvenExplodingIce)
ElseIf PlayerREF.IsEquipped(DLC1BoltDwarvenExplodingShock)
ArrowName = DLC1BoltDwarvenExplodingShock.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarvenExplodingShock)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteel)
ArrowName = DLC1BoltSteel.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteel)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteelExplodingFire)
ArrowName = DLC1BoltSteelExplodingFire.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteelExplodingFire)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteelExplodingIce)
ArrowName = DLC1BoltSteelExplodingIce.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteelExplodingIce)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteelExplodingShock)
ArrowName = DLC1BoltSteelExplodingShock.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteelExplodingShock)
ElseIf PlayerREF.IsEquipped(DLC1DragonboneArrow)
ArrowName = DLC1DragonboneArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1DragonboneArrow)
ElseIf PlayerREF.IsEquipped(DLC2NordicArrow)
ArrowName = DLC2NordicArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC2NordicArrow)
ElseIf PlayerREF.IsEquipped(DLC2RieklingSpearThrown)
ArrowName = DLC2RieklingSpearThrown.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC2RieklingSpearThrown)
ElseIf PlayerREF.IsEquipped(DLC2StalhrimArrow)
ArrowName = DLC2StalhrimArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC2StalhrimArrow)
ElseIf PlayerREF.IsEquipped(DraugrArrow)
ArrowName = DraugrArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DraugrArrow)
ElseIf PlayerREF.IsEquipped(DwarvenArrow)
ArrowName = DwarvenArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DwarvenArrow)
ElseIf PlayerREF.IsEquipped(EbonyArrow)
ArrowName = EbonyArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(EbonyArrow)
ElseIf PlayerREF.IsEquipped(ElvenArrow)
ArrowName = ElvenArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(ElvenArrow)
ElseIf PlayerREF.IsEquipped(FalmerArrow)
ArrowName = FalmerArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(FalmerArrow)
ElseIf PlayerREF.IsEquipped(ForswornArrow)
ArrowName = ForswornArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(ForswornArrow)
ElseIf PlayerREF.IsEquipped(GlassArrow)
ArrowName = GlassArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(GlassArrow)
ElseIf PlayerREF.IsEquipped(IronArrow)
ArrowName = IronArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(IronArrow)
ElseIf PlayerREF.IsEquipped(NordHeroArrow)
ArrowName = NordHeroArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(NordHeroArrow)
ElseIf PlayerREF.IsEquipped(OrcishArrow)
ArrowName = OrcishArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(OrcishArrow)
ElseIf PlayerREF.IsEquipped(SteelArrow)
ArrowName = SteelArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(SteelArrow)
Else
ArrowName = "" as String; <-- makes sure no name gets displayed when no arrow equipped
ArrowCount2 = 0; <-- makes sure no number gets displayed when no arrow equipped
EndIf

; note this is the fun part, those four variables actually transport the information from your papyrus script to your .swf file

UI.InvokeBool(HUD_MENU, WidgetRoot + ".setVisible", ArrowVisible)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setCount", ArrowCount)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setCount2", ArrowCount2)
UI.InvokeString(HUD_MENU, WidgetRoot + ".setLabelText", ArrowName)
EndEvent

; this is the place where the script searchs for your widget, see how the root path is your widget folders name

String Function GetWidgetSource()
Return "WM/WM_ArrowCount.swf"
EndFunction

; your widget script, must be the same as this scripts name

String Function GetWidgetType()
Return "WM_ArrowCountQuestScript"
EndFunction

Function UpdateStatus(); <-- the update/maintenance code, will be called from inside the master update script, needs to have the same varaibles coded again or won't be transported through savegames!
If PlayerREF.IsEquipped(DLC1BoltDwarven)
ArrowName = DLC1BoltDwarven.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarven)
ElseIf PlayerREF.IsEquipped(DLC1BoltDwarvenExplodingFire)
ArrowName = DLC1BoltDwarvenExplodingFire.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarvenExplodingFire)
ElseIf PlayerREF.IsEquipped(DLC1BoltDwarvenExplodingIce)
ArrowName = DLC1BoltDwarvenExplodingIce.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarvenExplodingIce)
ElseIf PlayerREF.IsEquipped(DLC1BoltDwarvenExplodingShock)
ArrowName = DLC1BoltDwarvenExplodingShock.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltDwarvenExplodingShock)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteel)
ArrowName = DLC1BoltSteel.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteel)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteelExplodingFire)
ArrowName = DLC1BoltSteelExplodingFire.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteelExplodingFire)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteelExplodingIce)
ArrowName = DLC1BoltSteelExplodingIce.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteelExplodingIce)
ElseIf PlayerREF.IsEquipped(DLC1BoltSteelExplodingShock)
ArrowName = DLC1BoltSteelExplodingShock.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1BoltSteelExplodingShock)
ElseIf PlayerREF.IsEquipped(DLC1DragonboneArrow)
ArrowName = DLC1DragonboneArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC1DragonboneArrow)
ElseIf PlayerREF.IsEquipped(DLC2NordicArrow)
ArrowName = DLC2NordicArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC2NordicArrow)
ElseIf PlayerREF.IsEquipped(DLC2RieklingSpearThrown)
ArrowName = DLC2RieklingSpearThrown.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC2RieklingSpearThrown)
ElseIf PlayerREF.IsEquipped(DLC2StalhrimArrow)
ArrowName = DLC2StalhrimArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DLC2StalhrimArrow)
ElseIf PlayerREF.IsEquipped(DraugrArrow)
ArrowName = DraugrArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DraugrArrow)
ElseIf PlayerREF.IsEquipped(DwarvenArrow)
ArrowName = DwarvenArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(DwarvenArrow)
ElseIf PlayerREF.IsEquipped(EbonyArrow)
ArrowName = EbonyArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(EbonyArrow)
ElseIf PlayerREF.IsEquipped(ElvenArrow)
ArrowName = ElvenArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(ElvenArrow)
ElseIf PlayerREF.IsEquipped(FalmerArrow)
ArrowName = FalmerArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(FalmerArrow)
ElseIf PlayerREF.IsEquipped(ForswornArrow)
ArrowName = ForswornArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(ForswornArrow)
ElseIf PlayerREF.IsEquipped(GlassArrow)
ArrowName = GlassArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(GlassArrow)
ElseIf PlayerREF.IsEquipped(IronArrow)
ArrowName = IronArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(IronArrow)
ElseIf PlayerREF.IsEquipped(NordHeroArrow)
ArrowName = NordHeroArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(NordHeroArrow)
ElseIf PlayerREF.IsEquipped(OrcishArrow)
ArrowName = OrcishArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(OrcishArrow)
ElseIf PlayerREF.IsEquipped(SteelArrow)
ArrowName = SteelArrow.GetName() as String
ArrowCount2 = PlayerRef.GetItemCount(SteelArrow)
Else
ArrowName = "" as String
ArrowCount2 = 0
EndIf
If (Ready)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setCount", PlayerRef.GetItemCount(WM_ArrowFormList)); <-- curious, are you? Why only here? I don't even remotely have an idea, but it does work like that. If I declare this on the WidgetReset, it will mess up the number. Haven't figured why... :D
UI.InvokeString(HUD_MENU, WidgetRoot + ".setLabelText", ArrowName)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setCount2", ArrowCount2)
EndIf
EndFunction

Function UpdateScale(); <-- the scale update code...took me like 4 hours to figure this had to be called BEFORE widget reset...-.-
UI.SetInt(HUD_MENU, WidgetRoot + ".Scale", ArrowSize)
EndFunction


Master Update Script:

Spoiler
Scriptname WM_MasterManagerScript extends Quest

WM_ArrowCountQuestScript Property ArrowScript Auto; <-- see how I defined a script property?
WM_WeightCountQuestScript Property WeightScript Auto
WM_GoldCountQuestScript Property GoldScript Auto
WM_BountyCountQuestScript Property BountyScript Auto
WM_SkillCountQuestScript Property SkillScript Auto
WM_AthleticCountQuestScript Property AthleticScript Auto
WM_LockpickCountQuestScript Property LockpickScript Auto
WM_LightCountQuestScript Property LightScript Auto
WM_HotkeyCountQuestScript Property HotkeyScript Auto
WM_HorseCountQuestScript Property HorseScript Auto
WM_FollowerCountQuestScript Property FollowerScript Auto
WM_AttributeCountQuestScript Property AttributeScript Auto

Float Property UpdateTimer Auto; <-- the update timer interval

Event OnInit()
RegisterForSingleUpdate(UpdateTimer)
EndEvent

Event OnUpdate()
ArrowScript.UpdateStatus(); <-- see how it calls the UpdateStatus() Function inside the Arrow Widget Script?
WeightScript.UpdateStatus()
GoldScript.UpdateStatus()
BountyScript.UpdateStatus()
SkillScript.UpdateStatus()
AthleticScript.UpdateStatus()
LockpickScript.UpdateStatus()
LightScript.UpdateStatus()
HotkeyScript.UpdateStatus()
HorseScript.UpdateStatus()
FollowerScript.UpdateStatus()
AttributeScript.UpdateStatus()
RegisterForSingleUpdate(UpdateTimer); <-- don't forget to reregister
EndEvent


MCM Script:

See second post, I've reached the post limit.

Things to remember:

1. you have to make a new script for every new widget
2. you have to call every new widget script from inside the update script
3. the .as, .fla and .psc variables are pretty much all available, for the moment there is no function that allow to modifie color via MCM or Papyrus code in general, I'm working to get this done
4. setting up the MCM menu is the most sophisticated part. You'll need to have done this before or you will certainly fail. All variables inside the MCM script have been described before.

Also, see this screenshot on how you have to fill propertys on the widget script, the update and mcm script will have all properties filled, the explicit widget script does not:

http://www.nexusmods.com/skyrim/Images/469622/?

User avatar
Richard Dixon
 
Posts: 3461
Joined: Thu Jun 07, 2007 1:29 pm

Post » Sun Nov 02, 2014 8:01 am

Spoiler
Scriptname WM_MCMScript extends SKI_ConfigBase; <-- MCM standard script extension changed from Quest to SKI_ConfigBase

Import FISSFactory; <-- additional importing from @LordConti2's FISS function, allowing you to save/load presets, absolutely necessary for Widget Mods I reconed, you'll need to have the FISS source files packed with your Mod, @LordConti2 encourages to do so.

WM_ArrowCountQuestScript Property ArrowScript Auto; <-- see how I define script propertys, using them later to directly call from the MCM variables, rahter then setting up alias names and propertys
WM_WeightCountQuestScript Property WeightScript Auto
WM_GoldCountQuestScript Property GoldScript Auto
WM_BountyCountQuestScript Property BountyScript Auto
WM_SkillCountQuestScript Property SkillScript Auto
WM_AthleticCountQuestScript Property SpeedScript Auto
WM_LockpickCountQuestScript Property LockpickScript Auto
WM_LightCountQuestScript Property LightScript Auto
WM_HotkeyCountQuestScript Property HotkeyScript Auto
WM_HorseCountQuestScript Property HorseScript Auto
WM_FollowerCountQuestScript Property FollowerScript Auto
WM_AttributeCountQuestScript Property AttributeScript Auto

WM_MasterManagerScript Property UpdateScript Auto

Int ArrowWidget
Int ArrowPosX
Int ArrowPosY
Int ArrowAnchorV
Int ArrowAnchorH
Int ArrowAlpha
Int ArrowScale
Int WeightWidget
Int WeightPosX
Int WeightPosY
Int WeightAnchorV
Int WeightAnchorH
Int WeightAlpha
Int WeightScale
Int GoldWidget
Int GoldPosX
Int GoldPosY
Int GoldAnchorV
Int GoldAnchorH
Int GoldAlpha
Int GoldScale
Int BountyWidget
Int BountyPosX
Int BountyPosY
Int BountyAnchorV
Int BountyAnchorH
Int BountyAlpha
Int BountyScale
Int SkillWidget
Int SkillPosX
Int SkillPosY
Int SkillAnchorV
Int SkillAnchorH
Int SkillAlpha
Int SkillScale
Int SpeedWidget
Int SpeedPosX
Int SpeedPosY
Int SpeedAnchorV
Int SpeedAnchorH
Int SpeedAlpha
Int SpeedScale
Int LockpickWidget
Int LockpickPosX
Int LockpickPosY
Int LockpickAnchorV
Int LockpickAnchorH
Int LockpickAlpha
Int LockpickScale
Int LightWidget
Int LightPosX
Int LightPosY
Int LightAnchorV
Int LightAnchorH
Int LightAlpha
Int LightScale
Int HotkeyWidget
Int HotkeyPosX
Int HotkeyPosY
Int HotkeyAnchorV
Int HotkeyAnchorH
Int HotkeyAlpha
Int HotkeyScale
Int HorseWidget
Int HorsePosX
Int HorsePosY
Int HorseAnchorV
Int HorseAnchorH
Int HorseAlpha
Int HorseScale
Int FollowerWidget
Int FollowerPosX
Int FollowerPosY
Int FollowerAnchorH
Int FollowerAnchorV
Int FollowerAlpha
Int FollowerScale
Int AttributeWidget
Int AttributePosX
Int AttributePosY
Int AttributeAnchorV
Int AttributeAnchorH
Int AttributeAlpha
Int AttributeScale

Int UpdateTimerInt
Int FissLoad
Int FissSave
Float UpdateTimerIndex

String[] HAnchorArrowString
String[] VAnchorArrowString
String[] HAnchorWeightString
String[] VAnchorWeightString
String[] HAnchorGoldString
String[] VAnchorGoldString
String[] HAnchorBountyString
String[] VAnchorBountyString
String[] HAnchorSkillString
String[] VAnchorSkillString
String[] HAnchorSpeedString
String[] VAnchorSpeedString
String[] HAnchorLockpickString
String[] VAnchorLockpickString
String[] HAnchorLightString
String[] VAnchorLightString
String[] HAnchorHotkeyString
String[] VAnchorHotkeyString
String[] HAnchorHorseString
String[] VAnchorHorseString
String[] HAnchorFollowerString
String[] VAnchorFollowerString
String[] HAnchorAttributeString
String[] VAnchorAttributeString

Event OnConfigInit()

HAnchorArrowString = new String[3]
HAnchorArrowString[0] = "Left"
HAnchorArrowString[1] = "Right"
HAnchorArrowString[2] = "Center"
HAnchorWeightString = new String[3]
HAnchorWeightString[0] = "Left"
HAnchorWeightString[1] = "Right"
HAnchorWeightString[2] = "Center"
HAnchorGoldString = new String[3]
HAnchorGoldString[0] = "Left"
HAnchorGoldString[1] = "Right"
HAnchorGoldString[2] = "Center"
HAnchorBountyString = new String[3]
HAnchorBountyString[0] = "Left"
HAnchorBountyString[1] = "Right"
HAnchorBountyString[2] = "Center"
HAnchorSkillString = new String[3]
HAnchorSkillString[0] = "Left"
HAnchorSkillString[1] = "Right"
HAnchorSkillString[2] = "Center"
HAnchorSpeedString = new String[3]
HAnchorSpeedString[0] = "Left"
HAnchorSpeedString[1] = "Right"
HAnchorSpeedString[2] = "Center"
HAnchorLockpickString = new String[3]
HAnchorLockpickString[0] = "Left"
HAnchorLockpickString[1] = "Right"
HAnchorLockpickString[2] = "Center"
HAnchorLightString = new String[3]
HAnchorLightString[0] = "Left"
HAnchorLightString[1] = "Right"
HAnchorLightString[2] = "Center"
HAnchorHotkeyString = new String[3]
HAnchorHotkeyString[0] = "Left"
HAnchorHotkeyString[1] = "Right"
HAnchorHotkeyString[2] = "Center"
HAnchorHorseString = new String[3]
HAnchorHorseString[0] = "Left"
HAnchorHorseString[1] = "Right"
HAnchorHorseString[2] = "Center"
HAnchorFollowerString = new String[3]
HAnchorFollowerString[0] = "Left"
HAnchorFollowerString[1] = "Right"
HAnchorFollowerString[2] = "Center"
HAnchorAttributeString = new String[3]
HAnchorAttributeString[0] = "Left"
HAnchorAttributeString[1] = "Right"
HAnchorAttributeString[2] = "Center"

VAnchorArrowString = new String[3]
VAnchorArrowString[0] = "Bottom"
VAnchorArrowString[1] = "Top"
VAnchorArrowString[2] = "Center"
VAnchorWeightString = new String[3]
VAnchorWeightString[0] = "Bottom"
VAnchorWeightString[1] = "Top"
VAnchorWeightString[2] = "Center"
VAnchorGoldString = new String[3]
VAnchorGoldString[0] = "Bottom"
VAnchorGoldString[1] = "Top"
VAnchorGoldString[2] = "Center"
VAnchorBountyString = new String[3]
VAnchorBountyString[0] = "Bottom"
VAnchorBountyString[1] = "Top"
VAnchorBountyString[2] = "Center"
VAnchorSkillString = new String[3]
VAnchorSkillString[0] = "Bottom"
VAnchorSkillString[1] = "Top"
VAnchorSkillString[2] = "Center"
VAnchorSpeedString = new String[3]
VAnchorSpeedString[0] = "Bottom"
VAnchorSpeedString[1] = "Top"
VAnchorSpeedString[2] = "Center"
VAnchorLockpickString = new String[3]
VAnchorLockpickString[0] = "Bottom"
VAnchorLockpickString[1] = "Top"
VAnchorLockpickString[2] = "Center"
VAnchorLightString = new String[3]
VAnchorLightString[0] = "Bottom"
VAnchorLightString[1] = "Top"
VAnchorLightString[2] = "Center"
VAnchorHotkeyString = new String[3]
VAnchorHotkeyString[0] = "Bottom"
VAnchorHotkeyString[1] = "Top"
VAnchorHotkeyString[2] = "Center"
VAnchorHorseString = new String[3]
VAnchorHorseString[0] = "Bottom"
VAnchorHorseString[1] = "Top"
VAnchorHorseString[2] = "Center"
VAnchorFollowerString = new String[3]
VAnchorFollowerString[0] = "Bottom"
VAnchorFollowerString[1] = "Top"
VAnchorFollowerString[2] = "Center"
VAnchorAttributeString = new String[3]
VAnchorAttributeString[0] = "Bottom"
VAnchorAttributeString[1] = "Top"
VAnchorAttributeString[2] = "Center"

EndEvent

Event OnPageReset(string Page)
If (Page == "Position")
SetCursorFillMode(TOP_TO_BOTTOM)
SetCursorPosition(0)
AddHeaderOption("Arrow Counter")
ArrowWidget = AddToggleOption("Toggle Arrow Counter", ArrowScript.Visible)
ArrowPosX = AddSliderOption("Left/Right-Position", ArrowScript.X, "{0}")
ArrowPosY = AddSliderOption("Up/Down-Position", ArrowScript.Y, "{0}")
ArrowAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorArrowString[HAnchorArrowString.Find(ArrowScript.HAnchor)])
ArrowAnchorV = AddMenuOption("Vertical-Anchor", VAnchorArrowString[VAnchorArrowString.Find(ArrowScript.VAnchor)])
AddHeaderOption("Weight Counter")
WeightWidget = AddToggleOption("Toggle Weight Counter", WeightScript.Visible)
WeightPosX = AddSliderOption("Left/Right-Position", WeightScript.X, "{0}")
WeightPosY = AddSliderOption("Up/Down-Position", WeightScript.Y, "{0}")
WeightAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorWeightString[HAnchorWeightString.Find(WeightScript.HAnchor)])
WeightAnchorV = AddMenuOption("Vertical-Anchor", VAnchorWeightString[VAnchorWeightString.Find(WeightScript.VAnchor)])
AddHeaderOption("Skill Counter")
SkillWidget = AddToggleOption("Toggle Skill Counter", SkillScript.Visible)
SkillPosX = AddSliderOption("Left/Right-Position", SkillScript.X, "{0}")
SkillPosY = AddSliderOption("Up/Down-Position", SkillScript.Y, "{0}")
SkillAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorSkillString[HAnchorSkillString.Find(SkillScript.HAnchor)])
SkillAnchorV = AddMenuOption("Vertical-Anchor", VAnchorSkillString[VAnchorSkillString.Find(SkillScript.VAnchor)])
AddHeaderOption("Lockpick Counter")
LockpickWidget = AddToggleOption("Toggle Lockpick Counter", LockpickScript.Visible)
LockpickPosX = AddSliderOption("Left/Right-Position", LockpickScript.X, "{0}")
LockpickPosY = AddSliderOption("Up/Down-Position", LockpickScript.Y, "{0}")
LockpickAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorLockpickString[HAnchorLockpickString.Find(LockpickScript.HAnchor)])
LockpickAnchorV = AddMenuOption("Vertical-Anchor", VAnchorLockpickString[VAnchorLockpickString.Find(LockpickScript.VAnchor)])
AddHeaderOption("Hotkey Counter")
HotkeyWidget = AddToggleOption("Toggle Hotkey Counter", HotkeyScript.Visible)
HotkeyPosX = AddSliderOption("Left/Right-Position", HotkeyScript.X, "{0}")
HotkeyPosY = AddSliderOption("Up/Down-Position", HotkeyScript.Y, "{0}")
HotkeyAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorHotkeyString[HAnchorHotkeyString.Find(HotkeyScript.HAnchor)])
HotkeyAnchorV = AddMenuOption("Vertical-Anchor", VAnchorHotkeyString[VAnchorHotkeyString.Find(HotkeyScript.VAnchor)])
AddHeaderOption("Follower Counter")
FollowerWidget = AddToggleOption("Toggle Follower Counter", FollowerScript.Visible)
FollowerPosX = AddSliderOption("Left/Right-Position", FollowerScript.X, "{0}")
FollowerPosY = AddSliderOption("Up/Down-Position", FollowerScript.Y, "{0}")
FollowerAnchorV = AddMenuOption("Vertical-Anchor", VAnchorFollowerString[VAnchorFollowerString.Find(FollowerScript.VAnchor)])
FollowerAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorFollowerString[HAnchorFollowerString.Find(FollowerScript.HAnchor)])
SetCursorPosition(1)
AddHeaderOption("Gold Counter")
GoldWidget = AddToggleOption("Toggle Gold Counter", GoldScript.Visible)
GoldPosX = AddSliderOption("Left/Right-Position", GoldScript.X, "{0}")
GoldPosY = AddSliderOption("Up/Down-Position", GoldScript.Y, "{0}")
GoldAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorGoldString[HAnchorGoldString.Find(GoldScript.HAnchor)])
GoldAnchorV = AddMenuOption("Vertical-Anchor", VAnchorGoldString[VAnchorGoldString.Find(GoldScript.VAnchor)])
AddHeaderOption("Bounty Counter")
BountyWidget = AddToggleOption("Toggle Bounty Counter", BountyScript.Visible)
BountyPosX = AddSliderOption("Left/Right-Position", BountyScript.X, "{0}")
BountyPosY = AddSliderOption("Up/Down-Position", BountyScript.Y, "{0}")
BountyAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorBountyString[HAnchorBountyString.Find(BountyScript.HAnchor)])
BountyAnchorV = AddMenuOption("Vertical-Anchor", VAnchorBountyString[VAnchorBountyString.Find(BountyScript.VAnchor)])
AddHeaderOption("Speed Counter")
SpeedWidget = AddToggleOption("Toggle Speed Counter", SpeedScript.Visible)
SpeedPosX = AddSliderOption("Left/Right-Position", SpeedScript.X, "{0}")
SpeedPosY = AddSliderOption("Up/Down-Position", SpeedScript.Y, "{0}")
SpeedAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorSpeedString[HAnchorSpeedString.Find(SpeedScript.HAnchor)])
SpeedAnchorV = AddMenuOption("Vertical-Anchor", VAnchorSpeedString[VAnchorSpeedString.Find(SpeedScript.VAnchor)])
AddHeaderOption("Light Counter")
LightWidget = AddToggleOption("Toggle Light Counter", LightScript.Visible)
LightPosX = AddSliderOption("Left/Right-Position", LightScript.X, "{0}")
LightPosY = AddSliderOption("Up/Down-Position", LightScript.Y, "{0}")
LightAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorLightString[HAnchorLightString.Find(LightScript.HAnchor)])
LightAnchorV = AddMenuOption("Vertical-Anchor", VAnchorLightString[VAnchorLightString.Find(LightScript.VAnchor)])
AddHeaderOption("Horse Counter")
HorseWidget = AddToggleOption("Toggle Horse Counter", HorseScript.Visible)
HorsePosX = AddSliderOption("Left/Right-Position", HorseScript.X, "{0}")
HorsePosY = AddSliderOption("Up/Down-Position", HorseScript.Y, "{0}")
HorseAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorHorseString[HAnchorHorseString.Find(HorseScript.HAnchor)])
HorseAnchorV = AddMenuOption("Vertical-Anchor", VAnchorHorseString[VAnchorHorseString.Find(HorseScript.VAnchor)])
AddHeaderOption("Attribute Counter")
AttributeWidget = AddToggleOption("Toggle Attribute Counter", AttributeScript.Visible)
AttributePosX = AddSliderOption("Left/Right-Position", AttributeScript.X, "{0}")
AttributePosY = AddSliderOption("Up/Down-Position", AttributeScript.Y, "{0}")
AttributeAnchorH = AddMenuOption("Horizontal-Anchor", HAnchorAttributeString[HAnchorAttributeString.Find(AttributeScript.HAnchor)])
AttributeAnchorV = AddMenuOption("Vertical-Anchor", VAnchorAttributeString[VAnchorAttributeString.Find(AttributeScript.VAnchor)])
ElseIf (Page == "Shape")
SetCursorFillMode(TOP_TO_BOTTOM)
SetCursorPosition(0)
AddHeaderOption("Arrow Counter")
ArrowAlpha = AddSliderOption("Transparency", ArrowScript.Alpha, "{0} %")
ArrowScale = AddSliderOption("Scale", ArrowScript.Size, "{0} %")
AddHeaderOption("Weight Counter")
WeightAlpha = AddSliderOption("Transparency", WeightScript.Alpha, "{0} %")
WeightScale = AddSliderOption("Scale", WeightScript.Size, "{0} %")
AddHeaderOption("Speed Counter")
SpeedAlpha = AddSliderOption("Transparency", SpeedScript.Alpha, "{0} %")
SpeedScale = AddSliderOption("Scale", SpeedScript.Size, "{0} %")
AddHeaderOption("Lockpick Counter")
LockpickAlpha = AddSliderOption("Transparency", LockpickScript.Alpha, "{0} %")
LockpickScale = AddSliderOption("Scale", LockpickScript.Size, "{0} %")
AddHeaderOption("Hotkey Counter")
HotkeyAlpha = AddSliderOption("Transparency", HotkeyScript.Alpha, "{0} %")
HotkeyScale = AddSliderOption("Scale", HotkeyScript.Size, "{0} %")
AddHeaderOption("Follower Counter")
FollowerAlpha = AddSliderOption("Transparency", FollowerScript.Alpha, "{0} %")
FollowerScale = AddSliderOption("Scale", FollowerScript.Size, "{0} %")
SetCursorPosition(1)
AddHeaderOption("Gold Counter")
GoldAlpha = AddSliderOption("Transparency", GoldScript.Alpha, "{0} %")
GoldScale = AddSliderOption("Scale", GoldScript.Size, "{0} %")
AddHeaderOption("Bounty Counter")
BountyAlpha = AddSliderOption("Transparency", BountyScript.Alpha, "{0} %")
BountyScale = AddSliderOption("Scale", BountyScript.Size, "{0} %")
AddHeaderOption("Skill Counter")
SkillAlpha = AddSliderOption("Transparency", SkillScript.Alpha, "{0} %")
SkillScale = AddSliderOption("Scale", SkillScript.Size, "{0} %")
AddHeaderOption("Light Counter")
LightAlpha = AddSliderOption("Transparency", LightScript.Alpha, "{0} %")
LightScale = AddSliderOption("Scale", LightScript.Size, "{0} %")
AddHeaderOption("Horse Counter")
HorseAlpha = AddSliderOption("Transparency", HorseScript.Alpha, "{0} %")
HorseScale = AddSliderOption("Scale", HorseScript.Size, "{0} %")
AddHeaderOption("Attribute Counter")
AttributeAlpha = AddSliderOption("Transparency", AttributeScript.Alpha, "{0} %")
AttributeScale = AddSliderOption("Scale", AttributeScript.Size, "{0} %")
ElseIf (Page == "Maintenance")
SetCursorFillMode(TOP_TO_BOTTOM)
SetCursorPosition(0)
AddHeaderOption("General Settings")
UpdateTimerInt = AddSliderOption("Update Timer Interval", UpdateScript.UpdateTimer, "{0} sec.")

FISSInterface fiss = FISSFactory.getFISS()
Int FissFlag = OPTION_FLAG_NONE
Int LoadSettingsFlag = OPTION_FLAG_NONE
If !fiss
FissFlag = OPTION_FLAG_DISABLED
LoadSettingsFlag = OPTION_FLAG_DISABLED
Else
fiss.beginLoad("WMUserSettings.xml")
If fiss.endLoad() != ""
LoadSettingsFlag = OPTION_FLAG_DISABLED
EndIf
EndIf

FissLoad = AddTextOption("Load User Settings?", "Do it!", LoadSettingsFlag)
FissSave = AddTextOption("Save User Settings?", "Do it!", FissFlag)

EndIf
EndEvent

Event OnOptionHighlight(Int Option)
If (Option == ArrowWidget)
SetInfoText("Turn on/off Arrow Counter! Default: on")
ElseIf (Option == ArrowPosX)
SetInfoText("Set the horizontal position of the Arrow Widget!")
ElseIf (Option == ArrowPosY)
SetInfoText("Set the vertical position of the Arrow Widget!")
ElseIf (Option == ArrowAnchorH)
SetInfoText("Set the horizontal anchor of the Arrow Widget! Used for faster replacement ")
ElseIf (Option == ArrowAnchorV)
SetInfoText("Set the vertical anchor of the Arrow Widget! Used for faster replacement ")
ElseIf (Option == WeightWidget)
SetInfoText("Turn on/off Weight Counter! Default: on")
ElseIf (Option == WeightPosX)
SetInfoText("Set the horizontal position of the Weight Widget!")
ElseIf (Option == WeightPosY)
SetInfoText("Set the vertical position of the Weight Widget!")
ElseIf (Option == WeightAnchorH)
SetInfoText("Set the horizontal anchor of the Weight Widget! Used for faster replacement ")
ElseIf (Option == WeightAnchorV)
SetInfoText("Set the vertical anchor of the Weight Widget! Used for faster replacement ")
ElseIf (Option == GoldWidget)
SetInfoText("Turn on/off Gold Counter! Default: on")
ElseIf (Option == GoldPosX)
SetInfoText("Set the horizontal position of the Gold Widget!")
ElseIf (Option == GoldPosY)
SetInfoText("Set the vertical position of the Gold Widget!")
ElseIf (Option == GoldAnchorH)
SetInfoText("Set the horizontal anchor of the Gold Widget! Used for faster replacement ")
ElseIf (Option == GoldAnchorV)
SetInfoText("Set the vertical anchor of the Gold Widget! Used for faster replacement ")
ElseIf (Option == BountyWidget)
SetInfoText("Turn on/off Bounty Counter! Default: on")
ElseIf (Option == BountyPosX)
SetInfoText("Set the horizontal position of the Bounty Widget!")
ElseIf (Option == BountyPosY)
SetInfoText("Set the vertical position of the Bounty Widget!")
ElseIf (Option == BountyAnchorH)
SetInfoText("Set the horizontal anchor of the Bounty Widget! Used for faster replacement ")
ElseIf (Option == BountyAnchorV)
SetInfoText("Set the vertical anchor of the Bounty Widget! Used for faster replacement ")
ElseIf (Option == SkillWidget)
SetInfoText("Turn on/off Skill Counter! Default: on")
ElseIf (Option == SkillPosX)
SetInfoText("Set the horizontal position of the Skill Widget!")
ElseIf (Option == SkillPosY)
SetInfoText("Set the vertical position of the Skill Widget!")
ElseIf (Option == SkillAnchorH)
SetInfoText("Set the horizontal anchor of the Skill Widget! Used for faster replacement ")
ElseIf (Option == SkillAnchorV)
SetInfoText("Set the vertical anchor of the Skill Widget! Used for faster replacement ")
ElseIf (Option == SpeedWidget)
SetInfoText("Turn on/off Speed Counter! Default: on")
ElseIf (Option == SpeedPosX)
SetInfoText("Set the horizontal position of the Speed Widget!")
ElseIf (Option == SpeedPosY)
SetInfoText("Set the vertical position of the Speed Widget!")
ElseIf (Option == SpeedAnchorH)
SetInfoText("Set the horizontal anchor of the Speed Widget! Used for faster replacement ")
ElseIf (Option == SpeedAnchorV)
SetInfoText("Set the vertical anchor of the Speed Widget! Used for faster replacement ")
ElseIf (Option == LockpickWidget)
SetInfoText("Turn on/off Lockpick Counter! Default: on")
ElseIf (Option == LockpickPosX)
SetInfoText("Set the horizontal position of the Lockpick Widget!")
ElseIf (Option == LockpickPosY)
SetInfoText("Set the vertical position of the Lockpick Widget!")
ElseIf (Option == LockpickAnchorH)
SetInfoText("Set the horizontal anchor of the Lockpick Widget! Used for faster replacement ")
ElseIf (Option == LockpickAnchorV)
SetInfoText("Set the vertical anchor of the Lockpick Widget! Used for faster replacement ")
ElseIf (Option == LightWidget)
SetInfoText("Turn on/off Light Counter! Default: on")
ElseIf (Option == LightPosX)
SetInfoText("Set the horizontal position of the Light Widget!")
ElseIf (Option == LightPosY)
SetInfoText("Set the vertical position of the Light Widget!")
ElseIf (Option == LightAnchorH)
SetInfoText("Set the horizontal anchor of the Light Widget! Used for faster replacement ")
ElseIf (Option == LightAnchorV)
SetInfoText("Set the vertical anchor of the Light Widget! Used for faster replacement ")
ElseIf (Option == HotkeyWidget)
SetInfoText("Turn on/off Hotkey Counter! Default: on")
ElseIf (Option == HotkeyPosX)
SetInfoText("Set the horizontal position of the Hotkey Widget!")
ElseIf (Option == HotkeyPosY)
SetInfoText("Set the vertical position of the Hotkey Widget!")
ElseIf (Option == HotkeyAnchorH)
SetInfoText("Set the horizontal anchor of the Hotkey Widget! Used for faster replacement ")
ElseIf (Option == HotkeyAnchorV)
SetInfoText("Set the vertical anchor of the Hotkey Widget! Used for faster replacement ")
ElseIf (Option == HorseWidget)
SetInfoText("Turn on/off Horse Counter! Default: on")
ElseIf (Option == HorsePosX)
SetInfoText("Set the horizontal position of the Horse Widget!")
ElseIf (Option == HorsePosY)
SetInfoText("Set the vertical position of the Horse Widget!")
ElseIf (Option == HorseAnchorH)
SetInfoText("Set the horizontal anchor of the Horse Widget! Used for faster replacement ")
ElseIf (Option == HorseAnchorV)
SetInfoText("Set the vertical anchor of the Horse Widget! Used for faster replacement ")
ElseIf (Option == FollowerWidget)
SetInfoText("Turn on/off Follower Counter! Default: on")
ElseIf (Option == FollowerPosX)
SetInfoText("Set the horizontal position of the Follower Widget!")
ElseIf (Option == FollowerPosY)
SetInfoText("Set the vertical position of the Follower Widget!")
ElseIf (Option == FollowerAnchorH)
SetInfoText("Set the horizontal anchor of the Follower Widget! Used for faster replacement ")
ElseIf (Option == FollowerAnchorV)
SetInfoText("Set the vertical anchor of the Follower Widget! Used for faster replacement ")
ElseIf (Option == AttributeWidget)
SetInfoText("Turn on/off Attribute Counter! Default: on")
ElseIf (Option == AttributePosX)
SetInfoText("Set the horizontal position of the Attribute Widget!")
ElseIf (Option == AttributePosY)
SetInfoText("Set the vertical position of the Attribute Widget!")
ElseIf (Option == AttributeAnchorH)
SetInfoText("Set the horizontal anchor of the Attribute Widget! Used for faster replacement ")
ElseIf (Option == AttributeAnchorV)
SetInfoText("Set the vertical anchor of the Attribute Widget! Used for faster replacement ")
ElseIf (Option == ArrowAlpha)
SetInfoText("Set the transparency of the Arrow Widget!")
ElseIf (Option == WeightAlpha)
SetInfoText("Set the transparency of the Weight Widget!")
ElseIf (Option == GoldAlpha)
SetInfoText("Set the transparency of the Gold Widget!")
ElseIf (Option == BountyAlpha)
SetInfoText("Set the transparency of the Bounty Widget!")
ElseIf (Option == SkillAlpha)
SetInfoText("Set the transparency of the Skill Widget!")
ElseIf (Option == SpeedAlpha)
SetInfoText("Set the transparency of the Speed Widget!")
ElseIf (Option == LockpickAlpha)
SetInfoText("Set the transparency of the Lockpick Widget!")
ElseIf (Option == LightAlpha)
SetInfoText("Set the transparency of the Light Widget!")
ElseIf (Option == HotkeyAlpha)
SetInfoText("Set the transparency of the Hotkey Widget!")
ElseIf (Option == HorseAlpha)
SetInfoText("Set the transparency of the Horse Widget!")
ElseIf (Option == FollowerAlpha)
SetInfoText("Set the transparency of the Follower Widget!")
ElseIf (Option == AttributeAlpha)
SetInfoText("Set the transparency of the Attribute Widget!")
ElseIf (Option == ArrowScale)
SetInfoText("Set the size of the Arrow Widget!")
ElseIf (Option == WeightScale)
SetInfoText("Set the size of the Weight Widget!")
ElseIf (Option == GoldScale)
SetInfoText("Set the size of the Gold Widget!")
ElseIf (Option == BountyScale)
SetInfoText("Set the size of the Bounty Widget!")
ElseIf (Option == SkillScale)
SetInfoText("Set the size of the Skill Widget!")
ElseIf (Option == SpeedScale)
SetInfoText("Set the size of the Speed Widget!")
ElseIf (Option == LockpickScale)
SetInfoText("Set the size of the Lockpick Widget!")
ElseIf (Option == LightScale)
SetInfoText("Set the size of the Light Widget!")
ElseIf (Option == HotkeyScale)
SetInfoText("Set the size of the Hotkey Widget!")
ElseIf (Option == HorseScale)
SetInfoText("Set the size of the Horse Widget!")
ElseIf (Option == FollowerScale)
SetInfoText("Set the size of the Follower Widget!")
ElseIf (Option == AttributeScale)
SetInfoText("Set the size of the Attribute Widget!")
ElseIf (Option == UpdateTimerInt)
SetInfoText("Set the interval of the update script in seconds!")
ElseIf (Option == FissLoad)
SetInfoText("Load user preset from .xml!")
ElseIf (Option == FissSave)
SetInfoText("Save user preset to .xml!")
EndIf
EndEvent

Event OnOptionSelect(Int Option)
If (Option == ArrowWidget)
ArrowScript.Visible = !ArrowScript.Visible
SetToggleOptionValue(Option, ArrowScript.Visible)
ElseIf (Option == WeightWidget)
WeightScript.Visible = !WeightScript.Visible
SetToggleOptionValue(Option, WeightScript.Visible)
ElseIf (Option == GoldWidget)
GoldScript.Visible = !GoldScript.Visible
SetToggleOptionValue(Option, GoldScript.Visible)
ElseIf (Option == BountyWidget)
BountyScript.Visible = !BountyScript.Visible
SetToggleOptionValue(Option, BountyScript.Visible)
ElseIf (Option == SkillWidget)
SkillScript.Visible = !SkillScript.Visible
SetToggleOptionValue(Option, SkillScript.Visible)
ElseIf (Option == SpeedWidget)
SpeedScript.Visible = !SpeedScript.Visible
SetToggleOptionValue(Option, SpeedScript.Visible)
ElseIf (Option == LockpickWidget)
LockpickScript.Visible = !LockpickScript.Visible
SetToggleOptionValue(Option, LockpickScript.Visible)
ElseIf (Option == LightWidget)
LightScript.Visible = !LightScript.Visible
SetToggleOptionValue(Option, LightScript.Visible)
ElseIf (Option == HotkeyWidget)
HotkeyScript.Visible = !HotkeyScript.Visible
SetToggleOptionValue(Option, HotkeyScript.Visible)
ElseIf (Option == HorseWidget)
HorseScript.Visible = !HorseScript.Visible
SetToggleOptionValue(Option, HorseScript.Visible)
ElseIf (Option == FollowerWidget)
FollowerScript.Visible = !FollowerScript.Visible
SetToggleOptionValue(Option, FollowerScript.Visible)
ElseIf (Option == AttributeWidget)
AttributeScript.Visible = !AttributeScript.Visible
SetToggleOptionValue(Option, AttributeScript.Visible)
ElseIf (Option == FissLoad)
FISSInterface fiss = FISSFactory.getFISS()
If fiss
fiss.beginLoad("WMUserSettings.xml")
SetTextOptionValue(Option, "Done!")
LoadUserPreset()
Else
Debug.Messagebox("FISS not found, load aborted!")
EndIf
ElseIf (Option == FissSave)
FISSInterface fiss = FISSFactory.getFISS()
fiss.beginLoad("WMUserSettings.xml")
If fiss
SetTextOptionValue(Option, "Done!")
SaveUserPreset()
Else
Debug.Messagebox("FISS not found, save aborted!")
EndIf
EndIf
EndEvent

Event OnOptionSliderOpen(Int Option)
If (Option == ArrowPosX)
SetSliderDialogStartValue(ArrowScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(10.00)
ElseIf (Option == ArrowPosY)
SetSliderDialogStartValue(ArrowScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(710.00)
ElseIf (Option == WeightPosX)
SetSliderDialogStartValue(WeightScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(60.00)
ElseIf (Option == WeightPosY)
SetSliderDialogStartValue(WeightScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(710.00)
ElseIf (Option == GoldPosX)
SetSliderDialogStartValue(GoldScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(118.00)
ElseIf (Option == GoldPosY)
SetSliderDialogStartValue(GoldScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(711.00)
ElseIf (Option == BountyPosX)
SetSliderDialogStartValue(BountyScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == BountyPosY)
SetSliderDialogStartValue(BountyScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == SkillPosX)
SetSliderDialogStartValue(SkillScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == SkillPosY)
SetSliderDialogStartValue(SkillScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == SpeedPosX)
SetSliderDialogStartValue(SpeedScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == SpeedPosY)
SetSliderDialogStartValue(SpeedScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == LockpickPosX)
SetSliderDialogStartValue(LockpickScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == LockpickPosY)
SetSliderDialogStartValue(LockpickScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == LightPosX)
SetSliderDialogStartValue(LightScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == LightPosY)
SetSliderDialogStartValue(LightScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == HotkeyPosX)
SetSliderDialogStartValue(HotkeyScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == HotkeyPosY)
SetSliderDialogStartValue(HotkeyScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == HorsePosX)
SetSliderDialogStartValue(HorseScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == HorsePosY)
SetSliderDialogStartValue(HorseScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == FollowerPosX)
SetSliderDialogStartValue(FollowerScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == FollowerPosY)
SetSliderDialogStartValue(FollowerScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == AttributePosX)
SetSliderDialogStartValue(AttributeScript.X)
SetSliderDialogRange(-100.00, 1380.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(165.00)
ElseIf (Option == AttributePosY)
SetSliderDialogStartValue(AttributeScript.Y)
SetSliderDialogRange(-100.00, 820.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(712.00)
ElseIf (Option == ArrowAlpha)
SetSliderDialogStartValue(ArrowScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == WeightAlpha)
SetSliderDialogStartValue(WeightScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == GoldAlpha)
SetSliderDialogStartValue(GoldScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == BountyAlpha)
SetSliderDialogStartValue(BountyScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == SkillAlpha)
SetSliderDialogStartValue(SkillScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == SpeedAlpha)
SetSliderDialogStartValue(SpeedScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == LockpickAlpha)
SetSliderDialogStartValue(LockpickScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == LightAlpha)
SetSliderDialogStartValue(LightScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == HotkeyAlpha)
SetSliderDialogStartValue(HotkeyScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == HorseAlpha)
SetSliderDialogStartValue(HorseScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == FollowerAlpha)
SetSliderDialogStartValue(FollowerScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == AttributeAlpha)
SetSliderDialogStartValue(AttributeScript.Alpha)
SetSliderDialogRange(0.00, 100.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == ArrowScale)
SetSliderDialogStartValue(ArrowScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == WeightScale)
SetSliderDialogStartValue(WeightScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == GoldScale)
SetSliderDialogStartValue(GoldScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == BountyScale)
SetSliderDialogStartValue(BountyScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == SkillScale)
SetSliderDialogStartValue(SkillScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == SpeedScale)
SetSliderDialogStartValue(SpeedScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == LockpickScale)
SetSliderDialogStartValue(LockpickScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == LightScale)
SetSliderDialogStartValue(LightScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == HotkeyScale)
SetSliderDialogStartValue(HotkeyScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == HorseScale)
SetSliderDialogStartValue(HorseScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == FollowerScale)
SetSliderDialogStartValue(FollowerScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == AttributeScale)
SetSliderDialogStartValue(AttributeScript.Size)
SetSliderDialogRange(1.00, 1000.00)
SetSliderDialogInterval(1.00)
SetSliderDialogDefaultValue(100.00)
ElseIf (Option == UpdateTimerInt)
SetSliderDialogStartValue(UpdateScript.UpdateTimer)
SetSliderDialogRange(0.1, 10.00)
SetSliderDialogInterval(0.1)
SetSliderDialogDefaultValue(0.25)
EndIf
EndEvent

Event OnOptionSliderAccept(Int Option, Float Value)
If (Option == ArrowPosX)
ArrowScript.SetX(Value)
SetSliderOptionValue(Option, ArrowScript.X, "{0}")
ElseIf (Option == ArrowPosY)
ArrowScript.SetY(Value)
SetSliderOptionValue(Option, ArrowScript.Y, "{0}")
ElseIf (Option == WeightPosX)
WeightScript.SetX(Value)
SetSliderOptionValue(Option, WeightScript.X, "{0}")
ElseIf (Option == WeightPosY)
WeightScript.SetY(Value)
SetSliderOptionValue(Option, WeightScript.Y, "{0}")
ElseIf (Option == GoldPosX)
GoldScript.SetX(Value)
SetSliderOptionValue(Option, GoldScript.X, "{0}")
ElseIf (Option == GoldPosY)
GoldScript.SetY(Value)
SetSliderOptionValue(Option, GoldScript.Y, "{0}")
ElseIf (Option == BountyPosX)
BountyScript.SetX(Value)
SetSliderOptionValue(Option, BountyScript.X, "{0}")
ElseIf (Option == BountyPosY)
BountyScript.SetY(Value)
SetSliderOptionValue(Option, BountyScript.Y, "{0}")
ElseIf (Option == SkillPosX)
SkillScript.SetX(Value)
SetSliderOptionValue(Option, SkillScript.X, "{0}")
ElseIf (Option == SkillPosY)
SkillScript.SetY(Value)
SetSliderOptionValue(Option, SkillScript.Y, "{0}")
ElseIf (Option == SpeedPosX)
SpeedScript.SetX(Value)
SetSliderOptionValue(Option, SpeedScript.X, "{0}")
ElseIf (Option == SpeedPosY)
SpeedScript.SetY(Value)
SetSliderOptionValue(Option, SpeedScript.Y, "{0}")
ElseIf (Option == LockpickPosX)
LockpickScript.SetX(Value)
SetSliderOptionValue(Option, LockpickScript.X, "{0}")
ElseIf (Option == LockpickPosY)
LockpickScript.SetY(Value)
SetSliderOptionValue(Option, LockpickScript.Y, "{0}")
ElseIf (Option == LightPosX)
LightScript.SetX(Value)
SetSliderOptionValue(Option, LightScript.X, "{0}")
ElseIf (Option == LightPosY)
LightScript.SetY(Value)
SetSliderOptionValue(Option, LightScript.Y, "{0}")
ElseIf (Option == HotkeyPosX)
HotkeyScript.SetX(Value)
SetSliderOptionValue(Option, HotkeyScript.X, "{0}")
ElseIf (Option == HotkeyPosY)
HotkeyScript.SetY(Value)
SetSliderOptionValue(Option, HotkeyScript.Y, "{0}")
ElseIf (Option == HorsePosX)
HorseScript.SetX(Value)
SetSliderOptionValue(Option, HorseScript.X, "{0}")
ElseIf (Option == HorsePosY)
HorseScript.SetY(Value)
SetSliderOptionValue(Option, HorseScript.Y, "{0}")
ElseIf (Option == FollowerPosX)
FollowerScript.SetX(Value)
SetSliderOptionValue(Option, FollowerScript.X, "{0}")
ElseIf (Option == FollowerPosY)
FollowerScript.SetY(Value)
SetSliderOptionValue(Option, FollowerScript.Y, "{0}")
ElseIf (Option == AttributePosX)
AttributeScript.SetX(Value)
SetSliderOptionValue(Option, AttributeScript.X, "{0}")
ElseIf (Option == AttributePosY)
AttributeScript.SetY(Value)
SetSliderOptionValue(Option, AttributeScript.Y, "{0}")
ElseIf (Option == ArrowAlpha)
ArrowScript.SetTransparency(Value)
SetSliderOptionValue(Option, ArrowScript.Alpha, "{0}")
ElseIf (Option == WeightAlpha)
WeightScript.SetTransparency(Value)
SetSliderOptionValue(Option, WeightScript.Alpha, "{0}")
ElseIf (Option == GoldAlpha)
GoldScript.SetTransparency(Value)
SetSliderOptionValue(Option, GoldScript.Alpha, "{0}")
ElseIf (Option == BountyAlpha)
BountyScript.SetTransparency(Value)
SetSliderOptionValue(Option, BountyScript.Alpha, "{0}")
ElseIf (Option == SkillAlpha)
SkillScript.SetTransparency(Value)
SetSliderOptionValue(Option, SkillScript.Alpha, "{0}")
ElseIf (Option == SpeedAlpha)
SpeedScript.SetTransparency(Value)
SetSliderOptionValue(Option, SpeedScript.Alpha, "{0}")
ElseIf (Option == LockpickAlpha)
LockpickScript.SetTransparency(Value)
SetSliderOptionValue(Option, LockpickScript.Alpha, "{0}")
ElseIf (Option == LightAlpha)
LightScript.SetTransparency(Value)
SetSliderOptionValue(Option, LightScript.Alpha, "{0}")
ElseIf (Option == HotkeyAlpha)
HotkeyScript.SetTransparency(Value)
SetSliderOptionValue(Option, HotkeyScript.Alpha, "{0}")
ElseIf (Option == HorseAlpha)
HorseScript.SetTransparency(Value)
SetSliderOptionValue(Option, HorseScript.Alpha, "{0}")
ElseIf (Option == FollowerAlpha)
FollowerScript.SetTransparency(Value)
SetSliderOptionValue(Option, FollowerScript.Alpha, "{0}")
ElseIf (Option == AttributeAlpha)
AttributeScript.SetTransparency(Value)
SetSliderOptionValue(Option, AttributeScript.Alpha, "{0}")
ElseIf (Option == ArrowScale)
ArrowScript.Size = Value as Int
SetSliderOptionValueST(Option, ArrowScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == WeightScale)
WeightScript.Size = Value as Int
SetSliderOptionValue(Option, WeightScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == GoldScale)
GoldScript.Size = Value as Int
SetSliderOptionValue(Option, GoldScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == BountyScale)
BountyScript.Size = Value as Int
SetSliderOptionValue(Option, BountyScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == SkillScale)
SkillScript.Size = Value as Int
SetSliderOptionValue(Option, SkillScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == SpeedScale)
SpeedScript.Size = Value as Int
SetSliderOptionValue(Option, SpeedScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == LockpickScale)
LockpickScript.Size = Value as Int
SetSliderOptionValue(Option, LockpickScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == LightScale)
LightScript.Size = Value as Int
SetSliderOptionValue(Option, LightScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == HotkeyScale)
HotkeyScript.Size = Value as Int
SetSliderOptionValue(Option, HotkeyScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == HorseScale)
HorseScript.Size = Value as Int
SetSliderOptionValue(Option, HorseScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == FollowerScale)
FollowerScript.Size = Value as Int
SetSliderOptionValue(Option, FollowerScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == AttributeScale)
AttributeScript.Size = Value as Int
SetSliderOptionValue(Option, AttributeScript.Size, "{0}%")
ForcePageReset()
ElseIf (Option == UpdateTimerInt)
UpdateScript.UpdateTimer = Value
SetSliderOptionValue(Option, UpdateScript.UpdateTimer, "{0} sec.")
ForcePageReset()
EndIf
EndEvent

Event OnOptionMenuOpen(Int Option)
If (Option == ArrowAnchorH)
SetMenuDialogStartIndex(HAnchorArrowString.Find(ArrowScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorArrowString)
ElseIf (Option == ArrowAnchorV)
SetMenuDialogStartIndex(VAnchorArrowString.Find(ArrowScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorArrowString)
ElseIf (Option == WeightAnchorH)
SetMenuDialogStartIndex(HAnchorWeightString.Find(WeightScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorWeightString)
ElseIf (Option == WeightAnchorV)
SetMenuDialogStartIndex(VAnchorWeightString.Find(WeightScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorWeightString)
ElseIf (Option == GoldAnchorH)
SetMenuDialogStartIndex(HAnchorGoldString.Find(GoldScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorGoldString)
ElseIf (Option == GoldAnchorV)
SetMenuDialogStartIndex(VAnchorGoldString.Find(GoldScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorGoldString)
ElseIf (Option == BountyAnchorH)
SetMenuDialogStartIndex(HAnchorBountyString.Find(BountyScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorBountyString)
ElseIf (Option == BountyAnchorV)
SetMenuDialogStartIndex(VAnchorBountyString.Find(BountyScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorBountyString)
ElseIf (Option == SkillAnchorH)
SetMenuDialogStartIndex(HAnchorSkillString.Find(SkillScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorSkillString)
ElseIf (Option == SkillAnchorV)
SetMenuDialogStartIndex(VAnchorSkillString.Find(SkillScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorSkillString)
ElseIf (Option == SpeedAnchorH)
SetMenuDialogStartIndex(HAnchorSpeedString.Find(SpeedScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorSpeedString)
ElseIf (Option == SpeedAnchorV)
SetMenuDialogStartIndex(VAnchorSpeedString.Find(SpeedScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorSpeedString)
ElseIf (Option == LockpickAnchorH)
SetMenuDialogStartIndex(HAnchorLockpickString.Find(LockpickScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorLockpickString)
ElseIf (Option == LockpickAnchorV)
SetMenuDialogStartIndex(VAnchorLockpickString.Find(LockpickScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorLockpickString)
ElseIf (Option == LightAnchorH)
SetMenuDialogStartIndex(HAnchorLightString.Find(LightScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorLightString)
ElseIf (Option == LightAnchorV)
SetMenuDialogStartIndex(VAnchorLightString.Find(LightScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorLightString)
ElseIf (Option == HotkeyAnchorH)
SetMenuDialogStartIndex(HAnchorHotkeyString.Find(HotkeyScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorHotkeyString)
ElseIf (Option == HotkeyAnchorV)
SetMenuDialogStartIndex(VAnchorHotkeyString.Find(HotkeyScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorHotkeyString)
ElseIf (Option == HorseAnchorH)
SetMenuDialogStartIndex(HAnchorHorseString.Find(HorseScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorHorseString)
ElseIf (Option == HorseAnchorV)
SetMenuDialogStartIndex(VAnchorHorseString.Find(HorseScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorHorseString)
ElseIf (Option == FollowerAnchorH)
SetMenuDialogStartIndex(HAnchorFollowerString.Find(FollowerScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorFollowerString)
ElseIf (Option == FollowerAnchorV)
SetMenuDialogStartIndex(VAnchorFollowerString.Find(FollowerScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorFollowerString)
ElseIf (Option == AttributeAnchorH)
SetMenuDialogStartIndex(HAnchorAttributeString.Find(AttributeScript.HAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(HAnchorAttributeString)
ElseIf (Option == AttributeAnchorV)
SetMenuDialogStartIndex(VAnchorAttributeString.Find(AttributeScript.VAnchor))
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(VAnchorAttributeString)
EndIf
EndEvent

Event OnOptionMenuAccept(Int Option, Int Index)
If (Option == ArrowAnchorH)
ArrowScript.HAnchor = HAnchorArrowString[Index]
SetMenuOptionValue(Option, HAnchorArrowString[HAnchorArrowString.Find(ArrowScript.HAnchor)])
If Index == 0
ArrowScript.X = 10
ForcePageReset()
ElseIf Index == 1
ArrowScript.X = 1270
ForcePageReset()
ElseIf Index == 2
ArrowScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == ArrowAnchorV)
ArrowScript.VAnchor = VAnchorArrowString[Index]
SetMenuOptionValue(Option, VAnchorArrowString[VAnchorArrowString.Find(ArrowScript.VAnchor)])
If Index == 0
ArrowScript.Y = 710
ForcePageReset()
ElseIf Index == 1
ArrowScript.Y = 10
ForcePageReset()
ElseIf Index == 2
ArrowScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == WeightAnchorH)
WeightScript.HAnchor = HAnchorWeightString[Index]
SetMenuOptionValue(Option, HAnchorWeightString[HAnchorWeightString.Find(WeightScript.HAnchor)])
If Index == 0
WeightScript.X = 10
ForcePageReset()
ElseIf Index == 1
WeightScript.X = 1270
ForcePageReset()
ElseIf Index == 2
WeightScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == WeightAnchorV)
WeightScript.VAnchor = VAnchorWeightString[Index]
SetMenuOptionValue(Option, VAnchorWeightString[VAnchorWeightString.Find(WeightScript.VAnchor)])
If Index == 0
WeightScript.Y = 710
ForcePageReset()
ElseIf Index == 1
WeightScript.Y = 10
ForcePageReset()
ElseIf Index == 2
WeightScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == GoldAnchorH)
GoldScript.HAnchor = HAnchorGoldString[Index]
SetMenuOptionValue(Option, HAnchorGoldString[HAnchorGoldString.Find(GoldScript.HAnchor)])
If Index == 0
GoldScript.X = 10
ForcePageReset()
ElseIf Index == 1
GoldScript.X = 1270
ForcePageReset()
ElseIf Index == 2
GoldScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == GoldAnchorV)
GoldScript.VAnchor = VAnchorGoldString[Index]
SetMenuOptionValue(Option, VAnchorGoldString[VAnchorGoldString.Find(GoldScript.VAnchor)])
If Index == 0
GoldScript.Y = 710
ForcePageReset()
ElseIf Index == 1
GoldScript.Y = 10
ForcePageReset()
ElseIf Index == 2
GoldScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == BountyAnchorH)
BountyScript.HAnchor = HAnchorBountyString[Index]
SetMenuOptionValue(Option, HAnchorBountyString[HAnchorBountyString.Find(BountyScript.HAnchor)])
If Index == 0
BountyScript.X = 10
ForcePageReset()
ElseIf Index == 1
BountyScript.X = 1270
ForcePageReset()
ElseIf Index == 2
BountyScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == BountyAnchorV)
BountyScript.VAnchor = VAnchorBountyString[Index]
SetMenuOptionValue(Option, VAnchorBountyString[VAnchorBountyString.Find(BountyScript.VAnchor)])
If Index == 0
BountyScript.Y = 710
ForcePageReset()
ElseIf Index == 1
BountyScript.Y = 10
ForcePageReset()
ElseIf Index == 2
BountyScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == SkillAnchorH)
SkillScript.HAnchor = HAnchorSkillString[Index]
SetMenuOptionValue(Option, HAnchorSkillString[HAnchorSkillString.Find(SkillScript.HAnchor)])
If Index == 0
SkillScript.X = 10
ForcePageReset()
ElseIf Index == 1
SkillScript.X = 1270
ForcePageReset()
ElseIf Index == 2
SkillScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == SkillAnchorV)
SkillScript.VAnchor = VAnchorSkillString[Index]
SetMenuOptionValue(Option, VAnchorSkillString[VAnchorSkillString.Find(SkillScript.VAnchor)])
If Index == 0
SkillScript.Y = 710
ForcePageReset()
ElseIf Index == 1
SkillScript.Y = 10
ForcePageReset()
ElseIf Index == 2
SkillScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == SpeedAnchorH)
SpeedScript.HAnchor = HAnchorSpeedString[Index]
SetMenuOptionValue(Option, HAnchorSpeedString[HAnchorSpeedString.Find(SpeedScript.HAnchor)])
If Index == 0
SpeedScript.X = 10
ForcePageReset()
ElseIf Index == 1
SpeedScript.X = 1270
ForcePageReset()
ElseIf Index == 2
SpeedScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == SpeedAnchorV)
SpeedScript.VAnchor = VAnchorSpeedString[Index]
SetMenuOptionValue(Option, VAnchorSpeedString[VAnchorSpeedString.Find(SpeedScript.VAnchor)])
If Index == 0
SpeedScript.Y = 710
ForcePageReset()
ElseIf Index == 1
SpeedScript.Y = 10
ForcePageReset()
ElseIf Index == 2
SpeedScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == LockpickAnchorH)
LockpickScript.HAnchor = HAnchorLockpickString[Index]
SetMenuOptionValue(Option, HAnchorLockpickString[HAnchorLockpickString.Find(LockpickScript.HAnchor)])
If Index == 0
LockpickScript.X = 10
ForcePageReset()
ElseIf Index == 1
LockpickScript.X = 1270
ForcePageReset()
ElseIf Index == 2
LockpickScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == LockpickAnchorV)
LockpickScript.VAnchor = VAnchorLockpickString[Index]
SetMenuOptionValue(Option, VAnchorLockpickString[VAnchorLockpickString.Find(LockpickScript.VAnchor)])
If Index == 0
LockpickScript.Y = 710
ForcePageReset()
ElseIf Index == 1
LockpickScript.Y = 10
ForcePageReset()
ElseIf Index == 2
LockpickScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == LightAnchorH)
LightScript.HAnchor = HAnchorLightString[Index]
SetMenuOptionValue(Option, HAnchorLightString[HAnchorLightString.Find(LightScript.HAnchor)])
If Index == 0
LightScript.X = 10
ForcePageReset()
ElseIf Index == 1
LightScript.X = 1270
ForcePageReset()
ElseIf Index == 2
LightScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == LightAnchorV)
LightScript.VAnchor = VAnchorLightString[Index]
SetMenuOptionValue(Option, VAnchorLightString[VAnchorLightString.Find(LightScript.VAnchor)])
If Index == 0
LightScript.Y = 710
ForcePageReset()
ElseIf Index == 1
LightScript.Y = 10
ForcePageReset()
ElseIf Index == 2
LightScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == HotkeyAnchorH)
HotkeyScript.HAnchor = HAnchorHotkeyString[Index]
SetMenuOptionValue(Option, HAnchorHotkeyString[HAnchorHotkeyString.Find(HotkeyScript.HAnchor)])
If Index == 0
HotkeyScript.X = 10
ForcePageReset()
ElseIf Index == 1
HotkeyScript.X = 1270
ForcePageReset()
ElseIf Index == 2
HotkeyScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == HotkeyAnchorV)
HotkeyScript.VAnchor = VAnchorHotkeyString[Index]
SetMenuOptionValue(Option, VAnchorHotkeyString[VAnchorHotkeyString.Find(HotkeyScript.VAnchor)])
If Index == 0
HotkeyScript.Y = 710
ForcePageReset()
ElseIf Index == 1
HotkeyScript.Y = 10
ForcePageReset()
ElseIf Index == 2
HotkeyScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == HorseAnchorH)
HorseScript.HAnchor = HAnchorHorseString[Index]
SetMenuOptionValue(Option, HAnchorHorseString[HAnchorHorseString.Find(HorseScript.HAnchor)])
If Index == 0
HorseScript.X = 10
ForcePageReset()
ElseIf Index == 1
HorseScript.X = 1270
ForcePageReset()
ElseIf Index == 2
HorseScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == HorseAnchorV)
HorseScript.VAnchor = VAnchorHorseString[Index]
SetMenuOptionValue(Option, VAnchorHorseString[VAnchorHorseString.Find(HorseScript.VAnchor)])
If Index == 0
HorseScript.Y = 710
ForcePageReset()
ElseIf Index == 1
HorseScript.Y = 10
ForcePageReset()
ElseIf Index == 2
HorseScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == FollowerAnchorH)
FollowerScript.HAnchor = HAnchorFollowerString[Index]
SetMenuOptionValue(Option, HAnchorFollowerString[HAnchorFollowerString.Find(FollowerScript.HAnchor)])
If Index == 0
FollowerScript.X = 10
ForcePageReset()
ElseIf Index == 1
FollowerScript.X = 1270
ForcePageReset()
ElseIf Index == 2
FollowerScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == FollowerAnchorV)
FollowerScript.VAnchor = VAnchorFollowerString[Index]
SetMenuOptionValue(Option, VAnchorFollowerString[VAnchorFollowerString.Find(FollowerScript.VAnchor)])
If Index == 0
FollowerScript.Y = 710
ForcePageReset()
ElseIf Index == 1
FollowerScript.Y = 10
ForcePageReset()
ElseIf Index == 2
FollowerScript.Y = 350
ForcePageReset()
EndIf
ElseIf (Option == AttributeAnchorH)
AttributeScript.HAnchor = HAnchorAttributeString[Index]
SetMenuOptionValue(Option, HAnchorAttributeString[HAnchorAttributeString.Find(AttributeScript.HAnchor)])
If Index == 0
AttributeScript.X = 10
ForcePageReset()
ElseIf Index == 1
AttributeScript.X = 1270
ForcePageReset()
ElseIf Index == 2
AttributeScript.X = 630
ForcePageReset()
EndIf
ElseIf (Option == AttributeAnchorV)
AttributeScript.VAnchor = VAnchorAttributeString[Index]
SetMenuOptionValue(Option, VAnchorAttributeString[VAnchorAttributeString.Find(AttributeScript.VAnchor)])
If Index == 0
AttributeScript.Y = 710
ForcePageReset()
ElseIf Index == 1
AttributeScript.Y = 10
ForcePageReset()
ElseIf Index == 2
AttributeScript.Y = 350
ForcePageReset()
EndIf
EndIf
EndEvent

Function LoadUserPreset()

FISSInterface fiss = FISSFactory.getFISS()
fiss.beginLoad("WMUserSettings.xml")

ArrowWidget = fiss.loadInt("FISS_ArrowWidget")
ArrowScript.Visible = fiss.loadBool("FISS_ArrowWidgetScript")
ArrowPosX = fiss.loadInt("FISS_ArrowPosX")
ArrowScript.X = fiss.loadFloat("FISS_ArrowPosXScript")
ArrowPosY = fiss.loadInt("FISS_ArrowPosY")
ArrowScript.Y = fiss.loadFloat("FISS_ArrowPosYScript")
ArrowAlpha = fiss.loadInt("FISS_ArrowAlpha")
ArrowScript.Alpha = fiss.loadFloat("FISS_ArrowAlphaScript")
ArrowScale = fiss.loadInt("FISS_ArrowScale")
ArrowScript.Size = fiss.loadInt("FISS_ArrowScaleScript")
WeightWidget = fiss.loadInt("FISS_WeightWidget")
WeightScript.Visible = fiss.loadBool("FISS_WeightWidgetScript")
WeightPosX = fiss.loadInt("FISS_WeightPosX")
WeightScript.X = fiss.loadFloat("FISS_WeightPosXScript")
WeightPosY = fiss.loadInt("FISS_WeightPosY")
WeightScript.Y = fiss.loadFloat("FISS_WeightPosYScript")
WeightAlpha = fiss.loadInt("FISS_WeightAlpha")
WeightScript.Alpha = fiss.loadFloat("FISS_WeightAlphaScript")
WeightScale = fiss.loadInt("FISS_WeightScale")
WeightScript.Size = fiss.loadInt("FISS_WeightScaleScript")
GoldWidget = fiss.loadInt("FISS_GoldWidget")
GoldScript.Visible = fiss.loadBool("FISS_GoldWidgetScript")
GoldPosX = fiss.loadInt("FISS_GoldPosX")
GoldScript.X = fiss.loadFloat("FISS_GoldPosXScript")
GoldPosY = fiss.loadInt("FISS_GoldPosY")
GoldScript.Y = fiss.loadFloat("FISS_GoldPosYScript")
GoldAlpha = fiss.loadInt("FISS_GoldAlpha")
GoldScript.Alpha = fiss.loadFloat("FISS_GoldAlphaScript")
GoldScale = fiss.loadInt("FISS_GoldScale")
GoldScript.Size = fiss.loadInt("FISS_GoldScaleScript")
BountyWidget = fiss.loadInt("FISS_BountyWidget")
BountyScript.Visible = fiss.loadBool("FISS_BountyWidgetScript")
BountyPosX = fiss.loadInt("FISS_BountyPosX")
BountyScript.X = fiss.loadFloat("FISS_BountyPosXScript")
BountyPosY = fiss.loadInt("FISS_BountyPosY")
BountyScript.Y = fiss.loadFloat("FISS_BountyPosYScript")
BountyAlpha = fiss.loadInt("FISS_BountyAlpha")
BountyScript.Alpha = fiss.loadFloat("FISS_BountyAlphaScript")
BountyScale = fiss.loadInt("FISS_BountyScale")
BountyScript.Size = fiss.loadInt("FISS_BountyScaleScript")
SkillWidget = fiss.loadInt("FISS_SkillWidget")
SkillScript.Visible = fiss.loadBool("FISS_SkillWidgetScript")
SkillPosX = fiss.loadInt("FISS_SkillPosX")
SkillScript.X = fiss.loadFloat("FISS_SkillPosXScript")
SkillPosY = fiss.loadInt("FISS_SkillPosY")
SkillScript.Y = fiss.loadFloat("FISS_SkillPosYScript")
SkillAlpha = fiss.loadInt("FISS_SkillAlpha")
SkillScript.Alpha = fiss.loadFloat("FISS_SkillAlphaScript")
SkillScale = fiss.loadInt("FISS_SkillScale")
SkillScript.Size = fiss.loadInt("FISS_SkillScaleScript")
SpeedWidget = fiss.loadInt("FISS_SpeedWidget")
SpeedScript.Visible = fiss.loadBool("FISS_SpeedWidgetScript")
SpeedPosX = fiss.loadInt("FISS_SpeedPosX")
SpeedScript.X = fiss.loadFloat("FISS_SpeedPosXScript")
SpeedPosY = fiss.loadInt("FISS_SpeedPosY")
SpeedScript.Y = fiss.loadFloat("FISS_SpeedPosYScript")
SpeedAlpha = fiss.loadInt("FISS_SpeedAlpha")
SpeedScript.Alpha = fiss.loadFloat("FISS_SpeedAlphaScript")
SpeedScale = fiss.loadInt("FISS_SpeedScale")
SpeedScript.Size = fiss.loadInt("FISS_SpeedScaleScript")
LockpickWidget = fiss.loadInt("FISS_LockpickWidget")
LockpickScript.Visible = fiss.loadBool("FISS_LockpickWidgetScript")
LockpickPosX = fiss.loadInt("FISS_LockpickPosX")
LockpickScript.X = fiss.loadFloat("FISS_LockpickPosXScript")
LockpickPosY = fiss.loadInt("FISS_LockpickPosY")
LockpickScript.Y = fiss.loadFloat("FISS_LockpickPosYScript")
LockpickAlpha = fiss.loadInt("FISS_LockpickAlpha")
LockpickScript.Alpha = fiss.loadFloat("FISS_LockpickAlphaScript")
LockpickScale = fiss.loadInt("FISS_LockpickScale")
LockpickScript.Size = fiss.loadInt("FISS_LockpickScaleScript")
LightWidget = fiss.loadInt("FISS_LightWidget")
LightScript.Visible = fiss.loadBool("FISS_LightWidgetScript")
LightPosX = fiss.loadInt("FISS_LightPosX")
LightScript.X = fiss.loadFloat("FISS_LightPosXScript")
LightPosY = fiss.loadInt("FISS_LightPosY")
LightScript.Y = fiss.loadFloat("FISS_LightPosYScript")
LightAlpha = fiss.loadInt("FISS_LightAlpha")
LightScript.Alpha = fiss.loadFloat("FISS_LightAlphaScript")
LightScale = fiss.loadInt("FISS_LightScale")
LightScript.Size = fiss.loadInt("FISS_LightScaleScript")
HotkeyWidget = fiss.loadInt("FISS_HotkeyWidget")
HotkeyScript.Visible = fiss.loadBool("FISS_HotkeyWidgetScript")
HotkeyPosX = fiss.loadInt("FISS_HotkeyPosX")
HotkeyScript.X = fiss.loadFloat("FISS_HotkeyPosXScript")
HotkeyPosY = fiss.loadInt("FISS_HotkeyPosY")
HotkeyScript.Y = fiss.loadFloat("FISS_HotkeyPosYScript")
HotkeyAlpha = fiss.loadInt("FISS_HotkeyAlpha")
HotkeyScript.Alpha = fiss.loadFloat("FISS_HotkeyAlphaScript")
HotkeyScale = fiss.loadInt("FISS_HotkeyScale")
HotkeyScript.Size = fiss.loadInt("FISS_HotkeyScaleScript")
HorseWidget = fiss.loadInt("FISS_HorseWidget")
HorseScript.Visible = fiss.loadBool("FISS_HorseWidgetScript")
HorsePosX = fiss.loadInt("FISS_HorsePosX")
HorseScript.X = fiss.loadFloat("FISS_HorsePosXScript")
HorsePosY = fiss.loadInt("FISS_HorsePosY")
HorseScript.Y = fiss.loadFloat("FISS_HorsePosYScript")
HorseAlpha = fiss.loadInt("FISS_HorseAlpha")
HorseScript.Alpha = fiss.loadFloat("FISS_HorseAlphaScript")
HorseScale = fiss.loadInt("FISS_HorseScale")
HorseScript.Size = fiss.loadInt("FISS_HorseScaleScript")
FollowerWidget = fiss.loadInt("FISS_FollowerWidget")
FollowerScript.Visible = fiss.loadBool("FISS_FollowerWidgetScript")
FollowerPosX = fiss.loadInt("FISS_FollowerPosX")
FollowerScript.X = fiss.loadFloat("FISS_FollowerPosXScript")
FollowerPosY = fiss.loadInt("FISS_FollowerPosY")
FollowerScript.Y = fiss.loadFloat("FISS_FollowerPosYScript")
FollowerAlpha = fiss.loadInt("FISS_FollowerAlpha")
FollowerScript.Alpha = fiss.loadFloat("FISS_FollowerAlphaScript")
FollowerScale = fiss.loadInt("FISS_FollowerScale")
FollowerScript.Size = fiss.loadInt("FISS_FollowerScaleScript")
AttributeWidget = fiss.loadInt("FISS_AttributeWidget")
AttributeScript.Visible = fiss.loadBool("FISS_AttributeWidgetScript")
AttributePosX = fiss.loadInt("FISS_AttributePosX")
AttributeScript.X = fiss.loadFloat("FISS_AttributePosXScript")
AttributePosY = fiss.loadInt("FISS_AttributePosY")
AttributeScript.Y = fiss.loadFloat("FISS_AttributePosYScript")
AttributeAlpha = fiss.loadInt("FISS_AttributeAlpha")
AttributeScript.Alpha = fiss.loadFloat("FISS_AttributeAlphaScript")
AttributeScale = fiss.loadInt("FISS_AttributeScale")
AttributeScript.Size = fiss.loadInt("FISS_AttributeScaleScript")

String loadResult = fiss.endLoad()

EndFunction

Function SaveUserPreset()

FISSInterface fiss = FISSFactory.getFISS()
fiss.beginSave("WMUserSettings.xml", " Widget Mod")

fiss.saveInt("FISS_ArrowWidget", ArrowWidget)
fiss.saveBool("FISS_ArrowWidgetScript", ArrowScript.Visible)
fiss.saveInt("FISS_ArrowPosX", ArrowPosX)
fiss.saveFloat("FISS_ArrowPosXScript", ArrowScript.X)
fiss.saveInt("FISS_ArrowPosY", ArrowPosY)
fiss.saveFloat("FISS_ArrowPosYScript", ArrowScript.Y)
fiss.saveInt("FISS_ArrowAlpha", ArrowAlpha)
fiss.saveFloat("FISS_ArrowAlphaScript", ArrowScript.Alpha)
fiss.saveInt("FISS_ArrowScale", ArrowScale)
fiss.saveInt("FISS_ArrowScaleScript", ArrowScript.Size)
fiss.saveInt("FISS_WeightWidget", WeightWidget)
fiss.saveBool("FISS_WeightWidgetScript", WeightScript.Visible)
fiss.saveInt("FISS_WeightPosX", WeightPosX)
fiss.saveFloat("FISS_WeightPosXScript", WeightScript.X)
fiss.saveInt("FISS_WeightPosY", WeightPosY)
fiss.saveFloat("FISS_WeightPosYScript", WeightScript.Y)
fiss.saveInt("FISS_WeightAlpha", WeightAlpha)
fiss.saveFloat("FISS_WeightAlphaScript", WeightScript.Alpha)
fiss.saveInt("FISS_WeightScale", WeightScale)
fiss.saveInt("FISS_WeightScaleScript", WeightScript.Size)
fiss.saveInt("FISS_GoldWidget", GoldWidget)
fiss.saveBool("FISS_GoldWidgetScript", GoldScript.Visible)
fiss.saveInt("FISS_GoldPosX", GoldPosX)
fiss.saveFloat("FISS_GoldPosXScript", GoldScript.X)
fiss.saveInt("FISS_GoldPosY", GoldPosY)
fiss.saveFloat("FISS_GoldPosYScript", GoldScript.Y)
fiss.saveInt("FISS_GoldAlpha", GoldAlpha)
fiss.saveFloat("FISS_GoldAlphaScript", GoldScript.Alpha)
fiss.saveInt("FISS_GoldScale", GoldScale)
fiss.saveInt("FISS_GoldScaleScript", GoldScript.Size)
fiss.saveInt("FISS_BountyWidget", BountyWidget)
fiss.saveBool("FISS_BountyWidgetScript", BountyScript.Visible)
fiss.saveInt("FISS_BountyPosX", BountyPosX)
fiss.saveFloat("FISS_BountyPosXScript", BountyScript.X)
fiss.saveInt("FISS_BountyPosY", BountyPosY)
fiss.saveFloat("FISS_BountyPosYScript", BountyScript.Y)
fiss.saveInt("FISS_BountyAlpha", BountyAlpha)
fiss.saveFloat("FISS_BountyAlphaScript", BountyScript.Alpha)
fiss.saveInt("FISS_BountyScale", BountyScale)
fiss.saveInt("FISS_BountyScaleScript", BountyScript.Size)
fiss.saveInt("FISS_SkillWidget", SkillWidget)
fiss.saveBool("FISS_SkillWidgetScript", SkillScript.Visible)
fiss.saveInt("FISS_SkillPosX", SkillPosX)
fiss.saveFloat("FISS_SkillPosXScript", SkillScript.X)
fiss.saveInt("FISS_SkillPosY", SkillPosY)
fiss.saveFloat("FISS_SkillPosYScript", SkillScript.Y)
fiss.saveInt("FISS_SkillAlpha", SkillAlpha)
fiss.saveFloat("FISS_SkillAlphaScript", SkillScript.Alpha)
fiss.saveInt("FISS_SkillScale", SkillScale)
fiss.saveInt("FISS_SkillScaleScript", SkillScript.Size)
fiss.saveInt("FISS_SpeedWidget", SpeedWidget)
fiss.saveBool("FISS_SpeedWidgetScript", SpeedScript.Visible)
fiss.saveInt("FISS_SpeedPosX", SpeedPosX)
fiss.saveFloat("FISS_SpeedPosXScript", SpeedScript.X)
fiss.saveInt("FISS_SpeedPosY", SpeedPosY)
fiss.saveFloat("FISS_SpeedPosYScript", SpeedScript.Y)
fiss.saveInt("FISS_SpeedAlpha", SpeedAlpha)
fiss.saveFloat("FISS_SpeedAlphaScript", SpeedScript.Alpha)
fiss.saveInt("FISS_SpeedScale", SpeedScale)
fiss.saveInt("FISS_SpeedScaleScript", SpeedScript.Size)
fiss.saveInt("FISS_LockpickWidget", LockpickWidget)
fiss.saveBool("FISS_LockpickWidgetScript", LockpickScript.Visible)
fiss.saveInt("FISS_LockpickPosX", LockpickPosX)
fiss.saveFloat("FISS_LockpickPosXScript", LockpickScript.X)
fiss.saveInt("FISS_LockpickPosY", LockpickPosY)
fiss.saveFloat("FISS_LockpickPosYScript", LockpickScript.Y)
fiss.saveInt("FISS_LockpickAlpha", LockpickAlpha)
fiss.saveFloat("FISS_LockpickAlphaScript", LockpickScript.Alpha)
fiss.saveInt("FISS_LockpickScale", LockpickScale)
fiss.saveInt("FISS_LockpickScaleScript", LockpickScript.Size)
fiss.saveInt("FISS_LightWidget", LightWidget)
fiss.saveBool("FISS_LightWidgetScript", LightScript.Visible)
fiss.saveInt("FISS_LightPosX", LightPosX)
fiss.saveFloat("FISS_LightPosXScript", LightScript.X)
fiss.saveInt("FISS_LightPosY", LightPosY)
fiss.saveFloat("FISS_LightPosYScript", LightScript.Y)
fiss.saveInt("FISS_LightAlpha", LightAlpha)
fiss.saveFloat("FISS_LightAlphaScript", LightScript.Alpha)
fiss.saveInt("FISS_LightScale", LightScale)
fiss.saveInt("FISS_LightScaleScript", LightScript.Size)
fiss.saveInt("FISS_HotkeyWidget", HotkeyWidget)
fiss.saveBool("FISS_HotkeyWidgetScript", HotkeyScript.Visible)
fiss.saveInt("FISS_HotkeyPosX", HotkeyPosX)
fiss.saveFloat("FISS_HotkeyPosXScript", HotkeyScript.X)
fiss.saveInt("FISS_HotkeyPosY", HotkeyPosY)
fiss.saveFloat("FISS_HotkeyPosYScript", HotkeyScript.Y)
fiss.saveInt("FISS_HotkeyAlpha", HotkeyAlpha)
fiss.saveFloat("FISS_HotkeyAlphaScript", HotkeyScript.Alpha)
fiss.saveInt("FISS_HotkeyScale", HotkeyScale)
fiss.saveInt("FISS_HotkeyScaleScript", HotkeyScript.Size)
fiss.saveInt("FISS_HorseWidget", HorseWidget)
fiss.saveBool("FISS_HorseWidgetScript", HorseScript.Visible)
fiss.saveInt("FISS_HorsePosX", HorsePosX)
fiss.saveFloat("FISS_HorsePosXScript", HorseScript.X)
fiss.saveInt("FISS_HorsePosY", HorsePosY)
fiss.saveFloat("FISS_HorsePosYScript", HorseScript.Y)
fiss.saveInt("FISS_HorseAlpha", HorseAlpha)
fiss.saveFloat("FISS_HorseAlphaScript", HorseScript.Alpha)
fiss.saveInt("FISS_HorseScale", HorseScale)
fiss.saveInt("FISS_HorseScaleScript", HorseScript.Size)
fiss.saveInt("FISS_FollowerWidget", FollowerWidget)
fiss.saveBool("FISS_FollowerWidgetScript", FollowerScript.Visible)
fiss.saveInt("FISS_FollowerPosX", FollowerPosX)
fiss.saveFloat("FISS_FollowerPosXScript", FollowerScript.X)
fiss.saveInt("FISS_FollowerPosY", FollowerPosY)
fiss.saveFloat("FISS_FollowerPosYScript", FollowerScript.Y)
fiss.saveInt("FISS_FollowerAlpha", FollowerAlpha)
fiss.saveFloat("FISS_FollowerAlphaScript", FollowerScript.Alpha)
fiss.saveInt("FISS_FollowerScale", FollowerScale)
fiss.saveInt("FISS_FollowerScaleScript", FollowerScript.Size)
fiss.saveInt("FISS_AttributeWidget", AttributeWidget)
fiss.saveBool("FISS_AttributeWidgetScript", AttributeScript.Visible)
fiss.saveInt("FISS_AttributePosX", AttributePosX)
fiss.saveFloat("FISS_AttributePosXScript", AttributeScript.X)
fiss.saveInt("FISS_AttributePosY", AttributePosY)
fiss.saveFloat("FISS_AttributePosYScript", AttributeScript.Y)
fiss.saveInt("FISS_AttributeAlpha", AttributeAlpha)
fiss.saveFloat("FISS_AttributeAlphaScript", AttributeScript.Alpha)
fiss.saveInt("FISS_AttributeScale", AttributeScale)
fiss.saveInt("FISS_AttributeScaleScript", AttributeScript.Size)

String saveResult = fiss.endSave()

EndFunction

User avatar
Naomi Lastname
 
Posts: 3390
Joined: Mon Sep 25, 2006 9:21 am

Post » Sat Nov 01, 2014 8:01 pm

-reserved for future additions-

User avatar
April
 
Posts: 3479
Joined: Tue Jun 20, 2006 1:33 am


Return to V - Skyrim