raynner Posted March 16, 2020 Share Posted March 16, 2020 (edited) Olá amigos então eu estou com um problema que eu realmente não sou capaz de resolver ! Necessidade : Eu preciso pegar a posição do mundo através do cursor em cima da imagem do meu f11 personalizado Descrição completa: Eu peguei esse roteiro de um amigo mais eu acredito já telo visto pela internet e eu estou fazendo varias modificações nele eu adicionei blips as bordas e outras correções ... eu estou atualmente adicionando sistema de gps do gta v nele bom tudo já funciona porém eu coloquei para usar /gps aparece a imagem e eu clico no local porém eu quero fazer isso direto do mapa F11 eu tentei diversos cálculos mas o mais perto que eu cheguei foi obter a cordenada do mundo do centro em que o mapa esta Nota: vou deixar o código do arquivado de render aqui ele tem outros roteiros necessários para funcionar se precisar do mesmo diga eu irei disponibilizar eu não tenho problema em telo disponível pela internet afinal apenas estou aprimorando para meu servidor mais ainda esta longe de completo. Este é a função que eu fiz que me retorna a posição do mundo em que fica no centro do mapa quando eu movo ele vai pegando a cordenada do que esta no centro do render e seu eu movo o mouse ele apenas tem algumas alterações no floot da postion No codigo estou testando isso na linha 256 function getWorldFromMapPosition(mapX, mapY, posx, posy, x, y, w, h, range) local worldX = posx + ((mapX - (x + w / 2)) / range) / 3000 / (range/180); local worldY = posy - ((mapY - (y + h / 2)) / range) / 3000 / (range/180); return worldX, worldY end Map = {} Map.__index = Map Map.instances = {} Map.damageEfect = {} local sx,sy = guiGetScreenSize() px,py = 1366,768 x,y = (sx/px), (sy/py) font = dxCreateFont("images/myriadproregular.ttf",20,true) local max,min = math.min,math.max function cstrain( value, v1, v2 ) return max(min(value,v1),v2) end function math.map(value, low1, high1, low2, high2) return low2 + (value - low1) * (high2 - low2) / (high1 - low1) end function Map.new(X,Y,W,H) local self = setmetatable({}, Map) self.x = X self.y = Y self.w = W self.h = H local pos = {getElementPosition(localPlayer)} self.posX = pos[1] self.posY = pos[2] self.posZ = pos[3] self.size = 90 self.color = {255,255,255,255} self.blipSize = x*18 self.drawRange = 220 self.map = dxCreateTexture("images/gtasa.png","dxt5") self.map2 = dxCreateTexture("images/gtasa2.png","dxt5") self.renderTarget = dxCreateRenderTarget(W, H, true) self.blips = {} for k=0, 63 do self.blips[k] = dxCreateTexture("images/icons/"..k..".png","dxt3") end if(#Map.instances == 0) then addEventHandler("onClientRender", getRootElement(), Map.render) end table.insert(Map.instances, self) return self end function Map.render() for k,v in pairs(Map.instances) do if v.visible then if not v.style then v:draw() elseif v.style == 1 then v:draw2() end end end end function Map:setVisible(bool) self.visible = bool if bool == true then self:setPosition(getElementPosition(localPlayer)) end return true end function Map:isVisible() return self.visible end function Map:setPosition(x,y,z) self.posX = x self.posY = y self.posZ = z return true end function Map:getPosition() return self.posX, self.posY, self.posZ end function Map:setColor(r,g,b,a) self.color = {r,g,b,a} return true end function Map:getColor() return self.color end function Map:setSize(value) self.size = value return true end function dxDrawEmptyRec(absX,absY,sizeX,sizeY,color,ancho) dxDrawRectangle ( absX,absY,sizeX,ancho,color ) dxDrawRectangle ( absX,absY+ancho,ancho,sizeY-ancho,color ) dxDrawRectangle ( absX+ancho,absY+sizeY-ancho,sizeX-ancho,ancho,color ) dxDrawRectangle ( absX+sizeX-ancho,absY+ancho,ancho,sizeY-ancho*2,color ) end function Map:draw() dxSetRenderTarget(self.renderTarget, true) local player = getLocalPlayer() local centerX = (self.x) + (self.w/2) local centerY = (self.y) + (self.h/2) local pr = getPedRotation(player) local mapSize = 3000 / (self.drawRange/180) local zoomwert = self.drawRange if getKeyState("=") then if self.drawRange > 120 then self.drawRange = self.drawRange - 8 end elseif getKeyState("-") then if self.drawRange < 660 then self.drawRange = self.drawRange + 8 end elseif getKeyState("arrow_l") then self.posX = self.posX - (self.drawRange/100*10) elseif getKeyState("arrow_r") then self.posX = self.posX + (self.drawRange/100*10) elseif getKeyState("arrow_u") then self.posY = self.posY + (self.drawRange/100*10) elseif getKeyState("arrow_d") then self.posY = self.posY - (self.drawRange/100*10) end local mapPosX, mapPosY = -(math.map(self.posX+3000,0,6000,0,mapSize)-self.w/2), -(math.map(-self.posY + 3000, 0, 6000, 0, mapSize)-self.h/2) --[[ local screenW, screenH = guiGetScreenSize() local mptx,mpty,mptz = getWorldFromScreenPosition ( centerX, centerY, self.drawRange ) dxDrawText(tostring(umgerechnetx1), screenW * 0.3713, screenH * 0.6276, screenW * 0.6272, screenH * 0.9154, tocolor(255, 255, 255, 255), 1.00, "default", "left", "top", false, false, false, false, false) --]] ----------------------------------------------------------------------------------------------------- -- draw map dxDrawRectangle(0,0,self.w,self.h,tocolor(0,120,210)) dxDrawImage(mapPosX, mapPosY, mapSize, mapSize, self.map, 0,0,0, tocolor(255,255,255)) ----------------------------------------------------------------------------------------------------- -- draw radar areas for i, area in ipairs (getElementsByType("radararea")) do local ex, ey = getElementPosition(area) local w, h = getRadarAreaSize(area) local areaX = (3000+ex) / 6000 * mapSize local areaY = (3000-ey) / 6000 * mapSize local scaledW = w / 6000*mapSize local scaledH = -(h / 6000*mapSize) areaX = areaX + mapPosX areaY = areaY + mapPosY local rr, gg, bb, alpha = 255,255,255,255 rr, gg, bb, alpha = getRadarAreaColor(area) if (isRadarAreaFlashing(area)) then alpha = alpha*math.abs(getTickCount()%1000-500)/500 end dxSetBlendMode("modulate_add") dxDrawRectangle(areaX, areaY, scaledW, scaledH,tocolor(rr,gg,bb,alpha)) dxSetBlendMode("blend") end --local minStreamPosX,maxStreamPosX,minStreamPosY,maxStreamPosY=playerX-300*px*zoomwert,playerX+300*px*zoomwert,playerY-300*py*zoomwert,playerY+300*py*zoomwert if (#wegTable > 0) then for i,wayPoint in ipairs(wegTable) do --if mapPosX<wegTable[i].posX and mapPosX >wegTable[i].posX and mapPosY<wegTable[i].posY and mapPosY>wegTable[i].posY then local ex,ey = wegTable[i].posX,wegTable[i].posY local blipX = (3000+ex) / 6000 * mapSize local blipY = (3000-ey) / 6000 * mapSize blipX = blipX + mapPosX blipY = blipY + mapPosY if wegTable[i+1] then local ex2,ey2 = wegTable[i+1].posX,wegTable[i+1].posY local blipX2 = (3000+ex2) / 6000 * mapSize local blipY2 = (3000-ey2) / 6000 * mapSize blipX2 = blipX2 + mapPosX blipY2 = blipY2 + mapPosY local umgerechnetx1, umgerechnety1 = blipX,blipY local umgerechnetx2, umgerechnety2 = blipX2,blipY2 dxDrawLine(umgerechnetx1,umgerechnety1,umgerechnetx2,umgerechnety2,gpsColorRed, zoomwert / 10 / 20) else local ex2,ey2 = lastMarkerPositionX,lastMarkerPositionY local blipX2 = (3000+ex2) / 6000 * mapSize local blipY2 = (3000-ey2) / 6000 * mapSize blipX2 = blipX2 + mapPosX blipY2 = blipY2 + mapPosY local umgerechnetx1, umgerechnety1 = blipX,blipY local umgerechnetx2, umgerechnety2 = blipX2,blipY2 dxDrawLine(umgerechnetx1,umgerechnety1,umgerechnetx2,umgerechnety2,gpsColorRed, zoomwert / 10 / 20) end --end end end --[[function getWorldFromMapPosition(mapX, mapY) self.posX, self.posY, self.posZ = getElementPosition(player) local mapX, mapY = getCursorPosition() local worldX = ((mapX - (self.posX + self.w / 2)) / self.drawRange) / 3000 / (self.drawRange/180); local worldY = ((mapY - (self.posY + self.h / 2)) / self.drawRange) / 3000 / (self.drawRange/180); outputChatBox(tostring(worldX).." | "..tostring(worldY)) --return worldX, worldY; --end--]] ----------------------------------------------------------------------------------------------------- -- draw arrow local local b = self.blipSize local ex,ey = getElementPosition(player) local blipX = (3000+ex) / 6000 * mapSize local blipY = (3000-ey) / 6000 * mapSize blipX = blipX + mapPosX blipY = blipY + mapPosY dxDrawImage(blipX-x*23/2, blipY-y*25/2,x*23,y*25, self.blips[2], (-pr)%360,0,0,tocolor(255,255,255,255)) dxSetRenderTarget() ----------------------------------------------------------------------------------------------------- -- draw render target dxDrawEmptyRec(self.x-x*5, self.y-y*5, self.w+x*10, self.h+y*10,tocolor(0,0,0,150),5) dxDrawImage(self.x, self.y, self.w, self.h, self.renderTarget,0,0,0,tocolor(unpack(self.color))) ----------------------------------------------------------------------------------------------------- -- draw blips for i, b in ipairs (getElementsByType('blip')) do if getElementDimension(b) == getElementDimension(player) and getElementInterior(b) == getElementInterior(player) then local elementAttached = getElementAttachedTo ( b ) if elementAttached ~= player then local ex, ey, ez = getElementPosition(b) local blipX = (3000+ex) / 6000 * mapSize local blipY = (3000-ey) / 6000 * mapSize blipX = blipX + mapPosX + self.x blipY = blipY + mapPosY + self.y --[[if isCursorShowing(localPlayer) then local mapX, mapY = getCursorPosition() local tx,ty = getWorldFromMapPosition(mapX, mapY, self.posX, self.posY, self.x, self.y, self.w, self.h, self.drawRange) outputChatBox(tostring(tx).." | "..tostring(ty)) end--]] if blipX < self.x then blipX = self.x end if blipX > self.x + self.w then blipX = self.x + self.w end if blipY < self.y then blipY = self.y end if blipY > self.y + self.h then blipY = self.y + self.h end local blipIcon = getBlipIcon(b) local rr,gg,bb,aa = 255,255,255,255 local blipSize = self.blipSize if (elementAttached) and (getElementType(elementAttached) == "vehicle") then blipSize = blipSize / 2 aa = 200 end local blipIcon = getBlipIcon(b) if blipIcon == 0 then rr, gg, bb, aa = getBlipColor(b) end local img = self.blips[blipIcon] if (elementAttached) and (getElementType(elementAttached) == "player") then img = self.blips[0] blipSize = blipSize / 1.6 end dxDrawImage(blipX-blipSize/2, blipY-blipSize/2, blipSize, blipSize, img,0,0,0,tocolor(rr,gg,bb,aa)) end end end end wegTable={} function Map:draw2() dxSetRenderTarget(self.renderTarget, true) local player = getLocalPlayer() local centerX = (self.x) + (self.w/2) local centerY = (self.y) + (self.h/2) local pr = getPedRotation(player) local mapSize = 3000 / (self.drawRange/180) local zoomwert = self.drawRange local _, _, camRotZ = getElementRotation(getCamera()) if getKeyState("=") then if self.drawRange > 120 then self.drawRange = self.drawRange - 8 end elseif getKeyState("-") then if self.drawRange < 260 then self.drawRange = self.drawRange + 8 end end self.posX, self.posY, self.posZ = getElementPosition(player) local playerX, playerY, playerZ = getElementPosition(player) local mapPosX, mapPosY = -(math.map(self.posX+3000,0,6000,0,mapSize)-self.w/2), -(math.map(-self.posY + 3000, 0, 6000, 0, mapSize)-self.h/2) ----------------------------------------------------------------------------------------------------- -- draw map local cx,cy,_,tx,ty = getCameraMatrix() local north = findRotation(cx,cy,tx,ty) dxDrawRectangle(0,0,self.w,self.h,tocolor(0,120,210)) dxDrawImage(mapPosX, mapPosY, mapSize, mapSize, self.map2, north, -mapSize/2 - mapPosX + self.w/2, -mapSize/2 - mapPosY + self.h/2, tocolor(255,255,255)) ----------------------------------------------------------------------------------------------------- -- draw wanted level effect if getPlayerWantedLevel(player) > 0 then if not old then old = getTickCount() wR,wG,wB = 0,0,255 end current = getTickCount () if current-old > 1500 then old = getTickCount() if wR == 255 then wR,wG,wB = 0,100,255 else wR,wG,wB = 255,0,0 end end dxDrawRectangle(0, 0, self.w, self.h,tocolor(wR,wG,wB,100)) end ----------------------------------------------------------------------------------------------------- -- draw radar areas for i, area in ipairs (getElementsByType("radararea")) do local ex, ey = getElementPosition(area) local w, h = getRadarAreaSize(area) local areaX = (3000+ex) / 6000 * mapSize local areaY = (3000-ey) / 6000 * mapSize local scaledW = w / 6000*mapSize local scaledH = -(h / 6000*mapSize) areaX = areaX + mapPosX areaY = areaY + mapPosY local rr, gg, bb, alpha = 255,255,255,255 rr, gg, bb, alpha = getRadarAreaColor(area) if (isRadarAreaFlashing(area)) then alpha = alpha*math.abs(getTickCount()%1000-500)/500 end dxSetBlendMode("modulate_add") dxDrawImage(areaX, areaY, scaledW, scaledH,self.blips[1], north, -scaledW/2 - areaX + self.w/2, -scaledH/2 - areaY + self.h/2,tocolor(rr,gg,bb,alpha)) dxSetBlendMode("blend") end ----------------------------------------------------------------------------------------------------- -- draw blips for i, b in ipairs (getElementsByType('blip')) do if getElementDimension(b) == getElementDimension(player) and getElementInterior(b) == getElementInterior(player) then local elementAttached = getElementAttachedTo ( b ) if elementAttached ~= player then local ex, ey, ez = getElementPosition(b) local bf = getBlipVisibleDistance(b) local blipIcon = getBlipIcon(b) local rr,gg,bb,aa = 255,255,255,255 local blipSize = self.blipSize local blipX, blipY = getRadarFromWorldPosition(ex,ey,-x*40, -y*40, self.w+x*80, self.h+y*80,mapSize) local Px, Py, Pz = getElementPosition(player) if getDistanceBetweenPoints2D(Px, Py, ex, ey) < 380 then --outputChatBox(getDistanceBetweenPoints2D(Px, Py, ex, ey)..' : '..bf) blipX, blipY = cstrain(blipX, 1, 258), cstrain(blipY, 1, 150) end if (elementAttached) and (getElementType(elementAttached) == "vehicle") then blipSize = blipSize / 2 aa = 200 end local blipIcon = getBlipIcon(b) if blipIcon == 0 then rr, gg, bb, aa = getBlipColor(b) end local img = self.blips[blipIcon] if (elementAttached) and (getElementType(elementAttached) == "player") then img = self.blips[0] blipSize = blipSize / 1.6 end dxDrawImage(blipX-blipSize/2, blipY-blipSize/2, blipSize, blipSize,img, 0,0,0,tocolor(rr,gg,bb,aa)) if (elementAttached) and (getElementType(elementAttached) == "player") and getPedOccupiedVehicle(elementAttached) and getVehicleType(getPedOccupiedVehicle(elementAttached)) == "Helicopter" then dxDrawImage(blipX-x*50/2, blipY-y*50/2, x*50, y*50, "images/H.png",north-getPedRotation(elementAttached)) dxDrawImage(blipX-x*50/2, blipY-y*50/2, x*50, y*50, "images/HR.png",getTickCount()%360) end end end end --local minStreamPosX,maxStreamPosX,minStreamPosY,maxStreamPosY=playerX-300*px*zoomwert,playerX+300*px*zoomwert,playerY-300*py*zoomwert,playerY+300*py*zoomwert if (#wegTable > 0) then for i,wayPoint in ipairs(wegTable) do --if mapPosX<wegTable[i].posX and mapPosX >wegTable[i].posX and mapPosY<wegTable[i].posY and mapPosY>wegTable[i].posY then local screenW, screenH = guiGetScreenSize() if wegTable[i+1] then local umgerechnetx1, umgerechnety1 = getRadarFromWorldPosition(wegTable[i].posX,wegTable[i].posY,-x*40, -y*40, self.w+x*80, self.h+y*80,mapSize) local umgerechnetx2, umgerechnety2 = getRadarFromWorldPosition(wegTable[i+1].posX,wegTable[i+1].posY,-x*40, -y*40, self.w+x*80, self.h+y*80,mapSize) dxDrawLine(umgerechnetx1,umgerechnety1,umgerechnetx2,umgerechnety2,gpsColorRed, zoomwert / 6 / 10) else local umgerechnetx1, umgerechnety1 = getRadarFromWorldPosition(wegTable[i].posX,wegTable[i].posY,-x*40, -y*40, self.w+x*80, self.h+y*80,mapSize) local umgerechnetx2, umgerechnety2 = getRadarFromWorldPosition(lastMarkerPositionX,lastMarkerPositionY,-x*40, -y*40, self.w+x*80, self.h+y*80,mapSize) dxDrawLine(umgerechnetx1,umgerechnety1,umgerechnetx2,umgerechnety2,gpsColorRed, zoomwert / 6 / 10) end --end end end ----------------------------------------------------------------------------------------------------- -- draw arrow local local b = self.blipSize local ex,ey = getElementPosition(player) local blipX = (3000+ex) / 6000 * mapSize local blipY = (3000-ey) / 6000 * mapSize blipX = blipX + mapPosX blipY = blipY + mapPosY if getPedOccupiedVehicle(player) and getVehicleType(getPedOccupiedVehicle(player)) == "Helicopter" then dxDrawImage(blipX-x*50/2, blipY-y*50/2, x*50, y*50, "images/H.png",north-pr) dxDrawImage(blipX-x*50/2, blipY-y*50/2, x*50, y*50, "images/HR.png",getTickCount()%360) else dxDrawImage(blipX-x*23/2, blipY-y*25/2,x*23,y*25, self.blips[2], north-pr,0,0,tocolor(255,255,255,255)) end dxSetRenderTarget() ----------------------------------------------------------------------------------------------------- -- draw render target if getElementInterior(player) == 0 then dxDrawRectangle(self.x-x*5, self.y-y*5, self.w+x*10, self.h+y*10, tocolor(0, 0, 0, 150), false) dxDrawImage(self.x, self.y, self.w, self.h, self.renderTarget,0,0,0,tocolor(unpack(self.color))) else dxDrawImage(self.x, self.y, self.w, self.h, "images/lostc.png") end ----------------------------------------------------------------------------------------------------- -- draw damage effect for k, v in ipairs(Map.damageEfect) do v[3] = v[3] - (getTickCount() - v[1]) / 800 if v[3] <= 0 then table.remove(Map.damageEfect, k) else dxDrawImage(self.x, self.y, self.w, self.h, "images/mapred.png", 0, 0, 0, tocolor(255, 255, 255, v[3])) end end --dxDrawImage(self.x-x*5, self.y-y*22, self.w+x*10, self.h+y*28, "images/mapbg.png",0,0,0,tocolor(unpack(self.color))) --local zinColor = getKeyState("=") and tocolor(255,255,255,self.color[4]) or tocolor(172,211,115,self.color[4]) --dxDrawImage(self.x+x*263, self.y-y*19,x*17,y*17, "images/zin.png",0,0,0,zinColor) --local zoutColor = getKeyState("-") and tocolor(255,255,255,self.color[4]) or tocolor(172,211,115,self.color[4]) --dxDrawImage(self.x+x*285, self.y-y*19,x*17,y*17, "images/zout.png",0,0,0,zoutColor) --dxDrawText(zoneText,self.x+x*32,self.y-y*22, x*100, y*100, tocolor(unpack(self.color)), x*0.6, font,"left","top",false,false,false,true) --dxDrawRectangle(self.x-x*5, self.y-y*5, self.w+x*10, self.h+y*10, tocolor(0, 0, 0, 150), false) local zoneText = getElementInterior(player) == 0 and "#FFFFFF"..getZoneName(playerX,playerY,playerZ) or "#FFFFFF" dxDrawRectangle(self.x, self.y+self.h-y*20, self.w, self.h/8, tocolor(0, 0, 0, 80), false) dxDrawText(" "..zoneText,self.x, self.y+self.h-y*21, x*100, y*100, tocolor(255, 255, 255, 255), x*0.6, font,"left","top",false,false,false,true) end function findRotation(x1, y1, x2, y2) local t = -math.deg(math.atan2(x2-x1,y2-y1)) if t < 0 then t = t + 360 end return t end function getPointAway(x, y, angle, dist) local a = -math.rad(angle) dist = dist / 57.295779513082 return x + (dist * math.deg(math.sin(a))), y + (dist * math.deg(math.cos(a))) end function getRadarFromWorldPosition(bx, by, x, y, w, h, scaledMapSize) local RadarX, RadarY = x + w/2, y + h/2 local RadarD = getDistanceBetweenPoints2D(RadarX, RadarY, x, y) local px, py = getElementPosition(localPlayer) local _, _, crz = getElementRotation(getCamera()) local dist = getDistanceBetweenPoints2D(px, py, bx, by) if dist > RadarD * 6000/scaledMapSize then dist = RadarD * 6000/scaledMapSize end local rot = 180 - findRotation(px, py, bx, by) + crz local ax, ay = getPointAway(RadarX, RadarY, rot, dist * scaledMapSize/6000) return ax, ay end function onClientPlayerDamage(attacker, weapon, _, bodypart) local part = attacker and getElementType(attacker) == "player" and getPedWeaponSlot(attacker) and getPedWeaponSlot(attacker) or false if attacker and attacker ~= source and not (part == 8 or (part == 7 and weapon ~= 38)) then Map.damageEfect[#Map.damageEfect + 1] = {getTickCount(), 0, math.min(25.5 * bodypart, 255)} else Map.damageEfect[#Map.damageEfect + 1] = {getTickCount(), 0, math.min(20 * bodypart, 255)} end if #Map.damageEfect > 18 then repeat table.remove(Map.damageEfect, 1) until #Map.damageEfect < 18 end end addEventHandler("onClientPlayerDamage", localPlayer,onClientPlayerDamage) function getWorldFromMapPosition(mapX, mapY, posx, posy, x, y, w, h, range) local worldX = posx + ((mapX*10 - (x + w / 2)) / range) / 3000 / (range/180); local worldY = posy - ((mapY*10 - (y + h / 2)) / range) / 3000 / (range/180); return worldX, worldY end Edited March 16, 2020 by raynner Link to comment
_Ace Posted March 17, 2020 Share Posted March 17, 2020 se eu entendi direito vc precisa as coordenadas do mapa f11 atraves de click ou algo assim? tem essa funcao getPlayerMapBoundingBox que talvez ajude, peguei esse exemplo da wiki, local screenSize = Vector2(guiGetScreenSize()) local function handleMapTargetBlip() if not isPlayerMapVisible() then showCursor(false, false) wasLeftMouseButtonPressed, wasRightMouseButtonPressed = false, false return end if not isCursorShowing() then showCursor(true, false) end local isLeftMouseButtonPressed = getKeyState("mouse1") if isLeftMouseButtonPressed and isLeftMouseButtonPressed ~= wasLeftMouseButtonPressed then local cursorPos, mapMin, mapMax = Vector2(getCursorPosition()) cursorPos.x, cursorPos.y = cursorPos.x * screenSize.x, cursorPos.y * screenSize.y do local mx, my, Mx, My = getPlayerMapBoundingBox() mapMin = Vector2(mx, my) mapMax = Vector2(Mx, My) end if cursorPos.x >= mapMin.x and cursorPos.y >= mapMin.y and cursorPos.x <= mapMax.x and cursorPos.y <= mapMax.y then local relPos = Vector2((cursorPos.x - mapMin.x) / (mapMax.x - mapMin.x), (cursorPos.y - mapMin.y) / (mapMax.y - mapMin.y)) local worldPlanePos = Vector2(6000 * (relPos.x - 0.5), 3000 - (relPos.y * 6000)) local worldPos = Vector3(worldPlanePos.x, worldPlanePos.y, getGroundPosition(worldPlanePos.x, worldPlanePos.y, 3000)) outputChatBox("x: "..worldPlanePos.x.." y: "..worldPlanePos.y.." z: "..getGroundPosition(worldPlanePos.x, worldPlanePos.y, 3000)) end end end addEventHandler("onClientRender", root, handleMapTargetBlip) e editei uma linha pra que saia as coords no chat quando clica no mapa do f11, mesmo que seu mapa seja diferente do padrao do mta vc pode aproveitar o algoritmo, as coords Z precisa estar perto do player pro getgroundposition funcionar, ou precisa teleportar antes o player pra perto pra carregar os dados de coll e ai sim achar a position Z do chao 1 Link to comment
raynner Posted March 17, 2020 Author Share Posted March 17, 2020 30 minutes ago, _Ace said: se eu entendi direito vc precisa as coordenadas do mapa f11 atraves de click ou algo assim? tem essa funcao getPlayerMapBoundingBox que talvez ajude, peguei esse exemplo da wiki, local screenSize = Vector2(guiGetScreenSize())local function handleMapTargetBlip() if not isPlayerMapVisible() then showCursor(false, false) wasLeftMouseButtonPressed, wasRightMouseButtonPressed = false, false return end if not isCursorShowing() then showCursor(true, false) end local isLeftMouseButtonPressed = getKeyState("mouse1") if isLeftMouseButtonPressed and isLeftMouseButtonPressed ~= wasLeftMouseButtonPressed then local cursorPos, mapMin, mapMax = Vector2(getCursorPosition()) cursorPos.x, cursorPos.y = cursorPos.x * screenSize.x, cursorPos.y * screenSize.y do local mx, my, Mx, My = getPlayerMapBoundingBox() mapMin = Vector2(mx, my) mapMax = Vector2(Mx, My) end if cursorPos.x >= mapMin.x and cursorPos.y >= mapMin.y and cursorPos.x <= mapMax.x and cursorPos.y <= mapMax.y then local relPos = Vector2((cursorPos.x - mapMin.x) / (mapMax.x - mapMin.x), (cursorPos.y - mapMin.y) / (mapMax.y - mapMin.y)) local worldPlanePos = Vector2(6000 * (relPos.x - 0.5), 3000 - (relPos.y * 6000)) local worldPos = Vector3(worldPlanePos.x, worldPlanePos.y, getGroundPosition(worldPlanePos.x, worldPlanePos.y, 3000)) outputChatBox("x: "..worldPlanePos.x.." y: "..worldPlanePos.y.." z: "..getGroundPosition(worldPlanePos.x, worldPlanePos.y, 3000)) end endendaddEventHandler("onClientRender", root, handleMapTargetBlip) e editei uma linha pra que saia as coords no chat quando clica no mapa do f11, mesmo que seu mapa seja diferente do padrao do mta vc pode aproveitar o algoritmo, as coords Z precisa estar perto do player pro getgroundposition funcionar, ou precisa teleportar antes o player pra perto pra carregar os dados de coll e ai sim achar a position Z do chao Bom isto n funciona pois meu mapa F11 não é modificado e sim um script que cria um novo F11 e ele oculta o original não substitui a imagem original ! Link to comment
raynner Posted March 17, 2020 Author Share Posted March 17, 2020 Algum moderador move para lixeira vou perguntar lá no gringo pq esse problema é meio avançado acredito que o pessoal aqui não vai conseguir me ajudar agradeço ai a todos Link to comment
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