В архиве два скомпилированных скрипта miner.cs, miner.passive и исходный код.
Преимущества:
Не скользит, бегает, спринтует;
Месторождение выбирается случайно из 3-х возможных + случайные координаты;
Сам собирает зар. плату. Количество кругов нужно указать при запуске;
Если бот нарушит технологию, то он побежит получать работу заного;
Респавнит машины брошенные в округе, чтобы те не заграждали путь;
( Введите "/miner [кол-во кругов] 1", чтобы отключить респавн )
Можно остановить или поставить на паузу в любой момент.
Управление:
Начните работу шахтёра;
Чуть-чуть отойдя от иконки "майки", введите /miner [кол-во кругов];
Занимайтесь своими делами;
Нажмите клавишу F1, чтобы остановить бота, или введите /minerpause, чтобы поставить его на паузу.
История изменений:
0.1.0 - Публичный релиз.
0.1.1 - Добавлен спринт, поправлены координаты.
0.1.2 - Исправлен вылет с warningами при сборе з/п.
0.2.0 - Добавлена возможность указывать кол-во кругов до сбора з/п. При смерти бот отключится сам. Незначительные изменения в коде.
0.2.1 - Исправлена проблема с ломанием тележки. Исправлены анимации добычи руды, складывания руды, анимация на поворотах.
0.2.2 - Теперь ещё и респавнит все машины в округе, чтобы те не заграждали путь боту. (Большое спасибо mgmoldova за помощь)
0.3.0 - Полностью пересмотрено строение скрипта. Добавлена возможность менять кол-во кругов прямо во время работы бота. Небольшое исправление респауна машин.
0.3.1 - Возможность менять кол-во кругов "на лету" убрана из-за багов. Теперь бота можно выключить даже во время добычи руды. Служебные переменные заменены на рабочие.
0.3.2 - Отныне бот будет действительно случайно выбирать одно из трёх месторождений + координаты "чекпоинтов" тоже будут выбираться каждый раз случайно. Спавн машин будет происходить чуть реже + добавлена возможность совсем его отключить. Клавиша выключения бота изменена на F1. Убраны баги связанные с ненормальным поведением машин в течении 2х минут после остановки скрипта. Снова можно менять кол-во кругов "на лету". :)
0.3.3 - Исправлен редкий сбив анимации добычи руды. Добавлена возможность ставить бота на паузу командой /minerpause.
0.3.4 - Попытка решить проблему с поломкой тележки.
0.3.5 - Теперь если бот нарушит технологию, он побежит сдавать работу.
0.3.6 - hotfix
0.3.7 - Теперь бот будет сдавать/получать работу моментально при открытии окошка. И даже если сервер лагает, он будет ждать пока оно не откроется.
0.3.8 - Убрано скольжение. Обновлены координаты маркеров.
0.4.0 - Бот проходит сквозь машины и игроков.
Проверь(те):
SAMP R1 (не R1-2).
CLEO 4.1.
SAMPFUNCS 2.4 или новее.
GOTO SHUFFLE FIX.
(Скачать все необходимое можно у нас на сайте.
Исходный код:Код
{$CLEO .cs}
0662: NOP "CLEO : ARP Miner Bot"
0662: NOP "gcode : 2013"
0662: NOP "ACheats.ru : BlastHack.net"
thread "miner"
if
8AF7: get_samp_base_to 33@
then
0A93: end_custom_thread
end
repeat
wait 400
until 0AFA: is_samp_structures_available
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "cheatstate"
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Введите {e9c69a}/miner [кол-во кругов]{EAEAEA}, чтобы включить бота-шахтёра." 0xe9c69a
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Для {e9c69a}acheats.ru {EAEAEA}и {e9c69a}blasthack.net {EAEAEA}от {e9c69a}gcode{EAEAEA}." 0xe9c69a
0B34: samp register_client_command "miner" to_label @mineron
0B34: samp register_client_command "minerpause" to_label @minerpause
:miner
wait 0
0AF0: 30@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "cheatstate"
if
30@ == 1
else_jump @miner
28@ = 0
0AF0: 29@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "laps"
0ACD: show_text_highpriority "~W~MinerBot ~G~ON" time 1500
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Нажмите клавишу {e9c69a}F1{EAEAEA}, чтобы выключить бота-шахтёра." 0xe9c69a
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Введите {e9c69a}/minerpause{EAEAEA}, чтобы поставить бота на паузу." 0xe9c69a
0AB1: call_scm_func @bot 5 -1840.21 -1604.03 21.76 0 1
0AB1: call_scm_func @bot 5 -1838.44 -1642.34 21.75 0 1
:miner1
wait 0
0AF0: 29@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "laps"
if
001D: 29@ > 28@
then
0AF0: 24@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "spawnstate"
if and
23@ == 4
24@ == 0
then
23@ = 0
0A92: create_custom_thread "miner.passive"
end
0209: 27@ = generate_random_int_in_range 0 3
if
27@ == 0
else_jump @minera
0AB1: call_scm_func @bot 5 -1807.81 -1646.1 22.3528 1 0
jump @minerb
:minera
wait 0
if
27@ == 1
then
0AB1: call_scm_func @bot 5 -1811.34 -1651.28 21.6805 1 0
else
0AB1: call_scm_func @bot 5 -1809.78 -1656.86 21.9987 1 0
end
:minerb
wait 0
0AB1: call_scm_func @waiter 1 16600
0208: 22@ = generate_random_float_in_range -3.0 0.3
22@ -= 1642.34
0AB1: call_scm_func @bot 5 -1838.44 22@ 21.75 0 0
0208: 22@ = generate_random_float_in_range -3.0 0.3
22@ -= 1856.43
0AB1: call_scm_func @bot 5 22@ -1627.41 21.93 0 0
0AB1: call_scm_func @bot 5 -1867.21 -1612.16 20.688 1 0
0AB1: call_scm_func @waiter 1 2000
0208: 22@ = generate_random_float_in_range -0.5 2.5
22@ -= 1856.43
0AB1: call_scm_func @bot 5 22@ -1627.41 21.93 0 1
0208: 22@ = generate_random_float_in_range -3.0 1.0
22@ -= 1642.34
0AB1: call_scm_func @bot 5 -1838.44 22@ 21.75 0 1
28@ += 1
23@ += 1
else
28@ = 0
0AF9: samp say_msg "/mn"
repeat
wait 0
0B4E: samp 17@ = get_current_dialog_id
until 17@ == 27
0B47: samp close_current_dialog_with_button 0
0AB1: call_scm_func @bot 5 -1840.21 -1604.03 21.76 0 1
0AB1: call_scm_func @bot 5 -1864.77 -1560.77 21.75 1 1
repeat
wait 0
0B4E: samp 17@ = get_current_dialog_id
until 17@ == 110
0B47: samp close_current_dialog_with_button 1
repeat
wait 0
0B4E: samp 17@ = get_current_dialog_id
until 17@ == 109
0B47: samp close_current_dialog_with_button 1
0AB1: call_scm_func @bot 5 -1840.21 -1604.03 21.76 0 1
0AB1: call_scm_func @bot 5 -1838.44 -1642.34 21.75 0 1
end
jump @miner1
:mineron
0B35: samp 26@ = get_last_command_params
if
0AD4: 25@ = scan_string 26@ format "%d" 29@
then
24@ = 0
0AD4: 25@ = scan_string 26@ format "%d %d" 29@ 24@
0AF0: 30@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "cheatstate"
if
30@ == 0
then
0AF1: write_int_to_ini_file 1 path "cleo\miner.tmp" section "Temp" key "cheatstate"
0AF1: write_int_to_ini_file 24@ path "cleo\miner.tmp" section "Temp" key "spawnstate"
0AF1: write_int_to_ini_file 29@ path "cleo\miner.tmp" section "Temp" key "laps"
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "paused"
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "techno"
else
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Вы изменили кол-во кругов до сбора з/п на {e9c69a}%d{EAEAEA}." 0xe9c69a 29@
0AF1: write_int_to_ini_file 24@ path "cleo\miner.tmp" section "Temp" key "spawnstate"
0AF1: write_int_to_ini_file 29@ path "cleo\miner.tmp" section "Temp" key "laps"
end
else
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Вы забыли указать кол-во кругов до сбора з/п. Введите {e9c69a}/miner [кол-во кругов]{EAEAEA}." 0xe9c69a
end
0B43: samp cmd_ret
:minerpause
0AF0: 30@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "cheatstate"
if
30@ == 1
then
0AF0: 21@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "paused"
if
21@ == 0
then
0AF1: write_int_to_ini_file 1 path "cleo\miner.tmp" section "Temp" key "paused"
Actor.StorePos($PLAYER_ACTOR, 20@, 19@, 18@)
18@ -= 1.0
Actor.PutAt($PLAYER_ACTOR, 20@, 19@, 18@)
0AB3: var 740 = 0
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Вы поставили бота на паузу, введите {e9c69a}/minerpause{EAEAEA}, чтобы продолжить." 0xe9c69a
0ACD: show_text_highpriority "~W~MinerBot ~R~Paused" time 1500
else
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "paused"
0ACD: show_text_highpriority "~W~MinerBot ~G~Continued" time 1500
end
else
0AF8: samp add_message_to_chat "[MinerBot]: {EAEAEA}Введите {e9c69a}/miner [кол-во кругов]{EAEAEA}, чтобы включить бота-шахтёра." 0xe9c69a
end
0B43: samp cmd_ret
:mineroff
wait 0
0AB3: var 740 = 0
0ACD: show_text_highpriority "~W~MinerBot ~R~OFF" time 1500
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "cheatstate"
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "spawnstate"
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "paused"
wait 100
0B47: samp close_current_dialog_with_button 1
jump @miner
:minerse
28@ = 0
0208: 22@ = generate_random_float_in_range -3.0 1.0
22@ -= 1642.34
0AB1: call_scm_func @bot 5 -1838.44 22@ 21.75 0 1
0AF9: samp say_msg "/mn"
repeat
wait 0
0B4E: samp 17@ = get_current_dialog_id
until 17@ == 27
0B47: samp close_current_dialog_with_button 0
0AB1: call_scm_func @bot 5 -1840.21 -1604.03 21.76 0 1
0AB1: call_scm_func @bot 5 -1864.77 -1560.77 21.75 1 1
repeat
wait 0
0B4E: samp 17@ = get_current_dialog_id
until 17@ == 110
0B47: samp close_current_dialog_with_button 1
repeat
wait 0
0B4E: samp 17@ = get_current_dialog_id
until 17@ == 109
0B47: samp close_current_dialog_with_button 1
0AB1: call_scm_func @bot 5 -1840.21 -1604.03 21.76 0 1
0AB1: call_scm_func @bot 5 -1838.44 -1642.34 21.75 0 1
0AF1: write_int_to_ini_file 0 path "cleo\miner.tmp" section "Temp" key "techno"
jump @miner1
:bot
wait 0
if and
0AB0: key_pressed 112
not SAMP.ChatInputOpened
then
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
2@ -= 1.0
Actor.PutAt($PLAYER_ACTOR, 0@, 1@, 2@)
jump @mineroff
end
if
Actor.Dead($PLAYER_ACTOR)
then
jump @mineroff
end
0AF0: 6@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "techno"
if
6@ == 0
then
0B4E: samp 6@ = get_current_dialog_id
if
6@ == 0
then
0AF1: write_int_to_ini_file 1 path "cleo\miner.tmp" section "Temp" key "techno"
0B47: samp close_current_dialog_with_button 1
jump @minerse
end
end
0AF0: 5@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "paused"
if
5@ == 0
else_jump @bot
Player.InfiniteRun($PLAYER_ACTOR) = True
05D3: AS_actor $PLAYER_ACTOR goto_point 0@ 1@ 2@ mode 6 2000 ms
if
4@ == 1
then
0AB3: var 740 = 3
else
0AB3: var 740 = 2
end
Camera.SetBehindPlayer()
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 7@ closest_ped_to 8@
if
8@ > 0
then
0619: enable_actor 8@ collision_detection 0
end
if
7@ > 0
then
099A: set_car 7@ collision_detection 0
end
if
00ED: actor $PLAYER_ACTOR 0 near_point 0@ 1@ radius 1.9 1.9 on_foot
else_jump @bot
if
3@ == 1
then
wait 500
0AB3: var 740 = 0
0687: clear_actor $PLAYER_ACTOR task
end
0AB2: ret 0
:waiter
wait 0
0@ /= 100
for 3@ = 0 to 0@
if and
0AB0: key_pressed 112
not SAMP.ChatInputOpened
then
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
2@ -= 1.0
Actor.PutAt($PLAYER_ACTOR, 0@, 1@, 2@)
jump @mineroff
end
if
Actor.Dead($PLAYER_ACTOR)
then
jump @mineroff
end
0AF0: 6@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "techno"
if
6@ == 0
then
0B4E: samp 6@ = get_current_dialog_id
if
6@ == 0
then
0AF1: write_int_to_ini_file 1 path "cleo\miner.tmp" section "Temp" key "techno"
0B47: samp close_current_dialog_with_button 1
jump @minerse
end
end
0AF0: 4@ = read_int_from_ini_file "cleo\miner.tmp" section "Temp" key "paused"
if
4@ == 0
else_jump break
Camera.SetBehindPlayer()
wait 100
end
0AB2: ret 0