! Koniecznie zapoznaj się z regulaminem forum.
Pamiętaj, aby zawsze go przestrzegać, nie mniej ważne są również regulaminy działów, w których się wypowiadasz!
Zamiast zakładać temat po kilka razy, bo jest usuwany przez Administrację, przejrzyj regulamin i napisz poprawnie temat!
Sprawy z administracją możesz załatwiać anonimowo w tym dziale.
Najważniejsze informacje od Administracji możesz przeczytać tutaj oraz tutaj.
Wiesz moze jak dodac przebieg do licznika? Taki na dxDrawText czy jakos tak
local przebieg = getElementData(jakispojazd,"przebieg")
dxDrawText(przebieg,0.3,0.5)
Oczywi?cie musi to by? w evencie onClientRender.
Takie co? mam i nie dzia?a:
local sX, sY = guiGetScreenSize()
g_root = getRootElement()
g_rootElement = getResourceRootElement( getThisResource() )
g_Player = getLocalPlayer()
c_EnableScaling = true
-- --> These values will be scaled with screen size
-- Offsets from the lower right screen corner
c_XOffset = 450
c_YOffset = 1.00
c_ImageW = 2850
c_ImageH = 2850
c_BarW = 50
c_BarH = 10
c_BarYOffset = 70
-- <--
-- All other values are fixed
c_FireTimeMs = 5000
c_BarAlpha = 120
c_BarFlashInterval = 300
g_tFireStart = nil
function drawNeedle()
if not isPedInVehicle(g_Player) then
-- Fallback for player exiting car without onClientVehicleStartExit event
-- (e.g. falling off a bike)
hideSpeedometer()
end
local vehSpeed = getVehicleSpeed()
--local vehHealth = getElementHealth(source,getPedOccupiedVehicle(g_Player))
if vehHealth and (vehHealth > 0) then
-- Show a little red/green health bar on the speedo
local hp = (vehHealth-250)/750
local curBarLen = hp*g_BarW
if curBarLen < 1 then curBarLen = 1 end
-- green/yellow till 50%, then yellow/red
local r = 255*(1 - hp)/0.5
if r > 255 then r = 255 end
local g = 255*hp/0.5
if g > 255 then g = 255 end
if g < 0 then g = 0 end
if hp >= 0 then
g_tFireStart = nil
dxDrawRectangle(x + g_ImageW/2 - g_BarW/2, y + g_BarYOffset, curBarLen, g_BarH, tocolor(r, g, 0, c_BarAlpha))
else
-- Flash red bar for 5s when car is about to blow
if not g_tFireStart then g_tFireStart = getTickCount() end
local firePerc = (c_FireTimeMs - (getTickCount() - g_tFireStart)) / c_FireTimeMs
if firePerc < 0 then firePerc = 0 end
local a = c_BarAlpha
if (getTickCount()/c_BarFlashInterval)%2 > 1 then a = 0 end
dxDrawRectangle(x + g_ImageW/2 - g_BarW/2, y + g_BarYOffset, firePerc*g_BarW, g_BarH, tocolor(255, 0, 0, a))
end
end
-- Draw rotated needle image
-- Image is scaled exactly 1? per kmh of speed, so we can use vehSpeed directly
dxDrawImage(x, y, g_ImageW, g_ImageH, "needle.png", vehSpeed, 0, 0, white, true)
end
function showSpeedometer()
guiSetVisible(disc, true)
addEventHandler("onClientRender", g_root, drawNeedle)
end
function hideSpeedometer()
guiSetVisible( disc, false)
removeEventHandler("onClientRender", g_root, drawNeedle)
end
function getVehicleSpeed()
if isPedInVehicle(g_Player) then
local vx, vy, vz = getElementVelocity(getPedOccupiedVehicle(g_Player))
return math.sqrt(vx^2 + vy^2 + vz^2) * 161
end
return 0
end
addEventHandler("onClientVehicleEnter", g_root,
function(thePlayer)
if thePlayer == g_Player then
showSpeedometer()
end
end
)
addEventHandler("onClientVehicleStartExit", g_root,
function(thePlayer)
if thePlayer == g_Player then
hideSpeedometer()
end
end
)
function round(num)
return math.floor(num + 0.3)
end
function initGui()
if disc then
destroyElement(disc)
end
g_screenWidth, g_screenHeight = guiGetScreenSize()
local scale
if c_EnableScaling then
scale = (g_screenWidth/14000 + g_screenHeight/13550)/2
else
scale = 1
end
g_XOffset = round(c_XOffset*scale)
g_YOffset = round(c_YOffset*scale)
g_ImageW = round(c_ImageW*scale)
g_ImageH = round(c_ImageH*scale)
g_BarW = round(c_BarW*scale)
g_BarH = round(c_BarH*scale)
g_BarYOffset = round(c_BarYOffset*scale)
disc = guiCreateStaticImage(g_screenWidth - g_ImageW - g_XOffset, g_screenHeight - g_ImageH - g_YOffset, g_ImageW, g_ImageH, "disc.png", false)
x, y = guiGetPosition(disc, false)
end
addEventHandler("onClientResourceStart", g_rootElement,
function ()
initGui()
guiSetVisible(disc, false)
setTimer(function()
local w, h = guiGetScreenSize()
if (w ~= g_screenWidth) or (h ~= g_screenHeight) then
initGui()
end
end, 500, 0)
if isPedInVehicle(g_Player) then
showSpeedometer()
end
end
)
function przebieg ( )
local vehicle = getPedOccupiedVehicle(localPlayer)
local przebieg = getElementData(vehicle, "vehicle:mileage")
if przebieg then
dxDrawText("Przebieg: "..math.floor(przebieg/1000).." km", sX - 366, sY - 90, sX - 10, sY, tocolor(255,255,255,255), 1, "default", "center", "center", false, true)
end
end
addEventHandler("onClientVehicleEnter", getRootElement(), przebieg)
Taki b??d w db3:
WARNING: Licznik/speedom.lua:145: Bad argument @ 'getElementData' [Expected element at argument 1, got nill]
! Koniecznie zapoznaj się z regulaminem forum.
Pamiętaj, aby zawsze go przestrzegać, nie mniej ważne są również regulaminy działów, w których się wypowiadasz!
Zamiast zakładać temat po kilka razy, bo jest usuwany przez Administrację, przejrzyj regulamin i napisz poprawnie temat!
Sprawy z administracją możesz załatwiać anonimowo w tym dziale.
Najważniejsze informacje od Administracji możesz przeczytać tutaj oraz tutaj.
Przebieg teraz si? wy?wietla ale nie nalicza.
Tak wygl?da kod:
local sX, sY = guiGetScreenSize()
g_root = getRootElement()
g_rootElement = getResourceRootElement( getThisResource() )
g_Player = getLocalPlayer()
c_EnableScaling = true
-- --> These values will be scaled with screen size
-- Offsets from the lower right screen corner
c_XOffset = 450
c_YOffset = 1.00
c_ImageW = 2850
c_ImageH = 2850
c_BarW = 50
c_BarH = 10
c_BarYOffset = 70
-- <--
-- All other values are fixed
c_FireTimeMs = 5000
c_BarAlpha = 120
c_BarFlashInterval = 300
g_tFireStart = nil
function drawNeedle()
if not isPedInVehicle(g_Player) then
-- Fallback for player exiting car without onClientVehicleStartExit event
-- (e.g. falling off a bike)
hideSpeedometer()
end
local vehSpeed = getVehicleSpeed()
--local vehHealth = getElementHealth(source,getPedOccupiedVehicle(g_Player))
if vehHealth and (vehHealth > 0) then
-- Show a little red/green health bar on the speedo
local hp = (vehHealth-250)/750
local curBarLen = hp*g_BarW
if curBarLen < 1 then curBarLen = 1 end
-- green/yellow till 50%, then yellow/red
local r = 255*(1 - hp)/0.5
if r > 255 then r = 255 end
local g = 255*hp/0.5
if g > 255 then g = 255 end
if g < 0 then g = 0 end
if hp >= 0 then
g_tFireStart = nil
dxDrawRectangle(x + g_ImageW/2 - g_BarW/2, y + g_BarYOffset, curBarLen, g_BarH, tocolor(r, g, 0, c_BarAlpha))
else
-- Flash red bar for 5s when car is about to blow
if not g_tFireStart then g_tFireStart = getTickCount() end
local firePerc = (c_FireTimeMs - (getTickCount() - g_tFireStart)) / c_FireTimeMs
if firePerc < 0 then firePerc = 0 end
local a = c_BarAlpha
if (getTickCount()/c_BarFlashInterval)%2 > 1 then a = 0 end
dxDrawRectangle(x + g_ImageW/2 - g_BarW/2, y + g_BarYOffset, firePerc*g_BarW, g_BarH, tocolor(255, 0, 0, a))
end
end
-- Draw rotated needle image
-- Image is scaled exactly 1? per kmh of speed, so we can use vehSpeed directly
dxDrawImage(x, y, g_ImageW, g_ImageH, "needle.png", vehSpeed, 0, 0, white, true)
end
function showSpeedometer()
guiSetVisible(disc, true)
addEventHandler("onClientRender", g_root, drawNeedle)
end
function hideSpeedometer()
guiSetVisible( disc, false)
removeEventHandler("onClientRender", g_root, drawNeedle)
end
function getVehicleSpeed()
if isPedInVehicle(g_Player) then
local vx, vy, vz = getElementVelocity(getPedOccupiedVehicle(g_Player))
return math.sqrt(vx^2 + vy^2 + vz^2) * 161
end
return 0
end
addEventHandler("onClientVehicleEnter", g_root,
function(thePlayer)
if thePlayer == g_Player then
showSpeedometer()
end
end
)
addEventHandler("onClientVehicleStartExit", g_root,
function(thePlayer)
if thePlayer == g_Player then
hideSpeedometer()
end
end
)
function round(num)
return math.floor(num + 0.3)
end
function initGui()
if disc then
destroyElement(disc)
end
g_screenWidth, g_screenHeight = guiGetScreenSize()
local scale
if c_EnableScaling then
scale = (g_screenWidth/14000 + g_screenHeight/13550)/2
else
scale = 1
end
g_XOffset = round(c_XOffset*scale)
g_YOffset = round(c_YOffset*scale)
g_ImageW = round(c_ImageW*scale)
g_ImageH = round(c_ImageH*scale)
g_BarW = round(c_BarW*scale)
g_BarH = round(c_BarH*scale)
g_BarYOffset = round(c_BarYOffset*scale)
disc = guiCreateStaticImage(g_screenWidth - g_ImageW - g_XOffset, g_screenHeight - g_ImageH - g_YOffset, g_ImageW, g_ImageH, "disc.png", false)
x, y = guiGetPosition(disc, false)
end
addEventHandler("onClientResourceStart", g_rootElement,
function ()
initGui()
guiSetVisible(disc, false)
setTimer(function()
local w, h = guiGetScreenSize()
if (w ~= g_screenWidth) or (h ~= g_screenHeight) then
initGui()
end
end, 500, 0)
if isPedInVehicle(g_Player) then
showSpeedometer()
end
end
)
function przebieg ( )
local vehicle = getPedOccupiedVehicle(localPlayer)
local przebieg = getElementData(vehicle, "vehicle:mileage")
if przebieg then
dxDrawText("Przebieg: "..math.floor(przebieg/1000).." km", sX - 366, sY - 90, sX - 10, sY, tocolor(255,255,255,255), 1, "default", "center", "center", false, true)
end
end
addEventHandler("onClientVehicleEnter", getRootElement(), przebieg)
addEventHandler ( "onClientRender", root, przebieg )
A tutaj kod systemu pojazd?w:
--///////////////////////////////////// USTAWIENIA ////////////////////////////////////////
vehicles=0
root=getRootElement()
resourceRoot=getResourceRootElement(getThisResource())
--///////////////////////////////////// WCZYTYWANIE POJAZD?W /////////////////////////////////
function onRespawnVehicles(_,id,poss)
-- Settings (QUERY)
if id then
result=exports["db"]:dbGet("SELECT * FROM ogrpg_vehicles WHERE parking=1 AND id=?", id)
query=exports["db"]:dbSet("UPDATE ogrpg_vehicles SET parking=0 WHERE id=?", id)
else
result=exports["db"]:dbGet("SELECT * FROM ogrpg_vehicles WHERE parking=0")
end
-- Pairs
for ile,vehicle in pairs(result) do
vehicles=ile
if id then pos={poss[1], poss[2], poss[3], poss[4], poss[5], poss[6]}
else pos=split(vehicle["pos"], ",") end
local color=split(vehicle["color"], ",")
local lights=split(vehicle["headlights"], ",")
local veh=createVehicle(vehicle["model"], pos[1], pos[2], pos[3], pos[4], pos[5], pos[6])
setVehicleColor(veh, color[1], color[2], color[3], color[4])
setVehicleHeadLightColor(veh, lights[1], lights[2], lights[3])
setVehiclePlateText(veh, "SF "..vehicle.id)
setElementFrozen(veh, (vehicle["frozen"]) > 0)
setVehiclePaintjob(veh, vehicle["paintjob"])
setElementHealth(veh, vehicle["health"])
setElementData(veh,"vehicle:spawn",true)
setElementData(veh,"vehicle:id", vehicle["id"])
setElementData(veh,"vehicle:fuel", vehicle["fuel"])
setElementData(veh,"vehicle:desc", vehicle["desc"])
setElementData(veh,"vehicle:mileage", vehicle["mileage"])
setElementData(veh,"vehicle:driver", vehicle["driver"])
setElementData(veh,"vehicle:ownedGroup", vehicle["ownedGroup"])
setElementData(veh,"vehicle:ownedPlayer", vehicle["ownedPlayer"])
setElementData(veh,"vehicle:ownedFaction", vehicle["ownedFaction"])
for i,v in ipairs(split(vehicle["tuning"], ",")) do addVehicleUpgrade(veh, v) end
for i,v in ipairs(split(vehicle["panelstates"], ",")) do setVehiclePanelState(veh, i, tonumber(v)) end
end
outputDebugString("[sw-vehicles] Loaded "..vehicles.." vehicles.")
end
--///////////////////////////////////// ZAPISYWANIE POJAZD?W /////////////////////////////////
function onSaveVehicle(vehicle)
if getElementData(vehicle,"vehicle:spawn") then
-- Settings
local panelstates={}
local model=getElementModel(vehicle)
local health=getElementHealth(vehicle)
local x,y,z=getElementPosition(vehicle)
local rx,ry,rz=getElementRotation(vehicle)
local desc=getElementData(vehicle,"vehicle:desc") or ""
local id=getElementData(vehicle,"vehicle:id")
local fuel=getElementData(vehicle,"vehicle:fuel")
local mileage=getElementData(vehicle,"vehicle:mileage")
local c1,c2,c3,c4=getVehicleColor(vehicle)
local driver=getElementData(vehicle,"vehicle:driver") or ""
local faction=getElementData(vehicle,"vehicle:ownedFaction")
local player=getElementData(vehicle,"vehicle:ownedPlayer")
local group=getElementData(vehicle,"vehicle:ownedGroup")
local h1,h2,h3=getVehicleHeadLightColor(vehicle)
local paintjob=getVehiclePaintjob(vehicle)
local frozen= isElementFrozen(vehicle) and 1 or 0
for i=0,6 do table.insert(panelstates, getVehiclePanelState(vehicle,i)) end
panelstates=table.concat(panelstates,",")
upgrades=getVehicleUpgrades(vehicle)
if not upgrades then upgrades={} end
upgrades=table.concat(upgrades, ",")
local plate=getVehiclePlateText(vehicle)
-- Query
local query = exports["db"]:dbSet(string.format("UPDATE ogrpg_vehicles SET model='%d', pos='%.2f,%.2f,%.2f,%.2f,%.2f,%.2f', text='%s', health='%d', fuel='%d', mileage='%d', frozen='%d', driver='%s', color='%d,%d,%d,%d', panelstates='%s', paintjob='%d', tuning='%s', headlights='%d,%d,%d', plateText='%s', ownedFaction='%s', ownedPlayer='%d', ownedGroup='%d' WHERE id=%d",
model, x,y,z, rx,ry,rz, desc, health, fuel, mileage, frozen, driver, c1,c2,c3,c4, panelstates, paintjob, upgrades, h1,h2,h3, plate, faction, player, group, id))
end
end
--///////////////////////////////////// SPRAWDZANIE USTAWIE? /////////////////////////////////
function getSettings(plr,code,value)
local uid=getElementData(plr,"player:uid")
if not uid then return end
if value == "faction" then
local result=exports["db"]:dbGet("SELECT * FROM ogrpg_factions WHERE code=? AND uid=?", code, uid)
if result and #result > 0 then
return result[1].code
else
return false
end
end
if value == "organization" then
local result=exports["db"]:dbGet("SELECT * FROM ogrpg_organizations WHERE code=? AND uid=?", code, uid)
if result and #result > 0 then
return result[1].code
else
return false
end
end
if value == "owner" then
local result=exports["db"]:dbGet("SELECT * FROM ogrpg_users WHERE id=?", uid)
if result and #result > 0 then
return result[1].id
else
return false
end
end
end
--///////////////////////////////////// INNE USTAWIENIA /////////////////////////////////
addEventHandler("onVehicleExit", root, function(_,seat)
if seat ~= 0 then return end
onSaveVehicle(source)
setVehicleEngineState(source, false)
end)
addEventHandler("onPlayerQuit", root, function()
local veh=getPedOccupiedVehicle(source)
if veh then
onSaveVehicle(veh)
end
end)
addEventHandler("onResourceStop", resourceRoot, function()
for i,v in ipairs(getElementsByType("vehicle")) do
onSaveVehicle(v)
end
outputDebugString("[og-vehicles] Saved all vehicles!")
end)
addEventHandler("onVehicleEnter", root, function(plr,seat)
if seat ~= 0 then return end
setVehicleEngineState(source, false)
setElementData(source,"vehicle:driver",getPlayerName(plr))
end)
addEventHandler("onVehicleStartEnter", resourceRoot, function(plr,seat,jacked)
if seat == 0 then
local faction=getElementData(source, "vehicle:ownedFaction")
local group=getElementData(source, "vehicle:ownedGroup")
local player=getElementData(source, "vehicle:ownedPlayer")
if faction and string.len(faction) > 3 then
if faction ~= getSettings(plr,faction,"faction") then
outputChatBox("* Nie jestes zatrudniony/(a) w tej frakcji.", plr, 255, 0, 0)
cancelEvent()
end
return
end
if group and group ~= 0 then
if group ~= getSettings(plr,group,"organization") then
outputChatBox("* Nie jestes zatrudniony/(a) w tej organizacji.", plr, 255, 0 ,0)
cancelEvent()
end
return
end
if player and player ~= getSettings(plr,false,"owner") then
outputChatBox("* Nie masz kluczykow do tego pojazdu.", plr, 255, 0, 0)
cancelEvent()
end
end
end)
addEventHandler("onVehicleStartEnter", root, function(plr,seat,jacked)
if jacked then
cancelEvent()
end
end)
addEventHandler("onResourceStart", resourceRoot, function() onRespawnVehicles(_,false) end)
Nie masz zrobionego naliczania przebiegu, musisz sobie jako? to oblicza?, np. ?e je?eli jedzie od 50 do 55 km/h to nalicz kilka kilometr?w na minute czy jak tam wolisz, pokombinuj i nadawaj elementdat? co jaki? czas
! Koniecznie zapoznaj się z regulaminem forum.
Pamiętaj, aby zawsze go przestrzegać, nie mniej ważne są również regulaminy działów, w których się wypowiadasz!
Zamiast zakładać temat po kilka razy, bo jest usuwany przez Administrację, przejrzyj regulamin i napisz poprawnie temat!
Sprawy z administracją możesz załatwiać anonimowo w tym dziale.
Najważniejsze informacje od Administracji możesz przeczytać tutaj oraz tutaj.
Nie masz zrobionego naliczania przebiegu, musisz sobie jako? to oblicza?, np. ?e je?eli jedzie od 50 do 55 km/h to nalicz kilka kilometr?w na minute czy jak tam wolisz, pokombinuj i nadawaj elementdat? co jaki? czas
Dobra zrobi?em to naliczanie ale nie po mojej my?li ;/ Da si? jako? zrobi? ?eby odczytywa?o przebieg z mysql? Bo system pojazdow mam pod mysql.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach