Agency Docs
QBESXStandalone

Agency-Phone Özel Uygulamalar

Artık AgencyOS27 ile: telefonu zaten olan herkese ücretsiz güncelleme.

v27.1.2Ücretli8 Sayfalar

🧩 Agency-Phone için özel bir uygulama geliştirin

Telefona bir uygulama eklemenin iki yolu vardır. Size uygun olanı seçin:

YöntemŞunun için en iyisi:Dokunduğunuz her şey
A. SDK (harici kaynak)Kendi simgeleriyle uygulama ekleyen satıcılar ve scriptlerYalnızca kendi resource'unuz. agency-phone üzerinde sıfır düzenleme.
B. Drop-in (agency-phone içinde)Telefon UI içine yerel bir ekran ekleyen sunucu sahiplericonfig.lua + apps/ (ekran için + html/js)

Bir uygulamayı başka sunuculara dağıtıyorsanız şunu kullanın: Yöntem A. Bizden herhangi bir kaynak kod gerektirmez ve güncellemeler boyunca çalışmaya devam eder.

A SDK: Kendi resource'unuzdan bir uygulama kaydedin

agency-phone, herhangi bir kaynağın çalışma zamanında telefonun ana ekranına kendi simgesiyle bir uygulama yerleştirmesine olanak tanıyan exportlar sunar. Uygulamanızın arayüzü kendi kaynağınızda yer alır; telefon simgeyi gösterir ve oyuncu dokunduğunda kontrolü size devreder. agency-phone üzerinde değişiklik yok, kilitsiz derleme yok.

Minimal örnek

-- client side of YOUR resource
CreateThread(function()
    Wait(1500) -- let agency-phone boot
    exports['agency-phone']:RegisterApp({
        id        = 'myshop',
        label     = 'My Shop',
        icon      = 'fa-solid fa-cart-shopping', -- FontAwesome 6 class
        -- image  = 'https://cfx-nui-myresource/icon.png', -- or your own image instead
        color     = '#ff9500',
        colorDark = '#e08600',
    })
end)

-- fired when the player taps your icon on the phone
AddEventHandler('agency-phone:client:openApp', function(appId)
    if appId ~= 'myshop' then return end
    exports['agency-phone']:ClosePhone()
    -- open your own NUI here
end)

RegisterApp yapılandırması

AlanTürGerekliAçıklama
idstringevetBenzersiz kimlik, küçük harf, boşluksuz.
labelstringevetSimgenin altında gösterilen ad.
iconstringhayırFontAwesome 6 sınıfı. Şu durumda yok sayılır: image ayarlandı.
imagestringhayırÖzel simge görseli, örn. https://cfx-nui-<resource>/icon.png.
color / colorDarkstringhayırSimgenin arkasındaki gradyan (hex).
slotsayıhayırAna ekran konumu. Belirtilmezse otomatik olarak yerleştirilir.
storeDescstringhayırUygulamanızın Mağaza sayfasındaki kısa açıklama. Tanımlanmadığında etikete geri döner.

SDK export'ları (client)

Dışa aktarAçıklama
RegisterApp(config)Uygulamanızı ekleyin veya güncelleyin. Döndürür: true, veya false, err.
UnregisterApp(id)Uygulamanızı kaldırın. Resource'unuz durduğunda da otomatik olarak gerçekleşir.
GetRegisteredApps()Kayıtlı tüm harici uygulamaların tablosu.
ClosePhone()Telefonu kapatır, örn. kendi NUI'nizi açmadan önce.

Dokunma olayı

Oyuncu simgenize dokunduğunda, agency-phone istemcide bunların her ikisini de tetikler. Hangisini tercih ederseniz onu kullanın:

EventArgümanlar
agency-phone:client:openAppappId (kimliğinize göre filtreleyin)
agency-phone:client:openApp:<yourId>yok (zaten uygulamanızla kapsamlandırılmış)

Ekle dependency 'agency-phone' sizin fxmanifest.lua böylece başlatma sırası doğru olur.

B Doğrudan entegre, telefon içinde yerel bir ekran

Telefonun kendisi tarafından işlenen bir ekran için (sizin resource'unuz değil). Bu işlem agency-phone'un kendi dosyalarını düzenler.

AdımDosyaEscrow sürümünde düzenlenebilir mi?
1. Şurada uygulama girişi: AgencyConfig.Appsconfig.lua✓ evet
2. RegisterNUICallback mantıkapps/<id>_client.lua (+ _server.lua)✓ evet
3. Ekran <div id="app-<id>">html/index.html✗ şifrelenmiş
4. case '<id>': içinde openApp() + yükleyicihtml/js/phone.js✗ şifrelenmiş

Adım 3 ve 4 escrow ile şifrelenmiş dosyalarda yer alır, bu nedenle yerel bir ekran için kaynak / kilitli olmayan (unlocked) bir derleme gerekir. Yalnızca escrow sürümüne sahipseniz şunu kullanın: Yöntem A yerine (ekranınız kendi resource'unuz içinde yer alır). Resource içindeki dosyalara referans verin: apps/testapp_client.lua ve apps/dispatch_client.lua.

📋 Diğer telefon exportları

Client

Dışa aktarDönen DeğerlerAçıklama
IsPhoneOpen()booleanTelefon şu anda açık.
IsPhonePoweredOn()booleanCihaz açıldı.
HasPhone()booleanOyuncu bir telefon eşyasına sahiptir.
HasCarrierContract()booleanAktif eSIM / sözleşme.
GetPhoneData()tabloTelefon durumunun anlık görüntüsü.
PhoneNotification(title, text, icon, color, timeout, acceptIcon, denyIcon)geçersizTelefon içi bildirim.
StartCall(contact)geçersizAra { name, number }.
StartAgencyPayCheckout(opts)geçersizAgencyPay ödeme (aşağıya bakın).

Sunucu

Dışa aktarAçıklama
SendMail(identifier, mailData)Bir oyuncuya (çevrim içi veya çevrim dışı) posta teslim edin.
AddChirp(data)Pulse sosyal akışında bir mesaj paylaşın.
VerifyAgencyPayCharge(source, requestId, minAmount)Malları teslim etmeden önce sunucuda ödenmiş bir AgencyPay checkout işlemini onaylayın (aşağıya bakın).

⇄ NUI ↔ Lua köprüsü (Yöntem B)

YönJS tarafıLua tarafı
JS → LuafetchNUI('callbackName', data)RegisterNUICallback('callbackName', fn)
Lua → JSdinleyin action içinde window.onmessageSendNUIMessage({ action = '...' })

💳 AgencyPay ödeme

Oyuncunun cüzdanından herhangi bir kaynaktan ücret tahsil edin.

exports['agency-phone']:StartAgencyPayCheckout({
    merchant = 'My Shop', title = 'Agency Pay', subtitle = 'Checkout',
    label = 'Premium Coffee', amount = 24.50,
    icon = 'fa-solid fa-mug-hot', accent = '#ff9f0a',
    clientEvent = 'myshop:client:agencyPayResult',
    serverEvent = 'myshop:server:agencyPayResult',
    metadata = { orderId = 'order_2048' },
})

RegisterNetEvent('myshop:client:agencyPayResult', function(result)
    if result.status == 'paid' then
        -- deliver the goods
    end
end)

Sonuç payload'ı şunları içerir: status (paid / cancelled / failed), amount, cardId, balance ve sizin metadata.

A paid istemciden resource'unuza ulaşan sonuç tek başına hiçbir şeyi kanıtlamaz. Kendi id kime StartAgencyPayCheckout ve çağırın exports['agency-phone']:VerifyAgencyPayCharge(source, id, amount) herhangi bir şey vermeden önce server tarafında. Şunu döndürür: true ve tutarı yalnızca bu oyuncu ilgili ödemeyi son 60 saniye içinde yaptıysa uygular ve bakiyeyi kullanır, böylece aynı ödeme iki kez talep edilemez.

🐛 Sorun Giderme

BelirtiDüzeltme
Simge görünmüyor (SDK)agency-phone paketini en son Keymaster derlemesine güncelleyin, Wait(1500) önce RegisterApp, ve şunu ekleyin: dependency 'agency-phone' manifest dosyanıza.
Dokunmak hiçbir şey yapmaz (SDK)Sizin agency-phone:client:openApp handler, şununla eşleşmelidir: id birebir aynı (büyük-küçük harfe duyarlı).
Özel görsel görünmüyorTam bir NUI URL'si kullanın https://cfx-nui-<your-resource>/path/icon.png ve dosyayı şurada listeleyin: files { } manifest dosyanızda.
Simge görünmüyor (drop-in)enabled = true ve installed = true yapılandırma girdisinde.

Sorularınız mı var veya yardıma mı ihtiyacınız var? Katılın: Agency Scripts Discord.

Bu sayfadan sonra hâlâ takıldın mı? Buradan desteğimiz devralıyor.