MasterBlaster by Maskoi Shamelessly edited by Neophys

Combat Assist MasterBlaster by Maskoi Shamelessly edited by Neophys 1.0

Download now:  Join us with Level 2 access or earn your way in with  RedCents.
Other Authors
Maskoi, Neophys
Software Requirements
ninjadvloot.inc
Server Type
🏢 Live Test
Hi,

There is alot of scripts already for Wizards all going for ultimate dps etc.

I needed something simple, which would accept trades, and be usable in a dungeon crawl in droga.

When enabled in settings (lostNFound) it will auto navigate to the assisted toon.
- If you type /g moce on the controlled toon it will stick to you
- If you type /g tome on the controlled toon it will /nav to you, using mesh.
- If wizard is 110 range from the controlled toon, it will /nav to you.

Some random things were added to make it less bot like.
- It will randomly sit down after mobs killed (dungeon)
- It will nuke at random percentages (between 90 and 98)


There are some bugs with the cast rutine, but it works and blasts as i expect.

Rich (BB code):
| ******************************************************************************|
|  MasterBlaster by Maskoi and heavily modified by Neophys
|
|  What is it?
|  A macro entirely dedicated to AFKing group play for a Wizard.
|
|
| This macro was written exclusively for subscribers of Redguides and is not to be
| published anywhere else without explicit approval by Maskoi.
|
| Contact: [http://www.redguides.com/community/member.php/225520-neophys]
| ******************************************************************************|
#include ninjadvloot.inc
#turbo 80

| ************************* EVENTS ****************************************|
#Event GoMProc                     "#*#granted#*#gift of#*#mana#*#"
#Event GoMProc                     "You feel strengthened by magic."
#Event GoMProc                     "You feel strengthened by a gift of magic."
#Event GroupMessage                "#1# tells the group, '#2#'"
#event Zone                       "You have entered #1#."
#event Zone                       "LOADING, PLEASE WAIT..."
#event KillShot                 "#*#You have slain#*#"
#event eqbcmissedping             "#*#did not recieve expected ping#*#"

| ************************* MAIN ****************************************|
Sub Main

| ************************* Change These ****************************************|
    /declare MoveToMeWord                         string        outer        moce
    /declare NavigateToMeWord                     string        outer        Tome
    /declare EQBCAnnounce                        int         outer         1
    /declare MountOn                             int         outer         1
    /declare MedAt                                 int         outer         10
    /declare HarvestAt                             int         outer         70
    /declare LootCorpses                         int         outer         1
| ************************* Do not change these ****************************************|
    /declare MacVersion                         string         outer         1.2.Modified
    /declare MA                                 string        outer        xtarget
    /declare NukeAt                             int         outer         98
    /declare NukeStart                             int         outer         98
    /declare RandomSit                            int         outer         2
    /declare NukeDelay                             int         outer         1
    /declare KBuffsTimer                         timer         outer         0
    /declare GoMDicho                             int         outer         1
    /declare LostNFound                            int         outer         1
    /declare TCast                                 int         outer         1
    /declare TCastGem                             int         outer         0
    /declare looserange                            int         outer         300
    /declare MR                                 int         outer         -1
    /declare Debugging                            bool        outer       False
  
  

    /call SetupAdvLootVars
    /call FindCastSpell twincast AssignVar
  
    /if (${Defined[Param0]}) /varset MA ${Param0}
    /if (${Defined[Param0]} && ${Defined[Param1]}) /varset NukeStart ${Param1}
    /if (!${Defined[Param0]}) {
        /if (${Target.ID} && (${Target.Type.Equal[PC]} || ${Target.Type.Equal[Pet]} || ${Target.Type.Equal[Mercenary]})) {
            /varset MA ${Target.CleanName}
        } else {
            |/echo No mainassist specified or targeted. Will use Xtarget1
            /varset MA xtarget
        }
    }

    /if (!${mainassist.Equal[MA]}) {  
        /if (${EQBCAnnounce} && ${EQBC.Connected}) {
            /bc  [+w+] --[ MasterBlaster started, assisting [+g+]${MA} [+w+] randomly between [+g+] ${NukeStart}% and ${Math.Calc[${NukeStart}+8]} HP[+w+] ]--  
        } else {
            /echo Will be assisting: ${MA} at ${NukeStart}
        }
    } else {
        /echo Will be assisting XTarget1 at ${NukeStart}
    }
   
    /echo Starting MasterBlaser v${MacVersion}
  
    :MainLoop 
  
        /if (${Me.State.Equal[HOVER]}) {
      
      
            /goto :MainLoop
        }
        /doevents
        /if (!${Me.Moving} && !${Me.Invis}) {
      
        |    /if (${SpawnCount[npc radius 15]} < 1 && ${LootCorpses}) {
        |         /call LootMobs
        |    }

      
            /if (${Me.PctMana}>=20 && !${Target.ID}) /call BuffsRequireMana
            /if (!${Target.ID} ) /call Buffs
      
      
            /varset RandomSit ${Math.Rand[10]}
            /varset NukeAt  ${Math.Calc[${NukeStart}+${Math.Rand[8]} ]}
       
            /if (${Me.PctMana}>=21) {

                /if (!${Target.ID} || !${Target.Type.Equal[NPC]} || ${MR}<1) {
                    /call AssistMA
                    /varset MR ${Macro.Return}
                    /if (${MR}>1) {
                        /if (${EQBC.Connected}) /bc  [+w+] --[ Assisting target found: [+g+]${Target.CleanName} [+w+]] -- [[+P+] ${Time.Time24}[+w+]]  
                         /echo --[ Target found: ${Target.CleanName} [${Target.ID}] ]-- [${Time.Time24}]
                    }          
                }
              
                /if (${Target.Type.Equal[npc]} && ${Target.PctHPs}<=${NukeAt}) {
                    /if (${EQBCAnnounce} && ${EQBC.Connected})  /bc  [+w+] --[ Assisting target found: [+g+]${Target.CleanName} [+w+]]-- [[+P+] ${Time.Time24}[+w+]]  
                    /call AdditionalCasts
                    /call Nukem
                }
            }
            /delay 10
          
          
            /if (${LostNFound}) /call AmILostFromGroup
            /call TradeAccept
          
            /if (${MountOn} && !${Me.Mount.ID} ) /call FindMount
            /if (${Me.PctMana}<=${HarvestAt} && ${Me.CombatState.NotEqual[COMBAT]}) /call HarvestMana
            /if ( !${Me.Mount.ID} && !${Me.Sitting} && !${Me.Casting.ID}  ) {
                /echo Sitting down in ${RandomSit}s to fool other players
                /delay ${RandomSit}s
                /sit
            }
              
        }
    /goto :MainLoop
    /return
   
  
    Sub AssistMA
        /declare i int local
        /declare tempID int local ${Target.ID}
        /if (${Me.Moving}) /return
      
        /if (!${mainassist.Equal[xtarget]}) {
             /if (${Debugging})     /echo MA not xtarget
            /if (${Spawn[${MA}].ID} && ${Spawn[${MA}].Distance}<${looserange} ) {
                |/if (${Spawn[${tempID}].PctHPs}<=${NukeAt})
                /assist ${MA}
                          /if (${Debugging})  /echo assisting "${MA}"
                /delay 5
                /varset tempID ${Target.ID}
                       /if (${Debugging})     /echo tempID ${Target.ID}
            /if (${Debugging})    /echo Id of targeted mob: ${tempID}
            }
        } else    {
             /if (${Debugging})     /echo MA :  xtarget
            /if (${Me.XTarget[1].ID} && ${Spawn[${Me.XTarget[1].ID}].Distance}<${looserange} ) {
                    /varset tempID ${Me.XTarget[1].ID}
                    /target id ${tempID}
                /if (${Debugging})    /echo ${tempID}
                    /if (${Debugging})    /echo Id of targeted mob: ${tempID}
            }
        }
        /if ( ${Spawn[${tempID}].PctHPs}<=${NukeAt} && ${Spawn[${tempID}].Distance}<${looserange} && ${Spawn[${tempID}].LineOfSight} && ((${Spawn[${tempID}].Type.Equal[npc]}) || (${Spawn[${tempID}].Type.Equal[pet]} && !${Spawn[${tempID}].Master.Type.Equal[pc]})) ) {
         /if (${Debugging})     /echo Returning ID:${Target.ID}
          /return ${tempID}
       } else {
            /if (${Debugging})     /echo return -1
          /return -1
       }
    /return


    Sub FindCastSpell(SText, EText)
        /declare i int local 0
            /for i 1 to 12
            /if (${Spell[${Me.Gem[${i}]}].Name.Find[${SText}]}) {
                /if (${EText.Equal[AssignVar]}) {
                    /if (${SText.Equal[twincast]}) /varset TCastGem ${i}
                    | /echo  ${TCastGem}
                    /return
                }
                /delay 5s !${Me.SpellInCooldown}
                /delay 5
                /if (${Me.SpellReady[${i}]}) {
                    /echo Casting ${EText} ${Me.Gem[${i}]}
                    /cast "${Me.Gem[${i}]}"
                    /delay 15s !${Me.Casting.ID}
                }
            }
        /next i
    /return 0
  
    Sub NamedCasts
        /if (${Me.AltAbilityReady[Fundament: Second Spire of Arcanum]} && ${Target.Named}) /alt act 1351
        /if (${Me.AltAbilityReady[Improved Twincast]} && ${Target.Named}) /alt act 515
        /if (${Me.AltAbilityReady[Arcane Destruction]} && ${Target.Named}) /alt act 1265
        /if (${Me.AltAbilityReady[Arcane Fury]} && ${Target.Named}) /alt act 840
        /if (${Me.AltAbilityReady[Focus of Arcanum]} && ${Target.Named}) /alt act 1211
        /if (${Me.AltAbilityReady[Call of Xuzl]} && ${Target.Named}) /alt act 208
    /return
  
    Sub AdditionalCasts
        /if (!${Target.Buff[Lower Element](bool)} && ${Me.AltAbilityReady[Lower Element]} ) /alt act 1262
        /if (!${Target.Buff[Atol's Shackles](bool)} && ${Me.AltAbilityReady[Atol's Shackles]} ) /alt act 1155
    /return
  
    Sub AmILostFromGroup
                /if (${Spawn[${MA} pc].Distance}<=110)  /return
              
                /if (${EQBCAnnounce} && ${EQBC.Connected})  {
                    /bc  [+w+] Blaster got lost from the master, running to [+g+]${MA}    
                } else {
                    /echo Blaster got lost from the master, running to ${MA}
                }
                :LooopAmILostFromGroup
                    /target id ${Spawn[${MA} pc].ID}
                    /nav target
                    /delay 10
                /if (${Spawn[${MA} pc].Distance}>=35) /goto :LooopAmILostFromGroup
    /return
  
    Sub Nukem
        /if (!${Spawn[${Target.ID}].LineOfSight}) /return
        /if (!${Target.Type.Equal[npc]}) /return
        /declare i int local
      
        :NukeCycle
        /for i 1 to 8
      
        /if (${Me.PctMana}<=20) /return
        /if (!${Target.ID}) /return
        /if (${MR}<1) /return
        /if (!${Target.Type.Equal[npc]}) /return
        /if (!${Spawn[${Target.ID}].LineOfSight}) /return
        /if (${Target.ID}!=${MR}) /return
      
            /doevents
             /if (${GoMDicho} && ${Spell[${Me.Gem[${i}]}].Name.Find[dichotomic]}) /goto :SkipSpell
          
            /if (${Target.Named}) /call NamedCasts
            /if (!${Me.SpellReady[${i}]}) /goto :SkipSpell
             |:awaitSpell
             |/if (${Me.Casting(bool)}) /goto :awaitSpell
      
                    /if (${Spell[${Me.Gem[${i}]}].Category.Equal[Direct Damage]} && ${Me.SpellReady[${i}]} && !${Me.SpellInCooldown}) {
                        /echo Casting ${Me.Gem[${i}]} from Gem${i}
                        /cast "${Me.Gem[${i}]}"
                        /delay 20s !${Me.Casting(bool)}
                    }
                  
                /call WeaveAAs
                :SkipSpell
                 | /delay ${NukeDelay}s
        /next i
        /varset i 0
        /if (${Target.ID} && ${Target.Type.Equal[npc]} && !${Me.PctMana}<=20) /goto :NukeCycle
    /return

    Sub TradeAccept
        :loopstart
        /if (${Window[TradeWnd].Open}) {
            /if (${Window[TradeWnd].HisTradeReady} && !${Cursor.ID}) {
                /notify TradeWnd TRDW_Trade_Button leftmouseup
            } else {
                /goto :loopstart
            }      
        }
    /return
  
    Sub WeaveAAs
        /doevents
        /if (${Me.AltAbilityReady[Force of Flame]}) {
            /echo Weaving Force of Flame
            /alt act 1266
            /delay 10s !${Me.SpellInCooldown}
            /return 1
        } else /if (${Me.AltAbilityReady[Force of Ice]}) {
            /echo Weaving Force of Ice
            /alt act 1267
            /delay 10s !${Me.SpellInCooldown}
            /return 1
        } else /if (${Me.AltAbilityReady[Force of Will]}) {
            /echo Weaving Force of Will
            /alt act 1154
            /delay 10s !${Me.SpellInCooldown}
            /return 1
        }
    /return 0

    Sub HarvestMana(hms)
        /if (${Me.AltAbilityReady[Harvest of Druzzil]}) {
            /alt act 172
            /delay 15s !${Me.Casting.ID}
        }
        /declare i int local 0
        /call FindCastSpell harvest "for Mana - "
    /return

    Sub Med
        /if (${Me.Moving} || ${Me.Casting.ID}) /return
        /if (!${Me.Mount.ID} && !${Me.Sitting}) /sit
        /echo Time to Med
        :StillMedding
            /if (${Me.PctMana}<=${HarvestAt}) /call HarvestMana
            /delay 10
        /if (${Me.PctMana}<=15) /goto :StillMedding
        /if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
    /return
  
    Sub FindMount
        /if (${Zone.Indoor}) /return
        /declare i int local
        /if (${InvSlot[ammo].Item.Spell.Description.Find[mount]}) {
            /useitem ${InvSlot[ammo].Item.Name}
            /echo Clicking ${InvSlot[ammo].Item.Name}
            /delay 10s !${Me.Casting.ID}
            /return
        }
        /for i 1 to 10
            /if (${Me.Inventory[pack${i}].Container})  {
                /call CheckBagForMount ${i}
            }
        /next i
    /return
  
    Sub CheckBagForMount(int PackSlot)
        /declare i int local
        /for i 1 to ${Me.Inventory[pack${PackSlot}].Container}
            /if (${Me.Inventory[pack${PackSlot}].Item[${i}].ID}) {
                    /if (${FindItem[${Me.Inventory[pack${PackSlot}].Item[${i}].Name}].Spell.Description.Find[mount]} && ${FindItem[${Me.Inventory[pack${PackSlot}].Item[${i}].Name}].Spell.SpellType.Equal[beneficial]}) {
                        /useitem ${Me.Inventory[pack${PackSlot}].Item[${i}].Name}
                        /echo Clicking ${Me.Inventory[pack${PackSlot}].Item[${i}].Name}
                        /delay 10s !${Me.Casting.ID}
                        /return
                    }  
                }
            } 
       /next i
    /return
      
    Sub Buffs
        /if (${Me.AltAbilityReady[Kerafyrm's Prismatic Familiar]} && !${Me.Buff[Kerafyrm's Prismatic Familiar].ID} && ${Spell[Kerafyrm's Prismatic Familiar].Stacks[0]} ) /alt act 510
        /if (${Me.AltAbilityReady[Pyromancy]} && !${Me.Buff[Pyromancy].ID} && ${Spell[Pyromancy].Stacks[0]} ) /alt act 514
     /return
   
    Sub BuffsRequireMana
         /if (${Me.Moving}) /return
        /if (${Me.Casting.ID}) /return
        /if (!${Me.Buff["Shield of the Pellarus Rk. II"].ID} && ${Spell["Shield of the Pellarus Rk. II"].Stacks[0]} ) /casting "Shield of the Pellarus Rk. II" gem12
|        /if (!${Me.Buff["Armor of the Codex Rk. II"].ID} && ${Spell["Armor of the Codex Rk. II"].Stacks[0]} ) /casting "Armor of the Codex Rk. II" gem12
     /return

    Sub Event_GoMProc
        /call FindCastSpell dichotomic "Gift of Mana - "
        /doevents flush GoMProc
    /return
    
      
    Sub Event_KillShot
        |    /echo ${ChatText} - ${ChatText2}
           /if (${Target.Type.Equal[corpse]} || ${Target.Type.Equal[PC]} || ${Target.Type.Equal[Pet]} || ${Target.Type.Equal[Mercenary]}) {
            /if (${EQBC.Connected}) {
                /bc  [+w+] MasterBlaster runs ${Zone.Name}!
            } else {
                /g   [+w+] MasterBlaster runs ${Zone.Name}
            }
        }
    /return
  
    Sub Event_eqbcmissedping
      /bccmd reconnect
    /return
  
    Sub Event_Zone
       | /if (${Select[${Zone.ID},345,344,202,203,279]}) {
           /if (${EQBCAnnounce} && ${EQBC.Connected})  {
                /bc  [+w+] Blaster left Bartertown, ending macro [[+P+] ${Time.Time24}[+w+]]  
            } else {
                /echo Blaster left Bartertown, ending macro
            }
           /end
        |}
    /return
  
  
  
    Sub Event_GroupMessage(string Line,string ChatText,string ChatText2)
        /if (${Spawn[${ChatText}].Type.Equal[PC]}) {
      |/echo ${ChatText} ?${ChatText2}?
          
            /if (${ChatText2.Equal[${MoveToMeWord}]}) {
                /if (${EQBCAnnounce} && ${EQBC.Connected})  {
                    /bc  [+w+] Master [+g+]${ChatText} [+w+] called the blaster [[+P+] ${Time.Time24}[+w+]]  
                } else {
                    /echo Master ${ChatText} called the blaster
                }
                :loopMoveToMe
                    /target id ${Spawn[${ChatText} pc].ID}
                    /stick 15
                    /delay 10
                /if (${Spawn[${ChatText} pc].Distance}>=35) /goto :loopMoveToMes
            }
          
          
            /if (${ChatText2.Equal[${NavigateToMeWord}]}) {
                /if (${EQBCAnnounce} && ${EQBC.Connected})  {
                    /bc  [+w+] Master [+g+]${ChatText} [+w+] called the blaster [[+P+] ${Time.Time24}[+w+]]  
                } else {
                    /echo Master ${ChatText} called the blaster
                }
                :LooopNavToMe
                    /target id ${Spawn[${ChatText} pc].ID}
                    /nav target
                    /delay 10
                /if (${Spawn[${ChatText} pc].Distance}>=35) /goto :LooopNavToMe
            }
            |/echo ${ChatText} - ${ChatText2}
        }
    /return
Author
neophys
First release
Last update
Rating
0.00 star(s) 0 ratings

More resources from neophys

Share this resource

Back
Top