AfuSensi Posted July 3, 2014 Posted July 3, 2014 Hey, I am an incredible noob at lua coding, but im trying to become better at it. So i am trying to create a 3 lane system like (with bound keys "Q" for jumping to left, and "E" for jumping to right. /debugscript is saying i have a bad argument @ 'getElementPosition' at line 3. This is my script (client): thePlayer = localPlayer vehicle = getPedOccupiedVehicle ( thePlayer ) sx,sy,sz = getElementPosition( vehicle ) lane1pos = 4941.7998046875 --Put x cordinate of lane 1 here. lane2pos = 4931.7001953125 --Put x cordinate of lane 2 here. lane3pos = 4921.2001953125 --Put x cordinate of lane 3 here. bindKey ( "Q", "down", "links" ) function links () if sx == ( lane1pos ) then setElementPosition( vehicle , lane1pos, sy, sz + 0.05 ) outputChatBox ("lanepos1") elseif ( sx == lanepos2 ) then setElementPosition( vehicle , lane1pos, sy, sz + 0.05 ) elseif ( sx == lanepos3 ) then setElementPosition( vehicle , lane2pos, sy, sz + 0.05 ) end end bindKey ( "E", "down", "rechts" ) function rechts () if sx == ( lane1pos ) then setElementPosition( vehicle , lane2pos, sy, sz + 0.05 ) elseif ( sx == lanepos2 ) then setElementPosition( vehicle , lane3pos, sy, sz + 0.05 ) elseif ( sx == lanepos3 ) then setElementPosition( vehicle , lane3pos, sy, sz + 0.05 ) end end I am not asking for anyone to fix my script, just to tell me what's wrong with it, otherwise i won't learn. Thanks!
Moderators IIYAMA Posted July 3, 2014 Moderators Posted July 3, 2014 Well your problem is that a player isn't always in a vehicle. Which means you are trying to get the position from a vehicle which doesn't exist. so before you get it's position do "if vehicle then". Do you want to improve your Lua programming skills and make less mistakes? Start with Lua Language Server! Useful functions 3x Spoiler checkPassiveTimer getScreenStartPositionFromBox getPedGender Tutorials 4x Spoiler Scaling DX Events Attach an addEventHandler on a group of elements Debugging
_DrXenon Posted July 3, 2014 Posted July 3, 2014 Btw... you also typed function name as a string.. "links", i think you should function name just as it.. not as string ●●● Rage Gaming Society Coming Soon ●●●
Moderators IIYAMA Posted July 3, 2014 Moderators Posted July 3, 2014 It is a text quote, so yes of course without those " ". Do you want to improve your Lua programming skills and make less mistakes? Start with Lua Language Server! Useful functions 3x Spoiler checkPassiveTimer getScreenStartPositionFromBox getPedGender Tutorials 4x Spoiler Scaling DX Events Attach an addEventHandler on a group of elements Debugging
AfuSensi Posted July 3, 2014 Author Posted July 3, 2014 Thanks guys! I got it working! lane1pos = 4921.2001953125 --Put x cordinate of lane 1 here. lane2pos = 4931.7001953125 --Put x cordinate of lane 2 here. lane3pos = 4941.7998046875 --Put x cordinate of lane 3 here. spacing = 6 --Put your spacing here (the amount of space each lane counts.) function autodrive () toggleControl ( "vehicle_left", false ) -- disable the vehicle_left key toggleControl ( "vehicle_right", false ) -- disable the vehicle_right key toggleControl ( "accelerate", false ) -- disable the accelerate key toggleControl ( "vehicle_fire", false ) -- disable fire for NOS toggleControl ( "brake_reverse", false ) -- disable the brake_reverse key toggleControl ( "handbrake", false ) -- disable the handbrake key setControlState ( "accelerate", true ) -- force the accelerate key on setControlState ( "vehicle_fire", true ) -- force the fire (nos) key on end addEventHandler ( "onClientPreRender", root, autodrive ) function links () local veh = getPedOccupiedVehicle(localPlayer) if (isVehicleBlown( veh ) == false) then local sx,sy,sz = getElementPosition ( veh ) if ( lane1pos - spacing < sx ) and ( lane1pos + spacing > sx ) then setElementPosition( veh, lane1pos, sy, sz + 0.05 ) outputChatBox ("lanepos1 links") elseif ( lane2pos - spacing < sx ) and ( lane2pos + spacing > sx ) then setElementPosition( veh, lane1pos, sy, sz + 0.05 ) outputChatBox ("lanepost2 links") elseif ( lane3pos - spacing < sx ) and ( lane3pos + spacing > sx ) then setElementPosition( veh, lane2pos, sy, sz + 0.05 ) outputChatBox ("lanepost2 links 2") end end end bindKey ( "Q", "down", links ) function rechts () local veh = getPedOccupiedVehicle(localPlayer) if (isVehicleBlown( veh ) == false) then local sx,sy,sz = getElementPosition ( veh ) if ( lane1pos - spacing < sx ) and ( lane1pos + spacing > sx ) then setElementPosition( veh, lane2pos, sy, sz + 0.05 ) outputChatBox ("lanepost2 rechts") elseif ( lane2pos - spacing < sx ) and ( lane2pos + spacing > sx ) then setElementPosition( veh, lane3pos, sy, sz + 0.05 ) outputChatBox ("lanepost3 rechts") elseif ( lane3pos - spacing < sx ) and ( lane3pos + spacing > sx ) then setElementPosition( veh, lane3pos, sy, sz + 0.05 ) outputChatBox ("lanepost3 rechts2") end end end bindKey ( "E", "down", rechts ) For some reason i had to call it local otherwise it would give me the same error. If anyone can explain that, i would appreciate it!
Moderators IIYAMA Posted July 4, 2014 Moderators Posted July 4, 2014 Line 22 and 43: if (isVehicleBlown( veh ) == false) then To: if veh and (isVehicleBlown( veh ) == false) then Do you want to improve your Lua programming skills and make less mistakes? Start with Lua Language Server! Useful functions 3x Spoiler checkPassiveTimer getScreenStartPositionFromBox getPedGender Tutorials 4x Spoiler Scaling DX Events Attach an addEventHandler on a group of elements Debugging
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now