--[[
@author Lukasz Biegaj <wielebny@bestplay.pl>
@author Karer <karer.programmer@gmail.com>
@author RacheT <rachet@pylife.pl>
@copyright 2011-2013 Lukasz Biegaj <wielebny@bestplay.pl>
@license Dual GPLv2/MIT
@package MTA-XyzzyRP
@link https://github.com/lpiob/MTA-XyzzyRP GitHub
]]--
local screenW, screenH = guiGetScreenSize()
local w_m={}
--utils
function math.round(number, decimals, method)
decimals = decimals or 0
local factor = 10 ^ decimals
if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
else return tonumber(("%."..decimals.."f"):format(number)) end
end
function string:split(sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
w_m.wnd = guiCreateStaticImage(0.19, 0.19, 0.72, 0.55, "panel.png", true)
--w_m.wnd = guiCreateWindow(0.1469,0.1667,0.7344,0.675,"Panel mechanika",true)
w_m.btn_napraw = guiCreateButton(0.0277,0.8395,0.3064,0.1327,"Napraw",true,w_m.wnd)
w_m.btn_zamknij = guiCreateButton(0.3427,0.8395,0.3064,0.1327,"Zamknij",true,w_m.wnd)
w_m.lbl_info = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
w_m.lbl_costinfo = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info, "center", true)
guiLabelSetVerticalAlign(w_m.lbl_info, "center")
w_m.grid = guiCreateGridList(0.0298,0.0895,0.9383,0.7191,true,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa = guiGridListAddColumn ( w_m.grid, "Nazwa cz??ci", 0.3 )
w_m.grid_stan = guiGridListAddColumn ( w_m.grid, "Stan cz??ci", 0.3 )
w_m.grid_koszt = guiGridListAddColumn ( w_m.grid, "Koszt naprawy", 0.3 )
guiSetVisible(w_m.wnd,false)
local naprawiany_pojazd=nil
local function kosztNaprawySilnika(v)
local vhp=1000-getElementHealth(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end
local function kosztNaprawyElementu(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return cenapojazdu*przebieg*0.002 -- it's that simple
end
local panele={
[0]="Karoseria lewy prz?d",
[1]="Karoseria prawy prz?d",
[2]="Karoseria lewy ty?",
[3]="Karoseria prawy ty?",
[4]="Szyba przednia",
[5]="Zderzak z przodu",
[6]="Zderzak z ty?u"
}
local stanyPaneli={
[0]="100%",
[1]="66%",
[2]="33%",
[3]="0%",
}
local nazwyDrzwi={
[0]="Maska",
[1]="Baga?nik",
[2]="Drzwi lewy prz?d",
[3]="Drzwi prawy prz?d",
[4]="Drzwi lewy ty?",
[5]="Drzwi prawy ty?"
}
local nazwySwiatel={
[0]="?wiat?o lewy prz?d",
[1]="?wiat?o prawy prz?d",
[2]="?wiat?o lewy ty?",
[3]="?wiat?o prawy ty?"
}
local function fillVehicleData(v)
guiGridListClear(w_m.grid)
do
if getElementHealth(v) ~= 1000 then
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, "Silnik",false,false)
guiGridListSetItemData(w_m.grid,row, 1, -1)
guiGridListSetItemText(w_m.grid,row, 2, math.round(getElementHealth(v)/10).."%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(math.abs(kosztNaprawySilnika(v))+2).."PLN", false, true)
end
end
for i,panel in pairs(panele) do
local stan = getVehiclePanelState(v, i)
if stan ~= 0 then
local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, panel,false,false)
guiGridListSetItemData(w_m.grid,row, 1, i)
local stan=stanyPaneli[getVehiclePanelState(v,i)]
guiGridListSetItemText(w_m.grid,row, 2, stan, false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
-- drzwi
for i=0,5 do
local stan=getVehicleDoorState(v, i)
if stan==2 or stan==3 or stan==4 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwyDrzwi[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+10)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
for i=0,3 do
local stan=getVehicleLightState(v, i)
if stan==1 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwySwiatel[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+20)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
end
addEventHandler("onClientMarkerHit", resourceRoot, function(el,md)
if not md or el~=localPlayer then return end
local cs=getElementData(source, "snn_cs")
if not cs then return end
if getElementData(source, "braniekola") then return end
--local fid=getElementData(source, "snn_faction")
--local lfid=getElementData(el, "player:faction") or -1
--if fid~=lfid then return end -- gracz nie jest pracownikiem]]--
local pojazdy=getElementsWithinColShape(cs,"vehicle")
if #pojazdy<1 then
outputChatBox("Na stanowisku naprawczym nie ma ?adnego pojazdu.")
return
end
if #pojazdy>1 then
outputChatBox("Na stanowisku naprawczym jest zbyt du?o pojazd?w.")
return
end
allCost = setTimer(function(plr)
end, 1000, 0, el)
fillVehicleData(pojazdy[1])
guiSetEnabled(w_m.btn_napraw, false)
guiSetText(w_m.lbl_info,"")
showCursor(true, false)
guiSetVisible(w_m.wnd, true)
guiSetText(w_m.btn_napraw, string.format("Napraw (%s)", getVehicleName(pojazdy[1])) )
naprawiany_pojazd=pojazdy[1]
end)
addEventHandler("onClientMarkerLeave", resourceRoot, function(el,md)
if el~=localPlayer then return end
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
showCursor(false)
if allCost and isTimer(allCost) then killTimer(allCost) end
end)
addEventHandler("onClientGUIClick", w_m.btn_zamknij, function()
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
if allCost and isTimer(allCost) then killTimer(allCost) end
end, false)
addEventHandler("onClientGUIClick", w_m.grid, function()
guiSetText(w_m.lbl_info,"")
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if (selectedRow<0) then
guiSetEnabled(w_m.btn_napraw,false)
return
end
local multirepair = {}
local rows = guiGridListGetSelectedItems(w_m.grid)
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
totalkoszt = 0
for k,v in ipairs(multirepair) do
local koszt = guiGridListGetItemText(w_m.grid, v.row, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
totalkoszt = totalkoszt+koszt
end
guiSetText(w_m.lbl_info, string.format("W sumie do zap?aty: %sPLN",totalkoszt))
guiSetEnabled(w_m.btn_napraw, true)
end)
local napraw_lu=getTickCount()
addEventHandler("onClientGUIClick", w_m.btn_napraw, function()
if getTickCount()-napraw_lu<1000 then return end
if not naprawiany_pojazd or not isElement(naprawiany_pojazd) then return end
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if selectedRow<0 then return end
local rows = guiGridListGetSelectedItems(w_m.grid)
local multirepair = {}
--musimy sprawdzic, czy gracz zaznaczyl KILKA rowow, czy JEDEN //karer - takie male udogodnienie
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
guiSetText(w_m.lbl_info,"")
if #multirepair == 1 then
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
return
end
-- if koszt>getPlayerMoney(localPlayer) then
-- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
-- return
-- end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
triggerServerEvent("takePlayerMoney", localPlayer, koszt)
elseif #multirepair > 1 then
for i,v in ipairs(multirepair) do
local selectedRow = v.row
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
break
end
if koszt>getPlayerMoney(localPlayer) then
guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
return
end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
end
else
outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
end
end, false)
--[[
@author Lukasz Biegaj <wielebny@bestplay.pl>
@author Karer <karer.programmer@gmail.com>
@author RacheT <rachet@pylife.pl>
@copyright 2011-2013 Lukasz Biegaj <wielebny@bestplay.pl>
@license Dual GPLv2/MIT
@package MTA-XyzzyRP
@link https://github.com/lpiob/MTA-XyzzyRP GitHub
]]--
local screenW, screenH = guiGetScreenSize()
local w_m={}
--utils
function math.round(number, decimals, method)
decimals = decimals or 0
local factor = 10 ^ decimals
if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
else return tonumber(("%."..decimals.."f"):format(number)) end
end
function string:split(sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
w_m.wnd = guiCreateStaticImage(0.19, 0.19, 0.72, 0.55, "panel.png", true)
--w_m.wnd = guiCreateWindow(0.1469,0.1667,0.7344,0.675,"Panel mechanika",true)
w_m.btn_napraw = guiCreateButton(0.0277,0.8395,0.3064,0.1327,"Napraw",true,w_m.wnd)
w_m.btn_zamknij = guiCreateButton(0.3427,0.8395,0.3064,0.1327,"Zamknij",true,w_m.wnd)
w_m.lbl_info = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
w_m.lbl_costinfo = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info, "center", true)
guiLabelSetVerticalAlign(w_m.lbl_info, "center")
w_m.grid = guiCreateGridList(0.0298,0.0895,0.9383,0.7191,true,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa = guiGridListAddColumn ( w_m.grid, "Nazwa cz??ci", 0.3 )
w_m.grid_stan = guiGridListAddColumn ( w_m.grid, "Stan cz??ci", 0.3 )
w_m.grid_koszt = guiGridListAddColumn ( w_m.grid, "Koszt naprawy", 0.3 )
guiSetVisible(w_m.wnd,false)
local naprawiany_pojazd=nil
local function kosztNaprawySilnika(v)
local vhp=1000-getElementHealth(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end
local function kosztNaprawyElementu(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return cenapojazdu*przebieg*0.002 -- it's that simple
end
local panele={
[0]="Karoseria lewy prz?d",
[1]="Karoseria prawy prz?d",
[2]="Karoseria lewy ty?",
[3]="Karoseria prawy ty?",
[4]="Szyba przednia",
[5]="Zderzak z przodu",
[6]="Zderzak z ty?u"
}
local stanyPaneli={
[0]="100%",
[1]="66%",
[2]="33%",
[3]="0%",
}
local nazwyDrzwi={
[0]="Maska",
[1]="Baga?nik",
[2]="Drzwi lewy prz?d",
[3]="Drzwi prawy prz?d",
[4]="Drzwi lewy ty?",
[5]="Drzwi prawy ty?"
}
local nazwySwiatel={
[0]="?wiat?o lewy prz?d",
[1]="?wiat?o prawy prz?d",
[2]="?wiat?o lewy ty?",
[3]="?wiat?o prawy ty?"
}
local function fillVehicleData(v)
guiGridListClear(w_m.grid)
do
if getElementHealth(v) ~= 1000 then
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, "Silnik",false,false)
guiGridListSetItemData(w_m.grid,row, 1, -1)
guiGridListSetItemText(w_m.grid,row, 2, math.round(getElementHealth(v)/10).."%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(math.abs(kosztNaprawySilnika(v))+2).."PLN", false, true)
end
end
for i,panel in pairs(panele) do
local stan = getVehiclePanelState(v, i)
if stan ~= 0 then
local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, panel,false,false)
guiGridListSetItemData(w_m.grid,row, 1, i)
local stan=stanyPaneli[getVehiclePanelState(v,i)]
guiGridListSetItemText(w_m.grid,row, 2, stan, false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
-- drzwi
for i=0,5 do
local stan=getVehicleDoorState(v, i)
if stan==2 or stan==3 or stan==4 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwyDrzwi[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+10)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
for i=0,3 do
local stan=getVehicleLightState(v, i)
if stan==1 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwySwiatel[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+20)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
end
addEventHandler("onClientMarkerHit", resourceRoot, function(el,md)
if not md or el~=localPlayer then return end
local cs=getElementData(source, "snn_cs")
if not cs then return end
if getElementData(source, "braniekola") then return end
--local fid=getElementData(source, "snn_faction")
--local lfid=getElementData(el, "player:faction") or -1
--if fid~=lfid then return end -- gracz nie jest pracownikiem]]--
local pojazdy=getElementsWithinColShape(cs,"vehicle")
if #pojazdy<1 then
outputChatBox("Na stanowisku naprawczym nie ma ?adnego pojazdu.")
return
end
if #pojazdy>1 then
outputChatBox("Na stanowisku naprawczym jest zbyt du?o pojazd?w.")
return
end
allCost = setTimer(function(plr)
end, 1000, 0, el)
fillVehicleData(pojazdy[1])
guiSetEnabled(w_m.btn_napraw, false)
guiSetText(w_m.lbl_info,"")
showCursor(true, false)
guiSetVisible(w_m.wnd, true)
guiSetText(w_m.btn_napraw, string.format("Napraw (%s)", getVehicleName(pojazdy[1])) )
naprawiany_pojazd=pojazdy[1]
end)
addEventHandler("onClientMarkerLeave", resourceRoot, function(el,md)
if el~=localPlayer then return end
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
showCursor(false)
if allCost and isTimer(allCost) then killTimer(allCost) end
end)
addEventHandler("onClientGUIClick", w_m.btn_zamknij, function()
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
if allCost and isTimer(allCost) then killTimer(allCost) end
end, false)
addEventHandler("onClientGUIClick", w_m.grid, function()
guiSetText(w_m.lbl_info,"")
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if (selectedRow<0) then
guiSetEnabled(w_m.btn_napraw,false)
return
end
local multirepair = {}
local rows = guiGridListGetSelectedItems(w_m.grid)
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
totalkoszt = 0
for k,v in ipairs(multirepair) do
local koszt = guiGridListGetItemText(w_m.grid, v.row, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
totalkoszt = totalkoszt+koszt
end
guiSetText(w_m.lbl_info, string.format("W sumie do zap?aty: %sPLN",totalkoszt))
guiSetEnabled(w_m.btn_napraw, true)
end)
local napraw_lu=getTickCount()
addEventHandler("onClientGUIClick", w_m.btn_napraw, function()
if getTickCount()-napraw_lu<1000 then return end
if not naprawiany_pojazd or not isElement(naprawiany_pojazd) then return end
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if selectedRow<0 then return end
local rows = guiGridListGetSelectedItems(w_m.grid)
local multirepair = {}
--musimy sprawdzic, czy gracz zaznaczyl KILKA rowow, czy JEDEN //karer - takie male udogodnienie
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
guiSetText(w_m.lbl_info,"")
if #multirepair == 1 then
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
return
end
-- if koszt>getPlayerMoney(localPlayer) then
-- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
-- return
-- end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
-- triggerServerEvent("takePlayerMoney", localPlayer, koszt)
elseif #multirepair > 1 then
for i,v in ipairs(multirepair) do
local selectedRow = v.row
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
break
end
if koszt>getPlayerMoney(localPlayer) then
guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
return
end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
end
else
outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
end
end, false)
--[[
@author Lukasz Biegaj <wielebny@bestplay.pl>
@author Karer <karer.programmer@gmail.com>
@author RacheT <rachet@pylife.pl>
@copyright 2011-2013 Lukasz Biegaj <wielebny@bestplay.pl>
@license Dual GPLv2/MIT
@package MTA-XyzzyRP
@link https://github.com/lpiob/MTA-XyzzyRP GitHub
]]--
local screenW, screenH = guiGetScreenSize()
local w_m={}
--utils
function math.round(number, decimals, method)
decimals = decimals or 0
local factor = 10 ^ decimals
if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
else return tonumber(("%."..decimals.."f"):format(number)) end
end
function string:split(sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
w_m.wnd = guiCreateStaticImage(0.19, 0.19, 0.72, 0.55, "panel.png", true)
--w_m.wnd = guiCreateWindow(0.1469,0.1667,0.7344,0.675,"Panel mechanika",true)
w_m.btn_napraw = guiCreateButton(0.0277,0.8395,0.3064,0.1327,"Napraw",true,w_m.wnd)
w_m.btn_zamknij = guiCreateButton(0.3427,0.8395,0.3064,0.1327,"Zamknij",true,w_m.wnd)
w_m.lbl_info = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
w_m.lbl_costinfo = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info, "center", true)
guiLabelSetVerticalAlign(w_m.lbl_info, "center")
w_m.grid = guiCreateGridList(0.0298,0.0895,0.9383,0.7191,true,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa = guiGridListAddColumn ( w_m.grid, "Nazwa cz??ci", 0.3 )
w_m.grid_stan = guiGridListAddColumn ( w_m.grid, "Stan cz??ci", 0.3 )
w_m.grid_koszt = guiGridListAddColumn ( w_m.grid, "Koszt naprawy", 0.3 )
guiSetVisible(w_m.wnd,false)
local naprawiany_pojazd=nil
local function kosztNaprawySilnika(v)
local vhp=1000-getElementHealth(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end
local function kosztNaprawyElementu(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return cenapojazdu*przebieg*0.002 -- it's that simple
end
local panele={
[0]="Karoseria lewy prz?d",
[1]="Karoseria prawy prz?d",
[2]="Karoseria lewy ty?",
[3]="Karoseria prawy ty?",
[4]="Szyba przednia",
[5]="Zderzak z przodu",
[6]="Zderzak z ty?u"
}
local stanyPaneli={
[0]="100%",
[1]="66%",
[2]="33%",
[3]="0%",
}
local nazwyDrzwi={
[0]="Maska",
[1]="Baga?nik",
[2]="Drzwi lewy prz?d",
[3]="Drzwi prawy prz?d",
[4]="Drzwi lewy ty?",
[5]="Drzwi prawy ty?"
}
local nazwySwiatel={
[0]="?wiat?o lewy prz?d",
[1]="?wiat?o prawy prz?d",
[2]="?wiat?o lewy ty?",
[3]="?wiat?o prawy ty?"
}
local function fillVehicleData(v)
guiGridListClear(w_m.grid)
do
if getElementHealth(v) ~= 1000 then
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, "Silnik",false,false)
guiGridListSetItemData(w_m.grid,row, 1, -1)
guiGridListSetItemText(w_m.grid,row, 2, math.round(getElementHealth(v)/10).."%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(math.abs(kosztNaprawySilnika(v))+2).."PLN", false, true)
end
end
for i,panel in pairs(panele) do
local stan = getVehiclePanelState(v, i)
if stan ~= 0 then
local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, panel,false,false)
guiGridListSetItemData(w_m.grid,row, 1, i)
local stan=stanyPaneli[getVehiclePanelState(v,i)]
guiGridListSetItemText(w_m.grid,row, 2, stan, false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
-- drzwi
for i=0,5 do
local stan=getVehicleDoorState(v, i)
if stan==2 or stan==3 or stan==4 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwyDrzwi[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+10)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
for i=0,3 do
local stan=getVehicleLightState(v, i)
if stan==1 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwySwiatel[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+20)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
end
addEventHandler("onClientMarkerHit", resourceRoot, function(el,md)
if not md or el~=localPlayer then return end
local cs=getElementData(source, "snn_cs")
if not cs then return end
if getElementData(source, "braniekola") then return end
--local fid=getElementData(source, "snn_faction")
--local lfid=getElementData(el, "player:faction") or -1
--if fid~=lfid then return end -- gracz nie jest pracownikiem]]--
local pojazdy=getElementsWithinColShape(cs,"vehicle")
if #pojazdy<1 then
outputChatBox("Na stanowisku naprawczym nie ma ?adnego pojazdu.")
return
end
if #pojazdy>1 then
outputChatBox("Na stanowisku naprawczym jest zbyt du?o pojazd?w.")
return
end
allCost = setTimer(function(plr)
end, 1000, 0, el)
fillVehicleData(pojazdy[1])
guiSetEnabled(w_m.btn_napraw, false)
guiSetText(w_m.lbl_info,"")
showCursor(true, false)
guiSetVisible(w_m.wnd, true)
guiSetText(w_m.btn_napraw, string.format("Napraw (%s)", getVehicleName(pojazdy[1])) )
naprawiany_pojazd=pojazdy[1]
end)
addEventHandler("onClientMarkerLeave", resourceRoot, function(el,md)
if el~=localPlayer then return end
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
showCursor(false)
if allCost and isTimer(allCost) then killTimer(allCost) end
end)
addEventHandler("onClientGUIClick", w_m.btn_zamknij, function()
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
if allCost and isTimer(allCost) then killTimer(allCost) end
end, false)
addEventHandler("onClientGUIClick", w_m.grid, function()
guiSetText(w_m.lbl_info,"")
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if (selectedRow<0) then
guiSetEnabled(w_m.btn_napraw,false)
return
end
local multirepair = {}
local rows = guiGridListGetSelectedItems(w_m.grid)
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
totalkoszt = 0
for k,v in ipairs(multirepair) do
local koszt = guiGridListGetItemText(w_m.grid, v.row, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
totalkoszt = totalkoszt+koszt
end
guiSetText(w_m.lbl_info, string.format("W sumie do zap?aty: %sPLN",totalkoszt))
guiSetEnabled(w_m.btn_napraw, true)
end)
local napraw_lu=getTickCount()
addEventHandler("onClientGUIClick", w_m.btn_napraw, function()
if getTickCount()-napraw_lu<1000 then return end
if not naprawiany_pojazd or not isElement(naprawiany_pojazd) then return end
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if selectedRow<0 then return end
local rows = guiGridListGetSelectedItems(w_m.grid)
local multirepair = {}
--musimy sprawdzic, czy gracz zaznaczyl KILKA rowow, czy JEDEN //karer - takie male udogodnienie
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
guiSetText(w_m.lbl_info,"")
if #multirepair == 1 then
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
return
end
-- if koszt>getPlayerMoney(localPlayer) then
-- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
-- return
-- end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
-- triggerServerEvent("takePlayerMoney", localPlayer, koszt)
elseif #multirepair > 1 then
for i,v in ipairs(multirepair) do
local selectedRow = v.row
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
break
end
if koszt>getPlayerMoney(localPlayer) then
guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
return
end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
end
else
outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
end
end, false)
--[[
@author Lukasz Biegaj <wielebny@bestplay.pl>
@author Karer <karer.programmer@gmail.com>
@author RacheT <rachet@pylife.pl>
@copyright 2011-2013 Lukasz Biegaj <wielebny@bestplay.pl>
@license Dual GPLv2/MIT
@package MTA-XyzzyRP
@link https://github.com/lpiob/MTA-XyzzyRP GitHub
]]--
local screenW, screenH = guiGetScreenSize()
local w_m={}
--utils
function math.round(number, decimals, method)
decimals = decimals or 0
local factor = 10 ^ decimals
if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
else return tonumber(("%."..decimals.."f"):format(number)) end
end
function string:split(sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
w_m.wnd = guiCreateStaticImage(0.19, 0.19, 0.72, 0.55, "panel.png", true)
--w_m.wnd = guiCreateWindow(0.1469,0.1667,0.7344,0.675,"Panel mechanika",true)
w_m.btn_napraw = guiCreateButton(0.0277,0.8395,0.3064,0.1327,"Napraw",true,w_m.wnd)
w_m.btn_zamknij = guiCreateButton(0.3427,0.8395,0.3064,0.1327,"Zamknij",true,w_m.wnd)
w_m.lbl_info = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
w_m.lbl_costinfo = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info, "center", true)
guiLabelSetVerticalAlign(w_m.lbl_info, "center")
w_m.grid = guiCreateGridList(0.0298,0.0895,0.9383,0.7191,true,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa = guiGridListAddColumn ( w_m.grid, "Nazwa cz??ci", 0.3 )
w_m.grid_stan = guiGridListAddColumn ( w_m.grid, "Stan cz??ci", 0.3 )
w_m.grid_koszt = guiGridListAddColumn ( w_m.grid, "Koszt naprawy", 0.3 )
guiSetVisible(w_m.wnd,false)
local naprawiany_pojazd=nil
local function kosztNaprawySilnika(v)
local vhp=1000-getElementHealth(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end
local function kosztNaprawyElementu(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return cenapojazdu*przebieg*0.002 -- it's that simple
end
local panele={
[0]="Karoseria lewy prz?d",
[1]="Karoseria prawy prz?d",
[2]="Karoseria lewy ty?",
[3]="Karoseria prawy ty?",
[4]="Szyba przednia",
[5]="Zderzak z przodu",
[6]="Zderzak z ty?u"
}
local stanyPaneli={
[0]="100%",
[1]="66%",
[2]="33%",
[3]="0%",
}
local nazwyDrzwi={
[0]="Maska",
[1]="Baga?nik",
[2]="Drzwi lewy prz?d",
[3]="Drzwi prawy prz?d",
[4]="Drzwi lewy ty?",
[5]="Drzwi prawy ty?"
}
local nazwySwiatel={
[0]="?wiat?o lewy prz?d",
[1]="?wiat?o prawy prz?d",
[2]="?wiat?o lewy ty?",
[3]="?wiat?o prawy ty?"
}
local function fillVehicleData(v)
guiGridListClear(w_m.grid)
do
if getElementHealth(v) ~= 1000 then
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, "Silnik",false,false)
guiGridListSetItemData(w_m.grid,row, 1, -1)
guiGridListSetItemText(w_m.grid,row, 2, math.round(getElementHealth(v)/10).."%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(math.abs(kosztNaprawySilnika(v))+2).."PLN", false, true)
end
end
for i,panel in pairs(panele) do
local stan = getVehiclePanelState(v, i)
if stan ~= 0 then
local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, panel,false,false)
guiGridListSetItemData(w_m.grid,row, 1, i)
local stan=stanyPaneli[getVehiclePanelState(v,i)]
guiGridListSetItemText(w_m.grid,row, 2, stan, false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
-- drzwi
for i=0,5 do
local stan=getVehicleDoorState(v, i)
if stan==2 or stan==3 or stan==4 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwyDrzwi[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+10)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
for i=0,3 do
local stan=getVehicleLightState(v, i)
if stan==1 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwySwiatel[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+20)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
end
addEventHandler("onClientMarkerHit", resourceRoot, function(el,md)
if not md or el~=localPlayer then return end
local cs=getElementData(source, "snn_cs")
if not cs then return end
if getElementData(source, "braniekola") then return end
--local fid=getElementData(source, "snn_faction")
--local lfid=getElementData(el, "player:faction") or -1
--if fid~=lfid then return end -- gracz nie jest pracownikiem]]--
local pojazdy=getElementsWithinColShape(cs,"vehicle")
if #pojazdy<1 then
outputChatBox("Na stanowisku naprawczym nie ma ?adnego pojazdu.")
return
end
if #pojazdy>1 then
outputChatBox("Na stanowisku naprawczym jest zbyt du?o pojazd?w.")
return
end
allCost = setTimer(function(plr)
end, 1000, 0, el)
fillVehicleData(pojazdy[1])
guiSetEnabled(w_m.btn_napraw, false)
guiSetText(w_m.lbl_info,"")
showCursor(true, false)
guiSetVisible(w_m.wnd, true)
guiSetText(w_m.btn_napraw, string.format("Napraw (%s)", getVehicleName(pojazdy[1])) )
naprawiany_pojazd=pojazdy[1]
end)
addEventHandler("onClientMarkerLeave", resourceRoot, function(el,md)
if el~=localPlayer then return end
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
showCursor(false)
if allCost and isTimer(allCost) then killTimer(allCost) end
end)
addEventHandler("onClientGUIClick", w_m.btn_zamknij, function()
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
if allCost and isTimer(allCost) then killTimer(allCost) end
end, false)
addEventHandler("onClientGUIClick", w_m.grid, function()
guiSetText(w_m.lbl_info,"")
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if (selectedRow<0) then
guiSetEnabled(w_m.btn_napraw,false)
return
end
local multirepair = {}
local rows = guiGridListGetSelectedItems(w_m.grid)
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
totalkoszt = 0
for k,v in ipairs(multirepair) do
local koszt = guiGridListGetItemText(w_m.grid, v.row, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
totalkoszt = totalkoszt+koszt
end
guiSetText(w_m.lbl_info, string.format("W sumie do zap?aty: %sPLN",totalkoszt))
guiSetEnabled(w_m.btn_napraw, true)
end)
local napraw_lu=getTickCount()
addEventHandler("onClientGUIClick", w_m.btn_napraw, function()
if getTickCount()-napraw_lu<1000 then return end
if not naprawiany_pojazd or not isElement(naprawiany_pojazd) then return end
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if selectedRow<0 then return end
local rows = guiGridListGetSelectedItems(w_m.grid)
local multirepair = {}
--musimy sprawdzic, czy gracz zaznaczyl KILKA rowow, czy JEDEN //karer - takie male udogodnienie
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
guiSetText(w_m.lbl_info,"")
if #multirepair == 1 then
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
return
end
-- if koszt>getPlayerMoney(localPlayer) then
-- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
-- return
-- end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
-- triggerServerEvent("takePlayerMoney", localPlayer, koszt)
takePlayerMoney(localPlayer, tonumber(koszt))
elseif #multirepair > 1 then
for i,v in ipairs(multirepair) do
local selectedRow = v.row
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
break
end
if koszt>getPlayerMoney(localPlayer) then
guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
return
end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
end
else
outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
end
end, false)
--[[
@author Lukasz Biegaj <wielebny@bestplay.pl>
@author Karer <karer.programmer@gmail.com>
@author RacheT <rachet@pylife.pl>
@copyright 2011-2013 Lukasz Biegaj <wielebny@bestplay.pl>
@license Dual GPLv2/MIT
@package MTA-XyzzyRP
@link https://github.com/lpiob/MTA-XyzzyRP GitHub
]]--
local screenW, screenH = guiGetScreenSize()
local w_m={}
--utils
function math.round(number, decimals, method)
decimals = decimals or 0
local factor = 10 ^ decimals
if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
else return tonumber(("%."..decimals.."f"):format(number)) end
end
function string:split(sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
w_m.wnd = guiCreateStaticImage(0.19, 0.19, 0.72, 0.55, "panel.png", true)
--w_m.wnd = guiCreateWindow(0.1469,0.1667,0.7344,0.675,"Panel mechanika",true)
w_m.btn_napraw = guiCreateButton(0.0277,0.8395,0.3064,0.1327,"Napraw",true,w_m.wnd)
w_m.btn_zamknij = guiCreateButton(0.3427,0.8395,0.3064,0.1327,"Zamknij",true,w_m.wnd)
w_m.lbl_info = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
w_m.lbl_costinfo = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info, "center", true)
guiLabelSetVerticalAlign(w_m.lbl_info, "center")
w_m.grid = guiCreateGridList(0.0298,0.0895,0.9383,0.7191,true,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa = guiGridListAddColumn ( w_m.grid, "Nazwa cz??ci", 0.3 )
w_m.grid_stan = guiGridListAddColumn ( w_m.grid, "Stan cz??ci", 0.3 )
w_m.grid_koszt = guiGridListAddColumn ( w_m.grid, "Koszt naprawy", 0.3 )
guiSetVisible(w_m.wnd,false)
local naprawiany_pojazd=nil
local function kosztNaprawySilnika(v)
local vhp=1000-getElementHealth(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end
local function kosztNaprawyElementu(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return cenapojazdu*przebieg*0.002 -- it's that simple
end
local panele={
[0]="Karoseria lewy prz?d",
[1]="Karoseria prawy prz?d",
[2]="Karoseria lewy ty?",
[3]="Karoseria prawy ty?",
[4]="Szyba przednia",
[5]="Zderzak z przodu",
[6]="Zderzak z ty?u"
}
local stanyPaneli={
[0]="100%",
[1]="66%",
[2]="33%",
[3]="0%",
}
local nazwyDrzwi={
[0]="Maska",
[1]="Baga?nik",
[2]="Drzwi lewy prz?d",
[3]="Drzwi prawy prz?d",
[4]="Drzwi lewy ty?",
[5]="Drzwi prawy ty?"
}
local nazwySwiatel={
[0]="?wiat?o lewy prz?d",
[1]="?wiat?o prawy prz?d",
[2]="?wiat?o lewy ty?",
[3]="?wiat?o prawy ty?"
}
local function fillVehicleData(v)
guiGridListClear(w_m.grid)
do
if getElementHealth(v) ~= 1000 then
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, "Silnik",false,false)
guiGridListSetItemData(w_m.grid,row, 1, -1)
guiGridListSetItemText(w_m.grid,row, 2, math.round(getElementHealth(v)/10).."%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(math.abs(kosztNaprawySilnika(v))+2).."PLN", false, true)
end
end
for i,panel in pairs(panele) do
local stan = getVehiclePanelState(v, i)
if stan ~= 0 then
local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, panel,false,false)
guiGridListSetItemData(w_m.grid,row, 1, i)
local stan=stanyPaneli[getVehiclePanelState(v,i)]
guiGridListSetItemText(w_m.grid,row, 2, stan, false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
-- drzwi
for i=0,5 do
local stan=getVehicleDoorState(v, i)
if stan==2 or stan==3 or stan==4 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwyDrzwi[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+10)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
for i=0,3 do
local stan=getVehicleLightState(v, i)
if stan==1 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwySwiatel[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+20)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
end
addEventHandler("onClientMarkerHit", resourceRoot, function(el,md)
if not md or el~=localPlayer then return end
local cs=getElementData(source, "snn_cs")
if not cs then return end
if getElementData(source, "braniekola") then return end
--local fid=getElementData(source, "snn_faction")
--local lfid=getElementData(el, "player:faction") or -1
--if fid~=lfid then return end -- gracz nie jest pracownikiem]]--
local pojazdy=getElementsWithinColShape(cs,"vehicle")
if #pojazdy<1 then
outputChatBox("Na stanowisku naprawczym nie ma ?adnego pojazdu.")
return
end
if #pojazdy>1 then
outputChatBox("Na stanowisku naprawczym jest zbyt du?o pojazd?w.")
return
end
allCost = setTimer(function(plr)
end, 1000, 0, el)
fillVehicleData(pojazdy[1])
guiSetEnabled(w_m.btn_napraw, false)
guiSetText(w_m.lbl_info,"")
showCursor(true, false)
guiSetVisible(w_m.wnd, true)
guiSetText(w_m.btn_napraw, string.format("Napraw (%s)", getVehicleName(pojazdy[1])) )
naprawiany_pojazd=pojazdy[1]
end)
addEventHandler("onClientMarkerLeave", resourceRoot, function(el,md)
if el~=localPlayer then return end
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
showCursor(false)
if allCost and isTimer(allCost) then killTimer(allCost) end
end)
addEventHandler("onClientGUIClick", w_m.btn_zamknij, function()
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
if allCost and isTimer(allCost) then killTimer(allCost) end
end, false)
addEventHandler("onClientGUIClick", w_m.grid, function()
guiSetText(w_m.lbl_info,"")
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if (selectedRow<0) then
guiSetEnabled(w_m.btn_napraw,false)
return
end
local multirepair = {}
local rows = guiGridListGetSelectedItems(w_m.grid)
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
totalkoszt = 0
for k,v in ipairs(multirepair) do
local koszt = guiGridListGetItemText(w_m.grid, v.row, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
totalkoszt = totalkoszt+koszt
end
guiSetText(w_m.lbl_info, string.format("W sumie do zap?aty: %sPLN",totalkoszt))
guiSetEnabled(w_m.btn_napraw, true)
end)
local napraw_lu=getTickCount()
addEventHandler("onClientGUIClick", w_m.btn_napraw, function()
if getTickCount()-napraw_lu<1000 then return end
if not naprawiany_pojazd or not isElement(naprawiany_pojazd) then return end
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if selectedRow<0 then return end
local rows = guiGridListGetSelectedItems(w_m.grid)
local multirepair = {}
--musimy sprawdzic, czy gracz zaznaczyl KILKA rowow, czy JEDEN //karer - takie male udogodnienie
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
guiSetText(w_m.lbl_info,"")
if #multirepair == 1 then
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
return
end
-- if koszt>getPlayerMoney(localPlayer) then
-- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
-- return
-- end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
-- triggerServerEvent("takePlayerMoney", localPlayer, koszt)
takePlayerMoney(localPlayer, tonumber(koszt))
elseif #multirepair > 1 then
for i,v in ipairs(multirepair) do
local selectedRow = v.row
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
break
end
if koszt>getPlayerMoney(localPlayer) then
guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
return
end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
end
else
outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
end
end, false)
--[[
@author Lukasz Biegaj <wielebny@bestplay.pl>
@author Karer <karer.programmer@gmail.com>
@author RacheT <rachet@pylife.pl>
@copyright 2011-2013 Lukasz Biegaj <wielebny@bestplay.pl>
@license Dual GPLv2/MIT
@package MTA-XyzzyRP
@link https://github.com/lpiob/MTA-XyzzyRP GitHub
]]--
local screenW, screenH = guiGetScreenSize()
local w_m={}
--utils
function math.round(number, decimals, method)
decimals = decimals or 0
local factor = 10 ^ decimals
if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
else return tonumber(("%."..decimals.."f"):format(number)) end
end
function string:split(sep)
local sep, fields = sep or ":", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
w_m.wnd = guiCreateStaticImage(0.19, 0.19, 0.72, 0.55, "panel.png", true)
--w_m.wnd = guiCreateWindow(0.1469,0.1667,0.7344,0.675,"Panel mechanika",true)
w_m.btn_napraw = guiCreateButton(0.0277,0.8395,0.3064,0.1327,"Napraw",true,w_m.wnd)
w_m.btn_zamknij = guiCreateButton(0.3427,0.8395,0.3064,0.1327,"Zamknij",true,w_m.wnd)
w_m.lbl_info = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
w_m.lbl_costinfo = guiCreateLabel(0.6, 0.8395, 0.35, 0.1327, "", true, w_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info, "center", true)
guiLabelSetVerticalAlign(w_m.lbl_info, "center")
w_m.grid = guiCreateGridList(0.0298,0.0895,0.9383,0.7191,true,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa = guiGridListAddColumn ( w_m.grid, "Nazwa cz??ci", 0.3 )
w_m.grid_stan = guiGridListAddColumn ( w_m.grid, "Stan cz??ci", 0.3 )
w_m.grid_koszt = guiGridListAddColumn ( w_m.grid, "Koszt naprawy", 0.3 )
guiSetVisible(w_m.wnd,false)
local naprawiany_pojazd=nil
local function kosztNaprawySilnika(v)
local vhp=1000-getElementHealth(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end
local function kosztNaprawyElementu(v)
local cenapojazdu=getVehicleHandling(v).monetary or 10000
local przebieg=(10000-math.min(getElementData(v,"vehicle:mileage") or 5000,9999))/10000
return cenapojazdu*przebieg*0.002 -- it's that simple
end
local panele={
[0]="Karoseria lewy prz?d",
[1]="Karoseria prawy prz?d",
[2]="Karoseria lewy ty?",
[3]="Karoseria prawy ty?",
[4]="Szyba przednia",
[5]="Zderzak z przodu",
[6]="Zderzak z ty?u"
}
local stanyPaneli={
[0]="100%",
[1]="66%",
[2]="33%",
[3]="0%",
}
local nazwyDrzwi={
[0]="Maska",
[1]="Baga?nik",
[2]="Drzwi lewy prz?d",
[3]="Drzwi prawy prz?d",
[4]="Drzwi lewy ty?",
[5]="Drzwi prawy ty?"
}
local nazwySwiatel={
[0]="?wiat?o lewy prz?d",
[1]="?wiat?o prawy prz?d",
[2]="?wiat?o lewy ty?",
[3]="?wiat?o prawy ty?"
}
local function fillVehicleData(v)
guiGridListClear(w_m.grid)
do
if getElementHealth(v) ~= 1000 then
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, "Silnik",false,false)
guiGridListSetItemData(w_m.grid,row, 1, -1)
guiGridListSetItemText(w_m.grid,row, 2, math.round(getElementHealth(v)/10).."%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(math.abs(kosztNaprawySilnika(v))+2).."PLN", false, true)
end
end
for i,panel in pairs(panele) do
local stan = getVehiclePanelState(v, i)
if stan ~= 0 then
local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, panel,false,false)
guiGridListSetItemData(w_m.grid,row, 1, i)
local stan=stanyPaneli[getVehiclePanelState(v,i)]
guiGridListSetItemText(w_m.grid,row, 2, stan, false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
-- drzwi
for i=0,5 do
local stan=getVehicleDoorState(v, i)
if stan==2 or stan==3 or stan==4 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwyDrzwi[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+10)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
for i=0,3 do
local stan=getVehicleLightState(v, i)
if stan==1 then
local koszt=kosztNaprawyElementu(v)*2/6
local row=guiGridListAddRow(w_m.grid)
guiGridListSetItemText(w_m.grid,row, 1, nazwySwiatel[i],false,false)
guiGridListSetItemData(w_m.grid,row, 1, i+20)
guiGridListSetItemText(w_m.grid,row, 2, "0%", false, true)
guiGridListSetItemText(w_m.grid,row, 3, math.round(koszt+2).."PLN", false, true)
end
end
end
addEventHandler("onClientMarkerHit", resourceRoot, function(el,md)
if not md or el~=localPlayer then return end
local cs=getElementData(source, "snn_cs")
if not cs then return end
if getElementData(source, "braniekola") then return end
--local fid=getElementData(source, "snn_faction")
--local lfid=getElementData(el, "player:faction") or -1
--if fid~=lfid then return end -- gracz nie jest pracownikiem]]--
local pojazdy=getElementsWithinColShape(cs,"vehicle")
if #pojazdy<1 then
outputChatBox("Na stanowisku naprawczym nie ma ?adnego pojazdu.")
return
end
if #pojazdy>1 then
outputChatBox("Na stanowisku naprawczym jest zbyt du?o pojazd?w.")
return
end
allCost = setTimer(function(plr)
end, 1000, 0, el)
fillVehicleData(pojazdy[1])
guiSetEnabled(w_m.btn_napraw, false)
guiSetText(w_m.lbl_info,"")
showCursor(true, false)
guiSetVisible(w_m.wnd, true)
guiSetText(w_m.btn_napraw, string.format("Napraw (%s)", getVehicleName(pojazdy[1])) )
naprawiany_pojazd=pojazdy[1]
end)
addEventHandler("onClientMarkerLeave", resourceRoot, function(el,md)
if el~=localPlayer then return end
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
showCursor(false)
if allCost and isTimer(allCost) then killTimer(allCost) end
end)
addEventHandler("onClientGUIClick", w_m.btn_zamknij, function()
guiSetVisible(w_m.wnd, false)
naprawiany_pojazd=nil
if allCost and isTimer(allCost) then killTimer(allCost) end
end, false)
addEventHandler("onClientGUIClick", w_m.grid, function()
guiSetText(w_m.lbl_info,"")
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if (selectedRow<0) then
guiSetEnabled(w_m.btn_napraw,false)
return
end
local multirepair = {}
local rows = guiGridListGetSelectedItems(w_m.grid)
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
totalkoszt = 0
for k,v in ipairs(multirepair) do
local koszt = guiGridListGetItemText(w_m.grid, v.row, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
totalkoszt = totalkoszt+koszt
end
guiSetText(w_m.lbl_info, string.format("W sumie do zap?aty: %sPLN",totalkoszt))
guiSetEnabled(w_m.btn_napraw, true)
end)
local napraw_lu=getTickCount()
addEventHandler("onClientGUIClick", w_m.btn_napraw, function()
if getTickCount()-napraw_lu<1000 then return end
if not naprawiany_pojazd or not isElement(naprawiany_pojazd) then return end
selectedRow= guiGridListGetSelectedItem ( w_m.grid) or -1
if selectedRow<0 then return end
local rows = guiGridListGetSelectedItems(w_m.grid)
local multirepair = {}
--musimy sprawdzic, czy gracz zaznaczyl KILKA rowow, czy JEDEN //karer - takie male udogodnienie
for k,v in ipairs(rows) do
if (k/3 == math.round(k/3)) then --kazde 3 wyniki sa takie same, pomijamy je
table.insert(multirepair,v)
end
end
guiSetText(w_m.lbl_info,"")
if #multirepair == 1 then
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
return
end
-- if koszt>getPlayerMoney(localPlayer) then
-- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
-- return
-- end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
triggerServerEvent("pobierzKase", localPlayer, koszt)
-- takePlayerMoney(localPlayer, tonumber(koszt))
elseif #multirepair > 1 then
for i,v in ipairs(multirepair) do
local selectedRow = v.row
local koszt = guiGridListGetItemText(w_m.grid, selectedRow, 3)
local koszt = koszt:split("PLN")
local koszt = tonumber(koszt[1])
if not koszt then return end
if koszt<=0 then
break
end
if koszt>getPlayerMoney(localPlayer) then
guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
return
end
local czesc=guiGridListGetItemData(w_m.grid, selectedRow, 1) -- numer panelu lub -1==silnik
napraw_lu=getTickCount()
triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
end
else
outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
end
end, false)
server
addEvent("pobierzKase",true)
addEventHandler("pobierzKase",root,function(price)
if getPlayerMoney(client) >= price then
takePlayerMoney(client, tonumber(price))
end
end)
local stanowiskaNaprawcze = {
stanowiskoDoherty={
mpos={1106.54602,1760.97449,10.82031}, -- marker
cpos={1094.7373, 1757.0455, 10.820313-1, 11.75, 6.75, 5}, -- cuboid
--faction_id=1, -- (id) frakcja kt?ra b?dzie mia?a dost?p
text="Naprawa pojazdu"
},
stanowiskoLV={
mpos={1107.12097,1750.85950,10.82031}, -- marker
cpos={1095.272, 1747.2896, 10.820313-1, 9.5, 6.25, 5}, -- cuboid
--faction_id=1, -- (id) frakcja kt?ra b?dzie mia?a dost?p
text="Naprawa pojazdu"
},
}
for i,v in pairs(stanowiskaNaprawcze) do
v.cuboid=createColCuboid(unpack(v.cpos))
v.marker=createMarker(v.mpos[1], v.mpos[2], v.mpos[3]-0.90, "cylinder", 1.2, 0, 0, 255, 100)
--setElementData(v.marker,"snn_faction",v.faction_id)
setElementData(v.marker,"snn_cs",v.cuboid)
t=createElement("text")
setElementData(t,"name",v.text)
setElementPosition(t,v.mpos[1], v.mpos[2], v.mpos[3])
end
-- triggerServerEvent("naprawaElementu", resourceRoot, naprawiany_pojazd, czesc, koszt)
addEvent("naprawaElementu", true)
addEventHandler("naprawaElementu", resourceRoot, function(pojazd, czesc, koszt)
outputDebugString("Naprawa elementu " .. czesc .. " za " .. koszt)
if koszt>getPlayerMoney(client) then
return
end
if (czesc==-1) then
-- setElementHealth(pojazd, 1000)
local vps={}
local vds={}
local vls={}
for i=0,6 do vps[i]=getVehiclePanelState(pojazd,i) end
for i=0,3 do vds[i]=getVehicleDoorState(pojazd,i) end
for i=0,3 do vls[i]=getVehicleLightState(pojazd,i) end
fixVehicle(pojazd)
for i=0,6 do setVehiclePanelState(pojazd, i, vps[i]) end
for i=0,3 do setVehicleDoorState(pojazd, i, vds[i]) end
for i=0,3 do setVehicleLightState(pojazd, i, vls[i]) end
triggerClientEvent(client, "refreshVehicleData", resourceRoot, pojazd)
elseif czesc>=0 and czesc<=6 then
setVehiclePanelState(pojazd, czesc, 0)
triggerClientEvent(client, "refreshVehicleData", resourceRoot, pojazd)
elseif czesc>=10 and czesc<20 then
local drzwi=czesc-10
setVehicleDoorState(pojazd, drzwi, 0)
triggerClientEvent(client, "refreshVehicleData", resourceRoot, pojazd)
elseif czesc>=20 then
local swiatlo=czesc-20
setVehicleLightState(pojazd, swiatlo, 0)
triggerClientEvent(client, "refreshVehicleData", resourceRoot, pojazd)
end
end)
-- Kod s?u??cy od dawania wynagrodzenia
addEvent("givePlayerMoney", true)
addEventHandler("givePlayerMoney", root, function(value2)
-- nie zalogowana osoba a fuj
if not getElementData(client,"player:logged") then return end
local rnd={math.random(1,30),math.random(1,2)}
if rnd[1] == 1 or rnd[1] == 15 or rnd[1] == 26 then
local rep=getElementData(client,"player:reputation") or 0
local xd=rep+rnd[2]
setElementData(client,"player:reputation",xd)
triggerClientEvent(client, "reputation:show", resourceRoot, rnd)
end
end)
addEvent("takePlayerMoney", true)
addEventHandler("takePlayerMoney", root, function(how)
if not getElementData(source,"player:logged") then return end
if not tonumber(how) then return end
takePlayerMoney(source,how);
end)
-- Kod s?u??cy od usuwania danego pojazdu
addEvent("destroyVehicle", true)
addEventHandler("destroyVehicle", root, function(veh)
if not veh then return end
destroyElement(veh)
if obiekt[veh] then
destroyElement(obiekt[veh])
end
end)
-- Kod s?u??cy od usuwania obiekt?w z pojazdu
addEvent("removeObject", true)
addEventHandler("removeObject", root, function(veh,code)
if obiekt[veh] then
destroyElement(obiekt[veh])
end
end)
-- Kod s?u?acy do dodawania obiekt?w do prac
addEvent("addObject", true)
addEventHandler("addObject", root, function(veh,code)
if code == "kamieniolom" then
obiekt[veh]=createObject(3929, 0, 0, 0)
setObjectScale(obiekt[veh], 3.5)
attachElements(obiekt[veh], veh, 0, -2, 1, 90)
end
end)
addEventHandler ( "onPlayerVehicleEnter", root, function(v,s,j)
if getElementData(v,"vehicle:fuel") == false then
setElementData(v,"vehicle:fuel",100)
end
end)
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