Jump to content

Price ($$) based on getDistanceBetweenPoints2D


Hero192

Recommended Posts

Posted (edited)

Hey guys,

today im making transport marker and i want make the price be as distance between player Position and markers Position

Also i want the distance price shows on the gridlist i tried that but doesn't works anymore..

Please guys help me out

Please try to help me i really stuck here

--Server side:

local markers = { --Markers table 
[1]={x=2220.43, y=2469.49, z=10.82, bx=2221.24, by=2468.76, blip=8, dim=0, int=0}, 
[2]={x=1625.00, y=1850.43, z=10.82, bx=1625.00, by=1850.43, blip=8, dim=0, int=0}, 
[3]={x= 1718.26, y=1484.68, z=10.82, bx=1718.26, by=1484.68, blip=8, dim=0, int=0}, 
[4]={x=1214.07, y=-1316.54, z=13.56, bx=1214.07, by=-1316.54, blip=8, dim=0, int=0}, 
} 
  
local moneyTable = { 
[1]={1111}, -- How to remplace the argument [1] in theTable by distance numbers as price 
[2]={1111}, 
[3]={1111}, 
[4]={1111}, 
} 
addEventHandler("onResourceStart",resourceRoot, 
function () 
        for index, data in pairs(markers) do 
        local zx, zy = getElementPosition(source)  
        distance = getDistanceBetweenPoints2D(zx, zy, data.x, data.y) -- i tried but i failed  
        local busmarker = createMarker(data.x, data.y, data.z-1, "cylinder", 1.5,  247,187, 7, 120) 
        addEventHandler("onMarkerHit",busmarker,onMarkerHit)    
   end 
end) 
  
addEvent ("warpplayer",true) 
addEventHandler ("warpplayer",root, 
function (ID) 
     local cash = math.floor(distance / 2) 
     if ( getPlayerMoney ( source ) < cash ) then 
    outputChatBox (" You need ".. cash .."$ to use this service.", source, 255,0,0) 
  else 
     takePlayerMoney (source, cash ) 
   end 
end)   
  
function onMarkerHit(hitPlayer) 
    if ( getElementType ( hitPlayer ) == 'player' and not isPedInVehicle ( hitPlayer ) and not isPedDead ( hitPlayer ) ) then 
    triggerClientEvent(hitPlayer,"showgui",hitPlayer,moneyTable) 
  end 
end 
  

--Please try to help me i really stuck here

Edited by Guest
Posted (edited)

I fixed the code but i get only distance for one marker and not all markers and i want to show the cash based on distances to the gridlist help me please

local moneyTable = { 
 {1111}, -- How to remplace the argument [1] in theTable by distance numbers as price 
 {1111}, 
 {1111}, 
 {1111}, 
} 
markerpos = {} 
playerpos = {} 
  
addEventHandler("onResourceStart",resourceRoot, 
function () 
        for index, data in pairs(markers) do 
        local busmarker = createMarker(data.x, data.y, data.z-1, "cylinder", 1.5,247,187, 7, 120) 
        markerpos = { getElementPosition( busmarker ) } 
        addEventHandler("onMarkerHit",busmarker,onMarkerHit)    
   end 
end) 
  
addEvent ("warpplayer",true) 
addEventHandler ("warpplayer",root, 
function () 
     local px, py, pz = unpack ( playerpos ) 
     local mx, my, mz = unpack ( markerpos ) 
     playerpos = { getElementPosition( source ) } 
     local distance = getDistanceBetweenPoints2D ( px, py , mx, my ) 
     local cash = math.floor(distance / 2) 
     if ( getPlayerMoney ( source ) < cash ) then 
    outputChatBox (" You need ".. cash .."$ to use this service.", source, 255,0,0) 
  else 
     takePlayerMoney (source, cash ) 
   end 
end)   

Edited by Guest
Posted
local markers = { --Markers table 
[1]={x=2220.43, y=2469.49, z=10.82, bx=2221.24, by=2468.76, blip=8, dim=0, int=0}, 
[2]={x=1625.00, y=1850.43, z=10.82, bx=1625.00, by=1850.43, blip=8, dim=0, int=0}, 
[3]={x= 1718.26, y=1484.68, z=10.82, bx=1718.26, by=1484.68, blip=8, dim=0, int=0}, 
[4]={x=1214.07, y=-1316.54, z=13.56, bx=1214.07, by=-1316.54, blip=8, dim=0, int=0}, 
} 
  
local moneyTable = { 
[1]={1111}, -- How to remplace the argument [1] in theTable by distance numbers as price 
[2]={1111}, 
[3]={1111}, 
[4]={1111}, 
} 
busmarker = {} 
playerpos = {} 
  
addEventHandler("onResourceStart",resourceRoot, 
function () 
        for index, data in pairs(markers) do 
        local busmarker = createMarker(data.x, data.y, data.z-1, "cylinder", 1.5,247,187, 7, 120) 
        markerpos = { getElementPosition( busmarker ) } 
        addEventHandler("onMarkerHit",busmarker,onMarkerHit)    
   end 
end) 
  
addEvent ("warpplayer",true) 
addEventHandler ("warpplayer",root, 
function () 
     local px, py, pz = unpack ( playerpos ) 
     local mx, my, mz = unpack ( markerpos ) 
     playerpos = { getElementPosition( source ) } 
     local distance = getDistanceBetweenPoints2D ( px, py , mx, my ) 
     local cash = math.floor(distance / 2) 
     if ( getPlayerMoney ( source ) < cash ) then 
    outputChatBox (" You need ".. cash .."$ to use this service.", source, 255,0,0) 
  else 
     takePlayerMoney (source, cash ) 
   end 
end)   
  
function onMarkerHit(hitPlayer) 
    if ( getElementType ( hitPlayer ) == 'player' and not isPedInVehicle ( hitPlayer ) and not isPedDead ( hitPlayer ) ) then 
    triggerClientEvent(hitPlayer,"showgui",hitPlayer,moneyTable) 
  end 
end 

Posted

so you mean that?

still doing the same and the problem is when i selecte the gridlist to check the prices of markers distance it give me the same price..

you said: You need to find the marker on warpplayer to get its position.

how to do that?

addEvent ("warpplayer",true) 
addEventHandler ("warpplayer",root, 
function () 
     local px, py, pz = getElementPosition(client) 
     local mx, my, mz = unpack ( markerpos ) 
     local distance = getDistanceBetweenPoints2D ( px, py , mx, my ) 
     local cash = math.floor(distance / 2) 
     if ( getPlayerMoney ( source ) < cash ) then 
    outputChatBox (" You need ".. cash .."$ to use this service.", source, 255,0,0) 
  else 
     takePlayerMoney (source, cash ) 
   end 
end)   
  

Posted

There's no errors,

client side:

local root = getRootElement() 
local client = getLocalPlayer() 
buswindow = guiCreateWindow(419,244,500,287,"Bus",false) 
guiSetVisible (buswindow, false) 
guiWindowSetSizable(buswindow,false) 
busGrid = guiCreateGridList(9,20,482,224,false,buswindow) 
costColumn = guiGridListAddColumn(busGrid,"Price:",0.7) 
spawnBtn = guiCreateButton(17,247,157,31,"Spawn",false,buswindow) 
rejectBtn = guiCreateButton(329,247,157,31,"Cancel",false,buswindow) 
  
addEvent("showgui",true) 
addEventHandler("showgui",root, 
function (moneyTable) 
   guiSetVisible(buswindow,true) 
   showCursor(true) 
   guiGridListClear(busGrid) 
  for i,v in ipairs (moneyTable) do 
  local row = guiGridListAddRow (busGrid) 
  guiGridListSetItemText (busGrid, row, 1, v[1], false, false) 
    end 
end) 
  
addEventHandler ("onClientGUIClick", root, 
function () 
      if (source == rejectBtn) then 
      guiSetVisible(buswindow,false) 
      showCursor(false) 
     elseif (source == spawnBtn) then 
      local row,col = guiGridListGetSelectedItem(busGrid) 
      if row and col and row ~= -1 and col ~= -1 then 
      guiSetVisible(buswindow,false) 
      showCursor(false) 
      triggerServerEvent("warpplayer",client,guiGridListGetSelectedItem(busGrid)+1) 
     end 
   end 
end) 

Posted

If i was good i wasn't going to post this topic, i posted this to find someone who can give me his hand and help me out to correct and learn from my fails , be sure next time i can't do the same fail if you helped me

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...