Wysłany: 2015-09-11, 17:01
awfesa
Wiek: 29 Na forum: 4705 dni Posty: 563
Piwa : 223
Mam do was pro?b? napisa?em m?j pierwszy skrypt wszystko dzia?a lecz zastanawiam si? czy ten skrypt jest dobrze napisany czy dany kod jest po dobrej stronie ?
client
Kod: Truck = {
gridlist = {},
Window = {},
button = {},
positX = {},
positY = {},
positZ = {}
}
local screenW, screenH = guiGetScreenSize()
names = {
{"Komisariat Ls",1535.7267,-1675.4768,13.3828},
{"Teatr",625.1904,-1749.4344,13.2529},
{"Starfish Casino",2238.2883,1893.4460,10.6719},
{"Kopalnia",840.7872,827.2319,12.8551},
{"Furniture",2298.3291,55.1084,26.3359},
{"Test",2174.8413, -2251.5706, 13.3036},
}
addEvent ( "showTruckerGui", true );
addEventHandler ( "showTruckerGui", root,
function ( thePlayer )
if ( thePlayer == getLocalPlayer() ) then
local sby = getElementData(thePlayer, "zrespilGracz")
local sby2 = getElementData(thePlayer, "JestTruck")
local vehicle = getPedOccupiedVehicle(localPlayer)
if (sby == 1 and sby2 == 2)then
setElementFrozen(vehicle,true)
Truck.Window[1] = guiCreateWindow(0.76, 0.20, 0.21, 0.50, "Lista Tras", true)
guiWindowSetSizable(Truck.Window[1], false)
Truck.gridlist[1] = guiCreateGridList(0.77, 0.24, 0.19, 0.38, true)
guiSetAlpha(Truck.gridlist[1], 0.71)
guiGridListAddColumn(Truck.gridlist[1], "Nazwa", 0.9)
Truck.button[1] = guiCreateButton(0.77, 0.63, 0.09, 0.06, "Akceptuj wybrane zlecenie", true)
Truck.button[2] = guiCreateButton(0.87, 0.63, 0.09, 0.06, "Anuluj wybieranie zlecenia", true)
addEventHandler("onClientGUIClick",Truck.button[2],Truck_oFF,false)
addEventHandler("onClientGUIClick",Truck.button[1],Truck_oN,false)
for i,v in pairs(names) do
local row = guiGridListAddRow(Truck.gridlist[1])
guiGridListSetItemText(Truck.gridlist[1],row,1,tostring(v[1]),false,false)
Truck.positX[tostring(v[1])] = v[2]
Truck.positY[tostring(v[1])] = v[3]
Truck.positZ[tostring(v[1])] = v[4]
end
guiSetVisible (Truck.gridlist[1], true );
showCursor ( true );
end
end
end
)
function Truck_oFF()
destroyElement(myMarker)
guiSetVisible (Truck.gridlist[1], false );
guiSetVisible (Truck.button[1], false );
guiSetVisible (Truck.button[2], false );
guiSetVisible (Truck.gridlist[1], false );
guiSetVisible (Truck.Window[1] , false );
showCursor ( false );
local vehicle = getPedOccupiedVehicle(localPlayer)
setElementFrozen(vehicle,false)
end
function Truck_oN()
local vehicle = getPedOccupiedVehicle(localPlayer)
setElementFrozen(vehicle,false)
setElementData(localPlayer, "zrespilGracz", 2)
TruckName = guiGridListGetItemText (Truck.gridlist[1], guiGridListGetSelectedItem(Truck.gridlist[1]),1)
outputChatBox (Truck.positX[TruckName] .." X ".. Truck.positY[TruckName] .." Y ".. Truck.positZ[TruckName] .." OD ".. TruckName)
WorkOnCP = createMarker(Truck.positX[TruckName],Truck.positY[TruckName],Truck.positZ[TruckName], "checkpoint",8.0, 255, 0, 0, 150)
local bliptruck = createBlipAttachedTo(WorkOnCP,51,2,0,255,255,170,0,99999.0)
setElementParent(bliptruck,WorkOnCP)
Truck_oFF()
addEventHandler("onClientRender", getRootElement(), updateCamera)
addEventHandler("onClientMarkerHit", WorkOnCP, MarkerHit)
end
addCommandHandler("truck",
function(commandName)
setElementPosition(localPlayer,2174.8413, -2251.5706, 13.3036)
setElementData(localPlayer, "zrespilGracz", 1)
end)
function MarkerHit ( hitPlayer, matchingDimension )
local sby = getElementData(localPlayer, "JestTruck")
outputChatBox ("Dotar?es "..sby)
destroyElement(WorkOnCP)
destroyElement(bliptruck)
removeEventHandler("onClientRender", getRootElement(), updateCamera)
setElementData(localPlayer, "zrespilGracz", 1)
end
function updateCamera ()
x,y,z = getElementPosition(localPlayer)
Dystans = getDistanceBetweenPoints3D(x,y,z, Truck.positX[TruckName], Truck.positY[TruckName], Truck.positZ[TruckName])
Dystans = Dystans /1000
Dystans = string.format("%.3f",Dystans)
dxDrawText("#0000FF".. TruckName .." #ffffffTowar:P?czki\nDo celu: ".. tostring(Dystans) .." km", screenW * 0.2132, screenH * 0.7995, screenW * 0.3971, screenH * 0.8529, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, true, false)
local rotation = getScreenRotationFromWorldPosition( Truck.positX[TruckName], Truck.positY[TruckName], Truck.positZ[TruckName] )
dxDrawImage(screenW * 0.0162, screenH * 0.8477, screenW * 0.0353, screenH * 0.0820, ":gui/images/arr.png", rotation, 0, 0, tocolor(0, 0, 255, 255), false)
end
addEventHandler ( "onClientRender", root, updateCamera )
function getScreenRotationFromWorldPosition( targetX, targetY, targetZ )
-- Get camera position and rotation
local camX, camY, _, lookAtX, lookAtY = getCameraMatrix()
local camRotZ = math.atan2 ( ( lookAtX - camX ), ( lookAtY - camY ) )
-- Calc direction to
local dirX = targetX - camX
local dirY = targetY - camY
-- Calc rotation to
local dirRotZ = math.atan2(dirX,dirY)
-- Calc relative rotation to
local relRotZ = dirRotZ - camRotZ
-- Return rotation in degrees
return math.deg(relRotZ)
end
addCommandHandler("cam2",
function(_)
local cx,cy,cz,lx,ly,lz = getCameraMatrix()
outputChatBox(tostring(cx)..","..tostring(cy)..","..tostring(cz)..","..tostring(lx)..","..tostring(ly)..","..tostring(lz),255,255,255,true)
outputChatBox(tostring(getElementDimension(localPlayer)))
local x,y,z = getElementPosition( localPlayer )
outputChatBox(tostring(x)..","..tostring(y)..","..tostring(z)..",",255,255,255,true)
end)
server
Kod: myMarker = createMarker(2228.1208,-2221.2285,12.3469, 'cylinder', 7.0, 255, 0, 0, 150) -- create myMarker
createVehicle(435,2229,-2253.8999,14.2,0,0,46)
createVehicle(591,2236.3,-2246.3,14.2,0,0,48)
createVehicle(591,2221.6001,-2261.7,14.2,0,0,46)
createVehicle(591,2214.3,-2268.8999,14.2,0,0,47.999)
createVehicle(591,2207.2,-2276,14.2,0,0,47.999)
Truck_cars = createVehicle(514,2175.7,-2268.5,14.1,0.0,0.0,223.995)
Truck_cars = createVehicle(514,2162.1001,-2281.5,14.1,0.0,0.0,223.995)
Truck_cars = createVehicle(514,2168.8, -2276.1001, 14.1, 0.0, 0.0, 224.0)
addEventHandler ( "onMarkerHit", myMarker,
function ( hitElement )
triggerClientEvent ( "showTruckerGui", hitElement, hitElement )
end
)
addEventHandler ( "onVehicleExit", getRootElement(),
function ( hitElement )
if ( getElementModel ( source ) == 514 ) then
setElementData(hitElement, "JestTruck", 1)
end
end
)
function addHelmetOnEnter ( thePlayer, seat, jacked )
if ( getElementModel ( source ) == 514 ) then
setElementData(thePlayer, "JestTruck", 2)
end
end
addEventHandler ( "onVehicleEnter", getRootElement(), addHelmetOnEnter )
Podpis
Cokolwiek robicie w swoim życiu, nie będzie to legendarne,
jeżeli wasi przyjaciele nie będą mogli tego zobaczyć.
Wysłany: 2015-09-11, 18:01
awfesa
Wiek: 29 Na forum: 4705 dni Posty: 563
Piwa : 223
skrypt normalnie dzia?a lecz chce si? dowiedzie? czy dany kod jest napisany po dobrej stronie serwera i klienta
Podpis
Cokolwiek robicie w swoim życiu, nie będzie to legendarne,
jeżeli wasi przyjaciele nie będą mogli tego zobaczyć.
Wysłany: 2015-09-11, 18:32
#404
Wiek: 26 Na forum: 4771 dni Posty: 1438
Piwa : 2512
awfesa , og?lnie nie sprawdza?em bo fon, ale kilka rad mog? Ci da?.
- Co co tych aut po stronie serwera, nie wiem czy nie b?dzie problemu ze zmiennymi (raczej nie), ale optymalniejszym i estetyczniejszym wyjsciem byloby zastosowanie p?tli na tabel?, w kt?rej wpiszesz koordynaty pojazd?w.
Co do strony serwera/klienta - to bardzo proste, wszystkie elementy jak spawnowanie, tworzenie pojazd?w, teleportowanie (ustawianie pozycji inaczej), dawanie pieni?dzy najlepiej da? na stron? serwera (wiadomo, mog? by? wadliwe pliki klienta gry, cheaterzy inaczej). Po stronie client'a staraj si? jedynie ustawia? elementy GUI, dxDraw'y i u?ywaj funkcji mo?liwych tylko po stronir clienta.
Jezeli jest jakas funkcja typu shared (mozliwa po obu stronach) rzecz? oczywist? jest, ze bezpieczniej po stronie serwera.
//Sorka za bl?dy itp, telefon //
Wysłany: 2015-09-12, 19:41
luki123luki123
Place Game
Wiek: 28 Na forum: 5275 dni Posty: 1948
Nick w MP: LuKiO
Piwa : 6101
awfesa , co do tabel to znalaz?em fajne rozwi?zanie:
gui = {}
gui [ "Panel" ] = guiCreateWindow ( ............... )
gui [ "Label" ] = guiCreateLabel ( .............)
a nastepnie to robisz tak :
guiSetVisible ( gui [ "Panel" ], true )
Te rozwiazanie jest dla mnie o wiele lepsze bo mo?esz zapami?ta? co napisa?e? a nie pacze? si? do g?ry jaki ma numerek etc.
[ Dodano : 2015-09-12, 19:44 ]
Kolejna rada jak masz event: onClientMarkerHit, onMarkerHit, onClientMarkerLeave, onMarkerLeave to sprawdzaj czy element hitElement jest gracz
Tagi: czy :: kod :: jest :: dobrze :: napisany
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: