-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.PlayerBot
229 lines (173 loc) · 9.54 KB
/
README.PlayerBot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
What it is:
===========
Playerbot lets you add another character from your account as a bot that you can control and which will hopefully help you. Only characters from your account can be used, so you can have a maximum of 9 bots at one time.
This was taken from the Trinity site, and modified slightly by me to get some of the kinks out. I reworked the priest class and also added a mage class and a warrior class, which are still in crude form. Any class can be used as a bot - just don't expect much in the way of spells or abilities until someone writes the code for them.
Bots will only use abilities that they have - for example, a priest will only use the renew spell if it has been trained. Also, bot's equipment will lose durability like any other character. So every so often you'll need to log in and repair and train your bot.
For Mangos 7800+
Commands:
=========
/s .bot add BOTNAME (add character to world)
/s .bot remove BOTNAME
/s .bot co|combatorder BOTNAME COMBATORDER [TARGET]
/invite BOTNAME (bot will auto accept invite)
/t BOTNAME attack (bot will attack selected target, similar to the way a pet can attack)
/t BOTNAME follow (orders bot to follow player; will also revive bot if dead or teleport bot if far away)
/t BOTNAME stay
/t BOTNAME assist (you'll need to be attacking something and the bot only does melee atm)
/t BOTNAME spells (replies with all spells known to bot)
/t BOTNAME cast <SPELLID | (part of) SPELLNAME | SPELLLINK>
/t BOTNAME use <ITEM LINK>
/t BOTNAME equip <ITEM LINK>
/t BOTNAME reset (will reset states, orders and loot list)
/t BOTNAME report (bot reports all items needed to finish quests)
/t BOTNAME stats (bot shows available money, free inventory space and estimated item repair costs)
/t BOTNAME survey (bot shows all available gameobjects, within a local perimeter around the bot)
/t BOTNAME find <GAMEOBJECT LINK> (bot will travel to the gameobject location and then wait)
/t BOTNAME get <GAMEOBJECT LINK> (bot will fetch the selected gameobject and then return to the player)
/t BOTNAME quests (List bot's current quests)
/t BOTNAME drop <QUESTLINK> (Drop a quest)
/t BOTNAME orders (Shows bot's combat orders)
/t BOTNAME pet spells (Shows spells known to bot's pet. Autocast spells will be shown in green)
/t BOTNAME pet cast <SPELLID | (part of) SPELLNAME | SPELLLINK>
/t BOTNAME pet toggle <SPELLID | (part of) SPELLNAME | SPELLLINK> (Toggle autocast for a given spell)
/t BOTNAME pet state (Shows current react mode of bot's pet)
/t BOTNAME pet react <(a)ggressive | (d)efensive | (p)assive> (Set bot's pet reaction mode)
Shortcuts:
c = cast
e = equip
u = use
Gameobject interaction with bots:
=================================
The bot(s) can now interact with gameobjects. This is particularly useful, in order to complete 'gather' type
quests (e.g Milly's harvest in Northshire). The bot(s) can also now, harvest 'ore deposits' and 'herbs'
Three new commands have been introduced 'survey, 'find' & 'get', to facilitate this new feature.
The 'survey' command provides the means for bot(s) to detect gameobjects in the world. It can be used to detect
available gameobjects local to a single bot, or more effectively (wider area) those for a party of bots.
Suggestion: setup the 'survey' command as an assigned macro button, on the client (e.g /p survey). You can
then quickly refresh the gameobject list.
Gameobject list <GAMEOBJECT LINK> (Currently bots can only interact with ore, herb and needed quest items)
---------------
[Copper Vein][Silverleaf][Earthroot][Milly's Harvest][Battered Chest][Food Crate]
Then, use the 'find' or 'get' commands to interect with the gameobject.
Using the gameobject list information, it is possible to locate and/or fetch each of the gameobjects. To select
a <GAMEOBJECT LINK>, hold down the shift key and click on the relevant link with your mouse.
Repair with bots:
=================
The bot(s) can now be repaired, as the player repairs. You can decide whether you wish the bot(s) to pay for
their own repair or if available, use the guild bank. Choose the appropriate repair 'Anvil' at your local
NPC. Only group bot(s) members can be repaired. If you wish to exclude certain bot(s) from repair, then
temporarily uninvite bot(s) from the group.
Limitations: Bot(s) cannot repair individual items.
If the player does not require repair, you cannot repair bot(s).
The new 'stats' command provides useful information to help in the repair decision.
First: Money available to bot(s)
Second: Free inventory slots for bot(s)
Third: Estimated (excludes NPC reputation discount) item damage cost for bot(s).
Combat Orders explained:
========================
There are primary and secondary commands which can be combined. In this way it is
possible to define a bot to assist the main tank and also protect the healer, making
combat management much easier.
The commands assist and protect require a target parameter or a friendly player
selected by bots master.
Available Combat Orders:
tank pri try to bind all targets involved in combat by gaining highest threat
assist pri do damage on selected targets attacker without getting highest threat
heal pri concentrate on healing - no offensive spells, try to keep threat low
protect sec if target of protect get's directly attacked gain higher threat on attacker
reset - clear out assist and protect targets and set combat order to nothing
Examples:
.bot co TheTank tank
.bot co MyHealer heal
.bot co TheBrutal assist TheTank
.bot co TheBrutal protect MyHealer
Trading with bots:
==================
To trade items/money with your bot simply initiate a trade and the bot will tell you how much money and items are available. To request an item simple whisper the bot and shift click the link of the item you would like. You can link multiple items on the same line. You can also request money in the following manner when the trade window is open:
/w BOTNAME 10g <-- request that the bot give you 10 gold
/w BOTNAME 6g500s25c <-- request 6 gold, 500 silver, and 25 cooper
A bot is also able to show an item in its 'Will not be traded' slot. The item can be either
in its bags or be equipped and even be soulbound. By this you can cast spells/enchantments
on soulbound items ('nt' stands for 'not trading').
/w BOTNAME nt [Powerful Soulbound Item]
More Information:
=================
If specifying a spell substring, the spell chosen will be in priority of exact name match, highest spell rank, and spell using no reagents. Case does not matter. Here's some examples:
/t BOTNAME c greater heal
/t BOTNAME cast pain
/w BOTNAME c poly
/w BOTNAME cast fort
/t BOTNAME cast <SPELLID>
- OR -
/w BOTNAME c <SPELLID>
Also all commands can be broadcast to the party. For example:
/p follow
/p spells
To use or equip items for your bot say:
/w BOTNAME use <ITEMLINK1> <ITEMLINK2>
/w BOTNAME equip <ITEMLINK1> <ITEMLINK2>
- OR -
/w BOTNAME u <ITEMLINK1> <ITEMLINK2>
/w BOTNAME e <ITEMLINK1> <ITEMLINK2>
If you inspect your bot, your bot will tell you what items you have in your inventory that you can equip. To create a link in the chat window, hold the shift key and press the left mouse button when clicking the link.
Changes from Trinity to Mangos:
===============================
I added the following in SharedDefines.h.
enum SpellCategory
{
SPELL_CATEGORY_FOOD = 11,
SPELL_CATEGORY_DRINK = 59
};
I also had to add the following to Player.h:
enum PlayerStateType
{
PLAYER_STATE_NONE = 0,
PLAYER_STATE_SIT = 1
};
Configuration variables:
========================
Also see src/mangosd/mangosd.conf.dist for configuration variables!
PlayerbotAI.DebugWhisper
Enable debug output by whispering master
Default: 0 - off
1 - on
PlayerbotAI.FollowDistanceMin
PlayerbotAI.FollowDistanceMax
Min. and max. follow distance for bots
Default: 0.5 / 1.0
Some Problems:
==============
The bots don't always face in the right direction. Sometimes when a bot makes the kill, the corpse is not lootable. The mage bot sometimes get stuck when he begins to cast a spell (but this is corrected the next time he enters combat).
-- BotGuy
What it is:
===========
The new revised'botguy' utilizes NPCs already distributed throughout the world, to allow players to
summon and dismiss bots at will, from their own account.
This is a revised (more stable) version that utilizes the new 'GOSSIP MENU SYSTEM' to modify the menus of existing NPCs
(e.g Trainers etc) to include the bot Recruit/Dismiss menu. (No GameMaster account necessary).
Install (Server administrators only)
=======
Please apply 'mangos_botguy.sql' once to the world database to update the 'gossip_menu_option' table.
-- ToDo
[DONE] ///---Quest---///
[DONE] Bot can accept quest.
[DONE] Bot can join quest.
[DONE] ///---Loot---///
[DONE] Bot can loot.
[DONE] Bot can loot --- maybe only needed q item.
//---Instance teleport Problems---///
[DONE] Needs some fix.
///---Combat and Movement Orders---///
[DONE] Movement orders (stay, follow)
[DONE] Combat orders (protect, assist)
Combat order TANK
Combat order HEAL
///---Temporary item enchantments---///
[DONE] Rogue : Poison
Warrior : Sharpening Stone, Rune of Warding, Rune of Shielding.
//---After fear bot's lose target---///
Needs some fix.
///---Move behind target---///
Rogue : some abilitys require Rogue to be stealthed and behind target.
///---Implement locale independet way of getting spellIDs---///
[DONE] Hardcode lowest rank spellID, use function to get highest rank