commit
54752f3af3
@ -0,0 +1,409 @@ |
||||
script_name('ProdHUD') |
||||
script_authors("RuBin") |
||||
local samp = require 'samp.events' |
||||
local inicfg = require 'inicfg' |
||||
|
||||
function main() |
||||
if not isSampLoaded() or not isSampfuncsLoaded() then return end |
||||
while not isSampAvailable() do wait(100) end |
||||
iniLoad() |
||||
font = renderCreateFont(ini.settings.font_name, ini.settings.font_size, ini.settings.font_flag) |
||||
|
||||
while true do |
||||
wait(0) |
||||
doRenderMenu() |
||||
doBuyMode() |
||||
doSendDialog() |
||||
doCheckMonMode() |
||||
end |
||||
end |
||||
|
||||
function samp.onServerMessage(color, message) |
||||
if message:find("Âû äîëæíû íàõîäèòüñÿ íà ñêëàäå, ñ âûáðàííûì âàìè òèïîì áèçíåñà") or |
||||
message:find("Íåâåðíî óêàçàíî êîëè÷åñòâî") or |
||||
message:find("Â ôóðãîíå íåò ìåñòà") or |
||||
message:find("Ó âàñ íåò ïðîäóêòîâ") or |
||||
message:find("Íóæíî íàõîäèòüñÿ ðÿäîì ñ áèçíåñîì, êîòîðîìó õîòèòå ïðîäàòü") or |
||||
message:find("Ó âàñ íåäîñòàòî÷íî äåíåã") or |
||||
(isCar() and message:find("Âû çàðàáîòàëè %d+ âèðò, èç êîòîðûõ %d+ âèðò áóäåò äîáàâëåíî ê âàøåé çàðïëàòå")) then |
||||
if buyMode ~= nil then scip = true end |
||||
buyMode = nil |
||||
if checkMon ~= nil then |
||||
return false |
||||
end |
||||
end |
||||
if string.find(message, " Åäà: (%d+) / (%d+)") then |
||||
prod.food, prod_count = string.match(message, " Åäà: (%d+) / (%d+)") |
||||
if prod_count == prod.food and buyMode then scip = true end |
||||
if prod.food == "0" and buyMode then scip = true end |
||||
buyMode = nil |
||||
end |
||||
if string.find(message, " Áåíçèí: (%d+) / (%d+)") then |
||||
prod.benz, prod_count = string.match(message, " Áåíçèí: (%d+) / (%d+)") |
||||
if prod_count == prod.benz and buyMode then scip = true end |
||||
if prod.benz == "0" and buyMode then scip = true end |
||||
buyMode = nil |
||||
end |
||||
if string.find(message, " Òîâàðû: (%d+) / (%d+)") then |
||||
prod.products, prod_count = string.match(message, " Òîâàðû: (%d+) / (%d+)") |
||||
if prod_count == prod.products and buyMode then scip = true end |
||||
if prod.products == "0" and buyMode then scip = true end |
||||
buyMode = nil |
||||
end |
||||
if string.find(message, " Àëêîãîëü: (%d+) / (%d+)") then |
||||
prod.alcohol, prod_count = string.match(message, " Àëêîãîëü: (%d+) / (%d+)") |
||||
if prod_count == prod.alcohol and buyMode then scip = true end |
||||
if prod.alcohol == "0" and buyMode then scip = true end |
||||
buyMode = nil |
||||
end |
||||
end |
||||
|
||||
function samp.onShowDialog(DdialogId, Dstyle, Dtitle, Dbutton1, Dbutton2, Dtext) |
||||
dialogActiveTime = os.clock() * 1000 |
||||
if buyMode ~= nil or (buyMode == nil and scip ~= nil) then |
||||
if Dtitle:find("Ðàçâîç÷èê ïðîäóêòîâ") then |
||||
if scip == nil then |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = (sell and 1 or 0), input = "" } |
||||
end |
||||
return false |
||||
end |
||||
if Dtext:find("Áàðû è êëóáû") and Dtext:find("Çàïðàâêè") then |
||||
if scip == nil then |
||||
local list = { alcohol = 0, benz = 1, products = 3, food = 2 } |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = list[buyMode], input = "" } |
||||
end |
||||
return false |
||||
end |
||||
if Dtitle:find("Ââîä ïàðàìåòðà") and Dtext:find("Ââåäèòå êîëè÷åñòâî ïðîäóêòîâ îò %d+ äî (%d+)") then |
||||
if scip == nil then |
||||
local count = tonumber(Dtext:match("Ââåäèòå êîëè÷åñòâî ïðîäóêòîâ îò %d+ äî (%d+)")) - prod[buyMode] |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = 0, input = tostring(count) } |
||||
end |
||||
return false |
||||
end |
||||
if Dtitle:find("Ñîîáùåíèå") and Dtext:find("Ñòîèìîñòü")and Dtext:find("Êîëè÷åñòâî") then |
||||
if scip == nil then |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = 0, input = "" } |
||||
end |
||||
return false |
||||
end |
||||
end |
||||
if DdialogId == 22 and Dstyle == 0 and Dtitle == "Ñîîáùåíèå" and string.find(Dtext, "Áèçíåñ") and string.find(Dtext, "Ñêîëüêî ìîæåò êóïèòü") then |
||||
if string.find(Dtext, "Cluc") or string.find(Dtext, "Pizza") or string.find(Dtext, "Cluck") or string.find(Dtext, "Burger") then |
||||
monArray["food"] = Dtext |
||||
elseif string.find(Dtext, "24%-7") then |
||||
monArray["products"] = Dtext |
||||
elseif string.find(Dtext, "gas") or string.find(Dtext, "Gas") or string.find(Dtext, "Gsa") then |
||||
monArray["benz"] = Dtext |
||||
else |
||||
monArray["alcohol"] = Dtext |
||||
end |
||||
if checkMon ~= nil then |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 0, listitem = 0, input = "" } |
||||
return false |
||||
end |
||||
end |
||||
if checkMon ~= nil then |
||||
if Dtitle:find("Ðàçâîç÷èê ïðîäóêòîâ") then |
||||
if scip == nil then |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = 2, input = "" } |
||||
end |
||||
return false |
||||
end |
||||
if Dtitle:find("Ìîíèòîðèíã") then |
||||
if checkMon == "" then |
||||
checkMon = nil |
||||
return false |
||||
end |
||||
if scip == nil then |
||||
local arr_sled = { alcohol = "benz", benz = "food", food = "products", products = "" } |
||||
local arr_button = { alcohol = 0, benz = 1, food = 2, products = 3 } |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = arr_button[checkMon], input = "" } |
||||
checkMon = arr_sled[checkMon] |
||||
end |
||||
return false |
||||
end |
||||
end |
||||
if Dtitle:find("GPS") and bizname ~= nil then |
||||
local arr_sled = { alcohol = 2, benz = 8, food = 10, products = 9 } |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = arr_sled[monMode], input = "" } |
||||
return false |
||||
end |
||||
if (bizname ~= nil or ( bizname == nil and scip ~= nil)) and (Dtitle:find("Áåíçîçàïðàâêè") or Dtitle:find("Ìàãàçèíû") or Dtitle:find("Áàðû") or Dtitle:find("Çàêóñî÷íûå") ) then |
||||
if scip ~= nil then |
||||
scip = nil |
||||
return false |
||||
end |
||||
local arr = split(Dtext, "\n") |
||||
local result = -1 |
||||
for i = 1, #arr do |
||||
local str = arr[i]:gsub("%-", " ") |
||||
local findText = bizname:gsub("%-", " ") |
||||
|
||||
if monMode == "benz" and not findText:find("Emerald") and not findText:find("Tierra") then |
||||
bizname = string.gsub(bizname, " ", "") |
||||
end |
||||
|
||||
if str:gsub("%-", " "):find(findText) then |
||||
result = i - 1 |
||||
break |
||||
end |
||||
end |
||||
if result ~= -1 then |
||||
scip = true |
||||
send_dialog = { time = os.clock() * 1000, id = DdialogId, button = 1, listitem = result, input = "" } |
||||
else |
||||
sampAddChatMessage(bizname, -1) |
||||
end |
||||
bizname = nil |
||||
return false |
||||
end |
||||
|
||||
scip = nil |
||||
end |
||||
|
||||
function samp.onSendDialogResponse(dialogId, button, listboxId, input) |
||||
|
||||
end |
||||
|
||||
function isCar() |
||||
if isCharInModel(PLAYER_PED, 455) or isCharInModel(PLAYER_PED, 459) or isCharInModel(PLAYER_PED, 552) or isCharInModel(PLAYER_PED, 414) or isCharInModel(PLAYER_PED, 456) then |
||||
return true |
||||
end |
||||
end |
||||
|
||||
-->> RENDER MENU |
||||
|
||||
function doRenderMenu() |
||||
if not isCar() or sampIsDialogActive() or sampIsChatInputActive() or not isKeyDown(2) then |
||||
if control then |
||||
sampSetCursorMode(0) |
||||
end |
||||
control = false |
||||
return |
||||
end |
||||
|
||||
if not control then |
||||
control = true |
||||
end |
||||
|
||||
sampSetCursorMode(3) |
||||
|
||||
|
||||
-->> Render MENU |
||||
local height = renderGetFontDrawHeight(font) |
||||
local plus = height + (height / 4) |
||||
local X, Y = getScreenResolution() |
||||
Y = ((Y / 2.0) - (height * 3)) |
||||
|
||||
local textLength = renderGetFontDrawTextLength(font, "Ïðîäàòü äëÿ Çàêóñî÷íîé") |
||||
|
||||
|
||||
renderDrawBox((X - textLength), Y, textLength, (plus * 11), 0x80000000) |
||||
local x, y = (X - textLength) - 72, Y |
||||
for i = 10, 80 do |
||||
x = x + 1 |
||||
local color = string.format("0x%d000000", i) |
||||
renderDrawBox(x, y, 1, (plus * 11), color) |
||||
end |
||||
|
||||
string = "Êóïèòü äëÿ Áàðà" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = false |
||||
buyMode = "alcohol" |
||||
end |
||||
Y = Y + plus |
||||
string = "Ïðîäàòü äëÿ Áàðà" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = true |
||||
buyMode = "alcohol" |
||||
end |
||||
|
||||
|
||||
Y = Y + plus + plus |
||||
|
||||
string = "Êóïèòü äëÿ Çàïðàâêè" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = false |
||||
buyMode = "benz" |
||||
end |
||||
Y = Y + plus |
||||
string = "Ïðîäàòü äëÿ Çàïðàâêè" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = true |
||||
buyMode = "benz" |
||||
end |
||||
|
||||
Y = Y + plus + plus |
||||
|
||||
string = "Êóïèòü äëÿ Ìàãàçèíà" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = false |
||||
buyMode = "products" |
||||
end |
||||
Y = Y + plus |
||||
string = "Ïðîäàòü äëÿ Ìàãàçèíà" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = true |
||||
buyMode = "products" |
||||
end |
||||
|
||||
Y = Y + plus + plus |
||||
|
||||
string = "Êóïèòü äëÿ Çàêóñî÷íîé" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = false |
||||
buyMode = "food" |
||||
end |
||||
Y = Y + plus |
||||
string = "Ïðîäàòü äëÿ Çàêóñî÷íîé" |
||||
if drawClickableText(string, (X - renderGetFontDrawTextLength(font, string.." ")), Y) then |
||||
sell = true |
||||
buyMode = "food" |
||||
end |
||||
|
||||
|
||||
-->> Render Monitoring |
||||
|
||||
local X, Y = getScreenResolution() |
||||
Y = ((Y / 2.2) - (height * 3)) |
||||
|
||||
string = "[Îáíîâèòü öåíû]" |
||||
if drawClickableText(string, (X / 2 - (renderGetFontDrawTextLength(font, string.." ") / 2 )), Y) then |
||||
checkMon = "alcohol" |
||||
end |
||||
|
||||
Y = Y + plus |
||||
|
||||
string = string.format("{%s}Àëêîãîëü {%s}| {%s}Çàïðàâêè {%s}| {%s}Ìàãàçèíû {%s}| {%s}Çàêóñî÷íûå", |
||||
(monMode == "alcohol" and ini.settings.color2 or ini.settings.color1), |
||||
ini.settings.color1, |
||||
(monMode == "benz" and ini.settings.color2 or ini.settings.color1), |
||||
ini.settings.color1, |
||||
(monMode == "products" and ini.settings.color2 or ini.settings.color1), |
||||
ini.settings.color1, |
||||
(monMode == "food" and ini.settings.color2 or ini.settings.color1) |
||||
) |
||||
if drawClickableText(string, (X / 2 - (renderGetFontDrawTextLength(font, string.." ") / 2 )), Y) then |
||||
local mode_sled = { alcohol = "benz", benz = "products", products = "food", food = "alcohol" } |
||||
monMode = mode_sled[monMode] |
||||
end |
||||
local delta = getMousewheelDelta() |
||||
if delta > 0 then |
||||
local mode_sled = { alcohol = "benz", benz = "products", products = "food", food = "alcohol" } |
||||
monMode = mode_sled[monMode] |
||||
elseif delta < 0 then |
||||
local mode_sled = { alcohol = "food", benz = "alcohol", products = "benz", food = "products" } |
||||
monMode = mode_sled[monMode] |
||||
end |
||||
|
||||
Y = Y + plus |
||||
|
||||
local arr = split(monArray[monMode], "\n") |
||||
|
||||
for i = 1, #arr do |
||||
local string = arr[i] |
||||
if drawClickableText(string, (X / 2 - (renderGetFontDrawTextLength(font, string.." ") / 2 )), Y) then |
||||
if string:find("{FFFFFF}(.+) {6AB1FF}%d+ {00A86B}%d+") then |
||||
bizname = string:match("{FFFFFF}(.+) {6AB1FF}%d+ {00A86B}%d+") |
||||
local replace = { |
||||
[" Cluck"] = "", |
||||
[" Pizza"] = "", |
||||
[" Burger"] = "", |
||||
[" 24%-7"] = "", |
||||
[" Gas"] = "", |
||||
[" Gsa"] = "", |
||||
["Four dragon"] = "Ñêëàä áàðà 4Äðàêîíîâ", |
||||
["Caligula"] = "Ñêëàä áàðà Êàëèãóëû", |
||||
[" Bar"] = "", |
||||
[" bar"] = "", |
||||
["Quebrados"] = "Guebrabos" |
||||
} |
||||
for k,v in pairs(replace) do |
||||
bizname = string.gsub(bizname, k, v) |
||||
end |
||||
sampSendChat("/gps") |
||||
end |
||||
end |
||||
Y = Y + plus |
||||
end |
||||
|
||||
end |
||||
|
||||
-->> BuyMode |
||||
function doBuyMode() |
||||
if buyMode == nil or prod[buyMode] == nil then return end |
||||
if dialogActiveTime == nil then dialogActiveTime = 0 end |
||||
if sampIsDialogActive() then dialogActiveTime = os.clock() * 1000 return end |
||||
|
||||
if os.clock() * 1000 - dialogActiveTime > 500 then |
||||
dialogActiveTime = os.clock() * 1000 |
||||
sampSendChat("/prodmenu") |
||||
end |
||||
end |
||||
|
||||
-->> CHECK MODE |
||||
function doCheckMonMode() |
||||
if checkMon == nil then return end |
||||
if dialogActiveTime == nil then dialogActiveTime = 0 end |
||||
if sampIsDialogActive() then dialogActiveTime = os.clock() * 1000 return end |
||||
|
||||
if os.clock() * 1000 - dialogActiveTime > 500 then |
||||
dialogActiveTime = os.clock() * 1000 |
||||
sampSendChat("/prodmenu") |
||||
end |
||||
end |
||||
|
||||
|
||||
-->> SEND DIALOG |
||||
function doSendDialog() |
||||
if send_dialog == nil then return end |
||||
if os.clock() * 1000 - send_dialog.time < 300 then return end |
||||
sampSendDialogResponse(send_dialog.id,send_dialog.button,send_dialog.listitem,send_dialog.input) |
||||
send_dialog = nil |
||||
end |
||||
|
||||
-->> INIFILES |
||||
|
||||
function iniLoad() |
||||
ini = inicfg.load({ |
||||
settings = { |
||||
font_name = "SegoeUI", |
||||
font_size = 10, |
||||
font_flag = 13, |
||||
color1 = "2f72f7", |
||||
color2 = "ffffff" |
||||
} |
||||
}) |
||||
inicfg.save(ini) |
||||
|
||||
prod = { alcohol = 0, benz = 0, products = 0, food = 0 } |
||||
monMode = "alcohol" |
||||
monArray = { alcohol = "Ïóñòî", benz = "Ïóñòî", products = "Ïóñòî", food = "Ïóñòî" } |
||||
end |
||||
|
||||
|
||||
-->> New Func |
||||
|
||||
function drawClickableText(text, posX, posY) |
||||
renderFontDrawText(font, text, posX, posY, '0xFF'..ini.settings.color1) |
||||
local textLenght = renderGetFontDrawTextLength(font, text) |
||||
local textHeight = renderGetFontDrawHeight(font) |
||||
local curX, curY = getCursorPos() |
||||
if curX >= posX and curX <= posX + textLenght and curY >= posY and curY <= posY + textHeight then |
||||
renderFontDrawText(font, text, posX, posY, '0x70'..ini.settings.color2) |
||||
if isKeyJustPressed(1) then |
||||
return true |
||||
end |
||||
end |
||||
end |
||||
|
||||
function split(str, delim, plain) |
||||
local tokens, pos, plain = {}, 1, not (plain == false) --[[ delimiter is plain text by default ]] |
||||
repeat |
||||
local npos, epos = string.find(str, delim, pos, plain) |
||||
table.insert(tokens, string.sub(str, pos, npos and npos - 1)) |
||||
pos = epos and epos + 1 |
||||
until not pos |
||||
return tokens |
||||
end |
Loading…
Reference in new issue