DaxRel69
Wiek: 30 Na forum: 4107 dni Posty: 171
Nick w MP: DaxRel
Piwa : 4368
Kod: Server:
--baza danych SQL Lite
local handler = dbConnect("sqlite", "pojazdy.db")
dbExec(handler, "CREATE TABLE IF NOT EXISTS pojazdy (wlasciciel varchar, id INT, x VARCHAR, y VARCHAR, z VARCHAR, rotx VARCHAR, roty VARCHAR, rotz VARCHAR, parking VARCHAR, kolor1 INT, kolor2 INT)")
dbExec(handler, "CREATE INDEX IF NOT EXISTS IDX_pojazdy on pojazdy(wlasciciel)")
dbExec(handler, "CREATE TABLE IF NOT EXISTS parkingi (id varchar, x VARCHAR, y VARCHAR, z VARCHAR)")
dbExec(handler, "CREATE INDEX IF NOT EXISTS IDX_parkingi on parkingi(id)")
addEvent("rejestrujPojazd", true)
addEventHandler("rejestrujPojazd", getRootElement(),
function(gracz)
local gracz = getPlayerFromName(gracz)
if gracz then
local pojazd = getPedOccupiedVehicle(gracz)
if pojazd then
if (getVehicleController(pojazd) == gracz) then --je?li kierowca pojazdu jest wybrany gracz
local get = getElementData(pojazd, "car:x")
if get == false then
local wlasciciel = getAccountName(getPlayerAccount(gracz))
local query = dbQuery(handler, "SELECT * FROM pojazdy WHERE wlasciciel=?", wlasciciel)
local result, num_affected_rows, errmsg = dbPoll (query, -1)
if (num_affected_rows < 12) then --maks dwa auta
local id = getElementModel(pojazd)
local x, y, z = getElementPosition(pojazd)
local rx, ry, rz = getElementRotation(pojazd)
local kolor1, kolor2, kolor3, kolor4 = getVehicleColor(pojazd)
dbExec(handler, "INSERT INTO pojazdy VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", wlasciciel, id, x, y, z, rx, ry, rz, "", kolor1, kolor2)
setElementData(pojazd, "car:x", x) --zapisujemy wspolrzedna x, bedzie s?uzyla jako jego identyfikator
outputChatBox("Zarejejstrowa?e? pojazd - "..getVehicleName(pojazd)..", w?a?ciciel: "..wlasciciel..".", source, 230, 230, 230, true)
outputChatBox("Tw?j pojazd zosta? zarejestrowany. Sw?j pojazd mo?esz parkowa? w specjelnie wyznaczonych strefach.", gracz, 230, 230, 230, true)
else
outputChatBox("Wybrany gracz mo?e posiada? maksymalnie dwa zarejestrowane pojazdy.", source, 230, 230, 230, true)
end
else
outputChatBox("Ten pojazd jest ju? zarejestrowany.", source, 230, 230, 230, true)
end
end
end
end
end)
--
function onEnterCar(player, seat, jacked)
if (seat == 0) then
local id = getElementData(source, "car:x")
if id then
local query = dbQuery(handler, "SELECT * FROM pojazdy WHERE x=?", id)
local result, num_affected_rows, errmsg = dbPoll (query, -1)
if (num_affected_rows >= 1) then
local wlasciciel = result[1].wlasciciel
local konto = getAccountName(getPlayerAccount(player))
if (wlasciciel ~= konto) then --jesli to nie nasz pojazd
cancelEvent() --blokujemy wejscie do tego pojazdu
outputChatBox("Nie jeste? w?a?cicielem tego pojazdu.", source)
end
end
end
end
end
addEventHandler ("onVehicleStartEnter", getRootElement(), onEnterCar)
function onEnterCar(player, seat, jacked)
if (seat == 0) then
local id = getElementData(source, "car:x")
if id then
local query = dbQuery(handler, "SELECT * FROM pojazdy WHERE x=?", id)
local result, num_affected_rows, errmsg = dbPoll (query, -1)
if (num_affected_rows >= 1) then
local wlasciciel = result[1].wlasciciel
local konto = getAccountName(getPlayerAccount(player))
if (wlasciciel ~= konto) then --jesli to nie nasz pojazd
removePedFromVehicle(player)
end
end
end
end
end
addEventHandler ("onVehicleEnter", getRootElement(), onEnterCar)
--tworzenie parkingow dla administratorow
addCommandHandler("sp",
function(player)
local acc = getAccountName (getPlayerAccount (player))
if isObjectInACLGroup ("user."..acc, aclGetGroup ("Rcon")) then
local id = generateID() --funkcja generuje id parkingu
local x, y, z = getElementPosition(player)
dbExec(handler, "INSERT INTO parkingi VALUES (?, ?, ?, ?)", id, x, y, z)
marker1 = createMarker (x, y, z - 0.8, "cylinder", 1, 255, 255, 255, 80) --ma?y marker
setElementData(marker1, "parking:Maly", id) --przypisujemy id malemu markerkowi
marker2 = createMarker (x, y, z - 1, "cylinder", 12, 255, 255, 0, 50) --duzy marker
setElementData(marker2, "parking:Duzy", id) --oraz przypisuejemy id duzemu markerowi
end
end)
function generateID() --funkcja generuje id parkingu
local time = getRealTime()
local timestamp = time.timestamp
return timestamp
end
function stworzParkingiPoWlaczeniu()
local query = dbQuery(handler, "SELECT * FROM parkingi")
local result, num_affected_rows, errmsg = dbPoll (query, -1)
for i,v in pairs(result) do
local x, y, z = v.x, v.y, v.z
local id = v.id
marker1 = createMarker (x, y, z - 0.8, "cylinder", 1, 255, 255, 255, 80) --ma?y marker
setElementData(marker1, "parking:Maly", id) --przypisujemy id malemu markerkowi
marker2 = createMarker (x, y, z - 1, "cylinder", 12, 255, 255, 0, 50) --duzy marker
setElementData(marker2, "parking:Duzy", id) --oraz przypisuejemy id duzemu markerowi
end
--tworzenie aut
local query = dbQuery(handler, "SELECT * FROM pojazdy")
local result, num_affected_rows, errmsg = dbPoll (query, -1)
for i,v in pairs(result) do
if result[i].parking == "" then
car = createVehicle(result[i].id, result[i].x, result[i].y, result[i].z, result[i].rx, result[i].ry, result[i].rz)
setVehicleColor(car, result[i].kolor1, result[i].kolor2, 0, 0)
setElementData(car, "car:x", result[i].x)
end
end
end
addEventHandler("onResourceStart", getRootElement(), stworzParkingiPoWlaczeniu)
--kasowanie parking?w
addCommandHandler("up",
function(player)
local acc = getAccountName (getPlayerAccount (player))
if isObjectInACLGroup ("user."..acc, aclGetGroup ("Rcon")) then
for i,v in pairs(getElementsByType("marker")) do
local get1 = getElementData(v, "parking:Maly")
local get2 = getElementData(v, "parking:Duzy")
if get1 or get2 then
destroyElement(v)
end
end
local get = getElementData(player, "zapiszParking")
dbExec(handler, "DELETE FROM parkingi WHERE id=?", get)
stworzParkingiPoWlaczeniu()
end
end)
-- :: parkowanie pojazdow ::
function saveLastCar(thePlayer, seat, jacked) --zapisujemy pojazd, jakim ostatnio jezdzilismy
setElementData(thePlayer, "saveLastCar", source)
end
addEventHandler ("onVehicleExit", getRootElement(), saveLastCar)
function onParkingHit(hitElement, dim) --jesli wejdziemy w maly marker
if (getElementType(hitElement) == "player") then
local idd = getElementData(source, "parking:Maly")
if idd then
local veh = getPedOccupiedVehicle(hitElement)
if not veh then
local konto = getAccountName(getPlayerAccount(hitElement))
local query = dbQuery(handler, "SELECT * FROM pojazdy WHERE wlasciciel=? AND parking=?", konto, idd)
local result, num_affected_rows, errmsg = dbPoll (query, -1)
if (num_affected_rows == 0) then
outputChatBox("Nie posiadasz ?adnego zaparkowanego pojazdu na tym parkingu.", hitElement, 230, 230, 230, true)
else --jeden lub wiecej pojazdow
triggerClientEvent(hitElement, "pokazListePojazdow", getRootElement(), result)
end
end
end
end
end
addEventHandler("onMarkerHit", getRootElement(), onParkingHit)
function zapiszParkingi(hitElement, dim)
if (getElementType(hitElement) == "player") then
local id1 = getElementData(source, "parking:Duzy")
local id2 = getElementData(source, "parking:Maly")
if id1 then
setElementData(hitElement, "zapiszParking", id1)
elseif id2 then
setElementData(hitElement, "zapiszParking", id2)
end
end
end
addEventHandler("onMarkerHit", getRootElement(), zapiszParkingi)
function onParkingLeave(leaveElement, dim) --jesli wyjdziemy z duzego markeru
if (getElementType(leaveElement) == "player") then
local id = getElementData(source, "parking:Duzy")
if id then
local veh = getPedOccupiedVehicle(leaveElement)
if not veh then
local lastcar = getElementData(leaveElement, "saveLastCar")
if lastcar then
if isElement(lastcar) then
if isElementWithinMarker(lastcar, source) then
outputChatBox("Zaparkowa?e? sw?j pojad.", leaveElement, 230, 230, 230, true)
local x, y, z = getElementPosition(lastcar)
local rx, ry, rz = getElementRotation(lastcar)
local get = getElementData(lastcar, "car:x")
dbExec(handler, "UPDATE pojazdy SET parking=? WHERE x=?", id, get)
destroyElement(lastcar)
setElementData(leaveElement, "saveLastCar", false)
end
end
end
end
end
end
end
addEventHandler("onMarkerLeave", getRootElement(), onParkingLeave)
--spawnowanie aut
addEvent("spawnujPojazd", true)
addEventHandler("spawnujPojazd", getRootElement(),
function(idd, result)
idd = idd + 1
local x, y, z = getElementPosition(source)
setElementPosition(source, x, y, z + 2.5)
car = createVehicle(result[idd].id, x, y, z, result[idd].rx, result[idd].ry, result[idd].rz)
setVehicleColor(car, result[idd].kolor1, result[idd].kolor2, 0, 0)
setElementData(car, "car:x", result[idd].x)
dbExec(handler, "UPDATE pojazdy SET parking=? WHERE x=?", "", result[idd].x)
end)
--/sprzedaj
addCommandHandler("sprzedaj",
function(player, cmd, nick)
local veh = getPedOccupiedVehicle(player)
if veh then
local kierowca = getVehicleController(veh)
if kierowca == player then
if nick then
local gracz = getPlayerFromName(nick)
if gracz then
local id = getElementData(veh, "car:x")
if id then
local query = dbQuery(handler, "SELECT * FROM pojazdy WHERE x=?", id)
local result, num_affected_rows, errmsg = dbPoll (query, -1)
if (num_affected_rows >= 1) then
local kogo = result[1].wlasciciel
local konto = getAccountName(getPlayerAccount(player))
if (kogo == konto) then --jesli to nasz pojazd
local nowy = getAccountName(getPlayerAccount(gracz))
if nowy then
removePedFromVehicle(player)
local x, y, z = getElementPosition(veh)
local rx, ry, rz = getElementRotation(veh)
local nowy = "Edek"
dbExec(handler, "UPDATE pojazdy SET wlasciciel=?, x=?, y=?, z=?, rotx=?, roty=?, rotz=?, parking=? WHERE x=?", nowy, x, y, z, rx, ry, rz, "", id)
setElementData(veh, "car:x", x)
outputChatBox("Gracz "..getPlayerName(player).." sprzeda? Ci pojazd.", gracz, 230, 230, 230, true)
outputChatBox("Sprzeda?e? sw?j pojazd graczowi "..nick..".", player, 230, 230, 230, true)
end
end
end
end
else
outputChatBox("Podanego gracza nie ma na serwerze.", player, 230, 230, 230, true)
end
end
end
end
end)
addCommandHandler("odrejestruj",
function(player)
local veh = getPedOccupiedVehicle(player)
if veh then
local kierowca = getVehicleController(veh)
if kierowca == player then
local id = getElementData(veh, "car:x")
if id then
local query = dbQuery(handler, "SELECT * FROM pojazdy WHERE x=?", id)
local result, num_affected_rows, errmsg = dbPoll (query, -1)
local konto = getAccountName(getPlayerAccount(player))
if (num_affected_rows >= 1) then
local wlasciciel = result[1].wlasciciel
if (wlasciciel == konto) then --jesli to nasz pojazd
dbExec(handler, "DELETE FROM pojazdy WHERE x=?", id)
setElementData(veh, "car:x", false)
destroyElement(veh)
end
end
end
end
end
end)
function onRejestracyjneExplode()
local id = getElementData(source, "car:x")
local query = dbQuery(handler, "SELECT * FROM parkingi")
local result, num_affected_rows, errmsg = dbPoll (query, -1)
nearestID = -1
nearestDistance = 999999999999
local ex,ey,ez = getElementPosition (source)
for i,v in pairs(result) do
local x,y,z = v.x, v.y, v.z
if (getDistanceBetweenPoints3D (ex,ey,ez,x,y,z) < nearestDistance) then
nearestID = v.id
nearestDistance = getDistanceBetweenPoints3D (ex,ey,ez,x,y,z)
end
end
destroyElement(source)
dbExec(handler, "UPDATE pojazdy SET parking=? WHERE x=?", nearestID, id)
end
addEventHandler("onVehicleExplode", getRootElement(), onRejestracyjneExplode)
Kod: Client:
sX, sY = guiGetScreenSize()
function centerGUI(window)
local sH, sW = guiGetSize(window, false)
guiSetPosition(window, (sX - sH)/2, (sY - sW)/2, false)
end
urzad = {
window = {},
gridlist = {},
button = {},
}
urzad.window[1] = guiCreateWindow(sX/2, sY/2, 309, 388, "Rejestracja pojazd?w", false)
guiWindowSetSizable(urzad.window[1], false)
urzad.gridlist[1] = guiCreateGridList(9, 21, 300, 314, false, urzad.window[1])
urzad.gridlist[2] = guiGridListAddColumn(urzad.gridlist[1], "Gracz", 0.4)
urzad.gridlist[3] = guiGridListAddColumn(urzad.gridlist[1], "Pojazd", 0.5)
urzad.button[1] = guiCreateButton(215, 342, 81, 30, "Rejestruj", false, urzad.window[1])
guiSetVisible(urzad.window[1], false)
centerGUI(urzad.window[1])
function pokazPanel ()
if (getPlayerTeam(getLocalPlayer()) == getTeamFromName("Urzad/Instruktorzy")) then
if (guiGetVisible(urzad.window[1]) == false) then
clearPlayers()
guiSetVisible(urzad.window[1], true)
showCursor(true)
else
guiSetVisible(urzad.window[1], false)
showCursor(false)
end
end
end
bindKey("f6", "down", pokazPanel)
function clearPlayers() --funkcja czysci liste graczy
guiGridListClear(urzad.gridlist[1])
for k, v in ipairs(getElementsByType("player")) do
local row = guiGridListAddRow (urzad.gridlist[1])
guiGridListSetItemText (urzad.gridlist[1], row, urzad.gridlist[2], getPlayerName (v), false, false)
local car = getPedOccupiedVehicle(v)
if car then
guiGridListSetItemText (urzad.gridlist[1], row, urzad.gridlist[3], getVehicleName (car), false, false)
else
guiGridListSetItemText (urzad.gridlist[1], row, urzad.gridlist[3], "Brak", false, false)
end
end
end
function rejestrujPojazd(button, state)
if (source == urzad.button[1]) then
local item1 = guiGridListGetSelectedItem (urzad.gridlist[1])
if (item1 >= 0) then
local gracz = guiGridListGetItemText (urzad.gridlist[1], item1, 1)
triggerServerEvent("rejestrujPojazd", getLocalPlayer(), gracz)
else
outputChatBox("Nie wybra?e? gracza.", 230, 230, 230, true)
end
end
end
addEventHandler ("onClientGUIClick", urzad.button[1], rejestrujPojazd, false)
--lista pojazdow
lista = {
window = {},
gridlist = {},
button = {},
}
lista.window[1] = guiCreateWindow(sX/2, sY/2, 309, 388, "Twoje pojazdy", false)
guiWindowSetSizable(lista.window[1], false)
lista.gridlist[1] = guiCreateGridList(9, 21, 300, 314, false, lista.window[1])
lista.gridlist[2] = guiGridListAddColumn(lista.gridlist[1], "Pojazd", 0.9)
guiGridListSetSortingEnabled (lista.gridlist[1], false)
lista.button[1] = guiCreateButton(10, 342, 81, 30, "Wyjd?", false, lista.window[1])
lista.button[2] = guiCreateButton(215, 342, 81, 30, "Wybierz", false, lista.window[1])
guiSetVisible(lista.window[1], false)
centerGUI(lista.window[1])
addEvent("pokazListePojazdow", true)
addEventHandler("pokazListePojazdow", getRootElement(),
function(result)
if #result > 0 then
guiGridListClear(lista.gridlist[1])
guiSetVisible(lista.window[1], true)
showCursor(true)
for i,v in pairs(result) do
local row = guiGridListAddRow (lista.gridlist[1])
guiGridListSetItemText (lista.gridlist[1], row, lista.gridlist[2], getVehicleNameFromModel(result[i].id), false, false)
end
tablica = result
end
end)
function wylaczListe(button, state)
if (source == lista.button[1]) then
guiSetVisible(lista.window[1], false)
showCursor(false)
end
end
addEventHandler ("onClientGUIClick", lista.button[1], wylaczListe, false)
function spawnujPojazd(button, state)
if (source == lista.button[2]) then
local item1 = guiGridListGetSelectedItem (lista.gridlist[1])
if (item1 >= 0) then
triggerServerEvent("spawnujPojazd", getLocalPlayer(), item1, tablica)
guiSetVisible(lista.window[1], false)
showCursor(false)
end
end
end
addEventHandler ("onClientGUIClick", lista.button[2], spawnujPojazd, false)