Öncelikle marker ve blip farkını açıklayayım.
* Marker oyun içinde gördüğünüz kırmızı, mor küçük dairesel alanlardır. Buralarda "e" tuşu (veyahut atanan herhangi bir tuş ile) etkileşime girilip scriptler kullanılabilir.
* Blip'ler ise haritada ilgili etkileşim yerlerinin simgesel olarak işaretlenmesidir.
Konu marker üzerine olduğu için örnek bir marker kodlaması paylaşacağım;
Marker'ımızı local Locations olarak tanımladıktan sonra koordinatlarını belirtmemiz gerekir.
local Locations = {
["Markers"] = {
["Lokasyon1"] = { ["x"] = -koordinat, ["y"] = -koordinat, ["z"] = koordinat, ["Info"] = "[E] ~g~Etkileşim" },
["Lokasyon2"] = { ["x"] = -koordinat, ["y"] = -koordinat, ["z"] = koordinat, ["Info"] = "[E] ~g~Etkileşim" },
["Lokasyon3"] ={ ["x"] = -koordinat, ["y"] = -koordinat, ["z"] = koordinat, ["Info"] = "[E] ~g~Etkileşim" },
["Satis"] = { ["x"] = -koordinat, ["y"] = -koordinat, ["z"] = koordinat, ["Info"] = "[E] ~g~Sat" },
["Satinalim"] = { ["x"] = -koordinat, ["y"] = -koordinat, ["z"] = koordinat, ["Info"] = "[E] ~g~Satin al" }
}
Marker lokasyonlarını belirttikten sonra karakter fonksiyonu eklememiz gerekiyor. Karakter lokasyonu ile marker lokasyonu eşleşince (üst üste, aynı konumda bulununca) Marker'ın gözükmesini istiyoruz. Ayrıca etkileşimimiz varsa bunu client dosyasında (script çalışması açısından) belirtmemiz gerekir.
Citizen.CreateThread(function()
##Haritadaki yerini göstermek için blip bilgilerini ekliyoruz.##
local Blips = Locations["Blips"]
for spot, val in pairs(Blips) do
local BlipInformation = val
local Blip = AddBlipForCoord(BlipInformation["x"], BlipInformation["y"], BlipInformation["z"])
SetBlipSprite(Blip, BlipInformation["sprite"])
SetBlipDisplay(Blip, 4)
SetBlipScale(Blip, 0.8)
SetBlipColour(Blip, 0)
SetBlipAsShortRange(Blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(BlipInformation["title"])
EndTextCommandSetBlipName(Blip)
end
Citizen.Wait(0)
##Yukarısı haritadaki blipler alakalı##
while true do
local sleep = 500
local ped = PlayerPedId()
local coords = GetEntityCoords(ped) --Karakter koordinatını coords olarak tanımlamış.
for place, v in pairs(Locations["Markers"]) do
local dstCheck = GetDistanceBetweenCoords(coords, v["x"], v["y"], v["z"], true)
if dstCheck <= 5.0 then
sleep = 5
DrawM(v["Info"], 27, v["x"], v["y"], v["z"]) --Marker çizer.
if dstCheck <= 1.5 then
if IsControlJustPressed(0, Keys["E"]) then --keyler tanımlandıysa "e" şeklinde yazılabilir.
print(place)
StartAction(place)
end
end
end
end
Citizen.Wait(sleep)
end)
Yukarıda " DrawM " function'ını açıklamamız lazım.
function Draw3DText(x, y, z, text) --İlgili marker'a 3 boyutlu text eklemek için.
local onScreen, _x, _y = World3dToScreen2d(x, y, z)
local p = GetGameplayCamCoords()
local distance = GetDistanceBetweenCoords(p.x, p.y, p.z, x, y, z, 1)
local scale = (1 / distance) * 2
local fov = (1 / GetGameplayCamFov()) * 100
local scale = scale * fov
if onScreen then
SetTextScale(0.0*scale, 0.35*scale)
SetTextFont(0)
SetTextProportional(1)
SetTextColour(255, 255, 255, 255)
SetTextDropshadow(0, 0, 0, 0, 255)
SetTextEdge(2, 0, 0, 0, 150)
SetTextDropShadow()
SetTextOutline()
SetTextEntry("STRING")
SetTextCentre(1)
AddTextComponentString(text)
DrawText(_x,_y)
end
end
function DrawM(hint, type, x, y, z) --DrawM function açılımı
ESX.Game.Utils.DrawText3D({x = x, y = y, z = z + 1.0}, hint, 0.4)
DrawMarker(type, x, y, z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, 2.0, 2.0, 2.0, 255, 255, 255, 100, false, true, 2, false, false, false, false)
end
Eğer marker'ları sadece belirli job sahiplerinin görmesini istiyorsanız;
if ESX.PlayerData.job and ESX.PlayerData.job.name == 'meslek grubu' then --Bu kısım meslek grubuyla eşleştirir marker'ı.
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed)
şeklinde "local olarak player Ped ile koordinatların(coords) tanımlarının üstüne eklemeniz gerekir. Benim yazdığım yazıda ise bu kısım (((##Yukarısı haritadaki blipler alakalı## ))) hemen altında bulunuyor. İf seçeneğini eklediğinizde eğer belirlediğiniz job grubuyla karakterin job'ı eşleşirse (aynıysa) Function yani script başlayacaktır.
Umarım açıklayıcı olabilmişimdir. Durum açısından öğretici olmak istedim ki insanlar kendileri bir şeyler yazıp ekleyebilsin, hazırcı olmasınlar diye.