mirror of
https://github.com/hermensbas/azerothcore_installer.git
synced 2026-01-13 00:28:33 +00:00
Compare commits
863 Commits
classic
...
5d137ba76b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d137ba76b | ||
|
|
22de5861dc | ||
|
|
28fe30215f | ||
|
|
c93f2f0f25 | ||
|
|
49aae85db9 | ||
|
|
dcb8141b6f | ||
|
|
1a9170dfd6 | ||
|
|
0a42c4507b | ||
|
|
a67088f2df | ||
|
|
48c428cc75 | ||
|
|
ce41178db0 | ||
|
|
c338aa16ab | ||
|
|
dcd8286e80 | ||
|
|
3d3d752223 | ||
|
|
0451057d14 | ||
|
|
c50888ecc0 | ||
|
|
967f08cfbe | ||
|
|
c8d522b83f | ||
|
|
a0d5dce80d | ||
|
|
fa3f4404bb | ||
|
|
a82f7702f1 | ||
|
|
5542af014a | ||
|
|
9724d52962 | ||
|
|
7e32e15f04 | ||
|
|
ca2b60d386 | ||
|
|
25535ad564 | ||
|
|
4504286481 | ||
|
|
8a663ffdfa | ||
|
|
9e98edb331 | ||
|
|
67118ee327 | ||
|
|
e165cb7c3e | ||
|
|
6632e96fcb | ||
|
|
f0d6731a07 | ||
|
|
33602f855f | ||
|
|
be83e60e47 | ||
|
|
03aad7598d | ||
|
|
2fb3a079ca | ||
|
|
7629576255 | ||
|
|
56f962eaf4 | ||
|
|
7b3a2d4485 | ||
|
|
0eaea31569 | ||
|
|
de35d605bd | ||
|
|
0d13d4e7d4 | ||
|
|
31147aa3f6 | ||
|
|
ed7d516f4f | ||
|
|
be8eb9b6e9 | ||
|
|
7277cd459f | ||
|
|
c067c01b48 | ||
|
|
3e2d21a596 | ||
|
|
11a46b87e5 | ||
|
|
530a8eb94f | ||
|
|
65107d791b | ||
|
|
6aa9aacfde | ||
|
|
e65a927cb7 | ||
|
|
49211fcd52 | ||
|
|
1ce662ad32 | ||
|
|
83f049931e | ||
|
|
579fde7894 | ||
|
|
78010528d8 | ||
|
|
55c96d6dc9 | ||
|
|
9383439304 | ||
|
|
c0a059dbef | ||
|
|
71beadcfa1 | ||
|
|
5077944d85 | ||
|
|
4286115f24 | ||
|
|
1c8889e85e | ||
|
|
23c56fa272 | ||
|
|
0cf9faccfa | ||
|
|
5a41c0356a | ||
|
|
2da8c66652 | ||
|
|
f7a2bd464e | ||
|
|
e092bf5617 | ||
|
|
a378a8dc72 | ||
|
|
13286a9d55 | ||
|
|
1509ae2816 | ||
|
|
fed5437d91 | ||
|
|
d35b7090dc | ||
|
|
3667f14c14 | ||
|
|
be5ec27ebc | ||
|
|
be53bf2cc6 | ||
|
|
36c5507414 | ||
|
|
147e07d6a6 | ||
|
|
a57fc6ad88 | ||
|
|
ac526afd71 | ||
|
|
ebc6ed1efa | ||
|
|
b0e452ab07 | ||
|
|
1d74645e12 | ||
|
|
19c6e7babf | ||
|
|
8e57ad7f08 | ||
|
|
a287247b98 | ||
|
|
0b8720af27 | ||
|
|
0ccab4ebe8 | ||
|
|
6b36d1636e | ||
|
|
777c26ae82 | ||
|
|
1d4c08372e | ||
|
|
591026b611 | ||
|
|
1028816465 | ||
|
|
6a8e6139c8 | ||
|
|
e7f2a2c046 | ||
|
|
c69ca7242a | ||
|
|
93ab056253 | ||
|
|
3181ac0906 | ||
|
|
92f3410b6a | ||
|
|
78226c5cbf | ||
|
|
acf7637a4f | ||
|
|
1000fbf6e7 | ||
|
|
3fd18d75ec | ||
|
|
ef5d6a29e8 | ||
|
|
6852ae4503 | ||
|
|
feb2a9c9db | ||
|
|
bb4da9f717 | ||
|
|
2ae44eecfe | ||
|
|
aa77d076ee | ||
|
|
922783a5b1 | ||
|
|
a8ddb2cb52 | ||
|
|
019d5f6796 | ||
|
|
b287476ec7 | ||
|
|
b4e37413c1 | ||
|
|
3d3c1d9d7d | ||
|
|
e634f8a716 | ||
|
|
b9a02b51aa | ||
|
|
b63f336d29 | ||
|
|
758a83fd6b | ||
|
|
9fd325c125 | ||
|
|
1c607007e3 | ||
|
|
2f270032cd | ||
|
|
4b90a35028 | ||
|
|
1d7463f058 | ||
|
|
9a5c6c2685 | ||
|
|
1a1cdb8cff | ||
|
|
3eb73ac5bf | ||
|
|
0166eca1fd | ||
|
|
9dff4870aa | ||
|
|
2781cb95d4 | ||
|
|
870553a227 | ||
|
|
104fd0d347 | ||
|
|
397892271c | ||
|
|
d2a18010c8 | ||
|
|
cd1073313d | ||
|
|
8c2973a780 | ||
|
|
901d967c39 | ||
|
|
d8d7e05c5c | ||
|
|
199856bb71 | ||
|
|
986b754522 | ||
|
|
8aaca8410c | ||
|
|
0111d4c442 | ||
|
|
94bf8c51d1 | ||
|
|
a4cd39f03f | ||
|
|
9ed9f73da9 | ||
|
|
47d8d0498c | ||
|
|
f60ed28f88 | ||
|
|
7caf3082ee | ||
|
|
644d6aa986 | ||
|
|
424f6fb08f | ||
|
|
f0fe29db67 | ||
|
|
b0166efc63 | ||
|
|
2050588297 | ||
|
|
c649fe10af | ||
|
|
fa224723f3 | ||
|
|
f919747432 | ||
|
|
8807074b1d | ||
|
|
f0f14f404f | ||
|
|
c9e65420d7 | ||
|
|
14250efcdb | ||
|
|
471a697350 | ||
|
|
bde2c871e5 | ||
|
|
c3592e387b | ||
|
|
96f41b2e4d | ||
|
|
6a71064ba4 | ||
|
|
59fb370d3f | ||
|
|
84134ca6b9 | ||
|
|
245a3bdb32 | ||
|
|
f78b860759 | ||
|
|
9c935affea | ||
|
|
1d31b0f6e8 | ||
|
|
ad40302026 | ||
|
|
c32f300348 | ||
|
|
6173d7202e | ||
|
|
020f1ac52f | ||
|
|
2f04f71d5f | ||
|
|
5012895ca8 | ||
|
|
271f333b43 | ||
|
|
6ec1431db4 | ||
|
|
ccac79f908 | ||
|
|
e2db3d9f7b | ||
|
|
98d272aeb1 | ||
|
|
7143c3a773 | ||
|
|
38cb9fc19b | ||
|
|
011c7562f5 | ||
|
|
cf8cb63d61 | ||
|
|
fd5a1ed6f2 | ||
|
|
a3b7b774cf | ||
|
|
aee3522907 | ||
|
|
1ba2922125 | ||
|
|
2bf6887e16 | ||
|
|
09a184ab60 | ||
|
|
99e7e30786 | ||
|
|
ddf210018f | ||
|
|
bc92100803 | ||
|
|
2210a54b15 | ||
|
|
f2a5ef6aea | ||
|
|
8b49c5e8e6 | ||
|
|
95b777933c | ||
|
|
fa22e6abd8 | ||
|
|
b03db561fd | ||
|
|
063e7ef28c | ||
|
|
d4c19e884e | ||
|
|
0a0cbe479e | ||
|
|
6f4da4ec2e | ||
|
|
c1ab381864 | ||
|
|
848f13da6b | ||
|
|
d75f5001df | ||
|
|
dd73c6ed20 | ||
|
|
54b39bde7e | ||
|
|
d126adcdc6 | ||
|
|
2556006549 | ||
|
|
6818aaed53 | ||
|
|
116d8a4784 | ||
|
|
eea8aba2c2 | ||
|
|
5d0ef8db71 | ||
|
|
137dd25db2 | ||
|
|
2ca22b05fc | ||
|
|
6a354b0d8a | ||
|
|
3d1256d130 | ||
|
|
1978f8c46b | ||
|
|
0614057c51 | ||
|
|
a85909915b | ||
|
|
ed08a667b0 | ||
|
|
584cb48901 | ||
|
|
406f419074 | ||
|
|
e016652449 | ||
|
|
65d27046cd | ||
|
|
69f459d320 | ||
|
|
0e9f880c34 | ||
|
|
d5ded18ff5 | ||
|
|
15bdfb5164 | ||
|
|
69ba9d116a | ||
|
|
001445e6f9 | ||
|
|
4678047b67 | ||
|
|
3609bc1785 | ||
|
|
32db8160fa | ||
|
|
39d64b5330 | ||
|
|
116d2ea80a | ||
|
|
5b6c891fdb | ||
|
|
e611c5b47b | ||
|
|
323d6ce5a8 | ||
|
|
c211cb063a | ||
|
|
08ba5155e8 | ||
|
|
403c5bc43e | ||
|
|
2839ae9689 | ||
|
|
35aee50898 | ||
|
|
e9acd3b875 | ||
|
|
01a3d40c99 | ||
|
|
b28d425235 | ||
|
|
3e1218fa8f | ||
|
|
7f1df86046 | ||
|
|
53289a1aa0 | ||
|
|
676ea6aeb9 | ||
|
|
31140a7dbd | ||
|
|
5fce522129 | ||
|
|
29075854ee | ||
|
|
73c4f9b643 | ||
|
|
96cfa2b056 | ||
|
|
e532915dde | ||
|
|
98f95eb352 | ||
|
|
13fe29c582 | ||
|
|
a006ad5c4b | ||
|
|
bbb13416df | ||
|
|
082aea383f | ||
|
|
15151cc784 | ||
|
|
358bc3e15d | ||
|
|
e5dc33eca6 | ||
|
|
7719659dd3 | ||
|
|
d991d2ba72 | ||
|
|
67fdbdc366 | ||
|
|
5da5e636e7 | ||
|
|
e91dcd8d37 | ||
|
|
2c9b6e4fbb | ||
|
|
4b909cec54 | ||
|
|
1a773dbeb5 | ||
|
|
d2d5b9a077 | ||
|
|
e37e0c8a8c | ||
|
|
36aa1d7b21 | ||
|
|
f8c0ac50d5 | ||
|
|
96da231d89 | ||
|
|
9f1548f383 | ||
|
|
71fd14d65b | ||
|
|
53e14f27e4 | ||
|
|
baf0384834 | ||
|
|
20a3739d3b | ||
|
|
1f8aa5b1f0 | ||
|
|
1869efc194 | ||
|
|
62f994e1e3 | ||
|
|
7edb2fce81 | ||
|
|
90eae2be97 | ||
|
|
922e4b2f98 | ||
|
|
517ff02ad1 | ||
|
|
7b77091a86 | ||
|
|
36d86c1b7b | ||
|
|
86a3ba9147 | ||
|
|
bfc13a3302 | ||
|
|
249ef08409 | ||
|
|
94f90f8131 | ||
|
|
f5990dcf67 | ||
|
|
fef82a2777 | ||
|
|
383787848b | ||
|
|
8aae196f8c | ||
|
|
8c809d7539 | ||
|
|
efcaea9e35 | ||
|
|
5d324420f3 | ||
|
|
e0e9f0b6a8 | ||
|
|
54d602bcc0 | ||
|
|
9fd51e7cac | ||
|
|
c0f05387ca | ||
|
|
100928de9e | ||
|
|
e82e57dd4d | ||
|
|
a3821c9a3f | ||
|
|
24e2528869 | ||
|
|
7c09041135 | ||
|
|
7d0a47c55b | ||
|
|
9b606c5154 | ||
|
|
73938249c1 | ||
|
|
41f12a5685 | ||
|
|
844ab01e53 | ||
|
|
f17ed791c3 | ||
|
|
d2ef69376e | ||
|
|
c35cf77e6b | ||
|
|
b7c1a4df3e | ||
|
|
02b656415f | ||
|
|
cdd2923b73 | ||
|
|
cf7347ecdb | ||
|
|
67990c9d85 | ||
|
|
69d0e09907 | ||
|
|
9727b86a41 | ||
|
|
61e381edde | ||
|
|
fef6ca2e6a | ||
|
|
88d3728db8 | ||
|
|
3a30b010ba | ||
|
|
b7743dab41 | ||
|
|
c74d2616c0 | ||
|
|
59a2f25118 | ||
|
|
02b3841d2d | ||
|
|
c2c0198a08 | ||
|
|
5bc9835ea4 | ||
|
|
07e8946337 | ||
|
|
c9432a77fe | ||
|
|
011ed89432 | ||
|
|
10fa599b98 | ||
|
|
097d8b2aa3 | ||
|
|
ea5ccb18d6 | ||
|
|
6f4f0dedc5 | ||
|
|
8f877371d1 | ||
|
|
db14f9130e | ||
|
|
1f07688680 | ||
|
|
f101507056 | ||
|
|
7a75ec198c | ||
|
|
fbaaff1f9c | ||
|
|
cbe8fe945e | ||
|
|
ce42c5b386 | ||
|
|
55c3f6d3cc | ||
|
|
7b8cd3f402 | ||
|
|
22a531b7e6 | ||
|
|
46b8c9b458 | ||
|
|
f644830723 | ||
|
|
017b19b6df | ||
|
|
2311c4e02a | ||
|
|
70db1a38ca | ||
|
|
591fc36abc | ||
|
|
1c2d86ea43 | ||
|
|
2650508839 | ||
|
|
7430597438 | ||
|
|
4ada5e406a | ||
|
|
b75badad37 | ||
|
|
09a89109f3 | ||
|
|
c2259a0c99 | ||
|
|
7ba2045055 | ||
|
|
05366ad3b6 | ||
|
|
b6c9688766 | ||
|
|
19047cf385 | ||
|
|
6b8ca96134 | ||
|
|
bd45a848d4 | ||
|
|
1ee032c3c7 | ||
|
|
ff517bcd56 | ||
|
|
837bdfb704 | ||
|
|
25b39a4e4d | ||
|
|
d220a2554b | ||
|
|
a6d486e8f8 | ||
|
|
6666585404 | ||
|
|
be0cd93426 | ||
|
|
a24b9dcf57 | ||
|
|
fcfb79dda9 | ||
|
|
ec961feb96 | ||
|
|
74200b2b1e | ||
|
|
6910cd5fca | ||
|
|
6b53958545 | ||
|
|
f48d4bb08e | ||
|
|
f4bb3ac529 | ||
|
|
665f47a1f5 | ||
|
|
6d6d2eb75e | ||
|
|
35e571d0ab | ||
|
|
b830c1efe4 | ||
|
|
a8ac4f2e0f | ||
|
|
873d76795b | ||
|
|
2f528833de | ||
|
|
c76338f7a1 | ||
|
|
9936858953 | ||
|
|
aeeb372ebd | ||
|
|
dd0df08493 | ||
|
|
e0b5ab0121 | ||
|
|
5cb4865ae1 | ||
|
|
03046fb514 | ||
|
|
96cf98d1e0 | ||
|
|
a5943b7061 | ||
|
|
8c24b7d71c | ||
|
|
2b9780d437 | ||
|
|
29231ee17d | ||
|
|
15f802aa68 | ||
|
|
1a1c60ccd7 | ||
|
|
dc6ab7871e | ||
|
|
cf847dfc07 | ||
|
|
579a11d3e2 | ||
|
|
f7c510975e | ||
|
|
b57b9666da | ||
|
|
ab91c7e6b7 | ||
|
|
7d379e7cf4 | ||
|
|
999b9216c1 | ||
|
|
19aa27443f | ||
|
|
841fc52985 | ||
|
|
f8f9708887 | ||
|
|
4f999b99ac | ||
|
|
20b3e5809e | ||
|
|
0aeec801d1 | ||
|
|
5ac7243e1f | ||
|
|
8fc7b7c3cd | ||
|
|
dd2acdc0ec | ||
|
|
2e7c5c99f2 | ||
|
|
4d799074a9 | ||
|
|
736beda21d | ||
|
|
426dc4bf3c | ||
|
|
ae4ceccfd9 | ||
|
|
3913a6d026 | ||
|
|
66731f5a7d | ||
|
|
8bd12dc589 | ||
|
|
376f5a1cac | ||
|
|
08f0c16cd1 | ||
|
|
ada0756d08 | ||
|
|
cbda0e7503 | ||
|
|
98171fa722 | ||
|
|
c4df7a1b55 | ||
|
|
67a9bff042 | ||
|
|
cd06585eab | ||
|
|
e774f40515 | ||
|
|
5fb1456027 | ||
|
|
ed9b10a7ef | ||
|
|
7818f580dc | ||
|
|
850727bf86 | ||
|
|
c3e2e9a9aa | ||
|
|
d1604339eb | ||
|
|
a16dcf320b | ||
|
|
4f29142efc | ||
|
|
2f239606ae | ||
|
|
e425c5e421 | ||
|
|
d39cae210c | ||
|
|
758661698f | ||
|
|
8ead7d4aa7 | ||
|
|
e5ee1e2ea6 | ||
|
|
b05e6707b3 | ||
|
|
497c47b1ff | ||
|
|
b688838f1e | ||
|
|
3683551971 | ||
|
|
97b2b58424 | ||
|
|
7f9648a7a8 | ||
|
|
d8baeca5ed | ||
|
|
e6a05fc490 | ||
|
|
23d38407ea | ||
|
|
d7d801025b | ||
|
|
66f3efd655 | ||
|
|
422f4a566e | ||
|
|
96cce8313c | ||
|
|
a455d85cfe | ||
|
|
9fe202ea35 | ||
|
|
e5ab7424cc | ||
|
|
f1419ef175 | ||
|
|
838d3add6a | ||
|
|
c973704b20 | ||
|
|
aecbd87f3c | ||
|
|
cf6510501a | ||
|
|
ec40701ae3 | ||
|
|
3dd5313c95 | ||
|
|
0283dc3125 | ||
|
|
169a01309c | ||
|
|
f48a1d9591 | ||
|
|
06d6208910 | ||
|
|
935b89ca02 | ||
|
|
3b29eeeb06 | ||
|
|
3cfc373a41 | ||
|
|
6151f6f814 | ||
|
|
cf5adb8f9d | ||
|
|
baafd600e2 | ||
|
|
e6920ab3b1 | ||
|
|
a945d67c58 | ||
|
|
9c154c37cd | ||
|
|
8184441d91 | ||
|
|
a2a7bdefaf | ||
|
|
a8eddc9714 | ||
|
|
2d1dddd997 | ||
|
|
ebb88dfc5e | ||
|
|
1ca26e056a | ||
|
|
89e96080f6 | ||
|
|
457429cf9d | ||
|
|
3cf3cbd977 | ||
|
|
2434d52e37 | ||
|
|
32d088708b | ||
|
|
597d367564 | ||
|
|
378ea8f715 | ||
|
|
34c1c35b24 | ||
|
|
e243491299 | ||
|
|
95fd0babc6 | ||
|
|
ba205fd360 | ||
|
|
7b13890562 | ||
|
|
5095eb1c6f | ||
|
|
45d32ccefc | ||
|
|
361610fbf5 | ||
|
|
fce50a36ee | ||
|
|
741033694f | ||
|
|
ef5a97361d | ||
|
|
7ce79cadac | ||
|
|
5b7dd2fe14 | ||
|
|
b3cf3bd3b6 | ||
|
|
15f5c19691 | ||
|
|
612a36579f | ||
|
|
9674b05dec | ||
|
|
6cea13eacc | ||
|
|
558b135a6e | ||
|
|
6c506ed6bd | ||
|
|
8182073679 | ||
|
|
269da041e2 | ||
|
|
f5608efdd0 | ||
|
|
4ceedc4b97 | ||
|
|
cba1950259 | ||
|
|
4756e6a631 | ||
|
|
5e09d2e297 | ||
|
|
1a00015997 | ||
|
|
4269a97afe | ||
|
|
8b265de463 | ||
|
|
5b32d4c303 | ||
|
|
25540eb2e9 | ||
|
|
5b6b8ea4bc | ||
|
|
3424eec5e2 | ||
|
|
4a2713e073 | ||
|
|
cb6d4421f2 | ||
|
|
44f40470cf | ||
|
|
a65d3abbb7 | ||
|
|
9202c0ee12 | ||
|
|
84e04db4c0 | ||
|
|
2ac3085cfc | ||
|
|
1072b481d7 | ||
|
|
8b5c915320 | ||
|
|
a5cd8e8ae2 | ||
|
|
21fd8bf9ae | ||
|
|
2a50c07fe1 | ||
|
|
94b4689434 | ||
|
|
15cd5f2573 | ||
|
|
aea70d102d | ||
|
|
5654333cd8 | ||
|
|
2b2d08c823 | ||
|
|
38bcc76d9d | ||
|
|
c06f72234e | ||
|
|
813fbf60f1 | ||
|
|
b8a476a499 | ||
|
|
c80e1b18bd | ||
|
|
e4c73252c5 | ||
|
|
a2eb54ed43 | ||
|
|
5cd3e4b29c | ||
|
|
9345e18638 | ||
|
|
7f0d6ed55f | ||
|
|
3f73064be8 | ||
|
|
55eba74036 | ||
|
|
4124cee31d | ||
|
|
426114583b | ||
|
|
276c238a22 | ||
|
|
aa9bc8336b | ||
|
|
376bc5b4c9 | ||
|
|
0e31b49208 | ||
|
|
95a0c49462 | ||
|
|
05254dab3c | ||
|
|
3099f42960 | ||
|
|
abf68c1bfa | ||
|
|
b728b7c6cb | ||
|
|
fca3a3b1b6 | ||
|
|
c899a20340 | ||
|
|
c8cbca2e9f | ||
|
|
51e285c354 | ||
|
|
1d4ed6c156 | ||
|
|
2bdb4ca311 | ||
|
|
793d1d6e56 | ||
|
|
7107697b1e | ||
|
|
09e69d834b | ||
|
|
aa7f70ec64 | ||
|
|
1298c46dee | ||
|
|
ca6ed0fa54 | ||
|
|
1f6c234330 | ||
|
|
89bb20047a | ||
|
|
abf12bd4bf | ||
|
|
06604e980b | ||
|
|
0f75f040aa | ||
|
|
cf3f1b8876 | ||
|
|
0cb11e3aee | ||
|
|
1a47e14621 | ||
|
|
332ffb544f | ||
|
|
b5e09ace61 | ||
|
|
d912065753 | ||
|
|
5878839988 | ||
|
|
f1f01644e2 | ||
|
|
b60e5c350c | ||
|
|
5fb1c901be | ||
|
|
46709d3f0c | ||
|
|
ab6a681223 | ||
|
|
5ddf512605 | ||
|
|
5882b15886 | ||
|
|
731a8ea737 | ||
|
|
6b5c8297f6 | ||
|
|
f3313daff3 | ||
|
|
48c181eff0 | ||
|
|
e429bb6bdb | ||
|
|
11b96e0f57 | ||
|
|
fbd487c573 | ||
|
|
ba791c34c4 | ||
|
|
32af2cb84f | ||
|
|
93d002779e | ||
|
|
439e42a4c2 | ||
|
|
acdba2956a | ||
|
|
5e9fb2ded6 | ||
|
|
b8e63b42e9 | ||
|
|
4d070a01fc | ||
|
|
794d29f65a | ||
|
|
1a2772a2ac | ||
|
|
f2e820e705 | ||
|
|
0c6d178270 | ||
|
|
5da10b7b50 | ||
|
|
7b1789c686 | ||
|
|
9b2bc6c977 | ||
|
|
22865cc4ae | ||
|
|
993f1eb6c5 | ||
|
|
43bf7cc14b | ||
|
|
98b7e68a94 | ||
|
|
7fb52178d5 | ||
|
|
614a2946b5 | ||
|
|
7d74b9eaa4 | ||
|
|
659ea5135f | ||
|
|
df6656004a | ||
|
|
9d8ccc0ecf | ||
|
|
d4378010e2 | ||
|
|
79f02ced71 | ||
|
|
3f3e66c8af | ||
|
|
7d4487fe07 | ||
|
|
cb778b4425 | ||
|
|
fae3341e55 | ||
|
|
ee05de6a16 | ||
|
|
68fa30efd2 | ||
|
|
19472cd159 | ||
|
|
3a07f9e756 | ||
|
|
0d3fa0c782 | ||
|
|
b5a07d9629 | ||
|
|
ddc0a1dbd4 | ||
|
|
56232e7f73 | ||
|
|
9ec4aeafc6 | ||
|
|
52dc78cbf4 | ||
|
|
b94352dc72 | ||
|
|
fd07219a9b | ||
|
|
3c76bcaecf | ||
|
|
71eec109d6 | ||
|
|
4dd3d0066a | ||
|
|
3e650ccbee | ||
|
|
d2c195cb33 | ||
|
|
f4951e93cd | ||
|
|
ec7696c391 | ||
|
|
10b70c5a2d | ||
|
|
edc638c571 | ||
|
|
9200daab21 | ||
|
|
97bc024fb1 | ||
|
|
f7d66e688e | ||
|
|
1659542648 | ||
|
|
cddbff7229 | ||
|
|
bd476da3c8 | ||
|
|
fcc3b3d21c | ||
|
|
276d105b67 | ||
|
|
0f69d065a3 | ||
|
|
8c40fcc2ff | ||
|
|
cbb72b5e50 | ||
|
|
fbf59641b2 | ||
|
|
32d8599428 | ||
|
|
1e69a2142b | ||
|
|
a0ded2a658 | ||
|
|
d87851ff65 | ||
|
|
50c7cf86f9 | ||
|
|
9f42eb1c47 | ||
|
|
67600b8871 | ||
|
|
0f1510ec87 | ||
|
|
38502268be | ||
|
|
1584d75e5f | ||
|
|
36bba69693 | ||
|
|
f3512c31f5 | ||
|
|
2aa0d4ee24 | ||
|
|
4ac0fa6384 | ||
|
|
ccbeb61e90 | ||
|
|
1744058a35 | ||
|
|
948b2a634a | ||
|
|
9a0de291f3 | ||
|
|
23d88a04b3 | ||
|
|
4f00e8f112 | ||
|
|
f879549a79 | ||
|
|
daa42db403 | ||
|
|
55408b006f | ||
|
|
5173ce840a | ||
|
|
9ef49570fc | ||
|
|
e81b9f0026 | ||
|
|
73534ac5b7 | ||
|
|
5da33328c5 | ||
|
|
459ad7ef0d | ||
|
|
ab0e23f9bf | ||
|
|
590da5c21e | ||
|
|
40eff193b3 | ||
|
|
b8f48b7607 | ||
|
|
bc7ad5b48c | ||
|
|
efcee0fb92 | ||
|
|
1040d8a851 | ||
|
|
4605445c61 | ||
|
|
0f98862909 | ||
|
|
85012b39d2 | ||
|
|
286d424ab4 | ||
|
|
63f12ffbfa | ||
|
|
caa6d2276d | ||
|
|
14d6c02770 | ||
|
|
ad769e2a2a | ||
|
|
375de04635 | ||
|
|
2da67bd115 | ||
|
|
51dc9a7958 | ||
|
|
4a0af6dca8 | ||
|
|
28a058756b | ||
|
|
5a0c056539 | ||
|
|
d85a315004 | ||
|
|
84ece9c3bf | ||
|
|
14a0d13024 | ||
|
|
3e2e51f66e | ||
|
|
d6e4526fa4 | ||
|
|
0af7bdddd1 | ||
|
|
febc0da933 | ||
|
|
a9a5d6618d | ||
|
|
4f45d751d1 | ||
|
|
cd3d5524ae | ||
|
|
6e40d93d64 | ||
|
|
f61683403a | ||
|
|
49d5c4fd80 | ||
|
|
8d3a6b15f0 | ||
|
|
a5aa6504a2 | ||
|
|
3515740375 | ||
|
|
9e8de466fe | ||
|
|
a211973449 | ||
|
|
aaee49675e | ||
|
|
fa811ae5d6 | ||
|
|
461d7fdc38 | ||
|
|
64363341b5 | ||
|
|
a7f6a0fac0 | ||
|
|
4d20b3a85b | ||
|
|
26da0bef9b | ||
|
|
cf82e5df90 | ||
|
|
a7becc8904 | ||
|
|
a842218321 | ||
|
|
1ffd141c29 | ||
|
|
1e313183ff | ||
|
|
16291b1410 | ||
|
|
679a1eff8d | ||
|
|
e669f6b278 | ||
|
|
86c8ddfde5 | ||
|
|
3ef5eefad4 | ||
|
|
d3f7a386d6 | ||
|
|
b209cd5cbd | ||
|
|
25129f6685 | ||
|
|
0f910bc421 | ||
|
|
61fae97f7b | ||
|
|
34bae5ebe1 | ||
|
|
ded30edff1 | ||
|
|
7c5ad7b887 | ||
|
|
e677c95d36 | ||
|
|
d6bd536d0f | ||
|
|
f57fcfe3ce | ||
|
|
59a3ce05bb | ||
|
|
e95333da25 | ||
|
|
831779a93a | ||
|
|
3de95586d4 | ||
|
|
fe0da4ec17 | ||
|
|
fbf49e7cef | ||
|
|
cf24780070 | ||
|
|
db5363bea1 | ||
|
|
32d61be767 | ||
|
|
c35e6ca525 | ||
|
|
615d8ee76a | ||
|
|
98afea9fff | ||
|
|
06305c9885 | ||
|
|
f4b15e45ce | ||
|
|
0bd2257502 | ||
|
|
29562a0ac2 | ||
|
|
688c9ed540 | ||
|
|
734addb1d0 | ||
|
|
ff67cbed92 | ||
|
|
be5e6165b8 | ||
|
|
afc8c65c11 | ||
|
|
1949c20aaf | ||
|
|
4d31eb47a8 | ||
|
|
bc91082535 | ||
|
|
4052dbefc7 | ||
|
|
bd6c26463c | ||
|
|
f6395c4261 | ||
|
|
dbbe2230e0 | ||
|
|
04726e07f4 | ||
|
|
42e1effdb7 | ||
|
|
dfff2e17c0 | ||
|
|
a8192ce61c | ||
|
|
c4fb68edd7 | ||
|
|
403902dc27 | ||
|
|
ebc64f029b | ||
|
|
a9f980db83 | ||
|
|
af53bbcfbc | ||
|
|
98ad59907f | ||
|
|
bf398b2dbe | ||
|
|
335181aa7f | ||
|
|
4b28839954 | ||
|
|
04bf56ef1b | ||
|
|
9e97f5966a | ||
|
|
da5de089cb | ||
|
|
95e3d5aae0 | ||
|
|
7edb495cf0 | ||
|
|
2446dd2f71 | ||
|
|
ccce6e44b4 | ||
|
|
225c4e56f5 | ||
|
|
47019a73e8 | ||
|
|
89a60b61e3 | ||
|
|
62a94b30cc | ||
|
|
298228e200 | ||
|
|
3a2941597b | ||
|
|
44d5e03dca | ||
|
|
91f9a09841 | ||
|
|
1cf338d2fa | ||
|
|
a25d01c600 | ||
|
|
48f12fa6db | ||
|
|
e6f991161c | ||
|
|
c46979ba85 | ||
|
|
3e0da19d26 | ||
|
|
c18873318f | ||
|
|
a6b631468e | ||
|
|
a8542aa664 | ||
|
|
9627f61eb4 | ||
|
|
69eb70f0c2 | ||
|
|
e47d802623 | ||
|
|
333682e437 | ||
|
|
1c7a1b8ea9 | ||
|
|
8932e486d3 | ||
|
|
c8acf8cb22 | ||
|
|
2587272ab9 | ||
|
|
b66f9186f6 | ||
|
|
48701d2d37 | ||
|
|
bb40d2ee6a |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
_server/
|
||||
_data/
|
||||
_download/
|
||||
|
||||
73
6_start.sh
73
6_start.sh
@@ -1,73 +0,0 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
source ${ROOT_DIR}/variables.sh
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Apply realm settings
|
||||
##########################################################################################
|
||||
sudo mysql -u root --database="acore_auth" -e "UPDATE realmlist SET address = '${REALM_IP}' WHERE id = 1;"
|
||||
sudo mysql -u root --database="acore_auth" -e "UPDATE realmlist SET name = '${REALM_NAME}' WHERE id = 1;"
|
||||
echo "Realm settings updated..."
|
||||
echo " "
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Apply ah-modbot settings
|
||||
##########################################################################################
|
||||
sudo mysql -u root --database="acore_world" -e "UPDATE mod_auctionhousebot SET minitems = ${AH_BOT_MIN_ITEMS}, maxitems = ${AH_BOT_MAX_ITEMS};"
|
||||
echo "Module ah-modbot updated..."
|
||||
echo " "
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# reset playerbots data (enforces performance and bot levels balance)
|
||||
##########################################################################################
|
||||
sudo mysql -u root --database="acore_characters" < ${ROOT_DIR}/lib/clear-bots.sql
|
||||
echo "Module playerbots updated..."
|
||||
echo " "
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# handle the tmux sessions
|
||||
##########################################################################################
|
||||
if tmux new-session -d -s $AUTHSERVER_SESSION; then
|
||||
echo "Created authserver session: $AUTHSERVER_SESSION"
|
||||
else
|
||||
echo "Error when trying to create authserver session: $AUTHSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
if tmux new-session -d -s $WORLDSERVER_SESSION; then
|
||||
echo "Created worldserver session: $WORLDSERVER_SESSION"
|
||||
else
|
||||
echo "Error when trying to create worldserver session: $WORLDSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
if tmux send-keys -t $AUTHSERVER_SESSION "$AUTHSERVER" C-m; then
|
||||
echo "Executed \"$AUTHSERVER\" inside $AUTHSERVER_SESSION"
|
||||
#echo "You can attach to $AUTHSERVER_SESSION and check the result using \"tmux attach -t $AUTHSERVER_SESSION\""
|
||||
else
|
||||
echo "Error when executing \"$AUTHSERVER\" inside $AUTHSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
if tmux send-keys -t $WORLDSERVER_SESSION "$WORLDSERVER" C-m; then
|
||||
echo "Executed \"$WORLDSERVER\" inside $WORLDSERVER_SESSION"
|
||||
#echo "You can attach to $WORLDSERVER_SESSION and check the result using \"tmux attach -t $WORLDSERVER_SESSION\""
|
||||
else
|
||||
echo "Error when executing \"$WORLDSERVER\" inside $WORLDSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
echo "###########################################################################################"
|
||||
echo "Word of advice:"
|
||||
echo "## 1. -------------------------------------------------------------------------------------"
|
||||
echo "After (re)starting the server and logging in with the client wait 5-10m so the bots can"
|
||||
echo "settle abit; getting an assigned level and teleport to an area for that level"
|
||||
echo "## 2. -------------------------------------------------------------------------------------"
|
||||
echo "If you wanna type alot of commands in the world-server session you might want to disable"
|
||||
echo "## the playerbots mod through the playerbot config, since the playerbots generates alot of"
|
||||
echo "## output which disrupts the command line typing :) When done enable again ./config/module"
|
||||
echo "###########################################################################################"
|
||||
124
README.md
124
README.md
@@ -1,124 +0,0 @@
|
||||
# azerothcore_installer [WIP]
|
||||
A simple classic Azerothcore installer with playerbots and ahbot for solo / friends play.
|
||||
For now a quick guide with a abit of common sense and experience i guess, this is just quick setup since i kinda made it for personal use. I prolly will test abit more and add some additional 'features' such as
|
||||
auto character import/export.
|
||||
|
||||
Why classic and not docker? Even though i love docker it does add some additional layer of complexity especially when playing around with modules and settings. Hence making this tiny wrapper instead of a
|
||||
docker image. Obviously this can be translated into a container, but if you able to run a container you should be able to run the default wiki installation embedded in the azerothcore instead.
|
||||
|
||||
It might contain some errors and whatnot, hopefully it will give you some guidance when you have trouble with the classic installation with playerbots and ah-bot. I havent covered every step with great detail
|
||||
i might add a 'real' guide when i have the time.
|
||||
|
||||
## Todo
|
||||
- min/max bot amount, threads performance
|
||||
- test MariaDB vs mySQL, mariaDB feels faster maybe i am seeing ghost though. (done and seeems equal)
|
||||
- Integrate the player export/import
|
||||
- Integrate database full backup
|
||||
- Consider setting vmplayer on priority from 'normal' to 'high'
|
||||
|
||||
|
||||
# Server setup
|
||||
- vmware player
|
||||
- ubuntu-24.04-live-server-amd64.iso
|
||||
- minimal setup
|
||||
- 70GB disksize (minimal 50GB)
|
||||
- 16 GB memorysize
|
||||
- 4 cores (amd 5700x)
|
||||
- network (bridged mode)
|
||||
|
||||
## Ubuntu server settings
|
||||
|
||||
Update and install tooling
|
||||
```bash
|
||||
sudo apt update -y && sudo apt upgrade -y
|
||||
sudo git net-tools
|
||||
```
|
||||
|
||||
Find network IP, should be something like 192.168.x.x
|
||||
```bash
|
||||
ifconfig
|
||||
```
|
||||
|
||||
###### Internet server
|
||||
Use the above (ifconfig) IP for the following router poort-forwarding and/or firewall rules settings.
|
||||
````
|
||||
# 3724 TCP AUTH-SERVER
|
||||
# 8085 TCP WORLD-SERVER
|
||||
````
|
||||
Go to e.g. [whatsmyip](https://whatismyip.com/) and use that IP as realm IP in the variables.sh
|
||||
and the client 3.3.5a 'data/enUS/realmlist.wtf' files
|
||||
|
||||
###### Local server
|
||||
Use the above IP (ifconfig) as realm IP in the variables.sh and the client 3.3.5a
|
||||
'data/enUS/realmlist.wtf' files.
|
||||
|
||||
|
||||
# Installer
|
||||
```bash
|
||||
git clone https://github.com/hermensbas/azerothcore_installer.git
|
||||
cd azerothcore_installer.git
|
||||
chmod +x *.sh
|
||||
```
|
||||
And simply follow the steps of the scripts.
|
||||
|
||||
For the first install, make sure after 'start.sh' you logon on the tmux session of the world-server by typing 'wow'
|
||||
and hit next, next, next when prompting for creating databases.
|
||||
|
||||
###### ah-bot
|
||||
Create normal account and use helper/find-character.sh 'charname' to find the accountId and characterId (GUID)
|
||||
and update your ah-mod config in the ./config folder and reapply the config and start the server again.
|
||||
|
||||
```tree
|
||||
├── 1_download.sh (downloads the sources and client-data)
|
||||
├── 2_update.sh (updates and resets the downloaded sources to latest)
|
||||
├── 3_build.sh (builds the server structure and such)
|
||||
├── 4_compile.sh (compiles the server code)
|
||||
├── 5_config.sh (applies general configuration and that defined in ./config, restart required)
|
||||
├── 6_start.sh (starts the client but can be done through alias created by config.sh)
|
||||
├── _data (client-data v16)
|
||||
│ └── data.zip
|
||||
├── _download (downloaded core and modules)
|
||||
│ ├── azerothcore
|
||||
│ └── modules
|
||||
├── _server (the build and compiled server code based on the downloaded code)
|
||||
│ └── azerothcore
|
||||
├── config (custom config which be merged on top of the generated .dist configs)
|
||||
│ ├── authserver.conf
|
||||
│ ├── modules
|
||||
│ └── worldserver.conf
|
||||
├── helper (simple helper scripts for ah-bot and clearing ah-bot)
|
||||
│ ├── clear-ah.sh
|
||||
│ └── find-character.sh
|
||||
├── lib
|
||||
│ ├── clear-bots.sql
|
||||
│ ├── general-settings.sh
|
||||
│ └── merge_core.sh (maybe when your abit more advanced with git and concepts like rebase and merge, but this merges the original azerothcore into the playerbot fork, if e.g. the u need a fix asap)
|
||||
└── variables.sh (contains project variables such as realm IP and name, min-max items for ah-bot etc.
|
||||
````
|
||||
|
||||
General info
|
||||
The ah-bot and playerbots modules are integrated sort off, you will need to create an account for th ah-bot and complete the
|
||||
ah-bot config by using the find-character.sh script.
|
||||
|
||||
And every start all bots data will be deleted to maintai a clean database and remain the balance between the
|
||||
levels of among the bots as they grow over time.
|
||||
|
||||
# Client
|
||||
3.3.5a (Can be found through chromiecraft or simply join that server hosted and developed y azerothcore
|
||||
|
||||
Addons:
|
||||
- Allstats
|
||||
- QuestHelper
|
||||
- UnBot (english version), used to control the playerbots
|
||||
- AI_VoiceOver
|
||||
- AI_VoiceOverData_Vanilla
|
||||
|
||||
# Server stability
|
||||
Obviously the more custom modules are installed the more risk of encountering problems, playerbot is still being developed.
|
||||
If you experience random disconnects without 'any' reason playerbot might be the cause, you might wanna try to rebuild/recompile the code and/or lower the bot amount)
|
||||
|
||||
# Changing config
|
||||
After changing the config files in the /config folder, run the following commands:
|
||||
- 1. config - by alias 'config' or running the 5_config.sh)
|
||||
- 2. Server restart - by stop/start or simply a 'AC> server restart 1' command in the world-server session
|
||||
|
||||
Submodule _download/azerothcore deleted from 5276676a11
Submodule _download/modules/mod-ah-bot deleted from 8b06eb4906
Submodule _download/modules/mod-playerbots deleted from 8816758490
Submodule _download/modules/mod-progression-system deleted from a174835688
@@ -2,8 +2,12 @@
|
||||
# START: custom authserver.conf settings
|
||||
#################################################################################################
|
||||
|
||||
LoginDatabase.WorkerThreads = 4
|
||||
LoginDatabase.SynchThreads = 4
|
||||
#-------------------------------------------------------------------
|
||||
# performance
|
||||
#-------------------------------------------------------------------
|
||||
LoginDatabase.WorkerThreads = 1
|
||||
LoginDatabase.SynchThreads = 1
|
||||
|
||||
|
||||
#################################################################################################
|
||||
# END: custom authserver.conf settings
|
||||
|
||||
@@ -2,57 +2,12 @@
|
||||
# START: custom mod_ahbot.conf settings
|
||||
#################################################################################################
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------------------------
|
||||
# Use helper/find-character.sh to locate your newly created ah account and character GUID
|
||||
#-----------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
# ah-bot account and character
|
||||
AuctionHouseBot.Account = 2
|
||||
AuctionHouseBot.GUID = 1
|
||||
|
||||
|
||||
# enable
|
||||
AuctionHouseBot.EnableSeller = 1
|
||||
AuctionHouseBot.EnableBuyer = 1
|
||||
AuctionHouseBot.ItemsPerCycle = 800
|
||||
|
||||
|
||||
# type of items being offered
|
||||
AuctionHouseBot.VendorItems = 1
|
||||
AuctionHouseBot.VendorTradeGoods = 1
|
||||
AuctionHouseBot.LootItems = 1
|
||||
AuctionHouseBot.LootTradeGoods = 1
|
||||
AuctionHouseBot.OtherItems = 0
|
||||
AuctionHouseBot.OtherTradeGoods = 0
|
||||
AuctionHouseBot.No_Bind = 1
|
||||
AuctionHouseBot.Bind_When_Picked_Up = 0
|
||||
AuctionHouseBot.Bind_When_Equipped = 1
|
||||
AuctionHouseBot.Bind_When_Use = 1
|
||||
AuctionHouseBot.Bind_Quest_Item = 0
|
||||
AuctionHouseBot.DisablePermEnchant = 0
|
||||
AuctionHouseBot.DisableConjured = 0
|
||||
AuctionHouseBot.DisableGems = 0
|
||||
AuctionHouseBot.DisableMoney = 0
|
||||
AuctionHouseBot.DisableMoneyLoot = 0
|
||||
AuctionHouseBot.DisableLootable = 0
|
||||
AuctionHouseBot.DisableKeys = 0
|
||||
AuctionHouseBot.DisableDuration = 0
|
||||
AuctionHouseBot.DisableBOP_Or_Quest_NoReqLevel = 0
|
||||
|
||||
# items for vanilla races only
|
||||
AuctionHouseBot.DisableDKItems = 1
|
||||
|
||||
# vanilla items only
|
||||
AuctionHouseBot.DisableItemsAboveLevel = 60
|
||||
AuctionHouseBot.DisableTGsAboveLevel = 60
|
||||
AuctionHouseBot.DisableItemsAboveReqLevel = 60
|
||||
AuctionHouseBot.DisableTGsAboveReqLevel = 60
|
||||
AuctionHouseBot.DisableItemsAboveReqSkillRank = 300
|
||||
AuctionHouseBot.DisableTGsAboveReqSkillRank = 300
|
||||
#-------------------------------------------------------------------
|
||||
#---- general
|
||||
#-------------------------------------------------------------------
|
||||
AuctionHouseBot.EnableSeller = false
|
||||
AuctionHouseBot.GUID = 0
|
||||
|
||||
#################################################################################################
|
||||
# END: custom mod_ahbot.conf settings
|
||||
#################################################################################################
|
||||
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
#################################################################################################
|
||||
# START: custom progression_system.conf settings
|
||||
# START: custom mod_player_bot_level_brackets.conf settings
|
||||
#################################################################################################
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
#---- general
|
||||
#-------------------------------------------------------------------
|
||||
BotLevelBrackets.Enabled = 1
|
||||
|
||||
#################################################################################################
|
||||
# END: custom progression_system.conf settings
|
||||
# END: custom mod_player_bot_level_brackets.conf settings
|
||||
#################################################################################################
|
||||
@@ -1,48 +1,273 @@
|
||||
#################################################################################################
|
||||
#####################################################################################################################
|
||||
# START: custom playerbots.conf settings
|
||||
#################################################################################################
|
||||
#####################################################################################################################
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# general
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
AiPlayerbot.Enabled = 1
|
||||
AiPlayerbot.DeleteRandomBotAccounts = 0
|
||||
AiPlayerbot.RandomBotAccountPrefix = "rndbot"
|
||||
AiPlayerbot.LimitTalentsExpansion = 0
|
||||
AiPlayerbot.RandomBotJoinBG = 1
|
||||
|
||||
# Bot group invitation permission level (0 = GM only, 1 = accept based on level, 2 = always accept)
|
||||
# Default: 1 (accept based on level)
|
||||
AiPlayerbot.GroupInvitationPermission = 1
|
||||
|
||||
# Disable randombots when no real players are logged in
|
||||
# Default: 0 (randombots will login when server starts)
|
||||
# If enabled, randombots will only log in 30 seconds (default) after a real player logs in, and will log out 300 seconds (default) after all real players log out
|
||||
AiPlayerbot.DisabledWithoutRealPlayer = 0
|
||||
AiPlayerbot.DisabledWithoutRealPlayerLoginDelay = 30
|
||||
AiPlayerbot.DisabledWithoutRealPlayerLogoutDelay = 300
|
||||
|
||||
|
||||
# randombots (maps: 0=Eastern 1=Kingdoms, Kalimdor, 530=Outland, 571=Northrend)
|
||||
AiPlayerbot.MinRandomBots = 2250
|
||||
AiPlayerbot.MaxRandomBots = 2300
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# randombots
|
||||
# - RandomBotMaps: 0=Eastern Kingdoms, 1=Kalimdor, 530=Outland, 571=Northrend
|
||||
# - RandombotStartingLevel (if 'DisableRandomLevels' disabled): below 5 will
|
||||
# cause lag if not worse, due the design of level 1 areas they will cluster
|
||||
# which is hard for the server to deal with.
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
AiPlayerbot.MinRandomBots = 2000
|
||||
AiPlayerbot.MaxRandomBots = 2000
|
||||
AiPlayerbot.RandomBotMinLevel = 1
|
||||
AiPlayerbot.RandomBotMaxLevel = 30
|
||||
AiPlayerbot.RandomBotMaxLevelChance = 0.1
|
||||
AiPlayerbot.RandomBotMaxLevel = 80
|
||||
AiPlayerbot.DisableDeathKnightLogin = 0
|
||||
AiPlayerbot.RandomBotAllianceRatio = 50
|
||||
AiPlayerbot.RandomBotHordeRatio = 50
|
||||
|
||||
AiPlayerbot.RandomBotAccountCount = 0
|
||||
#AiPlayerbot.RandomBotAccountCount = 500
|
||||
|
||||
AiPlayerbot.RandomBotMaps = 0,1,530,571
|
||||
AiPlayerbot.AutoTeleportForLevel = 1
|
||||
AiPlayerbot.RandomBotTeleportDistance = 100
|
||||
AiPlayerbot.RandomBotTeleLowerLevel = 1
|
||||
AiPlayerbot.RandomBotTeleHigherLevel = 3
|
||||
AiPlayerbot.ProbTeleToBankers = 0.25
|
||||
|
||||
AiPlayerbot.RandomBotFixedLevel = 0
|
||||
AiPlayerbot.DisableRandomLevels = 0
|
||||
AiPlayerbot.SyncLevelWithPlayers = 0
|
||||
|
||||
AiPlayerbot.RandomBotMaps = 0,1
|
||||
AiPlayerbot.RandomBotTeleLowerLevel = 3
|
||||
AiPlayerbot.RandomBotTeleHigherLevel = 1
|
||||
AiPlayerbot.AutoTeleportForLevel = 1
|
||||
AiPlayerbot.SyncQuestWithPlayer = 1
|
||||
AiPlayerbot.PreQuests = 0
|
||||
AiPlayerbot.AutoDoQuests = 1
|
||||
AiPlayerbot.RandomBotGroupNearby = 0
|
||||
AiPlayerbot.AutoLearnQuestSpells = 1
|
||||
AiPlayerbot.EquipmentPersistence = 1
|
||||
AiPlayerbot.SummonWhenGroup = 0
|
||||
|
||||
AiPlayerbot.AggroDistance = 40
|
||||
AiPlayerbot.RandombotStartingLevel = 1
|
||||
AiPlayerbot.RandomBotMinLevelChance = 0.1
|
||||
AiPlayerbot.RandomBotMaxLevelChance = 0.1
|
||||
|
||||
# Randombots will behave more like real players (experimental)
|
||||
# This option will override AiPlayerbot.AutoDoQuests, RandomBotTeleLowerLevel, and RandomBotTeleHigherLevel
|
||||
# Default: 1 (enabled)
|
||||
AiPlayerbot.EnableNewRpgStrategy = 1
|
||||
|
||||
# Control probability weights for RPG status of bots. Takes effect only when the status meets its premise.
|
||||
# Sum of weights need not be 100. Set to 0 to disable the status.
|
||||
#
|
||||
# WanderRandom (Default: 15 Move randomly nearby to find and kill mobs)
|
||||
# WanderNpc (Default: 20 Randomly interact with nearby NPCs)
|
||||
# GoGrind (Default: 15 Go to nearby level-appropriate locations to grind for killing mobs)
|
||||
# GoCamp (Default: 10 Return to a nearby camp depending on innkeeper/flightmaster)
|
||||
# DoQuest (Default: 60 Select quest from the quest log and head to the location to attempt completion)
|
||||
# TravelFlight (Default: 15 Go to the nearest flightmaster and fly to a level-appropriate area)
|
||||
# Rest (Default: 5 Take a break for a while and do nothing)
|
||||
AiPlayerbot.RpgStatusProbWeight.WanderRandom = 10
|
||||
AiPlayerbot.RpgStatusProbWeight.WanderNpc = 10
|
||||
AiPlayerbot.RpgStatusProbWeight.GoGrind = 50
|
||||
AiPlayerbot.RpgStatusProbWeight.GoCamp = 10
|
||||
AiPlayerbot.RpgStatusProbWeight.DoQuest = 30
|
||||
AiPlayerbot.RpgStatusProbWeight.TravelFlight = 15
|
||||
AiPlayerbot.RpgStatusProbWeight.Rest = 5
|
||||
|
||||
# Enable/Disable cheats for bots
|
||||
# "gold" (bots have infinite gold)
|
||||
# "health" (bots have infinite health)
|
||||
# "mana" (bots have infinite mana)
|
||||
# "power" (bots have infinite energy, rage, and runic power)
|
||||
# "taxi" (bots may use all flight paths, though they will not actually learn them)
|
||||
# "raid" (bots use cheats implemented into raid strategies)
|
||||
AiPlayerbot.BotCheats = "taxi,raid"
|
||||
|
||||
|
||||
# world account bots and rotation
|
||||
AiPlayerbot.EnableRotation = 1
|
||||
AiPlayerbot.RotationPoolSize = 2400
|
||||
AiPlayerbot.RandomBotAccountCount = 300
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# command
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
AiPlayerbot.AutoGearCommand = 1
|
||||
AiPlayerbot.AutoGearCommandAltBots = 1
|
||||
AiPlayerbot.MaintenanceCommand = 1
|
||||
|
||||
# bots gear level limits
|
||||
# Equipment quality limitation for autogear command (1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary)
|
||||
# Default: 3 (rare)
|
||||
AiPlayerbot.AutoGearQualityLimit = 3
|
||||
AiPlayerbot.LimitEnchantExpansion = 60
|
||||
AiPlayerbot.LimitGearExpansion = 60
|
||||
|
||||
# Equipment item level (not gearscore) limitation for autogear command (0 = no limit)
|
||||
# Classic
|
||||
# Max iLVL Tier 1 = 66 | Tier 2 = 76 | Tier 2.5 = 88 | Tier 3 = 92
|
||||
# Max iLVL Phase 1(MC, Ony, ZG) = 78 | Phase 2(BWL) = 83 | Phase 2.5(AQ40) = 88 | Phase 3(Naxx40) = 92
|
||||
# TBC
|
||||
# Max iLVL Tier 4 = 120 | Tier 5 = 133 | Tier 6 = 164
|
||||
# Max iLVL Phase 1(Kara, Gruul, Mag) = 125 | Phase 1.5(ZA) = 138 | Phase 2(SC, TK) = 141 | Phase 3(Hyjal, BT) = 156 | Phase 4(Sunwell) = 164
|
||||
# Wotlk
|
||||
# Max iLVL Tier 7(10/25) = 200/213 | Tier 8(10/25) = 225/232 | Tier 9(10/25) = 232/245 | Tier 10(10/25/HC) = 251/264/290
|
||||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||||
# Default: 0 (no limit)
|
||||
AiPlayerbot.AutoGearScoreLimit = 0
|
||||
|
||||
# player summoned group/raid bots limits
|
||||
AiPlayerbot.AllowAccountBots = 1
|
||||
AiPlayerbot.AllowGuildBots = 1
|
||||
|
||||
AiPlayerbot.AddClassCommand = 1
|
||||
AiPlayerbot.MaxAddedBots = 40
|
||||
AiPlayerbot.MaxAddedBotsPerClass = 10
|
||||
AiPlayerbot.AddClassAccountPoolSize = 50
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# chat and broadcast (default; RepeatDelay = 2000)
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
AiPlayerbot.EnableBroadcasts = 0
|
||||
AiPlayerbot.RandomBotTalk = 0
|
||||
AiPlayerbot.RandomBotEmote = 0
|
||||
AiPlayerbot.RandomBotSuggestDungeons = 0
|
||||
AiPlayerbot.EnableGreet = 0
|
||||
AiPlayerbot.ToxicLinksRepliesChance = 0
|
||||
AiPlayerbot.ThunderfuryRepliesChance = 0
|
||||
AiPlayerbot.GuildRepliesRate = 0
|
||||
AIPlayerbot.GuildFeedback = 0
|
||||
AiPlayerbot.RandomBotSayWithoutMaster = 0
|
||||
AiPlayerbot.SayWhenCollectingItems = 0
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# intervals
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#AiPlayerbot.RandomBotUpdateInterval = 20
|
||||
AiPlayerbot.RandomBotUpdateInterval = 5
|
||||
AiPlayerbot.RandomBotCountChangeMinInterval = 1800
|
||||
AiPlayerbot.RandomBotCountChangeMaxInterval = 7200
|
||||
AiPlayerbot.MinRandomBotInWorldTime = 3600
|
||||
AiPlayerbot.MaxRandomBotInWorldTime = 1209600
|
||||
AiPlayerbot.MinRandomBotRandomizeTime = 7200
|
||||
AiPlayerbot.MaxRandomBotRandomizeTime = 1209600
|
||||
AiPlayerbot.RandomBotsPerInterval = 60
|
||||
AiPlayerbot.MinRandomBotReviveTime = 60
|
||||
AiPlayerbot.MaxRandomBotReviveTime = 300
|
||||
AiPlayerbot.MinRandomBotTeleportInterval = 3600
|
||||
AiPlayerbot.MaxRandomBotTeleportInterval = 18000
|
||||
AiPlayerbot.RandomBotInWorldWithRotationDisabled = 31104000
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# timers
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#AiPlayerbot.IterationsPerTick = 200
|
||||
AiPlayerbot.IterationsPerTick = 10
|
||||
AiPlayerbot.GlobalCooldown = 500
|
||||
AiPlayerbot.MaxWaitForMove = 5000
|
||||
AiPlayerbot.DisableMoveSplinePath = 1
|
||||
AiPlayerbot.MaxMovementSearchTime = 3
|
||||
AiPlayerbot.ExpireActionTime = 5000
|
||||
AiPlayerbot.DispelAuraDuration = 700
|
||||
AiPlayerbot.ReactDelay = 100
|
||||
AiPlayerbot.DynamicReactDelay = 0
|
||||
AiPlayerbot.PassiveDelay = 5000
|
||||
AiPlayerbot.RepeatDelay = 3000
|
||||
AiPlayerbot.ErrorDelay = 100
|
||||
AiPlayerbot.RpgDelay = 8000
|
||||
AiPlayerbot.SitDelay = 10000
|
||||
AiPlayerbot.ReturnDelay = 2000
|
||||
AiPlayerbot.LootDelay = 1000
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# distance
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
AiPlayerbot.FarDistance = 20.0
|
||||
AiPlayerbot.SightDistance = 75.0
|
||||
AiPlayerbot.SpellDistance = 28.5
|
||||
AiPlayerbot.ShootDistance = 26.0
|
||||
AiPlayerbot.ReactDistance = 150.0
|
||||
AiPlayerbot.GrindDistance = 75.0
|
||||
AiPlayerbot.HealDistance = 38.5
|
||||
AiPlayerbot.LootDistance = 25.0
|
||||
AiPlayerbot.FleeDistance = 8.0
|
||||
AiPlayerbot.TooCloseDistance = 5.0
|
||||
AiPlayerbot.MeleeDistance = 1.5
|
||||
AiPlayerbot.FollowDistance = 1.5
|
||||
AiPlayerbot.WhisperDistance = 6000.0
|
||||
AiPlayerbot.ContactDistance = 0.5
|
||||
AiPlayerbot.AoeRadius = 10
|
||||
AiPlayerbot.RpgDistance = 200
|
||||
AiPlayerbot.AggroDistance = 22
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# performance related
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
AiPlayerbot.BotActiveAlone = 10
|
||||
AiPlayerbot.BotActiveFreezeDuringServerInit = 1
|
||||
AiPlayerbot.BotActiveAloneForceWhenInRadius = 150
|
||||
AiPlayerbot.BotActiveAloneForceWhenInZone = 1
|
||||
AiPlayerbot.BotActiveAloneForceWhenInMap = 0
|
||||
# BotActiveAloneForceWhenIsFriend = 1 # hasFriend logic might cause a crash
|
||||
AiPlayerbot.BotActiveAloneForceWhenIsFriend = 0
|
||||
AiPlayerbot.BotActiveAloneForceWhenInGuild = 1
|
||||
AiPlayerbot.botActiveAloneSmartScale = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleDiffLimitfloor = 50
|
||||
AiPlayerbot.botActiveAloneSmartScaleDiffLimitCeiling = 200
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
|
||||
PlayerbotsDatabase.WorkerThreads = 1
|
||||
PlayerbotsDatabase.SynchThreads = 100
|
||||
PlayerbotsDatabase.SynchThreads = 1
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# custom strategies (AiPlayerbot.RandomBotNonCombatStrategies also used for .playerbot bot self)
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
AiPlayerbot.RandomBotNonCombatStrategies = "+grind,+new rpg"
|
||||
#AiPlayerbot.RandomBotNonCombatStrategies = "+grind,+loot,+new rpg"
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
# RPG STRATEGY
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------------------------------------------
|
||||
AiPlayerbot.ZoneBracket.400 = # Disabled because Freewind Post causes a lot of problems.
|
||||
|
||||
|
||||
#################################################################################################
|
||||
|
||||
@@ -2,40 +2,93 @@
|
||||
# START: custom worldserver.conf settings
|
||||
#################################################################################################
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# world server config (Expansion 0 = classic, 1 = bc, 2 = wotlk)
|
||||
Expansion = 0
|
||||
MaxPlayerLevel = 60
|
||||
#-------------------------------------------------------------------
|
||||
Expansion = 2
|
||||
MaxPlayerLevel = 80
|
||||
GameType = 1
|
||||
PlayerLimit = 0
|
||||
logsDir = "/tmp/ac/logs"
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# new player config
|
||||
#-------------------------------------------------------------------
|
||||
StartPlayerMoney = 50000
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# server config
|
||||
#-------------------------------------------------------------------
|
||||
Instance.GMSummonPlayer = 1
|
||||
MailDeliveryDelay = 10
|
||||
MailDeliveryDelay = 30
|
||||
LeaveGroupOnLogout.Enabled = 0
|
||||
InstantLogout = 0
|
||||
DungeonFinder.CastDeserter = 0
|
||||
Battleground.CastDeserter = 0
|
||||
Battleground.TrackDeserters.Enable = 0
|
||||
GM.Chat = 0
|
||||
GM.LoginState = 0
|
||||
GM.WhisperingTo = 1
|
||||
GM.AllowInvite = 1
|
||||
GM.AllowFriend = 1
|
||||
GM.TicketSystem.ChanceOfGMSurvey = 0
|
||||
AllowTickets = 0
|
||||
#CloseIdleConnections = 1
|
||||
PreventAFKLogout = 2
|
||||
SocketTimeOutTimeActive = 300000
|
||||
AllFlightPaths = 1
|
||||
PlayerStart.AllReputation = 1
|
||||
InstantLogout = 0
|
||||
|
||||
# save (5m, default 10m)
|
||||
PlayerSaveInterval = 300000
|
||||
PlayerSave.Stats.SaveOnlyOnLogout = 0
|
||||
|
||||
# weather (5m, default 10m)
|
||||
ActivateWeather = 1
|
||||
ChangeWeatherInterval = 300000
|
||||
|
||||
# Otherwise playerbots wont accept quests
|
||||
Quests.IgnoreAutoAccept = 1
|
||||
|
||||
# 1 is default
|
||||
Respawn.DynamicRateCreature = 2
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# factions (Auction required for mod-ahbot)
|
||||
#-------------------------------------------------------------------
|
||||
AllowTwoSide.Interaction.Auction = 1
|
||||
AllowTwoSide.WhoList = 1
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# performance
|
||||
PreloadAllNonInstancedMapGrids = 0
|
||||
#-------------------------------------------------------------------
|
||||
PreloadAllNonInstancedMapGrids = 1
|
||||
#SetAllCreaturesWithWaypointMovementActive = 0
|
||||
#DontCacheRandomMovementPaths = 1
|
||||
MoveMaps.Enable = 1
|
||||
|
||||
Compression = 1
|
||||
ProcessPriority = 1
|
||||
UseProcessors = 0
|
||||
Network.OutUBuff = 16384
|
||||
|
||||
ThreadPool = 8
|
||||
MapUpdate.Threads = 16
|
||||
Network.Threads = 4
|
||||
|
||||
MapUpdateInterval = 15
|
||||
MinWorldUpdateTime = 5
|
||||
|
||||
LoginDatabase.WorkerThreads = 1
|
||||
WorldDatabase.WorkerThreads = 1
|
||||
CharacterDatabase.WorkerThreads = 1
|
||||
|
||||
LoginDatabase.SynchThreads = 1
|
||||
WorldDatabase.SynchThreads = 1
|
||||
CharacterDatabase.SynchThreads = 2
|
||||
|
||||
Network.Threads = 1
|
||||
ThreadPool = 2
|
||||
|
||||
MapUpdate.Threads = 6
|
||||
MapUpdateInterval = 100
|
||||
MinWorldUpdateTime = 10
|
||||
|
||||
CharacterDatabase.SynchThreads = 1
|
||||
|
||||
#################################################################################################
|
||||
# END: custom worldserver.conf settings
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
read -p "This will delete all items of the auction house, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
echo " ";
|
||||
if [[ $REPLY =~ ^[Yy]$ ]];
|
||||
then
|
||||
|
||||
sudo mysql -u root --database="acore_characters" -e "DELETE FROM auctionhouse;"
|
||||
|
||||
fi
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo "Parameter is null, first paramter 'character name' should not be empty";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# find character and account id by name, mainly used for configuring the ah-bot mod.
|
||||
sudo mysql -u root --database="acore_auth" -e "select acc.id as accountId, ch.guid as characterId from acore_auth.account as acc inner join acore_characters.characters as ch where acc.id = ch.account and acc.username = '${1}';"
|
||||
18
install_mysql_8.4.2_lts.md
Normal file
18
install_mysql_8.4.2_lts.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Install or Update
|
||||
|
||||
Haven't tested the update, personally i did a new install. So test when in doubt.
|
||||
|
||||
1. Backup DB or use export characters through the AC (dump) command options.
|
||||
|
||||
2. Go to https://dev.mysql.com/downloads/repo/apt/ for the latest apt package
|
||||
|
||||
3.
|
||||
```bash
|
||||
wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
|
||||
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
|
||||
|
||||
sudo apt update
|
||||
sudo apt install mysql-server
|
||||
````
|
||||
|
||||
Make sure your select 8.4.2 in the configuration screen ;)
|
||||
@@ -1,30 +0,0 @@
|
||||
DELETE FROM `acore_playerbots`.`playerbots_random_bots`;
|
||||
UPDATE `acore_characters`.`playerbots_names` SET `in_use`=0;
|
||||
DELETE FROM `acore_characters`.`characters` WHERE `account` IN (SELECT `id` FROM `acore_auth`.`account` WHERE `username` LIKE 'RNDBOT%') OR `account` NOT IN (SELECT `id` FROM `acore_auth`.`account`);
|
||||
DELETE FROM `acore_characters`.`character_account_data` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_achievement` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_achievement_progress` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_action` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_aura` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_glyphs` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_homebind` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`item_instance` WHERE `owner_guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_inventory` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`pet_aura` WHERE `guid` IN (SELECT `id` FROM `acore_characters`.`character_pet` WHERE `owner` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`));
|
||||
DELETE FROM `acore_characters`.`pet_spell` WHERE `guid` IN (SELECT `id` FROM `acore_characters`.`character_pet` WHERE `owner` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`));
|
||||
DELETE FROM `acore_characters`.`pet_spell_cooldown` WHERE `guid` IN (SELECT `id` FROM `acore_characters`.`character_pet` WHERE `owner` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`));
|
||||
DELETE FROM `acore_characters`.`character_pet` WHERE `owner` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_queststatus` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_queststatus_rewarded` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_reputation` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_skills` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_social` WHERE `friend` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_spell` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_spell_cooldown` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`character_talent` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`corpse` WHERE `guid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`groups` WHERE `leaderGuid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`group_member` WHERE `memberGuid` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`mail` WHERE `receiver` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_characters`.`mail_items` WHERE `receiver` NOT IN (SELECT `guid` FROM `acore_characters`.`characters`);
|
||||
DELETE FROM `acore_auth`.`account` WHERE `username` LIKE 'RNDBOT%';
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
##########################################################################################
|
||||
# General settings
|
||||
##########################################################################################
|
||||
# Setting execute rights for the scripts
|
||||
sudo chmod +x ${ROOT_DIR}/*.sh
|
||||
sudo chmod +x ${ROOT_DIR}/lib/*.sh
|
||||
sudo chmod +x ${ROOT_DIR}/helper/*.sh
|
||||
|
||||
# Alias GIT (git lg for git commits, git ls for commits with changed files)
|
||||
git config --global alias.lg 'log --graph --abbrev-commit --decorate --date=relative --all'
|
||||
git config --global alias.ls 'log --stat --pretty=short --graph'
|
||||
251
readme.md
Normal file
251
readme.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# azerothcore_installer
|
||||
For development and play
|
||||
|
||||
|
||||
[](https://www.youtube.com/watch?v=iCn14KLCerY)
|
||||
|
||||
## Server setup
|
||||
- VMWARE player
|
||||
- ubuntu-24.04-live-server-amd64.iso (minimal setup)
|
||||
- 100GB disk
|
||||
- 64 GB memory
|
||||
- assigned 16 threads (8 cores, 2 cores per thread) running on AMD 7945HX
|
||||
- network (bridged mode)
|
||||
|
||||
#### mysql 8.4.x (LTS)
|
||||
```
|
||||
mysql --help | grep my.cnf
|
||||
sudo nano /etc/mysql/my.cnf
|
||||
sudo systemctl restart mysql
|
||||
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
|
||||
# error while restart?
|
||||
sudo journalctl -xeu mysql.service --no-pager | tail -n 30
|
||||
```
|
||||
|
||||
/etc/mysql/mysql.conf.d/mysqld.cnf
|
||||
```
|
||||
[mysqld]
|
||||
# ------------------ Memory Usage ------------------
|
||||
innodb_buffer_pool_size = 24G
|
||||
innodb_buffer_pool_instances = 8
|
||||
innodb_log_buffer_size = 512M
|
||||
innodb_redo_log_capacity = 2G
|
||||
|
||||
# ------------------ I/O & NVMe Tuning ------------------
|
||||
innodb_flush_method = O_DIRECT # Avoid OS cache — best for NVMe
|
||||
innodb_use_fdatasync = ON
|
||||
innodb_io_capacity = 8000 # Pushes high IOPS for writes
|
||||
innodb_io_capacity_max = 16000 # Maximize during bursts
|
||||
|
||||
# ------------------ Temp Tables & Buffers ------------------
|
||||
tmp_table_size = 256M
|
||||
max_heap_table_size = 256M
|
||||
table_open_cache = 4096
|
||||
open_files_limit = 65535
|
||||
thread_cache_size = 200
|
||||
join_buffer_size = 2M
|
||||
sort_buffer_size = 4M
|
||||
read_buffer_size = 2M
|
||||
read_rnd_buffer_size = 1M
|
||||
|
||||
# ------------------ Concurrency / Threads ------------------
|
||||
thread_handling = one-thread-per-connection
|
||||
thread_cache_size = 64
|
||||
max_connections = 300
|
||||
table_open_cache = 4000
|
||||
open_files_limit = 65535
|
||||
|
||||
# ------------------ Locking/Deadlocks ------------------
|
||||
innodb_lock_wait_timeout = 10
|
||||
innodb_deadlock_detect = ON
|
||||
|
||||
# ------------------ File & Table Management ------------------
|
||||
innodb_file_per_table = 1
|
||||
|
||||
# ------------------ Logging / Debug ------------------
|
||||
slow_query_log = 1
|
||||
slow_query_log_file = /var/log/mysql/mysql-slow.log
|
||||
long_query_time = 1
|
||||
log_queries_not_using_indexes = 1
|
||||
binlog_expire_logs_seconds = 604800 # 7 days
|
||||
```
|
||||
|
||||
## How to start
|
||||
### Step 1
|
||||
```bash
|
||||
sudo apt update -y && sudo apt upgrade -y && sudo apt install -y git net-tools nano
|
||||
|
||||
git clone https://github.com/hermensbas/azerothcore_installer.git
|
||||
cd azerothcore_installer.git
|
||||
chmod +x *.sh
|
||||
|
||||
ifconfig (in order to find your ip)
|
||||
nano settings.env (update ur settings)
|
||||
|
||||
./setup.sh
|
||||
source ~/.bashrc
|
||||
|
||||
update
|
||||
build
|
||||
compile
|
||||
```
|
||||
|
||||
### Step 2
|
||||
disable playerbots
|
||||
```bash
|
||||
nano config/modules/playerbots.config
|
||||
AiPlayerbot.Enabled = 0
|
||||
```
|
||||
|
||||
disable ahbot
|
||||
```bash
|
||||
nano config/modules/mod_ahbot.config
|
||||
#AuctionHouseBot.Account = 0
|
||||
AuctionHouseBot.GUID = 0
|
||||
AuctionHouseBot.EnableSeller = 0
|
||||
#AuctionHouseBot.EnableBuyer = 0
|
||||
```
|
||||
|
||||
### Step 3
|
||||
Start the server
|
||||
```bash
|
||||
config
|
||||
start
|
||||
```
|
||||
|
||||
Create accounts
|
||||
```bash
|
||||
> account create ahbot mypass
|
||||
> account create admin mypass
|
||||
> account set gmlevel admin 3 -1
|
||||
```
|
||||
|
||||
### Step 4
|
||||
Logon the server with 'ahbot' and create lvl 1 char and logoff again.
|
||||
|
||||
Find ah-bot character settings
|
||||
```bash
|
||||
./script/find-character.sh ahbot
|
||||
accountId characterName characterId
|
||||
1 Yappe 1
|
||||
Find character executed...
|
||||
```
|
||||
|
||||
Configure and enable ahbot
|
||||
```bash
|
||||
nano config/modules/mod_ahbot.config
|
||||
#AuctionHouseBot.Account = 1
|
||||
AuctionHouseBot.GUID = 1
|
||||
AuctionHouseBot.EnableSeller = 1
|
||||
#AuctionHouseBot.EnableBuyer = 1
|
||||
```
|
||||
|
||||
Enable playerbots
|
||||
```bash
|
||||
nano config/modules/playerbots.config
|
||||
AiPlayerbot.Enabled = 1
|
||||
```
|
||||
|
||||
### Step 5
|
||||
|
||||
Stop server, re-apply configuration, and start server
|
||||
```bash
|
||||
ctrl + z
|
||||
stop
|
||||
config
|
||||
start
|
||||
```
|
||||
|
||||
## Client
|
||||
- 3.3.5a (Chromiecraft.com)
|
||||
- Chromiecraft HD patch optional or huge patch 2024 [23GB graphic patch](https://github.com/Marotheit/A-Guide-to-Modernizing-the-WotLK-Client/)
|
||||
|
||||
Personally i prefere the chromiecraft HD patch without the T-patch, blizzlike :)
|
||||
|
||||
##### ip server config
|
||||
Configure your server IP in 'data/enUS/realmlist.wtf' files
|
||||
|
||||
##### Addons ([download](https://felbite.com/chromiecraft-addons)):
|
||||
- Allstats
|
||||
- Mapster (map fog disabled, we wanna explore instead seeing the whole map out of the box)
|
||||
- Grid
|
||||
- UnBot ([english version](https://github.com/noisiver/unbot-addon/tree/english))
|
||||
- [AI_VoiceOver](https://github.com/mrthinger/wow-voiceover/releases/download/v1.4.3/AI_VoiceOver-WoW_3.3.5-v1.4.3.zip)
|
||||
- [AI_VoiceOverData_Vanilla](https://github.com/mrthinger/wow-voiceover/releases/download/v1.3.1/AI_VoiceOverData_Vanilla-v1.0.0.zip)
|
||||
- https://gitlab.com/Tsoukie/compactraidframe-3.3.5
|
||||
- https://github.com/Macx-Lio/MultiBot (still under development)
|
||||
|
||||
## Router port-forward if public
|
||||
Use the above (ifconfig) IP for the following router poort-forwarding and/or firewall rules settings.
|
||||
````
|
||||
# 3724 TCP AUTH-SERVER
|
||||
# 8085 TCP WORLD-SERVER
|
||||
````
|
||||
|
||||
## useful AC GM commands
|
||||
[Wiki reference](https://www.azerothcore.org/wiki/gm-commands)
|
||||
```bash
|
||||
.server info (shows latency and amount of bots)
|
||||
.modify speed <default 1>
|
||||
.gm fly on | off
|
||||
.modify money
|
||||
.appear
|
||||
.server shutdown 5
|
||||
.maxskill
|
||||
.learn all my class
|
||||
.level <amount of levels to add>
|
||||
.character level <name> <level>
|
||||
.teleport orgrimmar or .tel orgrimmar)
|
||||
.leave (when you want the group to leave you alone!)
|
||||
.addItem itemName (or ctrl+click the item)
|
||||
.lookup item ThunderFury
|
||||
.lookup event moonfair
|
||||
.event start|stop id
|
||||
.distance (amount of yards between you and selected target)
|
||||
.gps
|
||||
.go xyz
|
||||
/whisper bot nc +debug
|
||||
```
|
||||
|
||||
## useful bot commands
|
||||
Code references
|
||||
- See [mod-playerbot/src/strategy/actions/ChatActionContext.h](https://github.com/hermensbas/mod-playerbots/blob/master/src/strategy/actions/ChatActionContext.h) | cpp
|
||||
- See [mod-playerbot/src/strategy/action/ActionContext.h](https://github.com/hermensbas/mod-playerbots/blob/master/src/strategy/actions/ActionContext.h) | cpp
|
||||
- See [mod-playerbot/src/ChatFilter.cp](https://github.com/hermensbas/mod-playerbots/blob/master/src/ChatFilter.cpp)
|
||||
- See [mod-playerbot/src/PlayerbotMgr.cpp](https://github.com/hermensbas/mod-playerbots/blob/master/src/PlayerbotMgr.cpp#L692)
|
||||
- See unbot add-on tooltips
|
||||
|
||||
```bash
|
||||
# Unbot has init=auto but that doesnt always work, esp when ur level 1 (for now) alternativy use
|
||||
# the following or when the bots are to strong you can lower the equipment.
|
||||
|
||||
.playerbot bot init=white | common | uncommon | rare | epic | legendary
|
||||
.playerbot bot init=MaxItemLevel
|
||||
.playerbot rndbot init (re-randomize all bots again)
|
||||
(rndbot stats/update/reset/init/refresh/add/remove)
|
||||
|
||||
autogear (whenever init is broken, max equipment levelItem configured in playerbot.conf)
|
||||
maintenance ( e.g. clears quest log, smart destroy items in inventory etc)
|
||||
|
||||
# let alt bots attack other bot on sight in pvp zone
|
||||
nc +pvp
|
||||
nc -pvp
|
||||
|
||||
# equip urself
|
||||
'.playerbot bot self', whisper yourself 'maintenance', whisper yourself 'autogear', whisper yourself 'nc +new rpg,+grind'
|
||||
|
||||
# After init or talents respec make sure you reset bot AI (see unbot).
|
||||
.playerbot bot add <name-of-character-on-account> (or account name instead of character name to add all characters on an account
|
||||
|
||||
# while in BG
|
||||
.playerbots debug bg showpath=all
|
||||
```
|
||||
|
||||
Tank attack @dps attack in 10 seconds
|
||||
```
|
||||
@tank attack
|
||||
/in 10 @dps attack
|
||||
|
||||
or use
|
||||
you could also use co +passive to get the dps to not attack until you use co -passive
|
||||
```
|
||||
@@ -1,9 +1,11 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
source ${ROOT_DIR}/variables.sh
|
||||
|
||||
##########################################################################################
|
||||
# USER CONFIG
|
||||
##########################################################################################
|
||||
set -a; source settings.env; set +a
|
||||
|
||||
read -p "This will DOWNLOAD and overwrite the current downloaded source code, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
read -p "This will install the source code. Are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
echo " ";
|
||||
if [[ $REPLY =~ ^[Yy]$ ]];
|
||||
then
|
||||
@@ -11,7 +13,45 @@ then
|
||||
##########################################################################################
|
||||
# General dependencies
|
||||
##########################################################################################
|
||||
sudo apt update && sudo apt install -y unzip git sudo git
|
||||
sudo apt update && \
|
||||
sudo apt full-upgrade -y && \
|
||||
sudo apt-get install -y \
|
||||
unzip \
|
||||
git \
|
||||
sudo \
|
||||
git \
|
||||
btop \
|
||||
ncdu \
|
||||
unzip \
|
||||
git \
|
||||
sudo \
|
||||
git \
|
||||
tmux \
|
||||
sudo \
|
||||
curl \
|
||||
net-tools \
|
||||
locate \
|
||||
nano \
|
||||
software-properties-common
|
||||
|
||||
##########################################################################################
|
||||
# Install core dependencies (https://www.azerothcore.org/wiki/linux-requirements)
|
||||
##########################################################################################
|
||||
sudo apt-get update -y && \
|
||||
sudo apt-get install -y \
|
||||
git \
|
||||
cmake \
|
||||
make \
|
||||
gcc \
|
||||
g++ \
|
||||
clang \
|
||||
libmysqlclient-dev \
|
||||
libssl-dev \
|
||||
libbz2-dev \
|
||||
libreadline-dev \
|
||||
libncurses-dev \
|
||||
mysql-server \
|
||||
libboost-all-dev
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -19,7 +59,9 @@ then
|
||||
##########################################################################################
|
||||
if [ ! -d "${ROOT_DIR}/_download" ];
|
||||
then
|
||||
mkdir ${ROOT_DIR}/_download
|
||||
mkdir ${ROOT_DIR}/_download
|
||||
else
|
||||
rm -rf ${ROOT_DIR}/_download
|
||||
fi
|
||||
|
||||
|
||||
@@ -28,7 +70,7 @@ then
|
||||
##########################################################################################
|
||||
sudo rm -rf ${ROOT_DIR}/_download/azerothcore > /dev/null 2>&1
|
||||
git config --global --add safe.directory "${ROOT_DIR}/_download/azerothcore"
|
||||
git clone https://github.com/liyunfan1223/azerothcore-wotlk.git --branch=Playerbot ${ROOT_DIR}/_download/azerothcore
|
||||
git clone ${AC_WOTLK_REPO} --branch=${AC_WOTLK_REPO_BRANCH} ${ROOT_DIR}/_download/azerothcore
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -36,7 +78,7 @@ then
|
||||
##########################################################################################
|
||||
sudo rm -rf ${ROOT_DIR}/_download/modules/mod-playerbots > /dev/null 2>&1
|
||||
git config --global --add safe.directory "${ROOT_DIR}/_download/modules/mod-playerbots"
|
||||
git clone https://github.com/liyunfan1223/mod-playerbots.git ${ROOT_DIR}/_download/modules/mod-playerbots
|
||||
git clone ${AC_MODE_PLAYER_BOTS_REPO} --branch=${AC_MODE_PLAYER_BOTS_REPO_BRANCH} ${ROOT_DIR}/_download/modules/mod-playerbots
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -44,15 +86,15 @@ then
|
||||
##########################################################################################
|
||||
sudo rm -rf ${ROOT_DIR}/_download/modules/mod-ah-bot > /dev/null 2>&1
|
||||
git config --global --add safe.directory "${ROOT_DIR}/_download/modules/mod-ah-bot"
|
||||
git clone https://github.com/azerothcore/mod-ah-bot.git ${ROOT_DIR}/_download/modules/mod-ah-bot
|
||||
|
||||
git clone ${AC_MODE_AHBOT_REPO} --branch=${AC_MODE_AHBOT_REPO_BRANCH} ${ROOT_DIR}/_download/modules/mod-ah-bot
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Clone module mod-progression-system
|
||||
# Clone module /mod-player-bot-level-brackets
|
||||
##########################################################################################
|
||||
sudo rm -rf ${ROOT_DIR}/_download/modules/mod-progression-system > /dev/null 2>&1
|
||||
git config --global --add safe.directory "${ROOT_DIR}/_download/modules/mod-progression-system"
|
||||
git clone https://github.com/azerothcore/mod-progression-system.git ${ROOT_DIR}/_download/modules/mod-progression-system
|
||||
sudo rm -rf ${ROOT_DIR}/_download/modules/mod-player-bot-level-brackets > /dev/null 2>&1
|
||||
git config --global --add safe.directory "${ROOT_DIR}/_download/modules/mod-player-bot-level-brackets"
|
||||
git clone ${AC_MODE_BRACKETS_REPO} --branch=${AC_MODE_BRACKETS_REPO_BRANCH} ${ROOT_DIR}/_download/modules/mod-player-bot-level-brackets
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -61,10 +103,9 @@ then
|
||||
if ! [ -f ${ROOT_DIR}/_data/data.zip ];
|
||||
then
|
||||
mkdir -p ${ROOT_DIR}/_data > /dev/null 2>&1
|
||||
sudo curl -L https://github.com/wowgaming/client-data/releases/download/v16/data.zip --output ${ROOT_DIR}/_data/data.zip
|
||||
sudo curl -L ${AC_CLIENT_DATA} --output ${ROOT_DIR}/_data/data.zip
|
||||
fi
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# set azerothcore playerbot fork upstream with original azerothcore
|
||||
##########################################################################################
|
||||
@@ -1,25 +1,16 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
source ${ROOT_DIR}/variables.sh
|
||||
|
||||
|
||||
read -p "This will UPDATE the current downloaded source code, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
read -p "This will update the source code. Are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
echo " ";
|
||||
if [[ $REPLY =~ ^[Yy]$ ]];
|
||||
then
|
||||
|
||||
##########################################################################################
|
||||
# General dependencies
|
||||
##########################################################################################
|
||||
sudo apt update && sudo apt install -y git
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# reset azerothcore to latest branch
|
||||
##########################################################################################
|
||||
git -C ${ROOT_DIR}/_download/azerothcore fetch origin
|
||||
git -C ${ROOT_DIR}/_download/azerothcore clean -fd
|
||||
git -C ${ROOT_DIR}/_download/azerothcore reset --hard origin/Playerbot
|
||||
git -C ${ROOT_DIR}/_download/azerothcore reset --hard origin/${AC_WOTLK_REPO_BRANCH}
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -27,7 +18,7 @@ then
|
||||
##########################################################################################
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-playerbots fetch origin
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-playerbots clean -fd
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-playerbots reset --hard origin/master
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-playerbots reset --hard origin/${AC_MODE_PLAYER_BOTS_REPO_BRANCH}
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -35,16 +26,14 @@ then
|
||||
##########################################################################################
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-ah-bot fetch origin
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-ah-bot clean -fd
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-ah-bot reset --hard origin/master
|
||||
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-ah-bot reset --hard origin/${AC_MODE_AHBOT_REPO_BRANCH}
|
||||
|
||||
##########################################################################################
|
||||
# reset mod-progression-system to latest branch
|
||||
# resetmod-player-bot-level-brackets to latest branch
|
||||
##########################################################################################
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-progression-system fetch origin
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-progression-system clean -fd
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-progression-system reset --hard origin/main
|
||||
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-player-bot-level-brackets fetch origin
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-player-bot-level-brackets clean -fd
|
||||
git -C ${ROOT_DIR}/_download/modules/mod-player-bot-level-brackets reset --hard origin/${AC_MODE_BRACKETS_REPO_BRANCH}
|
||||
|
||||
echo "Executed..."
|
||||
|
||||
@@ -1,19 +1,10 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
source ${ROOT_DIR}/variables.sh
|
||||
|
||||
|
||||
read -p "This will (re)build the server with the downloaded resources, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
read -p "This will build server. Are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
echo " ";
|
||||
if [[ $REPLY =~ ^[Yy]$ ]];
|
||||
then
|
||||
|
||||
##########################################################################################
|
||||
# General dependencies
|
||||
##########################################################################################
|
||||
sudo apt update && sudo apt install -y unzip
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Rebuild server folder based on downloaded source codes
|
||||
##########################################################################################
|
||||
@@ -29,6 +20,19 @@ then
|
||||
unzip ${ROOT_DIR}/_data/data.zip -d ${DATAPATH} || exit 1
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Copy certain mod sql scripts into server custom folders (only if required)
|
||||
##########################################################################################
|
||||
#mkdir -p ${ROOT_DIR}/_server/azerothcore/data/sql/custom/db_world && \
|
||||
# cp -r ${ROOT_DIR}/_download/modules/mod-ah-bot/data/sql/db-world/mod_auctionhousebot.sql \
|
||||
# ${ROOT_DIR}/_server/azerothcore/data/sql/custom/db_world/
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# set folder rights to current user
|
||||
##########################################################################################
|
||||
sudo chown -R $USER ${ROOT_DIR}
|
||||
|
||||
|
||||
echo "Executed..."
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
source ${ROOT_DIR}/variables.sh
|
||||
|
||||
|
||||
read -p "This will (re)compile server, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
read -p "This will compile server. Are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
echo " ";
|
||||
if [[ $REPLY =~ ^[Yy]$ ]];
|
||||
then
|
||||
@@ -11,41 +8,25 @@ then
|
||||
##########################################################################################
|
||||
# General dependencies
|
||||
##########################################################################################
|
||||
sudo apt update && \
|
||||
sudo apt full-upgrade -y && \
|
||||
sudo apt-get install -y \
|
||||
btop \
|
||||
tmux \
|
||||
sudo \
|
||||
curl \
|
||||
net-tools \
|
||||
locate \
|
||||
nano \
|
||||
software-properties-common
|
||||
#sudo apt update && \
|
||||
# sudo apt full-upgrade -y && \
|
||||
# sudo apt-get install -y btop ncdu tmux sudo curl net-tools locate nano software-properties-common
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Install core dependencies (https://www.azerothcore.org/wiki/linux-requirements)
|
||||
##########################################################################################
|
||||
sudo ${ROOT_DIR}/_server/azerothcore/acore.sh install-deps && \
|
||||
sudo apt-get update && \
|
||||
sudo apt-get install \
|
||||
git \
|
||||
cmake \
|
||||
make \
|
||||
gcc \
|
||||
g++ \
|
||||
clang \
|
||||
libmysqlclient-dev \
|
||||
libssl-dev \
|
||||
libbz2-dev libreadline-dev \
|
||||
libncurses-dev mysql-server \
|
||||
libboost-all-dev
|
||||
#sudo ${ROOT_DIR}/_server/azerothcore/acore.sh install-deps && \
|
||||
# sudo apt-get update -y && \
|
||||
# sudo apt-get install -y git cmake make gcc g++ clang libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev mysql-server libboost-all-dev
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Compile the code
|
||||
# https://github.com/azerothcore/azerothcore-wotlk/blob/master/apps/compiler/compiler.sh
|
||||
# when module code changed there is no need for a full compile like below 'compile all'
|
||||
# in that case 'compile build' is enough and much much faster
|
||||
# https://www.azerothcore.org/wiki/linux-core-installation
|
||||
##########################################################################################
|
||||
sudo ${ROOT_DIR}/_server/azerothcore/acore.sh compiler clean
|
||||
sudo ${ROOT_DIR}/_server/azerothcore/acore.sh compiler configure
|
||||
@@ -53,9 +34,10 @@ then
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Ensure all folder and files are accesible for the current user
|
||||
# set folder rights to current user
|
||||
##########################################################################################
|
||||
sudo find ${ROOT_DIR}/_server/ -user root -exec sudo chown $USER: {} +
|
||||
sudo chown -R $USER ${ROOT_DIR}
|
||||
|
||||
|
||||
echo "Executed..."
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
source ${ROOT_DIR}/variables.sh
|
||||
|
||||
|
||||
read -p "This will initialize and apply the config, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
read -p "This will configur the server, are you sure? (Y)es/(N)o: " -n 1 -r
|
||||
echo " ";
|
||||
if [[ $REPLY =~ ^[Yy]$ ]];
|
||||
then
|
||||
@@ -14,6 +11,12 @@ then
|
||||
sudo service mysql start
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# USER CONFIG
|
||||
##########################################################################################
|
||||
set -a; source ${ROOT_DIR}/settings.env; set +a
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Create acore account
|
||||
##########################################################################################
|
||||
@@ -27,6 +30,7 @@ then
|
||||
# Recompile default conf files
|
||||
##########################################################################################
|
||||
sudo ${ROOT_DIR}/_server/azerothcore/acore.sh compiler configure
|
||||
mkdir -p /tmp/ac/logs
|
||||
|
||||
|
||||
##########################################################################################
|
||||
@@ -58,36 +62,29 @@ then
|
||||
${ROOT_DIR}/_server/azerothcore/env/dist/etc/modules/mod_ahbot.conf.dist > \
|
||||
${ROOT_DIR}/_server/azerothcore/env/dist/etc/modules/mod_ahbot.conf | exit 1
|
||||
|
||||
sudo cat ${ROOT_DIR}/config/modules/progression_system.conf \
|
||||
${ROOT_DIR}/_server/azerothcore/env/dist/etc/modules/progression_system.conf.dist > \
|
||||
${ROOT_DIR}/_server/azerothcore/env/dist/etc/modules/progression_system.conf | exit 1
|
||||
|
||||
sudo cat ${ROOT_DIR}/config/modules/mod_player_bot_level_brackets.conf \
|
||||
${ROOT_DIR}/_server/azerothcore/env/dist/etc/modules/mod_player_bot_level_brackets.conf.dist > \
|
||||
${ROOT_DIR}/_server/azerothcore/env/dist/etc/modules/mod_player_bot_level_brackets.conf | exit 1
|
||||
|
||||
##########################################################################################
|
||||
# Set alias to start, stop and open wow or auth tmux sessions
|
||||
# Apply server realm configuration
|
||||
##########################################################################################
|
||||
echo "ROOT_DIR=${ROOT_DIR}" > ~/.bash_aliases
|
||||
echo "DATAPATH=${DATAPATH}" >> ~/.bash_aliases
|
||||
echo "alias update='${ROOT_DIR}/2_update.sh'" >> ~/.bash_aliases
|
||||
echo "alias build='${ROOT_DIR}/3_build.sh'" >> ~/.bash_aliases
|
||||
echo "alias compile='${ROOT_DIR}/4_compile.sh'" >> ~/.bash_aliases
|
||||
echo "alias config='${ROOT_DIR}/5_config.sh'" >> ~/.bash_aliases
|
||||
echo "alias start='${ROOT_DIR}/6_start.sh'" >> ~/.bash_aliases
|
||||
echo "alias stop='tmux kill-server'" >> ~/.bash_aliases
|
||||
echo "alias wow='cd ${ROOT_DIR}/_server/azerothcore;tmux attach -t ${WORLDSERVER_SESSION}'" >> ~/.bash_aliases
|
||||
echo "alias auth='cd ${ROOT_DIR}/_server/azerothcore;tmux attach -t ${AUTHSERVER_SESSION}'" >> ~/.bash_aliases
|
||||
source ${ROOT_DIR}/script/update_realm_ip.sh ${REALM_IP}
|
||||
source ${ROOT_DIR}/script/update_realm_name.sh ${REALM_NAME}
|
||||
echo " "
|
||||
echo "###########################################################################################"
|
||||
echo "## After the first install or changes either reboot or TYPE! 'source ~/.bashrc'"
|
||||
echo "###########################################################################################"
|
||||
echo "## After the above you can use the following commands:"
|
||||
echo "### start - starts auth and world in tmux sessions server"
|
||||
echo "### stop - starts all servers"
|
||||
echo "### wow - logon world-server tmux session"
|
||||
echo "### auth - logon auth-server tmux session"
|
||||
echo "### update - updates the current downloaded source-code, after rerun: build, compile and config."
|
||||
echo "### build - (re)builds the server based on the downloaded/updated source-codes"
|
||||
echo "### compile - (re)compiles the server based on the build server"
|
||||
echo "### config - applies configuration settings defined in the 'config' folder"
|
||||
echo "###########################################################################################"
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Apply ah-bot custom configuration
|
||||
##########################################################################################
|
||||
#source ${ROOT_DIR}/script/update_ahbot_config.sh ${AH_BOT_MIN_ITEMS} ${AH_BOT_MAX_ITEMS}
|
||||
#echo " "
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Clear playerbots account and characters (enforces performance and bot levels balance)
|
||||
##########################################################################################
|
||||
source ${ROOT_DIR}/script/clear_playerbots.sh
|
||||
echo " "
|
||||
|
||||
fi
|
||||
34
script/6_server-start.sh
Executable file
34
script/6_server-start.sh
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
##########################################################################################
|
||||
# handle the tmux sessions
|
||||
##########################################################################################
|
||||
if tmux new-session -d -s $AUTHSERVER_SESSION; then
|
||||
echo "Created authserver session: $AUTHSERVER_SESSION"
|
||||
else
|
||||
echo "Error when trying to create authserver session: $AUTHSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
if tmux new-session -d -s $WORLDSERVER_SESSION; then
|
||||
echo "Created worldserver session: $WORLDSERVER_SESSION"
|
||||
else
|
||||
echo "Error when trying to create worldserver session: $WORLDSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
if tmux send-keys -t $AUTHSERVER_SESSION "${SERVER_ROOT}/acore.sh run-authserver" C-m; then
|
||||
echo "Executed \"${SERVER_ROOT}/acore.sh run-authserver \" inside $AUTHSERVER_SESSION"
|
||||
else
|
||||
echo "Error when executing \"${SERVER_ROOT}/acore.sh run-authserver\" inside $AUTHSERVER_SESSION"
|
||||
fi
|
||||
echo " "
|
||||
|
||||
if tmux send-keys -t $WORLDSERVER_SESSION "${SERVER_ROOT}/acore.sh run-worldserver" C-m; then
|
||||
echo "Executed \"${SERVER_ROOT}/acore.sh run-worldserver\" inside $WORLDSERVER_SESSION"
|
||||
else
|
||||
echo "Error when executing \"${SERVER_ROOT}/acore.sh run-worldserver\" inside $WORLDSERVER_SESSION"
|
||||
fi
|
||||
|
||||
echo " "
|
||||
source ${ROOT_DIR}/script/menu.sh
|
||||
5
script/clear_auctionhouse.sh
Executable file
5
script/clear_auctionhouse.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo mysql -u root --database="acore_characters" < ${ROOT_DIR}/sql/clear_auctionhouse.sql
|
||||
|
||||
echo "Auction house items deleted..."
|
||||
5
script/clear_playerbots.sh
Executable file
5
script/clear_playerbots.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo mysql -u root --database="acore_characters" < ${ROOT_DIR}/sql/clear_playerbots.sql
|
||||
|
||||
echo "Playerbots accounts and characters deleted..."
|
||||
15
script/find_characters.sh
Executable file
15
script/find_characters.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# param 1
|
||||
ACCOUNT_NAME=$1;
|
||||
if [ -z "$ACCOUNT_NAME" ]
|
||||
then
|
||||
echo "First parameter 'ACCOUNT_NAME' is required";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
sed -e "s/{{ACCOUNT_NAME}}/$ACCOUNT_NAME/g" \
|
||||
"${ROOT_DIR}/sql/find_character.sql" > "/tmp/find_character.sql"
|
||||
sudo mysql -u root --database="acore_characters" < /tmp/find_character.sql
|
||||
|
||||
echo "Find character executed..."
|
||||
5
script/git-alias.sh
Executable file
5
script/git-alias.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Alias GIT (git lg for git commits, git ls for commits with changed files)
|
||||
git config --global alias.lg 'log --graph --abbrev-commit --decorate --date=relative --all'
|
||||
git config --global alias.ls 'log --stat --pretty=short --graph'
|
||||
14
script/menu.sh
Executable file
14
script/menu.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "###########################################################################################"
|
||||
echo "### menu - Shows menu"
|
||||
echo "### install - Download the source source-code"
|
||||
echo "### update - Updates source-code to latest version"
|
||||
echo "### build - Builds the server based on source-code"
|
||||
echo "### compile - Compiles the code based on the build server"
|
||||
echo "### config - Applies the server configration"
|
||||
echo "### start - starts auth and world in tmux sessions server"
|
||||
echo "### stop - stops all sessions"
|
||||
echo "### wow - logon world-server (tmux) session"
|
||||
echo "### auth - logon auth-server (tmux) session"
|
||||
echo "###########################################################################################"
|
||||
@@ -1,6 +1,4 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# General dependencies
|
||||
@@ -14,7 +12,7 @@ then
|
||||
##########################################################################################
|
||||
# Try to merge from the orginal azerothcore into the playerbot azerothcore fork branch
|
||||
##########################################################################################
|
||||
cd ${ROOT_DIR}/../_download/azerothcore
|
||||
cd ${ROOT_DIR}/_download/azerothcore
|
||||
git reset --hard origin/Playerbot
|
||||
git fetch upstream
|
||||
git merge upstream/master
|
||||
28
script/update_ahbot_config.sh
Executable file
28
script/update_ahbot_config.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
# param 1
|
||||
AH_BOT_MIN_ITEMS=$1;
|
||||
if [ -z "$AH_BOT_MIN_ITEMS" ]
|
||||
then
|
||||
echo "First parameter 'AH_BOT_MIN_ITEMS' is required";
|
||||
echo "Second parameter 'AH_BOT_MAX_ITEMS' is required";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# param 2
|
||||
AH_BOT_MAX_ITEMS=$2;
|
||||
if [ -z "$AH_BOT_MAX_ITEMS" ]
|
||||
then
|
||||
echo "Second parameter 'AH_BOT_MAX_ITEMS' is required";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
sed -e "s/{{AH_BOT_MIN_ITEMS}}/$AH_BOT_MIN_ITEMS/g" \
|
||||
-e "s/{{AH_BOT_MAX_ITEMS}}/$AH_BOT_MAX_ITEMS/g" \
|
||||
"${ROOT_DIR}/sql/update_ahbot_config.sql" > "/tmp/update_ahbot_config.sql"
|
||||
sudo mysql -u root --database="acore_characters" < /tmp/update_ahbot_config.sql
|
||||
|
||||
echo " "
|
||||
echo "###########################################################################################"
|
||||
echo "Mod-ahbot config updated with AH_MIN_ITEMS: ${AH_BOT_MIN_ITEMS}, AH_MAX_ITEMS: ${AH_BOT_MAX_ITEMS}"
|
||||
echo "###########################################################################################"
|
||||
18
script/update_realm_ip.sh
Executable file
18
script/update_realm_ip.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# param 1
|
||||
REALM_IP=$1;
|
||||
if [ -z "$REALM_IP" ]
|
||||
then
|
||||
echo "First parameter 'REALM_IP' is required";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
sed -e "s/{{REALM_IP}}/$REALM_IP/g" \
|
||||
"${ROOT_DIR}/sql/update_realm_ip.sql" > "/tmp/update_realm_ip.sql"
|
||||
sudo mysql -u root --database="acore_characters" < /tmp/update_realm_ip.sql
|
||||
|
||||
echo " "
|
||||
echo "###########################################################################################"
|
||||
echo "Server realm IP updated: ${REALM_IP}"
|
||||
echo "###########################################################################################"
|
||||
18
script/update_realm_name.sh
Executable file
18
script/update_realm_name.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
#param 1
|
||||
REALM_NAME=$1;
|
||||
if [ -z "$REALM_NAME" ]
|
||||
then
|
||||
echo "First parameter 'REALM_NAME' is required";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
sed -e "s/{{REALM_NAME}}/$REALM_NAME/g" \
|
||||
"${ROOT_DIR}/sql/update_realm_name.sql" > "/tmp/update_realm_name.sql"
|
||||
sudo mysql -u root --database="acore_characters" < /tmp/update_realm_name.sql
|
||||
|
||||
echo " "
|
||||
echo "###########################################################################################"
|
||||
echo "Server realm NAME updated: ${REALM_NAME}"
|
||||
echo "###########################################################################################"
|
||||
29
settings.env
Normal file
29
settings.env
Normal file
@@ -0,0 +1,29 @@
|
||||
REALM_IP="192.168.197.128"
|
||||
REALM_NAME="azerothcore.org"
|
||||
|
||||
AC_CLIENT_DATA="https://github.com/wowgaming/client-data/releases/download/v19/Data.zip"
|
||||
#AC_CLIENT_DATA="https://github.com/wowgaming/client-data/releases/download/v18.0/Data.zip"
|
||||
#AC_CLIENT_DATA="https://github.com/wowgaming/client-data/releases/download/v16/Data.zip"
|
||||
|
||||
AC_WOTLK_REPO="https://github.com/hermensbas/azerothcore-wotlk.git"
|
||||
#AC_WOTLK_REPO_BRANCH="Playerbot_v16"
|
||||
AC_WOTLK_REPO_BRANCH="Playerbot"
|
||||
|
||||
AC_MODE_PLAYER_BOTS_REPO="https://github.com/hermensbas/mod-playerbots.git"
|
||||
#AC_MODE_PLAYER_BOTS_REPO_BRANCH="master_v16"
|
||||
AC_MODE_PLAYER_BOTS_REPO_BRANCH="master"
|
||||
|
||||
# mod-player-bot-level-brackets
|
||||
AC_MODE_BRACKETS_REPO="https://github.com/hermensbas/mod-player-bot-level-brackets.git"
|
||||
AC_MODE_BRACKETS_REPO_BRANCH="main"
|
||||
|
||||
# mod-ah-bot (new version)
|
||||
AC_MODE_AHBOT_REPO="https://github.com/hermensbas/mod-ah-bot.git"
|
||||
AC_MODE_AHBOT_REPO_BRANCH="master"
|
||||
|
||||
|
||||
# old version of mod-ah-bot, not sure its needed for new version havent tested yet.
|
||||
#AH_BOT_MIN_ITEMS="25000"
|
||||
#AH_BOT_MAX_ITEMS="30000"
|
||||
#AC_MODE_AHBOT_REPO="https://github.com/azerothcore/mod-ah-bot.git"
|
||||
#AC_MODE_AHBOT_REPO_BRANCH="master"
|
||||
104
setup.sh
Executable file
104
setup.sh
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
|
||||
export ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
|
||||
##########################################################################################
|
||||
# USER CONFIG
|
||||
##########################################################################################
|
||||
set -a; source settings.env; set +a
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# INTERNAL CONFIG
|
||||
##########################################################################################
|
||||
SERVER_ROOT="${ROOT_DIR}/_server/azerothcore"
|
||||
DATAPATH="${SERVER_ROOT}/env/dist/bin"
|
||||
|
||||
AUTHSERVER_SESSION="auth-session"
|
||||
WORLDSERVER_SESSION="world-session"
|
||||
|
||||
MYSQL_ROOT_PASSWORD="rootpassword"
|
||||
MYSQL_USER="acore"
|
||||
MYSQL_PASSWORD="acore"
|
||||
MYSQL_DATABASE="acore_auth"
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# add chmod rights
|
||||
##########################################################################################
|
||||
sudo chmod +x ${ROOT_DIR}/script/*.sh
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# add ~/.bash_wow to ~/.bashrc if not exist
|
||||
##########################################################################################
|
||||
if grep -R "bash_wow" ~/.bashrc
|
||||
then
|
||||
echo "bash_wow exists";
|
||||
else
|
||||
echo " " >> ~/.bashrc
|
||||
echo "if [ -f ~/.bash_wow ]; then" >> ~/.bashrc
|
||||
echo " . ~/.bash_wow" >> ~/.bashrc
|
||||
echo "fi" >> ~/.bashrc
|
||||
fi
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# add variables to ~/.bash_wow
|
||||
##########################################################################################
|
||||
echo "export ROOT_DIR=${ROOT_DIR}" > ~/.bash_wow
|
||||
echo "export SERVER_ROOT=${SERVER_ROOT}" >> ~/.bash_wow
|
||||
|
||||
echo "export AC_WOTLK_REPO=${AC_WOTLK_REPO}" >> ~/.bash_wow
|
||||
echo "export AC_WOTLK_REPO_BRANCH=${AC_WOTLK_REPO_BRANCH}" >> ~/.bash_wow
|
||||
|
||||
echo "export AC_MODE_PLAYER_BOTS_REPO=${AC_MODE_PLAYER_BOTS_REPO}" >> ~/.bash_wow
|
||||
echo "export AC_MODE_PLAYER_BOTS_REPO_BRANCH=${AC_MODE_PLAYER_BOTS_REPO_BRANCH}" >> ~/.bash_wow
|
||||
|
||||
echo "export AC_MODE_AHBOT_REPO=${AC_MODE_AHBOT_REPO}" >> ~/.bash_wow
|
||||
echo "export AC_MODE_AHBOT_REPO_BRANCH=${AC_MODE_AHBOT_REPO_BRANCH}" >> ~/.bash_wow
|
||||
|
||||
echo "export AC_MODE_BRACKETS_REPO=${AC_MODE_BRACKETS_REPO}" >> ~/.bash_wow
|
||||
echo "export AC_MODE_BRACKETS_REPO_BRANCH=${AC_MODE_BRACKETS_REPO_BRANCH}" >> ~/.bash_wow
|
||||
|
||||
echo "export DATAPATH=${DATAPATH}" >> ~/.bash_wow
|
||||
|
||||
echo "export AUTHSERVER_SESSION=${AUTHSERVER_SESSION}" >> ~/.bash_wow
|
||||
echo "export WORLDSERVER_SESSION=${WORLDSERVER_SESSION}" >> ~/.bash_wow
|
||||
|
||||
echo "export MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" >> ~/.bash_wow
|
||||
echo "export MYSQL_USER=${MYSQL_USER}" >> ~/.bash_wow
|
||||
echo "export MYSQL_PASSWORD=${MYSQL_PASSWORD}" >> ~/.bash_wow
|
||||
echo "export MYSQL_DATABASE=${MYSQL_DATABASE}" >> ~/.bash_wow
|
||||
|
||||
echo "export REALM_IP=${REALM_IP}" >> ~/.bash_wow
|
||||
echo "export REALM_NAME=${REALM_NAME}" >> ~/.bash_wow
|
||||
|
||||
echo "export AH_BOT_MIN_ITEMS=${AH_BOT_MIN_ITEMS}" >> ~/.bash_wow
|
||||
echo "export AH_BOT_MAX_ITEMS=${AH_BOT_MAX_ITEMS}" >> ~/.bash_wow
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# add alias to ~/.bash_wow
|
||||
##########################################################################################
|
||||
echo "alias menu='${ROOT_DIR}/script/menu.sh'" >> ~/.bash_wow
|
||||
echo "alias install='${ROOT_DIR}/script/1_source-install.sh'" >> ~/.bash_wow
|
||||
echo "alias update='${ROOT_DIR}/script/2_source-update.sh'" >> ~/.bash_wow
|
||||
echo "alias build='${ROOT_DIR}/script/3_server-build.sh'" >> ~/.bash_wow
|
||||
echo "alias compile='${ROOT_DIR}/script/4_server-compile.sh'" >> ~/.bash_wow
|
||||
echo "alias config='${ROOT_DIR}/script/5_server-configure.sh'" >> ~/.bash_wow
|
||||
echo "alias start='${ROOT_DIR}/script/6_server-start.sh'" >> ~/.bash_wow
|
||||
echo "alias stop='tmux kill-server'" >> ~/.bash_wow
|
||||
echo "alias wow='cd ${SERVER_ROOT};tmux attach -t ${WORLDSERVER_SESSION}'" >> ~/.bash_wow
|
||||
echo "alias auth='cd ${SERVER_ROOT};tmux attach -t ${AUTHSERVER_SESSION}'" >> ~/.bash_wow
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Print menu
|
||||
##########################################################################################
|
||||
echo " "
|
||||
echo "###########################################################################################"
|
||||
echo "## After first run TYPE 'source ~/.bashrc' !!!!!!!!"
|
||||
source ${ROOT_DIR}/script/menu.sh
|
||||
echo "## After first run TYPE 'source ~/.bashrc' !!!!!!!!"
|
||||
echo "###########################################################################################"
|
||||
2
sql/clear_auctionhouse.sql
Executable file
2
sql/clear_auctionhouse.sql
Executable file
@@ -0,0 +1,2 @@
|
||||
USE acore_characters;
|
||||
DELETE FROM auctionhouse;
|
||||
2
sql/clear_mysql_binlogs.sql
Normal file
2
sql/clear_mysql_binlogs.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
use mysql
|
||||
PURGE BINARY LOGS BEFORE now();
|
||||
46
sql/clear_playerbots.sql
Executable file
46
sql/clear_playerbots.sql
Executable file
@@ -0,0 +1,46 @@
|
||||
USE `acore_playerbots`;
|
||||
DELETE FROM `playerbots_random_bots`;
|
||||
DELETE FROM `playerbots_account_type`;
|
||||
|
||||
USE `acore_characters`;
|
||||
DELETE FROM `characters` WHERE `account` IN (SELECT `id` FROM `acore_auth`.`account` WHERE `username` LIKE 'RNDBOT%') OR `account` NOT IN (SELECT `id` FROM `acore_auth`.`account`);
|
||||
DELETE FROM `arena_team_member` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `arena_team` WHERE `arenaTeamId` NOT IN (SELECT `arenaTeamId` FROM `arena_team_member`);
|
||||
DELETE FROM `character_account_data` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_achievement` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_achievement_progress` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_action` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_aura` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_glyphs` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_homebind` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `item_instance` WHERE `owner_guid` NOT IN (SELECT `guid` FROM `characters`) AND `owner_guid` > 0;
|
||||
DELETE FROM `character_inventory` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_pet` WHERE `owner` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `pet_aura` WHERE `guid` NOT IN (SELECT `id` FROM `character_pet`);
|
||||
DELETE FROM `pet_spell` WHERE `guid` NOT IN (SELECT `id` FROM `character_pet`);
|
||||
DELETE FROM `pet_spell_cooldown` WHERE `guid` NOT IN (SELECT `id` FROM `character_pet`);
|
||||
DELETE FROM `character_queststatus` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_queststatus_rewarded` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_reputation` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_skills` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_social` WHERE `friend` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_spell` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_spell_cooldown` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_talent` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `corpse` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `groups` WHERE `leaderGuid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `group_member` WHERE `memberGuid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `mail` WHERE `receiver` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `mail_items` WHERE `receiver` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `guild` WHERE `leaderguid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `guild_bank_eventlog` WHERE `guildid` NOT IN (SELECT `guildid` FROM `guild`);
|
||||
DELETE FROM `guild_member` WHERE `guildid` NOT IN (SELECT `guildid` FROM `guild`) OR `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `guild_rank` WHERE `guildid` NOT IN (SELECT `guildid` FROM `guild`);
|
||||
DELETE FROM `petition` WHERE `ownerguid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `petition_sign` WHERE `ownerguid` NOT IN (SELECT `guid` FROM `characters`) OR `playerguid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_arena_stats` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_entry_point` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
|
||||
USE `acore_auth`;
|
||||
DELETE FROM `account` WHERE `username` LIKE 'RNDBOT%';
|
||||
DELETE FROM `realmcharacters` WHERE `acctid` NOT IN (SELECT `id` FROM `account`);
|
||||
5
sql/find_character.sql
Executable file
5
sql/find_character.sql
Executable file
@@ -0,0 +1,5 @@
|
||||
USE acore_auth;
|
||||
SELECT acc.id AS accountId, ch.name as characterName, ch.guid AS characterId
|
||||
FROM acore_auth.account AS acc
|
||||
INNER JOIN acore_characters.characters AS ch
|
||||
WHERE acc.id = ch.account and acc.username = '{{ACCOUNT_NAME}}';
|
||||
3
sql/update_ahbot_config.sql
Executable file
3
sql/update_ahbot_config.sql
Executable file
@@ -0,0 +1,3 @@
|
||||
USE acore_world;
|
||||
UPDATE mod_auctionhousebot
|
||||
SET minitems = '{{AH_BOT_MIN_ITEMS}}', maxitems = '{{AH_BOT_MAX_ITEMS}}';
|
||||
3
sql/update_realm_ip.sql
Executable file
3
sql/update_realm_ip.sql
Executable file
@@ -0,0 +1,3 @@
|
||||
USE acore_auth;
|
||||
UPDATE realmlist
|
||||
SET address='{{REALM_IP}}';
|
||||
3
sql/update_realm_name.sql
Executable file
3
sql/update_realm_name.sql
Executable file
@@ -0,0 +1,3 @@
|
||||
USE acore_auth;
|
||||
UPDATE realmlist
|
||||
SET name='{{REALM_NAME}}';
|
||||
42
variables.sh
42
variables.sh
@@ -1,42 +0,0 @@
|
||||
#!/bin/bash
|
||||
ROOT_DIR="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# If you want remote players to connect use the following info e.g.
|
||||
# router DMZ or poort-forwarding and possibly firewall settings.
|
||||
##########################################################################################
|
||||
# 3724 TCP AUTH-SERVER
|
||||
# 8085 TCP WORLD-SERVER
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# Variables # https://github.com/azerothcore/azerothcore-wotlk/blob/master/conf/dist/env.ac
|
||||
##########################################################################################
|
||||
AUTHSERVER="${ROOT_DIR}/_server/azerothcore/acore.sh run-authserver"
|
||||
WORLDSERVER="${ROOT_DIR}/_server/azerothcore/acore.sh run-worldserver"
|
||||
AUTHSERVER_SESSION="auth-session"
|
||||
WORLDSERVER_SESSION="world-session"
|
||||
|
||||
MYSQL_ROOT_PASSWORD=rootpassword
|
||||
MYSQL_USER=acore
|
||||
MYSQL_PASSWORD=acore
|
||||
MYSQL_DATABASE=acore_auth
|
||||
|
||||
DATAPATH=${ROOT_DIR}/_server/azerothcore/env/dist/bin
|
||||
|
||||
# ----------------------------------------------------------------------------------------
|
||||
# if you want remore players to connects then this should the external IP/DNS
|
||||
# which also should be placed in the 3.35a client Realm.wtf
|
||||
# ----------------------------------------------------------------------------------------
|
||||
REALM_IP=192.168.178.185
|
||||
REALM_NAME="azerothcore.org"
|
||||
|
||||
AH_BOT_MIN_ITEMS=25000
|
||||
AH_BOT_MAX_ITEMS=30000
|
||||
|
||||
|
||||
##########################################################################################
|
||||
# General settings
|
||||
##########################################################################################
|
||||
source ${ROOT_DIR}/lib/general-settings.sh
|
||||
12
wiki/Home.md
Normal file
12
wiki/Home.md
Normal file
@@ -0,0 +1,12 @@
|
||||
Welcome to the mod-playerbots wiki! If you are new to this project, it is strongly recommended to take the time to read through each section to get a better understanding of what you can or can't do with Playerbots as well as how best to configure your setup for success.
|
||||
|
||||
## [Playerbot Addons and Sub‐Modules](https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Addons-and-Sub‐Modules)
|
||||
Recommended addons which allow for a smoother experience in controlling your Playerbots.
|
||||
|
||||
## [Playerbot Commands](https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Commands)
|
||||
Available commands and strategies to best manage your Playerbots.
|
||||
|
||||
## [Playerbot Configuration](https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Configuration)
|
||||
Recommended configuration and hardware for high server performance with Playerbots.
|
||||
|
||||
|
||||
21
wiki/Playerbot-Addons-and-Sub‐Modules.md
Normal file
21
wiki/Playerbot-Addons-and-Sub‐Modules.md
Normal file
@@ -0,0 +1,21 @@
|
||||
## Multibot (by Macx-Lio)
|
||||
Multifunctional tool designed to help control your playerbots. Actively maintained.
|
||||
* [MultiBot](https://github.com/Macx-Lio/MultiBot)
|
||||
|
||||
Note: The official version of MultiBot is currently inactive, it's recommend to use the one maintained by Wishmaster117 found [here](https://github.com/Wishmaster117/MultiBot) for now
|
||||
|
||||
## Other Recommended Addons
|
||||
* https://gitlab.com/Tsoukie/compactraidframe-3.3.5
|
||||
* https://github.com/Zidras/DBM-Warmane
|
||||
|
||||
## Recommended Modules
|
||||
Mod Playerbot Level Brackets: Allows you to set the distribution of rndbots by level bracket.
|
||||
* https://github.com/DustinHendrickson/mod-player-bot-level-brackets (by DustinHendrickson)
|
||||
|
||||
Mod Junk To Gold: Enables autosell of gray items providing QOL for players and reducing inventory buildup for bots.
|
||||
* https://github.com/noisiver/mod-junk-to-gold (by Revision)
|
||||
|
||||
Mod Ollama Chat: Ollama LLM - Playerbot integration (warning - in early stages of development and very cpu/gpu intensive)
|
||||
* https://github.com/DustinHendrickson/mod-ollama-chat (by DustinHendrickson)
|
||||
|
||||
|
||||
380
wiki/Playerbot-Commands.md
Normal file
380
wiki/Playerbot-Commands.md
Normal file
@@ -0,0 +1,380 @@
|
||||
Playerbots are programmed to respond to chat commands. The Multibot and Unbot addons are designed to handle most of the common chat commands for the player, but you may still have need for manual chat commands as you play. It is important to distinguish between "Altbots" and "Rndbots": Altbots are manually player-created bots on a normal account, whereas "Rndbots" and their accounts are automatically generated based on .conf settings. Rndbots will automatically gear themselves, apply talents, and roam the world whereas Altbots will not.
|
||||
|
||||
## Altbot Setup Commands
|
||||
Altbots are characters that you create on your account (or others) first, and then get assigned bot control via the commands below.
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``.playerbots bot add [name1,name2,name3]`` | login altbots. Note that you are also able to login altbots from other accounts depending on your configurations.
|
||||
``.playerbots bot addaccount [accountname]`` | login an entire account of altbots. Depending on your configurations you can login other accounts.
|
||||
``.playerbots bot remove name1,name2,name3`` | logout altbots
|
||||
``.playerbots bot add *`` | login all altbots that are in your party/raid
|
||||
``.playerbots bot remove *`` | logout all altbots that are in your party/raid
|
||||
``maintenance`` | enable altbot to learn all available spells and skills, supplement consumables, enchant gear, and repair. Can also be used on rndbots, but they automatically do this. Whisper for an individual bot or use /p or /r to simultaneously target multiple bots.
|
||||
``autogear`` | automatically gear your altbot, with quality based on your .conf settings AutoGearQualityLimit and AutoGearScoreLimit. Can also be used on rndbots, but they automatically do their own gear initilization upon level up.
|
||||
``talents`` | check current spec of bot
|
||||
``talents spec list`` | check specs available for the class
|
||||
``talents spec [spec name]`` | force bot to change their talents to the chosen spec, see the .conf for list of spec names or whisper your bot "talents spec list"
|
||||
``talents apply <link>`` | apply talents link to bot
|
||||
``glyphs`` | lists the bot’s currently equipped glyphs in the client locale, using item links for proper translations
|
||||
``glyph equip [GlyphID1 GlyphID2 GlyphID3 GlyphID4 GlyphID5 GlyphID6]`` | bot applies given glyphs
|
||||
``reset botAI`` | reset bot settings
|
||||
``reset`` | reset current bot actions like casting spell, moving etc.
|
||||
|
||||
## AddClass Setup Command
|
||||
AddClass bots utilize unused Rndbots in your system. They are currently recommended only to be used for testing purposes i.e. quickly forming a raid group to test certain bots in a given raid, whereas Altbots are strongly recommended for long-term progression playthroughs.
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``.playerbots bot addclass [className]`` | summon a new Rndbot of the desired class (note: death knight syntax is dk, otherwise the rest are standard)
|
||||
|
||||
## Party/Raid General Commands
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``summon`` | summon bot to you (see .conf for different options to configure this command)
|
||||
``release`` | release spirit when dead
|
||||
``revive`` | revive when near a spirit healer
|
||||
``leave`` | leave party
|
||||
``attack`` | attack selected target
|
||||
``follow`` | run toward player (/w for individual or /p or /r for party/raid)
|
||||
``flee`` | run toward player ignoring everything else (/w for individual or /p or /r for party/raid)
|
||||
``stay`` | stay in place
|
||||
``runaway`` | kite mob // note: currently non-functional
|
||||
``grind`` | attack anything
|
||||
``disperse set x`` | force bots to maintain a distance of x yards from each other
|
||||
``disperse disable`` | resets disperse distance to default value
|
||||
``give leader`` | if bot is party/raid leader it will pass it to their master
|
||||
|
||||
Furthermore, you can specify by group or type for some commands like "attack" and "follow", such as:
|
||||
- "@group1 follow"
|
||||
- "@group2 attack"
|
||||
|
||||
This following are other groups that can be targeted:
|
||||
- @tank, @dps, @heal, @ranged, @rangeddps, @meleedps, @[className]
|
||||
|
||||
You can also command multiple groups at a time like below:
|
||||
- "@Group1,4"
|
||||
- "@group2-5,8"
|
||||
|
||||
## Playerbot Spell Commands
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``spells`` | show bot's spells
|
||||
``cast [spell_name]`` | /w a bot to cast a spell
|
||||
``cast [spell_name] on [PlayerName]`` | /w a bot to cast a spell on a specified Player
|
||||
``ss +[spell id]`` | add spell to exclude spells list
|
||||
``ss -[spell id]`` | remove spell from exclude spells list
|
||||
``ss reset`` | removes all spells from exclude spells list
|
||||
``trainer`` | show what bot can learn from the selected trainer
|
||||
``trainer learn`` | learn from the selected trainer
|
||||
|
||||
## Party/Raid Target Selection
|
||||
RTSC is a system that enables players to save locations for specified bots to go to using the "aedm" spell that is given when the "rtsc" command is used. Aedm is a spell you use to point and click a particular location that can be saved and used via some of the commands below.
|
||||
|
||||
RTI is a system that enables players to focus bots on specified targets using standard WoW icons.
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``rtsc`` | toggles on rtsc and gives players the "aedm" spell which will appear in the general category of their spellbook
|
||||
``rtsc cancel`` | toggles off rtsc and removes the "aedm" spell from the spellbook
|
||||
``rtsc save [#]`` | while rtsc is enabled, this command will save a location as the specified number when the player uses the aedm spell and clicks on a location
|
||||
``rtsc unsave [#]`` | clears the saved location
|
||||
``rtsc go [#]`` | command bots to go to the saved location, this command can be whispered to individual bots or filtered in party/raid chat with the same chat filters listed in Party/Raid General Commands (e.g., "@Tank rtsc go 5" will send all tanks to saved location 5)
|
||||
``[name/group] rtsc toggle`` | toggles the ability to point and click with mouse button to save a location for specified bots to move to, can specify by group or class (ie "@druid rtsc toggle" or "@group1 rtsc toggle")
|
||||
``rtsc go save`` | command bots to move back into saved rtsc position
|
||||
``rti <icon>`` | sets the target icon for the bot to prioritize (icons: skull, cross, circle, star, square, triangle, diamond, and moon)
|
||||
``attack rti target`` | commands bots to attack their rti target
|
||||
``rti cc <icon>`` | sets a specific icon as the cc target (the default is moon)
|
||||
|
||||
Video guide:
|
||||
https://www.youtube.com/watch?v=Pwt7schIC08
|
||||
|
||||
## Strategies
|
||||
|
||||
The bots are programmed to respond to triggers by listing possible actions and choosing one based on a strategy. Bots use two categories of strategies: combat and non-combat. You can add, subtract, or toggle strategies using the combat (co) and non-combat (nc) prefixes in your commands:
|
||||
|
||||
```
|
||||
co +strategy1,-strategy2,~strategy3
|
||||
nc +strategy1,-strategy2,~strategy3
|
||||
```
|
||||
|
||||
You can query the bot to report what strategies are currently being used:
|
||||
|
||||
```
|
||||
co ?
|
||||
nc ?
|
||||
```
|
||||
|
||||
### Combat Strategies
|
||||
|
||||
General
|
||||
strategy | description
|
||||
:---|:---|
|
||||
``tank`` | use threat-generating abilities (warrior, paladin, druid will use ``bear``)
|
||||
``tank assist`` | make tank pull mobs off of others
|
||||
``dps`` | use dps abilities (rogue, hunter, shaman, priest, druid will use ``cat``)
|
||||
``cc`` | use cc abilities (requires cc rti target, default is moon icon; it is useful to know that bots will not attack rti target and will not try to use cc if target is not stunnable)
|
||||
``assist`` | target one mob at a time
|
||||
``aoe`` | target many mobs at a time
|
||||
``boost`` | bots will use big cds (useful to use -boost and +boost on macros to control when to burst on bosses)
|
||||
``threat`` | dps will actively avoid grabbing threat (useful for bosses that wipe aggro or if tanks are struggling to hold aggro)
|
||||
``grind`` | attack any visible target, then switch to another one and so on.
|
||||
``heal`` | focus on party healing (shaman, priest, druid, paladin)
|
||||
``focus`` | stop casting aoe spell or debuff spells on multiple attackers (focus on the single target)
|
||||
``avoid aoe`` | automatically avoid the majority of harmful aoe spells
|
||||
``save mana`` | healers save mana by prioritizing high-efficiency spells when mana falls below a threshold
|
||||
``healer dps`` | healers cast damage spells if they have enough mana
|
||||
``tank face`` | ensure the current target does not face ranged players in the group (to counter breath and cleave-like spells)
|
||||
``behind`` | move to the target's back (rear flank) when they are not positioned behind the target
|
||||
|
||||
Druid
|
||||
strategy | description
|
||||
:---|:---
|
||||
``bear``, ``cat``, ``caster`` | dictates overall strategy for druids, note that these are already handled by their talent selection
|
||||
|
||||
Hunter
|
||||
strategy | description
|
||||
:---|:---
|
||||
``trap weave`` | enables the trap weave strat for hunters, dropping an explosive trap as part of their rotation (hunter only)
|
||||
|
||||
Mage
|
||||
strategy | description
|
||||
:---|:---
|
||||
``frost``, ``fire`` | mage only, note that these are already handled by their talent selection
|
||||
``firestarter`` | enables the firestarter strat for fire mages, resulting in the mage going into melee to utilize the instant cast flamestrike from the firestarter talent (fire mage only)
|
||||
|
||||
Shaman
|
||||
strategy | description
|
||||
:---|:---
|
||||
``[totem name]`` | shaman will add totem into their call of the elements cast (ie "co +tremor" will add that totem for the shaman)
|
||||
|
||||
Warlock
|
||||
strategy | description
|
||||
:---|:---
|
||||
``meta melee`` | default strategy for demonology warlocks, makes warlock go melee while using metamorphosis and immolation aura (demonology warlock only)
|
||||
|
||||
### Non-Combat Strategies
|
||||
|
||||
General
|
||||
strategy | description
|
||||
:---|:---
|
||||
``food`` | initiate or stop eating/drinking
|
||||
``pvp`` | turn on or off pvp mode
|
||||
``loot`` | enable looting everything by bots. Note: adding or removing that strategy for randombots requires GM level
|
||||
|
||||
Priest
|
||||
strategy | description
|
||||
:---|:---
|
||||
``rshadow`` | priest will cast shadow protection
|
||||
|
||||
Paladin
|
||||
strategy | description
|
||||
:---|:---
|
||||
``bdps``, ``bmana``, ``bstats``, ``bhealth`` | paladin blessing strategies (might, wisdom, kings, and kings/sanctuary depending on context, respectively)
|
||||
``rfire``, ``rfrost``, ``rshadow``, ``baoe``, ``barmor``, ``bcast``, ``bspeed`` | paladin aura strategies (fire, frost, shadow, retribution, devotion, concentration, and crusader aura respectively)
|
||||
|
||||
Hunter
|
||||
strategy | description
|
||||
:---|:---
|
||||
``bdps``, ``bspeed``, ``bmana``, ``rnature`` | hunter aspect strategies (dragonhawk/hawk, pack/cheetah, viper, and wild respectively)
|
||||
|
||||
Warlock Pet Strategies (Note that defaults are as follows: Affliction uses felhunter, Demonology uses felguard, and Destruction uses imp)
|
||||
strategy | description
|
||||
:---|:---
|
||||
``imp`` | force warlock to use imp
|
||||
``voidwalker`` | force warlock to use voidwalker
|
||||
``succubus`` | force warlock to use succubus
|
||||
``felhunter`` | force warlock to use felhunter
|
||||
``felguard`` | force warlock to use felguard
|
||||
|
||||
Warlock Soulstone Strategies
|
||||
strategy | description
|
||||
:---|:---
|
||||
``ss master`` | force warlock to use soulstone on master
|
||||
``ss self`` | force warlock to use soulstone on self
|
||||
``ss tank`` | force warlock to use soulstone on tank
|
||||
``ss healer`` | force warlock to use soulstone on healer
|
||||
|
||||
### Raid-Specific Strategies
|
||||
|
||||
Note: These raid strategies are now automatically applied upon entering the instance. You should receive a whisper from your bots confirming activation.
|
||||
|
||||
strategy | description
|
||||
:---|:---
|
||||
mc | enable Molten Core strats (Note: Baron Geddon only, rest are beatable without strats)
|
||||
bwl | enable Blackwing Lair strats (Note: grants Onyxia Scale Cloak buff to all bots, bots automatic disabling of suppression devices, and bots automatically clear Brood Affliction: Bronze on Chromaggus)
|
||||
aq20 | enable Ruins of Ahn'Qiraj strats (Note: Ossirian only, rest are beatable without strats)
|
||||
voa | enable Vault of Archavon strats (Note: up to Emalon)
|
||||
naxx | enable Naxxramas strats (Note: only certain bosses, rest are beatable without strats)
|
||||
wotlk-os | enable Obsidian Sanctum strats (Note: strat is only functional up to OS+2, need to kill Vesperon first)
|
||||
wotlk-eoe | enable Eye of Eternity strats
|
||||
uld | enable Ulduar strats (Note: Strats implemented up to Hodir and Freya, WIP on future bosses)
|
||||
onyxia | enable Onyxia's Lair strats
|
||||
icc | enable Icecrown Citadel strats (Note: all normal mode currently doable, HC is WIP)
|
||||
|
||||
## Loot
|
||||
|
||||
You can control which items to loot (``ll`` stands for loot list):
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``nc +loot`` | activate looting (note ``grind`` strategy activates looting as well)
|
||||
``ll all`` | loot everything
|
||||
``ll normal`` | loot anything except BOP (bind-on-pickup) items
|
||||
``ll gray`` | loot only gray items
|
||||
``ll quest`` | loot only quest items
|
||||
``ll skill`` | loot only items based on their skills (herbalism, mining, or skinning)
|
||||
``ll [item]`` | add specific item to loot list
|
||||
``ll -[item]`` | remove specific item from loot list
|
||||
|
||||
## Items
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``[item]`` | bot will tell you how many it has, and quest status
|
||||
``e [item]`` | equip item
|
||||
``ue [item]`` | unequip item
|
||||
``u [item]`` | use item
|
||||
``u [item] [target]`` | use item on target (use gem on item)
|
||||
``open items`` | open items in inventory that have loot, ie Satchel of Spoils
|
||||
``destroy [item]`` | destroy item roll [item]
|
||||
``roll [item]`` | bots in party/raid will roll for the linked item if it is an upgrade for them
|
||||
``roll`` | bots in party/raid will all roll
|
||||
``s [item]`` | sell item
|
||||
``s *`` | sell all grey items
|
||||
``s vendor`` | sell all items that can be sold
|
||||
``b [item]`` | buy item
|
||||
``2g 3s 5c`` | give you gold
|
||||
``bank [item]`` | deposit item in bank
|
||||
``bank -[item]`` | withdraw item from back
|
||||
``gb [item]`` | deposit item in guild bank
|
||||
``gb -[item]`` | withdraw item from guild bank
|
||||
|
||||
## Quests
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``quests`` | show quest summary
|
||||
``quests all`` | shows a list with links of all quests in quest log
|
||||
``accept [quest]`` | accept quest at the selected quest giver
|
||||
``accept *`` | accept all quests at the selected quest giver
|
||||
``drop [quest]`` | abandon quest
|
||||
``r [item]`` | choose quest reward
|
||||
``[quest]`` | show quest and objectives status
|
||||
``talk`` | talk to the selected npc (to complete a quest)
|
||||
``u [game object]`` | use game object (use "los" command to obtain the game object link)
|
||||
|
||||
## General Pet Commands
|
||||
command | action
|
||||
:---|:---
|
||||
``pet aggressive`` | changing pet stance on aggresive
|
||||
``pet passive`` | changing pet stance on passive
|
||||
``pet defensive`` | changing pet stance on defensive
|
||||
``pet stance`` | display current pet stance
|
||||
``pet attack`` | pet attack selected target
|
||||
``pet follow`` | pet follow his master
|
||||
``pet stay`` | pet stay in place
|
||||
|
||||
## Hunter Tame Commands
|
||||
command | action
|
||||
:---|:---
|
||||
``tame`` | tame help
|
||||
``tame name "name"`` | summon a tameable pet by name
|
||||
``tame id "id"`` | summon a tameable pet by database creature ID
|
||||
``tame family`` | tame family help
|
||||
``tame family "family"`` | randomly summon a tameable pet of the given family
|
||||
``tame rename "new name"`` | rename the current pet and refresh its name in the client UI
|
||||
|
||||
## Account linking for Altbot control
|
||||
|
||||
As an alternative to controlling the characters from your own account or guild member accounts, this allows to link up different accounts together to allow control of the characters as Altbots. This is based on the ``AiPlayerbot.AllowTrustedAccountBots = 1`` option in the playerbots config file.
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``.playerbots account setKey somePlayerDefinedSecurityKeyValue`` | Define a securityKey for the current account (the key will be overridden when defined multiple times)
|
||||
``.playerbots account link ACCOUNTNAME somePlayerDefinedSecurityKeyValue`` | Link an account by using its securityKey
|
||||
``.playerbots account linkedAccounts`` | Shows a list of accounts, which are currently linked with this account
|
||||
``.playerbots account unlink ACCOUNTNAME`` | Remove a linked account (this will remove the link for both sides, ensuring that access to the characters can be canceled from both sides anytime)
|
||||
|
||||
## Professions
|
||||
|
||||
strategy | description
|
||||
:---|:---
|
||||
``master fishing`` | The strategy is automatically added when ``EnableFishingWithMaster`` is enabled in the config. Strategy can be added manually. Strategy is automatically removed if further than ``EndFishingWithMaster`` from water. Strategy also overrides the follow distance to `FishingDistanceFromMaster`.
|
||||
|
||||
## Miscellaneous Commands
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``los`` | list game objects, items, creatures and npcs the bot can see
|
||||
``stats`` | show stat summary (inventory, gold, xp, etc.)
|
||||
``home`` | set home at the selected innkeeper
|
||||
``playerbot bot initself`` | CAREFUL WITH THIS - re-rolls YOUR character
|
||||
``playerbot bot list`` | lists your altbots (and your other characters you can add as bots if you have that enabled, but I'd be very careful if you do that as you can then re-roll your other characters using the init command)
|
||||
``playerbot bot tweak`` | sets the tweakvalue (seems to be related to a config value that's no longer present and the variable it changes doesn't seem to actually do anything anymore)
|
||||
``playerbot bot self`` | make yourself into a bot, use it again to disable
|
||||
``playerbot bot lookup`` | doesn't do anything but print out a useless usage message (which says you're supposed to give it a class parameter but doing so doesn't change anything because the function called is literally *just* the usage message there's no functionality there)
|
||||
``.playerbots bot init=rare name1,name2,name3`` | respawn bot at your level with talents & rare gear (gearing currently bugged, recommend autogear instead)
|
||||
``who`` | show bot race, spec, talents, class, level, average item level, current zone
|
||||
``who [profession name]`` | show bot profession skill level
|
||||
|
||||
## Overrides
|
||||
|
||||
You can override everything and instruct the bot to do something specific:
|
||||
|
||||
command | description
|
||||
:---|:---|
|
||||
``do attack`` | attack target
|
||||
``do attack my target`` | attack my target
|
||||
``do loot`` | loot target // note: currently non-functional
|
||||
``do add all loot`` | check every corpse and game object for loot // note: currently non-functional
|
||||
|
||||
## Help
|
||||
|
||||
The bot can tell you all available commands it will accept:
|
||||
|
||||
```
|
||||
/w help
|
||||
```
|
||||
|
||||
## Reactions
|
||||
|
||||
The bots will automatically do certain things based on what the party leader is doing.
|
||||
|
||||
your action | bot reaction
|
||||
:---|:---
|
||||
accept a quest | bot will accept it as well
|
||||
talk to a quest giver | bot will turn in his completed quests
|
||||
use meeting stone | teleport using the stone
|
||||
start using game object and interrupt | use the game object
|
||||
open trade window | show inventory and start trading
|
||||
invite to a party/raid | accept the invitation
|
||||
start raid ready check | tell his ready status
|
||||
mount/unmount | mount/unmount as well
|
||||
go through a dungeon portal | follow into the dungeon
|
||||
|
||||
|
||||
## Rndbot Console Only Commands
|
||||
|
||||
command | action
|
||||
:---|:---
|
||||
``playerbot pmon toggle`` | enables/disables the performance monitor
|
||||
``playerbot pmon stack`` | displays the performance monitor, useful to show which actions/triggers cost the most performance
|
||||
``playerbot rndbot reset`` | clears acore_playerbots.playerbots_random_bots table (seems to contain events) and requires server restart after
|
||||
``playerbot rndbot stats`` | prints rndbot stats (numbers of rndbots per level, per class, etc)
|
||||
``playerbot rndbot reload`` | reloads playerbots.conf
|
||||
``playerbot rndbot update`` | triggers a "full tick" (call to RandomPlayerbotMgr::UpdateAIInternal())
|
||||
``playerbot rndbot init`` | re-rolls the rndbots (useful when you've modified settings like min/max level, the spec probabilities, etc)
|
||||
``playerbot rndbot clear`` | reset bots back to starting level (55 for Deathknight)
|
||||
``playerbot rndbot level`` | level up all rndbots by 1
|
||||
``playerbot rndbot refresh`` | revives rndbots if dead, uses botAI->Reset(), rerolls gear, while keeping the same level
|
||||
``playerbot rndbot teleport`` | teleports all bots to appropriate area for level
|
||||
``playerbot rndbot revive`` | (BUGGED: will double number of rndbots) revive rndbot, refresh, and teleport (combo of "refresh" and "teleport")
|
||||
``playerbot rndbot grind`` | (BUGGED: crashes server) teleport rndbot only if needed (needs more testing)
|
||||
``playerbot rndbot change_strategy`` | re-roll whether bots are grinding or RPG'ing (based on AiPlayerbot.RandomBotRpgChance setting)
|
||||
|
||||
|
||||
|
||||
Special thanks to Whipowill for creating the original Playerbots Operators Manual https://github.com/whipowill/wow-addon-playerbots/blob/master/MANUAL.md, fuzz1111 for contributing many confirmed active commands, and Ky for testing many old and new commands.
|
||||
266
wiki/Playerbot-Configuration.md
Normal file
266
wiki/Playerbot-Configuration.md
Normal file
@@ -0,0 +1,266 @@
|
||||
## MySQL Tuning
|
||||
The default MySQL configuration is not adequate for use with Playerbots, and will lead to increased disk activity and decreased performance.
|
||||
|
||||
You should add/change the below config options, in your MySQL configuration where ```innodb_buffer_pool_size``` ideally should be 50% of your total RAM:
|
||||
|
||||
```
|
||||
#
|
||||
# * Fine Tuning
|
||||
# Example with 64 GB RAM
|
||||
|
||||
# INNODB
|
||||
innodb_buffer_pool_size = 32G
|
||||
innodb_io_capacity = 500
|
||||
innodb_io_capacity_max = 2500
|
||||
innodb_use_fdatasync = ON
|
||||
innodb_buffer_pool_instances = 12
|
||||
innodb_log_buffer_size = 32M
|
||||
|
||||
# Max age of binary logs - 5 days to prevent binary log pileups
|
||||
binlog_expire_logs_seconds = 432000
|
||||
|
||||
# Optionally:
|
||||
# Prevent SQL Deadlocks as much as possible
|
||||
transaction_isolation="READ-COMMITTED"
|
||||
```
|
||||
|
||||
Recommended configuration to extend lifespan of your hard drive:
|
||||
- in mysql configuration file change/add line `skip-log-bin` which reduce ~75-90% of writes because skipping binary logging (Use at own risk)
|
||||
- in playerbots configuration file enable `AiPlayerbot.DisabledWithoutRealPlayer` to make sure no bots are logged in, while no players are
|
||||
- use as few bots as possible or limit yourself to only using altbots to minimize the amount of writes
|
||||
|
||||
## Bot activity profiles and performance
|
||||
Before going into the configuration options we need explain the logic a bit. Every update tick of the server its calculated whether a bot can
|
||||
or can't be active. An active bots takes and eats alot more resources then an idle bot.
|
||||
|
||||
The following logic is applied to determine whether a bot is active or not, applied in the explained order.
|
||||
|
||||
```
|
||||
1. NOT ACTIVE: When server uptime smaller then (max amount of bots * 0.12 seconds)
|
||||
2. ALWAYS ACTIVE: When bot is in battleground, instance or raid.
|
||||
3. ALWAYS ACTIVE: When in combat and not in party (defend urself)
|
||||
4. ALWAYS ACTIVE: If the zone where the bot is located has real players
|
||||
5. ALWAYS ACTIVE: When the bots is a member of a guild with real players
|
||||
6. ALWAYS ACTIVE: Has real player as master
|
||||
7. ALWAYS ACTIVE: if grouped and the leader is a real player
|
||||
8. ALWAYS ACTIVE: if in battleground queue
|
||||
9. ALWAYS ACTIVE: if looking for group
|
||||
10. ALWAYS ACTIVE: If bot has a real player within the radius 300 yards
|
||||
11. ALWAYS ACTIVE: When bot is on a friendlist of a online real player
|
||||
12. ALWAYS ACTIVE: When bot has more then 10 other bots within the sightDistance, force to spread out
|
||||
```
|
||||
These rules will always be applied regardless what value you have configured **'AiPlayerbot.BotActiveAlone'**.
|
||||
|
||||
***
|
||||
|
||||
All remaining situations e.g. bots in zones or maps without real players, empty server etc will be configured
|
||||
based on the **'AiPlayerbot.BotActiveAlone'** value. That value basically means that the bot has about
|
||||
% chance to get active for only a few seconds. Unless in those few seconds one of the above rules
|
||||
is triggered then it might result staying active longer.
|
||||
|
||||
Then **'AiPlayerbot.botActiveAloneSmartScale'** basically auto scale the activity percentages
|
||||
based on the latency, relative to the configured value of **'AiPlayerbot.BotActiveAlone'**. And only when the bots are in level scope of the configured values of:
|
||||
* **'AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel'**
|
||||
* **'AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel'**
|
||||
|
||||
***
|
||||
|
||||
#### 1. best performance with high bot count.
|
||||
My personal preference is that i keep my bots idle when i am not in the zone or map, which is applied with the following config
|
||||
and in this specific requirement it doesnt rlly matter autoscale is on or off but i leave it on.
|
||||
|
||||
```
|
||||
AiPlayerbot.BotActiveAlone = 10
|
||||
AiPlayerbot.botActiveAloneSmartScale = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
```
|
||||
|
||||
#### 2. Default; best effort to enforce 100% acitivity but auto adjust when needed
|
||||
(prolly best profile with a server with more real players spread over different zones and maps).
|
||||
When you want all bots active in all situations but you want to server to compensate the bot
|
||||
acitivity based on your latency then use (basically best effort for 100%) :
|
||||
```
|
||||
AiPlayerbot.BotActiveAlone = 100
|
||||
AiPlayerbot.botActiveAloneSmartScale = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
```
|
||||
|
||||
#### 3. All bots active regardless your latency and performance impact.
|
||||
```
|
||||
AiPlayerbot.BotActiveAlone = 100
|
||||
AiPlayerbot.botActiveAloneSmartScale = 0
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
```
|
||||
|
||||
#### 4. All bots active and only apply autoscale on a level range (e.g. high levels)
|
||||
```
|
||||
AiPlayerbot.BotActiveAlone = 100
|
||||
AiPlayerbot.botActiveAloneSmartScale = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 75
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
#### Verify bot performance
|
||||
Use the command '.server info' to see your server latency. The general latency should be under 70-80 and the percentiles maxed out around
|
||||
100, 120, 150. Next to that verify how quick a bot executes your command. It should be pretty much instant. If not to should choose a different profile
|
||||
and/or lower your bot amount.
|
||||
|
||||
If you dont use these performance checks it might result into strange and incorrect bot behaviours and/or huge amount of memory footprint growth in a relative short time (OOM)
|
||||
|
||||
##### Reference
|
||||
I use 'profile 1' with 5000 bots with an AMD 5700x (4.6ghz, 6 cores), linux, 20GB mem with the following result:
|
||||
|
||||

|
||||
|
||||
|
||||
## Recommended hardware
|
||||
```
|
||||
Memory
|
||||
minimal: 16GB (when all map grids are loaded 11-12GB)
|
||||
preferable: 32GB or more
|
||||
CPU cores:
|
||||
minimal: 4 cores
|
||||
preferable: 6 or more cores
|
||||
CPU speed:
|
||||
minimal: 3000mhz
|
||||
preferable: 4400mhz or more
|
||||
```
|
||||
|
||||
## Recommended config
|
||||
worldserver.conf
|
||||
```bash
|
||||
# bots might not pickup quests in certain condidations
|
||||
Quests.IgnoreAutoAccept = 1
|
||||
|
||||
# performance
|
||||
PreloadAllNonInstancedMapGrids = 0
|
||||
SetAllCreaturesWithWaypointMovementActive = 0
|
||||
DontCacheRandomMovementPaths = 0
|
||||
MapUpdate.Threads = 4 or 6
|
||||
MapUpdateInterval = 10
|
||||
MinWorldUpdateTime = 1
|
||||
|
||||
# no player limit for the bots
|
||||
PlayerLimit = 0
|
||||
|
||||
# prevent buggy situations
|
||||
LeaveGroupOnLogout.Enabled = 1
|
||||
```
|
||||
|
||||
playerbots.conf
|
||||
```bash
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# general
|
||||
#-------------------------------------------------------------------
|
||||
AiPlayerbot.Enabled = 1
|
||||
AiPlayerbot.DeleteRandomBotAccounts = 0
|
||||
AiPlayerbot.RandomBotAccountPrefix = "rndbot"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# randombots
|
||||
# - RandomBotMaps: 0=Eastern Kingdoms, 1=Kalimdor, 530=Outland, 571=Northrend
|
||||
#-------------------------------------------------------------------
|
||||
AiPlayerbot.RandomBotMinLevel = 1
|
||||
AiPlayerbot.RandomBotMaxLevel = 80
|
||||
AiPlayerbot.AutoTeleportForLevel = 1
|
||||
AiPlayerbot.RandomBotMaps = 0,1,530,571
|
||||
AiPlayerbot.ProbTeleToBankers = 0.25
|
||||
AiPlayerbot.RandomBotMaxLevelChance = 0.01
|
||||
AiPlayerbot.RandomBotFixedLevel = 0
|
||||
AiPlayerbot.DisableRandomLevels = 0
|
||||
AiPlayerbot.RandombotStartingLevel = 5
|
||||
AiPlayerbot.SyncLevelWithPlayers = 0
|
||||
AiPlayerbot.SyncQuestWithPlayer = 1
|
||||
AiPlayerbot.AutoDoQuests = 1
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# command (gear: 1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary)
|
||||
#-------------------------------------------------------------------
|
||||
AiPlayerbot.AutoGearQualityLimit = 4
|
||||
AiPlayerbot.AutoGearScoreLimit = 0
|
||||
AiPlayerbot.AutoGearCommand = 1
|
||||
AiPlayerbot.MaintenanceCommand = 1
|
||||
AiPlayerbot.AllowPlayerBots = 1
|
||||
AiPlayerbot.AllowGuildBots = 1
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# chat and broadcast (default; RepeatDelay = 2000)
|
||||
#-------------------------------------------------------------------
|
||||
#AiPlayerbot.RepeatDelay = 2000
|
||||
AiPlayerbot.EnableBroadcasts = 0
|
||||
AiPlayerbot.RandomBotTalk = 0
|
||||
AiPlayerbot.RandomBotEmote = 0
|
||||
AiPlayerbot.RandomBotSuggestDungeons = 0
|
||||
AiPlayerbot.EnableGreet = 0
|
||||
AiPlayerbot.ToxicLinksRepliesChance = 0
|
||||
AiPlayerbot.ThunderfuryRepliesChance = 0
|
||||
AiPlayerbot.GuildRepliesRate = 0
|
||||
AIPlayerbot.GuildFeedback = 0
|
||||
AiPlayerbot.RandomBotSayWithoutMaster = 0
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# intervals
|
||||
#-------------------------------------------------------------------
|
||||
AiPlayerbot.RandomBotUpdateInterval = 20
|
||||
AiPlayerbot.RandomBotCountChangeMinInterval = 1800
|
||||
AiPlayerbot.RandomBotCountChangeMaxInterval = 7200
|
||||
AiPlayerbot.MinRandomBotInWorldTime = 3600
|
||||
AiPlayerbot.MaxRandomBotInWorldTime = 1209600
|
||||
AiPlayerbot.MinRandomBotRandomizeTime = 7200
|
||||
AiPlayerbot.MaxRandomBotRandomizeTime = 1209600
|
||||
AiPlayerbot.RandomBotsPerInterval = 60
|
||||
AiPlayerbot.MinRandomBotReviveTime = 60
|
||||
AiPlayerbot.MaxRandomBotReviveTime = 300
|
||||
AiPlayerbot.MinRandomBotTeleportInterval = 3600
|
||||
AiPlayerbot.MaxRandomBotTeleportInterval = 18000
|
||||
AiPlayerbot.RandomBotInWorldWithRotationDisabled = 31104000
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# distance
|
||||
#-------------------------------------------------------------------
|
||||
AiPlayerbot.FarDistance = 20.0
|
||||
AiPlayerbot.SightDistance = 75.0
|
||||
AiPlayerbot.SpellDistance = 28.5
|
||||
AiPlayerbot.ShootDistance = 26.0
|
||||
AiPlayerbot.ReactDistance = 150.0
|
||||
AiPlayerbot.GrindDistance = 75.0
|
||||
AiPlayerbot.HealDistance = 38.5
|
||||
AiPlayerbot.LootDistance = 25.0
|
||||
AiPlayerbot.FleeDistance = 8.0
|
||||
AiPlayerbot.TooCloseDistance = 5.0
|
||||
AiPlayerbot.MeleeDistance = 1.5
|
||||
AiPlayerbot.FollowDistance = 1.5
|
||||
AiPlayerbot.WhisperDistance = 6000.0
|
||||
AiPlayerbot.ContactDistance = 0.5
|
||||
AiPlayerbot.AoeRadius = 10
|
||||
AiPlayerbot.RpgDistance = 200
|
||||
AiPlayerbot.AggroDistance = 22
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# performance related
|
||||
#-------------------------------------------------------------------
|
||||
AiPlayerbot.BotActiveAlone = 10 (either use 10% or 100% anything is between is kinda useless)
|
||||
AiPlayerbot.botActiveAloneSmartScale = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1
|
||||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||||
|
||||
PlayerbotsDatabase.WorkerThreads = 1
|
||||
PlayerbotsDatabase.SynchThreads = 2
|
||||
```
|
||||
|
||||
## Memory footprint
|
||||
The memory footprint does grow in most cases. Consider restarting your server every x hours depending on your
|
||||
configuration, hardware, player base/usage.
|
||||
|
||||
e.g. with a cronjob
|
||||
..
|
||||
63
wiki/Playerbot-Macro-Collection.md
Normal file
63
wiki/Playerbot-Macro-Collection.md
Normal file
@@ -0,0 +1,63 @@
|
||||
## Pull
|
||||
|
||||
To make bots engage target and let tank build aggro (requires Slashin or ElvUI (not all versions) addon)
|
||||
/in 8 determine delay before pull to other bots engage
|
||||
|
||||
```
|
||||
/p @dps co +passive
|
||||
/p @heal co +passive
|
||||
/p @tank attack
|
||||
/in 8 /p @dps co -passive
|
||||
/in 8 /p @heal co -passive
|
||||
```
|
||||
|
||||
## Bloodlust/Heroism
|
||||
|
||||
Stop bots using bloodlust/heroism
|
||||
|
||||
```
|
||||
/p @shaman ss +2825,32182
|
||||
```
|
||||
|
||||
Start bots again using bloodlust/heroism
|
||||
|
||||
```
|
||||
/p @shaman ss -2825,32182
|
||||
```
|
||||
|
||||
## Moving in fight
|
||||
|
||||
To make bots flee with you from the danger:
|
||||
|
||||
```
|
||||
/p reset
|
||||
/p nc -stay,+follow,+passive
|
||||
/p co +passive
|
||||
/p do follow
|
||||
```
|
||||
|
||||
To make bots follow you and assist you in attack:
|
||||
|
||||
```
|
||||
/p nc -stay,+follow,-passive
|
||||
/p co -passive
|
||||
/p do follow
|
||||
```
|
||||
|
||||
To make bots stay in place and assist you in attack:
|
||||
|
||||
```
|
||||
/p nc -follow,+stay,-passive
|
||||
/p co +passive
|
||||
/p do stay
|
||||
```
|
||||
|
||||
## Targeting predefinied creature
|
||||
|
||||
To focus bots on target for example Web Wrap:
|
||||
|
||||
```
|
||||
/target Web Wrap
|
||||
/stopmacro [noharm][dead]
|
||||
/script SetRaidTarget("target", 8)
|
||||
```
|
||||
50
wiki/Playerbot-Queries.md
Normal file
50
wiki/Playerbot-Queries.md
Normal file
@@ -0,0 +1,50 @@
|
||||
### clear bots
|
||||
```bash
|
||||
USE `acore_playerbots`;
|
||||
DELETE FROM `playerbots_random_bots`;
|
||||
DELETE FROM `playerbots_account_type`;
|
||||
|
||||
USE `acore_characters`;
|
||||
DELETE FROM `characters` WHERE `account` IN (SELECT `id` FROM `acore_auth`.`account` WHERE `username` LIKE 'RNDBOT%') OR `account` NOT IN (SELECT `id` FROM `acore_auth`.`account`);
|
||||
DELETE FROM `arena_team_member` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `arena_team` WHERE `arenaTeamId` NOT IN (SELECT `arenaTeamId` FROM `arena_team_member`);
|
||||
DELETE FROM `character_account_data` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_achievement` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_achievement_progress` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_action` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_aura` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_glyphs` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_homebind` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `item_instance` WHERE `owner_guid` NOT IN (SELECT `guid` FROM `characters`) AND `owner_guid` > 0;
|
||||
DELETE FROM `character_inventory` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_pet` WHERE `owner` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `pet_aura` WHERE `guid` NOT IN (SELECT `id` FROM `character_pet`);
|
||||
DELETE FROM `pet_spell` WHERE `guid` NOT IN (SELECT `id` FROM `character_pet`);
|
||||
DELETE FROM `pet_spell_cooldown` WHERE `guid` NOT IN (SELECT `id` FROM `character_pet`);
|
||||
DELETE FROM `character_queststatus` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_queststatus_rewarded` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_reputation` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_skills` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_social` WHERE `friend` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_spell` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_spell_cooldown` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_talent` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `corpse` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `groups` WHERE `leaderGuid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `group_member` WHERE `memberGuid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `mail` WHERE `receiver` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `mail_items` WHERE `receiver` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `guild` WHERE `leaderguid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `guild_bank_eventlog` WHERE `guildid` NOT IN (SELECT `guildid` FROM `guild`);
|
||||
DELETE FROM `guild_member` WHERE `guildid` NOT IN (SELECT `guildid` FROM `guild`) OR `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `guild_rank` WHERE `guildid` NOT IN (SELECT `guildid` FROM `guild`);
|
||||
DELETE FROM `petition` WHERE `ownerguid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `petition_sign` WHERE `ownerguid` NOT IN (SELECT `guid` FROM `characters`) OR `playerguid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_arena_stats` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
DELETE FROM `character_entry_point` WHERE `guid` NOT IN (SELECT `guid` FROM `characters`);
|
||||
|
||||
USE `acore_auth`;
|
||||
DELETE FROM `account` WHERE `username` LIKE 'RNDBOT%';
|
||||
DELETE FROM `realmcharacters` WHERE `acctid` NOT IN (SELECT `id` FROM `account`);
|
||||
```
|
||||
[Thanks to noisiver@Revision](https://github.com/noisiver/codebase/blob/master/SQL%2FAzerothCore%2Fdelete_playerbots.sql)
|
||||
53
wiki/Playerbot-Raid-Completion-Status.md
Normal file
53
wiki/Playerbot-Raid-Completion-Status.md
Normal file
@@ -0,0 +1,53 @@
|
||||
## Raid Completion Status
|
||||
This page maintains a brief overview of raids that are currently possible to complete with playerbots and note which raids and bosses have active strategies implemented. A more detailed list of implemented strategies can be found here: https://github.com/mod-playerbots/mod-playerbots/wiki/Playerbot-Raid-Strategy-Guide
|
||||
|
||||
"Unknown" denotes raids that have not been thoroughly tested and verified.
|
||||
|
||||
## Vanilla
|
||||
|
||||
Raid | Completion Status | Notes
|
||||
:---|:---|:---
|
||||
``Molten Core`` | Completable | Raid strategy implemented for all bosses.
|
||||
``Blackwing Lair`` | Completable | Raid strategy implemented for: added automatic Onyxia Scale Cloak buff to playerbots, bots automatically disable suppression devices, and bots automatically clear Brood Affliction: Bronze on Chromaggus. Otherwise every boss is defeatable with minimal to moderate knowledge and planning.
|
||||
``Zul'Gurub`` | Completable | No raid strategies implemented. Every boss is defeatable with minimal to moderate knowledge and planning.
|
||||
``Ruins of Ahn'Qiraj`` | Completable | Raid strategy implemented for: Ossirian. Otherwise every boss is defeatable with basic knowledge and planning.
|
||||
``Ahn'Qiraj`` | WIP | Needs strategies. No strategies implemented at this time. Every boss up to Twin Emperors and C’thun is completable
|
||||
``Naxxramas`` | Not supported |
|
||||
|
||||
## Burning Crusade
|
||||
|
||||
Raid | Completion Status | Notes
|
||||
:---|:---|:---
|
||||
``Karazhan`` | Completable | Raid strategy implemented for all bosses except the Chess Event, which is soloable without any bot involvement.
|
||||
``Magtheridon's Lair`` | Completable | Raid strategies have been implemented for Magtheridon.
|
||||
``Gruul’s Lair`` | Completable | Raid strategies have been implemented for both bosses.
|
||||
``Serpentshrine Cavern`` | Partially completable | Strategy is currently in PR, but some bosses are defeatable with moderate knowledge and planning except for Lady Vashj who will require strats.
|
||||
``Tempest Keep`` | Not completable| It is not possible to pass A'lar until strategies are implemented.
|
||||
``Hyjal Summit`` | Completable | No strategies implemented, but every boss is defeatable with moderate knowledge and planning.
|
||||
``Black Temple`` | Partially completable | Every boss is completable without strategy except Council and Illidan. Council is hard and requires proper RTI marks. Illidan looks unkillable without strategy.
|
||||
``Zul’Aman`` | Unknown | Unknown
|
||||
``Sunwell Plateau`` | Unknown | Unknown
|
||||
|
||||
## Wrath of the Lich King
|
||||
|
||||
Raid | Completion Status | Notes
|
||||
:---|:---|:---
|
||||
``Naxxramas`` | Completable | Raid strategy implemented for most bosses. Otherwise every boss is defeatable with moderate knowledge and planning. Not applicable for 40 man
|
||||
``Vault of Archavon`` | WIP | Raid strategy implemented for: Emalon. Needs more strategies. Archavon is defeatable with minimal knowledge and planning.
|
||||
``Obsidian Sanctum`` | Completable | Raid strategy implemented for: Sartharion up to two drakes. Must kill Vesperon first.
|
||||
``Eye of Eternity`` | Completable | Raid strategy implemented for: Malygos.
|
||||
``Ulduar`` | WIP | Raid strategy implemented for: Up to Yogg-Saron.
|
||||
``Trial of the Crusader`` | WIP | Needs strategies.
|
||||
``Onyxia’s Lair`` | Completable | Raid strategy implemented for: Onyxia.
|
||||
``Icecrown Citadel`` | Completable | All necessary raid bosses have implemented raid strategies. Heroic mode is still WIP.
|
||||
``Ruby Sanctum`` | Unknown | Unknown
|
||||
|
||||
## Special Thanks
|
||||
Special thanks to all of the contributors who designed these raid strategies:
|
||||
|
||||
Bobblybook: Obsidian Sanctum, Eye of Eternity
|
||||
Crow: Karazhan, Gruul's Lair, Magtheridon's Lair
|
||||
Gromleq: Vault of Archavon, Ulduar
|
||||
Liyunfan: Naxxramas
|
||||
Noscopez: Icecrown Citadel
|
||||
Revision: Karazhan
|
||||
314
wiki/Playerbot-Raid-Strategy-Guide.md
Normal file
314
wiki/Playerbot-Raid-Strategy-Guide.md
Normal file
@@ -0,0 +1,314 @@
|
||||
## Raid Strategy Status
|
||||
|
||||
This guide works alongside https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Raid-Completion-Status by going into detail on each strategy coded per boss for each raid, as well as note expected player actions where the coded strategy may be insufficient or not necessary. Please note that the strategies and overall feasibility are made assuming appropriate level gear for that content, although many are also completable using the Individual Progression module nerfs.
|
||||
|
||||
## Vanilla
|
||||
|
||||
### Molten Core
|
||||
*This raid is completable with IP nerfs.
|
||||
|
||||
**Lucifron**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Shadow resistance aura will be automatically applied.
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Magmadar**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Fire resistance aura will be automatically applied.
|
||||
* Tips & Tricks: Use Bots to place fear ward on tank, and have shamans use tremor totems to help with fear; may be added as a strat in the future.
|
||||
|
||||
**Gehennas**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Shadow resistance aura will be automatically applied.
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Garr**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Fire resistance aura will be automatically applied. Disabled aoe dps abilities via multiplier to help prevent multiple simultaneous explosions.
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Baron Geddon**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Fire resistance aura will be automatically applied. Bots will run away from the raid if they get Living Bomb and will run away from boss during Inferno.
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Shazzrah**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Ranged bots will position themselves at maximum distance in order to avoid the arcane explosion while still being able to dps and heal.
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Sulfuron Harbinger**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Fire resistance aura will be automatically applied.
|
||||
* Tips & Tricks: Use Skull icon to focus target down individual boss adds.
|
||||
|
||||
**Golemagg the Incinerator**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Fire resistance aura will be automatically applied. Disabled aoe dps via multiplier. Offtanks pull Core Ragers away from Golemagg to remove their buff.
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Majordomo Executus**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Shadow resistance aura will be automatically applied.
|
||||
* Tips & Tricks: Use Skull icon to focus target down individual boss adds.
|
||||
|
||||
**Ragnaros**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Fire resistance aura will be automatically applied.
|
||||
* Tips & Tricks: None
|
||||
|
||||
### Blackwing Lair
|
||||
*Note that all Playerbots are automatically granted the Onyxia Scale Cloak buff and will automatically disable suppression devices. This raid is completable with IP nerfs.
|
||||
|
||||
**Razorgore the Untamed**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, without coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: Player will need to control Razorgore to destroy the eggs in Phase 1.
|
||||
|
||||
**Vaelastrasz the Corrupt**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, without coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Broodlord Lashlayer**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, without coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Firemaw**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, without coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Ebonroc**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, without coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Flamegor**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, without coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: None
|
||||
|
||||
**Chromaggus**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with coded strategies and some manual control needed.
|
||||
* Coded Strategies: Bots will automatically clear Brood Affliction: Bronze
|
||||
* Tips & Tricks: Depending on gear, some manual bot control may be necessary using RTSC to place Chromaggus by the door to LOS during certain breath attacks.
|
||||
|
||||
**Nefarian**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with some degree of manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: In Phase 2, use RTSC to place main tank for Nefarian by the stairs facing away from the raid. Use commands for shamans to use tremor totem, and remove tank assist (co -tank assist) from main tank to avoid him moving Nefarian around when the skeleton adds spawn in Phase 3.
|
||||
|
||||
## Burning Crusade
|
||||
|
||||
### Karazhan
|
||||
*This raid is completable with suggested IP nerfs. Strategies were written and tested with 1) bot damage and healing each reduced to 50% of normal strength, and 2) HP of all raid mobs restored to Patch 2.4.3 levels (reverting the global 30% nerf to HP of TBC raid mobs from Patch 3.0.2).
|
||||
|
||||
**Attumen the Huntsman & Midnight**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* The main tank will tank Midnight, and bots will focus DPS on Midnight.
|
||||
* When Attumen spawns, the assist tank will pick him up and move him away from the raid because he cleaves.
|
||||
* When Midnight reaches 25% health and Attumen mounts Midnight, the main tank will pick up Attumen, and other bots will briefly pause DPS. All bots other than the tank will stack up behind Attumen, inside the minimum range of his Berserker Charge.
|
||||
* Tips & Tricks: Although not required, the easiest way to pull Midnight is to have bots stay out of line-of-sight behind the haycart and pull Midnight yourself (and then take bots off of stay once Midnight gets around the haycart).
|
||||
|
||||
**Moroes**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* The main tank will target Moroes for the duration of the encounter.
|
||||
* Other bots will mark adds with the skull icon and prioritize accordingly based on the standard kill order (Millstipe first, Von’indi second, etc.), taking into account which four adds were randomly chosen.
|
||||
* Tips & Tricks: In practice, the adds will likely be grouped up, and bots will AoE them down (with classes without AoE capabilities targeting the add marked with a skull). If you want bots to only single-target prioritize adds, you will need to disable their standard AoE DPS strategies. However, it is likely (even when playing with IP nerfs) that AoEing down the adds will be fast and effective.
|
||||
|
||||
**Maiden of Virtue**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* The main tank will position Maiden in the middle of the room, and ranged bots will fan out around the center, between the pillars.
|
||||
* When Maiden casts Repentance, the tank will move her to a healer to use the Holy Ground to break the healer’s stun.
|
||||
* Tips & Tricks: Each ranged bot has an assigned position between pillars—if you are also playing a ranged class, make sure to find an open spot so you do not chain Holy Wrath.
|
||||
|
||||
**Opera Event**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* Bots will switch the skull icon back and forth between Romulo and Julianne as needed to try to kill them at about the same time.
|
||||
* Bots will mark the Wizard of Oz bosses with the skull icon and prioritize accordingly based on the standard kill order (Dorothee, Tito, Roar, Strawman, Tinhead, Crone). Mage bots will spam Scorch on Strawman to disorient him.
|
||||
* The main tank will position the Big Bad Wolf in the front left corner of the stage (from the perspective of facing the stage). Bots that are transformed into Little Red Riding Hood will attempt to run around the stage to get away from the Big Bad Wolf.
|
||||
* Tips & Tricks: To speed up your clear, you can talk to Barnes and initiate the Opera Event while letting bots clear the final trash mobs. You will likely still have plenty of time to prepare to engage the boss due to the long intro to the event.
|
||||
|
||||
**The Curator**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* The main tank will position Curator in a designated spot in the center of the hallway near the entrance to the Guardian’s Library.
|
||||
* Ranged bots will spread out, and all bots will mark and prioritize destroying Astral Flares.
|
||||
* The assist tank will stay on Curator (instead of picking up Flares) to try to stay second on aggro to absorb Hateful Bolts.
|
||||
* Bots will save Bloodlust/Heroism until Curator uses Evocation and is vulnerable to double damage.
|
||||
* Tips & Tricks: Set bots to “co -boost” before the fight to prevent them from using other major cooldowns and activate “co +boost” when Curator uses Evocation.
|
||||
|
||||
**Terestian Illhoof**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Bots will mark and prioritize targets with the skull icon in the following order: (1) Demon Chains, (2) Kil’rek, and (3) Terestian Illhoof.
|
||||
* Tips & Tricks: If you are playing DPS, consider using a /target macro for the Demon Chains.
|
||||
|
||||
**Shade of Aran**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* Ranged bots will attempt to maintain spread positions outside of Aran’s Counterspell range.
|
||||
* When Aran casts Massive Magnetic Pull, bots will run to the edge of the room to escape the Arcane Explosion.
|
||||
* When Aran casts Flame Wreath, and for the duration of the Flame Wreath aura being active, bots will stop moving.
|
||||
* When Aran summons Conjured Elementals, bots will mark and prioritize them with the skull icon.
|
||||
* Tips & Tricks:
|
||||
* Coded strategies do not persist after Aran dies so if Flame Wreath is active when he dies, make sure to manually command bots to stay or they will blow up the raid.
|
||||
* An Azerothcore bug exists that sometimes causes Flame Wreath to persist long beyond its correct duration. If Aran casts Arcane Explosion while Flame Wreath is still active, there is not much you can do, and it is probably a wipe.
|
||||
|
||||
**Netherspite**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Bots are assigned to block beams during the Portal Phase, and proper raid composition is important to ensure sufficient beam coverage.
|
||||
* Tank bots are assigned to block the red beam. Each tank will block the red beam for an entire Portal Phase and will dance in and out of the beam to avoid taking too many stacks of the debuff.
|
||||
* DPS bots (excluding Rogues and Warriors) are assigned to block the blue beam. They will transition at 24 stacks of the debuff, and therefore two such bots are required for each Portal Phase.
|
||||
* Healer, Rogue, and DPS Warrior bots are assigned to block the green beam. Rogues and DPS Warriors will be prioritized, and if they are assigned, they will remain in the beam for the duration of the Portal Phase (since there is no disadvantage to them from the debuff). Only if there are not enough eligible Rogues and DPS Warriors will healers block the green beam, and they will transition at 24 stacks of the debuff.
|
||||
* Bots are coded to avoid Void Zones and to avoid beams that they are not assigned to block.
|
||||
* Bots will briefly pause DPS when Netherspite is pulled and again upon each transition into the Portal Phase.
|
||||
* Tips & Tricks:
|
||||
* Netherspite is bugged in Azerothcore in that the beams cannot be blocked inside of Netherspite’s hitbox (18 yards from his center), even though they visually continue to his center (and were blockable inside his hitbox in retail). The bots are coded to account for this, but the player should also be aware in the event that the player needs to block a beam. Additionally, this makes it important to pull the boss in the middle of the room since if the boss is too close to a portal, it will be impossible to block the beam.
|
||||
* The player’s primary role during the Portal Phase (other than filling in for a bot that dies without replacement) should be to back up the bots on beams. Bots may not transition blocking duties as quickly as competent players (who would be prepared next to a beam when they are about to take over blocking to ensure an instant transition—for various reasons, trying to code this for bots is problematic). In particular, any gap in blocking of the Green Beam can be disastrous. Accordingly, if a healer bot is blocking the Green Beam, players should be prepared to block the Green Beam temporarily then the transition occurs.
|
||||
* Bot tanks are coded not to attempt to avoid Void Zones while moving in and out of the Red Beam. The ability to control their movement is not sufficiently precise or dynamic to allow for their avoidance without ensuring that the boss does not move (and cause all beam blockers to get out of position). Therefore, tanks will need to be healed through the extra damage.
|
||||
* The only strategy coded for the Banish phase is for bots to avoid Void Zones, and therefore it is the player’s choice whether to continue to DPS the boss or to bring the raid out of range of Netherbreath and wait for the next Portal Phase to reengage.
|
||||
|
||||
**Chess Event**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no bot involvement needed.
|
||||
* Coded Strategies: None.
|
||||
* Tips & Tricks: From White’s point of view, use your first three turns to move pawns forward to b3, d3, and g3. Use your next two turns to move rooks to a2 and g2. If Medivh sets a fire under your king or queen, stop what you are doing and immediately move them out of the fire. Thereafter, generally focus on controlling the queen and using Fireball (Horde) or Elemental Blast (Alliance) to target the opposing king. This method is effective but not guaranteed, as success is dependent on RNG (including where Medivh moves the king and what cheats he uses and when). Depending on the situation, it may be helpful to capture other pieces before the king (in particular, the opposing bishops and/or queen).
|
||||
|
||||
**Prince Malchezaar**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies:
|
||||
* Bots that are Enfeebled will run out of Shadow Nova range and should select escape vectors that do not come in range of any Netherspite Infernal’s Hellfire.
|
||||
* All bots will attempt to avoid Infernals. The tank will attempt to stay a bit further from the Infernals than other bots to try to give players and other bots (particularly melee DPS) some room to maneuver.
|
||||
* Bots will save Bloodlust/Heroism until phase 3 (Malchezaar at 30% HP), when the Infernal spawn rate increases drastically.
|
||||
* Tips & Tricks: Bots may get “stuck” behind an Infernal that lands between them and Malchezaar, as they will refuse to run into the Hellfire and are unable to move around Infernals. If this happens, briefly activate “flee” and lead the bots slightly off to the side of the Hellfire (or even into or through the Hellfire if they are able to survive) so that they can reach the boss by moving in a straight line after the flee strategy is removed.
|
||||
|
||||
**Nightbane**
|
||||
|
||||
* Defeatable Solo with Bots: Yes. During phase changes, the player will be responsible for leading bots to the correct positions in anticipation of combat (discussed below). No RTSC is needed; just make sure to run to the general area called for by the strategies at the right time.
|
||||
* Coded Strategies:
|
||||
* The tank and ranged bots have fixed positions near the Northeastern door to the Master’s Terrace. After summoning the boss, players should lead the bots to that general area to wait for combat to begin.
|
||||
* The tank will attempt to move Nightbane in a manner that results in him being positioned perpendicularly from the raid, facing the edge of the balcony (though this is imperfect, and he may end up at a slight angle).
|
||||
* Priest bots will cast Fear Ward on the tank.
|
||||
* There are three fixed positions coded for ranged bots. The ranged bots will stack and cycle through the positions if Charred Earth spawns underneath them. It is a known issue that bots will sometimes arrive at a safe position but continue to cycle—this is due to the fact that the bots determine whether they are in an unsafe position by the presence of the Charred Earth aura on themselves. It is possible for the aura not to have faded before the bot arrives at the next position, even if the next position is safe, resulting in the bot thinking it is not safe and continuing to cycle. However, they should eventually settle into a safe position.
|
||||
* When the flight phase starts, bots will mark Nightbane with a moon and stop attacking. They will stack at a position near Nightbane’s flight phase position so he does not use Fireball Barrage. When Rain of Bones is cast and Restless Skeletons spawn, all bots will move away and stack in a new position that is outside of the Rain of Bones AoE before killing the Skeletons.
|
||||
* Hunter and Warlock pets are set to passive during the flight phase. Players should make sure to do this as well. The maps on the Master’s Terrace are extremely buggy, and pets will chase Nightbane into midair and may even run out of the tower grounds, which can cause Restless Skeletons to spawn in odd places and even aggro mobs from other parts of the instance. Because of this, bots are disabled from using any temporary pets (e.g., Spirit Wolves, Water Elementals, Treants) during the encounter.
|
||||
* The flight phase lasts for 45 seconds, but Nightbane is not aggressive during the final 10 seconds (when he is preparing to land). Nightbane will yell that he is landing, at which point the player will need to lead the bots back to the ground phase combat area.
|
||||
* Bots will pause DPS after the pull and after each transition into the ground phase to allow the tank to get aggro.
|
||||
* Tips & Tricks:
|
||||
* Because of the buggy maps, there is a tendency for mobs to pull through the floor, and it is suggested that prior to the encounter, you clear all mobs from the Livery Stables, including the upper level, and the Scullery.
|
||||
* AoE avoidance is intentionally disabled for the tank. This is necessary to prevent the tank from spinning Nightbane and causing him to face the raid, as bot movement is not sufficiently precise or dynamic to avoid the Charred Earth while still keeping Nightbane properly positioned. As a result, the tank will need to be healed through Charred Earth.
|
||||
* Ultimately, Nightbane may be the most challenging boss in T4 content. At appropriate gear levels with IP nerfs, it is likely that three healers will be needed (even though two is likely sufficient for the rest of Karazhan).
|
||||
|
||||
### Magtheridon's Lair
|
||||
*This raid is completable with IP module nerfs. Strategies were written/tested with (1) bot damage and healing each reduced to 50% of normal strength, and (2) HP of all raid mobs restored to Patch 2.4.3 levels (i.e., reverting the global 30% nerf to HP of TBC raid mobs from Patch 3.0.2).
|
||||
|
||||
**Magtheridon**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: The strategy is designed for a raid with three traditional tanks, but having that many is not critical.
|
||||
* During phase one, the main tank (determined by setting the client-side main tank flag) will tank three of the Hellfire Channelers, and the second and third off tanks will each tank one Channeler, dragging them away from the raid out of Shadow Bot Volley range. DPS bots will prioritize Channelers by RTI marks (in order, Square, Star, Circle, Diamond, and Triangle).
|
||||
* Also during phase one, Warlocks will be assigned to Banish the Burning Abyssals (and Fear any in excess of the number of Warlocks in the raid).
|
||||
* After the first three Channelers are down, the main tank will wait in the center of the room to pick up Magtheridon while the remainder of the raid finishes the final two Channelers. When Magtheridon is released, the main tank will pull him to the Northern point of the room. DPS bots will wait a few seconds before attacking Magtheridon to prevent them from pulling aggro while the tank gets positioned.
|
||||
* To handle the Manticron Cubes, one ranged DPS bot (excluding Warlocks) will be assigned to click each Cube. Warlocks are excluded for Cube assignments so they can keep residual Abyssals crowd controlled and focus their high DPS on the boss. However, the strategy will automatically reassign a Cube clicker if the previously assigned bot dies, and if there are not five living non-Warlock ranged DPS alive, then any living non-tank bot can be selected.
|
||||
* Magtheridon will cast Blast Nova approximately every 55 seconds. About 6 seconds before the cast, each bot that is assigned to a Cube will move to their Cube and wait in position a short distance away. They will move in to use the Cube as soon as the Blast Nova cast begins. Once Blast Nova is interrupted, they will return to the fight and will repeat the cycle until the boss is down.
|
||||
* Tips & Tricks:
|
||||
* During the brief lull between the final Channeler dying and Magtheridon becoming released, bots will be idle and follow their player master. The player should make sure not to lead the bots in front of Magtheridon at this time, or the bots may be killed immediately when Magtheridon is released.
|
||||
* It is helpful (though not required) for Warriors and/or Druids to tank the fourth and fifth Channelers because they will be able to keep the Channelers consistently interrupted (particularly their Dark Mending heals).
|
||||
* You may want to have bots manually pause DPS before Magtheridon reaches 30% HP if his Blast Nova cast is imminent, and wait for the Blast Nova to be interrupted before taking him to 30% HP. Otherwise, the combination of the ceiling collapsing at 30%, followed by an immediate Blast Nova with the raid stunned, can cause a wipe.
|
||||
|
||||
### Gruul’s Lair
|
||||
*This raid is completable with IP nerfs. Strategies were written/tested with (1) bot damage and healing each reduced to 50% of normal strength, and (2) HP of all raid mobs restored to Patch 2.4.3 levels (i.e., reverting the global 30% nerf to HP of TBC raid mobs from Patch 3.0.2).
|
||||
|
||||
**High King Maulgar**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: The strategy is designed for a raid with three traditional tanks, a Mage tank with 9000+ buffed max HP, and a Moonkin Druid tank (special gearing not necessary).
|
||||
* The main tank (determined by setting the client-side main tank flag) will tank Maulgar. The other two traditional tanks will tank Olm and Blindeye. The Mage tank (which the strategy selects as the Mage bot in the raid with the highest max HP) will tank Krosh by Spellstealing Krosh’s Spell Shield. The Moonkin tank (Moonkin bot in the raid with the highest max HP) will tank Kiggler, but it is not truly necessary, and the fight can be completed with no Moonkin Druid in the raid.
|
||||
* Ranged DPS will prioritize targets in the following order: Blindeye, Olm, Krosh, Kiggler, Maulgar
|
||||
* Melee DPS will prioritize targets in the following order: Blindeye, Olm, Kiggler, Maulgar
|
||||
* Tips & Tricks:
|
||||
* Pull the boss head-on and send your traditional tanks in to start the encounter.
|
||||
* All tanks (except the Moonkin tank) have designated spots in the room—be careful not to stand too close to Krosh.
|
||||
* If playing with IP nerfs, the fight will likely be difficult without a Mage tank with sufficient HP not to get one-shot by Krosh. At pre-raid gear levels, achieving enough HP will likely require some intentional stacking of stamina gear and/or enchants.
|
||||
|
||||
**Gruul the Dragonkiller**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, no manual control or command of bots needed.
|
||||
* Coded Strategies: Two tanks are needed, a main tank and an offtank to absorb Hurtful Strike.
|
||||
The main tank will attempt to keep Gruul in the center of the room, and ranged bots will spread in a circle around the center point.
|
||||
Bots will attempt to spread out as much as possible after Ground Slam is used in advance of Shatter.
|
||||
* Tips & Tricks: In appropriate gear levels, the bots are likely to start dying to Shatter before 10 stacks of Growth, as they do not spread as well as coordinated players. This should be plenty of time to kill Gruul with IP nerfs and pre-raid gear (not even pre-raid BiS needed), but if you are struggling to get the kill before then, you may need to farm more gear or better optimize the composition of your raid.
|
||||
|
||||
|
||||
## Wrath of the Lich King
|
||||
|
||||
### Naxxramas
|
||||
|
||||
**Anub'Rekhan**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with coded strategies, with some manual control recommended.
|
||||
* Coded Strategies: ??
|
||||
* Tips & Tricks: For better ranged bot positioning use `/ra @ranged disperse set 20` to avoid [Impale](https://wowgaming.altervista.org/aowow/?spell=28783).
|
||||
|
||||
**Grand Widow Faerlina**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with no coded strategies or manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: Focus all damage on boss using skull mark. Adds will die from aoe.
|
||||
|
||||
**Maexxna**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with with some manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: To command bot to free from [Web Wrap](https://wowgaming.altervista.org/aowow/?spell=28622) use [targeting macro](https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Macro-Collection#targeting-predefinied-creature). Use [bloodlust/heroism macro](https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Macro-Collection#bloodlustheroism) to focus damage when boss reach 30% HP and use [Frenzy](https://wowgaming.altervista.org/aowow/?spell=28747)
|
||||
|
||||
**Patchwerk**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with with some manual control needed.
|
||||
* Coded Strategies: None
|
||||
* Tips & Tricks: Melee bots will be targeted by [Hateful Strike](https://wowgaming.altervista.org/aowow/?spell=41926) then take more tanks or ranged. Use [bloodlust/heroism macro](https://github.com/liyunfan1223/mod-playerbots/wiki/Playerbot-Macro-Collection#bloodlustheroism) to focus damage when boss reach 5% HP and use [Frenzy](https://wowgaming.altervista.org/aowow/?spell=28131)
|
||||
|
||||
### Vault of Archavon
|
||||
To set proper faction which controls Wintergrasp use commands \
|
||||
`.bf switch 1` \
|
||||
`.bf timer 1 0h00m01s`
|
||||
|
||||
**Koralon the Flame Watcher**
|
||||
|
||||
* Defeatable Solo with Bots: Yes, with coded strategies, with some manual control recommended.
|
||||
* Coded Strategies:
|
||||
* auto apply fire resistance aura
|
||||
* Tips & Tricks: For better ranged bot positioning use `/ra @ranged disperse set 6` to avoid [Flaming Cinder](https://wowgaming.altervista.org/aowow/?spell=66684).
|
||||
Reference in New Issue
Block a user