diff --git a/TruckHUD.lua b/TruckHUD.lua index bc3a60c..d78c92a 100755 --- a/TruckHUD.lua +++ b/TruckHUD.lua @@ -200,6 +200,7 @@ function main() lua_thread.create(transponder) lua_thread.create(fastmap) lua_thread.create(renderTruckers) + lua_thread.create(luChecker.checker) repeat wait(0) until msk_timestamp ~= 0 @@ -2681,7 +2682,7 @@ function loadEvents() if text:find("Порт") then unload_location = true local cargoN, cargoY, cargoL = string.match(text, v) - luChecker.set3Dtext("Порт", {prices_3dtext[k .. "n"], prices_3dtext[k .. "y"], prices_3dtext[k .. "l"]}, {cargoN, cargoY, cargoL}) + luChecker.set3Dtext("Порт", {prices_3dtext[k .. "n"], prices_3dtext[k .. "y"], prices_3dtext[k .. "l"]}, {cargoN, cargoY, cargoL}, position) prices_3dtext[k .. "n"], prices_3dtext[k .. "y"], prices_3dtext[k .. "l"] = cargoN, cargoY, cargoL prices_3dtext_id[k .. "n"], prices_3dtext_id[k .. "y"], prices_3dtext_id[k .. "l"] = id, id, id prices_3dtext_pos[k .. "n"], prices_3dtext_pos[k .. "y"], prices_3dtext_pos[k .. "l"] = position, position, position @@ -2730,7 +2731,7 @@ function loadEvents() ) else local cargo_save = string.match(text, v) - luChecker.set3Dtext("Склад", {prices_3dtext[k], k}, {cargo_save, k}) + luChecker.set3Dtext("Склад", {prices_3dtext[k], k}, {cargo_save, k}, position) prices_3dtext[k] = cargo_save prices_3dtext_id[k] = id prices_3dtext_pos[k] = position @@ -2758,6 +2759,7 @@ function loadEvents() unload_location = false current_warehouse = "none" end + say("remove 3d text "..Cid) local result, key = isTruck3dTextDefined(Cid) if result then for i = 1, #key do @@ -2777,7 +2779,6 @@ function isTruck3dTextDefined(id) local x, y, z = getCharCoordinates(PLAYER_PED) for k,v in pairs(prices_3dtext_id) do local dist = getDistanceBetweenCoords3d(x, y, z, prices_3dtext_pos[k].x, prices_3dtext_pos[k].y, prices_3dtext_pos[k].z) - say(dist) if id == v and v ~= -1 and dist > 20 then result = true say(k) @@ -4025,8 +4026,6 @@ function isVehicleTruckersDelete(table, vehicleId) local isTrailer = false for k,v in pairs(table) do if v["trailerData"] ~= nil and v["trailerData"].trailerId == vehicleId then - say(v["trailerData"].trailerId) - say("трейлер удален") result = true playerId = k isTrailer = true @@ -4048,11 +4047,14 @@ function luChecker.vehicleStream(stream, vehicleId, data) local result, playerId, isTrailer = isVehicleTruckersDelete(luChecker.truckers, vehicleId) if result then if isTrailer then - say("Трейлер игрока удален") + say("traile delete") + luChecker.trailer_delete[#luChecker.trailer_delete + 1] = { time = os.clock() * 1000, playerId = playerId, position = luChecker.truckers[playerId]["data"]["position"] } + luChecker.truckers[playerId]["trailerData"] = { + trailerId = -1 + } else - say("Машина игрока удалена") + luChecker.truckers[playerId] = nil end - luChecker.truckers[playerId] = nil end luChecker.vehicles[vehicleId] = nil end @@ -4082,14 +4084,14 @@ function luChecker.trailerSync(playerId, data) end end -function luChecker.set3Dtext(type, data_old, data) +function luChecker.set3Dtext(type, data_old, data, position) inifiles.Settings.luCheckerCargo = 1 if type == "Порт" then local key = inifiles.Settings.luCheckerCargo say(string.format("%s %s", data_old[key], data[key])) if tonumber(data_old[key]) ~= 0 and not (tonumber(data_old[key]) == tonumber(data[1])) then if tonumber(data_old[key]) > tonumber(data[key]) then - luChecker.price_set[#luChecker.price_set + 1] = { type = "unload", old_price = tonumber(data_old[key]), new_price = tonumber(data[key]), time = os.clock() * 1000 } + luChecker.price_set[#luChecker.price_set + 1] = { type = "unload", old_price = tonumber(data_old[key]), new_price = tonumber(data[key]), time = os.clock() * 1000, position = position } say("Разгрузка в порту рядом "..inifiles.Settings.luCheckerCargo) end end @@ -4098,13 +4100,51 @@ function luChecker.set3Dtext(type, data_old, data) local cargoId = (cargoName:find("n") and 1 or (cargoName:find("y") and 2 or (cargoName:find("l") and 3 or 0))) if cargoId == inifiles.Settings.luCheckerCargo and tonumber(data_old[1]) ~= 0 and not (tonumber(data_old[1]) == tonumber(data[1])) then if tonumber(data_old[1]) < tonumber(data[1]) then - luChecker.price_set[#luChecker.price_set + 1] = { type = "load", old_price = tonumber(data_old[key]), new_price = tonumber(data[key]), time = os.clock() * 1000 } + luChecker.price_set[#luChecker.price_set + 1] = { type = "load", old_price = tonumber(data_old[key]), new_price = tonumber(data[key]), time = os.clock() * 1000, position = position } say("Загрузка на складе рядом "..inifiles.Settings.luCheckerCargo) end end end end +function luChecker.checker() + while true do + wait(0) + clear_old_value("price_set") + clear_old_value("trailer_delete") + + if luChecker.price_set[1] ~= nil and luChecker.trailer_delete[1] ~= nil then + playerId = luChecker.trailer_delete[1].playerId + type = luChecker.price_set[1].type + old_price = luChecker.price_set[1].old_price + new_price = luChecker.price_set[1].new_price + position_3dtext = luChecker.price_set[1].position + position_trailer = luChecker.trailer_delete[1].position + + local dist = getDistanceBetweenCoords3d(position_3dtext.x,position_3dtext.y,position_3dtext.z,position_trailer.x,position_trailer.y,position_trailer.z) + + local text = string.format("игрок %s %s %s %s", playerId, (type == "load" and "загрузил" or "разгрузил"), inifiles.Settings.luCheckerCargo, dist ) + say(">> "..text) + + table.remove(luChecker.trailer_delete, 1) + table.remove(luChecker.price_set, 1) + end + end +end + +function clear_old_value(key) + local delete = {} + for i = 1, #luChecker[key] do + if os.clock() * 1000 - luChecker[key][i].time > 3000 then + delete[#delete+1] = i + end + end + for i = 1, #delete do + say("remove "..key.." "..i) + table.remove(luChecker[key], delete[i]) + end +end + --- luCheckerCargo --[[