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.
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