Some macro writing questions

Need help running MacroQuest2? Ask your questions about how to get things to work on your computer.

Moderator: MacroQuest Developers

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

Some macro writing questions

Post by Singing_Fool_29 » Fri Aug 26, 2005 10:57 am

As my first post here, hello everyone.

I've been reading the MQ2 messageboard for about a week looking also at the manual and the WIKI, as well as studying how commands work and also the best methods of macro non-detection.

The ideas of what to do and what not to do seem to be scattered all over the board. If I missed a specific thread or manual addition, then I apologize. If such a thing did not exist would it be entirely possible to add that?

My ideas for macro building center entirely around authentic keypressing. I would like to do the following with my code:

1)Build macros that randomize anchor points and return points.

2)Characters that instead of facing fast use the standard EQ turn keys until they have line of sight, and then checking if they are too far away. Something like:

/if (!LineOfSight[me.x, me.y, me.z : target.x, target.y, target.z]){
/keypress left
}
/if ((LineOfSight[me.x, me.y, me.z : target.x, target.y, target.z]) && (TargetFar == "true")){
/keypress forward
}

** this way the character only turns or moves during combat if it's flagged "cannot see target" or "too far away". It's a little generic but a rough idea of what I was thinking of.

3)Characters that only respond to local events such as fizzle, enrage, target too far away, etc. I don't want to depend on commands or stuff that has to be given from myself ingame. I'd like to automate my characters as much as possible within means of non-detection.

In asking for help I am really just trying to get some input from seasoned users into whats acceptable and what commands are really high risk of being caught. Also what kind of ingame behavior is a risk of getting caught(not trivial stuff, just things new people would be unaware of, like the /report issue). If at all possible for me to just emulate socials and do all of my work off of natural client recieved information, then so be it.

My Wiki contributions so far:

http://www.macroquest2.com/wiki/index.p ... se_a_Macro

http://www.macroquest2.com/wiki/index.p ... ineOfSight

I'll continue using the manual and looking at ways to do my macros.

Thanks in advance for your input.
Loathing work while working requires twice the effort of work.

skyler
a snow griffon
a snow griffon
Posts: 311
Joined: Wed May 11, 2005 9:22 am

Post by skyler » Fri Aug 26, 2005 11:08 am

So you want something like the /face command but you want it to be coded to use each key press? If you use /face without fast it will turn slowly, but I don't think that's what you are looking for. It sounds like you want to re-do things that have already been done but make them harder for yourself. What classes are you trying to do this for? Are the macro's for those classes not what you need?
[img]http://www.digbyinc.com/images/animated/girl_yea2.gif[/img][img]http://tinypic.com/ehc0h2.gif[/img]

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

RE:Skyler

Post by Singing_Fool_29 » Fri Aug 26, 2005 11:18 am

I noticed that there were some macros I could use, but I'm looking to build my own from the ground up.

To be more specific, I 6-box. I'd like to automate the actions of my casters and tanks, while I control and pull with my enchanter.

For the moment I would like to focus my energy on the melee bot(s) and what routines would need to be constantly checked. I would like to construct it entirely around true and false statements which determine subroutine actions.

The macros I've seen appear to be nice, but I'm a freak about organization. That's kinda why I'd like to construct my own.

About the /face command:

I'd really just like to avoid stuff that isn't normal routine for the client, other than reading chat events incomming to the client and reacting to them.
Loathing work while working requires twice the effort of work.

User avatar
blueninja
a grimling bloodguard
a grimling bloodguard
Posts: 541
Joined: Thu Aug 28, 2003 7:03 am
Location: Göteborg, Sweden

Post by blueninja » Fri Aug 26, 2005 11:22 am

Here's a snippet for turning using the keys:
http://www.macroquest2.com/phpBB2/viewtopic.php?t=6887

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Re: Some macro writing questions

Post by A_Druid_00 » Fri Aug 26, 2005 11:27 am

Singing_Fool_29 wrote:As my first post here, hello everyone.
Hi
Singing_Fool_29 wrote:I've been reading the MQ2 messageboard for about a week looking also at the manual and the WIKI, as well as studying how commands work and also the best methods of macro non-detection.
Thanks for not coming in here completely clueless
Singing_Fool_29 wrote:The ideas of what to do and what not to do seem to be scattered all over the board. If I missed a specific thread or manual addition, then I apologize. If such a thing did not exist would it be entirely possible to add that?
The short answer is, the best form of non-detection is to not macro at all. The long answer is, the things that you find on these boards won't get you banned out-of-the-box unless you're a retard of massive proportions.
Singing_Fool_29 wrote:My ideas for macro building center entirely around authentic keypressing. I would like to do the following with my code:

1)Build macros that randomize anchor points and return points.
Not necessary. Your anchor point will_never_be_exactly_at_the_same_point_when_you_return_to_it. You just can't get a degree of precision that fine out of the EQ client, and hence MQ2. The best you can do is get within X distance of your "leash" point, and then stop. In my AutoBot macro, it won't run back to the stake unless you're outside of your LeashLength value, and then it will only run to the stake until it is inside your LeashLength, at which point it will sit to med or just stop.
Singing_Fool_29 wrote:2)Characters that instead of facing fast use the standard EQ turn keys until they have line of sight, and then checking if they are too far away. Something like:

/if (!LineOfSight[me.x, me.y, me.z : target.x, target.y, target.z]){
/keypress left
}
/if ((LineOfSight[me.x, me.y, me.z : target.x, target.y, target.z]) && (TargetFar == "true")){
/keypress forward
}
** this way the character only turns or moves during combat if it's flagged "cannot see target" or "too far away". It's a little generic but a rough idea of what I was thinking of.
The standard /face command turns you slowly to face your target. Once again, the EQ client isn't precise enough to EVER get you to face the mob perfectly every time, from the server's point of view. So once again, there's no need to make a bunch of code centered around making facing look more "human". Plus, anyone who uses their mouse to look can turn just as fast to face mobs as the /face fast command. In fact, I'm surprised anyone uses the keyboard to handle turning anymore. Also, LineOfSight has absolutely NOTHING to do with whether or not you're facing the mob, so your example won't work. LineOfSight ONLY returns FALSE if there is some obstruction preventing you from casting on the mob, like walls, ceilings, etc.

Singing_Fool_29 wrote:3)Characters that only respond to local events such as fizzle, enrage, target too far away, etc. I don't want to depend on commands or stuff that has to be given from myself ingame. I'd like to automate my characters as much as possible within means of non-detection.
fizzle: spell_routines.inc
Enrage: MQ2AutoSkills
Too far away: MQ2MoveUtils
etc: Most everything that you could want to automate is covered in the VIP section, from force feeding junk food in order to preserve your Bristlebane's Party Platters to fully automating every facet of your character.
Also, get to know and use MQ2IRC plugin if you're really interested in non-detection. My AutoBot macro accepts commands from IRC, Tells, or any other channel you want it to. Set up a local IRC server and have all your bots log into it, that's about as secure as it gets.
Singing_Fool_29 wrote:In asking for help I am really just trying to get some input from seasoned users into whats acceptable and what commands are really high risk of being caught. Also what kind of ingame behavior is a risk of getting caught(not trivial stuff, just things new people would be unaware of, like the /report issue). If at all possible for me to just emulate socials and do all of my work off of natural client recieved information, then so be it.
If you don't want to get caught, don't use blatant hacks. 90% of what you get from the standard MQ package is all but undetectable to SOE, and 90% of the bullshit you hear on other forums of SOE "cracking down" on MQ2 users is exactly that, bullshit. The people getting busted are fucking retards who use things like warp, zone, and other active hacks that you can't even get from the standard MQ package. Not only that, but they use them irresponsibly. MQ in the hands of an idiot will get accounts banned. MQ in the hands of someone with an IQ higher than that of a Tomato is prefectly safe.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

RE:A_Druid_00

Post by Singing_Fool_29 » Fri Aug 26, 2005 11:42 am

If you don't want to get caught, don't use blatant hacks. 90% of what you get from the standard MQ package is all but undetectable to SOE, and 90% of the bullshit you hear on other forums of SOE "cracking down" on MQ2 users is exactly that, bullshit.
What I'm looking for is that 10%. I know that MQ looks into the memoryblock of EQ to figure out ServerToClient information. I know AFK macroing is bad. I know that a GM summoning an anchored character can be bad without precautions and that you shouldn't be sitting when using /face. Those things are pretty common sense, but some things don't seem to be. Stuff like MQ commands leaked into the EQ chat reply to the server seems like something that should be covered in the manual.

Other than that I wouldn't mind looking at more macros. I've been looking at available macros on the board this whole week. Whatever contributions can give me more ideas is great.

PS. Thanks for looking at that piece of code for me. I guess instead of using LineOfSight I should just use a global string variable to dictate that /if statement.
Last edited by Singing_Fool_29 on Fri Aug 26, 2005 11:50 am, edited 1 time in total.
Loathing work while working requires twice the effort of work.

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Fri Aug 26, 2005 11:46 am

MQ commands don't go to the server. When you fat finger a / command, the response you get from the client about "unknown command" is all you get. Nothing gets sent to the server saying "Homeslice typed in /stick". Also, MQ / alias commands never leave your computer as well. Unless you /tell GMGuy Hi, I'm using MQ.... you're pretty safe.

Get VIP access if you want to see the really good stuff. Most of the Macros in macro depot 3.0 are pretty out of date.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Fri Aug 26, 2005 11:54 am

Technically you don't need a global string variable. A variable already exists that calculates your Heading To a target. So you check your headingto the target, and if you're not +/-XX degrees, then turn towards it.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

User avatar
gimp
a grimling bloodguard
a grimling bloodguard
Posts: 584
Joined: Fri Oct 29, 2004 9:28 am
Location: internet

Re: RE:Skyler

Post by gimp » Fri Aug 26, 2005 12:07 pm

Singing_Fool_29 wrote:To be more specific, I 6-box. I'd like to automate the actions of my casters and tanks, while I control and pull with my enchanter.

For the moment I would like to focus my energy on the melee bot(s) and what routines would need to be constantly checked. I would like to construct it entirely around true and false statements which determine subroutine actions.
for melee movement, check out moveutils plugin, its in vip section nowadays.
u can set up bots in so many ways. i myself use a irc server wich i send commands thru, and i always manually run 1 of the toons, usually the tank. then i have a hotkey for the tank that is like a normal ASSIST ME hotkey, but it sends the tell to the irc channel wich zone & spawn id to kill. having spawn id here makes it easy to write chanter code that mez adds and such.

my bots dont do shit unless i tell them to kill something, but you can of course write code that just waits for a npc to come nearby and start killing it, you can do like

Code: Select all

			/if (AUTO_ATTACK_MOBS && ${Me.Class.Name.Equal[Warrior]}) {
				/varset SpawnId ${Spawn[npc radius 40].ID}
				/i msg IRC_CHANNEL ##### MOB HERE !!!! AUTOATTACKING
				/i msg IRC_CHANNEL ASSIST ${Zone.ID} ${SpawnId}
				/call HandleAssistCall ${SpawnId}
			}
then you need the ASSIST event:

Code: Select all

|Usage: Leader character use hotkey: /i msg #channel ASSIST ${Zone.ID} ${Spawn.ID}
#event HANDLE_ASSIST "<#1#> ASSIST #2# #3#"
Sub Event_HANDLE_ASSIST(string Line, string Sender, int ZoneId, int SpawnId)

	/if (!${Ini[INI_FILE, BotNet, ${Sender}, NOT_FOUND]}) {
		/i msg IRC_CHANNEL # IGNORING REQUEST!
		/return
	}
	/if (${Zone.ID} == ${ZoneId}) {
		/call HandleAssistCall ${SpawnId}
	}
/return
and then my HandleAssistCall function looks like this

Code: Select all

Sub HandleAssistCall(int SpawnId)

	/if (${Me.Sitting}) {
		|standing up on inc
		/delay ${Math.Calc[${Math.Rand[10]}+1]}
		/if (${Me.Sitting}) /stand
	}
	
	/if (${Me.Class.Name.Equal[Druid]}) {
		/call HandleAssistCallDruid ${SpawnId}
		/return
	}

	/if (${Me.Class.Name.Equal[Cleric]}) {
		/call HandleAssistCallCleric ${SpawnId}
		/return
	}

	|add more classes here..
/return
use the code as u want, just posting to give you some hints on how you _could_ do this
Last edited by gimp on Fri Aug 26, 2005 12:11 pm, edited 1 time in total.

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

Post by Singing_Fool_29 » Fri Aug 26, 2005 12:08 pm

A_Druid_00 wrote:Technically you don't need a global string variable. A variable already exists that calculates your Heading To a target. So you check your headingto the target, and if you're not +/-XX degrees, then turn towards it.

Thanks for that, looking at it now.
Loathing work while working requires twice the effort of work.

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

RE:gimp

Post by Singing_Fool_29 » Fri Aug 26, 2005 12:17 pm

use the code as u want, just posting to give you some hints on how you _could_ do this

Thanks!

I really like it but I'm wondering where the activation comes into play. Do you have to set another if statement if it finds a spawnID within the specified radius?
Loathing work while working requires twice the effort of work.

User avatar
gimp
a grimling bloodguard
a grimling bloodguard
Posts: 584
Joined: Fri Oct 29, 2004 9:28 am
Location: internet

Re: RE:gimp

Post by gimp » Fri Aug 26, 2005 12:21 pm

Singing_Fool_29 wrote:Thanks!

I really like it but I'm wondering where the activation comes into play. Do you have to set another if statement if it finds a spawnID within the specified radius?
i'm sorry i missed some of the whole relevant code, here it is:

Code: Select all

	/if (${Spawn[npc radius 40].ID} && ${Spawn[npc radius 40].LineOfSight}) {
		/call CheckNeutralZone
		/if (!${Macro.Return}) {

			/if (AUTO_ATTACK_MOBS && ${Me.Class.Name.Equal[Warrior]}) {
				/varset SpawnId ${Spawn[npc radius 40].ID}
				/i msg IRC_CHANNEL ##### MOB HERE !!!! AUTOATTACKING
				/i msg IRC_CHANNEL ASSIST ${Zone.ID} ${SpawnId}
				/call HandleAssistCall ${SpawnId}
			}
		}
	}
CheckNeutralZone returns 1 if you are in pok and such..

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

RE:Gimp

Post by Singing_Fool_29 » Fri Aug 26, 2005 1:50 pm

Makes perfect sense now.


Thanks a lot!
Loathing work while working requires twice the effort of work.

User avatar
Slice
a hill giant
a hill giant
Posts: 189
Joined: Wed Oct 30, 2002 2:52 pm

Post by Slice » Fri Aug 26, 2005 3:16 pm

I echo A_Druid's opinion on getting VIP access. There are several of us that 5 and 6 box groups with complete automation and you really need the tools in the VIP area to do this effectively.
Slice

Singing_Fool_29
a lesser mummy
a lesser mummy
Posts: 35
Joined: Fri Aug 26, 2005 7:23 am
Location: NY
Contact:

RE:Slice

Post by Singing_Fool_29 » Fri Aug 26, 2005 4:17 pm

I just signed in for VIP access.

Thanks guys for sending me in the right direction. I'll see ya in the VIP forums!
Loathing work while working requires twice the effort of work.