PLbot works for any class

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

Moderator: MacroQuest Developers

some-eq-player
a lesser mummy
a lesser mummy
Posts: 70
Joined: Tue Dec 09, 2003 12:37 pm

PLbot works for any class

Post by some-eq-player » Sun Jan 11, 2004 3:02 pm

[edit] ok .. for all you smart people out there heres how to do this.
1) save the 3 files, PLbot.mac SpellCast.ini and advfollow.ini

2)modify 2 evil lines (afk and channel )and then run macro.

note: i have fixed the comment lines that moved over to the next line
good luck

Code: Select all

|PLbot.mac
|how to use : 
| 1) define your spells and actions below. --- YOU MUST EDIT THIS FILE --- 
| you have been warned! 
| 2) set your hot keys in game to tell the channel the key words in
| a sentence. ex: /1 Healme im gonna die! would cause the bot to stand up
| and cast greater healing.
| note: the reason i use some words together as one word is so that things
| like sow and sow me wouldnt cause the bot to cast it twice, not like 
| anyone but you has to read the channel anyways..
| 3) run your PLbot to your starting location
| 4) run the macro.
| 5) the bot will automaticly mem any spell it doesnt have up into SLOT 5,
| however it is recomemded that you have all the spells you plan to use up
| already with the least important one at 5. (i use my skin there since i 
| barely ever cast it).
|
| default Keywords it responds to: capital letters dont matter.
|
| -- targets the message sender ---
| healme        ---   casts greater healing
| thornsme      ---   casts Shield of Spikes 
| regenme       ---   casts Chloroplast
| sowme		---   casts spirit of wolf
| skinme	---   casts Skin like Diamond			
| strme		---   casts Storm Strength
| joinup	---   invites the sender to join a group, or join.
| follow me	---   uses the custom version of adv follow to follow the sender.
|                     will zone with him. can still cast while following, 
|                     and will continue to follow till told to stop.
| stophere	---   makes the PLbot reset as if just started, so he'll sit
|                     once more. (might need a little testing, since this
|                     just tells advfollow to stop and calls sub main again)
|
| -- Assist in some way the message sender to perform actions --
| repair	---   targets the sender and presses tab to target himself,
|		      then casts Greater Healing. used this method over f1 
|		      for those PLbots that have charms, wanna avoid targetting pet.
| savehim	---   assists the sender and casts Greater Healing on the target
| buffhim	---   assists the sender and is a quick way to cast thorns
|                     regen sow skin and str to those beggers of buffs.
| sowhim	---   assists the sender and is for those sow beggars.
| regenhim	---   assists the sender to cast a cloro on the target.
| roothim	---   assists the sender to root his target
| snarehim	---   assists the sender to snare his target
| harmonyhim	---   assists the sender to harmony of nature the target
| nukehim	---   assists the sender to cast root the target and then cast
|		      firestrike
|
| -- special responces --
| campnow			--- makes the PLbot camp to desktop
| ---- and all the custom conversation AI you wanna pop in =P
| mana? 	--- tells you how much mana is left.
|
|-----------------------------------
| ENJOY








#Event SLAINBY 

|--------------------
|CHANGE THIS TO tell for tells or chat for channel
|--------------------
#chat chat 
|--------------------

|run the customized auto follow macro so we can use it from here with echo's
#Include advfollow.ini

|this is the ini that casts the spells ... the spells are defined here though.
#Include Spellcast.ini





Sub Main 
/echo starting PLbot macro

| these are to let you know if LOW on HEALTH or MANA,
| just a safty feature. set to 2 to disable.
/declare hpwarning global
/declare mpwarning global
/varset hpwarning 0
/varset mpwarning 0 

| making sure the screen is clean for view in case you need to do something 
| with the character in an emrgency situation that you must run over to him.
|--------
/cleanup
|--------

|making sure your not in any other channels that might trigger you to do anything.
| --------
/leave 1
| -------

| -----------------------------
| PLEASE CHANGE THIS TO YOUR OWN CHANNEL!
| -----------------------------
/join macroquest
| -----------------------------
|
| this is your AFK message --- change it ---
/afk IM a macroquest user, REPORT ME! im careless and dont change my macro's!
| -----------------------------

/delay 1s
/1 ok ready to PL
:Mainloop 
/call Checkhealth
/call Checkmana
|
| -----------------------------

| make sure hes medding.
   /if $char(state)=="Stand" { 
      /sit 
   } 
   /doevents 
   /goto :Mainloop 
/return



Sub Event_Chat(ChatType,Sender,ChatText) 

| -------------------------------------------------------------------------------
| starting here is where you edit the KEYWORD in the sentence and 
| the spell that the keyword triggers.
| @chattext (first line in each set) is the keyword. Healme for the first example.
| /call cast is the spell it triggers .. Greater healing in the first example ...
| Edit those 2 fields for your spell effect. 
| 
| if you change from chat to tell at the top of this then you must change /1 to
| /tt below. for each set
|
| !!!!!!!!!!!!!!!!!ALSO PLEASE ADD YOUR OWN RESPONCE CHAT !!!!!!!!!!!!!!!!!!!!!! 
| i cant stress that enough , i dont wanna see people being caught because sony 
|decides to check for these lines repetitively or something
| -------------------------------------------------------------------------------
| some lines below use /say to tell your target your casting buffs on them so they
| dont runaway, if you dont like it remove it.
| ***********************************

   /if "@ChatText"~~"Healme" { 
   /target @Sender 
/delay 1
   /1 "Heal inc to %t
/delay 1
   /call Cast "Greater Healing" 
} 

| ***********************************

   /if "@ChatText"~~"Thornsme" { 
/delay 1
   /target @Sender 
/delay 1
   /1 thorns inc to %t
/delay 1
   /call Cast "Shield of Spikes" 
} 

| ***********************************

   /if "@ChatText"~~"Regenme" { 
/delay 1
   /target @Sender 
/delay 1
   /1 regen inc to %t
/delay 1
   /call Cast "Chloroplast" 
}

| ***********************************

/if "@ChatText"~~"Sowme" { 
/delay 1
   /target @Sender 
/delay 1
   /1 sow inc to %t
/delay 1
   /call Cast "Spirit of Wolf" 
}  

| ***********************************

/if "@ChatText"~~"Skinme" { 
/delay 1
   /target @Sender 
/delay 1
   /1 skin inc for %t
/delay 1
   /call Cast "Skin like Diamond" 
}  

| ***********************************

/if "@ChatText"~~"strme" { 
/delay 1
   /target @Sender 
/delay 1
   /1 Strength inc for %t
/delay 1
   /call Cast "Storm Strength"
}
| ***********************************

/if "@ChatText"~~"joinup" { 
/target @Sender
/delay 1s
/invite
}

| ***********************************

| -------------------------------------------------------------------------------
| below you will find special sets these dont target the sender, instead they
| assist him.
| for instance root will assist you and root the target.
| Repair will make the druid heal himself manualy ( though now i added a check 
| for that so you might not need.)
| save him will heal your target 
| buffhim will cast the buffs listed on your target. 
| followme will follow the sender 
| -------------------------------------------------------------------------------

/if "@ChatText"~~"repair" { 
/delay 1
/target @Sender 
/delay 1   
/press tab 
/delay 1
/1 healing myself
/delay 1
    /call Cast "Greater Healing" 
}  

| ***********************************

/if "@ChatText"~~"savehim" { 
/delay 1
/target @Sender 
/delay 1   
/assist 
/delay 1s
/1 heal to %t
/say healing %t
/delay 1
    /call Cast "Greater Healing" 
}  

| ***********************************

/if "@ChatText"~~"buffhim" { 
/delay 1
/target @Sender 
/delay 1   
/assist 
/delay 1s
/1 gonna buff up %t 
/say buffing up %t
/delay 1s
/call Cast "Skin like Diamond"
/call Cast "Spirit of Wolf"
/call Cast "Chloroplast"
/call Cast "Shield of Spikes"
/call Cast "Storm Strength"
/say ok
} 

| ***********************************

/if "@ChatText"~~"sowhim" { 
/delay 1
/target @Sender 
/delay 1   
/assist 
/delay 1s
/1 incomming SOW for %t .
/say %t, sow inc 
/delay 1s
/call Cast "Spirit of Wolf"
/say ok
}

| ***********************************

/if "@ChatText"~~"regenhim" { 
/delay 1
/target @Sender 
/delay 1   
/assist 
/delay 1s
/1 incomming regen for %t .
/say %t, regen inc 
/delay 1s
/call Cast "Chloroplast"
/say ok
}   

| ***********************************

/if "@ChatText"~~"roothim" { 
/delay 1
/stand
   /target @Sender 
/delay 1s
   /1 gonna root %t
/assist
/delay 1s
/1 now rooting
/say rooting %t
   /call Cast "Enveloping Roots" 
}  

| ***********************************

/if "@ChatText"~~"snarehim" { 
/delay 1
/stand
   /target @Sender 
/delay 1s
   /1 gonna Snare %t
/assist
/delay 1s
/say snaring %t
   /call Cast "Ensnare" 
}  

| ***********************************

/if "@ChatText"~~"harmonyhim" { 
/delay 1
/stand
   /target @Sender 
/delay 1s
   /1 gonna Harmony %t
/assist
/delay 1s
/call Cast "Harmony of Nature" 
}  

| ***********************************

/if "@ChatText"~~"nukehim" { 
/delay 1
/stand
   /target @Sender 
/delay 1s
   /1 gonna NUKE %t !!
 /assist
/delay 1s
/say asswhooping incomming for %t
   /call Cast "Enveloping Roots"
/say rooted, NUKE inc ...  
/call Cast "Firestrike"
/1 ok
}  

| ***********************************

/if "@ChatText"~~"follow me" { 
/delay 1
   /target @Sender 
/delay 1
   /1 ok ill follow you %t
/delay 1
/stand
/call goto $char(name)
/return
}

| ***********************************

/if "@ChatText"~~"stophere" {
/if n @FollowFlag==1 {
/echo stop
}
/if n @FollowFlag!=1 {
/1 im not going anywhere.
}
/return
}

| ***********************************
| next set basicly put means ... get the fuk out now !

/if "@ChatText"=="campnow" { 
/delay 1
   /target @Sender 
/delay 1s
   /1 gonna camp ..
/delay 1
| make sure hes sitting by standing up first
  /stand
/delay 5
/sit 
/delay 1s
/camp desktop
}

| ***********************************

| -------------------------------------------------------------------------------
| add your Custom AI chatback here =D use this if you wanna stimulate a 
| conversation =P
| 


/if "@ChatText"=="ok" /1 ok
/if "@ChatText"=="k" /1 k
/if "@ChatText"~~"ding" /1 Grats =D
/if "@ChatText"=="hi" /1 hello =D
/if "@ChatText"~~"cool" /1 i know =)
/if "@ChatText"=="wtf" /1 what hap ?
/if "@ChatText"=="mana?" /1 $char(mana,pct)% mana here.

/return

Sub Event_SLAINBY 
   /Echo Slained Event Entered 
/delay 5s   
/1 ok i died ..good job IDIOT... im gonna chill here a while, come and get me!
/return


| -------------------------------------------------------------------------------
|this is for safety and will NOT eliminate the "Repair" set above 
|however DOES help.
| -------------------------------------------------------------------------------

Sub Checkhealth
/if n $char(hp,pct)<60 /if @hpwarning==0 {
/varset hpwarning 1
/1 WARNING! HEALTH LEVELS UNDER 60%! i'm Getting hit, GOTTA HEAL MYSELF WATCH OUT!
/press f1
/delay 5
/call cast "Greater Healing"
}
/if n $char(hp,pct)>80 /if @hpwarning==1 {
/varset hpwarning 0
/1 whew, ok im feeling safer.. you ok there buddy?
}

/return

Sub Checkmana
/if n $char(mana,pct)<30 /if @mpwarning==0 {
/varset mpwarning 1
/1 WARNING! MANA LEVELS UNDER 30%! WATCH OUT I CANT SUPPORT YA MUCH LONGER!
}
/if n $char(mana,pct)>50 /if @mpwarning==1 {
/varset mpwarning 0
/1 whew, ok i got over 50m, i can work with ya safely now!
}

/return
 

Code: Select all

| SpellCast.ini
| This will cast a spell reliably for you... 
| and if the spell is not memmed .. it will mem it


| if you want to use a diffrent spell slot for the spell that changes , edit at bottom

| macro and manual Usage: 
| /call Cast "spellname" [item] 
| It will return the following values: 
| CAST_SUCCESS 
| CAST_UNKNOWNSPELL 
| CAST_OUTOFMANA 
| CAST_OUTOFRANGE 
| CAST_CANNOTSEE 
| CAST_STUNNED 
| CAST_RESISTED 
|  
| New Vars Modification 
| Plazmic's no globals needed version 
|  

| Oct 9, 2003 - Updated to work with new vars and $char(casting) - gf 
| Oct 11, 2003 - switched some logic, removed defines - gf 
| Oct 15, 2003 - Item support added by EqMule 


#event Fizzle "Your spell fizzles!" 
#event Interrupt "Your casting has been interrupted!" 
#event Interrupt "Your spell is interrupted." 
#event Recover "You haven't recovered yet..." 
#event Recover "Spell recovery time not yet met." 
#event Resisted "You target resisted the " 
#event OutOfMana "Insufficient Mana to cast this spell!" 
#event OutOfRange "Your target is out of range, get closer!" 
#event NoLOS "You cannot see your target." 
#event Stunned "You cannot cast while stunned" 
#event Standing "You must be standing to cast a spell" 
#event Collapse "Your gate is too unstable, and collapses." 

Sub Cast(SpellName,Item) 
:StartCast 
  /if "@Item"=="Item" { 
  /call ClearReturnValue 
  /cast item "@SpellName" 
} else { 
  /if n $char(gem,"@SpellName")==0 /call Mem "@SpellName"
  /call ClearReturnValue 
  /if n $char(gem,"@SpellName")<0 { 
     /delay 0 
     /goto :StartCast 
  } 
  /cast "@SpellName" 
} 


  :WaitCast 
     /if "$char(casting)"=="TRUE" { 
       /delay 1 
       /goto :WaitCast 
     } 
     /doevents Fizzle 
     /doevents Interrupt 
     /doevents Recover 
     /doevents Standing 
     /doevents OutOfRange 
     /doevents OutOfMana 
     /doevents NoLOS 
     /doevents Resisted 
     /if "$return"=="CAST_RESTART" /goto :StartCast 
     /if "$return"!="CAST_SUCCESS" /return "$return" 

/return CAST_SUCCESS 

Sub ClearReturnValue 
/return CAST_SUCCESS 

Sub Event_Fizzle 
/return CAST_RESTART 

Sub Event_Interrupt 
/return CAST_RESTART 

Sub Event_Recover 
   /delay 5 
/return CAST_RESTART 

Sub Event_Standing 
   /stand 
/return CAST_RESTART 

Sub Event_Collapse 
/return CAST_RESTART 

Sub Event_OutOfMana 
/1 im out of mana. .. so .. save yourself!
/delay 5 
/sit
/return CAST_OUTOFMANA 

Sub Event_OutOfRange 
/1 out of range buddy boy
/return CAST_OUTOFRANGE 

Sub Event_NoLOS 
/1 i cant see you %t, line of sight BS
/return CAST_CANNOTSEE 

Sub Event_Stunned 
/1 im getting stunned, i cant cast
/return CAST_STUNNED 

Sub Event_Resisted 
/1 ok, it resisted
/return CAST_RESISTED 

Sub Mem(SpellName) 
     /memspell 5 "@SpellName" 
/1 gotta mem @SpellName gimmi a sec ...
/delay 2
:memming 
  /if n $char(gem,"@Spellname")==-2 /goto :memming 
/delay 2s
/1 ok casting when it pops up , dont leave range
/return CAST_RESTART 
 

Code: Select all

| advfollow.ini
| yeah i did a rush job editing this ... this is possibly my only comment, but it works!


 

#Event ZoneEvent "You have entered" 
#Event LocalFollow "[MQ2] follow " 
#Event LocalStop "[MQ2] stop" 

#turbo 50 
#chat chat

Sub goto(MName) 
/if $defined(MName)==TRUE { 
    /call InitAFVars "@MName" 
} else { 
    /call InitAFVars "$char(name)" 
} 
/delay 1s
/echo follow $target(name)
| -------------------------------------------------------------------------------- 
| Change this to 1 to use /face fast or 0 to use the slower /face command. 
/varset UseFaceFast 1 
| -------------------------------------------------------------------------------- 
| The lower the number the less accurate the route it will follow. 
| Do not go below 1.  I don't recommend going over 15. 
/varset SpeedSense 15 
| -------------------------------------------------------------------------------- 
| The lower the number the more often samples are taken of the player you are following. 
| I would suggest leaving this around 10.  Feel free to play with it though. 
/varset SampleDist 13 
| -------------------------------------------------------------------------------- 
| This setting attempts to follow your target if they zone and/or click a port stone 
/varset ZoneFollow 1 
| -------------------------------------------------------------------------------- 

:AdvFollowLoop 
/delay 0 
/if n @FollowFlag==1 { 
    /call TrackFollow 
    /if n @NumLocs>@CurrLoc /call IncrementLoc $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
} 
/doevents
/goto :AdvFollowLoop
/return 

| -------------------------------------------------------------------------------- 
Sub CheckForTarget 
/if n @FollowFlag==1 /if n @ObstacleCount<6 /if "$target(name,clean)"!="@FollowName" { 
    /call TargetMob "@FollowName"
 |/call TargetMob @Sender
} 
/return 
| -------------------------------------------------------------------------------- 
Sub CheckObstacle 
/declare TempVarObst local 
/if n $distance(@MyLastYLoc,@MyLastXLoc)<1 /call CheckDoor 
/if n $distance(@MyLastYLoc,@MyLastXLoc)<1 /call HitObstacle 
/varset MyLastXLoc $char(x) 
/varset MyLastYLoc $char(y) 
/varset ObstacleCount 0 
/return 
| -------------------------------------------------------------------------------- 
Sub CheckDoor 
/declare TempVarDoor local 
/doortarget 
/if n $target(distance)<=15 { 
    /call Move 0 
    /sendkey down down 
    /for TempVarDoor 1 to 5 
        /delay 1 
        /call TrackFollow 
    /next TempVarDoor 
    /sendkey up down 
    /face fast door 
    :DoorMoveCloser 
    /if n $target(distance)>15 /press up 
    /if n $target(distance)<11 /press down 
    /call TrackFollow 
    /if n $target(distance)>15 /goto :DoorMoveCloser 
    /if n $target(distance)<11 /goto :DoorMoveCloser 
    /press u 
    /for TempVarDoor 1 to 15 
        /call TrackFollow 
        /delay 1 
    /next TempVarDoor 
    /call Move 1 
} 
/return 
| -------------------------------------------------------------------------------- 
Sub CheckMoving 
/if n $char(speed)==0 { 
    /call Move 1 
} 
/return 
| -------------------------------------------------------------------------------- 
Sub ClearLocs 
/varset CurrLoc 0 
/varset NumLocs 0 
/varset ObstacleCount 0 
/call Move 0 
/return 
| -------------------------------------------------------------------------------- 
Sub FindLookAngle(TY,TX,TZ) 
/declare Angle local 
/declare FZ local 
/varset FZ $char(z) 
/if n $char(feetwet)==5 /varadd TZ 5 
/if n $char(levitating)==TRUE /varadd TZ 2 
/varset Angle $abs($asin($calc($abs($calc(@FZ-@TZ))/$sqrt($calc($calc($calc($calc(@TX-$char(x))^2)+$calc($calc(@TY-$char(y))^2))+$calc($calc(@TZ-@FZ)^2)))))) 
/if n @UseFaceFast==0 { 
    /face nolook loc @TY,@TX 
} else { 
    /face fast nolook loc @TY,@TX 
} 
/if n @TZ<@FZ { 
/look $calc(@Angle*-1) 
} else /if n @TZ>@FZ { 
/look @Angle 
} else { 
/look 0 
} 
/return 
| -------------------------------------------------------------------------------- 
| Partially plagerized from McKorr's autofight.inc 
Sub HitObstacle 
/declare TempVarHit local 
/call Move 0 
/sendkey down down 
/for TempVarHit 1 to $calc($rand(3)+5) 
    /delay 1 
    /call TrackFollow 
/next TempVarHit 
/sendkey up down 
/if n $rand(99)>50 { 
    /if n $rand(99)>50 { 
        /sendkey down right 
    } else { 
        /sendkey down left 
    } 
    /for TempVarHit 1 to $calc($rand(3)+2) 
        /delay 1 
        /call TrackFollow 
    /next TempVarHit 
} else { 
    /sendkey down ctrl 
    /if n $rand(99)>50 { 
        /sendkey down left 
    } else { 
        /sendkey down right 
    } 
    /for TempVarHit 1 to $calc($rand(3)+2) 
        /delay 1 
        /call TrackFollow 
    /next TempVarHit 
} 
/sendkey up right 
/sendkey up left 
/sendkey up ctrl 
/call Move 1 
/delay 1 
/face fast nolook loc $arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)") 
/for TempVarHit 1 to 2 
    /call TrackFollow 
    /delay 1 
/next TempVarHit 
/press space 
/return 
| -------------------------------------------------------------------------------- 
Sub IncrementLoc(TY,TX,TZ) 
/varadd ObstacleCount 1 
/varadd TotalObstCount 1 
/if n $sqrt($calc($calc($calc($calc(@TX-$char(x))^2)+$calc($calc(@TY-$char(y))^2))+$calc($calc(@TZ-$char(z))^2)))<$calc($char(speed)/@SpeedSense) { 
    /varset LastLoc "@LocArray(@CurrLoc)" 
    /varadd CurrLoc 1 
    /varset ObstacleCount 0 
    /varset TotalObstCount 0 
} 
/if n @CurrLoc==@NumLocs /call ClearLocs 
/if n @ObstacleCount>5 /call CheckObstacle 
/if n @TotalObstCount>50 { 
    /varset LastLoc "@LocArray(@CurrLoc)" 
    /varadd CurrLoc 1 
    /varset ObstacleCount 0 
    /varset TotalObstCount 0 
} 
/if n @NumLocs>@CurrLoc /call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
/if n @NumLocs>@CurrLoc /call CheckMoving 
/return 
| -------------------------------------------------------------------------------- 
Sub Move(MoveCommand) 
/if n @MoveCommand==1 { 
    /sendkey up up 
    /sendkey down up 
} else { 
    /sendkey down up 
    /sendkey up up 
} 
/return 
| -------------------------------------------------------------------------------- 
Sub TargetMob(TgtName) 
/if n $searchspawn("@TgtName")>0 { 
    /target clear 
    /delay 2 
    /target "@TgtName" 
    /delay 4 
    /if $target()==TRUE /if "$target(name,clean)"=="@TgtName" { 
        /varset FollowFlag 1 
        /varset FollowID $target(id) 
        /echo -[ Following -( $target(name,clean) )- ]- 
        /varset TargetZoned 0 

    } 
} else /if n @ZoneFollow==1 /if n @TargetZoned==0 /if n @CurrLoc==@NumLocs { 
    /call ClearLocs 
    /delay 3
    /press u
    /delay 5 
    /if n @TriedZone==0 { 
        /delay 1s 
        /sendkey up up 
        /sendkey down up 
        /delay $calc($rand(3)+3) 
        /sendkey down up 
        /sendkey up up 
        /varset TriedZone 1 
        /varset TargetZoned 1 
    } else { 
        /varset TriedZone 0 
    } 
} 
/return 
| -------------------------------------------------------------------------------- 
Sub TrackFollow 
/if n @FollowFlag==1 { 
    /if n @NumLocs==0 { 
        /if n $sqrt($calc($calc($calc($calc($char(x)-$spawn(@FollowID,x))^2)+$calc($calc($char(y)-$spawn(@FollowID,y))^2))+$calc($calc($char(z)-$spawn(@FollowID,z))^2)))>@SampleDist { 
            /varset LocArray(@NumLocs) "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)" 
            /if "@LocArray(@NumLocs)"!="0 0 0" /varadd NumLocs 1 
        } 
    } else { 
        /if n $sqrt($calc($calc($calc($calc($arg(2,"@LocArray($calc(@NumLocs-1))")-$spawn(@FollowID,x))^2)+$calc($calc($arg(1,"@LocArray($calc(@NumLocs-1))")-$spawn(@FollowID,y))^2))+$calc($calc($arg(3,"@LocArray($calc(@NumLocs-1))")-$spawn(@FollowID,z))^2)))>@SampleDist { 
            /varset LocArray(@NumLocs) "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)" 
            /if "@LocArray(@NumLocs)"!="0 0 0" /varadd NumLocs 1 
        } 
    } 
} 
/call CheckForTarget 
/doevents 
/return 
| -------------------------------------------------------------------------------- 
Sub Event_LocalFollow(EvtText) 
/if "$mid(6,6,"@EvtText")"=="follow" { 
    /varset FollowName "$mid(13,$calc($strlen("@EvtText")-13),"@EvtText")"
  |  /varset FollowName "@Sender"
    /call ClearLocs 
    /call TargetMob "@FollowName" 
} 
/return 
| -------------------------------------------------------------------------------- 
Sub Event_LocalStop(EvtText) 
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="stop" { 
    /varset FollowFlag 0 
    /call ClearLocs 
    /echo -[ Stopped following -( @FollowName )- ]- 
/doevents flush
} 
/call main
| -------------------------------------------------------------------------------- 
Sub Event_ZoneEvent 
/call ClearLocs 
/delay 3s 
/call ClearLocs 
/call TargetMob "@FollowName" 
/return 
| -------------------------------------------------------------------------------- 
Sub Event_chat(MsgType,MsgFrom,MsgText) 
/if @MsgType==tell { 
   /if "@MsgFrom"=="@MasterName" { 
       /if "$arg(1,"@MsgText")"=="follow" { 
           /if "$arg(2,"@MsgText")"=="me" { 
               /varset FollowName "@MasterName" 
               /call ClearLocs 
               /call TargetMob "@FollowName" 
           } else { 
               /varset FollowName "$mid(7,$calc($strlen("@MsgText")-7),"@MsgText")"
               /call ClearLocs 
               /call TargetMob "@FollowName" 
           } 
       } 
       /if "$arg(1,"@MsgText")"=="stop" { 
           /varset FollowFlag 0 
           /call ClearLocs 
           /echo -[ Stopped following -( @FollowName )- ]- 
       } 
   } 
} 
/return 
| -------------------------------------------------------------------------------- 
Sub InitAFVars(MastName) 
/declare MasterName global 
/if "@MastName"=="$char(name)" { 
    /echo No Master Name Provide.  Working in local command mode only. 
    /varset MasterName "$char(name)" 
} else { 
    /varset MasterName "@MastName" 
} 
/declare CurrLoc global 
/declare NumLocs global 
/declare LocArray array 
/declare FollowFlag global 
/declare FollowID global 
/declare SpeedSense global 
/declare SampleDist global 
/declare UseFaceFast global 
/declare MyLastXLoc global 
/declare MyLastYLoc global 
/declare ObstacleCount global 
/declare ZoneFollow global 
/declare TriedZone global 
/declare CurrZone global 
/declare LastLoc global 
/declare TotalObstCount global 
/declare FollowName global 
/declare TargetZoned global 
/varset TargetZoned 0 
/varset CurrLoc 0 
/varset NumLocs 0 
/varset FollowFlag 0 
/varset MyLastXLoc $char(x) 
/varset MyLastYLoc $char(y) 
/varset ObstacleCount 0 
/varset TriedZone 0 
/varset TotalObstCount 0 
/return 
| -------------------------------------------------------------------------------- 
 
Last edited by some-eq-player on Fri Jan 16, 2004 4:53 pm, edited 7 times in total.

some-eq-player
a lesser mummy
a lesser mummy
Posts: 70
Joined: Tue Dec 09, 2003 12:37 pm

Post by some-eq-player » Sun Jan 11, 2004 3:13 pm

i hope your not so dence as you miss the 3 things that would give you away as a macro user .. be smart and customize it .. you MUST! ... theres a shout , an AFK message and a ooc in there that need to be changed/removed.
and picking a channel noone uses!

User avatar
Bad Karma
a snow griffon
a snow griffon
Posts: 346
Joined: Sat Nov 22, 2003 9:34 pm
Contact:

Post by Bad Karma » Sun Jan 11, 2004 4:11 pm

Don't forget the various /say and to set your own channel. =)

What did you change in advfollow? I'm don't want to change mine if I don't have to, and I have enough junk in my mac folder without adding another script if it's not 100% necessary.
[b]- Bad Karma
________________________________________[/b]

In our own quest for excellence, we should strive to take the time to help those who help themselves.

All others should [b]RTFM[/b]!!!!!!!!!

some-eq-player
a lesser mummy
a lesser mummy
Posts: 70
Joined: Tue Dec 09, 2003 12:37 pm

Post by some-eq-player » Sun Jan 11, 2004 10:32 pm

ok more comments and a reply:

actualy the /say i completly forgot to remove out from my own custom version ( without the /shout im a macroquest user) LOL. i use that when im saving or buffing people so they know the druid is casting. .. i usualy set my AFK message to /afk 2 boxxing send tell to <name>, i dont have time to read this. and people fall for that easy enough lol ..


in the advfollow.ini (notice its not advfollow.mac) i changed sub main to sub goto, and i think maybe a line or 2 below as i was testing stuff with it, which i think i commented out at lastminute ( and left that way once working ) i changed it since the plbot.mac and advfollow.ini cant both havea sub main.

the spellcast.ini i got from a post here somewhere and i havnt been able to find it again ( about a month ago. ) if anyone has the link feel free to reply lol.

this is basicly a bunch of ideas and another macro put together, but hey .. beggars cant be choosers .. it works , either to PL , or to have as a tag along 2 boxx partner. what else can you possibly need ? follow / sit / camp / and cast spells. =P if you have ideas i can add to it let me know and ill stick em in.\

[edit] BY THE WAY , the server running this website keeps taking a shit ... took a LONG time to proccess this reply posting and then said invalid session ... then when i finnaly got it down and clicked to view post, it said crittical error cant connect to DB ... just letting anyone who cares know [/edit]

nemiq
orc pawn
orc pawn
Posts: 23
Joined: Tue Jan 13, 2004 1:36 am

Post by nemiq » Tue Jan 13, 2004 1:38 am

ok well i edited all the stuff to fit my 55 druid but i'm having some trouble casting spells if u could please help me.
the syntax i use is:
/macro plbot
is that wrong?

here is the error message i get:
Ending macro: Subroutine cast wasn't found
plbot.mac@164 (Even_Chat(ChatType,Sender,ChatText)):
/call Cast "Spirit of Wolf"
plbot.mac@100 (Main): }
Cleraed the following: Timers Vars Arrays
The current macro has ended.

TI994a
a ghoul
a ghoul
Posts: 87
Joined: Mon Oct 13, 2003 12:25 pm

Post by TI994a » Tue Jan 13, 2004 10:18 am

Maybe it's just me waking up on the wrong side of the bed this morning, but I think that's pretty fucking lame to insert all kinds of broadcasts of using MQ thru the macro for ppl to have to hunt down and remove. It's funny as hell when someone pops in and refuses to use the search features of the forums, and asks for a macro, and someone makes a 20 line macro with this kind of stuff. But for a macro going into the Depot, which is more lines than will fit on a single page, that's just fucked up.

I suppose if Lax or one of the other developers changed the MQ2 code, and had it randomly announce to the zone that you were using MQ, and had it take over your toon long enough to start warping you randomly thru the zone, and having your char shout out obscenities to get you banned, you'd know it before you compiled, right? Since you expect people to scan thru several pages of your macro and find all the hidden little announcements that the user is using MQ, surely you also scan all the code revisions of the MQ source code, checking for similar stuff.

IMO, shit like this doesn't belong in the depot.

- TI

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

Post by ml2517 » Tue Jan 13, 2004 11:58 am

TI994a wrote:Maybe it's just me waking up on the wrong side of the bed this morning, but I think that's pretty fucking lame to insert all kinds of broadcasts of using MQ thru the macro for ppl to have to hunt down and remove. It's funny as hell when someone pops in and refuses to use the search features of the forums, and asks for a macro, and someone makes a 20 line macro with this kind of stuff. But for a macro going into the Depot, which is more lines than will fit on a single page, that's just fucked up.

I suppose if Lax or one of the other developers changed the MQ2 code, and had it randomly announce to the zone that you were using MQ, and had it take over your toon long enough to start warping you randomly thru the zone, and having your char shout out obscenities to get you banned, you'd know it before you compiled, right? Since you expect people to scan thru several pages of your macro and find all the hidden little announcements that the user is using MQ, surely you also scan all the code revisions of the MQ source code, checking for similar stuff.

IMO, shit like this doesn't belong in the depot.

- TI
Agreed.

J-Squared
orc pawn
orc pawn
Posts: 22
Joined: Wed Nov 19, 2003 11:02 am

Post by J-Squared » Tue Jan 13, 2004 11:58 am

/agree TI994a

Looks like a childish game someone wants to play. Frankly I'm not intrested and i share your feelings exactly.

J

User avatar
wilso132
Contributing Member
Contributing Member
Posts: 106
Joined: Thu Oct 17, 2002 11:53 am

Post by wilso132 » Tue Jan 13, 2004 1:08 pm

My question is this: How many times have you come here and downloaded someone else's macro?

How many times have you actually looked through it line by line to make sure they weren't a jackass and out /shout I'm using MacroQuest in it?

Don't have such an elitist attitude... you use other people's programs without this garbage in it so why do you feel the need to include it in your own?

There is already a "moron curve" integrated as the dev's felt necessary... if you feel the need to do crap like this I'd rather not even seen it posted.

battaile
Contributing Member
Contributing Member
Posts: 40
Joined: Tue Dec 09, 2003 10:55 am

Post by battaile » Tue Jan 13, 2004 4:39 pm

Heh, I thought it was kind of funny. It'd be different if it didnt say YOU MUST EDIT THIS FILE YOU HAVE BEEN WARNED or whatever. As it is though, dont see anyone but script-kiddies getting in trouble with it.

As far as the "what if Lax did the same thing" argument...if Lax put in all caps YOU BETTER DAMN WELL READ EVERY LINE IN xxx.cpp BEFORE YOU COMPILE, you can bet I'd read every line in xxx.cpp.


edit - Maybe I'm just sensitive to the sk issue after seeing 2 different tards in the past week point out in public channels that haste and proc level were clearly printed on items so no people shouldnt have to ask. Guess I'm paranoid of morons like that ruining it for everyone.

Lane
a hill giant
a hill giant
Posts: 201
Joined: Fri Dec 06, 2002 11:57 am

Post by Lane » Tue Jan 13, 2004 6:05 pm

Don't use the macro if you don't want to read it like the author says to. He told you had to edit it and it's not like the messages were hidden with ASCII char numbers of something that would really make you do some work. I was actually suprised at how little he did. I was hoping for the default channel to be macroquest or something of that nature. :)

This guy doesn't want people using it verbamit. It's his code, he can do what he wants with it. Once I saw the BIG FREAKING WARNING I checked all the code as soon as I downloaded and saved it in case I wanted to use it or parts in the future.

All it takes is one person to complain about something and all the sudden people get on the band wagon of dissing the author and calling it childish, behavior, blah blah blah. How stupid is posting "/agree"? Holly crap, have an original idea or flame, don't be the guy behind the bully going "ya... umm.. get him...". Losers..

-Lane

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

Post by ml2517 » Tue Jan 13, 2004 7:24 pm

Lane wrote:Don't use the macro if you don't want to read it like the author says to. He told you had to edit it and it's not like the messages were hidden with ASCII char numbers of something that would really make you do some work. I was actually suprised at how little he did. I was hoping for the default channel to be macroquest or something of that nature. :)

This guy doesn't want people using it verbamit. It's his code, he can do what he wants with it. Once I saw the BIG FREAKING WARNING I checked all the code as soon as I downloaded and saved it in case I wanted to use it or parts in the future.

All it takes is one person to complain about something and all the sudden people get on the band wagon of dissing the author and calling it childish, behavior, blah blah blah. How stupid is posting "/agree"? Holly crap, have an original idea or flame, don't be the guy behind the bully going "ya... umm.. get him...". Losers..

-Lane
Lane,
When someone sums up exactly how you are feeling, and you'd like to let them and others know that you are in agreement, do you keep your mouth shut? Apparently not, you posted your opinion here. I wasn't posting a "ya.. umm.. get him."

The "losers" comment you can shove up your ass. Is that better? Or would you like something more original?

some-eq-player
a lesser mummy
a lesser mummy
Posts: 70
Joined: Tue Dec 09, 2003 12:37 pm

Post by some-eq-player » Tue Jan 13, 2004 11:59 pm

i sure as hell agree with lane, and ill add that theres only 4 measlly things to change ( you should ANYWAYS ) channel .. afk ... and a ooc and shout to delete in the main loop (you cant miss it ) .. whoop dee doo, SOOO hard to do OMG your gonna die .. chill out guys .. if you dont like it , dont use it, go to genbot and its 500 page macro. i enjoy my "follow and cast at my command" bot. =)

and some of the comments in the script were long and went to the next line when i posted .. its not hard to just delete em out they are preaty easy to spot if you dont like em .. thats it. the macro is self explanatory and easily changable.

in other news .. for nemiq .. notice these lines

Code: Select all

#Include advfollow.ini
#Include Spellcast.ini
i hope you named your second and 3rd files that. thats my guess at what went wrong .. assuming you called SOW as your first spell.

[edit]
Maybe I'm just sensitive to the sk issue after seeing 2 different tards in the past week point out in public channels that haste and proc level were clearly printed on items so no people shouldnt have to ask. Guess I'm paranoid of morons like that ruining it for everyone.
yeah tards like that is exactly why i do this. [/edit]

User avatar
Bad Karma
a snow griffon
a snow griffon
Posts: 346
Joined: Sat Nov 22, 2003 9:34 pm
Contact:

Post by Bad Karma » Wed Jan 14, 2004 5:51 am

Personally, I don't agree with it.
I usually scan the forums at work, save what I want, and worry about it when I get home. Granted, he put a warning...which was a red flag to me to not even bother with it....but I thought some of the stuff might be useful...after reading a followup message later in the day I though I better re-check the macro, which I already scanned...yup...missed one. That's when I picked up the /say's.....which I really don't think should be there...at least not as written. When I get home, I'll fire up the mac's I grabbed at work to see what they do, and decide how useful they may be.

In general, I only really use 6 mac's with any frequency. I collect what I find more for reference than personal use. Putting stuff like this in falls under the category of "trading" in my eyes.

We write, we post/share, we contribute. This kind of stuff falls short of that trust we've established as authors amongst each other. And that, my friend, is where the flames begin. There is a certain trust amongst authors.... You have violated that....with or without warnings.
[b]- Bad Karma
________________________________________[/b]

In our own quest for excellence, we should strive to take the time to help those who help themselves.

All others should [b]RTFM[/b]!!!!!!!!!

some-eq-player
a lesser mummy
a lesser mummy
Posts: 70
Joined: Tue Dec 09, 2003 12:37 pm

Post by some-eq-player » Wed Jan 14, 2004 9:54 am

woot im an asshole officialy according to most of you.. thanks a million! :lol:

anywho .. i went back and fixxed the comments up. and i even let users know BEFOR they see the code theres 4 "evil lines" i cant wait to see how many reports of IDIOTS shouting im a macroquest user i can find. ( hell with how many times ive repeated this im surprised you compleiners havnt seen it yet )

in responce for the evil /say ... i dont see whats so evil about
/say sow inc %t stay in range.
whatever tickles your pickle .. remove if you like. it hasnt given me away in the last 2 months thats for sure.
if someone were to ask you why do you always say that ( hasnt been asked to me in 2 months ) you can reply .. its a hot key ( duh!)
like i said ... whatever, i forgot to remove them when i posted .. and decided they should stay, if you wanna take em out go ahead. 8)

but generaly speaking :
OMG im so ~~evil~~ (raises pinky to lip and does a evil villian laugh)

ohh and forgot to mention
There is already a "moron curve" integrated as the dev's felt necessary... if you feel the need to do crap like this I'd rather not even seen it posted.
you call telling people how to compile step by step and even giving a method to those without a compiler step by step how to compile a moron curve ? you might as well give out binaries. ..sure lets just add copy and paste macros lol.
Don't have such an elitist attitude... you use other people's programs without this garbage in it so why do you feel the need to include it in your own?
not elitest .. i just felt like removing the few morons that got through the OTHER anti moron system. in fact i made it JUST as moron proof as the FIRST system which still has morons in it. i mean really .. look at it and tell me how hard it is to fix. why bother i bet your gonna ask .. because i felt like it. :lol:

and the other 2 questions .. i check every time .. and ive downloaded 4 macros :D

[edit] ok i added a poll lol .. lets see some feedback =P [/edit]