Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2015-09-11, 17:01


awfesa







Wiek: 29
Na forum: 4705 dni
Posty: 563

Piwa: 223

Respekt: 280
Respekt: 280Respekt: 280Respekt: 280

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ć.
Postaw piwo autorowi tego posta
 

 
Wysłany: 2015-09-11, 18:01


awfesa







Wiek: 29
Na forum: 4705 dni
Posty: 563

Piwa: 223

Respekt: 280
Respekt: 280Respekt: 280Respekt: 280

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ć.
Postaw piwo autorowi tego posta
 

 
Wysłany: 2015-09-11, 18:32


#404







Wiek: 26
Na forum: 4771 dni
Posty: 1438

Piwa: 2512

Respekt: 833,5
Respekt: 833,5Respekt: 833,5

Ostrzeżeń: 60%
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 //

Postaw piwo autorowi tego posta
 

 
Wysłany: 2015-09-12, 19:41


luki123luki123

Place Game






Wiek: 28
Na forum: 5275 dni
Posty: 1948
Nick w MP: LuKiO

Piwa: 6101

Respekt: 611
Respekt: 611Respekt: 611

awfesa, co do tabel to znalaz?em fajne rozwi?zanie:
gui = {}
gui["Panel"] = guiCreateWindow( ............... )
gui["Label"] = guiCreateLabel( .............)

a nastepnie to robisz tak:

guiSetVisiblegui["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

Postaw piwo autorowi tego posta
 

 
Tagi: czy :: kod :: jest :: dobrze :: napisany
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Czy kod jest dobrze napisany Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

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
Dodaj temat do Ulubionych
Wersja do druku