Diputado |
Дата: Понедельник, 06.04.2020, 21:06 | Сообщение # 1
|
CHEAT-MASTER
Сообщений: 740
Статус: Offline
|
farm at the sawmill
Описание:
Обновленный бот для лесопилки, открыть меню бота вы можете командой в чат "//leso". При поломки телеги или же срубленном дереве другим игроком, бот не будет стоять на месте , а побежит к бревну для спиливания.
В функционале присутствует:
[!] Рандомные прыжки [!] Информативное окно и обнуление статистики [!] Лимит кругов [!] Бег до сруба [!] Работа в свернутом режиме
Код открыт, а это значит вы сами можете модифицировать данного бота или же подстраивать все под себя.
Код script_name("Sawmill Bot"); script_author("Receiver"); script_properties("work-in-pause");
local sev = require 'lib.samp.events'; local imgui = require 'imgui'; local encoding = require 'encoding'; encoding.default = 'CP1251'; u8 = encoding.UTF8;
local main_frame = imgui.ImBool(false); local info_frame = imgui.ImBool(false); local img_chainsaw = imgui.CreateTextureFromFile(getGameDirectory() .. '\\moonloader\\config\\sawmill-bot\\chainsaw.png');
local im_enabled = imgui.ImBool(false); local im_circles = imgui.ImInt(0); local im_sprint = imgui.ImBool(false); local im_jumps = imgui.ImBool(false); local im_workinpause = imgui.ImBool(false);
local screen_width, screen_height = getScreenResolution(); local menu_width, menu_height = 300, 330;
STATUS = { GOING_TO_TREE = 1, COLLECTING_WOOD = 2, GOING_TO_UNLOAD = 3 }
local bstatus = 0;
local circles = 0; local earned = 0; local anti_freeze = false;
local font = renderCreateFont("Tahoma", 12, 3 + 6);
function ImRGBA(r, g, b, a) return imgui.ImVec4(r/255, g/255, b/255, a/255); end
function apply_custom_style() imgui.SwitchContext() local style = imgui.GetStyle() local colors = style.Colors local clr = imgui.Col local ImVec4 = imgui.ImVec4 local ImVec2 = imgui.ImVec2
style.WindowPadding = ImVec2(15, 15) style.WindowRounding = 6.0 style.FramePadding = ImVec2(7, 5) style.FrameRounding = 4.0 style.ItemSpacing = ImVec2(12, 8) style.ItemInnerSpacing = ImVec2(5, 6) style.IndentSpacing = 25.0 style.ScrollbarSize = 15.0 style.ScrollbarRounding = 9.0 style.GrabMinSize = 5.0 style.GrabRounding = 3.0
colors[clr.Text] = ImRGBA(255, 255, 255, 255); colors[clr.TextDisabled] = ImVec4(0.24, 0.23, 0.29, 1.00) colors[clr.WindowBg] = ImRGBA(29, 39, 43, 255); colors[clr.ChildWindowBg] = ImVec4(0.07, 0.07, 0.09, 1.00) colors[clr.PopupBg] = ImVec4(0.07, 0.07, 0.09, 1.00) colors[clr.Border] = ImVec4(0.80, 0.80, 0.83, 0.88) colors[clr.BorderShadow] = ImVec4(0.92, 0.91, 0.88, 0.00) colors[clr.FrameBg] = ImRGBA(50, 60, 65, 255); colors[clr.FrameBgHovered] = ImRGBA(31, 50, 70, 255); colors[clr.FrameBgActive] = ImRGBA(80, 140, 250, 255); colors[clr.TitleBg] = ImVec4(0.10, 0.09, 0.12, 1.00) colors[clr.TitleBgCollapsed] = ImVec4(1.00, 0.98, 0.95, 0.75) colors[clr.TitleBgActive] = ImVec4(0.07, 0.07, 0.09, 1.00) colors[clr.MenuBarBg] = ImVec4(0.10, 0.09, 0.12, 1.00) colors[clr.ScrollbarBg] = ImVec4(0.10, 0.09, 0.12, 1.00) colors[clr.ScrollbarGrab] = ImVec4(0.80, 0.80, 0.83, 0.31) colors[clr.ScrollbarGrabHovered] = ImVec4(0.56, 0.56, 0.58, 1.00) colors[clr.ScrollbarGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00) colors[clr.ComboBg] = ImVec4(0.19, 0.18, 0.21, 1.00) colors[clr.CheckMark] = ImRGBA(80, 140, 250, 255); colors[clr.SliderGrab] = ImVec4(0.80, 0.80, 0.83, 0.31) colors[clr.SliderGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00) colors[clr.Button] = ImRGBA(51, 65, 74, 255); colors[clr.ButtonHovered] = ImRGBA(80, 140, 250, 255); colors[clr.ButtonActive] = ImRGBA(15, 135, 250, 155); colors[clr.Header] = ImVec4(0.10, 0.09, 0.12, 1.00) colors[clr.HeaderHovered] = ImVec4(0.56, 0.56, 0.58, 1.00) colors[clr.HeaderActive] = ImVec4(0.06, 0.05, 0.07, 1.00) colors[clr.ResizeGrip] = ImVec4(0.00, 0.00, 0.00, 0.00) colors[clr.ResizeGripHovered] = ImVec4(0.56, 0.56, 0.58, 1.00) colors[clr.ResizeGripActive] = ImVec4(0.06, 0.05, 0.07, 1.00) colors[clr.CloseButton] = ImVec4(0.40, 0.39, 0.38, 0.16) colors[clr.CloseButtonHovered] = ImVec4(0.40, 0.39, 0.38, 0.39) colors[clr.CloseButtonActive] = ImVec4(0.40, 0.39, 0.38, 1.00) colors[clr.PlotLines] = ImVec4(0.40, 0.39, 0.38, 0.63) colors[clr.PlotLinesHovered] = ImVec4(0.25, 1.00, 0.00, 1.00) colors[clr.PlotHistogram] = ImVec4(0.40, 0.39, 0.38, 0.63) colors[clr.PlotHistogramHovered] = ImVec4(0.25, 1.00, 0.00, 1.00) colors[clr.TextSelectedBg] = ImRGBA(80, 140, 250, 255); colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73) end
function imgui.OnDrawFrame() apply_custom_style(); if main_frame.v then imgui.SetNextWindowPos(imgui.ImVec2(screen_width/2 - menu_width/2, screen_height/2 - menu_height/2), imgui.Cond.FirstUseEver); imgui.SetNextWindowSize(imgui.ImVec2(menu_width, menu_height)); imgui.Begin("##main_frame", main_frame, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoSavedSettings); imgui.Spacing(); imgui.SetCursorPosX(imgui.GetWindowSize().x/2 - 128/2); imgui.Image(img_chainsaw, imgui.ImVec2(128, 128)); imgui.Spacing(); if imgui.Checkbox(u8"Включить бота", im_enabled) then if im_enabled.v then if getCharModel(playerPed) ~= 16 then Message("Сначала начните работу на лесопилке!"); im_enabled.v = false; end bstatus = STATUS.GOING_TO_TREE; end end imgui.SameLine(); imgui.PushItemWidth(50); imgui.InputInt(u8"Лимит кругов", im_circles, 0, 0); imgui.Checkbox(u8"Бежать до дерева", im_sprint); imgui.Checkbox(u8"Рандомные прыжки", im_jumps); if (imgui.Checkbox(u8"Работа в свёрнутом режиме", im_workinpause)) then WorkInBackground(im_workinpause.v); end imgui.Checkbox(u8"Окно с информацией", info_frame); imgui.SameLine(); if info_frame.v then if imgui.Button(u8"Обнулить", imgui.ImVec2(100, 25)) then circles = 0; earned = 0; end end imgui.End(); end if info_frame.v then imgui.Begin("##info_frame", info_frame, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoSavedSettings); local STATUS_TEXT = { u8"Иду к ближайшему дереву", u8"Собираю древесину", u8"Иду к разгрузке древесины" }; imgui.Text(string.format(u8"Статус: %s\nКругов пройдено: %d/%d\nЗаработано: %d$", im_enabled.v and STATUS_TEXT[bstatus] or u8"Выключен", circles, im_circles.v, earned)); imgui.End(); end end
function main() repeat wait(0) until isSampAvailable() Message("Скрипт загружен. Владелец -> "..thisScript().authors[1]); sampRegisterChatCommand("/leso", function(args) main_frame.v = not main_frame.v; end) while true do wait(0); if main_frame.v then imgui.ShowCursor = true; imgui.Process = true; elseif info_frame.v then imgui.ShowCursor = false; imgui.Process = true; else imgui.Process = false; end if isPlayerPlaying(playerHandle) and im_enabled.v then if bstatus == STATUS.GOING_TO_TREE then local res, x, y, z = NearestObject(19198); if res then Message(string.format("Иду к дереву -> %.1f %.1f %.1f", x, y, z)); BeginToPoint(x, y, z, 3.000000, -255, im_sprint.v, im_jumps.v); wait(100); bstatus = STATUS.COLLECTING_WOOD; else im_enabled.v = false; end end if bstatus == STATUS.COLLECTING_WOOD then if sampTextdrawIsExists(2063) then for i = 2060, 2080 do if sampTextdrawIsExists(i) then local box, color, sizeW, sizeH = sampTextdrawGetBoxEnabledColorAndSize(i); if sampTextdrawGetStyle(i) == 5 then if sizeW >= 201.0 and sizeH >= 148.0 then sampSendClickTextdraw(i); end end end end end end if bstatus == STATUS.GOING_TO_UNLOAD and not anti_freeze then BeginToPoint(-1985.5122, -2368.3389, 30.6318, 1.000000, -255, false, false); anti_freeze = true; end end end end
function sev.onServerMessage(color, text) if im_enabled.v then if string.find(text, "^Загружено: (%d*) кг. Везите тележку с дровами на переработку.") then Message("Иду разгружать древесину"); anti_freeze = false; bstatus = STATUS.GOING_TO_UNLOAD; end if string.find(text, "^Вы сломали тележку") or string.find(text, "^Это дерево уже срублено") or string.find(text, "^Вернитесь к дереву") then bstatus = STATUS.GOING_TO_TREE; end local _, t_earned = string.match(text, "^Древесина разгружена.{FFFF00} %+(%d*)%$ {ffffff}к вашей зарплате. Заработано%:{FF0000} (%d*)%$"); if t_earned then bstatus = STATUS.GOING_TO_TREE; circles = circles + 1; earned = t_earned; if circles >= im_circles.v and im_circles.v ~= 0 then im_enabled.v = false; Message("Достигнут лимит кругов. Работа окончена!"); end end end end
--[[------------------------------------------------- ------------------- BOT FUNCTIONS ------------------- -------------------]-----------------------------]]--
function WorkInBackground(work) local memory = require 'memory' if work then memory.setuint8(7634870, 1) memory.setuint8(7635034, 1) memory.fill(7623723, 144, 8) memory.fill(5499528, 144, 6) else memory.setuint8(7634870, 0) memory.setuint8(7635034, 0) memory.hex2bin('5051FF1500838500', 7623723, 8) memory.hex2bin('0F847B010000', 5499528, 6) end end
function BeginToPoint(x, y, z, radius, move_code, isSprint, isJumping) repeat local posX, posY, posZ = GetCoordinates() SetAngle(x, y, z); MovePlayer(move_code, isSprint, isJumping); local dist = getDistanceBetweenCoords3d(x, y, z, posX, posY, z); wait(0) until not im_enabled.v or dist < radius end
function SetAngle(x, y, z) local posX, posY, posZ = getCharCoordinates(PLAYER_PED) x1 = x - posX y1 = y - posY vec2 = getHeadingFromVector2d(x1, y1) shit = math.rad(vec2) shit = shit + 4.7 setCameraPositionUnfixed(-0.3, shit) end
function MovePlayer(move_code, isSprint, isJumping) setGameKeyState(1, move_code) --[[255 - обычный бег назад -255 - обычный бег вперед 65535 - идти шагом вперед -65535 - идти шагом назад]] if isJumping then local rand = math.random(0, 9999999); if rand >= 9909999 then setGameKeyState(14, 255); end end if isSprint then setGameKeyState(16, 255) end end
function GetCoordinates() if isCharInAnyCar(playerPed) then local car = storeCarCharIsInNoSave(playerPed) return getCarCoordinates(car) else return getCharCoordinates(playerPed) end end
function NearestObject(id) local objects = {}; for _, v in pairs(getAllObjects()) do if getObjectModel(v) == id then local _, x, y, z = getObjectCoordinates(v) local x2,y2,z2 = getCharCoordinates(PLAYER_PED) local distance = getDistanceBetweenCoords3d(x, y, z, x2, y2, z2); table.insert(objects, {v, distance}); end end table.sort(objects, function(a, b) return (a[2] < b[2]) end); if objects[1] == nil then im_enabled.v = false; return false; end return getObjectCoordinates(objects[1][1]); end
function Message(text) sampAddChatMessage(string.format("%s » {ffffff}%s", thisScript().name, text), 0xFF6495ED); end
Автор данного бота "Receiver"
|
|
|
|