★Обновленный бот для лесопилки★ - Форум Cheat-Master.ru
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: [CM]OlegEhtler, [CM]ARM25, Rose_Winchester  
★Обновленный бот для лесопилки★
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"
Smit43 Дата: Понедельник, 06.04.2020, 21:51 | Сообщение # 2
Новичок
Сообщений: 1
Статус: Offline
Спасибо,все работает!
moooter Дата: Вторник, 07.04.2020, 10:42 | Сообщение # 3
Новичок
Сообщений: 5
Статус: Offline
куда кидать файл и как включать?
Diputado Дата: Вторник, 07.04.2020, 10:57 | Сообщение # 4
CHEAT-MASTER
Сообщений: 740
Статус: Offline
Цитата moooter ()
куда кидать файл и как включать?

Загружаешь moonloader в корень гта, скачиваешь бота и кидаешь в папку moonloader , устраиваешься на лесопилку и пишешь в чат //leso
moooter Дата: Вторник, 07.04.2020, 14:33 | Сообщение # 5
Новичок
Сообщений: 5
Статус: Offline
как выключить бота?
Rose_Winchester Дата: Вторник, 07.04.2020, 15:02 | Сообщение # 6
Знаток
Сообщений: 596
Статус: Offline
Цитата moooter ()
как выключить бота?

//leso


Good! Offical VK - https://vk.com/id506695315

Сообщение отредактировал Rose_Winchester - Вторник, 07.04.2020, 15:12
Diputado Дата: Среда, 08.04.2020, 00:57 | Сообщение # 7
CHEAT-MASTER
Сообщений: 740
Статус: Offline
Жду критики и предложений, кто пользуется - оставьте развёрнутый комментарий по работе бота.
BoomBoomPukan Дата: Четверг, 09.04.2020, 18:06 | Сообщение # 8
Новичок
Сообщений: 3
Статус: Offline
Возможно я тупой... Не работает, moonloader есть, закинул в него .lua. Устроился на лесопилку, написал //leso, ну и как бы ничего. SAMP 0.3.7 R1. Moonloader v026

Сообщение отредактировал BoomBoomPukan - Четверг, 09.04.2020, 18:52
Diputado Дата: Четверг, 09.04.2020, 18:17 | Сообщение # 9
CHEAT-MASTER
Сообщений: 740
Статус: Offline
Цитата BoomBoomPukan ()
Возможно я тупой... Не работает, moonloader есть, закинул в него .asi. Устроился на лесопилку, написал //leso, ну и как бы ничего. SAMP 0.3.7 R1. Moonloader v026

В папку moonloader нужно закинуть файл бота, он .lua формата
BoomBoomPukan Дата: Четверг, 09.04.2020, 18:21 | Сообщение # 10
Новичок
Сообщений: 3
Статус: Offline
Цитата Diputado ()
В папку moonloader нужно закинуть файл бота, он .lua формата

Да-да-да, не выспался, тупанул. Я закинул .lua, но не робит
Из зависимостей только moonloader?


Сообщение отредактировал BoomBoomPukan - Четверг, 09.04.2020, 18:34
Paveling Дата: Четверг, 09.04.2020, 18:46 | Сообщение # 11
Любитель
Сообщений: 48
Статус: Offline
Цитата BoomBoomPukan ()
Возможно я тупой... Не работает, moonloader есть, закинул в него .asi. Устроился на лесопилку, написал //leso, ну и как бы ничего. SAMP 0.3.7 R1. Moonloader v026

не возможно.
BoomBoomPukan Дата: Четверг, 09.04.2020, 18:51 | Сообщение # 12
Новичок
Сообщений: 3
Статус: Offline
Цитата Paveling ()
не возможно.

Что именно не возможно? Могу записать видео.
Diputado Дата: Четверг, 09.04.2020, 20:19 | Сообщение # 13
CHEAT-MASTER
Сообщений: 740
Статус: Offline
Цитата BoomBoomPukan ()
Из зависимостей только moonloader?

Естественно еще ImGUI.
Oleg2558 Дата: Суббота, 11.04.2020, 13:39 | Сообщение # 14
Боец
Сообщений: 105
Статус: Offline
Короче скачал данного бота.
Что могу сказать, функционал хороший, работает, бегает, все отлично.Единственное что, когда включаешь прыжки, он стопится за счет системы антибаннихопа.
Хотелось бы что бы он забирал ЗП после достижения лимита кругов, а то стоит на чекпоинте тупо и все.
+rep


На сайте с 07.05.2017

Сообщение отредактировал Oleg2558 - Суббота, 11.04.2020, 17:57
Diputado Дата: Суббота, 18.04.2020, 22:50 | Сообщение # 15
CHEAT-MASTER
Сообщений: 740
Статус: Offline
Цитата Oleg2558 ()
Хотелось бы что бы он забирал ЗП после достижения лимита кругов, а то стоит на чекпоинте тупо и все.

Дойдут руки, дополню тему, а вообще - код открыт, можешь попробовать сам под себя переделать или кому-то немного заплатить и скриптер сделает так, как ты хочешь

Добавлено (03.05.2020, 14:53)
---------------------------------------------
up

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: