skill up code

A forum for you to dump all the macros you create, allowing users to use, modify, and comment on your work.

Moderator: MacroQuest Developers

McTisuk
orc pawn
orc pawn
Posts: 11
Joined: Thu Jan 01, 2004 6:46 am

skill up code

Post by McTisuk » Thu Jan 01, 2004 1:56 pm

posted this on the genbot thread, but it's standalone anyhow.

Just include it in a macro to get skillup notification. You can change Sub do_skillup to do the proper things you care about (fires for each skill). ATM it just calls a genbot chat function to announce the skill up happened.

For use away from genbot, you'd change

Code: Select all

  /call ChatOut 5 "@MasterName" "@skillname increased - $char(skill,"@skillname") ..."
and similar call chatouts to be

Code: Select all

/echo "@skillname increased - $char(skill,"@skillname") ..."
... or do whatever you want =p ATM all max skills are NOT correct, some are capped lower than in this list, but I don't have time atm to work out their caps.

Code: Select all

|botskillup.inc
|Bot spell module.
|Version 1.0
|Date:12/31/2003 1:00am
|

#event Skillup1hb "You have become better at 1H Blunt"
#event Skillup1hs "You have become better at 1H Slashing"
#event Skillup2hb "You have become better at 2H Blunt"
#event Skillup2hs "You have become better at 2H Slashing"
#event SkillupAbj "You have become better at Abjuration"
#event SkillupAlc "You have become better at Alchemy"
#event SkillupAlcTol "You have become better at Alcohol Tolerance"
#event SkillupAlt "You have become better at Alteration"
#event SkillupApp "You have become better at Apply Poison"
#event SkillupArc "You have become better at Archery"
#event SkillupBac "You have become better at Backstab"
#event SkillupBak "You have become better at Baking"
#event SkillupBin "You have become better at Bind Wound"
#event SkillupBas "You have become better at Bash"
#event SkillupBla "You have become better at Blacksmithing"
#event SkillupBre "You have become better at Brewing"
#event SkillupBeg "You have become better at Begging"
#event SkillupBer "You have become better at Berserking"
#event SkillupBlo "You have become better at Block"
#event SkillupBra "You have become better at Brass Instruments"
#event SkillupCha "You have become better at Channeling"
#event SkillupCon "You have become better at Conjuration"
#event SkillupDef "You have become better at Defense"
#event SkillupDis "You have become better at Disarm"
#event SkillupDisTr "You have become better at Disarm Traps"
#event SkillupDiv "You have become better at Divination"
#event SkillupDod "You have become better at Dodge"
#event SkillupDou "You have become better at Double Attack"
#event SkillupDra "You have become better at Dragon Punch"
#event SkillupDua "You have become better at Duel Wield"
#event SkillupEag "You have become better at Eagle Strike"
#event SkillupEvo "You have become better at Evocation"
#event SkillupFD "You have become better at Feign Death"
#event SkillupFis "You have become better at Fishing"
#event SkillupFly "You have become better at Flying Kick"
#event SkillupFle "You have become better at Fletching"
#event SkillupFor "You have become better at Forage"
#event SkillupH2H "You have become better at Hand to Hand"
#event SkillupHid "You have become better at Hide"
#event SkillupInt "You have become better at Intimidation"
#event SkillupJew "You have become better at Jewelry Making"
#event SkillupKic "You have become better at Kick"
#event SkillupMakPoi "You have become better at Make Poison"
#event SkillupMed "You have become better at Meditate"
#event SkillupMen "You have become better at Mend"
#event SkillupOff "You have become better at Offense"
#event SkillupPar "You have become better at Parry"
#event SkillupPer "You have become better at Percussion Instruments"
#event SkillupPicLoc "You have become better at Pick Lock"
#event SkillupPicPoc "You have become better at Pick Pockets"
#event SkillupPie "You have become better at Piercing"
#event SkillupPot "You have become better at Pottery"
#event SkillupRes "You have become better at Research"
#event SkillupRip "You have become better at Riposte"
#event SkillupRou "You have become better at Round Kick"
#event SkillupSaf "You have become better at Safe Fall"
#event SkillupSenHea "You have become better at Sense Heading"
#event SkillupSenTra "You have become better at Sense Traps"
#event SkillupSla "You have become better at Slam"
#event SkillupSin "You have become better at Sing"
#event SkillupSne "You have become better at Sneak"
#event SkillupSpeAbj "You have become better at Specialize Abjure"
#event SkillupSpeAlt "You have become better at Specialize Alteration"
#event SkillupSpeCon "You have become better at Specialize Conjuration"
#event SkillupSpeDiv "You have become better at Specialize Divination"
#event SkillupSpeEvo "You have become better at Specialize Evocation"
#event SkillupStrIns "You have become better at Stringed Instruments"
#event SkillupTai "You have become better at Tailoring"
#event SkillupTau "You have become better at Taunt"
#event SkillupThr "You have become better at Throwing"
#event SkillupTig "You have become better at Tiger Claw"
#event SkillupTin "You have become better at Tinkering"
#event SkillupTra "You have become better at Tracking"
#event SkillupWin "You have become better at Wind Instruments"


Sub do_skillup(skillname,maxskill)
  /call ChatOut 5 "@MasterName" "@skillname increased - $char(skill,"@skillname") ..."
  /if n $char(skill,"@skillname")==@maxskill {
    /call ChatOut 5 "@MasterName" "@skillname maxed for level - $char(skill,"@skillname") ... woo!"
    /varset maxskill 235
    /if n $char(skill,"@skillname")==@maxskill {
      /call ChatOut 5 "@MasterName" "@skillname maxed forever! - 235 is max!"
    }
  }
/return

Sub Event_Skillup1hb
  /Call do_skillup "1H Blunt" "$calc($char(level)*5+5)"
/Return

Sub Event_Skillup1hs
  /Call do_skillup "1H Slashing" "$calc($char(level)*5+5)"
/Return

Sub Event_Skillup2hb
  /Call do_skillup "2H Blunt" "$calc($char(level)*5+5)"
/Return

Sub Event_Skillup2hs
  /Call do_skillup "2H Slashing" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupAbj
  /Call do_skillup "Abjuration"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupAlc
  /Call do_skillup "Alchemy"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupAlcTol
  /Call do_skillup "Alcohol Tolerance" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupAlt
  /Call do_skillup "Alteration"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupApp
  /Call do_skillup "Apply Poison" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupArc
  /Call do_skillup "Archery"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBac
  /Call do_skillup "Backstab"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBak
  /Call do_skillup "Baking"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBas
  /Call do_skillup "Bash"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBeg
  /Call do_skillup "Begging"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBer
  /Call do_skillup "Berserking"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBin
  /Call do_skillup "Bind Wound" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBla
  /Call do_skillup "Blacksmithing"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBlo
  /Call do_skillup "Block"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBra
  /Call do_skillup "Brass Instruments" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupBre
  /Call do_skillup "Brewing"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupCha
  /Call do_skillup "Channeling"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupCon
  /Call do_skillup "Conjuration"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDef
  /Call do_skillup "Defense"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDis
  /Call do_skillup "Disarm"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDisTr
  /Call do_skillup "Disarm Traps" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDiv
  /Call do_skillup "Divination"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDod
  /Call do_skillup "Dodge"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDou
  /Call do_skillup "Double Attack" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDra
  /Call do_skillup "Dragon Punch" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupDua
  /Call do_skillup "Duel Wield" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupEag
  /Call do_skillup "Eagle Strike" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupEvo
  /Call do_skillup "Evocation"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupFD
  /Call do_skillup "Feign Death" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupFis
  /Call do_skillup "Fishing"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupFle
  /Call do_skillup "Fletching"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupFly
  /Call do_skillup "Flying Kick" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupFor
  /Call do_skillup "Forage"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupH2H
  /Call do_skillup "Hand to Hand" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupHid
  /Call do_skillup "Hide"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupInt
  /Call do_skillup "Intimidation"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupJew
  /Call do_skillup "Jewelry Making" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupKic
  /Call do_skillup "Kick"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupMakPoi
  /Call do_skillup "Make Poison" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupMed
  /Call do_skillup "Meditate"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupMen
  /Call do_skillup "Mend"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupOff
  /Call do_skillup "Offense"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupPar
  /Call do_skillup "Parry"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupPer
  /Call do_skillup "Percussion Instruments" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupPicLoc
  /Call do_skillup "Pick Lock" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupPicPoc
  /Call do_skillup "Pick Pockets" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupPie
  /Call do_skillup "Piercing"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupPot
  /Call do_skillup "Pottery"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupRes
  /Call do_skillup "Research"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupRip
  /Call do_skillup "Riposte"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupRou
  /Call do_skillup "Round Kick" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSaf
  /Call do_skillup "Safe Fall" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSenHea
  /Call do_skillup "Sense Heading" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSenTra
  /Call do_skillup "Sense Traps" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSin
  /Call do_skillup "Sing"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSla
  /Call do_skillup "Slam"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSne
  /Call do_skillup "Sneak"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSpeAbj
  /Call do_skillup "Specialize Abjure" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSpeAlt
  /Call do_skillup "Specialize Alteration" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSpeCon
  /Call do_skillup "Specialize Conjuration" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSpeDiv
  /Call do_skillup "Specialize Divination" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupSpeEvo
  /Call do_skillup "Specialize Evocation" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupStrIns
  /Call do_skillup "Stringed Instruments" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupTai
  /Call do_skillup "Tailoring"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupTau
  /Call do_skillup "Taunt"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupThr
  /Call do_skillup "Throwing"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupTig
  /Call do_skillup "Tiger Claw" "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupTin
  /Call do_skillup "Tinkering"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupTra
  /Call do_skillup "Tracking"  "$calc($char(level)*5+5)"
/Return

Sub Event_SkillupWin
  /Call do_skillup "Wind Instruments" "$calc($char(level)*5+5)"
/Return
McTisuk ... just another macro writer~

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Thu Jan 01, 2004 2:53 pm

Posted this in the genbot thread as well. You could probably simplify all that to this: (With all of those events it might cause alot of unneeded cpu cycles.)

Code: Select all

#Event SkillUp "You have become better at" 

Sub Event_SkillUp(SkillUpText) 
/declare ParseSkillLevel local 
/declare ParseSkill local 
/declare PositionStart local 
/declare PositionEnd local 
/varset PositionStart $calc($instr("! (","@SkillUpText")+3) 
/varset PositionEnd $instr(")","@SkillUpText") 
/varset ParseSkillLevel $mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText") 
/varset PositionStart $instr("You have become better at ","@SkillUpText") 
/varset PositionEnd $instr("! (","@SkillUpText") 
/varset ParseSkill $mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText") 
/call ChatOut 5 "@MasterName" "@ParseSkill increased - @ParseSkillLevel ..." 
/if n @ParseSkillLevel==$calc($calc($char(level)*5)+5) { 
    /call ChatOut 5 "@MasterName" "@ParseSkill maxed for level - @ParseSkillLevel ... woo!" 
    /if n @ParseSkillLevel==235 { 
        /call ChatOut 5 "@MasterName" "@ParseSkill maxed forever! - 235 is max!" 
    } 
} 
/return 

McTisuk
orc pawn
orc pawn
Posts: 11
Joined: Thu Jan 01, 2004 6:46 am

Post by McTisuk » Thu Jan 01, 2004 3:47 pm

I figured there was a way to pick up the end of the string automatically, nice to know how it's done, thanks! -)

I have a vague notion that I want them as separate events for response reasons, about where I want the code to go. In this example, I don't apply it, they all use the same function to do stuff. I guess using your code, I could call something like response-@parseskill to pass on to individual parsepoints?

Is it possible to do something like
/if @response-@parseskill != null /call response-@parseskill ?
The idea being if you don't have response-divination defined as a sub, it'd be null and wouldn't try to call it (is there a way to check a sub is "valid")?

On my machine, I have no problems with CPU cycle eating, even running multi eqs, all the other system stuff like dev environs, and genbots on all EQs + this, doevents didn't get noticably longer, even with many events.

For interest sake, how's the doevents code work? does it compare the string against every event to see if it matches ? I'm not familiar with MQ2 source yet, and I hate all C's =p Is there some history with lots of events causing problems or the like?

Thankfully I autogenerated this code, no way I'd type all that in =p
McTisuk ... just another macro writer~

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Thu Jan 01, 2004 6:08 pm

Ok I think this will address your concerns. You can define certain formulas per skill. You can also hard code skill maxxes for specific skills.

If a particular skill formula or max is not defined it uses the default that you had specified $calc($calc($char(level)*5)+5) (no clue if this is correct as a default. Change as necessary) and 235 for skill (Once again. No clue if this is correct).

Read through the script and you should get the idea.

You will need to add this in the beginning of your calling Main to set up the variables and count the arrays.

Code: Select all

/call SetSkillFormulas

Code: Select all

#Event SkillUp "You have become better at" 


Sub Event_SkillUp(SkillUpText) 
/declare ParseSkillLevel local 
/declare ParseSkill local 
/declare PositionStart local 
/declare PositionEnd local 
/declare ArrayElementa local
/declare ArrayElementb local
/declare UseFormula local
/declare UseMaxSkill local

/varset PositionStart $calc($instr("! (","@SkillUpText")+3) 
/varset PositionEnd $instr(")","@SkillUpText") 
/varset ParseSkillLevel "$mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText")"
/varset PositionStart $strlen("You have become better at ") 
/varset PositionEnd $instr("! (","@SkillUpText") 
/varset ParseSkill "$mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText")"

/call ChatOut 5 "@MasterName" "@ParseSkill increased - @ParseSkillLevel ..." 

/varset UseFormula "$calc($char(level)*5+5)"
/for ArrayElementa 0 to $calc(@FormulaMaxElementA-1)
    /for ArrayElementb 1 to $calc(@FormulaMaxElementB-1)
        /if "$lcase("@SkillFormula(@ArrayElementa,@ArrayElementb)")"=="$lcase("@ParseSkill")" /varset UseFormula "@SkillFormula(@ArrayElementa,0)"
    /next ArrayElementb    
/next ArrayElementa

/varset UseMaxSkill "235"
/for ArrayElementa 0 to $calc(@SkillMaxElementA-1)
    /for ArrayElementb 1 to $calc(@SkillMaxElementB-1)
        /if "$lcase("@MaxSkill(@ArrayElementa,@ArrayElementb)")"=="$lcase("@ParseSkill")" /varset UseMaxSkill "@MaxSkill(@ArrayElementa,0)"
    /next ArrayElementb    
/next ArrayElementa

/if n @ParseSkillLevel<@UseMaxSkill /if n @ParseSkillLevel==@UseFormula { 
    /call ChatOut 5 "@MasterName" "@ParseSkill maxed for level - @ParseSkillLevel ... woo!" 
} 
/if n @ParseSkillLevel==@UseMaxSkill { 
     /call ChatOut 5 "@MasterName" "@ParseSkill maxed forever! - @UseMaxSkill is max!" 
} 
/return 


Sub SetSkillFormulas
/declare SkillFormula array2
/declare MaxSkill array2
|
| The data in here is completely bogus at the moment.  Feel free to research it and put in the right values. 

| You set SkillFormula(x,0) to the skill formula to be used.
| then SkillFormula(x,1) etc.. to the skills that should use this formula.

/varset SkillFormula(0,0) "$calc($calc($char(level)*5)+5)"
/varset SkillFormula(0,1) "Swimming"
/varset SkillFormula(0,2) "Pick Pockets"

/varset SkillFormula(1,0) "$calc($calc($char(level)*4)+5)"
/varset SkillFormula(1,1) "Backstab"
/varset SkillFormula(1,2) "Slam"

| You set MaxSkill(x,0) to the max skill to be used.
| then MaxSkill(x,1) etc.. to the skills that should use this max skill.

/varset MaxSkill(0,0) "255"
/varset MaxSkill(0,1) "Slam"
/varset MaxSkill(0,2) "Backstab"

| The routines below counts up the max elements it should loop through
| doing this now makes the event compares faster.
| --------------------------------------------------------------
/declare FormulaMaxElementA global
/declare FormulaMaxElementB global
/declare SkillMaxElementA global
/declare SkillMaxElementB global
/declare CountSkillA local
/declare CountSkillB local
/varset FormulaMaxElementA 0
/varset FormulaMaxElementB 0
/varset SkillMaxElementA 0
/varset SkillMaxElementB 0
/varset CountSkillA 0
/varset CountSkillB 0
:CountFormulaA
/if "@SkillFormula(@FormulaMaxElementA,0)"=="UNDEFINED-ARRAY-ELEMENT" {
    /goto :CountFormulaB
} else {
    /varadd FormulaMaxElementA 1
}
/goto :CountFormulaA
:CountFormulaB
/varset CountSkillB 0
/if n @CountSkillA<@FormulaMaxElementA {
:CountFormulaC
    /if "@SkillFormula(@CountSkillA,@CountSkillB)"=="UNDEFINED-ARRAY-ELEMENT" {
        /varadd CountSkillA 1
        /if n @FormulaMaxElementB<@CountSkillB /varset FormulaMaxElementB @CountSkillB
        /goto :CountFormulaB
    } else {
        /varadd CountSkillB 1
    }
    /goto :CountFormulaC
}
/varset CountSkillA 0
/varset CountSkillB 0
:CountSkillA
/if "@MaxSkill(@SkillMaxElementA,0)"=="UNDEFINED-ARRAY-ELEMENT" {
    /goto :CountSkillB
} else {
    /varadd SkillMaxElementA 1
}
/goto :CountSkillA
:CountSkillB
/varset CountSkillB 0
/if n @CountSkillA<@SkillMaxElementA {
:CountSkillC
    /if "@MaxSkill(@CountSkillA,@CountSkillB)"=="UNDEFINED-ARRAY-ELEMENT" {
        /varadd CountSkillA 1
        /if n @SkillMaxElementB<@CountSkillB /varset SkillMaxElementB @CountSkillB
        /goto :CountSkillB
    } else {
        /varadd CountSkillB 1
    }
    /goto :CountSkillC
}
/return

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Sun Jan 04, 2004 6:41 pm

Thought this through a bit more and made it more efficient.
You would have to populate the arrays in the SetSkillFormulas section for skills that don't abide by your default skill formula and skill max.

You would call this once from the script to populate the arrays.

Code: Select all

/call SetSkillFormulas

Code: Select all

|
| skillup.mac
|

#Event SkillUp "You have become better at" 


Sub Event_SkillUp(SkillUpText) 
/declare ParseSkillLevel local 
/declare ParseSkill local 
/declare PositionStart local 
/declare PositionEnd local 
/declare UseFormula local 
/declare UseMaxSkill local 
/declare ElA local
/declare ElB local
/varset PositionStart $calc($instr("! (","@SkillUpText")+3) 
/varset PositionEnd $instr(")","@SkillUpText") 
/varset ParseSkillLevel "$mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText")" 
/varset PositionStart $strlen("You have become better at ") 
/varset PositionEnd $instr("! (","@SkillUpText") 
/varset ParseSkill "$mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText")" 
/call ChatOut 5 "@MasterName" "-[ @ParseSkill increased - @ParseSkillLevel ...]-" 

:SkillFormInit
| Default Formula -- If not found in the Array's below.
/varset UseFormula "$calc($char(level)*5+5)" 

/varset ElA 0
/varset ElB 1
:SkillFormLoop
/if "@SkillFormula(@ElA,0)"!="UNDEFINED-ARRAY-ELEMENT" {
    /if "@SkillFormula(@ElA,@ElB)"!="UNDEFINED-ARRAY-ELEMENT" {
        /if "@SkillFormula(@ElA,@ElB)"=="@ParseSkill" {
            /varset UseFormula "@SkillFormula(@ElA,0)" 
            /goto :SkillMaxInit
        }
        /varadd ElB 1
    } else {
        /varadd ElA 1
        /varset ElB 1
    }
} else {
    /goto :SkillMaxInit
}
/goto :SkillFormLoop

:SkillMaxInit
| Default Skill Max -- If not found in the Array's below.
/varset UseMaxSkill "235" 

/varset ElA 0
/varset ElB 1
:SkillMaxLoop
/if "@MaxSkill(@ElA,0)"!="UNDEFINED-ARRAY-ELEMENT" {
    /if "@MaxSkill(@ElA,@ElB)"!="UNDEFINED-ARRAY-ELEMENT" {
        /if "@MaxSkill(@ElA,@ElB)"=="@ParseSkill" {
            /varset UseMaxSkill "@MaxSkill(@ElA,0)" 
            /goto :DoneLookup
        }
        /varadd ElB 1
    } else {
        /varadd ElA 1
        /varset ElB 1
    }
} else {
    /goto :DoneLookup
}
/goto :SkillMaxLoop
:DoneLookup

/if n @ParseSkillLevel<@UseMaxSkill /if n @ParseSkillLevel==@UseFormula { 
    /call ChatOut 5 "@MasterName" "-[ @ParseSkill maxed for level - @ParseSkillLevel ... woo! ]-" 
} 
/if n @ParseSkillLevel==@UseMaxSkill { 
     /call ChatOut 5 "@MasterName" "-[ @ParseSkill maxed forever! - @UseMaxSkill is max! ]-" 
}
/if n @ParseSkillLevel>@UseMaxSkill /if n @ParseSkillLevel>@UseFormula { 
     /call ChatOut 5 "@MasterName" "-[ @ParseSkill exceeds both the Formula and Skill Max specified.  Check your Array values for accuracy. ]-" 
} 
/return 


Sub SetSkillFormulas 
/declare SkillFormula array2 
/declare MaxSkill array2 
| 
|  * The data in here is completely bogus at the moment.  Feel free to research it and put in the right values. 
|
| You set SkillFormula(x,0) to the skill formula to be used. 
| then SkillFormula(x,1) etc.. to the skills that should use this formula. 
| ---------------------------------------------------------------------------------
/varset SkillFormula(0,0) "$calc($calc($char(level)*5)+5)" 
/varset SkillFormula(0,1) "Swimming" 
/varset SkillFormula(0,2) "Pick Pockets" 

/varset SkillFormula(1,0) "$calc($calc($char(level)*3)+5)" 
/varset SkillFormula(1,1) "Sense Traps" 
/varset SkillFormula(1,2) "Slam" 

/varset SkillFormula(2,0) "$calc($calc($char(level)*4)+10)" 
/varset SkillFormula(2,1) "Bash" 
/varset SkillFormula(2,2) "1H Blunt" 
/varset SkillFormula(2,3) "2H Blunt" 
/varset SkillFormula(2,4) "Abjuration" 
/varset SkillFormula(2,5) "Alteration" 

/varset SkillFormula(3,0) "$calc($calc($char(level)*3)+5)" 
/varset SkillFormula(3,1) "Bind Wound" 
/varset SkillFormula(3,2) "Conjuration" 
/varset SkillFormula(3,2) "Backstab" 
| ---------------------------------------------------------------------------------
|
| You set MaxSkill(x,0) to the max skill to be used. 
| then MaxSkill(x,1) etc.. to the skills that should use this max skill. 
| ---------------------------------------------------------------------------------
/varset MaxSkill(0,0) "255" 
/varset MaxSkill(0,1) "Slam" 
/varset MaxSkill(0,2) "Channeling" 

/varset MaxSkill(1,0) "250" 
/varset MaxSkill(1,1) "Defense" 
/varset MaxSkill(1,2) "Meditate" 
/varset MaxSkill(1,3) "Sense Heading" 
/varset MaxSkill(1,4) "Backstab" 
| ---------------------------------------------------------------------------------
/return