taultunleashed logoVerbs for Macros : EverQuest 2 Nerfed Info
newtopic  postreply
 [ 7 posts ] 
blue large dot

Verbs for Macros : EverQuest 2 Nerfed Info

Posted: June 4th, 2005, 5:12 am
 
tault_discoduck
tault_discoduck's Reps:
User avatar
OK, in the /do_file_commands thread, I promised to give you somthing to do in your macros. This is part one: verbs. First, the syntax:
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
 /apply_verb [ghost ID#] verb(case sensitive)


Now, what it is, and how to use it. In short, anything in the world you can interact with will glow when you mouse over it. Some things (NPCs, nodes, etc) can be accessed using tab or /target_nearest_NPC or similar commands, and then using the appropriate command to interact with them (ie. /toggleautoattack for mobs, /useability Foresting for logs, etc etc). BUT- that not only excludes a great many objects and NPCs in the game, but also in very limited in what things you can 'do'. ie. sure, you can use tab to target the banker, but you cant start a banking session from the command line. Or can you? If you know the bankers ghost ID, then you can. Lets start with some simple examples, and go from there:

The most complicated part of this, of course, if getting those ghost ID#s. For any NPC that will speak to you, its easy: make sure your log is on, and hail them. Now open your log and find the conversation. You'll see the NPCs name looks like this:
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
\aNPC 12345 Banker Soandso:Banker Soandso \/a

in case you havent figured it out yet, 12345 would be thier ID in this example. So, you want to buy a stack of coal from them.
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
 /apply_verb 12345 buy from merchant


on a side note, you could add a second line in a macro to actualy buy the coal- get the id# for the coal (I've explained that elsewhere already) and make your second line
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
 /buy_from_merchant 12345678 20
(12345678 is a made up number- find the ID yourself)
But I digress.
One thing to be aware of: as I've explained elswhere, there are no such things as negative ID#s. If, when examining the link (lets say it said -12345 Banker....) you have to convert it. I have explained this already elsewhere, but if you've forgotten: open you calculator, enter the number with the negative sign, switch to hex mode, then switch back to decimal mode. It will be converted to the correct number now.

What else could you do... /apply_verb 12345 bank ; bank_deposit 1000000 0 (deposits 1 plat) ; inventory move -3 1 -1 0 (takes the item from your second bank slot and drops it in auto inventory)...
ok, so you get the idea- the last example doesnt seem very useful, until you realize you could use this with a memory/packet sniffing app to get variable values, and create scripts that create commands using those variables...

Now, for the good stuff. Lets move up to mobs. Your running somthing like everspy2 (donate to Acid1789 to get on his list- his contribution has been HUGE), or XU. Both of those apps will give you ghost IDs. Thats probably the next easiest way to get ghost IDs. Make your script go to the ghost IDs loc, and /apply_verb 12345 attack. Big deal, you say- I can use /toggleautoattack. Fine- but can you loot? once its dead, /apply_verb 12345 loot. If your sniffer is smart enough, it will grab the item numbers when the loot window pops up, and you can /lootitem 12345678 (or have it click on the loot all button, but we're trying to get away from clicking altogether).

OK, so you don't have one of those fancy tools, or you want to interact with somthing they don't yet support, like a door, or a dynamic item for say a sabotage quest. Heres where it gets messy (aka fun). Your going to need some way to either memory or packet sniff. I personaly can not get tsearch to work with eq2 to save my life (although I know others can...but thats another topic), so were going to have to packet sniff. Im not sure if Im allowed to link to acids packet sniffer here, maybe once this thread is moved from public view I will- but anyhow- for this dicussion I'm using everdump, and have opened the log file with UltraEdit. Heres a chunk of packet:
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
 ~~~ VeLoginByNumRequestMsg ~~~
199.108.12.172 -> 192.168.1.100
0000:   01 30 8a 01 00 00 ff 6a   01 16 34 2b 00 00 ff ff   .0.....j..4+....
0010:   00 11 00 62 75 79 20 66   72 6f 6d 20 6d 65 72 63   ...buy from merc
0020:   68 61 6e 74 00 00 20 41   00 9b b9 cb 35 5f 01 00   hant.. A....5_..
0030:   00 8f b2 0f 7a 81 09 cf   39 e2 39 e2 80 f9 40 02   ....z...9.9...@.
0040:   b8 94 73 ff 02 1d 4b b8   94 73 02 c3 1d 4b 10 0f   ..s...K..s...K..
0050:   ff 62 90 56 44 82 d6 9c   9f c1 19 3a 16 c4 c5 22   .b.VD......:..."
0060:   20 ff e7 ff ff ff 03 01   ac 01 01 01 47 b1 64 34    ...........G.d4
0070:   2b de ff ff ff ff 02 af   0e 0e 05 01 01 81 01 81   +...............
0080:   01 0a d1 ff 4f e3 ff e3   db 43 89 9e b5 09 b0 50   ....O....C.....P
0090:   0e f8 52 0e 53 0e 83 51   0e 13 ff 65 04 a1 04 7f   ..R.S..Q...e....
00a0:   02 80 ff 02 ff ff ff ff   ff ff ff ff ff ff ff ff   ................
00b0:   ff ff ff ff ff ff ff ff   04 04 ff 04 ff ff ff ff   ................
00c0:   ff ff ff ff ff ff ff ff   ff ff ff ff ff ff ff ff   ................
00d0:   ff ff ff ff ff ff ff ff   ff ff ff ff ff ff ff ff   ................
00e0:   ff ff 9f ff ff ff ff ff   fe db b3 10 db b3 10 ff   ................
00f0:   85 80 7d 44 5c be ff ff   ff ff ff ff ff ff ff ff   ..}D\...........
0100:   ff ff ff ff ff ff ff ff   ff ff ff 04 04 04 ff ff   ................
0110:   ff ff ff ff ff ff ff ff   ff ff ff ff ff ff ff ff   ................
0120:   ff ff ff ff ff ff ff ff   ff ff ff ff ff ff ff ff   ................
0130:   ff ff ff ff ff ff ff c7   ff ff ff 0f ff 01 15 0f   ................
0140:   01 15 ff ff 8f ff ff ff   ff c9 a5 02 f9 ef 5a 2d   ..............Z-
0150:   47 b5 19 1f ff 4c c1 f4   4e 55 f7 44 81 a6 f8 ef   G....L..NU.D....
0160:   dd 56 63 bf 35 16 1d 15   1c 02 f8 41 72 6d 6f ff   .Vc.5......Armo.
0170:   72 73 6d 69 74 68 20 ff   42 72 69 67 65 74 20 ff   rsmith .Briget .
0180:   43 72 65 73 74 6d 79 83   73 74 7f 7f 7f 98 06 02   Crestmy.st......

upon inspection you'll realize this is the record for Armorsmith Briget Crestmyst, in the Willow Wood. Now, where the hell is the ghost ID in all that? well, lets compare it to what we get when we use the 'hail and check your log' system.
From chat log: \aNPC 11060 Armorsmith Briget Crestmyst:Armorsmith Briget Crestmyst\/a
OK- before we go any further, let me reitterate: eq2 servers are bigendian. Your X86 is little endian. So remember we need to reverse byte order. Anyhow: 11060 converts to 2B34 in Hex. Now, I'm just gonna tell ya this- the IDs are always 3 bytes. So, after reversing byte order, we're looking for 34 2b 00. Look up, and there it is. Now, I could show you a bigger chunk of the dump to illustrate this, but just take my word for it: the pattern is this:ff 6a 01, followed by a 1 byte index number (each entity record increments by one- the record before this was 15, the one after was 17) followed by the target ghost ID. Not all records look the same: heres the record for Butcher, the dog (still in willow wood):
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
  ~~~ VeLoginRequestMsg ~~~
199.108.12.172 -> 192.168.1.100
0000:   01 30 88 00 00 00 ff 6a   01 11 24 2d 00 00 ff ff   .0.....j..$-....
0010:   00 00 00 00 00 00 00 00   9b b9 cb 35 6e 00 00 00   ...........5n...
0020:   bf ac 81 4b c4 48 01 86   83 01 bc c0 35 c0 db ee   ...K.H......5...
0030:   84 40 01 02 4a ff 01 f8   ff 2a 01 4a 01 87 f0 ff   .@..J....*.J....
0040:   49 82 10 0a ff fb 88 51   44 08 db a1 9f c1 c4 94   I......QD.......
0050:   21 c4 c5 20 10 13 e1 2d   03 01 ac 01 01 01 47 b1   !.. ...-......G.
0060:   64 24 2d 9e ff ff ff ff   af 01 01 03 01 01 07 81   d$-.............
0070:   01 0a d1 ff d8 ff 9f ff   ff ff ff ff 7f 72 e1 02   .............r..
0080   42 75 9f 74 63 68 65 72 7f 7f 7f 1a 81 ff       Bu.tcher......

Now that we know what to look for, we can quickly determine his ID# to be 11556.

OK, now, on to things we can't just target using [tab]. Lets say we were evil, and doing a sabotage quest. Speed is of the essence here, so it would be nice to have a hot key to do our dirty work here, wouldn't it...
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
~~~ VeLoginRequestMsg ~~~
199.108.12.172 -> 192.168.1.100
0000:   01 30 e9 00 00 00 ff 6c   01 0d bd 2e 00 00 ff ff   .0.....l........
0010:   00 05 00 62 72 65 61 6b   00 00 00 40 00 9b b9 cb   ...break...@....
0020:   35 73 00 00 00 8f ac 81   4b c4 09 cf 7f 01 7f 01   5s......K.......
0030:   01 f8 02 7c 94 74 ff 02   d6 4c 7c 94 74 02 c3 d6   ...|.t...L|.t...
0040:   4c 10 0f ff 33 08 57 44   50 01 9d 9f c1 35 ac 19   L...3.WDP....5..
0050:   c4 c5 1d 20 ff 87 ff ff   ff 61 81 01 86 01 01 07   ... .....a......
0060:   81 01 fc 01 12 ff ff ff   87 ff ff ff 7f 75 ff 53   .............u.S
0070:   61 62 6f 74 61 67 ff 65   5f 73 61 62 6f 74 ff 61   abotag.e_sabot.a
0080:   67 65 2f 66 72 65 ff 65   70 6f 72 74 5f 32 9f 5f   ge/fre.eport_2._
0090:   78 32 5f 31 7f 7f 7f 02   00 00 00 00 00 00 00 00   x2_1............
00a0:   00 00 00 00 00 00 00 00   0a 00 4c 61 72 67 65 20   ..........Large
00b0:   56 61 73 65 34 00 54 68   69 73 20 6d 75 73 74 20   Vase4.This must
00c0:   62 65 20 74 68 65 20 6c   61 72 67 65 20 76 61 73   be the large vas
00d0:   65 20 49 27 6d 20 73 75   70 70 6f 73 65 64 20 74   e I'm supposed t
00e0   6f 20 62 72 65 61 6b 2e 2e 2e 00 00 a0 40 00    o break......@.

/apply_verb 11965 break will break the Vase, once your in range. Note that the verbs are case sensitive. Also, Im sure that the loc is in there as well, I just haven't yet taken the time to pick it out. Would be fairly trivial- zone in, have a friend be stationary, have them send you thier loc and compare it to thier record data...

I could go on, but I don't want to take all the fun out of it. Use your imagination feel free to post ways you found this useful.

OH- almost forgot: These numbers are not etched in stone. While they do somtimes persist between server resets- they won't always. Instanced zones, forget about it. Dunno why, but I had an empty house- the only entity was the door, yet every time I went in, the doors ID was different. Go figure.


Reply with quote
Posted: June 4th, 2005, 11:07 pm
 
tault_spikeanut
tault_spikeanut's Reps:
User avatar
This information looks very useful. For one, there's that damned Stitch in Time quest with rock camping, or even looting lizardmen corpses after they are dead. The only problem that I see is the rock ID would have to be known before hand, which will be tough since you said their ID's change at server resets and such. When the rock does spawn, wouldn't it always spawn with a different ID then? Thoughts on this would be quite helpful, this is all reminding me of my Diablo 2 days with all those packet sniffers and such, lol.


Reply with quote
Posted: June 5th, 2005, 5:44 am
 
tault_discoduck
tault_discoduck's Reps:
User avatar
I hadnt thought about that, I'm going to make an educated guess and say that the rock ID does change dynamicly. Now, if sombody made an app that used acids open source sniffer for the backend- sending the results to a named pipe rather than a text file- one might be able to watch for the english name of the rock, and then, using the ID it parsed out from that packet, use the verbs to grab it.


Reply with quote
Posted: June 7th, 2005, 8:25 am
 
tault_discoduck
tault_discoduck's Reps:
User avatar
hey naz- shoot a brother some points- thats one long !@#$%^&* post, and it didn't write itself (nor did anybody show me how to figure this out- did it the old fashioned way...)


Reply with quote
Posted: June 7th, 2005, 11:55 am
 
tault_akanon
tault_akanon's Reps:
User avatar
Amen! This post deserves some points. Just do a search on the forums for 'loot' and you'll notice that a LOT of people have wanted a loot bot for EQ2. This enables that, in macros, and in an elegant manner. It also allows you to buy/sell via a macro, incidentally.


Reply with quote
Posted: June 7th, 2005, 12:54 pm
 
Tault_admin

Total Posts: 29974
Joined: November 9th, 2002, 9:57 am
Tault_admin's Reps: 1444
User avatar
administrator
Mod in Training
He was already hit up with some :)


Reply with quote
Posted: June 8th, 2005, 10:27 am
 
tault_akanon
tault_akanon's Reps:
User avatar
k - usually naz will just post when he gives out points


Reply with quote
Want Advertisements After The Last Post Removed? Create A Free Account!

blue large dot Who is online
Users browsing this forum: No registered users and 6 guests

cron
Popular Sections
SWTOR Cheats
Guild Wars 2 Cheats
Guild Wars 2 Hacks
Guild Wars 2 Bots
Diablo 3 Cheats
Guild Wars 2 Mods

Popular Sections
WoW Cataclysm Cheats & Exploits
WoW Cataclysm Hacks & Bots
Star Wars The Old Republic Cheats
SWTOR Mods
Torchlight 2 Cheats
SWTOR Space Mission Bots
Site Nav and RSS
RSS Feed of EverQuest 2 Nerfed Info RSS Feed 
Sitemap of EverQuest 2 Nerfed Info Sitemap 
SitemapIndex SitemapIndex
RSS Feed RSS Feed
Channel list Channel list
left bottom corner Site and Contents Copyright 2001-2012 All Rights Reserved TaultUnleashed.com bottom corner
top left
top right
createaccount
Username:   Password:   Remember Me?