Client.lua
local dxMarker = createMarker(markerT[1],markerT[2],markerT[3]-0.1, "cylinder", 1, 255, 255, 255, 0)
local ped = createPed(skinTractor,markerT[1],markerT[2],markerT[3])
setElementRotation(ped, 0, 0, 90)
addEventHandler( "onClientRender", root, function ()
local x, y, z = getElementPosition(dxMarker)
local Mx, My, Mz = getCameraMatrix()
if (getDistanceBetweenPoints3D(x, y, z, Mx, My, Mz) <= 20) then
local WorldPositionX, WorldPositionY = getScreenFromWorldPosition(x, y, z +1, 0.07)
if (WorldPositionX and WorldPositionY) then
dxDrawText("Работа тракториста", WorldPositionX - 1, WorldPositionY + 1, WorldPositionX - 1, WorldPositionY + 1, tocolor(0, 0, 0, 255), 1.52, "default-bold", "center", "center", false, false, false, false, false)
dxDrawText("Работа тракториста", WorldPositionX - 1, WorldPositionY + 1, WorldPositionX - 1, WorldPositionY + 1, tocolor(255, 255, 255, 255), 1.50, "default-bold", "center", "center", false, false, false, false, false)
end
end
end
)
local markerState = 1
function getMarkerCurrentState ()
return markerState
end
function updateMarkerCurrentState ()
markerState = markerState + 1
end
function restoreMarkerCurrentState ()
markerState = 1
end
function isMarchEnd ()
if getMarkerCurrentState () >= #tractorMarks then
return true
else
return false
end
end
local markerT = createMarker(markerT[1],markerT[2],markerT[3]-1, "cylinder", 1, 255, 255, 255, 0) --Создание маркера для устройства
local blip = createBlipAttachedTo(markerT, 38, 2, 255, 255, 255, 255, 0, 150)
function centerWindow ( center_window ) --Создание GUI устройства
local sx, sy = guiGetScreenSize ( )
local windowW, windowH = guiGetSize ( center_window, false )
local x, y = ( sx - windowW ) / 2, ( sy - windowH ) / 2
guiSetPosition ( center_window, x, y, false )
end
local sw,sh = guiGetScreenSize()
local window={}
local label={}
local button={}
wndTra = guiCreateWindow(0,0,400,120,"Работа трактористом ",false)
centerWindow(wndTra)
guiSetVisible(wndTra,false)
labeTra = guiCreateLabel(5,25,390,50,"Добро пожаловать на работу трактористом.\nВаша задача собирать траву на поле.",false,wndTra)
guiSetFont(labeTra, "default-bold-small")
guiLabelSetHorizontalAlign(labeTra, "center", false)
buttonTra1 = guiCreateButton(10,70,180,35,"Начать",false,wndTra)
guiSetFont(buttonTra1,"default-bold-small")
guiSetProperty(buttonTra1, "NormalTextColour", "FF00FF00")
buttonTra2 = guiCreateButton(210,70,180,35,"Закрыть",false,wndTra)
guiSetFont(buttonTra2,"default-bold-small")
guiSetProperty(buttonTra2, "NormalTextColour", "FFFF0000")
function createMarkerTractor(player) --Создание маркера сбора
if player == getLocalPlayer() then
m = tractorMarks[ getMarkerCurrentState () ]
updateMarkerCurrentState ()
local marker = createMarker(m[1],m[2],m[3]-1, "cylinder", 2, 0, 255, 0, 80)
setElementData(marker,"tractor_mark",true)
setElementData(player,"tractor_mark",marker)
local blip = createBlip(m[1],m[2],m[3],41,3)
setElementData(player,"tractor_blip",blip)
local obj = createObject(855,m[1],m[2],m[3]-2)
setObjectScale(obj, 1.0)
setElementCollisionsEnabled (obj, false)
setElementData(player,"tractor_obj",obj)
end
end
function deleteMarkerTractor(player) --Удаление маркера сора
if player == getLocalPlayer() then
local marker = getElementData(player,"tractor_mark")
local blip = getElementData(player,"tractor_blip")
local obj = getElementData(player,"tractor_obj")
if marker then if isElement(marker) then destroyElement(marker) end end
if blip then if isElement(blip) then destroyElement(blip) end end
if obj then if isElement(obj) then destroyElement(obj) end end
end
end
addEvent("deleteMarkerTractor", true)
addEventHandler("deleteMarkerTractor", getRootElement(), deleteMarkerTractor)
function startClick() --Сбор
local player = getLocalPlayer()
if (source == buttonTra1) then
guiSetVisible(wndTra,false)
showCursor(false)
local state = getElementData(player,"tractor_works")
if not state then
triggerServerEvent("start_Tractor",player,player)
setElementData(player,"tractor_works",0)
createMarkerTractor(player)
outputChatBox("#1E90FF[Тракторист] #FFFFFFВы начали работу. Следуйте к метке.",255,255,255,true)
setElementData(player,"skinback",getElementModel(player))
setElementModel(player,158)
setElementData(player,"tractor_plus",0)
setElementData(player,"zp_now",moneyTra)
else
triggerServerEvent("stop_Tractor",player,player)
local hodok = tonumber(state)
local profit = getElementData(player,"zp_all")
if not profit then profit = 0 end
setElementData(player,"zp_all",nil)
setElementData(player,"zp_now",nil)
triggerServerEvent("giveMoneyTractor",player,player,profit)
setElementData(player,"tractor_works",nil)
setElementModel(player,getElementData(player,"skinback"))
deleteMarkerTractor(player)
end
elseif (source == buttonTra2) then
guiSetVisible(wndTra,false)
showCursor(false)
end
end
addEventHandler("onClientGUIClick", getRootElement(), startClick)
function onClientMarkerHit(player, mdim) --Окончание работы
if player == getLocalPlayer() then
if mdim then
local veh = getPedOccupiedVehicle(player)
local state = getElementData(player,"tractor_works")
if getElementData(source,"tractor_mark") then
if veh then
setElementData(player,"tractor_plus",tonumber(getElementData(player,"tractor_plus")) + 1)
if getElementData(player,"tractor_plus") >= #tractorMarks then
restoreMarkerCurrentState ()
local pacienty = tonumber(getElementData(player,"tractor_plus"))
if pacienty > 0 then
setElementData(player,"tractor_works",tonumber(state) + pacienty)
setElementData(player,"tractor_plus",0)
if not getElementData(player,"zp_all") then
setElementData(player,"zp_all",0)
end
if not getElementData(player,"zp_all") then
setElementData(player,"zp_now",0)
end
setElementData(player,"zp_all",getElementData(player,"zp_all") + getElementData(player,"zp_now"))
deleteMarkerTractor(player)
outputChatBox("#1E90FF[Тракторист] #FFFFFFРабота выполнена. Всего заработано: #00FF00"..getElementData(player,"zp_all").." #FFFFFFруб.",255,255,255,true)
outputChatBox("#1E90FF[Тракторист] #FFFFFFУвольтесь, чтобы забрать зарплату.",255,255,255,true)
end
else
deleteMarkerTractor(player)
createMarkerTractor(player)
end
end
end
end
end
end
addEventHandler("onClientMarkerHit", getRootElement(), onClientMarkerHit)
addEventHandler ( "onClientMarkerHit", getRootElement(), function(ply)
if ply ~= localPlayer then return end
if source == markerT then
local state = getElementData(ply,"tractor_works")
local veh = getPedOccupiedVehicle(ply)
if not veh then
guiSetVisible(wndTra,true)
showCursor(true)
if not state then
guiSetText(buttonTra1,"Начать")
else
guiSetText(buttonTra1,"Завершить")
end
end
end
end)
Server.lua
function start_Tractor(player) --Спавн трактора с прицепом
local veh = createVehicle(531,spawnTractor[1],spawnTractor[2],spawnTractor[3], 0, 0, 160)
setElementData(player,"tractor_veh",veh)
trailer = createVehicle(610, 0, 0, 4, 0, 0, 160)
attachTrailerToVehicle(veh, trailer)
setElementData(player,"trailer_veh",trailer)
setElementData(veh,"tractor_plus",0)
warpPedIntoVehicle(player,veh)
setElementData(veh, "vehicle:Work", true)
setElementData(veh, "vehicle:Work:Owner", player)
end
addEvent("start_Tractor", true)
addEventHandler("start_Tractor", getRootElement(), start_Tractor)
function enterVehicle ( player ) --Проверка владельца трактора
local data = getElementData(source, "vehicle:Work")
if not data then return end
local owner = getElementData(source, "vehicle:Work:Owner")
if owner ~= player then
cancelEvent()
outputChatBox("#1E90FF[Тракторист] #FFFFFFЭто не ваш транспорт.",player,255,255,255,true)
end
end
addEventHandler ( "onVehicleStartEnter", getRootElement(), enterVehicle )
function stop_Tractor(player) --Удаление трактора
local state = getElementData(player,"tractor_works")
local veh1 = getElementData(player,"tractor_veh")
local veh2 = getElementData(player,"trailer_veh")
if state then
if veh1 then
destroyElement(veh1)
setElementData(player,"tractor_veh",nil)
end
if veh2 then
destroyElement(veh2)
setElementData(player,"trailer_veh",nil)
end
end
triggerClientEvent("deleteMarkerTractor",player,player)
end
addEvent("stop_Tractor", true)
addEventHandler("stop_Tractor", getRootElement(), stop_Tractor)
function giveMoneyTractor(player, summa) --Выдача денег
local state = getElementData(player,"tractor_works")
if state then
givePlayerMoney(player, summa)
outputChatBox("#1E90FF[Тракторист] #FFFFFFСмена завершена. Ваша зарплата #00FF00"..summa.." #FFFFFFруб.",player,255,255,255,true)
end
end
addEvent("giveMoneyTractor", true)
addEventHandler("giveMoneyTractor", getRootElement(), giveMoneyTractor)
function job_quit() --Если человек вышел
local player = source
local state = getElementData(player,"tractor_works")
if state then
local veh = getElementData(player,"tractor_veh")
if veh then
destroyElement(veh)
setElementData(player,"tractor_veh",nil)
end
end
end
addEventHandler("onPlayerQuit", root, job_quit)
function onVehicleStartEnter( player, seat, jacked )
local veh = source
local pveh = getElementData(player,"tractor_veh")
if veh == pveh then
setElementData(player,"tractor_del",nil)
end
end
addEventHandler ( "onVehicleStartEnter", getRootElement(), onVehicleStartEnter)
setTimer(function()
for lol,player in ipairs(getElementsByType("player")) do --Если вышел из трактора
local pveh = getElementData(player,"tractor_veh")
if pveh then
local driverA = getVehicleOccupant(pveh)
if driverA == player then
if getElementData(player,"tractor_del") then
setElementData(player,"tractor_del",nil)
end
else
if getElementData(player,"tractor_del") then
setElementData(player,"tractor_del",tonumber(getElementData(player,"tractor_del")) - 1)
if tonumber(getElementData(player,"tractor_del")) < 0 then
setElementData(player,"tractor_del",nil)
stop_Tractor(player)
outputChatBox("#1E90FF[Тракторист] #FFFFFFВы покинули рабочий транспорт. Работа окончена.",player,255,255,255,true)
end
end
end
end
end
end,1000,0)
function onVehicleExit(player,seat) --Выход из трактора
if seat == 0 then
local pveh = getElementData(player,"tractor_veh")
if source == pveh then
setElementData(player,"tractor_del",60)
outputChatBox("#1E90FF[Тракторист] #FFFFFFЕсли вы не вернетесь в транспорт, через 60 сек. он будет убран.",player,255,255,255,true)
end
end
end
addEventHandler("onVehicleExit", getRootElement(), onVehicleExit)
function onPlayerWasted()
giveMoneyTractor(source)
end
addEventHandler("onPlayerWasted", getRootElement(), onPlayerWasted)
function onPlayerQuit()
giveMoneyTractor(source)
end
addEventHandler("onPlayerQuit", getRootElement(), onPlayerQuit)
Shared.lua
markerT = {-103.97047424316, 9.280517578125, 3.1171875} -- Маркер устройства.
skinTractor = 158 -- ID рабочего скина.
moneyTra = 200-- Зп за один маркер
spawnTractor = {-123.93685150146,58.673442840576,3.1171875} -- Спавна трактора.
tractorMarks = { -- Координаты сбора.
{-129.10345458984, 44.776748657227, 3.1171875},
{-140.21569824219, 35.499088287354, 3.1171875},
{-138.20004272461, 22.663047790527, 3.1171875},
{-148.60707092285, 14.514667510986, 3.1171875},
{-145.90365600586, 3.4965758323669, 3.1171875},
-- {-156.54542541504, -6.012909412384, 3.1171875},
-- {-154.13597106934, -17.593681335449, 3.1171875},
-- {-164.40188598633, -27.394626617432, 3.1171875},
-- {-162.29643249512, -39.118156433105, 3.1171875},
-- {-171.7504119873, -45.86404800415, 3.1171875},
-- {-169.89549255371, -58.790817260742, 3.1171875},
-- {-179.14767456055, -66.964935302734, 3.1171875},
-- {-180.8540802002, -80.188659667969, 3.1171875},
-- {-192.09867858887, -82.351318359375, 3.1171875},
-- {-194.74926757813, -68.188079833984, 3.1171875},
-- {-184.73794555664, -59.438095092773, 3.1171875},
-- {-187.86322021484, -46.48645401001, 3.1171875},
-- {-176.4867401123, -37.576705932617, 3.1171875},
-- {-178.89535522461, -23.708335876465, 3.1171875},
-- {-167.26829528809, -14.703594207764, 3.1171875},
-- {-169.14628601074, 0.85636925697327, 3.1171875},
-- {-157.40020751953, 11.213445663452, 3.1171875},
-- {-163.81475830078, 27.186906814575, 3.109395980835},
-- {-151.95930480957, 38.768440246582, 3.1171875},
-- {-155.29359436035, 53.715530395508, 3.1171875},
-- {-144.55880737305, 61.669063568115, 3.1171875},
-- {-153.22250366211, 73.040794372559, 3.1171875},
-- {-164.96725463867, 64.920394897461, 3.1171875},
-- {-160.10667419434, 51.389507293701, 3.1171875},
-- {-172.44535827637, 43.420669555664, 3.1171875},
-- {-168.49655151367, 27.312816619873, 3.1171875},
-- {-181.05578613281, 18.532829284668, 3.109395980835},
-- {-176.61128234863, 4.3219885826111, 3.109395980835},
-- {-188.57684326172, -7.4416480064392, 3.109395980835},
-- {-186.15411376953, -23.690855026245, 3.1171875},
-- {-199.10632324219, -34.989559173584, 3.1171875},
-- {-196.35543823242, -49.323276519775, 3.1171875},
-- {-207.32098388672, -57.854675292969, 3.1171875},
-- {-204.13220214844, -74.361557006836, 3.1171875},
-- {-214.03121948242, -81.115821838379, 3.1171875},
-- {-222.42245483398, -71.313377380371, 3.1171875},
-- {-211.78359985352, -60.138431549072, 3.1171875},
-- {-217.53211975098, -41.33757019043, 3.1171875},
-- {-205.04089355469, -31.443368911743, 3.1171875},
-- {-207.49635314941, -12.911985397339, 3.1171875},
-- {-195.17124938965, -1.4358625411987, 3.109395980835},
-- {-199.52687072754, 22.681520462036, 3.1171875},
-- {-187.56085205078, 33.805614471436, 3.1171875},
-- {-190.6788482666, 50.106971740723, 3.1171875},
-- {-178.33522033691, 60.7131690979, 3.1171875},
-- {-182.21771240234, 76.404037475586, 3.1171875},
-- {-191.54174804688, 87.14820098877, 3.1171875},
-- {-203.26365661621, 79.401123046875, 3.1171875},
-- {-199.90397644043, 61.27318572998, 3.1171875},
-- {-212.61807250977, 50.887119293213, 3.1171875},
-- {-209.3896484375, 34.510997772217, 3.1171875},
-- {-221.73179626465, 23.422630310059, 3.1171875},
-- {-217.9956817627, 8.4652395248413, 3.1171875},
-- {-231.29121398926, -4.3941593170166, 3.109395980835},
-- {-227.30709838867, -17.375923156738, 3.1171875},
-- {-238.58776855469, -26.8854637146, 3.1171875},
-- {-234.0107421875, -40.141651153564, 3.1171875},
-- {-245.84834289551, -50.500583648682, 3.1171875},
-- {-243.30256652832, -64.259651184082, 3.1171875},
-- {-253.69897460938, -70.972732543945, 3.1171875},
-- {-261.44381713867, -60.243770599365, 3.1171875},
-- {-264.31607055664, -45.27653503418, 3.1171875},
-- {-253.13627624512, -37.03816986084, 3.1171875},
-- {-256.28436279297, -21.476554870605, 2.5999567508698},
-- {-243.57893371582, -5.2200374603271, 2.8984375},
-- {-246.77336120605, 13.520101547241, 2.5481338500977},
-- {-232.55879211426, 27.493730545044, 2.8690776824951},
-- {-235.26802062988, 47.376792907715, 2.5473833084106},
-- {-221.7456817627, 60.752349853516, 2.8304569721222},
-- {-226.7194519043, 72.61767578125, 2.5015366077423},
-- {-214.16030883789, 83.426750183105, 2.7792901992798},
-- {-217.92860412598, 94.814697265625, 2.4680054187775},
-- {-227.80729675293, 97.381309509277, 2.0782046318054},
-- {-227.83094787598, 81.953834533691, 2.3373956680298},
-- {-242.23078918457, 74.386619567871, 1.953736782074},
-- {-236.50303649902, 54.08487701416, 2.4138503074646},
-- {-253.51921081543, 43.162837982178, 1.965989947319},
-- {-248.65715026855, 20.133153915405, 2.3974192142487},
-- {-265.92660522461, 3.4994027614594, 1.9778387546539},
-- {-260.5168762207, -20.83599281311, 2.453197479248},
-- {-276.29504394531, -35.595523834229, 2.0164685249329},
-- {-271.26129150391, -54.640983581543, 3.1171875},
}
Все никак не могу сделать чтобы считалось сумма зарплаты от одного маркера
То есть 1 маркер например 50 долларов и считалось за сумму маркеров
Прошу помогите уже совсем запутался