bs_core üzerine bir kaynak yazma
Küçük bir tane yapalım: 10 dakikada bir 50 nakit ve biraz XP karşılığında kullanabileceğiniz bir “radyo kulesi”. Uydurma, ama kullandığı parçalar gerçek.
Klasör
Section titled “Klasör”resources/[beyond]/bs_radiotower/├── fxmanifest.lua├── config/config.lua├── client/cl_main.lua└── server/sv_main.luaÖnüne bs_ ekleyin. FiveM kaynak adları tek bir global ad alanıdır, radio adlı bir kaynak er ya da geç birinin betiğiyle çakışır.
fxmanifest.lua
Section titled “fxmanifest.lua”fx_version 'cerulean'game 'gta5'lua54 'yes'
name 'bs_radiotower'description 'BeyondSurvival - radio tower example'
shared_scripts { '@bs_core/shared/sh_bridge.lua', -- BSB callbacks + BSB.RegisterCommand 'config/config.lua',}client_scripts { 'client/cl_main.lua' }server_scripts { 'server/sv_main.lua' }
dependencies { 'bs_core' }
-- live overrides from the F1 console, AFTER your config filesshared_script '@bs_config/shared/apply.lua'-- crash breadcrumbsclient_script '@bs_core/shared/sh_crumbs.lua'Sonra server.cfg’ye ensure bs_radiotower ekleyin, bs_core’dan sonra ve çağırdığınız her şeyden sonra.
config/config.lua
Section titled “config/config.lua”RadioTower = {}RadioTower.Settings = { reward = 50, xp = 20, cooldown = 600, -- seconds pos = vector3(0.0, 0.0, 0.0), range = 3.0,}Kaynağınızın adıyla bir global tablo. F1 uygulama yardımcısının yamaladığı budur (Yapılandırma uygulama yardımcısı sayfasına bakın).
server/sv_main.lua
Section titled “server/sv_main.lua”local last = {} -- [charId] = os.time()
BSB.RegisterCallback('radiotower:use', function(src) local p = exports.bs_core:GetPlayerSummary(src) if not p then return { ok = false, error = 'Not loaded.' } end
-- never trust the client: check distance here too local pos = GetEntityCoords(GetPlayerPed(src)) if #(pos - RadioTower.Settings.pos) > RadioTower.Settings.range + 2.0 then return { ok = false, error = 'Too far.' } end
local now = os.time() if last[p.charId] and now - last[p.charId] < RadioTower.Settings.cooldown then return { ok = false, error = 'Nothing on the air yet.' } end last[p.charId] = now
exports.bs_core:AddMoney(src, 'cash', RadioTower.Settings.reward, 'radiotower') exports.bs_core:AddXP(src, RadioTower.Settings.xp, 'radiotower') return { ok = true }end)Para ve XP yalnızca bs_core export’larıyla. Veritabanı sütunlarına asla kendiniz yazmayın.
client/cl_main.lua
Section titled “client/cl_main.lua”local function use() if not exports.bs_core:IsLoaded() then return end Crumb('radiotower', 'use') local res = BSB.Await('radiotower:use', 5000) if not res then return end -- timed out, server side not running TriggerEvent('bs:ui:notify', { type = res.ok and 'success' or 'error', message = res.ok and 'You picked up a signal.' or res.error, })end
RegisterCommand('radiotower', use, false)Gerçek bir etkileşim için komut yerine bs_interactions’a bir seçenek kaydedersiniz (ALT noktası), bs_recycler veya bs_mining’in nasıl yaptığına bakın.
Oyuncuları ışınlıyorsanız
Section titled “Oyuncuları ışınlıyorsanız”Sunucuda onları taşımadan önce exports.bs_guard:Allow(src, 'teleport', 3000) çağırın, yoksa bs_guard her kullanımı işaretler.
Tuzaklar (hepsi başımıza geldi)
Section titled “Tuzaklar (hepsi başımıza geldi)”- Başka bir kaynağın global’leri görünmez. bs_admin içindeki
Items.Definitionsboş bir tablodur, bs_inventory’ninki değil. Export kullanın. - Fonksiyonlar export’lardan geçmez. Başka bir kaynağın export’una callback fonksiyonu geçirmek çalışmaz. BSB’nin export değil dahil edilen bir dosya olmasının nedeni budur.
- Başkasının çağırdığı bir export içinde
Waitkullanmayın. Kaynağınızın çalışma ortamında çağıranın iş parçacığında çalışır ve hata fırlatır. bs_radial’da bu hata vardı,BSB.Radialbu yüzden var. local a, b = x and f() or y- Lua buradaf()’in yalnızca ilk dönüşünü tutar. Bunu if ile yazın.- Bildiriminden önce kullanılan bir yerel, global nil’dir.
luac5.4 -l file.lua | grep _ENVbunları bulur. GetEntityModel’iDoesEntityExistile koruyun. Ölü bir tutamaçta oyun istemcisini sert çökertir.- Boştayken her karede NUI mesajı yok. Değişiklikte gönderin.
- Her
bs:ui:opened, her çıkış yolunda birbs:ui:closedgerektirir, bkz. UI/NUI kuralları.
bs19.org · Privacy · Terms · Cookie settings
Cookies and outside content
The site only needs two essential cookies to keep you logged in and protect forms. Videos and streams from YouTube and Twitch load from their servers, which can set their own cookies, so they stay off until you say yes. Nothing is pre-ticked and you can change your mind any time with "Cookie settings" at the bottom of every page. Details.
Questions about the server, the framework or the site? A real person reads this, usually within a day.