- 21
- 0
- Версия MoonLoader
- Другое
Крч решил не много изменить скрипт от хистора трешер тулс, решил удалить 1 кнопку с вопросами и ответами на клады. в итоге выбивает ошибку, а разобраться не могу так как только начинаю программировать.
Просьба помочь с скриптом:
Ошибка:
:101002: ')' expected (to close '(' at line 857) near 'imgui'
Вот сам код:
script_name('treasuretools')
script_author('histor')
script_description('helper for arz players')
script_version('8')
require "lib.moonloader"
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local imgui = require 'mimgui'
local keys = require "vkeys"
local key = keys.VK_O
local ffi = require 'ffi'
local wm = require 'windows.message'
local new = imgui.new
local sampev = require 'lib.samp.events'
local inicfg = require "inicfg"
local directIni = "config//th8.ini"
local sizeX, sizeY = getScreenResolution()
local renderWindow = new.bool(false)
local new, str, sizeof = imgui.new, ffi.string, ffi.sizeof
local prf = "1488"
local font = {}
local search = new.char[256]()
local zoneActive = false
local mapUsed = false
local kdcond = false
local endkd = 'xx:xx:xx'
local fullmap = true
local coords = {}
local pool = {}
local finded = {}
local markers = {}
local rekey = false
local check = false
local check2 = false
local yavdemorgane = false
local xforklad, yforklad, zforklad = 0, 0, 0
local lower, sub, char, upper = string.lower, string.sub, string.char, string.upper
local concat = table.concat
-- initialization table
local lu_rus, ul_rus = {}, {}
for i = 192, 223 do
local A, a = char(i), char(i + 32)
ul_rus[A] = a
lu_rus[a] = A
end
local E, e = char(168), char(184)
ul_rus[E] = e
lu_rus[e] = E
function string.nlower(s)
s = lower(s)
local len, res = #s, {}
for i = 1, len do
local ch = sub(s, i, i)
res[i] = ul_rus[ch] or ch
end
return concat(res)
end
local mainini =
inicfg.load(
{th = {
bnotfonscreen = false,
bnotfinchat = false,
bsoundnotf = false,
brender = false,
btraser = false,
bpointsonmap = false,
bmarkers = false,
bshovel = false,
bdemorgan = false,
btmr = false,
sliderint1 = 500,
sliderint2 = 15,
int = 10,
bcolorint1 = 0,
bcolorint2 = 1,
colortest1 = 0xFFFFFFFF,
colortest2 = 0xFFFFFFFF,
c3r1 = 1.0,
c3r2 = 1.0,
c3r3 = 1.0,
c3t1 = 1.0,
c3t2 = 1.0,
c3t3 = 1.0,
btmrr = false,
bpc = false,
bdmg = false
}},"th8")
inicfg.save(mainini, 'th8.ini')
local nnint = 0
local nnint1 = 1
local nnint2 = 2
local colortest1 = mainini.th.colortest1
local colortest2 = mainini.th.colortest2
local color3render = imgui.new.float[3](mainini.th.c3r1, mainini.th.c3r2, mainini.th.c3r3)
local color3traser = imgui.new.float[3](mainini.th.c3t1, mainini.th.c3t2, mainini.th.c3t3)
local bnotfonscreen = new.bool(mainini.th.bnotfonscreen)
local bnotfinchat = new.bool(mainini.th.bnotfinchat)
local bsoundnotf = new.bool(mainini.th.bsoundnotf)
local brender = new.bool(mainini.th.brender)
local btraser = new.bool(mainini.th.btraser)
local bpointsonmap = new.bool(mainini.th.bpointsonmap)
local bmarkers = new.bool(mainini.th.bmarkers)
local bshovel = new.bool(mainini.th.bshovel)
local btmr = new.bool(mainini.th.btmr)
local btmrr = new.bool(mainini.th.btmrr)
local bpc = new.bool(mainini.th.bpc)
local bdmg = new.bool(mainini.th.bdmg)
local sliderint1 = new.int(mainini.th.sliderint1)
local sliderint2 = new.int(mainini.th.sliderint2)
local int = new.int(mainini.th.int)
local bcolorint1 = new.int(mainini.th.bcolorint1)
local bcolorint2 = new.int(mainini.th.bcolorint2)
local combo_int1 = new.int(bcolorint1[0])
local combo_int2 = new.int(bcolorint2[0])
local combo_colors = {
u8'[1]Зелёный',
u8'[2]Жёлтый',
u8'[3]Красный',
u8'[4]Синий',
u8'[5]Рыжий',
u8'[6]Белый',
u8'[7]Розовый',
u8'[8]Серый',
u8'[9]Голубой',
u8'[10]Малиновый'
}
local blip_color = {
'0x00FF00FF',
'0xFFFF00FF',
'0xFF0000FF',
'0x6666FFFF',
'0xFF5000FF',
'0xFFFFFFFF',
'0xFF00FFFF',
'0xAAAAAAFF',
'0x00FFFFFF',
'0xFF6060FF'
}
local ImItems = imgui.new['const char*'][#combo_colors](combo_colors)
function white_style()
imgui.SwitchContext()
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4
local ImVec2 = imgui.ImVec2
imgui.GetStyle().WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
imgui.GetStyle().ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
imgui.GetStyle().WindowPadding = imgui.ImVec2(5, 5)
imgui.GetStyle().FramePadding = imgui.ImVec2(5, 5)
imgui.GetStyle().ItemSpacing = imgui.ImVec2(5, 5)
imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(2, 2)
imgui.GetStyle().TouchExtraPadding = imgui.ImVec2(0, 0)
imgui.GetStyle().IndentSpacing = 0
--==[ BORDER ]==--
imgui.GetStyle().WindowBorderSize = 1
imgui.GetStyle().ChildBorderSize = 1
imgui.GetStyle().PopupBorderSize = 1
imgui.GetStyle().FrameBorderSize = 1
imgui.GetStyle().TabBorderSize = 1
imgui.GetStyle().ScrollbarSize = 15
imgui.GetStyle().GrabMinSize = 10
--==[ ROUNDING ]==--
imgui.GetStyle().WindowRounding = 8
imgui.GetStyle().ChildRounding = 8
imgui.GetStyle().FrameRounding = 8
imgui.GetStyle().PopupRounding = 8
imgui.GetStyle().ScrollbarRounding = 10
imgui.GetStyle().GrabRounding = 8
imgui.GetStyle().TabRounding = 8
colors[clr.Text] = ImVec4(0.95, 0.96, 0.98, 1.00)
colors[clr.TextDisabled] = ImVec4(0.29, 0.29, 0.29, 1.00)
colors[clr.WindowBg] = ImVec4(0.14, 0.14, 0.14, 1.00)
colors[clr.PopupBg] = ImVec4(0.08, 0.08, 0.08, 0.94)
colors[clr.FrameBg] = ImVec4(0.22, 0.22, 0.22, 1.00)
colors[clr.FrameBgHovered] = ImVec4(0.18, 0.18, 0.18, 1.00)
colors[clr.FrameBgActive] = ImVec4(0.14, 0.14, 0.14, 1.00)
colors[clr.TitleBg] = ImVec4(0.14, 0.14, 0.14, 0.81)
colors[clr.TitleBgActive] = ImVec4(0.14, 0.14, 0.14, 1.00)
colors[clr.TitleBgCollapsed] = ImVec4(0.00, 0.00, 0.00, 0.51)
colors[clr.MenuBarBg] = ImVec4(0.20, 0.20, 0.20, 1.00)
colors[clr.ScrollbarBg] = ImVec4(0.14, 0.14, 0.14, 1.00)
colors[clr.ScrollbarGrab] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.ScrollbarGrabHovered] = ImVec4(1.00, 0.39, 0.39, 1.00)
colors[clr.ScrollbarGrabActive] = ImVec4(1.00, 0.21, 0.21, 1.00)
colors[clr.CheckMark] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.SliderGrab] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.SliderGrabActive] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.Button] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.ButtonHovered] = ImVec4(1.00, 0.39, 0.39, 1.00)
colors[clr.ButtonActive] = ImVec4(1.00, 0.21, 0.21, 1.00)
colors[clr.Header] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.HeaderHovered] = ImVec4(1.00, 0.39, 0.39, 1.00)
colors[clr.HeaderActive] = ImVec4(1.00, 0.21, 0.21, 1.00)
colors[clr.ResizeGrip] = ImVec4(1.00, 0.28, 0.28, 1.00)
colors[clr.ResizeGripHovered] = ImVec4(1.00, 0.39, 0.39, 1.00)
colors[clr.ResizeGripActive] = ImVec4(1.00, 0.19, 0.19, 1.00)
colors[clr.PlotLines] = ImVec4(0.61, 0.61, 0.61, 1.00)
colors[clr.PlotLinesHovered] = ImVec4(1.00, 0.43, 0.35, 1.00)
colors[clr.PlotHistogram] = ImVec4(1.00, 0.21, 0.21, 1.00)
colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.18, 0.18, 1.00)
colors[clr.TextSelectedBg] = ImVec4(1.00, 0.32, 0.32, 1.00)
colors[clr.Border] = ImVec4(1.00, 0.28, 0.28, 1.00)
end
function join_argb(a, r, g, b)
local argb = b -- b
argb = bit.bor(argb, bit.lshift(g, 8)) -- g
argb = bit.bor(argb, bit.lshift(r, 16)) -- r
argb = bit.bor(argb, bit.lshift(a, 24)) -- a
return argb
end
function imgui.TodoCheck(label, bool, a_speed, description)
local p = imgui.GetCursorScreenPos()
local dl = imgui.GetWindowDrawList()
local clicked = false
local label = label or "" -- Название
local outline = 2.0 -- Толщина обводки
local r = imgui.GetTextLineHeightWithSpacing() / 2 -- Радиус кружочка
local s = a_speed or 0.2 -- Скорость анимации
local function ImSaturate(f)
return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
end
if imgui.InvisibleButton(label, imgui.ImVec2(r * 2, r * 2)) then
bool[0] = not bool[0]
LastTime[label] = os.clock()
LastActive[label] = true
clicked = true
end
local w = bool[0] and 1.0 or 0.0
local bebra = 0.0
if LastTime == nil then
LastTime = {}
end
if LastActive == nil then
LastActive = {}
end
if LastActive[label] then
local time = os.clock() - LastTime[label]
if time <= s then
local anim = ImSaturate(time / s)
w = bool[0] and anim or 1.0 - anim
bebra = anim
else
LastActive[label] = false
end
end
local c_color = bool[0] and imgui.ImVec4(1.00, 0.28, 0.28, 1.00) or (imgui.IsItemHovered(0) and imgui.ImVec4(1, 1, 1, 0.6) or imgui.ImVec4(1, 1, 1, 0.4)) -- Цвет обводки кружочка
local cin_color = imgui.ImVec4(1.00, 0.28, 0.28, 1.00) -- Цвет кружочка1.00, 0.28, 0.28, 1.00
local cline_color = imgui.ImVec4(1.00, 1.00, 1.00, w) -- Цвет галки
local cbebra_color = imgui.ImVec4(1.00, 1.00, 1.00, (1 - bebra) * 0.2)
dl:AddCircleFilled(imgui.ImVec2(p.x + r, p.y + r), r * bebra * 2, imgui.GetColorU32Vec4(cbebra_color), r + 5, outline)
dl:AddCircleFilled(imgui.ImVec2(p.x + r, p.y + r), r * w, imgui.GetColorU32Vec4(cin_color), r + 5)
dl:AddCircle(imgui.ImVec2(p.x + r, p.y + r), r, imgui.GetColorU32Vec4(c_color), r + 5, outline)
dl:AddLine(imgui.ImVec2(p.x + r, p.y + w * (r + r / 2)), imgui.ImVec2(p.x, p.y + w * (r / 2)), imgui.GetColorU32Vec4(cline_color), outline)
dl:AddLine(imgui.ImVec2(p.x + r, p.y + w * (r + r / 2)), imgui.ImVec2(p.x + w * (r + r / 2), p.y + w * (r / 2)), imgui.GetColorU32Vec4(cline_color), outline)
dl:AddText(imgui.ImVec2(p.x + r * 2.7, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(imgui.ImVec4(1 , 1, 1, 1)), label)
if imgui.IsItemHovered() then
imgui.BeginTooltip()
imgui.PushTextWrapPos(600)
imgui.TextUnformatted(u8(description))
imgui.PopTextWrapPos()
imgui.EndTooltip()
end
return clicked
end
function remove_all(bool_update)
for i = 1, #coords do
if pool[i] ~= nil then
if bool_update then
changeBlipColour(pool[i], finded[i] and blip_color[bcolorint1[0] + 1] or blip_color[bcolorint2[0] + 1])
else
removeBlip(pool[i])
pool[i] = nil
end
end
end
end
function remove_markers()
for i, marker in pairs(markers) do
removeUser3dMarker(marker)
markers[i] = nil
end
end
function plural(n, forms)
n = math.abs(n) % 100
if n % 10 == 1 and n ~= 11 then
return forms[1]
elseif 2 <= n % 10 and n % 10 <= 4 and (n < 10 or n >= 20) then
return forms[2]
end
return forms[3]
end
function sampev.onSetInterior(interior)
if true then
if interior == 236 then
bnotfonscreen[0] = false
bnotfinchat[0] = false
bsoundnotf[0] = false
brender[0] = false
btraser[0] = false
bpc[0] = false
end
end
end
local ui_meta = {
__index = function(self, v)
if v == "switch" then
local switch = function()
if self.process and self.process:status() ~= "dead" then
return false -- // Предыдущая анимация ещё не завершилась!
end
self.timer = os.clock()
self.state = not self.state
self.process = lua_thread.create(function()
local bringFloatTo = function(from, to, start_time, duration)
local timer = os.clock() - start_time
if timer >= 0.00 and timer <= duration then
local count = timer / (duration / 100)
return count * ((to - from) / 100)
end
return (timer > duration) and to or from
end
while true do wait(0)
local a = bringFloatTo(0.00, 1.00, self.timer, self.duration)
self.alpha = self.state and a or 1.00 - a
if a == 1.00 then break end
end
end)
return true -- // Состояние окна изменено!
end
return switch
end
if v == "alpha" then
return self.state and 1.00 or 0.00
end
end
}
local menu = { state = false, duration = 0.5 }
setmetatable(menu, ui_meta)
local info = { state = false, duration = 0.5 }
setmetatable(info, ui_meta)
imgui.CloseButton = function(size, thickness, textColor, color, colorHovered, colorClicked)
local col = {
text = textColor or imgui.GetStyle().Colors[imgui.Col.Button],
color = color or imgui.GetStyle().Colors[imgui.Col.Button],
colorHovered = colorHovered or imgui.GetStyle().Colors[imgui.Col.ButtonHovered],
colorClicked = colorClicked or imgui.GetStyle().Colors[imgui.Col.ButtonActive],
}
local c = imgui.GetCursorPos()
local p = imgui.GetCursorScreenPos()
local DL = imgui.GetWindowDrawList()
local tx = imgui.CalcTextSize('X')
local curX, curY = getCursorPos()
DL:AddCircle(p, size, imgui.GetColorU32Vec4(col.color), 100, thickness)
if curX > p.x - size and curX < p.x + size then
if curY > p.y - size and curY < p.y + size then
DL:AddLine(imgui.ImVec2(p.x - size + thickness, p.y - size + thickness), imgui.ImVec2(p.x + size - thickness, p.y + size - thickness), imgui.GetColorU32Vec4(col.color), thickness)
DL:AddLine(imgui.ImVec2(p.x + size - thickness, p.y - size + thickness), imgui.ImVec2(p.x - size + thickness, p.y + size - thickness), imgui.GetColorU32Vec4(col.color), thickness)
end
end
imgui.SetCursorPos(imgui.ImVec2(c.x - size, c.y - size))
return imgui.InvisibleButton('CLOSEBUTTONBEBRA', imgui.ImVec2(size * 2, size * 2))
end
function imgui.CenterText(text)
local width = imgui.GetWindowWidth()
local calc = imgui.CalcTextSize(text)
imgui.SetCursorPosX( width / 2 - calc.x / 2 )
imgui.Text(text)
end
function sampev.onSetInterior(interior)
if interior == 236 and bdmg[0] then
bnotfonscreen[0] = false
bnotfinchat[0] = false
bsoundnotf[0] = false
brender[0] = false
btraser[0] = false
bpc[0] = false
end
end
function sampev.onCreateGangZone(zoneId, squareStart, squareEnd, color)
if color == -16776961 then
mapUsed = true
kladZone = zoneId
left = squareStart.x
up = squareStart.y
right = squareEnd.x
down = squareEnd.y
print('l: ' .. left .. '; u: ' .. up .. '; r: ' .. right .. '; d: ' .. down)
end
end
function sampev.onGangZoneDestroy(zoneId1)
if zoneId1 == kladZone then
if btmr[0] then
removeGangZone(610)
addGangZone(610, left, up, right, down, -2130706433)
zoneActive = true
sampAddChatMessage(prf .. 'Территория возвращена! Отсчёт кулдауна запущен!', -1)
end
timekd = os.date('%X')
hourkd, minutekd, secundkd = timekd:match('(%d+):(%d+):(%d+)')
if minutekd + 30 < 60 then
endkd = hourkd .. ':' .. tonumber(minutekd) + 30 .. ':' .. secundkd
else
endkd = hourkd + 1 .. ':' .. tonumber(minutekd) - 60 + 30 .. ':' .. secundkd
end
kdcond = true
end
end
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
wait(100)
sampRegisterChatCommand("MINEPOC", menu.switch)
addEventHandler('onScriptTerminate', function(script, quit)
if script == thisScript() then
saveCFG()
remove_markers()
remove_all()
end
end)
if btmrr[0] then
sampRegisterChatCommand('zonedel', zonedel)
sampRegisterChatCommand('zonecopy', zonecopy)
sampRegisterChatCommand('zonepaste', zonepaste)
check = true
end
if bpc[0] then
sampRegisterChatCommand('tcopy', tcopy)
sampRegisterChatCommand('tpaste', tpaste)
check2 = true
end
coords, exact_count = {}, 0
local fontforrender = renderCreateFont("Arial", int[0], 5)
local fontforscreen = renderCreateFont("Arial", 50, 5)
local X, Y = getScreenResolution()
while true do
wait(0)
local timenow = os.date('%X')
if timenow == endkd then
sampAddChatMessage(prf..'Кулдаун прошел! Карту можно использовать!', -1)
kdcond = false
endkd = 'xx:xx:xx'
end
remove_markers()
if yavdemorgane then
bnotfonscreen[0] = false
bnotfinchat[0] = false
bsoundnotf[0] = false
brender[0] = false
btraser[0] = false
end
if bpointsonmap[0] then
local A = { getCharCoordinates(PLAYER_PED) }
for i, B in ipairs(coords) do
local dist = getDistanceBetweenCoords3d(A[1], A[2], A[3], B[1], B[2], B[3])
if not fullmap and B[4] == 0 then
if pool[i] ~= nil then
removeBlip(pool[i])
pool[i] = nil
end
goto skip
end
if dist <= 20 and bmarkers[0] then
markers[i] = createUser3dMarker(B[1], B[2], B[3] + 1.5, 4)
end
if dist <= sliderint1[0] and pool[i] == nil then
pool[i] = addBlipForCoord(B[1], B[2], B[3])
changeBlipColour(pool[i], finded[i] and blip_color[bcolorint2[0] + 1] or blip_color[bcolorint1[0] + 1])
elseif dist <= sliderint2[0] and finded[i] == nil then
finded[i] = true
changeBlipColour(pool[i], blip_color[bcolorint2[0] + 1])
elseif dist > sliderint1[0] and pool[i] ~= nil then
removeBlip(pool[i])
pool[i] = nil
end
::skip::
end
end
if bshovel[0] then
if isKeyJustPressed(keys.VK_O) and isKeyCheckAvailable() then
sampSendChat("/gun")
end
end
if bnotfonscreen[0] or bsoundnotf[0] or brender[0] or btraser[0] then
for _, v in pairs(getAllObjects()) do
local model = getObjectModel(v)
if model == 2680 or model == 1271 then
if bnotfonscreen[0] then
renderFontDrawText(fontforscreen, 'Клад где-то {00FF00}рядом!', X/3, Y/4, 0xFF00FF00)
end
if bsoundnotf[0] then
addOneOffSound(0.0, 0.0, 0.0, 1137)
end
end
if isObjectOnScreen(v) then
if model == 2680 or model == 1271 then
local _, x, y, z = getObjectCoordinates(v)
local x1, y1 = convert3DCoordsToScreen(x,y,z)
local x2,y2,z2 = getCharCoordinates(PLAYER_PED)
local x10, y10 = convert3DCoordsToScreen(x2,y2,z2)
local distance = string.format("%.0f", getDistanceBetweenCoords3d(x, y, z, x2, y2, z2))
if bpc[0] and model == 2680 then
local _, x, y, z = getObjectCoordinates(v)
xforklad, yforklad, zforklad = x, y, z
end
if brender[0] then
renderFontDrawText(fontforrender, 'Клад'..'['..distance..']', x1, y1, colortest1)
end
if btraser[0] then
renderDrawLine(x10, y10, x1, y1, 1.0, colortest2)
end
end
end
end
end
if nnint ~= int[0] then
nnint = int[0]
fontforrender = renderCreateFont("Arial", nnint, 5)
end
if nnint1 ~= combo_int1[0] then
nnint1 = combo_int1[0]
bcolorint1[0] = nnint1
remove_markers()
remove_all()
end
if nnint2 ~= combo_int2[0] then
nnint2 = combo_int2[0]
bcolorint2[0] = nnint2
remove_markers()
remove_all()
end
if menu.state then
renderFontDrawText(fontforrender, 'Клад'..'['..'distance'..']', 400, 400, colortest1)
renderDrawLine(450, 450, 450, 500, 1.0, colortest2)
end
if bpointsonmap[0] then
rekey = true
end
if not bpointsonmap[0] and rekey then
remove_all()
remove_markers()
rekey = false
end
end
end
function sampev.onCreateObject(id, data)
if data.modelId == 2680 then
lua_thread.create(function()
wait(50)
if bnotfinchat[0] then
sampAddChatMessage(prf..'Клад где-то рядом!', -1)
end
if bpc[0] then
sampAddChatMessage(prf..'Напишите {8B0000}/tcopy{808080}, чтобы скопировать координаты клада!', -1)
end
end)
end
end
function zonedel()
if btmrr[0] then
removeGangZone(610)
sampAddChatMessage(prf .. 'Прошлая территория была удалена!', -1)
end
end
function zonecopy()
if btmrr[0] then
if mapUsed then
setClipboardText('/zonepaste l: ' .. left .. '; u: ' .. up .. '; r: ' .. right .. '; d: ' .. down)
print('/zonepaste l: ' .. left .. '; u: ' .. up .. '; r: ' .. right .. '; d: ' .. down .. ' - скопировано')
sampAddChatMessage(prf .. 'Скопировано! Отправь это человеку, с которым хочешь поделиться координатами.', -1)
else
sampAddChatMessage(prf .. 'Активируй карту кладов, чтобы скопировать координаты.', -1)
end
end
end
function tcopy()
if bpc[0] then
setClipboardText('/tpaste x: ' .. xforklad .. '; y: ' .. yforklad .. '; z: ' .. zforklad)
sampAddChatMessage(prf..'Скопировано! Отправь это человеку, с которым хочешь поделиться координатами.', -1)
end
end
function tpaste(coord)
if bpc[0] then
if coord:match('x: (.*); y: (.*); z: (.*)') then
local x, y, z = coord:match('x: (.*); y: (.*); z: (.*)')
placeWaypoint(x, y, z)
setMarker(2, x, y, z, 1, -1)
sampAddChatMessage(prf .. 'Метка успешно добавлена на твою карту!', -1)
else
sampAddChatMessage(prf .. 'Не тот формат! Вставь сюда координаты, которые тебе отправил друг в формате xyz.', -1)
end
end
end
function setMarker(type, x, y, z, radius, color)
deleteCheckpoint(marker)
removeBlip(checkpoint)
checkpoint = addBlipForCoord(x, y, z)
marker = createCheckpoint(type, x, y, z, 1, 1, 1, radius)
changeBlipColour(checkpoint, color)
lua_thread.create(function()
repeat
wait(0)
local x1, y1, z1 = getCharCoordinates(PLAYER_PED)
until getDistanceBetweenCoords3d(x, y, z, x1, y1, z1) < radius or not doesBlipExist(checkpoint)
deleteCheckpoint(marker)
removeBlip(checkpoint)
addOneOffSound(0, 0, 0, 1149)
end)
end
function zonepaste(coord)
if btmrr[0] then
zonepaste = not zonepaste
if zonepaste then
if #coord ~= 0 then
if coord:match('l: (.*); u: (.*); r: (.*); d: (.*)') then
pLeft, pUp, pRight, pDown = coord:match('l: (.*); u: (.*); r: (.*); d: (.*)')
removeGangZone(610)
addGangZone(610, pLeft, pUp, pRight, pDown, -2130706433) -- -1000070000
zoneActive = true
sampAddChatMessage(prf .. 'Территория была успешно добавлена на твою карту!', -1)
else
sampAddChatMessage(prf .. 'Не тот формат! Вставь сюда координаты, которые тебе отправил друг с картой кладов.', -1)
end
else
sampAddChatMessage(prf .. 'Ты ничего не ввёл! Вставь сюда координаты, которые тебе отправил друг с картой кладов.', -1)
end
else
if zoneActive then
removeGangZone(610)
zoneActive = false
sampAddChatMessage(prf .. 'Территория была удалена. Чтобы вернуть, введи координаты еще раз!', -1)
else
sampAddChatMessage(prf .. 'Не тот формат! Вставь сюда координаты, которые тебе отправил друг с картой кладов.', -1)
end
end
end
end
function saveCFG()
mainini.th.bnotfonscreen = bnotfonscreen[0]
mainini.th.bnotfinchat = bnotfinchat[0]
mainini.th.bsoundnotf = bsoundnotf[0]
mainini.th.brender = brender[0]
mainini.th.btraser = btraser[0]
mainini.th.bpointsonmap = bpointsonmap[0]
mainini.th.bmarkers = bmarkers[0]
mainini.th.bshovel = bshovel[0]
mainini.th.btmr = btmr[0]
mainini.th.btmrr = btmrr[0]
mainini.th.sliderint1 = sliderint1[0]
mainini.th.sliderint2 = sliderint2[0]
mainini.th.int = int[0]
mainini.th.bcolorint1 = combo_int1[0]
mainini.th.bcolorint2 = combo_int2[0]
mainini.th.colortest1 = colortest1
mainini.th.colortest2 = colortest2
mainini.th.c3r1 = color3render[0]
mainini.th.c3r2 = color3render[1]
mainini.th.c3r3 = color3render[2]
mainini.th.c3t1 = color3traser[0]
mainini.th.c3t2 = color3traser[1]
mainini.th.c3t3 = color3traser[2]
mainini.th.bpc = bpc[0]
mainini.th.bdmg = bdmg[0]
inicfg.save(mainini, 'th8.ini')
end
function cmd_histor(arg)
renderWindow[0] = not renderWindow[0]
end
function isKeyCheckAvailable()
if not isSampLoaded() then
return true
end
if not isSampfuncsLoaded() then
return not sampIsChatInputActive() and not sampIsDialogActive()
end
return not sampIsChatInputActive() and not sampIsDialogActive() and not isSampfuncsConsoleActive()
end
function onWindowMessage(msg, wparam, lparam)
if msg == 0x100 or msg == 0x101 then
if (wparam == (27)--[[esc]] and (menu.state)) and not isPauseMenuActive() then
consumeWindowMessage(true, false)
if msg == 0x101 then
if menu.state then
menu.switch()
end
end
end
end
if msg == 0x100 or msg == 0x101 then
if (wparam == (27)--[[esc]] and (info.state)) and not isPauseMenuActive() then
consumeWindowMessage(true, false)
if msg == 0x101 then
if info.state then
info.switch()
end
end
end
end
end
function imgui.TextColoredRGB(text)
local style = imgui.GetStyle()
local colors = style.Colors
local col = imgui.Col
local designText = function(text__)
local pos = imgui.GetCursorPos()
if sampGetChatDisplayMode() == 2 then
for i = 1, 1 --[[Степень тени]] do
imgui.SetCursorPos(imgui.ImVec2(pos.x + i, pos.y))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
imgui.SetCursorPos(imgui.ImVec2(pos.x - i, pos.y))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
imgui.SetCursorPos(imgui.ImVec2(pos.x, pos.y + i))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
imgui.SetCursorPos(imgui.ImVec2(pos.x, pos.y - i))
imgui.TextColored(imgui.ImVec4(0, 0, 0, 1), text__) -- shadow
end
end
imgui.SetCursorPos(pos)
end
local text = text:gsub('{(%x%x%x%x%x%x)}', '{%1FF}')
local color = colors[col.Text]
local start = 1
local a, b = text:find('{........}', start)
while a do
local t = text:sub(start, a - 1)
if #t > 0 then
designText(t)
imgui.TextColored(color, t)
imgui.SameLine(nil, 0)
end
local clr = text:sub(a + 1, b - 1)
if clr:upper() == 'STANDART' then color = colors[col.Text]
else
clr = tonumber(clr, 16)
if clr then
local r = bit.band(bit.rshift(clr, 24), 0xFF)
local g = bit.band(bit.rshift(clr, 16), 0xFF)
local b = bit.band(bit.rshift(clr, 8), 0xFF)
local a = bit.band(clr, 0xFF)
color = imgui.ImVec4(r / 255, g / 255, b / 255, a / 255)
end
end
start = b + 1
a, b = text:find('{........}', start)
end
imgui.NewLine()
if #text >= start then
imgui.SameLine(nil, 0)
designText(text:sub(start))
imgui.TextColored(color, text:sub(start))
end
end
function addGangZone(id, left, up, right, down, color) -- Создание ганг-зоны.
local bs = raknetNewBitStream()
raknetBitStreamWriteInt16(bs, id)
raknetBitStreamWriteFloat(bs, left)
raknetBitStreamWriteFloat(bs, up)
raknetBitStreamWriteFloat(bs, right)
raknetBitStreamWriteFloat(bs, down)
raknetBitStreamWriteInt32(bs, color)
raknetEmulRpcReceiveBitStream(108, bs)
raknetDeleteBitStream(bs)
end
function removeGangZone(id) -- Удаление ганг-зоны по ID
local bs = raknetNewBitStream()
raknetBitStreamWriteInt16(bs, id)
raknetEmulRpcReceiveBitStream(120, bs)
raknetDeleteBitStream(bs)
end
imgui.OnInitialize(function()
imgui.GetIO().IniFilename = nil
white_style()
local glyph_ranges = imgui.GetIO().Fonts:GetGlyphRangesCyrillic()
local path = getFolderPath(0x14) .. '\\trebucbd.ttf'
local path2 = getFolderPath(0x14) .. '\\agencyr.ttf'
imgui.GetIO().Fonts:Clear() -- Удаляем стандартный шрифт на 14
imgui.GetIO().Fonts:AddFontFromFileTTF(path, 15.0, nil, glyph_ranges) -- этот шрифт на 15 будет стандартным
-- дополнительные шриты:
font[24] = imgui.GetIO().Fonts:AddFontFromFileTTF(path2, 25.0, nil, glyph_ranges)
font[25] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 25.0, nil, glyph_ranges)
font[15] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 15.0, nil, glyph_ranges)
white_style()
end)
local newFrame = imgui.OnFrame(
function() return menu.alpha > 0.00 end,
function(self)
local xsize, ysize = 1000, 500
local bysize = 310
local bxsize = 243
self.HideCursor = not menu.state -- // Курсор будет убираться на моменте, когда окно начинает исчезать
imgui.PushStyleVarFloat(imgui.StyleVar.Alpha, menu.alpha)
imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.Begin("Main Window", _, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar)
imgui.PushFont(font[25])
imgui.TextColored(imgui.ImVec4(1.00, 0.28, 0.28, 1.00), u8'TREASURE TOOLS', imgui.SameLine())
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), u8'by histor | Version ', imgui.SameLine())
imgui.TextColored(imgui.ImVec4(0.00, 1.00, 0.00, 1.00), u8'8.0 ', imgui.SameLine())
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), u8'Map cooldown: ', imgui.SameLine())
imgui.TextColored(imgui.ImVec4(0.00, 1.00, 0.00, 1.00), u8(endkd), imgui.SameLine())
imgui.PopFont()
imgui.BeginChild(u8"Информация", imgui.ImVec2(xsize-231, 240), true)
imgui.PushFont(font[25])
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), u8'Информация', imgui.SameLine())
imgui.PopFont()
--{FF0000} - красный
--{00FF00} - зелёный
--{FFFFFF} - белый
imgui.TextColoredRGB(u8'{FF0000} Treasure Tools {FFFFFF}- набор полезных инструментов, который будет полезен для всех кладоискателей {FF0000}Аризоны РП{FFFFFF}.')
imgui.TextColoredRGB(u8' Функции разделены на {00FF00}3{FFFFFF} категории: "{00FF00}Уведомления{FFFFFF}" | "{00FF00}Маркеры на карте{FFFFFF}" | "{00FF00}Дополнительные функции{FFFFFF}".')
imgui.TextColoredRGB(u8' {00FF00}Информация{FFFFFF} о функции можно узнать наведя курсор на {FF0000}круглый чекбокс {FFFFFF}функции.')
imgui.TextColoredRGB(u8' Map cooldown: {00FF00}xx:xx:xx{FFFFFF} - это поле, в котором Вы увидите время окончания {00FF00}кулдауна{FFFFFF} на использование карты кладов.')
imgui.TextColoredRGB(u8' Клады на Аризоне можно искать с {00FF00}10 уровня {FFFFFF}при наличии {00FF00}лицензии на раскопки{FFFFFF} и {00FF00}лопаты{FFFFFF}.')
imgui.TextColoredRGB(u8' В {00FF00}хелпере{FFFFFF} есть {FF0000}запрещённые функции{FFFFFF}. {FF0000}Внимательно {FFFFFF}читайте {00FF00}правила{FFFFFF} вашего сервера!')
imgui.TextColoredRGB(u8' Часть функционала была взята у {00FF00}других авторов{FFFFFF}. Спасибо им{FF0000}<3')
imgui.TextColoredRGB(u8' Отдельное спасибо парням из {FF0000}Armor ST{FFFFFF}: {00FF00}Armor{FFFFFF}, {00FF00}kjor32{FFFFFF}, {00FF00}ecl1pse{FFFFFF} - {FF0000}вы лучшие)')
imgui.TextColoredRGB(u8' По любым вопросам обращаться в {00FF00}ВК{FFFFFF}, {00FF00}Дискорд{FFFFFF}, {00FF00}Телеграм{FFFFFF}: {00FF00}vk.com/younghistor{FFFFFF} | {00FF00}histor#8461{FFFFFF} | {00FF00}@younghistor')
imgui.EndChild()
imgui.BeginChild(u8"Уведомления", imgui.ImVec2(bxsize, bysize), true)
imgui.PushFont(font[25])
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), u8'Уведомления:', imgui.SameLine())
imgui.PopFont()
imgui.TodoCheck(u8"1) Уведомление на экране", bnotfonscreen, _, "Функция показывает текст на экране, когда рядом находится возможный клад.")
imgui.TodoCheck(u8"2) Уведомление в чате", bnotfinchat, _, "Функция отправляет сообщение в чат, когда рядом находится возможный клад.")
imgui.TodoCheck(u8"3) Звуковое уведомление", bsoundnotf, _, "Функция воспроизводит звук, когда рядом находится возможный клад.")
imgui.TodoCheck(u8"4) Рендер кладов", brender, _, "Функция показывает место возможного клада, когда он находится рядом.")
if brender[0] then
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Размер текста рендера:')
imgui.Text(' ^')
imgui.SameLine()
imgui.SliderInt("##рендер кладов", int, 10, 20)
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Цвет текста рендера:')
imgui.Text(' ^')
imgui.SameLine()
if imgui.ColorEdit3(u8'##colorebat1', color3render, imgui.ColorEditFlags.NoLabel) then
local clr = join_argb(0, color3render[0] * 255, color3render[1] * 255, color3render[2] * 255)
colortest1 = '0xFF'..('%06X'):format(clr)
end
end
imgui.TodoCheck(u8"5) Трасер", btraser, _, "Функция рисует линию к возможному кладу, когда он находится рядом.")
if btraser[0] then
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Цвет трасера:')
imgui.Text(' ^')
imgui.SameLine()
if imgui.ColorEdit3(u8'##colorebat2', color3traser, imgui.ColorEditFlags.NoLabel) then
local clr = join_argb(0, color3traser[0] * 255, color3traser[1] * 255, color3traser[2] * 255)
colortest2 = '0xFF'..('%06X'):format(clr)
end
end
imgui.EndChild()
imgui.SameLine()
imgui.BeginChild(u8"Маркеры на карте", imgui.ImVec2(273, bysize), true)
imgui.PushFont(font[25])
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), u8'Маркеры на карте:', imgui.SameLine())
imgui.TextColored(imgui.ImVec4(0.00, 1.00, 0.00, 1.00), u8(#coords), imgui.SameLine())
imgui.PopFont()
imgui.TodoCheck(u8"Позиции кладов:", bpointsonmap, _, "Функция показывает метки спавна кладов на карте.")
if bpointsonmap[0] then
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Цвет не проверенных меток:')
imgui.Text(' ^')
imgui.SameLine()
imgui.Combo(u8'###1', combo_int1, ImItems, #combo_colors)
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Радиус обычных меток:')
imgui.Text(' ^')
imgui.SameLine()
imgui.SliderInt(u8'~500м', sliderint1, 100, 1000)
imgui.Text(' >')
imgui.SameLine()
imgui.TodoCheck(u8"3D маркеры:", bmarkers, _, "Функция расставляет 3D маркеры в местах спавна кладов.")
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Цвет проверенных меток:')
imgui.Text(' ^')
imgui.SameLine()
imgui.Combo(u8'###2', combo_int2, ImItems, #combo_colors)
imgui.Text(' >')
imgui.SameLine()
imgui.Text(u8'Радиус проверки меток:')
imgui.Text(' ^')
imgui.SameLine()
imgui.SliderInt(u8'~15м', sliderint2, 3, 25)
end
imgui.EndChild()
imgui.SameLine()
imgui.BeginChild(u8"Доп.функции", imgui.ImVec2(bxsize, bysize), true)
imgui.PushFont(font[25])
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), u8'Доп.функции:', imgui.SameLine())
imgui.PopFont()
imgui.TodoCheck(u8"1) Бинд лопаты", bshovel, _, "Функция использует команду /gun(-Использовать активный аксессуар) при нажатии клавиши O(eng).")
imgui.TodoCheck(u8"2) Treasure Map Restore", btmr, _, "Функция восстанавливает зону карты кладов.")
if imgui.TodoCheck(u8"3) Treasure Map Edit", btmrr, _, "Функция помогает работать с зоной карты кладов. Можно поделиться с другом.\nКоманды:\n/zonecopy - команда копирует координаты зоны карты кладов.\n/zonepaste - команда вставляет зону карты кладов по координатам.\n/zonedel - команда удаляет зону карты кладов.") then
if not btmrr[0] and check then
sampUnregisterChatCommand('zonedel')
sampUnregisterChatCommand('zonecopy')
sampUnregisterChatCommand('zonepaste')
check = false
end
if btmrr[0] and not check then
sampRegisterChatCommand('zonedel', zonedel)
sampRegisterChatCommand('zonecopy', zonecopy)
sampRegisterChatCommand('zonepaste', zonepaste)
check = true
end
end
if imgui.TodoCheck(u8"4) Координаты клада", bpc, _, "Функция помогает работать с координатами клада. Можно поделиться с друзьями.\nКоманды:\n/tcopy - команда копирует координаты найденного клада.\n/tpaste - команда ставит метку по координатам.") then
if not btmrr[0] and check2 then
sampUnregisterChatCommand('tcopy')
sampUnregisterChatCommand('tpaste')
check2 = false
end
if btmrr[0] and not check2 then
sampRegisterChatCommand('tcopy', tcopy)
sampRegisterChatCommand('tpaste', tpaste)
check2 = true
end
end
imgui.TodoCheck(u8"5) Деморган", bdmg, _, "Функция выключает раздел уведомлений, если вы попадаете в деморган.")
end
imgui.EndChild())
imgui.BeginChild(u8"Кнопочки", imgui.ImVec2(xsize-231, 50), true)
if imgui.Button(u8'Перезагрузить скрипт', imgui.ImVec2(bxsize-5, 40)) then
saveCFG()
thisScript():reload()
end
imgui.SameLine()
if imgui.Button(u8'Стандартные настройки', imgui.ImVec2(bxsize+30, 40)) then
bnotfonscreen[0] = false
bnotfinchat[0] = false
bsoundnotf[0] = false
brender[0] = false
btraser[0] = false
bpointsonmap[0] = false
bmarkers[0] = false
bshovel[0] = false
btmr[0] = false
sliderint1[0] = 500
sliderint2[0] = 15
int[0] = 10
bcolorint1[0] = 0
bcolorint2[0] = 1
combo_int1[0] = 0
combo_int2[0] = 1
colortest1 = 0xFFFFFFFF
colortest2 = 0xFFFFFFFF
color3render[0] = 1.0
color3render[1] = 1.0
color3render[2] = 1.0
color3traser[0] = 1.0
color3traser[1] = 1.0
color3traser[2] = 1.0
bpc[0] = false
saveCFG()
sampAddChatMessage(prf..'Стандартные настройки успешно сохранены!', -1)
end
imgui.SameLine()
if imgui.Button(u8'Сохранить настройки', imgui.ImVec2(bxsize-5, 40)) then
sampAddChatMessage(prf..'Настройки успешно сохранены!', -1)
saveCFG()
end
imgui.EndChild()
imgui.SetCursorPos(imgui.ImVec2(xsize/2+261, 10+8))
if imgui.CloseButton(10, 3) then
menu.switch()
end
imgui.End()
end
)
function imgui.Hint(str_id, hint, delay)
local hovered = imgui.IsItemHovered()
local animTime = 0.2
local delay = delay or 0.00
local show = true
if not allHints then allHints = {} end
if not allHints[str_id] then
allHints[str_id] = {
status = false,
timer = 0
}
end
if hovered then
for k, v in pairs(allHints) do
if k ~= str_id and os.clock() - v.timer <= animTime then
show = false
end
end
end
if show and allHints[str_id].status ~= hovered then
allHints[str_id].status = hovered
allHints[str_id].timer = os.clock() + delay
end
if show then
local between = os.clock() - allHints[str_id].timer
if between <= animTime then
local s = function(f)
return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
end
local alpha = hovered and s(between / animTime) or s(1.00 - between / animTime)
imgui.PushStyleVarFloat(imgui.StyleVar.Alpha, alpha)
imgui.SetTooltip(hint)
imgui.PopStyleVar()
elseif hovered then
imgui.SetTooltip(hint)
end
end
end