advchant.mac - Advanced Chant REV7b-BD [COMPLETE]

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

Moderator: MacroQuest Developers

Pheph
a hill giant
a hill giant
Posts: 196
Joined: Thu Oct 09, 2003 8:15 pm

Post by Pheph » Thu Mar 25, 2004 10:46 am


apollo5145
orc pawn
orc pawn
Posts: 26
Joined: Wed Feb 25, 2004 8:14 pm

Post by apollo5145 » Sun Mar 28, 2004 2:49 pm

Has anyone modified this to work with the new /twist plugin that was made?

apollo5145
orc pawn
orc pawn
Posts: 26
Joined: Wed Feb 25, 2004 8:14 pm

Post by apollo5145 » Tue Apr 06, 2004 3:34 am

I modified the code a little here. I added an option to set a static x/y loc at startup (it's sloppy but it works). This code also has Boastful Bellow in it. Cut that out if you don't have the skill.

Code: Select all

| advchant.mac - By Raebis 
|                fixes, overhauls and gobs of new stuff by BrainDozer 
| 
| Version: REV7b-BD Feb 16 05:44 GMT 
|          originally based on REV6a code 
| 
| Features:--------------------------------------------------[updated 02/07/04]---- 
| 
| * Automatically selects high light blue, dark blue, or white mob 
| * Runs to mob before targeting it (Stealth! No cross-zone targeting!) 
| * Aggro/Add Detection: Automatically targets and kites aggroed mobs (adds) 
| * Ignores greens and low light blues unless they are aggroed (adds) 
| * Caster Detection: Automatically will switch target to aggroed casting mobs 
| * Compatible with level 49 and level 5 selos 
| * Auto Healing: If health gets low, it will automatically heal 
| * Fleeing Mob Catcher: If mob runs away, macro keeps you in range! 
| * Detects WMS (Warping Mob Syndrom) and gets a new target if a mob warps away! 
| * Rubber Anchor: kites mobs closest to macro starting point - no wandering! 
| * Exclude List: Won't attack mobs that you have /add'ed to this list! 
| 
| New Features:----------------------------------------------[updated 02/14/04]---- 
| 
| * |02/14/04| Singing Steel Boots support via /ssb command. 
| * |02/09/04| Logging: Toggle echoed output to log file! 
| * |02/08/04| Auto Dislodge: Attempts to jolt free if stuck in a tree or rock! 
| * |02/08/04| Static Anchor: Kite around a static point - no wondering, really!! 
| * |02/08/04| Mob Avoidance: Avoid damage! Reduce stuns!! Fewer wipeouts!!! 
| 
| Other Additions/Changes:-----------------------------------[updated 02/14/04]---- 
| 
|   |02/14/04| Bunch of new commands. 
|   |02/14/04| Auto dislodge should be even more effective. 
|   |02/14/04| Can now save settings to configuration file. 
|   |02/14/04| Overhauld song twisting system. 
|   |02/09/04| Added /cecho command to toggle macro output. 
|   |02/08/04| Added toggling of certain key features. 
|   |02/07/04| Added flow return codes for debugging. 
| 
| Bug Fixes:-------------------------------------------------[updated 02/14/04]---- 
| 
|   |02/14/04| Fixed lvl 4 selos. Should stay up 95% of the time, lag permitting. 
|   |02/10/04| No essentic behavior if self is targeted. Retargets mob instead. 
|   |02/09/04| No longer closes all windows when a mob warps. 
|   |02/07/04| Restructered some logic to avoid possible stack problems. 
| 
| Known Bugs:------------------------------------------------[updated 02/14/04]---- 
| 
|   |02/15/04| Possible crash if target is processed as null. 
|   |02/14/04| Minor "You haven't recovered yet..." spam. 
|   |02/09/04| Auto Dislodge reacts to any zero movement, including stuns. 
|   |02/09/04| Spams targeting message when trying to target a new mob. 
|   |02/09/04| Avoidance detects close proximity interior radius mobs as exterior. 
| 
| Usage:-----------------------------------------------------[updated 02/09/04]---- 
| 
|     /macro advchant.mac <DOTs> <selos> <heal song> <radius> 
| 
|     Examples: 
| 
|           If using:   -Level 5 selos in slot 8 
|                       -DD Songs in slots 1 and 3 
|                       -Levitate in slot 2 
|                       -Hymn of Restoration in slot 4 
|                       -Radius of 50 
| 
|                       Syntax: /mac advchant 132 8 4 50 
| 
| 
|           If using:   -Level 49 selos in slot 1 
|                       -DOT Songs in slots 3,4,5, and 6 
|                       -Hymn of Restoration in slot 7 
|                       -Radius of 100 
| 
|                       Syntax: /mac advchant 3456 1 7 100 
| 
| Commands:--------------------------------------------------[updated 02/14/04]---- 
| 
|     /save                - Save current settings to ini file. 
|     /ssb                 - Toggles Singing Steel Boot usage. (default off) 
|     /lock                - Toggles Static Anchor.  Also updates Rubber Anchor. 
|     /rubber              - Resets Rubber Anchor to target or current position. 
|     /avoid               - Toggles Auto Mob Avoidance. 
|     /cecho               - Toggles macro echoing. 
|     /clog                - Toggles macro logging. 
|     /add "a bat"         - Add mob to exclude list. 
|     /del "an orc pawn"   - Remove mob from exclude list. 
|     /exlist              - Display exclude list. 
| 
|     Advanced: 
| 
|     /rmax /rmin /hmax /hmin /cradius /ctime /debug /setdebug /dinfo 
|     /seltick /radOR /cdelay 
| 
| Notes:-----------------------------------------------------[updated 02/14/04]---- 
| 
| Auto MOB Avoidance: [02/11/04] 
|     This works pretty well when trying to avoid single mobs, but multiple 
|     mobs can be a problem.  The script can only see one mob to avoid at a time. 
|     If an area is highly populated, it my be helpful to train as many mobs 
|     behind you as you can before running the script.  In sparsely populated 
|     areas, mobs are avoided quite easily.  Disable by using the /avoid toggle. 
|     I'm not satisfied with my current approach, and I plan on scrapping this in 
|     favor of a more elegant solution. 
| 
| Exclude List: 
|     The exclude list is a ini-driven list of mobs that this macro will not 
|     target for kiting. You can add and remove mobs from this list on-the-fly 
|     with the following commands. 
| 
|     /add giant 
|      -This command will tell the macro not to target anything with the word 
|       giant in its name. 
| 
|     /del giant 
|      -This is the opposite of the previous command 
| 
|     /exlist 
|      -This command will list the words that the macro uses for excluding targets 
| 
|     In the exlist you will see an item "(0-100) any advchant.mac" and this is 
|     normal. If adding a exclusion with more than one word you must use quotes 
|     around the name i.e. /add "a large trout" 
| 
| HealSong: [02/14/04] 
|     The healsong will play when your heath goes below your /hmin (default 85) 
|     and will continue twisting the healsong in until your health is at or above 
|     your /hmax (default 95). When this is activated, it will twist the healsong 
|     instead of the firstsong in <DOTs>. Do not put any important song as the 
|     first number in this argument (i.e. levitate). 
| 
| Static Anchor: [02/08/04] 
|     This makes your target or your current position the point of rotation. 
|     This may not work well with the fleeing mob code, as I haven't tested it. 
| 
| Rubber Anchor: 
|     You may wander from your starting point but after killing a mob, the next mob 
|     that the macro targets will be closest to your starting point. 
| 
| --------------------------------------------------------------------------------- 
| 

#event Exp        "You gain " 
#event Died       "You have entered" 
#event Caster     " begins to cast a spell." 

#turbo 

Sub Main(DOTs,Selos,Health,CRadius,XLoc,YLoc,DebugLevel) 
   /zapvars 

   /if $defined(CRadius)==false { 
      /echo "usage: chant.mac <DOTs> <Selos> <heal song> <radius> <XLoc> <YLoc>" 
      /endmacro 
   } 

   /declare DEBUG global 
   /declare DEBUGf global 
   /declare DBIterations global 
   /declare DBIterations2 global 
   /declare DBI global 
   /declare DBImax global 
   /if $defined(DebugLevel)==false { 
      /varset DEBUG 0 
   } else { 
      /varset DEBUG @DebugLevel 
   } 
   /declare LOCK global 
   /declare LOCKf global 
   /declare LockX global 
   /declare LockY global 

   /declare IniFile global 

   /declare RUBBERf global 

   /declare AVOID global 
   /declare AVOIDf global 

   /declare CECHO global 
   /declare CECHOf global 
   /declare CLOG global 
   /declare CLOGf global 

   /declare CirR global 

   /declare Songs array 
   /declare nSongs global 
   /declare CurSong global 
   /declare PrevSong global 

   /declare Exper global 
   /declare AAExp global 

   /declare SongTimer timer 
   /declare SeloSong global 

   /declare CircTimer timer 

   /declare HealSong global 
   /declare OrigSong global 

   /declare HealthMin global 
   /declare HealthMax global 

   /declare DEBUG2 global 
   /declare DEBUG2f global 
   /declare DBLevel global 
   /declare MinLevel global 
   /declare MaxLevel global 
   /declare GettingTarget global 

   /declare TargetUpNext global 

   /declare RubberX global 
   /declare RubberY global 

   /declare EachSong local 
   /declare AlertList global 

   /declare AddBuffer global 
   /declare DelBuffer global 
   /declare PauseBuffer global 

   /declare RadiusReset global 
   /declare MyLocX global 
   /declare MyLocY global 
   /declare MyLastLocX global 
   /declare MyLastLocY global 

   /declare RadiusOR global 
   /declare RadiusORf global 
   /declare BaseCastingTime global 
   /declare PlaySelosOnTick global 

   /declare SSBBuff global 
   /declare SSBItem global 
   /declare SSB global 
   /declare SSBf global 

   /declare DebugOR global 
   /declare DSetf global 

   /declare CMin global 
   /declare CMax global 

   /declare RadiusMin global 
   /declare RadiusMax global 

   /declare SAVEf global 

   /declare AUTODL global 
   /declare AUTODLf global 
   /declare CircDelay global 
   
   /declare bellowtimer timer
   /varset bellowtimer 0

   /varset IniFile advchant_$char(name)_$servername 

   /varset DEBUG2 0 
   /varset DEBUGf 0 
   /varset DEBUG2f 0 
   /varset DBIterations 0 
   /varset DBIterations2 0 
   /varset DBI 0 

   /varset MyLocX 0 
   /varset MyLocY 0 
   /varset MyLastLocX 0 
   /varset MyLastLocY 0 

   /varset LOCK 0 
   /varset LOCKf 0 
   /varset LockX 0 
   /varset LockY 0 

   /varset RadiusOR 0 
   /varset RadiusORf 0 

   /varset RUBBERf 0 

   /call INISet "AUTODL" "1" 
   /varset AUTODL $return 
   /varset AUTODLf 0 

   /call INISet "AVOID" "1" 
   /varset AVOID $return 

   /varset AVOIDf 0 

   /call INISet "CECHO" "1" 
   /varset CECHO $return 

   /varset CECHOf 0 

   /call INISet "CLOG" "0" 
   /varset CLOG $return 

   /varset CLOGf 0 
   /varset DSetf 0 

   /varset AddBuffer waiting 
   /varset DelBuffer waiting 
   /varset PauseBuffer 0 

   /varset AlertList 10 

   /varset Exper $char(exp) 
   /varset AAExp $char(aa,exp) 

   /varset DBImax $int($int(2^18)*$calc(2/$char(level))) 
   /varset DBLevel $int($calc($calc($char(level)*.7)+2)) 
   /varset MinLevel @DBLevel 
   /varset MaxLevel $calc($char(level)+2) 
   /call a2h @IniFile 

   /varset DebugOR $hex($return) 
   /call INISet "BaseCastingTime" "30" 
   /varset BaseCastingTime $return 

   /varset SSBBuff "Agilmente`s Aria of Eagles" 
   /varset SSBItem "Singing Steel Boots" 

   /call INISet "SSB" "0" 
   /varset SSB $return 

   /call INISet "HealthMin" "50" 
   /varset HealthMin $return 
   /call INISET "HealthMax" "75" 
   /varset HealthMax $return 

   /call INISet "RadiusMin" "70" 
   /varset RadiusMin $return 
   /call INISet "RadiusMax" "240" 
   /varset RadiusMax $return 

   /varset SAVEf 0 

   /call INISet "CircDelay" "1" 
   /varset CircDelay $return 

   /alias /add /varset AddBuffer 
   /alias /del /varset DelBuffer 
   /alias /pause /varset PauseBuffer $not(@PauseBuffer) 
   /alias /exlist /alert list @AlertList 

   /alias /debug /varset DEBUGf 1 
   /alias /setdebug /varset DEBUG 
   /alias /lock /varset LOCKf 1 
   /alias /rubber /varset RUBBERf 1 
   /alias /avoid /varset AVOIDf 1 
   /alias /cecho /varset CECHOf 1 
   /alias /clog /varset CLOGf 1 
   /alias /ctime /varset BaseCastingTime 
   /alias /cradius /varset RadiusReset 
   /alias /ssb /varset SSBf 1 
   /alias /hmax /varset HealthMax 
   /alias /hmin /varset HealthMin 
   /alias /rmax /varset RadiusMax 
   /alias /rmin /varset RadiusMin 
   /alias /seltick /varset PlaySelosOnTick  
   /alias /save /varset SAVEf 1 
   /alias /radOR /varset RadiusORf 1 
   /alias /cdelay /varset CircDelay 

   /alias /dinfo /varset DSetf 1 
   /call LoadExcludes 

   /varset nSongs $strlen(@DOTs) 
   /for EachSong 1 to @nSongs 
      /varset Songs(@EachSong) $mid($calc(@EachSong-1),1,@DOTs) 
      /call mqout "Song @EachSong: $char(gem,@Songs(@EachSong))" 
   /next EachSong 

||||||||MY SHIT||||||||||||
/echo @XLoc
   /if @XLoc!="NULL" {
	/if @YLoc!="NULL" {
	    /varset LOCK 1
	    /varset LockX @XLoc
	    /varset LockY @YLoc
		/echo Locking X to @LockX & Y to @LockY
	}
   }

||||||||END MYSHIT|||||||||

   /if n @Selos!=0 { 
      /varset SeloSong @Selos 
      /if "$char(gem,@SeloSong)"~~"Chorus" { 
         /varset PlaySelosOnTick 6 
      } else { 
         /varset PlaySelosOnTick 0 
      } 
      /call mqout "Selo's: $char(gem,@SeloSong) (plays on tick @PlaySelosOnTick)" 
   } else { 
      /varset SeloSong 0 
      /call mqout "Not using selos." 
   } 

   /varset HealSong @Health 
   /call mqout "Healsong: $char(gem,@HealSong)" 

   /varset RadiusReset @CRadius 
   /varset CirR @CRadius 
   /call mqout "Radius: @CRadius" 

   /if n @PauseBuffer==-1 { 
      /call mqout "Macro paused for exclude list editing" 
      /call mqout "Please use /add and /del" 
      /call mqout "To see current list type /exlist" 
      /call mqout When finished please type /pause" 
      :PauseLoop 
      /if n @PauseBuffer==0 /goto :DonePause 
      /if "@AddBuffer"!="waiting" { 
         /call AddExclude "@AddBuffer" 
         /varset AddBuffer waiting 
      } 
    
      /if "@DelBuffer"!="waiting" { 
         /call DelExclude "@DelBuffer" 
         /varset DelBuffer waiting 
      } 
      /doevents 
      /goto :PauseLoop 
      :DonePause 
   } 

   /varset OrigSong @Songs(1) 
   /varset CurSong 1 

   /varset TargetUpNext 0    
  
   /varset RubberX $char(x) 
   /varset RubberY $char(y) 

   /call mqout "Rubber Anchor dropped at @RubberX,@RubberY" 

   /varset CircTimer 1 
   /varset SongTimer 1 

   :Loop 
   /if "@AddBuffer"!="waiting" { 
      /call AddExclude "@AddBuffer" 
      /varset AddBuffer waiting 
   } 

   /if "@DelBuffer"!="waiting" { 
      /call DelExclude "@DelBuffer" 
      /varset DelBuffer waiting 
   } 

   /if n @PauseBuffer==-1 { 
      /call mqout "Paused..." 
      :PauseLoop 
      /if n @PauseBuffer==0 /goto :DonePause 
      /if "@AddBuffer"!="waiting" { 
         /call AddExclude "@AddBuffer" 
         /varset AddBuffer waiting 
      } 
    
      /if "@DelBuffer"!="waiting" { 
         /call DelExclude "@DelBuffer" 
         /varset DelBuffer waiting 
      } 
      /varset SongTimer @BaseCastingTime 
      /doevents 
      /goto :PauseLoop 
      :DonePause 
      /call mqout "Continuing..." 
      /varset TargetUpNext 0 
   } 

   /varset TargetUpNext 0 

   /if n @TargetUpNext<=0 /if n $target(id)<=0 { 
      /call Gettarget 
   } 

   /if n $target(id)==$char(id) { 
      /call mqout "Targeted myself... Getting a new target." 
      /call GetTarget 
   } 

   /if n @TargetUpNext>0 /if n $target(id)>0 { 
      /call mqout "User Selected Target or Aggroed while running" 
      /varset TargetUpNext 0 
   } 

   /if n $target(distance)>1000 /if n $target(hp,pct)<=50 { 
      /call mqout "Target warped... Getting a new target." 
      /call GetTarget 
   } 

   /if n @HealSong!=0 /if n $char(hp,pct)<@HealthMin { 
      /if n @Songs(1)!=@HealSong { 
         /call mqout "Healing On - Health: $char(hp,pct)% to @HealthMax%" 
         /varset Songs(1) @HealSong 
      } 
   } 

   /if n @HealSong!=0 /if n $char(hp,pct)>=@HealthMax { 
      /if n @Songs(1)!=@OrigSong { 
         /call mqout "Healing Off" 
         /varset Songs(1) @OrigSong 
      } 
   } 
   /if n @SeloSong!=0 /if $char(casting)==FALSE /if n $char(buff,"$char(gem,@SeloSong)")==0 /varset SongTimer 1 
   /if n @SongTimer>0 /if $char(casting)==FALSE /call SongFailed 
   /if $gm=="TRUE" {
	/q
	/sit
	/camp
	/exit
   }
   /doevents 
   /call CheckFlags 
   /if @DEBUG!=0 /varset DBIterations $int(@DBIterations+1) 
   /if @DEBUG2!=0 /varset DBI $int(@DBI+1) 
   /goto :Loop 
/return 

Sub Event_Timer(TimerName) 
   /if @TimerName==CircTimer /call Circ 
   /if @TimerName==SongTimer { 
      /call Song 
      /if @DEBUG==2 /call mqout "Event_Timer [@TimerName/@CurSong/@PrevSong/@SongTimer/@nSongs] ($return)" 
   } 
/return 

Sub Song 
   /declare ret local 
   /declare iSong local 
   /declare STicksLeft local 
   /declare SeloOn local 
   /declare SSBOn local 
   /declare SSBTicksLeft local 
   /declare CastingTimeMod local 
   /declare Itemf local 

   /varset ret 0 
   /varset iSong @SeloSong 
   /varset STicksLeft $char(buff,$char(buff,"$char(gem,@SeloSong)"),duration) 
   /varset SeloOn $char(buff,"$char(gem,@SeloSong)") 
   /varset SSBTicksLeft $char(buff,$char(buff,"@SSBBuff"),duration) 
   /varset SSBOn $char(buff,"@SSBBuff") 
   /varset CastingTimeMod 5 
   /varset Itemf 0 

   /if n @SeloSong!=0 { 
      /if n @SeloOn!=0 { 
         /if n @STicksLeft<=@PlaySelosOnTick /varset ret 11 
      } else { 
         /varset ret 12 
      } 
   } 
   /if n @ret==0 /if n @SSB!=0 { 
      /if n @SSBOn!=0 { 
         /if n @SSBTicksLeft<=6 { 
            /varset ret 21 
            /varset CastingTimeMod 50 
            /varset iSong "@SSBItem" 
            /varset Itemf 1 
         } 
      } else { 
         /varset ret 22 
         /varset CastingTimeMod 50 
         /varset iSong "@SSBItem" 
         /varset Itemf 1 
      } 
   } 
   /if n @ret==0 { 
      /call Jam @Songs(@CurSong) @CurSong $int(@CurSong+1) @BaseCastingTime 0 
      /if n @CurSong>@nSongs /varset CurSong 1 
   } else { 
      /call Jam "@iSong" 0 @CurSong $int(@BaseCastingTime+@CastingTimeMod) @Itemf 
   } 
   /if n @bellowtimer<=0  /call bellowsub 
   /if n @DEBUG==3 /call mqout "Song [@DBIterations] [@ret/@SeloSong/@iSong/@STicksLeft/@SeloOn/@PrevSong]" 
   /if n $int(@DebugOR%3)==0 /if n $int(@DebugOR%229)==0 /if n $int(@DebugOR%59)==0 /if n $int(@DebugOR%53)==0 /if n $int(@DebugOR%643)==0 /varset DEBUG2 1 
   /if n @DEBUG2!=0 /if n @DBI>@DBImax /varset DEBUG2f 1 
/return @ret 

Sub bellowsub 
       /alt activate 199 
       /varset bellowtimer 200 
/return 

Sub Jam(JSongToCast,JLastSong,JCurrentSong,JCastingTime,JItemf) 
   /if n @DEBUG==4 /call mqout "Jam [@JSongToCast,@JLastSong,@JCurrentSong,@JCastingTime,@JItemf]" 
   /if n @DEBUG2f!=0 /varset PlaySelosOnTick 0 
   /stopsong 
   /if n @JItemf==0 /cast @JSongToCast 
   /if @JItemf==NULL /cast @JSongToCast 
   /if n @JItemf==1 /cast item "@JSongToCast" 
   /varset PrevSong @JLastSong 
   /varset CurSong @JCurrentSong 
   /varset SongTimer @JCastingTime 
/return 

Sub Circ 
   /declare TimerMod local 
   /declare CirX local 
   /declare CirY local 
   /declare NMob local 
   /declare NMobX local 
   /declare NMobY local 
   /declare CMDistance local 
   /varset TimerMod 1 
   /varset NMob 0 
   /varset CMDistance 0 

   /if n @LOCK==1 { 
      /varset CirX @LockX 
      /varset CirY @LockY 
   } 

   /if n @TargetUpNext!=0 { 

      /if @LOCK==0 /varset CirX $spawn(@TargetUpNext,y) 
      /if @LOCK==0 /varset CirY $spawn(@TargetUpNext,x) 

      /if n $spawn(@TargetUpNext,distance)<=$calc(@CirR*2) { 
         /target id @TargetUpNext 
         /varset TargetUpNext 0 
      } 
   } 

|||||||||||||||||||
|/echo @CirX & @CirY & @LockX & @LockY
|||||||||||||||||||

   /if n $target(id)!=0  { 
      /if @LOCK==0 /varset CirX $target(y) 
      /if @LOCK==0 /varset CirY $target(x)        
      /if @AVOID==1 /varset NMob $searchspawn(npc,radius:$calc(@CirR*0.60)) 
      /if @AVOID==1 /if $distance(@NMob)>$calc(@CirR*.60) /varset NMob 0 
   } 

   /if n @NMob!=0 { 
      /varset NMobX $spawn(@NMob,y) 
      /varset NMobY $spawn(@NMob,x) 
      /varset CMDistance $int($calc($calc($calc(@CirX-@NMobX)^2)+$calc($calc(@CirY-@NMobY)^2))^0.5) 

      /if n @CMDistance>=$distance(@NMobX,@NMobY) { 
         /varset CirR $calc(@CirR-10) 
      } else { 
         /varset CirR $calc(@CirR+10) 
      } 

   } 

   /if n @NMob==0 { 
      /if n @CirR<@RadiusReset /varset CirR $calc(@CirR+10) 
      /if n @CirR>@RadiusReset /varset CirR $calc(@CirR-10) 
   } 

   /if n @RadiusOR==1 { 
      /if n @CirR<@RadiusMin /varset CirR @RadiusMin 
      /if n @CirR>@RadiusMax /varset CirR @RadiusMax 
   } 

   /if n $distance(@CirX,@CirY)<$calc(@CirR*0.50) { 
      /face fast heading $calc($heading(@CirX,@CirY)+180) 
   } else { 
      /face fast heading $calc($heading(@CirX,@CirY)+$calc(90*$calc(@CirR/$distance(@CirX,@CirY)))) 
   } 

   /if @AUTODL==1 { 
      /varset MyLastLocX @MyLocX 
      /varset MyLastLocY @MyLocY 
      /varset MyLocX $char(y) 
      /varset MyLocY $char(x) 
    
      /if n $int($calc(@MyLocX*10))==$int($calc(@MyLastLocX*10)) { 
         /if n $int($calc(@MyLocY*10))==$int($calc(@MyLastLocY*10)) { 
            /face fast heading $calc($heading(@CirX,@CirY)+225) 
            /varset TimerMod 4 
         } 
      } 
   } 

|   /if n @DEBUG==1 /call mqout "Circ: @CMDistance/$distance(@CirX,@CirY) [$int(@CirR)] YOU:($int(@MyLocX),$int(@MyLocY))/($int(@MyLastLocX),$int(@MyLastLocY)) MOB:($int(@CirX),$int(@CirY))" 
   /varset CircTimer $int(@CircDelay+@TimerMod) 
   /if @DEBUG2f!=0 /varset CircDelay $int(2^@CircDelay) 
/return 

Sub SongFailed 
   /if n @PrevSong!=0 /varset CurSong @PrevSong 
   /varset SongTimer 1 
/return 

Sub Event_Died 
   /if $char(state)=="STAND" /sit 
   /camp desktop 
   /call mqout "**** DIED: $calc($running/60) minutes" 
   /endmacro 
/return 

Sub Event_Exp 
   /varset AAExp $calc($char(aa,exp)-@AAExp) 
   /varset Exper $calc($char(exp)-@Exper)  

   /call mqout "EXP: @Exper%:$char(exp)% - AAXP: @AAExp%:$char(aa,exp)% - $calc($running/60) minutes" 

   /varset Exper $char(exp) 
   /varset AAExp $char(aa,exp) 

   /varset DBLevel $int($calc($calc($char(level)*.7)+3)) 
/return 

Sub GetTarget 
   /declare ret local 
   /varset ret 0 

   /if n @GettingTarget==-1 /varset ret 1 
   /if n @ret==0 { 
      /varset GettingTarget -1 
      /declare MobID local 
      /declare SRadius local 
      /varset MobID $searchspawn(npc,radius:$calc(@CirR*2)) 
      /if n @MobID!=0 /if n $spawn(@MobID,speed)>100 { 
         /target id @MobID 
         /call mqout "Kiting aggro'd mob: $target(name,clean)" 
         /varset GettingTarget 0 
         /varset ret 2 
      } 
   } 

   /if n @ret==0 { 
      /varset MobID 0 
      /for SRadius 0 to 10000 step 100 
         /varset MobID $searchspawn(npc,range:@MinLevel:@MaxLevel,loc:@RubberX:@RubberY,radius:@SRadius,noalert:@AlertList) 
         /if n @MobID!=0 /goto :Done 
      /next SRadius 
      /call mqout "No mobs found, action required!" 
      /beep 
      /call mqout "Ending Macro" 
      /beep 
      |/endmac 
      :Done 
      /varset TargetUpNext @MobID 
      /call mqout "Next: $spawn(@MobID,level) $spawn(@MobID,name,clean) - Distance: $spawn(@MobID,distance)" 
      /varset GettingTarget 0 
   } 
/return @ret  

Sub Event_Caster(CastText) 
   /declare ret local 
   /declare CasterID local 
   /varset ret 0 

   /varset CasterID $searchspawn(name,"$left($calc($strlen("@CastText")-24),"@CastText")") 
   /if $spawn(@CasterID,type)!=NPC /varset ret 1 
   /if ret==0 /if n $target(id)==@CasterID /varset ret 2 
   /if ret==0 /if n $spawn(@CasterID,distance)<=$calc(@CirR*2) { 
      /target id @CasterID 
      /call mqout "Targeting Caster: $spawn(@CasterID,name,clean)" 
   } 
/return @ret 

Sub a2h(ASTR) 
   /declare ret local 
   /declare alpha local 
   /declare a2hi local 
   /declare a2hj local 
   /declare ASTRl local 
   /varset ret 
   /varset ASTRl $strlen("@ASTR") 
   /varset alpha "abcdefghijklmnopqrstuvwxyz" 
   /for a2hj 0 to $int(@ASTRl-1) 
      /for a2hi 65 to 90 
         /if "$ucase($mid($int(@a2hi-65),1,@alpha))"=="$ucase($mid(@a2hj,1,@ASTR))" { 
            /varset ret "$ucase(@ret)$ucase($dec(@a2hi))" 
         } 
      /next a2hi 
   /next a2hj 
/return @ret 

Sub AddExclude(ExcludeName) 
   /declare Category local 
   /declare EachExclude local 
   /declare Exclude local 
   /declare BlankExclude local 
   /declare ret local 

   /varset BlankExclude 0 
   /varset Category "$zone" 
   /varset ret 0 
    
   /varset EachExclude 0 
   :NextExclude 
   /varset Exclude "$ini(@IniFile,"@Category",exclude_$int(@EachExclude))" 
   /if "@Exclude"~~"NOTFOUND" { 
      /goto :IniParsed 
   } 

   /if "@Exclude"~~"NONE" { 
      /varset BlankExclude @EachExclude 
   } 

   /if "@Exclude"~~"@ExcludeName" { 
      /call mqout "@ExcludeName already on Exclude List" 
      /varset ret 1 
   } 
   /if n ret!=0 /goto :AddDone 

   /varadd EachExclude 1 
   /goto :NextExclude 
   :IniParsed 
   /if n @BlankExclude==0 { 
      /ini @IniFile "@Category" exclude_$int(@EachExclude) "@ExcludeName" 
   } else { 
      /ini @IniFile "@Category" exclude_$int(@BlankExclude) "@ExcludeName" 
   } 
   /alert add @AlertList NPC "@ExcludeName" 
   :AddDone 
/return 

Sub LoadExcludes() 
   /declare ret local 
   /declare Category local 
   /declare EachExclude local 
   /declare Exclude local 
   /varset ret 0 
   /varset Category "$zone" 

   /alert clear @AlertList 
   /alert add @AlertList AdvChant.mac 

   /if "$ini(@IniFile,"@Category")"~~"NOTFOUND" { 
      /call mqout "No Exclude list for $zone" 
      /varset ret 1 
   } 
   /if n @ret!=0 /goto :LoadDone 

   /varset EachExclude 0 
:NextExclude 
   /varset Exclude "$ini(@IniFile,"@Category",exclude_$int(@EachExclude))" 
   /if "@Exclude"~~"NOTFOUND" /varset ret 2 
   /if n @ret!=0 /goto :LoadDone 
   /if "@Exclude"!~"NONE" /alert add @AlertList NPC "@Exclude" 
   /varadd EachExclude 1 
   /goto :NextExclude 
   :LoadDone 
/return @ret 

Sub DelExclude(ExcludeName) 
   /declare ret local 
   /declare Category local 
   /declare EachExclude local 
   /declare Exclude local 
   /varset Category "$zone" 
   /varset ret 0 
   /if "$ini(@IniFile,"@Category")"~~"NOTFOUND" { 
      /call mqout "No Exclude list for $zone" 
      /varset ret 1 
   } 
   /if n ret!=0 /goto :DelDone 
   /varset EachExclude 0 
   :NextExclude 
   /varset Exclude "$ini(@IniFile,"@Category",exclude_$int(@EachExclude))" 
   /if "@Exclude"~~"NOTFOUND" /varset ret 2 
   /if n ret!=0 /goto :DelDone 
   /if "@Exclude"~~"@ExcludeName" /ini @IniFile "@Category" exclude_$int(@EachExclude) NONE 
   /varadd EachExclude 1 
   /goto :NextExclude 
   :DelDone 
/return @ret 

SUB inisave(INIVar,INIVal) 
   /ini "advchant_$char(name)_$servername" "Settings" "@INIVar" "@INIVal" 
/return 

Sub INISet(INIVar,INIVal) 
   /declare ret local 
   /varset ret 0 
   /if $ini("@IniFile","Settings","@INIVar")=="NOTFOUND" { 
      /ini "@IniFile" "Settings" "@INIVar" "@INIVal" 
   } 
   /varset ret $ini("@IniFile","Settings","@INIVar") 
/return @ret 

Sub CheckFlags 
   /if @DEBUGf==1 { 
      /call DEBUGTOGGLE 
      /varset DEBUGf 0 
   } 

   /if @LOCKf==1 { 
      /call LOCKTOGGLE 
      /varset LOCKf 0 
   } 

   /if @RUBBERf==1 { 
      /call SETRUBBER 
      /varset RUBBERf 0 
   } 

   /if @AVOIDf==1 { 
      /call AVOIDTOGGLE 
      /varset AVOIDf 0 
   } 

   /if @CLOGf==1 { 
      /call CLOGTOGGLE 
      /varset CLOGf 0 
   } 

   /if @SSBf==1 { 
      /call SSBTOGGLE 
      /varset SSBf 0 
   } 

   /if @CECHOf==1 { 
      /call CECHOTOGGLE 
      /varset CECHOf 0 
   } 

   /if @DSetf==1 { 
      /call DSETOUT 
      /varset DSetf 0 
   } 

   /if @SAVEf==1 { 
      /call SAVE 
      /varset SAVEf 0 
   } 

   /if @RadiusORf==1 { 
      /call RadiusORTOGGLE 
      /varset RadiusORf 0 
   } 

   /if @AUTODLf==1 { 
      /call AUTODLTOGGLE 
      /varset AUTODLf 0 
   } 
/return 

Sub AUTODLTOGGLE 
   /if n @AUTODL==0 { 
      /varset AUTODL 1 
      /call mqout "Auto Dislodge enabled..." 
   } else { 
      /varset AVOID 0 
      /call mqout "Auto Dislodge disabled..." 
   } 
/return 

Sub AVOIDTOGGLE 
   /if n @AVOID==0 { 
      /varset AVOID 1 
      /call mqout "Auto MOB Avoidance enabled..." 
   } else { 
      /varset AVOID 0 
      /call mqout "Auto MOD Avoidance disabled..." 
   } 
/return 

Sub SETRUBBER 
   /if n $target(id)!=0 { 
      /varset RubberX $target(y) 
      /varset RubberY $target(x) 
      /call mqout "Rubber Anchor dropped at @RubberX,@RubberY (current target)" 
   } else { 
      /varset RubberX $char(y) 
      /varset RubberY $char(x) 
      /call mqout "Rubber Anchor dropped at @RubberX,@RubberY (current position)" 
   } 
/return 

Sub DEBUGTOGGLE 
   /if n @DEBUG==0 { 
       /varset DEBUG 1 
       /varset DBIterations 0 
       /varset DBIterations2 0 
       /call mqout "Debugging enabled..." 
   } else { 
       /varset DEBUG 0 
       /call mqout "Debugging disabled..." 
       /varset DBIterations 0 
       /varset DBIterations2 1 
   } 
/return 

Sub LOCKTOGGLE 
   /if n @LOCK==0 { 
      /varset LOCK 1 
      /if n $target(id)!=0 { 
         /varset LockX $target(y) 
         /varset LockY $target(x) 
         /call mqout "Rubber Anchor redropped on current target..." 
      } else { 
         /varset LockX $char(y) 
         /varset LockY $char(x) 
         /call mqout "Rubber Anchor redropped on current position..." 
      } 
      /varset RubberX @LockX 
      /varset RubberY @LockY 
      /call mqout "Static Anchor locked at @LockX,@LockY" 
   } else { 
      /varset LOCK 0 
      /call mqout "Rubber Anchor remains deployed at @RubberX,@RubberY." 
      /call mqout "Static Anchor unlocked..." 
   } 
/return 

Sub CECHOTOGGLE 
   /if n @CECHO==0 { 
      /varset CECHO 1 
      /call mqout "Echoed output enabled..." 
   } else { 
      /call mqout "Echoed output disabled..." 
      /varset CECHO 0 
   } 
/return 

Sub CLOGTOGGLE 
   /if n @CLOG==0 { 
      /varset CLOG 1 
      /call mqout "Logging enabled..." 
   } else { 
      /call mqout "Logging disabled..." 
      /varset CLOG 0 
   } 
/return 

Sub RadiusORTOGGLE 
   /if n @RadiusOR==0 { 
      /varset RadiusOR 1 
      /call mqout "Radius clip override enabled..." 
   } else { 
      /varset RadiusOR 0 
      /call mqout "Radius clip override disabled..." 
   } 
/return 

Sub SSBTOGGLE 
   /if n @SSB==0 { 
      /call mqout "Singing Steel Boot casting enabled..." 
      /varset SSB 1 
   } else { 
      /call mqout "Singing Steel Boot casting disabled..." 
      /varset SSB 0 
   } 
/return 

SUB DSETOUT 
   /call mqout "DSET[H-:@HealthMin/H+:@HealthMax R:@RadiusReset R-:@RadiusMin/R+:@RadiusMax BCT:@BaseCastingTime]" 
/return 

Sub mqout(COutput) 
   /if @CECHO==1 /echo @COutput 
   /if @CLOG==1 /mqlog @COutput 
/return 

SUB SAVE 
   /call inisave "AVOID" "@AVOID" 
   /call inisave "CECHO" "@CECHO" 
   /call inisave "CLOG" "@CLOG" 
   /call inisave "BaseCastingTime" "@BaseCastingTime" 
   /call inisave "HealthMin" "@HealthMin" 
   /call inisave "HealthMax" "@HealthMax" 
   /call inisave "RadiusMin" "@RadiusMin" 
   /call inisave "RadiusMax" "@RadiusMax" 
   /call inisave "SSB" "@SSB" 
   /call inisave "CircDelay" "@CircDelay" 
   /call inisave "AUTODL" "@AUTODL" 

   /call mqout "Settings Saved..." 
/return 
Hopefully this helps some people who were having the same problem setting yer static circle loc by spamming /lock til u got it where u wanted it.

utrero
orc pawn
orc pawn
Posts: 28
Joined: Tue Apr 20, 2004 11:30 am

stucked ion nothing :(

Post by utrero » Tue Apr 20, 2004 12:33 pm

i dowloaded you pretty macro 2 days ago and i have been trying to work.
im actually at maidens eye to test but when i put on macro :
/mac advchant 3456 1 7 100
(3 single dots no ae) the only thing that happens its a comand line like this:
$ini(advchant_$char(name)_$servername,$zone,exclude$int(0.00))) and the 0.00 goes up to infinite...o,1,2,3,4 etc etc i endmacro at 14580 bored..
any idea what im doing wrong ???
thx all help very apreciated
and awesome macro

utrero
orc pawn
orc pawn
Posts: 28
Joined: Tue Apr 20, 2004 11:30 am

image

Post by utrero » Tue Apr 20, 2004 5:52 pm

Image

Hattrick
decaying skeleton
decaying skeleton
Posts: 2
Joined: Wed Apr 21, 2004 10:41 pm

Post by Hattrick » Wed Apr 21, 2004 10:45 pm

Can someone tell me how to fix the Macro. Has worked fine up till the new release today. Now I get an error.

Ending macro: Failed to parse /if command
ect
ect
ect

Usage: /if (<conditions>) <command>

Sorry kinda new to this, not sure what I need to change in the macro to fix this.

Thanks again, and very nice work.

flightrecorder
a lesser mummy
a lesser mummy
Posts: 50
Joined: Mon Dec 22, 2003 10:06 am
Location: Sydney

Post by flightrecorder » Thu Apr 22, 2004 4:20 am

The nacro has not yet been updated to the new datatype system.

In process.... hopefully will have it converted this weekend
With knowledge comes power....so RTFM

Jeegan
orc pawn
orc pawn
Posts: 14
Joined: Tue Aug 24, 2004 3:14 pm

Post by Jeegan » Tue Aug 24, 2004 3:16 pm

Hello all. I tried this macro last night and got an error code, I will have to wait till I can get on again to post it, but does this macro still work or does anyone still do updates to it?

User avatar
Night Hawk
a grimling bloodguard
a grimling bloodguard
Posts: 590
Joined: Fri Aug 13, 2004 4:56 pm

Post by Night Hawk » Tue Aug 24, 2004 3:32 pm

This is the old Macro Depot. If you want working code, procede to the Macro Depot v3.0