Developer Store
Support
Member Forums

Screenshots
FAQ
Documentation
License
Known Issues
Downloads

MMOWorkshop BACK!

PyTorque
TGB Web Browser


Boaal

hallsofvalhalla - Been A while
xapken - Wizards and Champions
J.C. Smith - The Repopulation - 0.5.2 Build Notes
EmpireGames - Elementals in Rise of Heroes
Empire Games - WarPath.
jaidurn - Warcall 0.0.1.0 build notes
medafor - Final detailing of models
Thamior - Presence system GONE! [May 25th 2009)]
... MORE BLOGS!

Building a MMO
Wow I had no idea....
Quest Remnants of Chaos
Checking to see if anyone is sti...
Well here I am again :)
T3D and MMOKit
afx 2.0
Terrain specularity [video]
Torque T3D MMO Kit
[3dFoin] Dragon Bug

Notes

Please before doing this backup any files changed at least till this is tested to work for everyone. I am using the original kit release so your code could be slightly different. Thanks.

--Xerves

Instructions

test.game\client\ui\momGameProfiles.cs

Add the following profile. This will specific a new StatText? that centers. Probably something already out there that did this, but I thought it was for good measure and you now have added a GUI Profile :-)

if(!isObject(MoMStatTextCenter)) new GuiControlProfile ("MoMStatTextCenter")
{
   fontType = "Arial";
   fontSize = 14;
   fontColor = "255 255 255";      // default color (death msgs, scoring, inventory)
   fontColors[1] = "255 0 0";   // client join/drop, tournament mode
   fontColors[2] = "0 255 0"; // gameplay, admin/voting, pack/deployable
   fontColors[3] = "200 200 200";   // team chat, spam protection message, client tasks
   fontColors[4] = "255 255 0";  // global chat
   fontColors[5] = "200 200 50 200";  // used in single player game
   // WARNING! Colors 6-9 are reserved for name coloring
   justify = "center";
   autoSizeWidth = true;
   autoSizeHeight = true;
};

mud/client/gui/skillinfo.py

Might I add if anyone reads this, this info really needs to be in the skill prototype if you ask me, I don't know why this is located here... There is even this comment to fix it :-) #fix me this should be coming from world server!

Near the bottom I replaced the getSkillInfo function with this:

def GetSkillInfo(name):
    if not SKILLINFOS.has_key(name):
        SKILLINFOS[name]=SkillInfo(name,True,"enhancedmeleeupgrade")
        
    return SKILLINFOS[name]

This will return an icon. I don't remember if there was one specified here earlier. The default one is the sword you see in my picture I posted. You can add icons for any skill here the same as you do in the tutorial for the new skill you added.

mud/client/gui/partyWnd.py

This is the core part that replaces the button rendering and push code. This changes nothing besides the fact the buttons show up. I decided to grey out (same as a button pushed down) the passive skills. You might choose another method for this if you wish (my suggestion is to put borders on your icons). All functions work the same (double click to macro) and the shift clicks work as normal. The information pushed to the little window with the icon and name is in the next bit of code after this.

You need to replace the skillPane class with this one. I would recommend commenting out the whole one just in case you need to go back or look at it. The whole thing has been updated pretty much so adding in little bits to add/remove would take forever.

class SkillPane:
    def __init__(self):
        self.skillButtons = dict((x,TGEObject("SKILLBUTTON%i"%x)) for x in xrange(0,17))
        self.skillTextInfo = dict((x,TGEObject("SkillText%i"%x)) for x in xrange(0,17))
        self.skillText = TGEObject("SKILLPANE_SKILLTEXT")
        self.skillPic = TGEObject("SKILLPANE_SKILLPIC")
        self.skillName = {}
        self.swapSlot = -1
        self.currentPage = 0
        
    def setFromCharacterInfo(self,cinfo):
        self.charInfo = cinfo
        skills = cinfo.SKILLS.keys()
        sindex = self.currentPage*17
        x = 0
        
        if not len(skills):
            return
        skills.sort()
        
        askills = []
        for sk in skills:
            askills.append(sk)
            self.skillName[x] = sk
            x = x+1
          
        x = 0  
        for x in xrange(sindex,sindex+17):
            button = self.skillButtons[x-sindex]
            textstat = self.skillTextInfo[x-sindex]
            button.pulseGreen = False
            button.SetValue(0)
            button.toggleLocked = False
            
            if x < len(askills):
                skinfo = GetSkillInfo(askills[x])
                textstat.setText(str(cinfo.SKILLS[askills[x]]))
                
                icon = skinfo.icon
                if icon.startswith("SPELLICON_"):
                    split = icon.split("_")
                    index = int(split[2])
                    u0 = (float(index%6)*40.0)/256.0
                    v0 = (float(index/6)*40.0)/256.0
                    u1 = (40.0/256.0)
                    v1 = (40.0/256.0)
                    
                    button.setBitmapUV("~/data/ui/icons/spells0%s"%split[1],u0,v0,u1,v1)
                else:
                    button.setBitmap("~/data/ui/icons/%s"%icon)
                
                if cinfo.SKILLREUSE.has_key(askills[x]) or cinfo.DEAD or skinfo.passive:
                   button.setValue(1)
                   button.toggleLocked = True
                else:
                   button.SetValue(0)
                   button.toggleLocked = False
                   
            else:
                button.SetBitmap("")
                textstat.setText("")
        
        TGEObject("SKILLPANE_PAGETEXT").setText("Page %i"%(self.currentPage+1))

    def onSkillButton(self,slot):
        bnum = slot;
        slot = self.currentPage * 17 + slot
        #Skillname has a list of a all skills, the rest is a partial
        if slot+1 > len(self.skillName):
            return;
        if int(self.skillButtons[bnum].toggleLocked):
            #already down
            return
           
        skill = self.skillName[slot] 
        skinfo = GetSkillInfo(skill)
        if skinfo.passive:
            return
        
        self.skillButtons[bnum].toggleLocked = True
        self.skillButtons[bnum].setValue(1)
        
        macro.AttachMacroButtons()
        macro.EnableSkillMacro(PARTYWND.curIndex,skill,False)
        PyDoCommand(['PyDoCommand','/SKILL %i %s'%(PARTYWND.curIndex,skill)],False)
        
    def onSkillButtonAlt(self,index):
        slot = self.currentPage * 17 + index
        button = self.skillButtons[index]
        skillname = self.skillName[slot]
        skinfo = GetSkillInfo(skillname)
        if skinfo.passive:
            return
        
        macro.SetCursorMacro("SKILL",skillname,button,PARTYWND.curIndex)
        return
        
    # shift-single-click to jump to related encyc entry
    def onSkillButtonShift(self,index):
        try:
            slot = self.currentPage * 17 + index
            skillName = "Skill%s"%GetTWikiName(self.skillName[slot])
            from encyclopediaWnd import ENCWND
            if not ENCWND.setPage(skillName):
                TGECall("MessageBoxOK","Invalid Link","Sorry, you just stumbled upon an invalid encyclopedia link, page %s not found."%skillName)
            else:
                TGEEval("canvas.pushDialog(EncyclopediaWnd);")
        except KeyError:
            pass
        return
        
    # shift-right-click to enter item name/link in chat line
    def onSkillButtonShiftRight(self,index):
        try:
            slot = self.currentPage * 17 + index
            skillName = self.skillName[slot]
            from mud.client.gui.tomeGui import TOMEGUI
            commandCtrl = TOMEGUI.tomeCommandCtrl
            txt = ""
            if not commandCtrl.visible:
                TGECall("PushChatGui")
                commandCtrl.visible = True
                commandCtrl.makeFirstResponder(True)
            else:
                txt = commandCtrl.GetValue()
            commandCtrl.SetValue("%s <%s>"%(txt,skillName))
        except KeyError:
            pass
        return

In the getMouseOverItem function I believe I made the following change. It might not be needed. Replace the skill code there with these 4 lines

    elif PARTYWND.paneSkills.mouseOver:
        for slot,button in PARTYWND.skillPane.skillButtons.iteritems():
            if button.mouseOver:
                return ('SKILL',slot)

mud/client/gui/itemInfoWnd.py

This renders the information like the skills/items pane do with the icon and name in the upper left hand box. I removed the right click function for the time being though.

Add the following to the includes near the top

from skillinfo import GetSkillInfo

Find the following near the beginning of the itemInfoWnd class

        #spell slots
        self.spellButtons = dict((i,TGEObject("SPELLPANE_SPELL%i"%i)) for i in xrange(0,25))

Add the following afterwards

        #skill slots
        self.skillButtons = dict((i,TGEObject("SKILLBUTTON%i"%i)) for i in xrange(0,17))

        #on partywnd skillpane
        self.skillText = TGEObject("SKILLPANE_SKILLTEXT")
        self.skillPic = TGEObject("SKILLPANE_SKILLPIC")

In the tick function after isSpell = False add the following

        isSkill = False

A bit further down find the following code

        if not found:
            #not an inventory item, check skills or spells
            sindex = PARTYWND.spellPane.currentPage*25
            for slot,button in self.spellButtons.iteritems():
                if int(button.mouseOver):
                    if cinfo.SPELLS.has_key(slot+sindex):
                        found = True
                        ghost = cinfo.SPELLS[slot+sindex]
                        isSpell = True
                        break
                    else:
                        break

After it add the following

            sindex = PARTYWND.skillPane.currentPage*17
            for slot,button in self.skillButtons.iteritems():
                if int(button.mouseOver):
                    skills = cinfo.SKILLS.keys()
                    skills.sort()
                    askills = []
                    for sk in skills:
                       askills.append(sk)
                    if slot+sindex < len(askills):
                        found = True
                        ghost = askills[slot+sindex]
                        svalue = cinfo.SKILLS[askills[slot+sindex]]
                        isSkill = True
                        break
                    else:
                        break

Just a few lines down find the following code

        if ghost:
            if isSpell:
                self.setSpell(ghost)
            else:
                self.setItem(ghost,isLoot,isCraft,isBank)

Change it to the following

        if ghost:
            if isSpell:
                self.setSpell(ghost)
            elif isSkill:
                self.setSkill(ghost, svalue)
            else:
                self.setItem(ghost,isLoot,isCraft,isBank)

Before the def setItem function down a bit below add the following function for setItem

    def setSkill(self,ghost,svalue):
        if self.ghost == ghost:
            return
        
        self.isItem = False
        self.isLoot = False
        self.isCraft = False
        self.ghost = ghost
        
        self.skillText.setText(TEXT_HEADER+ghost+"\n"+str(svalue))
        
        skinfo = GetSkillInfo(ghost)
        icon = skinfo.icon
        if icon.startswith("SPELLICON_"):
            split = icon.split("_")
            index=int(split[2])
            u0=(float(index%6)*40.0)/256.0
            v0=(float(index/6)*40.0)/256.0
            u1=(40.0/256.0)
            v1=(40.0/256.0)
            
            self.skillPic.SetBitmapUV("~/data/ui/icons/spells0%s"%split[1],u0,v0,u1,v1)
            self.lastBitmap = ""
        else:
            self.skillPic.SetBitmap("~/data/ui/icons/%s"%icon)
            self.lastBitmap = ""         

A bit further down in the setItem function find the following code

            TGEEval(eval)
            TGEObject("NPCWnd_InvItemBitmap").SetBitmap("")
            eval = 'NPCWnd_INVITEMNAME.setText("");'
            TGEEval(eval)

            
            self.spellText.setText("")
            self.spellPic.SetBitmap("")

Below it add the following

            self.skillText.setText("")
            self.skillPic.SetBitmap("")

test.game\client\ui\partyWnd.gui

You need to replace all of the skillPane section here. I will post it all here, it is a lot of lines of GUI fun :-)

      new GuiControl(SkillsPane) {
         profile = "MoMWndProfile";
         horizSizing = "right";
         vertSizing = "bottom";
         position = "8 69";
         extent = "336 290";
         minExtent = "8 2";
         visible = "0";

         new GuiChunkedBitmapCtrl() {
            profile = "GuiDefaultProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "4 -1";
            extent = "336 289";
            minExtent = "8 2";
            visible = "1";
            bitmap = "~/data/ui/elements/skillbook";
            useVariable = "0";
            tile = "0";
         };
         new GuiTextCtrl(SKILLPANE_PAGETEXT) {
            profile = "MoMStatText";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "157 247";
            extent = "33 18";
            minExtent = "8 2";
            visible = "1";
            text = "Page 1";
            maxLength = "255";
            dropShadow = "1";
         };
         new GuiTextCtrl(SkillText0) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "48 172";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText1) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "84 172";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText2) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "120 172";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText3) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "84 222";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText4) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "120 222";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText5) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 65";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText6) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 65";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText7) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 65";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText8) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 115";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText9) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 115";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText10) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 115";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText11) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 165";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText12) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 165";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText13) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 165";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText14) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 215";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText15) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 215";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiTextCtrl(SkillText16) {
            profile = "MoMStatTextCenter";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 215";
            extent = "34 14";
            minExtent = "34 2";
            visible = "1";
            text = "14";
            maxLength = "3";
            dropShadow = "0";
         };
         new GuiBitmapButtonCtrl(SKILLBUTTON0) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "48 137";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(0);";
            altCommand = "Py::OnSkillButtonAlt(0);";
            shiftCommand = "Py::OnSkillButtonShift(0);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(0);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };
         new GuiBitmapButtonCtrl(SKILLBUTTON1) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "84 137";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(1);";
            altCommand = "Py::OnSkillButtonAlt(1);";
            shiftCommand = "Py::OnSkillButtonShift(1);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(1);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };
         new GuiBitmapButtonCtrl(SKILLBUTTON2) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "120 137";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(2);";
            altCommand = "Py::OnSkillButtonAlt(2);";
            shiftCommand = "Py::OnSkillButtonShift(2);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(2);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };         
         new GuiBitmapButtonCtrl(SKILLBUTTON3) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "84 187";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(3);";
            altCommand = "Py::OnSkillButtonAlt(3);";
            shiftCommand = "Py::OnSkillButtonShift(3);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(3);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };
         new GuiBitmapButtonCtrl(SKILLBUTTON4) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "120 187";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(4);";
            altCommand = "Py::OnSkillButtonAlt(4);";
            shiftCommand = "Py::OnSkillButtonShift(4);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(4);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };   
         new GuiBitmapButtonCtrl(SKILLBUTTON5) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 30";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(5);";
            altCommand = "Py::OnSkillButtonAlt(5);";
            shiftCommand = "Py::OnSkillButtonShift(5);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(5);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };   
         new GuiBitmapButtonCtrl(SKILLBUTTON6) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 30";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(6);";
            altCommand = "Py::OnSkillButtonAlt(6);";
            shiftCommand = "Py::OnSkillButtonShift(6);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(6);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };   
         new GuiBitmapButtonCtrl(SKILLBUTTON7) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 30";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(7);";
            altCommand = "Py::OnSkillButtonAlt(7);";
            shiftCommand = "Py::OnSkillButtonShift(7);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(7);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };      
         new GuiBitmapButtonCtrl(SKILLBUTTON8) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 80";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(8);";
            altCommand = "Py::OnSkillButtonAlt(8);";
            shiftCommand = "Py::OnSkillButtonShift(8);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(8);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };   
         new GuiBitmapButtonCtrl(SKILLBUTTON9) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 80";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(9);";
            altCommand = "Py::OnSkillButtonAlt(9);";
            shiftCommand = "Py::OnSkillButtonShift(9);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(9);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };               
         new GuiBitmapButtonCtrl(SKILLBUTTON10) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 80";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(10);";
            altCommand = "Py::OnSkillButtonAlt(10);";
            shiftCommand = "Py::OnSkillButtonShift(10);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(10);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };         
         new GuiBitmapButtonCtrl(SKILLBUTTON11) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 130";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(11);";
            altCommand = "Py::OnSkillButtonAlt(11);";
            shiftCommand = "Py::OnSkillButtonShift(11);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(11);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };   
         new GuiBitmapButtonCtrl(SKILLBUTTON12) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 130";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(12);";
            altCommand = "Py::OnSkillButtonAlt(12);";
            shiftCommand = "Py::OnSkillButtonShift(12);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(12);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };               
         new GuiBitmapButtonCtrl(SKILLBUTTON13) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 130";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(13);";
            altCommand = "Py::OnSkillButtonAlt(13);";
            shiftCommand = "Py::OnSkillButtonShift(13);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(13);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };       
         new GuiBitmapButtonCtrl(SKILLBUTTON14) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "188 180";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(14);";
            altCommand = "Py::OnSkillButtonAlt(14);";
            shiftCommand = "Py::OnSkillButtonShift(14);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(14);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };   
         new GuiBitmapButtonCtrl(SKILLBUTTON15) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "224 180";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(15);";
            altCommand = "Py::OnSkillButtonAlt(15);";
            shiftCommand = "Py::OnSkillButtonShift(15);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(15);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };               
         new GuiBitmapButtonCtrl(SKILLBUTTON16) {
            profile = "InvButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "260 180";
            extent = "34 34";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButton(16);";
            altCommand = "Py::OnSkillButtonAlt(16);";
            shiftCommand = "Py::OnSkillButtonShift(16);";
            shiftRightCommand = "Py::OnSkillButtonShiftRight(16);";
            toolTip = "Skill Button - (Right click for info, Double click to pick up and place in macro)";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
            number = "-1";
            hasStateBitmaps = "0";
            u0 = "0";
            u1 = "1";
            v0 = "0";
            v1 = "1";
         };  
         new GuiButtonCtrl(SKILLBUTTONNEXT) {
            profile = "MenuButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "266 230";
            extent = "20 20";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButtonNext();";
            toolTip = "Next Skill Page";
            text = ">";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
         };
         new GuiControl() {
            profile = "GuiDefaultProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "47 22";
            extent = "107 110";
            minExtent = "8 2";
            visible = "1";

            new GuiMLTextCtrl(SKILLPANE_SKILLTEXT) {
               profile = "MoMStatText";
               horizSizing = "center";
               vertSizing = "bottom";
               position = "5 60";
               extent = "96 14";
               minExtent = "8 2";
               visible = "1";
               lineSpacing = "2";
               allowColorChars = "0";
               maxChars = "-1";
            };
            new GuiBitmapCtrl(SKILLPANE_SKILLPIC) {
               profile = "GuiDefaultProfile";
               horizSizing = "right";
               vertSizing = "bottom";
               position = "28 7";
               extent = "50 50";
               minExtent = "8 2";
               visible = "1";
               wrap = "0";
               modulation = "1.000000 1.000000 1.000000 1.000000";
            };
         };
         new GuiButtonCtrl(SKILLBUTTONPREV) {
            profile = "MenuButtonProfile";
            horizSizing = "right";
            vertSizing = "bottom";
            position = "55 230";
            extent = "20 20";
            minExtent = "8 2";
            visible = "1";
            command = "Py::OnSkillButtonPrev();";
            toolTip = "Previous Skill Page";
            text = "<";
            mouseOver = "0";
            hotKey = "-1";
            toggleLocked = "0";
            pulseRed = "0";
            pulseGreen = "0";
            groupNum = "-1";
            buttonType = "PushButton";
         };
      };