some problems with the twist macros that ive updated or seen

Need some help with that macro you're working on or aren't quite sure how to get your macro to do something? Ask here!

Moderator: MacroQuest Developers

Zazoot
a hill giant
a hill giant
Posts: 163
Joined: Sat Feb 07, 2004 11:02 am

some problems with the twist macros that ive updated or seen

Post by Zazoot » Sat Apr 24, 2004 4:54 pm

when i use these it says
"You do not seem to have that spell memorized'
i have the latest mq compiled with vs6 and sp6

im gonna mess around with the logic in them but for now here they are in case anyone else wants to beat me to the finish line (im kinda lazy with these things)


here is the one from the depot that ml posted

Code: Select all

| - twist.mac - 
| 
| Modified from Colonel's Macro by ml2517 
| 
| Modified to current form 4/23/2004 
| 
|  Combat Twist Order (Optional) --+   <- If you don't feed it a second 
|  NonCombat Twist Order -----+    |      spell set it works with just 
|                             |    |      one set. 
| Usage:                      v    v 
|           /macro twist.mac ### [###] 
| # represents the spell gem number you'd like to sing 
| 
| Example: 
| /macro twist.mac 4567 123456 
| /macro twist.mac 123458 


Sub Main(Param0) 
    /if (!${Defined[Param0]}) /endmacro 

| 
|  Variable Declarations 
| 
    /declare CombatCurSong global 
    /declare NonCombatCurSong global 
    /declare NNonCombatSongs global 
    /declare NCombatSongs global 
    /declare NonCombatSongList global 
    /declare CombatSongList global 
    /declare TwistI global 
    /declare TwistJ global 
    /declare DynamicBuffer global 
    /declare NonCombatSongArray array 
    /declare CombatSongArray array 
    /declare ArrSong array 

| 
|  Timer Declarations 
| 
    /declare SingTime timer 


    /varset CombatCurSong 1 
    /varset NonCombatCurSong 1 
    /varset NNonCombatSongs ${String[@Param0].Length} 
    /if (${Defined[Param1]}) /varset NCombatSongs ${String[@Param1].Length} 
    /varset NonCombatSongList @Param0 
    /if (${Defined[Param1]}) /varset CombatSongList @Param1 
    /varset DynamicBuffer 5 

    /for TwistI 1 to @NNonCombatSongs 
        /varcalc TwistJ @TwistI 
        /varset NonCombatSongArray(@TwistI) ${String["@NonCombatSongList"].Mid[@TwistJ,1]} 
    /next TwistI 
    /if (${Defined[Param1]}) { 
        /for TwistI 1 to @NCombatSongs 
            /varcalc TwistJ @TwistI 
            /varset CombatSongArray(@TwistI) ${String["@CombatSongList"].Mid[@TwistJ,1]} 
        /next TwistI 
    } 
    :Loop 
    /if (${Me.State.NotEqual["SIT"]}) { 
        /if (${Defined[Param1]}) /if (${Me.Combat}) /call CombatSing @CombatSongArray(@CombatCurSong) 
        /if ((!${Me.Combat})||(!${Defined[Param1]})) /call NonCombatSing @NonCombatSongArray(@NonCombatCurSong) 
    } 
   /if (${Me.State.Equal["DUCK"]}) /keypress DUCK 
   /if (${Me.State.Equal["SIT"]}) /stand 
   /goto :Loop 
/return 


Sub CombatSing 
     /declare Buffer local 
     /declare Duration local 
     /varset Duration 0 

  :CombatSing1 
    /call CheckSong @Param0 
    /varset Duration ${Macro.Return} 
    /varset SingTime 30 
    /varset Buffer 0    
    /cast @Param0 
  :CombatSing2 
    /delay 1 
    /if (${Me.Casting.ID}) { 
        /if (@SingTime<=0) /goto :CombatSingBreak 
        /goto :CombatSing2 
    } 
    :CombatSingBreak 
    /if (@SingTime>0) /goto :CombatSing1 
    /if (@Duration==0) { 
        /delay @DynamicBuffer 
        /stopsong 
    } else { 
      :CombatSing3 
        /varadd Buffer 1 
        /delay 1 
        /if (@Buffer>8) { 
        /stopsong 
        /goto :CombatSing1 
        } 
        /if (((${Me.Song[@Param0].ID})&&(${Me.Song[@Param0].Duration}<${Math.Calc[@Duration-1]}))||((${Me.Buff["${Me.Gem[@Param0]}"].ID})&&(${Me.Buff["${Me.Gem[@Param0]}"].Duration}<${Math.Calc[@Duration-1]}))) /goto :CombatSing3 
        /varset DynamicBuffer @Buffer 
        /stopsong 
    } 
|    /echo Dynamic Buffer: @DynamicBuffer 
    /varadd CombatCurSong 1 
    /if (@CombatCurSong>@NCombatSongs) /varset CombatCurSong 1 
/return 


Sub NonCombatSing 
     /declare Buffer local 
     /declare Duration local 
     /varset Duration 0 

  :NonCombatSing1 
    /call CheckSong @Param0 
    /varset Duration ${Macro.Return} 
    /varset SingTime 30 
    /varset Buffer 0    
    /cast @Param0 
  :NonCombatSing2 
    /delay 1 
    /if (${Me.Casting.ID}) { 
        /if (@SingTime<=0) /goto :NonCombatSingBreak 
        /goto :NonCombatSing2 
    } 
    :NonCombatSingBreak 
    /if (@SingTime>0) /goto :NonCombatSing1 
    /if (@Duration==0) { 
        /delay @DynamicBuffer 
        /stopsong 
    } else { 
      :NonCombatSing3 
        /varadd Buffer 1 
        /delay 1 
        /if (@Buffer>8) { 
        /stopsong 
        /goto :NonCombatSing1 
        } 
        /if (((${Me.Song[@Param0].ID})&&(${Me.Song[@Param0].Duration}<${Math.Calc[@Duration-1]}))||((${Me.Buff["${Me.Gem[@Param0]}"].ID})&&(${Me.Buff["${Me.Gem[@Param0]}"].Duration}<${Math.Calc[@Duration-1]}))) /goto :NonCombatSing3 
        /varset DynamicBuffer @Buffer 
        /stopsong 
    } 
|    /echo Dynamic Buffer: @DynamicBuffer 
    /varadd NonCombatCurSong 1 
    /if (@NonCombatCurSong>@NNonCombatSongs) /varset NonCombatCurSong 1 
/return 

Sub CheckSong(GemNumber) 
/if (${Me.Gem[@GemNumber].SpellType.Find["Beneficial"]}) { 
    /if (${Me.Gem[@GemNumber].TargetType.Find["Group"]} || ${Me.Gem[@GemNumber].TargetType.Find["Self"]} || ${Me.Gem[@GemNumber].TargetType.Find["PC"]}) { 
        /return ${Me.Gem[@GemNumber].Duration} 
    } else { 
        /return 0 
    } 
} else { 
    /return 0 
} 
/return 
-----------

Here is mine updated from the old clean one

Code: Select all

| - twist.mac - 
|  Combat Twist Order ------------+ 
|  NonCombat Twist Order -----+   | 
|                             |   | 
| Usage:                      v   v 
|           /macro twist.mac ### ### 
| 
| # represents the spell gem number you'd like to sing 
| 
| Example: 
| /macro twist.mac 4567 123456 
| 
| b= breath of harmony , c = lute 

#event twistMissedNote "You miss a note, bringing your song to a close!" 
#event twistRecovered "You haven't recovered yet..." 
#event Haste "Your body slows." 
#event gem "Your voice quiets." 

Sub Main(Param0) 
  /if (!${Defined[Param0]}) /endmacro 
  /declare twistCASTTIME   global 
  /declare combatcursong    global 
  /declare noncombatcursong    global 
  /declare nncsongs   global 
  /declare ncsongs   global 
  /declare combatprevsong   global 
  /declare noncombatprevsong   global 
  /declare ncSongList   global 
  /declare cSongList   global 
  /declare SingTime   timer 
  /declare twistI      global 
  /declare twistJ      global 
  /declare ncSongArray   array 
  /declare cSongArray   array 
  /varset twistCASTTIME   33 
  /varset combatcursong    1 
  /varset noncombatcursong    1 
  /varset combatprevsong    1 
  /varset noncombatprevsong    1 
  /varset nncsongs ${String[@Param0].Length} 
  /varset ncsongs ${String[@Param1].Length} 
  /varset ncSongList @Param0 
  /varset cSongList @Param1 
  /for twistI 1 to @nncsongs 
     /varcalc twistJ @twistI-1 
     /varset ncSongArray(@twistI) ${String["@ncSongList"].Mid 
  /next twistI 
  /for twistI 1 to @ncsongs 
     /varcalc twistJ @twistI-1 
     /varset cSongArray(@twistI) ${String["@cSongList"].Mid 
  /next twistI 
  /varset twistCASTTIME 32 

  /stopsong 
  /cast item "Songblade of the Eternal" 
  /delay 32 
  :Loop 
   /if (${Me.State.NotEqual["SIT"]}) { 
      /if ((${Me.Combat})&&(@SingTime<=0))  /call CombatSing @cSongArray(@combatcursong) 
      /if ((!${Me.Combat})&&(@SingTime<=0)) /call NonCombatSing @ncSongArray(@noncombatcursong) 
   } 
   /if (${Me.State.Equal["DUCK"]}) /keypress DUCK  
  /doevents 
  /goto :Loop 
/endmacro 

Sub NonCombatSing 
  /stopsong 
   /if (${String[@Param1].Compare[c]}) { 
      /cast item "Lute of the Flowing Waters" 
       /varset SingTime 2 
       } else { 
      /cast @Param0 
       /varset SingTime @twistCASTTIME 
       } 
  /varset noncombatprevsong @noncombatcursong 
  /varadd noncombatcursong 1 
  /if (@noncombatcursong>@nncsongs) /varset noncombatcursong 1 
/return 

Sub CombatSing 
  /stopsong 
   /if (${String[@Param0].Compare[b]}) { 
       /cast item "Breath of Harmony" 
       /varset SingTime 2 
       } else { 
       /cast @Param0 
       /varset SingTime @twistCASTTIME 
       } 
  /varset combatprevsong @combatcursong 
  /varadd combatcursong 1 
  /if (@combatcursong>@ncsongs) /varset combatcursong 1 
/return 

Sub Event_twistMissedNote 
  /varset combatcursong @combatprevsong 
  /varset noncombatcursong @noncombatprevsong 
  /varset SingTime 0 
/return 

Sub Event_twistRecovered 
  /varset combatcursong @combatprevsong 
  /varset noncombatcursong @noncombatprevsong 
  /stopsong 
  /varset SingTime 0 
/return 

Sub Event_haste 
  /stopsong 
  /cast item "Songblade of the Eternal" 
  /delay 32 
  /varset combatcursong @combatprevsong 
  /varset noncombatcursong @noncombatprevsong 
  /varset SingTime 0 
/return 

Sub Event_gem 
  /stopsong 
  /cast item "Voice of the Serpent" 
  /delay 32 
  /varset combatcursong @combatprevsong 
  /varset noncombatcursong @noncombatprevsong 
  /varset SingTime 0 
/return 

edit : smileys are bad

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

Post by ml2517 » Sat Apr 24, 2004 6:51 pm


Zazoot
a hill giant
a hill giant
Posts: 163
Joined: Sat Feb 07, 2004 11:02 am

Post by Zazoot » Sun Apr 25, 2004 1:11 pm

thanks i changed it so that it uses 31 delay instead of 40 that it was doing and it works great

mind you i coulda made it a little prettier it doesnt matter tho it works =p

Code: Select all

| - twist.mac - 
| 
| Modified from Colonel's Macro by ml2517 
| 
| Modified to current form 4/24/2004 
| 
|  Combat Twist Order (Optional) --+   <- If you don't feed it a second 
|  NonCombat Twist Order -----+    |      spell set it works with just 
|                             |    |      one set. 
| Usage:                      v    v 
|           /macro twist.mac ### [###] 
| # represents the spell gem number you'd like to sing 
| 
| Example: 
| /macro twist.mac 4567 123456 
| /macro twist.mac 123458 


Sub Main(NonCombatGems,CombatGems) 
    /if (!${Defined[NonCombatGems]}) /endmacro 

| 
|  Variable Declarations 
| 
    /declare CombatCurSong global 
    /declare NonCombatCurSong global 
    /declare NNonCombatSongs global 
    /declare NCombatSongs global 
    /declare NonCombatSongList global 
    /declare CombatSongList global 
    /declare TwistI global 
    /declare TwistJ global 
    /declare NonCombatSongArray array 
    /declare CombatSongArray array 
    /declare ArrSong array 

| 
|  Timer Declarations 
| 
    /declare SingTime timer 


    /varset CombatCurSong 1 
    /varset NonCombatCurSong 1 
    /varset NNonCombatSongs ${String[@NonCombatGems].Length} 
    /if (${Defined[CombatGems]}) /varset NCombatSongs ${String[@CombatGems].Length} 
    /varset NonCombatSongList @NonCombatGems 
    /if (${Defined[CombatGems]}) /varset CombatSongList @CombatGems 

    /for TwistI 1 to @NNonCombatSongs 
        /varcalc TwistJ @TwistI 
        /varset NonCombatSongArray(@TwistI) ${String["@NonCombatSongList"].Mid[@TwistJ,1]} 
    /next TwistI 
    /if (${Defined[CombatGems]}) { 
        /for TwistI 1 to @NCombatSongs 
            /varcalc TwistJ @TwistI 
            /varset CombatSongArray(@TwistI) ${String["@CombatSongList"].Mid[@TwistJ,1]} 
        /next TwistI 
    } 
    :Loop 
    /if (${Me.State.NotEqual["SIT"]}) { 
        /if (${Defined[CombatGems]}) /if (${Me.Combat}) /call CombatSing @CombatSongArray(@CombatCurSong) 
        /if ((!${Me.Combat})||(!${Defined[CombatGems]})) /call NonCombatSing @NonCombatSongArray(@NonCombatCurSong) 
    } 
   /if (${Me.State.Equal["DUCK"]}) /keypress DUCK 
   /if (${Me.State.Equal["SIT"]}) /stand 
   /goto :Loop 
/return 


Sub CombatSing(Song) 
     /varset Duration 0 

  :CombatSing1 
    /call CheckSong @Song 
    /varset Duration ${Macro.Return} 
    /varset SingTime 30 
    /cast "${Me.Gem[@Song]}" 
  :CombatSing2 
    /delay 1 
    /if (${Me.Casting.ID}) { 
        /if (@SingTime<=0) /goto :CombatSingBreak 
        /goto :CombatSing2 
    } 
    :CombatSingBreak 
    /if (@SingTime>0) /goto :CombatSing1 
    /if (@Duration==0) { 
        /delay 1
        /stopsong 
    } else { 
      :CombatSing3 
        /delay 1 
        /if ((!${Me.Song["${Me.Gem[@Song]}"].ID})&&(!${Me.Buff["${Me.Gem[@Song]}"].ID})) /goto :CombatSing3 
        /if ((${Me.Song["${Me.Gem[@Song]}"].Duration}<${Math.Calc[@Duration-1]})&&(${Me.Buff["${Me.Gem[@Song]}"].Duration}<${Math.Calc[@Duration-1]})) /goto :CombatSing3 
        /stopsong 
    } 
    /varadd CombatCurSong 1 
    /if (@CombatCurSong>@NCombatSongs) /varset CombatCurSong 1 
/return 


Sub NonCombatSing(Song) 
     /declare Duration local 
     /varset Duration 0 

  :NonCombatSing1 
    /call CheckSong @Song 
    /varset Duration ${Macro.Return} 
    /varset SingTime 30 
    /cast "${Me.Gem[@Song]}" 
  :NonCombatSing2 
    /delay 1 
    /if (${Me.Casting.ID}) { 
        /if (@SingTime<=0) /goto :NonCombatSingBreak 
        /goto :NonCombatSing2 
    } 
    :NonCombatSingBreak 
    /if (@SingTime>0) /goto :NonCombatSing1 
    /if (@Duration==0) { 
        /delay 1 
        /stopsong 
    } else { 
      :NonCombatSing3 
        /delay 1 
        /if ((!${Me.Song["${Me.Gem[@Song]}"].ID})&&(!${Me.Buff["${Me.Gem[@Song]}"].ID})) /goto :NonCombatSing3 
        /if ((${Me.Song["${Me.Gem[@Song]}"].Duration}<${Math.Calc[@Duration-1]})&&(${Me.Buff["${Me.Gem[@Song]}"].Duration}<${Math.Calc[@Duration-1]})) /goto :NonCombatSing3 
        /stopsong 
    } 
    /varadd NonCombatCurSong 1 
    /if (@NonCombatCurSong>@NNonCombatSongs) /varset NonCombatCurSong 1 
/return 

Sub CheckSong(GemNumber) 
/if (${Me.Gem[@GemNumber].SpellType.Find["Beneficial"]}) { 
    /if (${Me.Gem[@GemNumber].TargetType.Find["Group"]} || ${Me.Gem[@GemNumber].TargetType.Find["Self"]} || ${Me.Gem[@GemNumber].TargetType.Find["PC"]}) { 
        /return ${Me.Gem[@GemNumber].Duration} 
    } else { 
        /return 0 
    } 
} else { 
    /return 0 
} 
/return 

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

Post by ml2517 » Sun Apr 25, 2004 2:16 pm

I have no idea what you are talking about. My macro dynamically determines the cast time on songs. I'm also not sure why you re-posted my macro. It starts with a minimum of 30 delay and adds to it based on the delay of the beneficial songs that you sing.

If you are talking about some other macro, I guess I'm not sure why you re-posted mine heh.