chant.mac for bards, orbit not box

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

Moderator: MacroQuest Developers

spektralkat
orc pawn
orc pawn
Posts: 22
Joined: Sat Dec 20, 2003 5:25 am

chant.mac for bards, orbit not box

Post by spektralkat » Tue Apr 27, 2004 4:42 pm

This comes strait from diamond mac but ya orbit instead of run the gm atracting box

Code: Select all

#turbo 
#chat tell 

#event Zoned "You have entered" 
#event StatusReport "status report" 
#event GainExp "You gain" 

Sub Main 
   /zapvars 

   | These variables are related to movement and AI control. 
   /declare RubberX global 
   /declare RubberY global 
   /declare CirX global 
   /declare CirY global 
   /declare CirR global 
   /declare StopMe global 
   /declare StopTimer timer 
   /declare ProximityTimer timer 
   /varset RubberX @Param1 
   /varset RubberY @Param0 
   /varset CirX @Param0 
   /varset CirY @Param1 
   /varset CirR @Param2 
   /varset StopMe 0 
   /varset ProximityTimer 1m 

   | These variables are related to song-twisting. 
   /declare SongTimer timer 
   /declare Songs array 
   /declare CurSong global 
   /declare PrevSong global 
   /declare nSongs global 
   /declare EachSong local 

   | Experience & Time Variables 
   /declare CurrentExp global 
   /declare CurrentAAXP global 
   /declare CurrentTime global 
   /varset CurrentExp ${Me.PctExp} 
   /varset CurrentAAXP ${Me.PctAAExp} 
   /varset CurrentTime ${Math.Calc[${Macro.RunTime}/60]} 

   | This block of code checks for proper arguments and echos error or initialization messages. 
   /if (!${Defined[Param4]}) { 
      /echo Usage: /mac Chant <Y> <X> <Radius> <Song list> <TooClose> 
      /echo <Y>         -- Y-coordinate of the center point. 
      /echo <X>         -- X-coordinate of the center point. 
      /echo <Radius>    -- Radius from center point to kite. 
      /echo <Song list> -- List of songs to be sung, include Selo's if needed. 
      /echo <TooClose   -- Distance at which non-friendly players halt kiting. 
      /endmacro 
   } 



   | This block of code sorts out the list of songs to be twisted while running. 
   /varset nSongs ${String[@Param3].Length} 
   /for EachSong 1 to @nSongs 
      /varset Songs(@EachSong) ${String[@Param3].Mid[${Math.Calc[@EachSong]},1]} 
      /echo Song @EachSong: ${Me.Gem[@Songs(@EachSong)]} 
   /next EachSong 
   /varset CurSong 1 
   /call Event_Timer 
   /echo Running a Circle with center at @RubberY, @RubberX and chant-kiting mobs. 



   | The main loop, this iterates unless some AI warning is reached. 
   /keypress autorun 
   :ChantLoop 
   | Maintain distance from centerpoint, given character's current position. 
   /if (${Math.Distance[@CirX,@CirY]}<${Math.Calc[@CirR/2]}) { 
      /face heading ${Math.Calc[${Heading[@CirX,@CirY].DegreesCCW}+180]} 
   } else { 
      /face heading ${Math.Calc[${Heading[@CirX,@CirY].DegreesCCW}+${Math.Calc[90*${Math.Calc[@CirR/${Math.Distance[@CirX,@CirY]}]}]}]} 
   } 

   | Do stuff if not in a holding phase. 
   /if (@StopMe==0) { 
      /doevents 
      /if (!${Me.Casting.ID}) { 
         /varset CurSong @PrevSong 
         /call Event_Timer 
      } 
      | If a GM zones in, shut down for 30 minutes. 
      /if (${Spawn[gm].ID}) { 
         /echo GM detected in zone, going into standby at $time(h):$time(m):$time(s). 
         /g GM detected in zone, going into standby at $time(h):$time(m):$time(s). 
         /stopsong 
         /varset StopMe 1 
         /varSet StopTimer 200 
      } 

      /if (@ProximityTimer<100) { 
         | If an ungrouped PC comes within specified range, shut down until they leave. 
         /if (${Spawn[pc noalert 1 radius @Param4].ID}) { 
            /echo ${Spawn[pc noalert 1 radius @Param4].CleanName} is inside @Param4 ft., going into standby at ${Time.Time12}. 
            /g ${Spawn[pc noalert 1 radius @Param4].CleanName} is inside @Param4 ft., going into standby at ${Time.Time12}. 
            /stopsong 
            /varset StopMe 2 
            /varset StopTimer 200 
         } 
         /varadd ProximityTimer 1m 
      } 

      | Get a new target if the current one is no good. 
      /if (!${Target.ID}) /call GetTarget 
      /if (${Target.Name.Find[corpse]}) /call GetTarget 
      /if (${Target.Type.Equal[PC]}) /call GetTarget 
   } 

   | Quit the ChantLoop and go into a holding phase if criteria are met. 
   /if (@StopTimer<10 && @StopMe>0) /goto :StopStuff 
   /goto :ChantLoop 



   | This block of code is operations to perform before going into the standby loop. 
   :StopStuff 
   | Face the far corner, stop moving and Fade Memories. 
   /stopsong 
   /face fast heading 135 
   /delay 10 
   /keypress back 
   /alt activate 212    

   | If a GM is in zone, set a timer for 30 minutes. 
   /if (@StopMe==1) { 
      /varset StopTimer 18000 
   } 
   | If someone came within specified range, set a timer for 5 minutes. 
   /if (@StopMe==2) { 
      /varset StopTimer 1m 
   } 



   | This loop (StopLoop) waits for 30 minutes after a GM zones in to restart 
   | or until no ungrouped PCs are within specified range. 
   :StopLoop 
   /if (@StopMe==1) { 
      /if (@StopTimer==0) { 
         /echo It's been 30 minutes since a GM was sighted, resuming chant-kiting at ${Time.Time12}. 
         /g It's been 30 minutes since a GM was sighted, resuming chant-kiting at ${Time.Time12}. 
         /varset StopMe 0 
         /keypress autorun 
         /goto :ChantLoop 
      } 
   } 
   /if (@StopMe==2) { 
      /if (@StopTimer>0 && ${Me.CurrentMana}>1000) { 
         /if (!${Spawn[pc noalert 1 radius @Param4].ID}) { 
            /echo No PCs within @Param4 ft., resuming chant-kiting at ${Time.Time12}. 
            /g No PCs within @Param4 ft., resuming chant-kiting at ${Time.Time12}. 
            /varset StopMe 0 
            /keypress autorun 
            /goto :ChantLoop 
         } else { 
            /varset StopTimer 1m 
         } 
      } 
   } 
   /goto :StopLoop 
/return 

Sub Event_Chat(ChatType,Sender,ChatText) 
   /declare MyMob local 
   /varset MyMob $target(id) 
   /if (${String[@ChatText].Lower.Equal[group me]}) { 
      /target range 1 22000 @Sender 
      /if (${Group}<6) { 
         /tell @Sender I'm kiting at ${Me.Y}, ${Me.X} -- come join me. 
         /invite 
         /alert add 1 pc @Sender 
      } else { 
         /tell @Sender My group is full right now, try back later! 
         /alert add 1 pc @Sender 
      } 
   } 
   /if (${String[@ChatText].Lower.Equal[status report]}) { 
      /tell @Sender TARGET: ${Target.CleanName} (${Target.PctHPs}%) SELF: ${Me.Name} (${Me.PctHPs}%) EXP: ${Me.Level} (${Me.PctExp}%) AAXP: ${Me.AAPoints} (${Me.PctAAExp}%) 
   } 
    
   /target npc range 1 200 id @MyMob 
/return 

Sub Event_Timer(TimerName) 
      /delay 2 
      /alt activate 199 
      /stopsong 
      /cast @Songs(@CurSong) 
      /varset PrevSong @CurSong 
      /varset SongTimer 30 
      /varadd CurSong 1 
      /if (@CurSong>@nSongs) /varset CurSong 1 
/return 

Sub GetTarget 
   /if (${Spawn[npc radius 200].ID}) /target npc radius 200 
   /if (${Target.Level}<7) /keypress esc 
   /if (${Target.Distance}>200) /keypress esc 
/return 

Sub Event_Zoned 
   /sit 
   /camp desktop 
   /endmacro 
/return 

Sub Event_StatusReport 
   /declare LoopCounter local 
   /declare GroupMembers local 
   /varset GroupMembers "" 

   /for LoopCounter 0 to ${Math.Calc[${Group}-1]} 
   /varcat GroupMembers ${Group[@LoopCounter].Name} 
   /varcat GroupMembers " " 
   /next LoopCounter 

      /echo TARGET: ${Target.CleanName} (${Target.PctHPs}%) 
   /echo SELF: ${Me.Name} (${Me.PctHPs}%) 
   /echo EXP: ${Me.Level} (${Me.PctExp}%) 
   /echo AAXP: ${Me.AAPoints} (${Me.PctAAExp}%) 
   /echo GROUP: @GroupMembers 
   /echo RUNTIME: ${Math.Calc[${Macro.RunTime}/60]} 
/return 

Sub Event_GainExp 
   /varset CurrentExp ${Math.Calc[${Me.PctExp}-@CurrentExp]} 
   /varset CurrentAAXP ${Math.Calc[${Me.PctAAExp}-@CurrentAAXP]} 
   /varset CurrentTime ${Math.Calc[${Math.Calc[${Macro.RunTime}/60]}-@CurrentTime]} 

   /echo EXP: ${Me.PctExp}% (@CurrentExp%) AAXP: ${Me.PctAAExp}% (@CurrentAAXP%) TIME: ${Math.Calc[${Macro.RunTime}/60]} (@CurrentTime) 

   /varset CurrentExp ${Me.PctExp} 
   /varset CurrentAAXP ${Me.PctAAExp} 
   /varset CurrentTime ${Math.Calc[${Macro.RunTime}/60]} 
/return 
Last edited by spektralkat on Tue Apr 27, 2004 7:26 pm, edited 1 time in total.

theoneandonly
orc pawn
orc pawn
Posts: 26
Joined: Sun Apr 11, 2004 6:39 pm

Post by theoneandonly » Tue Apr 27, 2004 5:41 pm

song select is bugged...8137, and it plays my first second and a NULL song....

spektralkat
orc pawn
orc pawn
Posts: 22
Joined: Sat Dec 20, 2003 5:25 am

Post by spektralkat » Tue Apr 27, 2004 7:28 pm

okies remember format for runnin thsi lil one is /mac chant 1234 1234 40 12345 100

first number is x second is y third is radius fourth is songlist and last is pc near to shut it all down
good luck and happy hunting, changed yur sugestion back btw when i tryed it i noticed what it did,