İçeriğe geç
CXGdocs.KILAVUZLAR
Mağazaya dön
Cxg gtfatCXG-GTFAT'ı diğer kaynaklarla entegre etme
CXG DOCUMENTATION

CXG-GTFAT'ı diğer kaynaklarla entegre etme

bridge/*.lua dosyaları izinleri, kalıcılığı, bildirimleri, istasyonları ve görünüm biçimlerini uyarlamak için düzenlenebilir noktalardır. Menü yamaları belirli sürümlere yönelik elle yapılan değişikliklerdir; kaynak kurulum sırasında başka kaynakları değiştirmez.

Görünüm menüleri

Aşağıdaki depolar ve sürümler için yamalar hazırlanmıştır:

MenüKaynak sürümüEk işlem
illenium-appearance1b003ec169b15f145d519438ba7c6454bf746f27Bileşen kayıt Lua yamasını uygulayın.
fivem-appearanceb06da32881ed49042909b38a778c10dd9bd9eaedYamayı uygulayın ve oyunun TypeScript bundle'ını build:game akışıyla yeniden oluşturun.
qb-clothing8cca4009dd473ab30c30e443ecad50830b816ed7Skin ve kombin kayıt sınırlarına yamayı uygulayın.
esx_skin / skinchangerfe59ca0bd6da59e2ec6eb4a8d06ece312e96ae7aYama, esx_core deposunun kök dizinine göredir.

Paketteki integrations klasöründe illenium-appearance.patch, fivem-appearance.patch, qb-clothing.patch ve skinchanger.patch dosyaları bulunur. Otomatik uygulanmazlar. Menünün geliştirme checkout'unda uygulamadan önce uygun yamayı kontrol edin:

Kod
git apply --check /ruta/al/parche-correcto.patch
git apply /ruta/al/parche-correcto.patch

Kontrol başarısız olursa durun ve değişikliği kurulu sürüme uyarlayın; yamayı zorla uygulamayın. Fork'lar ve daha yeni sürümler farklı olabilir. fivem-appearance yaması, menünün yönergelerine göre build:game akışıyla bundle'ın yeniden oluşturulmasını gerektirir. Bu yamalar tüm sürümleri onaylamaz ve sunucuda test etmenin yerini tutmaz.

Kayıt sırasında teknik decal temizlenir, böylece menü bunu oyuncunun normal seçimi olarak kaydetmez. Kendi görünüm tablosu olan menüler temizleme işlevini kayıt noktasında çağırmalıdır. Ağırlık kombinlerden ayrı saklanır.

Özel görünüm kaydetme

İstemci export'u SanitizeAppearance, görünümün bir kopyasını döndürür. Dahil edilen biçimler components, qb ve esx'tir:

Kod
local appearanceCopy = exports['CXG_GTFAT']:SanitizeAppearance(
    ped,
    appearance,
    'components'
)

GuardarApariencia(appearanceCopy)

GuardarApariencia örnek bir çağrıdır; menünüzün kayıt işleviyle değiştirin. components, bileşen dizisini veya components özelliği bulunan bir nesneyi kabul eder; her bileşen component_id, drawable, texture ve isteğe bağlı palette kullanır. qb biçiminde decals alanı item ve texture içerir; esx decals_1 ve decals_2 kullanır. Export derin bir kopya döndürür, diğer alanları korur ve ped'i geçici olarak değiştirmez. Biçim adaptörü başarısız olursa veya biçim tanınmazsa değiştirilmemiş kopyayı döndürüp tanılama kaydı oluşturur.

Önizleme ped'i kaydetme

Menü karakterden ayrı bir önizleme ped'i kullanıyorsa etkin karakterin önizlemesini kaydedin. Varlığı silmeden önce kaydı kaldırın:

Kod
local previewPed = ObtenerPreviewActual()

if previewPed and DoesEntityExist(previewPed) then
    exports['CXG_GTFAT']:RegisterPreviewPed(previewPed)
end

-- Al cerrar o cancelar el menú, antes de eliminar el ped:
exports['CXG_GTFAT']:UnregisterPreviewPed(previewPed)
EliminarPreview(previewPed)

ObtenerPreviewActual ve EliminarPreview örnek çağrılardır; menünüzün işlevleriyle değiştirin. Yalnızca etkin karakterin önizlemesini kaydedin; dünya ped'lerini veya başka karakterlerin önizlemelerini kaydetmeyin. Alternatif olarak Config.GetPreviewPed değerini mevcut ped'i veya nil döndürecek biçimde ayarlayın. RefreshAppearance(previewPed) zaten yönetilen bir ped'in yeniden değerlendirilmesini ister; tek başına Fat'ı etkinleştirmez.

Sunucu kaynakları için export'lar

Sunucu export'ları diğer sunucu kaynakları için ayrıcalıklı API'lerdir. İstemcinin çağırabileceği bir event üzerinden doğrudan aktarmayın.

Kod
local playerSource = source -- ID del jugador en el servidor
local kg, err = exports['CXG_GTFAT']:GetWeight(playerSource)
if kg == nil then
    print('No hay un peso confirmado:', err)
end

local appliedKg, setError = exports['CXG_GTFAT']:SetWeight(playerSource, 92.5)
if appliedKg == nil then
    print('No se pudo fijar el peso:', setError)
end

local addedKg, addError = exports['CXG_GTFAT']:AddWeight(playerSource, -2.0)
if addedKg == nil then
    print('No se pudo sumar peso:', addError)
end

local resetKg, resetError = exports['CXG_GTFAT']:ResetWeight(playerSource)
if resetKg == nil then
    print('No se pudo restablecer el peso:', resetError)
end

source argümanı istemciden gelen bir değer değil, sunucudaki oyuncu ID'sidir. Tüm değerler kg cinsindendir. GetWeight ağırlığı ya da nil, error döndürür. SetWeight ve AddWeight, uygulanan normalleştirilmiş ağırlığı kg cinsinden ya da nil, error döndürür; SetWeight aralık dışı değerleri reddeder ve en yakın adıma yuvarlar, eşitlikte yukarı yuvarlar. AddWeight negatif artış kabul eder. ResetWeight, defaultKg değerini yazar ve uygulanan ağırlığı kg olarak döndürür; saklanan kaydı silmez.

Başka bir sunucu kaynağından oyuncunun arayüzünü açmak için:

Kod
local playerSource = source -- ID del jugador en el servidor
local opened, err = exports['CXG_GTFAT']:OpenWeightUI(playerSource)
if not opened then
    print('No se pudo abrir la báscula:', err)
end

İkinci argüman olarak isteğe bağlı istasyon ID'si verilebilir: OpenWeightUI(source, 'gimnasio'). İstasyon belirtilmezse, komut kaydı kapalı olsa bile komutların erişim politikası uygulanır. true sonucu yetkinin ve açma isteğinin gönderildiğini doğrular; istemcinin arayüzü çizdiğini doğrulamaz.

Sunucu export'ları

ExportKullanım
GetWeight(source)kg veya nil, error döndürür.
SetWeight(source, kg)Doğrulanmış ağırlığı ayarlar; uygulanan kg değerini veya nil, error döndürür.
AddWeight(source, deltaKg)Fark ekler; uygulanan kg değerini veya nil, error döndürür.
ResetWeight(source)Yapılandırılmış başlangıç ağırlığını kaydeder ve kg veya nil, error döndürür.
GetWeightSettings()Etkin sınırların kopyasını döndürür.
OpenWeightUI(source, stationId?)Geçerli politikaya göre terazinin açılmasını ister.
RefreshCharacter(source)Framework istenen karaktere geçtikten sonra kimlik ve ağırlığı yeniden yükler.
ReconcileStorage(source)Adaptör önceki yazmaları doğrulayabiliyorsa belirsiz depolama durumunu uzlaştırır.

RefreshCharacter, çoklu karakter entegrasyonlarında isteğe bağlıdır; framework doğru kimliği kullanılabilir hale getirdikten sonra çağırın. Kaynak Qbox'a otomatik bağlanmaz.

Hatalar not_ready, invalid_source, player_unavailable, character_unavailable, invalid_weight, out_of_range, permission_denied, context_denied, busy, storage_failed, storage_timeout, storage_unknown veya not_synced olabilir. Depolama hatasını onaylanmış ağırlık olarak kabul etmeyin; storage_timeout veya storage_unknown sonucundan sonra yazmayı otomatik tekrarlamayın.

İstemci export'ları

Kod
local kg, err = exports['CXG_GTFAT']:GetWeight()
local settings = exports['CXG_GTFAT']:GetWeightSettings()
local isOpen = exports['CXG_GTFAT']:IsWeightUIOpen()
local closed = exports['CXG_GTFAT']:CloseWeightUI()
local status, statusError = exports['CXG_GTFAT']:GetFatStatus()
local reserved, reservedError = exports['CXG_GTFAT']:GetReservedDecals(PlayerPedId())

GetWeight, sunucudan doğrulanmış değer gelene kadar nil, 'not_synced' döndürür. GetFatStatus(ped?) ve GetReservedDecals(ped) salt okunur bilgi verir; geometrinin çizildiğini kanıtlamaz. GetReservedDecals, menülerde ayrılmış decal'leri gizlemek için kullanılabilir. RefreshAppearance(previewPed?) yalnızca yönetilen oyuncu görünümünü veya kaydedilmiş önizlemeyi yeniler.

RegisterPreviewPed(ped) ve UnregisterPreviewPed(ped), menünün önizleme varlığını seçiciye aktarmasını sağlar. Kaydı yalnızca ped'i kaydeden kaynak kaldırabilir. Kaydeden kaynak durduğunda önizlemeler temizlenir.

SanitizeAppearance(ped, appearance, format) görünümün kopyasını döndürür; nil, error başarısızlık göstergesi değildir. RegisterPreviewPed ve UnregisterPreviewPed, işlem tamamlandığında true, ped kaydedilemediğinde veya kaldırılamadığında false döndürür.

Düzenlenebilir bridge dosyaları

DosyaUyarlama
bridge/server.luaCanAccess, kimlik, ağırlık yükleme/kaydetme ve sunucu hook'ları.
bridge/client.luaÖnizleme ped'i, bildirimler ve ağırlık/arayüz değişikliği hook'ları.
bridge/interaction.luaİstasyonları target'a kaydetme veya TextUI'ı değiştirme.
bridge/appearance.luaÖzel görünüm biçiminde decal okuma/yazma.

Varsayılan olarak CanAccess yalnızca ace ve everyone'ı tanır. jobs, groups veya custom için gerçek sunucu API'siyle denetim uygulayın ve erişim verildiğinde tam olarak true döndürün. İstisnalar ve diğer değerler erişimi reddeder. job, group ve custom politika alanlarını adaptörünüz yorumlar.

Özel bir depolama sağlayıcısı LoadWeight(characterId, context, done), SaveWeight(characterId, kg, context, done) imzalarını ve belirsiz yazmaları uzlaştırması gerekiyorsa ReconcileWeight(characterId, context, done) imzasını uygular. Yükleme done(true, kg) (veri yoksa kg = nil kullanın) veya done(false, 'storage_failed') çağırır. Kaydetme yalnızca doğrulandıktan sonra done(true), aksi halde done(false, 'storage_failed') çağırır. Uzlaştırma, önceki yazma sonradan tamamlanamayacaksa done(true, true), bunu garanti edemiyorsa done(false, 'storage_unknown') çağırır. Gerçekten asenkron kayıtlar için AsyncStorage = true ayarlayın; callback beklemeyi destekleyen bir FiveM bağlamında tamamlanmalıdır. API zaman aşımından önce 10 saniyeye kadar bekler. storage_timeout sonrasında otomatik tekrar denemeyin; önce önceki yazmanın daha sonra uygulanmayacağını garanti eden bir sağlayıcıyla uzlaştırın. Yazmayı başlatmadan veya sıraya koymadan dönen bir sağlayıcıyı asenkron olarak işaretlemeyin.

OnWeightChanged, OnCharacterChanged, OnUIOpened, OnUIClosed ve Log hook'ları değişiklikleri gözlemlemek veya kaydetmek içindir. Hook'lar erişim vermez ve onaylanmış işlemleri geri almaz.

Etkinleştirmeden önce kontroller

Yamalar ve adaptörler sunucudaki gerçek kaynak ve sürümlerle doğrulanmalıdır. Entegrasyonu oyuncular için açmadan önce:

  1. Erkek ve kadın freemode karakterleriyle Normal/Fat geçişini tekrar deneyin.
  2. Fat etkin durumdayken görünüm ve kombini kaydedip yeniden yükleyin. Teknik decal'in normal seçim olarak kaydedilmediğini ve ağırlığın kombinle ayrı kaldığını doğrulayın.
  3. Karakter başına kalıcılık etkinken kaynağı yeniden başlatıp tekrar bağlanın. Aynı karakterin ağırlığını geri aldığını, başka karakterin bu ağırlığı devralmadığını doğrulayın.
  4. Kaydedilmiş önizlemeyle görünüm menüsünü açıp etkin karakteri gösterdiğini doğrulayın. Menü iptal edilir veya kapatılırken varlığı silmeden önce kaydı kaldırın.

Menü, framework ve kıyafet kombinasyonunuzu doğrulamak için bu adımlar sunucunuzda tamamlanmalıdır. Bir yamanın mevcut olması tek başına sonucu doğrulamaz.

CXG · Dokümantasyonİyi bir temel. Sonsuz olasılıklar.
CXG-GTFAT'ı diğer kaynaklarla entegre etme · cxg-gtfat · CXG Docs