diff --git a/TruckHUD.lua b/TruckHUD.lua index e43089a..aba86b1 100755 --- a/TruckHUD.lua +++ b/TruckHUD.lua @@ -201,6 +201,9 @@ function main() lua_thread.create(fastmap) lua_thread.create(renderTruckers) lua_thread.create(luChecker.checker) + + + repeat wait(0) until msk_timestamp ~= 0 @@ -4006,7 +4009,8 @@ luChecker = { vehicles = {}, truckers = {}, -- Игроки не в скрипте price_set = {}, - trailer_delete = {} + trailer_delete = {}, + load_position = { x = 0.0, y = 0.0, z = 0.0 } } --[[ @@ -4076,12 +4080,16 @@ function luChecker.vehicleSync(playerId, vehicleId, data) luChecker.truckers[playerId] = {} luChecker.truckers[playerId]["data"] = data luChecker.truckers[playerId]["vehicleId"] = vehicleId + luChecker.truckers[playerId]["trailerDataTime"] = 0 luChecker.truckers[playerId]["trailerData"] = { trailerId = -1 } else luChecker.truckers[playerId]["data"] = data luChecker.truckers[playerId]["vehicleId"] = vehicleId + if os.time() - luChecker.truckers[playerId]["trailerDataTime"] > 5 then + luChecker.truckers[playerId]["trailerData"]["trailerId"] = -1 + end end end end @@ -4089,10 +4097,29 @@ end function luChecker.trailerSync(playerId, data) if not isPlayerHaveTruckHUD(playerId) and luChecker.truckers[playerId] ~= nil then + luChecker.truckers[playerId]["trailerDataTime"] = os.time() + luChecker.checkerLoad(playerId, data, luChecker.truckers[playerId]["data"]["position"]) luChecker.truckers[playerId]["trailerData"] = data end end +function luChecker.checkerLoad(playerId, data, position) -- Проверка когда игрок получил груз + if luChecker.truckers[playerId]["trailerData"]["trailerId"] ~= data["trailerId"] then + sampAddChatMessage(data["trailerId"],-1) + if getLocalPlayerId() ~= playerId then + local x, y, z = luChecker.load_position.x, luChecker.load_position.y, luChecker.load_position.z + local local_x, local_y, local_z = getCharCoordinates(PLAYER_PED) + local trucker_x, trucker_y, trucker_z = position.x, position.y, position.z + local dist_localPlayer_storage = getDistanceBetweenCoords3d(local_x, local_y, local_z, x, y, z) + local dist_trucker_storage = getDistanceBetweenCoords3d(trucker_x, trucker_y, trucker_z, x, y, z) + + if dist_localPlayer_storage <= 120.0 and dist_trucker_storage <= 50.0 then + sampAddChatMessage("игрок получил груз "..playerId.." "..dist_localPlayer_storage.." "..dist_trucker_storage.." +++ "..luChecker.truckers[playerId]["trailerData"]["trailerId"].." ++++ "..data["trailerId"],-1) + end + end + end +end + function luChecker.set3Dtext(type, data_old, data, position) inifiles.Settings.luCheckerCargo = 1 if type == "Порт" then @@ -4107,11 +4134,9 @@ function luChecker.set3Dtext(type, data_old, data, position) elseif type == "Склад" then local cargoName = data[2] 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, position = position } - say("Загрузка на складе рядом "..inifiles.Settings.luCheckerCargo) - end + if cargoId == inifiles.Settings.luCheckerCargo then + luChecker.load_position = { x = position.x, y = position.y, z = position.z } + sampAddChatMessage("порт порт порт "..tonumber(data[1]), -1) end end end @@ -4130,10 +4155,12 @@ function luChecker.checker() 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) + if getLocalPlayerId() ~= playerId then + 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) + end table.remove(luChecker.trailer_delete, 1) table.remove(luChecker.price_set, 1) @@ -4141,6 +4168,10 @@ function luChecker.checker() end end +function getLocalPlayerId() + return select(2,sampGetPlayerIdByCharHandle(PLAYER_PED)) +end + function clear_old_value(key) local delete = {} for i = 1, #luChecker[key] do