- Joined
- Jan 9, 2006
- Messages
- 826
- Reaction score
- 0
- Points
- 16
10% / !00% DONE [/color][/size]
Hi,
i am looking for a perfect Necro Kite Macro. I found an kite macro for Necro. I edit a bit so good i can. and now i need your help. Btw. I don't wanna use this macro for AFK kiting, i box another chars and this is nor really easy if i kite with the necro, so its just a great help for me.
Thats the Situation at Tables in PoFire.
i need some helps to upgrade this Macro.
all mobs lvl 68.
1. Just pull the mobs lower my lvl and not the same. The necro can take the mobs randomly. thats no problem.
2. I tried to edit the macro, but i dont know if its work. I changed FD to /fade (so he zone and do not FD) and start again
3. I need to add some more Dot's
4. 1.The necro should walk to 4 locs and do that every time till mob dead
4.2. I don't need any loot macros here, i can loot, i will not going afk.
5. 1.the necro should cast the Dot's, Buffs and Snare by a timer, when its fading
5.2 the necro should cast new pet after fight and pet is dead
5.3. he should cast Lifetap if the necro falls down under 80% hp and under 30% he should fade and try again.
5.4 If the mob is under 80% and Snare fades, he should recast it and do not /fade
6. if he pulls from the blue Mobs he need to run the blue way and pull from blue pullspot. If he pulls from the red ones, he need to be on the redpullingspot and pull along the redway (This colors are not the Con colors of the mobs)
here is the Code
Code:
Here some Screenshots:
I need 2 pull points,cause my spellrange is not so far to pull from the middle. That i mean with Red pullpoint and bluepull point. At red pullpoint i will just pull the red marked mob and at blue Pull point only the blue ones. And the blue lines in the first picture (in my first Post) is the kite-way of the blue mobs and the red line is the kite-way of the red mobs. The yelow line should show me and my way to kite. U see in the "Front" picture a great "door", there will be spawn a named, which cannot kite. He is my lvl, so i need to pull only the lower mobs.
hope u understand, if u still do not understand my zerrible english and the bad pictures just tell me. i will try to explain u. (i am german btw)
btw. Don't be confused. I forgot to mobs on my first picture (in my first post).
Hope u can help me a bit. U don't need to writ this macro to the end. I will be fine if u give me the commands to wirte that. Hope so
Best greetings
Kalle
Hi,
i am looking for a perfect Necro Kite Macro. I found an kite macro for Necro. I edit a bit so good i can. and now i need your help. Btw. I don't wanna use this macro for AFK kiting, i box another chars and this is nor really easy if i kite with the necro, so its just a great help for me.
Thats the Situation at Tables in PoFire.
i need some helps to upgrade this Macro.
all mobs lvl 68.
1. Just pull the mobs lower my lvl and not the same. The necro can take the mobs randomly. thats no problem.
2. I tried to edit the macro, but i dont know if its work. I changed FD to /fade (so he zone and do not FD) and start again
3. I need to add some more Dot's
4. 1.The necro should walk to 4 locs and do that every time till mob dead
4.2. I don't need any loot macros here, i can loot, i will not going afk.
5. 1.the necro should cast the Dot's, Buffs and Snare by a timer, when its fading
5.2 the necro should cast new pet after fight and pet is dead
5.3. he should cast Lifetap if the necro falls down under 80% hp and under 30% he should fade and try again.
5.4 If the mob is under 80% and Snare fades, he should recast it and do not /fade
6. if he pulls from the blue Mobs he need to run the blue way and pull from blue pullspot. If he pulls from the red ones, he need to be on the redpullingspot and pull along the redway (This colors are not the Con colors of the mobs)
here is the Code
Code:
Code:
|Necrokite.mac
|By: Terramantian
|
|Edit by: Kalle
|
|
|Simple auto-pulling and kiting macro for a necromancer.
#turbo
#include spell_routines.inc
#include move.inc
#define PetSpell "Dark Assasin"
#define PetHaste "Glyph of Darkness"
#define SnareDOT "Desecrating Darkness"
#define DamageDOT "Dark Nightmare"
#define Lifetap "Ancient: Touch of Orchilak"
#define LichSpell "Dark possession"
#event Hit "#*#YOU for#*#"
Sub Main
/declare HomeX int outer ${Me.X}
/declare HomeY int outer ${Me.Y}
/declare PetHastT timer outer
/declare SnareT timer outer
/declare DamageT timer outer
/declare MOB int outer
/declare EndX int outer
/declare EndY int outer
/declare PetAttacking bool outer
/if ((${String[${Me.Heading}].Equal[N]}) || (${String[${Me.Heading}].Equal[NNW]}) || (${String[${Me.Heading}].Equal[NNE]})) {
/varset EndY ${Math.Calc[${Me.Y} + 350]}
/varset EndX ${Me.X}
} else /if (${String[${Me.Heading}].Equal[NE]}) {
/varset EndY ${Math.Calc[${Me.Y} + 240]}
/varset EndX ${Math.Calc[${Me.X} - 240]}
} else /if ((${String[${Me.Heading}].Equal[E]}) || (${String[${Me.Heading}].Equal[ENE]}) || (${String[${Me.Heading}].Equal[ESE]})) {
/varset EndY ${Me.Y}
/varset EndX ${Math.Calc[${Me.X} - 350]}
} else /if (${String[${Me.Heading}].Equal[SE]}) {
/varset EndY ${Math.Calc[${Me.Y} - 240]}
/varset EndX ${Math.Calc[${Me.X} - 240]}
} else /if ((${String[${Me.Heading}].Equal[S]}) || (${String[${Me.Heading}].Equal[SSW]}) || (${String[${Me.Heading}].Equal[SSE]})) {
/varset EndY ${Math.Calc[${Me.Y} - 350]}
/varset EndX ${Me.X}
} else /if (${String[${Me.Heading}].Equal[SW]}) {
/varset EndY ${Math.Calc[${Me.Y} - 240]}
/varset EndX ${Math.Calc[${Me.X} + 240]}
} else /if ((${String[${Me.Heading}].Equal[W]}) || (${String[${Me.Heading}].Equal[WNW]}) || (${String[${Me.Heading}].Equal[WSW]})){
/varset EndY ${Me.Y}
/varset EndX ${Math.Calc[${Me.X} + 350]}
} else /if (${String[${Me.Heading}].Equal[NW]}) {
/varset EndY ${Math.Calc[${Me.Y} - 240]}
/varset EndX ${Math.Calc[${Me.X} + 240]}
}
/call Initialize
:Loop
/call PullMob
/call KiteMob
/varset PetAttacking 0
| /call LootMob
/call Downtime
/goto :Loop
/return
Sub Initialize
/if (!${Me.Pet.ID}) /call Cast "PetSpell"
/pet guard here
/pet taunt
/call Cast "PetHaste"
/varset PetHastT ${Math.Calc[${Spell[PetHaste].Duration} * 6]}s
/call Cast "LichSpell"
:MedCheck
/if (${Me.PctMana} < 70) {
/if (!${Me.Sitting}) /sit
/delay 1m (${Me.PctMana} > 80)
/goto :MedCheck
}
/return
Sub PullMob
:PullBegin
/doevents
/varset MOB ${Spawn[nopcnear 400 npc range ${Math.Calc[${Me.Level} * .75]} ${Me.Level} radius 1000].ID}
:TarLoop
/if ((${Spawn[id ${MOB}].PctHPs} < 100) || (!${String[${Spawn[${MOB}].Type}].Compare["Pet"]})) {
/varset MOB ${Spawn[nopcnear 400 npc id ${MOB} range ${Math.Calc[${Me.Level} * .75]} ${Me.Level} radius 1000 next].ID}
/goto :TarLoop
}
/call MoveToSpawn ${MOB} 120
/target id ${MOB}
/assist
/delay 1s
/doevents
/if ((${Target.ID} != ${MOB}) && (${Target.ID} != ${Me.ID})) {
/call MoveToLoc ${HomeY} ${HomeX}
/goto :PullBegin
}
/if (${Target.PctHPs} < 100) /goto :PullBegin
/doevents
/call Cast "SnareDOT"
/if (!${Macro.Return.Equal[CAST_SUCCESS]}) {
/call Cast "Feign Death"
/delay 3m (${Target.Distance} > 100)
/call MoveToLoc ${HomeY} ${HomeX}
/goto :PullBegin
}
/varset SnareT ${Math.Calc[${Spell[SnareDOT].Duration} * 6]}s
/call MoveToLocF ${HomeY} ${HomeX} 150
/return
Sub KiteMob
:KiteLoop
/doevents
/call MoveToLocF ${EndY} ${EndX} 200
/if (!${Target.ID}) /return
/doevents
/if (${SnareT} <= 200) {
/call Cast "SnareDOT" 6s
/if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset SnareT ${Math.Calc[${Spell[SnareDOT].Duration} * 6]}s
}
/if (${SnareT} == 0) {
/echo Snare DOT is not on... zoneing
/fade 60s
/if (${Me.Buff[LichSpell].ID}) /notify BuffWindow Buff${Int[${Math.Calc[${Me.Buff[LichSpell].ID}-1]}]} leftmouseup
/mqpause
}
/if ((${Target.Distance} > ${Math.Calc[${Target.Speed} / 4 * ${Spell[Lifetap].MyCastTime}]}) && (${Me.PctHPs} < 80)) {
/call Cast "Lifetap"
}
/if ((${Target.Distance} > ${Math.Calc[${Target.Speed} / 4 * ${Spell[DamageDOT].MyCastTime}]}) && (${DamageT} <= 150)) {
/call Cast "DamageDOT"
/if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset DamageT ${Math.Calc[${Spell[DamageDOT].Duration}* 6]}s
}
/if ((!${PetAttacking}) && (${Target.PctHPs} < 50)) {
/pet attack
/varset PetAttacking 1
}
/delay 10s (${Target.Distance} <= 50)
/face fast nolook
/if (!${Target.ID}) /return
/keypress strafe_right hold
/delay 20
/keypress strafe_right
/call MoveToLocF ${HomeY} ${HomeX} 200
/if (!${Target.ID}) /return
/doevents
/if (${SnareT} <= 200) {
/call Cast "SnareDOT" 12s
/if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset SnareT ${Math.Calc[${Spell[SnareDOT].Duration} * 6]}s
}
/if (${SnareT} == 0) {
/echo Snare DOT is not on... zoning
/fade 60s
/if (${Me.Buff[LichSpell].ID}) /notify BuffWindow Buff${Int[${Math.Calc[${Me.Buff[LichSpell].ID}-1]}]} leftmouseup
/mqpause
}
/if ((${Target.Distance} > ${Math.Calc[${Target.Speed} / 4 * ${Spell[Lifetap].MyCastTime}]}) && (${Me.PctHPs} < 80)) {
/call Cast "Lifetap"
}
/if ((${Target.Distance} > ${Math.Calc[${Target.Speed} / 4 * ${Spell[DamageDOT].MyCastTime}]}) && (${DamageT} <= 150)) {
/call Cast "DamageDOT"
/if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset DamageT ${Math.Calc[${Spell[DamageDOT].Duration}* 6]}s
}
/if ((!${PetAttacking}) && (${Target.PctHPs} < 50)) {
/pet attack
/varset PetAttacking 1
}
/delay 10s (${Target.Distance} <= 50)
/face fast nolook
/if (!${Target.ID}) /return
/keypress strafe_right hold
/delay 15
/keypress strafe_right
/if (!${Target.ID}) /return
/doevents
/goto :KiteLoop
/return
Sub Downtime
/call MoveToLoc ${HomeY} ${HomeX}
/if (!${Me.Pet.ID}) {
/call Cast "PetSpell"
/pet guard here
/pet taunt
}
/call Cast "LichSpell"
:MedCheck
/if (${Me.PctHPs} < 30) {
/if (${Me.Buff[LichSpell].ID}) /notify BuffWindow Buff${Int[${Math.Calc[${Me.Buff[LichSpell].ID}-1]}]} leftmouseup
}
/if (${Me.PctMana} < 70) {
/if (!${Me.Sitting}) /sit
/doevents
/delay 300 (${Me.PctMana} > 80)
/goto :MedCheck
}
/call Cast "LichSpell"
/if (${PetHastT} < 300) {
/call Cast "PetHaste"
/varset PetHastT ${Math.Calc[${Spell[PetHaste].Duration} * 6]}s
}
/doevents
/return
| Sub MoveToLoc F |
|---------------------------------------------------|
|This simply moves the player to within 1 unit of |
|the requested location, while avoiding obstacles |
| |
|This is beatnik007's original sub, with a few minor|
|changes and rewritten in MQ2Data format |
| |
| |
|F is for Follow. designed for pulling or kiting, |
|If the mob's distance exceeds Distance, it will
|pause and wait for the mob to catch up.
|
|SYNTAX: /call MoveToLocF Y X Distance |
Sub MoveToLocF(MoveToY, MoveToX, FDistance)
/declare FailureTimer timer local 0
/declare StrafeFailure int local
/declare running int local
/declare MaxSpeed int local
/declare StopDistance int local
/declare distanceNow float local
/declare distanceBefore float local
/declare distanceModifier int local
/varset running 0
/declare distanceTimer timer 15
/varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/varset distanceModifier 1
/varset MaxSpeed 0
:moveToLocation
/if (${Me.Speed}>=${MaxSpeed}) /varset MaxSpeed ${Me.Speed}
/if (${MaxSpeed}<=166) {
/varset StopDistance 3
} else {
/varset StopDistance 10
}
/face fast nolook loc ${MoveToY},${MoveToX}
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<${StopDistance}) {
/keypress forward
/return
}
/if (${distanceTimer}==0) {
/if (${Me.Sneaking}) {
/varset distanceModifier 2
} else {
/varset distanceModifier 1
}
/varset distanceNow ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) {
/if (${FailureTimer}==0) {
/varset StrafeFailure 0
/varset FailureTimer 600
}
/if (${FailureTimer}>0) {
/varset StrafeFailure ${Math.Calc[${StrafeFailure} + 1]}
}
/if (${StrafeFailure}>=10 && ${FailureTimer}>0) {
/keypress forward
/keypress back hold
/delay 5
/keypress back
/afk Sorry no time to flirt, i am kiting
/echo Your movement failed more than 10 times in 30 seconds and most likely looked macroed. Ending macro. . .
/endmacro
/quit
}
/call strafePastObstacle ${StrafeFailure}
}
/varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/varset distanceTimer 15
}
/if (${running}==0) {
/keypress forward
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}>${StopDistance}) {
/varset running 1
/keypress forward hold
}
} else {
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<${StopDistance}) {
/varset running 0
/keypress forward
}
}
/if (${Target.Distance} > ${FDistance}) {
/keypress forward
/delay 5s (${Target.Distance} < ${Math.Calc[${FDistance} * .75]})
/if (${running}) /keypress forward hold
}
/if (${Me.PctHPs} < 30) {
/echo Low health on pull, FDING
/call Cast "Feign Death"
/if (${Me.Buff[LichSpell].ID}) /notify BuffWindow Buff${Int[${Math.Calc[${Me.Buff[LichSpell].ID}-1]}]} leftmouseup
/mqpause
}
/goto :moveToLocation
/return
Sub Event_Hit
/if (!${PetAttacking}) /pet back off
/if (${Me.PctHPs} < 30) {
/echo Low health, FDING
/call Cast "Feign Death"
/if (${Me.Buff[LichSpell].ID}) /notify BuffWindow Buff${Int[${Math.Calc[${Me.Buff[LichSpell].ID}-1]}]} leftmouseup
/mqpause
}
/return
Here some Screenshots:
I need 2 pull points,cause my spellrange is not so far to pull from the middle. That i mean with Red pullpoint and bluepull point. At red pullpoint i will just pull the red marked mob and at blue Pull point only the blue ones. And the blue lines in the first picture (in my first Post) is the kite-way of the blue mobs and the red line is the kite-way of the red mobs. The yelow line should show me and my way to kite. U see in the "Front" picture a great "door", there will be spawn a named, which cannot kite. He is my lvl, so i need to pull only the lower mobs.
hope u understand, if u still do not understand my zerrible english and the bad pictures just tell me. i will try to explain u. (i am german btw)
btw. Don't be confused. I forgot to mobs on my first picture (in my first post).
Hope u can help me a bit. U don't need to writ this macro to the end. I will be fine if u give me the commands to wirte that. Hope so
Best greetings
Kalle