|
|
script_name('TaxiHUD')
|
|
|
script_author("Serhiy_Rubin")
|
|
|
script_version("21.01.03.1")
|
|
|
|
|
|
function try(f, catch_f)
|
|
|
local status, exception = pcall(f)
|
|
|
if not status then
|
|
|
catch_f(exception)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
try(function()
|
|
|
sampev, inicfg, dlstatus, vkeys, ffi =
|
|
|
require "lib.samp.events",
|
|
|
require "inicfg",
|
|
|
require("moonloader").download_status,
|
|
|
require "lib.vkeys",
|
|
|
require("ffi")
|
|
|
|
|
|
end, function(e)
|
|
|
sampAddChatMessage(">> Ïðîèçîøëà îøèáêà íà ýòàïå çàãðóçêè áèáëèîòåê. Âîçìîæíî ó âàñ íåò SAMP.Lua", 0xff0000)
|
|
|
sampAddChatMessage(">> Îôèöèàëüíàÿ ñòðàíèöà Taxi HUD: https://vk.com/rubin.mods",0xff0000)
|
|
|
sampAddChatMessage(e, -1)
|
|
|
thisScript():unload()
|
|
|
end)
|
|
|
|
|
|
ffi.cdef [[ bool SetCursorPos(int X, int Y); ]]
|
|
|
local id, antiflood, checkSkill, payCheck, count, passajir, chai, driver, hud, checkGPS, farm, GPS, GPStime, passj = 0, 0, 1, 1, 0, {}, 0, false, false, 1,{}, false, 0, 0
|
|
|
local noobQuest, QuestRead = {}, 0
|
|
|
local call_coord = { x = 0.0, y = 0.0, z = 0.0 }
|
|
|
|
|
|
function main()
|
|
|
if not isSampLoaded() or not isSampfuncsLoaded() then return end
|
|
|
while not isSampAvailable() do wait(100) end
|
|
|
|
|
|
repeat wait(0) until sampGetCurrentServerName() ~= 'SA-MP'
|
|
|
|
|
|
local _, my_id = sampGetPlayerIdByCharHandle(PLAYER_PED)
|
|
|
server = sampGetCurrentServerName():gsub('|', '')
|
|
|
server = (server:find('02') and 'Two' or (server:find('Revolution') and 'Revolution' or (server:find('Legacy') and 'Legacy' or (server:find('Classic') and 'Classic' or ''))))
|
|
|
if server == "" then thisScript():unload() end
|
|
|
nickname = sampGetPlayerNickname(my_id)
|
|
|
adress = {
|
|
|
player = string.format("TaxiHUD\\%s-%s.ini", server, nickname),
|
|
|
binder = string.format("%s\\moonloader\\config\\TaxiHUD\\Binder.txt", getGameDirectory()),
|
|
|
general = string.format("TaxiHUD\\Settings.ini"),
|
|
|
}
|
|
|
local x1, y1 = convertGameScreenCoordsToWindowScreenCoords(14.992679595947, 274.75)
|
|
|
local x2, y2 = convertGameScreenCoordsToWindowScreenCoords(146.17861938477, 345.91665649414)
|
|
|
ini1 =
|
|
|
inicfg.load(
|
|
|
{
|
|
|
Settings = {
|
|
|
Key1 = 'VK_RBUTTON',
|
|
|
Key2 = 'VK_X',
|
|
|
FontName = 'Segoe UI',
|
|
|
FontSize = 10,
|
|
|
FontFlag = 13,
|
|
|
X = x1,
|
|
|
Y = y1,
|
|
|
XX = x2,
|
|
|
YY = y2,
|
|
|
GPSkd = 30000,
|
|
|
check_update = true
|
|
|
}
|
|
|
},
|
|
|
adress.general
|
|
|
)
|
|
|
inicfg.save(ini1, adress.general)
|
|
|
ini2 =
|
|
|
inicfg.load(
|
|
|
{
|
|
|
Settings = {
|
|
|
Skill = 1,
|
|
|
SkillPrc = 1.1,
|
|
|
Rank = 1,
|
|
|
RankPrc = 1.1,
|
|
|
OgranZP = 0
|
|
|
}
|
|
|
},
|
|
|
adress.player
|
|
|
)
|
|
|
inicfg.save(ini1, adress.player)
|
|
|
if not doesFileExist(adress.binder) then
|
|
|
local text = "/service\nÊóäà?\nÓäà÷è\n/t !id Âàø âûçîâ àêòóàëåí? Ìíå äî âàñ !dist êì\n/t !id Åäó, ìíå äî âàñ !dist êì\n/t !id Ê ñîæàëåíèþ ÿ íå ìîãó ïðèåõàòü\n"
|
|
|
file = io.open(adress.binder, "a")
|
|
|
file:write(text)
|
|
|
file:flush()
|
|
|
io.close(file)
|
|
|
end
|
|
|
if ini1.Settings.check_update then
|
|
|
local fpath = os.getenv("TEMP") .. "\\TaxiHUD-version.txt"
|
|
|
downloadUrlToFile("https://raw.githubusercontent.com/Serhiy-Rubin/TaxiHUD/master/version", fpath,
|
|
|
function(id, status, p1, p2)
|
|
|
if status == dlstatus.STATUS_ENDDOWNLOADDATA then
|
|
|
local f = io.open(fpath, "r")
|
|
|
if f then
|
|
|
local text = f:read("*a")
|
|
|
if text ~= nil then
|
|
|
if not string.find(text, tostring(thisScript().version)) then
|
|
|
sampAddChatMessage(
|
|
|
">> Âûøëî îáíîâëåíèå äëÿ Taxi HUD, âåðñèÿ îò " ..
|
|
|
text .. ". Òåêóùàÿ âåðñèÿ îò " .. thisScript().version,
|
|
|
0xFF2f72f7
|
|
|
)
|
|
|
sampAddChatMessage(
|
|
|
">> Ïîñìîòðåòü ñïèñîê èçìåíåíèé: /taxi up. Âêëþ÷èòü/Âûêëþ÷èòü óâåäîìëåíèÿ: /taxi ad",
|
|
|
0xFF2f72f7
|
|
|
)
|
|
|
sampAddChatMessage(
|
|
|
">> Îôèöèàëüíàÿ ñòðàíèöà Taxi HUD: https://vk.com/rubin.mods",
|
|
|
0xFF2f72f7
|
|
|
)
|
|
|
end
|
|
|
end
|
|
|
io.close(f)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
)
|
|
|
end
|
|
|
font = renderCreateFont(ini1.Settings.FontName, ini1.Settings.FontSize, ini1.Settings.FontFlag)
|
|
|
lua_thread.create(menu)
|
|
|
while true do
|
|
|
wait(0)
|
|
|
ms = math.ceil(os.clock() * 1000 - antiflood)
|
|
|
msGPS = math.ceil(os.clock() * 1000 - GPStime)
|
|
|
if (now_upd ~= nil or (hud or control)) and ms > 2000 and not sampIsDialogActive() and not sampIsChatInputActive() then
|
|
|
now_upd = 1
|
|
|
if checkSkill == 1 then
|
|
|
checkSkill = 2
|
|
|
sampSendChat("/jskill")
|
|
|
end
|
|
|
if checkSkill == 0 and payCheck == 1 then
|
|
|
payCheck = 2
|
|
|
sampSendChat("/paycheck")
|
|
|
end
|
|
|
if checkSkill == 0 and payCheck == 0 and GPS and checkGPS == 1 then
|
|
|
checkGPS = 2
|
|
|
sampSendChat("/taxigps")
|
|
|
end
|
|
|
if GPS and checkGPS == 0 then
|
|
|
if tonumber(msGPS) > tonumber(ini1.Settings.GPSkd) then
|
|
|
checkGPS = 1
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function menu()
|
|
|
lua_thread.create(function()
|
|
|
while true do
|
|
|
wait(0)
|
|
|
Noob = 0
|
|
|
if hud or control then
|
|
|
local Noobs = 0
|
|
|
for id = 0, 999 do
|
|
|
if sampIsPlayerConnected(id) then
|
|
|
local score = sampGetPlayerScore(id)
|
|
|
if score == 1 then
|
|
|
Noobs = Noobs + 1
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if Noob ~= Noobs then Noob = Noobs end
|
|
|
end
|
|
|
end
|
|
|
end)
|
|
|
while true do
|
|
|
wait(0)
|
|
|
if sampIsChatVisible() and sampGetChatInputText() == "/q" and wasKeyPressed(13) then off = 1 end
|
|
|
if off == nil and (hud or control) and not sampIsScoreboardOpen() and sampIsChatVisible() and not isKeyDown(116) and not isKeyDown(121) then
|
|
|
local text = string.format("Ñêèëë: %s (%s) (%s)\nÐàíã: %s (%s)\nÇàðïëàòà: %s / %s\n×àåâûå: %s$", ini2.Settings.Skill, ini2.Settings.SkillPrc, passj, ini2.Settings.Rank, ini2.Settings.RankPrc, count, ini2.Settings.OgranZP, chai)
|
|
|
local X = ini1.Settings.X
|
|
|
local Y = ini1.Settings.Y
|
|
|
if Click(font, string.format("Ñêèëë: %s (%s) (%s)", ini2.Settings.Skill, ini2.Settings.SkillPrc, passj), X, Y) then
|
|
|
if checkSkill == 0 then checkSkill = 1 end
|
|
|
end
|
|
|
Y = Y + renderGetFontDrawHeight(font)
|
|
|
Click(font, string.format("Ðàíã: %s (%s)", ini2.Settings.Rank, ini2.Settings.RankPrc), X, Y)
|
|
|
Y = Y + renderGetFontDrawHeight(font)
|
|
|
if Click(font, string.format("Çàðïëàòà: %s$ / %s$", count, ini2.Settings.OgranZP), X, Y) then
|
|
|
if payCheck == 0 then payCheck = 1 end
|
|
|
end
|
|
|
Y = Y + renderGetFontDrawHeight(font)
|
|
|
if Click(font, string.format("×àåâûå: %s$", chai), X, Y) then
|
|
|
if payCheck == 0 then payCheck = 1 end
|
|
|
end
|
|
|
Y = Y + renderGetFontDrawHeight(font)
|
|
|
if control and Click(font, "[Ñìåíèòü ïîçèöèþ]", X, Y) then
|
|
|
lua_thread.create(function()
|
|
|
wait(100)
|
|
|
repeat
|
|
|
wait(0)
|
|
|
sampSetCursorMode(1)
|
|
|
local X, Y = getCursorPos()
|
|
|
ini1.Settings.X = X
|
|
|
ini1.Settings.Y = Y
|
|
|
until wasKeyPressed(1)
|
|
|
wait(100)
|
|
|
inicfg.save(ini1, adress.general)
|
|
|
sampSetCursorMode(0)
|
|
|
end)
|
|
|
end
|
|
|
if GPS and #farm > 0 then
|
|
|
local X = ini1.Settings.XX
|
|
|
local Y = ini1.Settings.YY
|
|
|
local ind = 0
|
|
|
for k,string in pairs(farm) do
|
|
|
local color = ""
|
|
|
if msGPS < 1000 then color = "{12a61a}" end
|
|
|
if msGPS > 2000 and msGPS < 3000 then color = "{12a61a}" end
|
|
|
if Click(font, color..string, X, Y) and (GPSpos == nil or not GPSpos) then
|
|
|
sampSendChat(string)
|
|
|
end
|
|
|
ind = ind + 1
|
|
|
Y = Y + renderGetFontDrawHeight(font)
|
|
|
end
|
|
|
if control then
|
|
|
if Click(font, "[Ñìåíèòü ïîçèöèþ]", X, Y) then
|
|
|
lua_thread.create(function()
|
|
|
wait(100)
|
|
|
GPSpos = true
|
|
|
repeat
|
|
|
wait(0)
|
|
|
sampToggleCursor(false)
|
|
|
local X, Y = getCursorPos()
|
|
|
ini1.Settings.XX = X
|
|
|
ini1.Settings.YY = Y
|
|
|
inicfg.save(ini1, adress.general)
|
|
|
until wasKeyPressed(1)
|
|
|
wait(100)
|
|
|
GPSpos = false
|
|
|
sampToggleCursor(false)
|
|
|
end)
|
|
|
end
|
|
|
Y = Y + renderGetFontDrawHeight(font)
|
|
|
if Click(font, "[Îáíîâèòü]", X, Y) then
|
|
|
checkGPS = 1
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if isKeyDown(vkeys[ini1.Settings.Key1]) and (isTaxi() or isKeyDown(vkeys[ini1.Settings.Key2])) and not sampIsScoreboardOpen() and sampIsChatVisible() and not sampIsDialogActive() and not isKeyDown(116) and not isKeyDown(121) then
|
|
|
sampSetCursorMode(3)
|
|
|
local X, Y = getScreenResolution()
|
|
|
if not control then
|
|
|
ffi.C.SetCursorPos((X / 2), (Y / 2))
|
|
|
local f = io.open(adress.binder, 'r')
|
|
|
if f then
|
|
|
BindText = bind_read()
|
|
|
end
|
|
|
end
|
|
|
control = true
|
|
|
local ind = (renderGetFontDrawHeight(font) + (renderGetFontDrawHeight(font) / 10))
|
|
|
Y = ((Y / 2.2) - (renderGetFontDrawHeight(font) * 3))
|
|
|
if hud then string = "TaxiHUD: {12a61a}ON" else string = "TaxiHUD: {ff0000}OFF" end
|
|
|
if Click(font, string, ((X / 2) - (renderGetFontDrawTextLength(font, string) / 2)), Y) then
|
|
|
hud = not hud
|
|
|
end
|
|
|
Y = Y + ind
|
|
|
if GPS then string = "TaxiGPS: {12a61a}ON" else string = "TaxiGPS: {ff0000}OFF" end
|
|
|
if Click(font, string, ((X / 2) - (renderGetFontDrawTextLength(font, string) / 2)), Y) then
|
|
|
GPS = not GPS
|
|
|
end
|
|
|
Y = Y + ind
|
|
|
string = "Íîâè÷êè ñåðâåðà ("..(Noob ~= nil and Noob or "0")..")"
|
|
|
if Click(font, string, ((X / 2) - (renderGetFontDrawTextLength(font, string) / 2)), Y) then
|
|
|
DialogNoob(1)
|
|
|
end
|
|
|
Y = Y + ind
|
|
|
string = string.format("Íàñòðîéêè")
|
|
|
if Click(font, string, ((X / 2) - (renderGetFontDrawTextLength(font, string) / 2)), Y) then
|
|
|
DialogText(0)
|
|
|
end
|
|
|
Y = Y + ind + ind
|
|
|
if Click(font, "{12a61a} Äîáàâèòü ñòðîêó", ((X / 2) - (renderGetFontDrawTextLength(font, "Äîáàâèòü ñòðîêó") / 2)), Y) then
|
|
|
DialogText(2)
|
|
|
end
|
|
|
for i = 1, #BindText do
|
|
|
Y = Y + ind
|
|
|
local strings = BindText[i]:gsub("!id", id)
|
|
|
local distance = getDistanceBetweenCoords3d(call_coord.x, call_coord.y, call_coord.z, getCharCoordinates(playerPed))
|
|
|
local strings = strings:gsub("!dist", math.ceil(distance) / 1000)
|
|
|
if Click(font, strings, ((X / 2) - (renderGetFontDrawTextLength(font, strings) / 2)), Y) then
|
|
|
sampSendChat(strings)
|
|
|
end
|
|
|
if Click(font, "{ff0000}õ", ((X / 2) + (renderGetFontDrawTextLength(font, strings.." ") / 2)), Y) then
|
|
|
DialogText(3, BindText[i])
|
|
|
end
|
|
|
if Click(font, "{12a61a}/", ((X / 2) + (renderGetFontDrawTextLength(font, strings.." ") / 2)), Y) then
|
|
|
DialogText(4, BindText[i])
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if control and not isKeyDown(vkeys[ini1.Settings.Key1]) then
|
|
|
control = false
|
|
|
sampSetCursorMode(0)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function sampev.onShowDialog(DdialogId, Dstyle, Dtitle, Dbutton1, Dbutton2, Dtext)
|
|
|
if Dstyle == 2 and string.find(Dtitle, "Óïðàâëåíèå êâåñòàìè") then
|
|
|
if QuestRead ~= nil and QuestRead == 1 then
|
|
|
QuestRead = 2
|
|
|
sampSendDialogResponse(DdialogId, 1, 3, "")
|
|
|
return false
|
|
|
end
|
|
|
if QuestRead ~= nil and QuestRead == 3 then
|
|
|
QuestRead = 0
|
|
|
DialogNoob(1)
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
if Dstyle == 0 and Dtitle == 'Ñòàòèñòèêà' and QuestRead == 3 then
|
|
|
local name, sl, qn, etap, progress = string.match(Dtext, ' Èìÿ: {FFCC00}(.+){996633}.*================================.*.*{CC9933}%[Âûïîëíÿåòñÿ%].*{FFFFFF} Ñ.ëèíèÿ:{FFCC00} (.+){FFFFFF}.* Êâåñò:{FFCC00} (.+){FFFFFF}.* Ýòàï:{FFCC00} (.+){FFFFFF}.* Ïðîãðåññ:{FFCC00} (.+){FFFFFF}')
|
|
|
if name ~= nil then
|
|
|
local result = ''
|
|
|
if sl:find('Ãîñòü') then
|
|
|
local quest_list = {
|
|
|
['1 / 5'] = 'Ãðóç÷èêè: '..progress,
|
|
|
['2 / 5'] = 'Àâòîøêîëà',
|
|
|
['3 / 5'] = 'Ôåðìà: '..progress,
|
|
|
['4 / 5'] = 'Îäåæäà',
|
|
|
['5 / 5'] = 'Ìýðèÿ',
|
|
|
}
|
|
|
if quest_list[qn] ~= nil then
|
|
|
result = 'Êâåñò: '..quest_list[qn]
|
|
|
end
|
|
|
end
|
|
|
noobQuest[name] = result
|
|
|
end
|
|
|
sampSendDialogResponse(DdialogId, 1, 0, '')
|
|
|
return false
|
|
|
end
|
|
|
if Dstyle == 1 and string.find(Dtext, "Ââåäèòå ID èëè Íèê èãðîêà") and string.find(Dtitle, "Ââîä ID") then
|
|
|
if QuestRead ~= nil and QuestRead == 2 then
|
|
|
sampSendDialogResponse(DdialogId, 1, 0, NdialogID)
|
|
|
QuestRead = 3
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
if Dstyle == 0 and string.find(Dtext, "{00AB06}Òàêñèñò{CECECE}") then
|
|
|
local line = 0
|
|
|
for string in string.gmatch(Dtext, '[^\n]+') do
|
|
|
line = line + 1
|
|
|
if line == 5 then
|
|
|
ini2.Settings.Skill, ini2.Settings.SkillPrc = string.match(string, "Ñêèëë: (%d+) Îïûò: .+ (%d+%.%d+)%%")
|
|
|
passj = math.ceil((100 - ini2.Settings.SkillPrc) / (((9600 / 100 * (1.1 ^ (50 - ini2.Settings.Skill))) * 100) / (10000 * (1.1 ^ ini2.Settings.Skill))))
|
|
|
end
|
|
|
if line == 6 then
|
|
|
ini2.Settings.Rank, ini2.Settings.RankPrc = string.match(string, "{CECECE}Ðàíã: (%d+) Îïûò: .+ (%d+%.%d+)%%")
|
|
|
end
|
|
|
end
|
|
|
ini2.Settings.OgranZP = math.ceil(15000 + (500 * (1.1 ^ ini2.Settings.Skill)) + (500 * (1.1 ^ ini2.Settings.Rank)))
|
|
|
inicfg.save(ini2, adress.player)
|
|
|
if checkSkill == 2 then
|
|
|
checkSkill = 0
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
if Dstyle == 2 and string.find(Dtext, "{00AB06}Ôåðìåðîâ") and string.find(Dtext, "{00AB06}Ïðîðàáîâ") then
|
|
|
local line = 0
|
|
|
farm = {}
|
|
|
for string in string.gmatch(Dtext, '[^\n]+') do
|
|
|
line = line + 1
|
|
|
if line == 1 then
|
|
|
Prorab, Gruzchik = string.match(string, "%[0%] {FFFFFF}%[Ãðóç÷èêè%] {00AB06}Ïðîðàáîâ (.+) Ðàáî÷èõ (.+)")
|
|
|
farm[#farm + 1] = string.format("Ïðîðàáîâ %s | Ðàáî÷èõ %s\n", Prorab, Gruzchik)
|
|
|
else
|
|
|
local numb, rab, cost = string.match(string, "%[.+%] {FFFFFF}%[Ôåðìà ¹(.+)%] {00AB06}Ôåðìåðîâ (.+) {FFFF00}Öåíà çà êóñò (.+)$")
|
|
|
farm[#farm + 1] = string.format("Ôåðìà ¹%s | Êóñò %s | Ðàáî÷èõ %s\n", numb, cost, rab)
|
|
|
end
|
|
|
end
|
|
|
if checkGPS == 2 then
|
|
|
checkGPS = 0
|
|
|
GPStime = os.clock() * 1000
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
function sampev.onSendChat(message) antiflood = os.clock() * 1000 end
|
|
|
function sampev.onSendCommand(cmd) antiflood = os.clock() * 1000
|
|
|
if cmd:lower() == "/taxi" then
|
|
|
lua_thread.create(function() DialogText(0) end)
|
|
|
return false
|
|
|
elseif cmd:lower() == "/taxi up" then
|
|
|
lua_thread.create(
|
|
|
function()
|
|
|
local fpath = os.getenv("TEMP") .. "\\TaxiHUD-up.txt"
|
|
|
downloadUrlToFile(
|
|
|
"https://raw.githubusercontent.com/Serhiy-Rubin/TaxiHUD/master/changelog",
|
|
|
fpath,
|
|
|
function(id, status, p1, p2)
|
|
|
if status == dlstatus.STATUS_ENDDOWNLOADDATA then
|
|
|
local f = io.open(fpath, "r")
|
|
|
if f then
|
|
|
local text = f:read("*a")
|
|
|
if text ~= nil then
|
|
|
sampShowDialog(222, "Changelog", "{FFFFFF}"..text, "Çàêðûòü", "", 0)
|
|
|
end
|
|
|
io.close(f)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
)
|
|
|
end
|
|
|
)
|
|
|
elseif cmd:lower() == "/taxi ad" then
|
|
|
ini1.Settings.check_update = not ini1.Settings.check_update
|
|
|
printString((ini1.Settings.check_update and 'Check Update - ON' or 'Check Update - OFF'), 1000)
|
|
|
inicfg.save(ini1, adress.general)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function sampev.onSetRaceCheckpoint(type, position)
|
|
|
call_coord = position
|
|
|
end
|
|
|
|
|
|
function sampev.onServerMessage(color, message)
|
|
|
if string.find(message, " Äèñïåò÷åð: .+ ïðèíÿë âûçîâ îò .+") and string.find(message, nickname) then
|
|
|
id = string.match(message, " Äèñïåò÷åð: .+ ïðèíÿë âûçîâ îò .+%[(%d+)%]")
|
|
|
end
|
|
|
if message == " Íå ôëóäè!" then
|
|
|
if checkSkill == 2 then checkSkill = 1 end
|
|
|
if payCheck == 2 then payCheck = 1 end
|
|
|
if checkGPS == 2 then checkGPS = 1 end
|
|
|
if QuestRead ~= 0 then DialogNoob(1) QuestRead = 0 end
|
|
|
end
|
|
|
if string.find(message, " Âû çàðàáîòàëè (.+) âèðò%. Äåíüãè áóäóò çà÷èñëåíû íà âàø áàíêîâñêèé ñ÷åò â .+") then
|
|
|
local string = string.match(message, " Âû çàðàáîòàëè (.+) âèðò%. Äåíüãè áóäóò çà÷èñëåíû íà âàø áàíêîâñêèé ñ÷åò â .+")
|
|
|
count = string:find('/') and string:match('(%d+) /') or string
|
|
|
if payCheck == 2 then
|
|
|
payCheck = 0
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
if string.find(message, "Ïàññàæèð âûøåë èç òàêñè") then
|
|
|
if checkSkill == 0 then checkSkill = 1 end
|
|
|
if payCheck == 0 then payCheck = 1 end
|
|
|
end
|
|
|
if string.find(message, " Ïàññàæèð .+ ñåë â âàøå Òàêñè. Äîâåçèòå åãî è ãîñóäàðñòâî çàïëàòèò âàì") then
|
|
|
local name = string.match(message, " Ïàññàæèð (.+) ñåë â âàøå Òàêñè. Äîâåçèòå åãî è ãîñóäàðñòâî çàïëàòèò âàì")
|
|
|
passajir[name] = 1
|
|
|
end
|
|
|
if string.find(message, " Âû ïîëó÷èëè .+ âèðò, îò .+") then
|
|
|
local money, name = string.match(message, " Âû ïîëó÷èëè (.+) âèðò, îò (.+)%[.+")
|
|
|
if passajir[name] ~= nil then
|
|
|
chai = chai + money
|
|
|
end
|
|
|
end
|
|
|
if string.find(message, " Ñåé÷àñ âðåìåíè: (%d+):(%d+) ÷àñîâ") then
|
|
|
chai = 0
|
|
|
count = 0
|
|
|
end
|
|
|
if message == " Âû íå òàêñèñò èëè íå íà ñëóæáå" then
|
|
|
if GPS then GPS = false end
|
|
|
checkGPS = 0
|
|
|
end
|
|
|
if string.find(message, " Ïîçäðàâëÿåì! Âàø íàâûê òàêñèñòà ïîâûøåí äî .+") then
|
|
|
checkSkill = 1
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function DialogText(A1, A2)
|
|
|
wait(100)
|
|
|
if A1 == 0 then
|
|
|
dialogText = string.format("Íàñòðîéêè àêòèâàöèè\n- Êíîïêà îòîáðàæåíèÿ ìåíþ: %s\n- Êíîïêà äëÿ ðàáîòû ìåíþ áåç òàêñè: %s\nÈíòåðâàë îáíîâëåíèÿ TaxiGPS: %s\n \nÍàñòðîéêè øðèôòà\n- Íàçâàíèå øðèôòà: %s\n- Ðàçìåð øðèôòà: %s\n- Ñòèëü øðèôòà: %s", ini1.Settings.Key1:gsub("VK_", ''), ini1.Settings.Key2:gsub("VK_", ''), ini1.Settings.GPSkd, ini1.Settings.FontName, ini1.Settings.FontSize, ini1.Settings.FontFlag)
|
|
|
ShowDialog("Íàñòðîéêè TAXI HUD", dialogText, "Âûáðàòü", "Çàêðûòü", 2, A1)
|
|
|
end
|
|
|
if A1 == 1 then
|
|
|
if string.find(A2, "Key") then
|
|
|
ShowDialog("Íàñòðîéêè TAXI HUD", "{FFFFFF}Íàæìèòå íà íóæíóþ êëàâèøó", "Âûáðàòü", "Íàçàä", 0, A1, A2)
|
|
|
lua_thread.create(function()
|
|
|
stopThread = true
|
|
|
wait(100)
|
|
|
stopThread = false
|
|
|
local key = ""
|
|
|
repeat
|
|
|
wait(0)
|
|
|
for k, v in pairs(vkeys) do
|
|
|
if wasKeyPressed(v) and k ~= "VK_ESCAPE" and k ~= "VK_RETURN" then
|
|
|
key = k
|
|
|
end
|
|
|
end
|
|
|
until key ~= ""
|
|
|
ini1.Settings[A2] = key
|
|
|
inicfg.save(ini1, adress.general)
|
|
|
wait(100)
|
|
|
DialogText(0)
|
|
|
end)
|
|
|
else
|
|
|
local text = " "
|
|
|
if A2 == "GPSkd" then text = "{FFFFFF}Ââåäèòå èíòåðâàë â ÌÑ!\n1 ñåêóíäà ýòî 1000 ìñ" end
|
|
|
ShowDialog("Íàñòðîéêè TAXI HUD", text, "Âûáðàòü", "Íàçàä", 1, A1, A2)
|
|
|
end
|
|
|
end
|
|
|
if A1 == 2 then
|
|
|
ShowDialog("Áèíäåð TAXI HUD", "{FFFFFF}Ââåäèòå òåêñò äëÿ áèíäåðà\n!id - çàìåíèòñÿ íà ID ÷åëîâåêà ÷åé âûçîâ Âû ïðèíÿëè\n!dist - çàìåíèòñÿ íà äèñòàíöèþ äî ìåòêè âûçîâà", "Âûáðàòü", "Çàêðûòü", 1, A1)
|
|
|
end
|
|
|
if A1 == 3 then
|
|
|
local file = io.open(adress.binder, "r")
|
|
|
local fileText = ""
|
|
|
if file ~= nil then
|
|
|
for line in file:lines() do
|
|
|
if line ~= A2 then
|
|
|
fileText = fileText..line.."\n"
|
|
|
end
|
|
|
end
|
|
|
io.close(file)
|
|
|
end
|
|
|
file = io.open(adress.binder, "w")
|
|
|
file:write(fileText)
|
|
|
file:flush()
|
|
|
io.close(file)
|
|
|
local f = io.open(adress.binder, 'r')
|
|
|
if f then
|
|
|
BindText = bind_read()
|
|
|
end
|
|
|
end
|
|
|
if A1 == 4 then
|
|
|
ShowDialog("Áèíäåð TAXI HUD", " ", "Âûáðàòü", "Çàêðûòü", 1, A1, A2)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function bind_read()
|
|
|
local f = io.open(adress.binder, 'r')
|
|
|
local array = {}
|
|
|
if f then
|
|
|
for line in f:lines() do
|
|
|
array[#array + 1] = line
|
|
|
end
|
|
|
io.close(f)
|
|
|
end
|
|
|
return array
|
|
|
end
|
|
|
|
|
|
function ShowDialog(Caption, dialogText, button1, button2, style, A1, A2, A3)
|
|
|
sampShowDialog(0, Caption, dialogText, button1, button2, style)
|
|
|
lua_thread.create(function()
|
|
|
stopThread = true
|
|
|
wait(100)
|
|
|
stopThread = false
|
|
|
if A1 == 1 then sampSetCurrentDialogEditboxText(ini1.Settings[A2]) end
|
|
|
if A1 == 4 then sampSetCurrentDialogEditboxText(A2) end
|
|
|
repeat
|
|
|
wait(0)
|
|
|
local result, button, list, input = sampHasDialogRespond(0)
|
|
|
if result then
|
|
|
if A1 == 0 then
|
|
|
if button == 1 then
|
|
|
Key = { [1] = "Key1", [2] = "Key2", [3] = "GPSkd", [6] = "FontName", [7] = "FontSize", [8] = "FontFlag" }
|
|
|
if Key[list] ~= nil then
|
|
|
DialogText(1, Key[list])
|
|
|
else
|
|
|
DialogText(0)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if A1 == 1 then
|
|
|
if button == 1 and #input > 0 and A2 ~= nil then
|
|
|
ini1.Settings[A2] = input
|
|
|
inicfg.save(ini1, adress.general)
|
|
|
font = renderCreateFont(ini1.Settings.FontName, ini1.Settings.FontSize, ini1.Settings.FontFlag)
|
|
|
end
|
|
|
DialogText(0)
|
|
|
end
|
|
|
if A1 == 2 then
|
|
|
if button == 1 and #input > 0 then
|
|
|
local file = io.open(adress.binder, "a")
|
|
|
file:write(input.."\n")
|
|
|
file:flush()
|
|
|
io.close(file)
|
|
|
end
|
|
|
end
|
|
|
if A1 == 4 then
|
|
|
if button == 1 and #input > 0 then
|
|
|
local file = io.open(adress.binder, "r")
|
|
|
local fileText = ""
|
|
|
if file ~= nil then
|
|
|
for line in file:lines() do
|
|
|
if line == A2 then
|
|
|
line = input
|
|
|
end
|
|
|
fileText = fileText..line.."\n"
|
|
|
end
|
|
|
io.close(file)
|
|
|
end
|
|
|
file = io.open(adress.binder, "w")
|
|
|
file:write(fileText)
|
|
|
file:flush()
|
|
|
io.close(file)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
until not sampIsDialogActive() or stopThread
|
|
|
end)
|
|
|
end
|
|
|
|
|
|
function DialogNoob(int)
|
|
|
if int == 1 then
|
|
|
stopThread = true
|
|
|
local text = ""
|
|
|
Ndialog = {}
|
|
|
NdialogInput = {}
|
|
|
for id = 0, 999 do
|
|
|
if sampIsPlayerConnected(id) then
|
|
|
local score = sampGetPlayerScore(id)
|
|
|
if score == 1 then
|
|
|
local name = sampGetPlayerNickname(id)
|
|
|
NdialogInput[#NdialogInput + 1] = id
|
|
|
text = text..name.."("..id..")\t"..(noobQuest[name] ~= nil and noobQuest[name] or ' ')..'\n'
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
sampShowDialog(2894, "Íîâè÷êè ñåðâåðà", text, "Âûáðàòü", "Çàêðûòü", 4)
|
|
|
lua_thread.create(function()
|
|
|
wait(100)
|
|
|
stopThread = false
|
|
|
repeat
|
|
|
wait(0)
|
|
|
local result, button, list, input = sampHasDialogRespond(2894)
|
|
|
if result and sampGetDialogCaption() == "Íîâè÷êè ñåðâåðà" then
|
|
|
if button == 1 and NdialogInput[list + 1] ~= nil then
|
|
|
NdialogID = NdialogInput[list + 1]
|
|
|
QuestRead = 1
|
|
|
sampSendChat("/quest")
|
|
|
end
|
|
|
end
|
|
|
until not sampIsDialogActive() or stopThread
|
|
|
end)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function Click(font, text, posX, posY)
|
|
|
renderFontDrawText(font, "{e4ed3e}"..text, posX, posY, 0xFFFFFFFF)
|
|
|
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 and control then
|
|
|
renderFontDrawText(font, text, posX, posY, 0xFFFFFFFF)
|
|
|
if isKeyJustPressed(1) then
|
|
|
return true
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
function isTaxi()
|
|
|
if (isCharInModel(PLAYER_PED, 420) or isCharInModel(PLAYER_PED, 438) or isCharInModel(PLAYER_PED, 405) or isCharInModel(PLAYER_PED, 560) or isCharInModel(PLAYER_PED, 402)) and getDriverOfCar(getCarCharIsUsing(playerPed)) == playerPed then
|
|
|
local Vehicle = storeCarCharIsInNoSave(PLAYER_PED)
|
|
|
local Color1, Color2 = getCarColours(Vehicle)
|
|
|
if Color1 == 6 then
|
|
|
return true
|
|
|
else
|
|
|
return false
|
|
|
end
|
|
|
else
|
|
|
return false
|
|
|
end
|
|
|
end |