$ ABD Doları
  • $ ABD Doları
  • € AVRO
  • £ GBP
  • $ Avustralya Doları
  • R$ BRL
  • İsviçre Frangı İsviçre Frangı
  • ¥ Japon Yeni
Envanter ve Ağırlık Ayarlaması: items.lua'dan Meta Verilere

Envanter ve Ağırlık Ayarlaması: items.lua'dan Meta Verilere

Özetle;: Bu rehber size üretime hazır ağırlık\/slot ön ayarları, eşya bütçe tabloları, kopyala‑yapıştır items.lua tanımlar (ESX\/QBCore\/ox_inventory) ve popüler envanterler arasında güvenli geçiş planları sunar. Aşırı yüklenme dramını ortadan kaldırmak, eşya şişkinliğini durdurmak ve ekonominizi tutarlı tutmak için kullanın.


Envanter ayarının önemi

İstikrarlı bir RP ekonomisi kıtlık, sürtünme ve anlamlı seçimlere dayanır. Envanter kuralları (slotlar, ağırlık, istif limitleri, dayanıklılık\/seri numarası gibi meta veriler) bu seçimleri gerçek kılan kaldıraçlardır. Herkes her şeyi taşıyabilse, fiyatlar çöker ve döngüler bozulur. Önce envanteri ayarlayın, ardından fiyatlarınızı, ödemelerinizi ve gider havuzlarınızı tekrarlayın. Daha geniş ekonomi için, temel prensibimize bakın: Dengeli bir GTA RP Ekonomisi Tasarlamak: Fiyatlar, Gider Havuzları, İlerleme.


Modeller: Slot vs. Ağırlık vs. Hibrit

Sadece slot

  • Basit bilişsel model; her eşya = 1 slot veya boyut sınıflarına göre tanımlanır.
  • Ağır ve hafif yığınları ayırt etmede zayıf; çok sayıda küçük yüksek değerli eşya ile istismar edilir.

Sadece ağırlık

  • Her eşyanın bir ağırlığı vardır (genellikle gram). Oyuncuların maxWeight her konteyner için. Güçlü gerçekçilik; düşünülmüş varsayılanlar gerektirir.

Hibrit (önerilen)

  • Küresel ağırlık sınırı Ve slot sınırı. Hem mikro eşya hem de mega eşya istismarlarını önler. RP için en iyi çalışır.

İpucu: Sayıları insan tarafından okunabilir tutun. Gram cinsinden modelliyorsanız, tam sayılar kullanın (örneğin, water = 500g) ve oyuncu limitlerini yuvarlayın (örneğin, maxWeight = 120,000).


Varsayılan Ön Ayarlar (kopyala ve uyarla)

Aşağıda savaşta test edilmiş başlangıç noktaları. Bir haftalık şehir içi telemetriden sonra ±10–20% ayarlayın.

Oyuncu Envanteri (üzerinde taşınan)

Sunucu ÖlçeğiÖrnekMaksimum Ağırlık (g)YuvalarNotlar
Yeni/Küçük (≤40 pop)Hibrit80,00030Daha hızlı uyum; daha az erken zorluk.
Orta (40–150)Hibrit120,00035Genel RP için dengeli; farklı işler için uygun.
Yüksek Pop (150+)Hibrit150,00032İstiflemeyi sınırlamak için slotları daralt; ağırlığı adil tut.

Araçlar (yaygın varsayılanlar)

KonteynerMaksimum Ağırlık (g)YuvalarGerekçe
Torpidodan10,0005Küçük saklama alanı, planlamayı teşvik eder.
Sedan Bagajı80,00020Temel seviye.
SUV/Van Bagajı120,00025Ticari araçlar anlamlı hale gelir.
Kamyonet (ticari)180,00028Lojistik oynanışı.
Motosiklet Depolama8,0003Minimal cebe sığdırma.

Saklama Alanları ve Özel Kaplar

TipMaksimum Ağırlık (g)YuvalarNotlar
Ev Saklama Alanı (Seviye 1/2/3)120k / 180k / 240k40 / 60 / 80Ev yükseltmelerini teşvik eder.
İş Kilidi80,00020Devretme istismarlarını önleyin.
Kanıt Dolabı240,000120Admin/LEO kolaylığı; denetim günlüğü gerekli.

Öğe Ağırlık Bütçeleri (sınıfa göre)

Tutarlı ağırlıklar atamak için bunu kullanın. Düşünün göreceli sürtünme gerçekçilik değil.

SınıfÖrneklerÖnerilen Ağırlık (g)
Çok HafifKilit açma bıçağı, USB, SIM5–50
IşıkTabanca mermisi (10), bandaj, atıştırmalık100–250
OrtaSu şişesi, burger, onarım seti400–800
AğırTüfek mermi kutusu (30), oksijen tüpü, malzeme sandığı1,500–4,000
Çok AğırSilah sandığı, para çantası (işaretli)6,000–12,000

Mühimmat: Bütçe birim başına birleştirilmiş yığınlar için (örneğin, 9mm = 15g her biri → 30 mermi ≈ 450g) veya kutular olarak temsil edin (örneğin, 9mm box (30) = 500g).


Yığın Boyutları ve Yuva Stratejisi

  • Emtialar (yiyecek, ilaç): sıkıcılığı azaltmak için 5-20 yığın.
  • Mühimmat: tabancalar için 30-60; kutulanmış tüfekler için 60-120.
  • Üretim Malzemeleri: 100–250 yığın; ağırlığı anlamlı tutun.
  • Silahlar: stack = 1, benzersiz meta veriler (seri, dayanıklılık).

Meta Veri Kalıpları (dayanıklılık, seri numaraları, ekler, kalite)

Küçük bir şema gibi meta verileri tasarlayın. Alanları minimum, tipli ve doğrulanmış tutun.

Kanonik Meta Veri Şeması (öneri)

{
 "serial": "string", // weapon unique id
 "owner": "citizenid|identifier",
 "durability": 0.0, // 0.0–1.0; decay per use/time
 "quality": 100, // 0–100; repairable threshold 25
 "ammo": 0, // integer; weapon mags
 "tint": 0, // integer (game tint index)
 "attachments": ["flashlight", "scope"],
 "expiry": 0, // unix timestamp; perishable items
 "notes": "" // small text; avoid bloat
}

Dayanıklılık ve Bozulma

  • Silahlar: decay 0.5–1.5% per magazine; jam chance <5% below 20% quality.
  • Aletler (lockpicks, drill): consume % on use; break at 0.
  • Bozulabilirler: expiry kullanımda kontrol; bayat ceza veya engelleme.

Güvenlik ve Performans

  • Meta verileri sunucu tarafında doğrulayın; istemci yazımlarına asla güvenmeyin.
  • Meta veri boyutunu sınırla (örn. <512 bayt). Büyük veri yığınları kaydetme/yükleme ve ağ yüklerini olumsuz etkiler.
  • Ekler ve tonlar için numaralandırmaları kullanın.

ESX (es_extended) örneği

-- esx items.lua (example) — weight in grams; negative weight means not counted in legacy modes
['water'] = { label = 'Water Bottle', weight = 500, stack = true, close = true, description = 'Stay hydrated.' },
['bandage'] = { label = 'Bandage', weight = 150, stack = true, close = true },
['lockpick'] = { label = 'Lockpick', weight = 50, stack = true, close = true },
['pistol_ammo'] = { label = 'Pistol Ammo (30)', weight = 450, stack = true, close = true, description = '9mm, box of 30.' },
['weapon_pistol'] = { label = 'Pistol', weight = 1500, stack = false, close = true, degrade = 0.01, unique = true },

Hala kullanan ESX varyantları için limit yerine ağırlık, ayarla limit = -1 (sınırsız) ve ağırlık yoluyla küresel olarak ekonomi dengesini değiştirin.

QBCore (shared/items.lua) örneği

-- qb-core shared/items.lua
['water'] = { name = 'water', label = 'Water Bottle', weight = 500, type = 'item', image = 'water.png', unique = false, useable = true, shouldClose = true, description = 'Stay hydrated.',
 combinable = nil },
['bandage'] = { name = 'bandage', label = 'Bandage', weight = 150, type = 'item', image = 'bandage.png', unique = false, useable = true, shouldClose = true },
['lockpick'] = { name = 'lockpick', label = 'Lockpick', weight = 50, type = 'item', image = 'lockpick.png', unique = false, useable = true, shouldClose = true },
['pistol_ammo'] = { name = 'pistol_ammo', label = 'Pistol Ammo (30)', weight = 450, type = 'item', image = 'pistol_ammo.png', unique = false, useable = true, shouldClose = true },
['weapon_pistol'] = { name = 'weapon_pistol', label = 'Pistol', weight = 1500, type = 'weapon', image = 'weapon_pistol.png', unique = true, useable = false, shouldClose = true,
 info = { serial = '', durability = 1.0, ammo = 12, attachments = {} } },

ox_inventory (data/items.lua) örneği

return {
 water = {
 label = 'Water Bottle',
 weight = 500,
 stack = true,
 client = { status = { thirst = 25000 }, anim = { dict = 'mp_player_intdrink', clip = 'loop_bottle' } },
 },
 bandage = { label = 'Bandage', weight = 150, stack = true },
 lockpick = { label = 'Lockpick', weight = 50, stack = true },
 pistol_ammo = { label = 'Pistol Ammo (30)', weight = 450, stack = true },
 weapon_pistol = {
 label = 'Pistol', weight = 1500, stack = false, allowArmed = true,
 consume = 0, -- handled by durability system
 ammo = { type = 'AMMO_PISTOL', count = 12 },
 metadata = { serial = true, durability = true, attachments = true },
 },
}

öküz_envanteri zengin destekler client/server öğe tanımlarındaki davranışlar—davranışı standartlaştırmak için özel komut dosyaları yerine yerleşik olanları tercih edin.


QBCore konteyner yapılandırması (örnek)

-- qb-inventory/server/config.lua (illustrative)
Config.PlayerMaxWeight = 120000
Config.PlayerMaxSlots = 35
Config.Vehicle = {
 glovebox = { weight = 10000, slots = 5 },
 trunk = function(class)
 if class == 'sedan' then return 80000, 20 end
 if class == 'suv' or class == 'van' then return 120000, 25 end
 if class == 'truck' then return 180000, 28 end
 return 60000, 18
 end
}

ox_inventory depo kurulumu (örnek)

-- ox_inventory/server/custom/stashes.lua
lib.addstash('house_tier1', 40, 120000)
lib.addstash('house_tier2', 60, 180000)
lib.addstash('house_tier3', 80, 240000)

Taşıma Oyun Kitapları (güvenli ve geri döndürülebilir)

İlkeler

  1. Önce veritabanının anlık görüntüsünü alın. 2) Eşyaları/meta verileri değişmez betiklerle taşıyın. 3) Bir hazırlık sunucusunda yan yana çalıştırın. 4) Geri alma SQL'si sağlayın.

A) qb-inventoryox_inventory

Harita alanları

  • QB items.luaox data/items.lua (name, label, weight, stack/unique, client/server behaviors).
  • player inventory tablo: dönüştür info JSON → metadata (seri, dayanıklılık, mühimmat).

Pseudocode (Lua/SQL karışımı)

-- 1) Export QB items to a Lua table/JSON
-- 2) Generate ox items.lua entries
-- 3) Transform inventories
for item in qb_inventory_rows do
 local meta = json.decode(item.info or '{}')
 local metadata = {
 serial = meta.serial,
 durability = meta.durability or 1.0,
 ammo = meta.ammo or 0,
 attachments = meta.attachments or {},
 }
 insert_into_ox_inventory(item.name, item.amount, metadata)
end

SQL örnek (PostgreSQL/MySQL stili)

-- Backup
CREATE TABLE backup_playeritems AS SELECT * FROM playeritems;

-- Transform example for a single item family
UPDATE playeritems
SET metadata = JSON_OBJECT(
 'serial', JSON_EXTRACT(info, '$.serial'),
 'durability', COALESCE(JSON_EXTRACT(info, '$.durability'), 1.0),
 'ammo', COALESCE(JSON_EXTRACT(info, '$.ammo'), 0),
 'attachments', COALESCE(JSON_EXTRACT(info, '$.attachments'), JSON_ARRAY())
)
WHERE name IN ('weapon_pistol','weapon_pistol_mk2');

Dikkat Edilmesi Gerekenler

  • Benzersiz öğeler: zorunlu kıl stack = false; tekrarların birleşmemesini sağlayın.
  • Mühimmat sistemleri: kutulu ve gevşek mühimmat kurallarını uzlaştırın.
  • Resimler/ikonlar: eşya resimlerini ox'un adlandırmasına uyacak şekilde yeniden adlandırın.

B) ESX (sınır tabanlı) → ağırlık modeli

  1. Genel ayarla useWeight = true yapılandırmada (fork'a göre değişir).
  2. Öğe başına değiştir limit ile weight (g). Eskiden eşyalar için limit = -1, gerçekçi ağırlıklar atayın.
  3. Stok/araç sınırlarını buna göre taşıyın.

Betiklenmiş geçiş

for name, item in pairs(Items) do
 if item.limit and not item.weight then
 item.weight = estimateWeightFromClass(name)
 item.limit = nil
 end
end

C) qs-inventory / lj-inventory → QBCore/ox

  • Alan eşlemesi QB'ye benzer: infometadata.
  • Özel anahtarlar için izleyin (quality, image, createdAt. Kanonik şemaya normalleştirin.

Dengeleme İş Akışı (1 haftalık sprint)

  1. Gün 0: Ön ayarları uygula; öğeleri bütçe tablosuna taşı.
  2. 1-2. Gün: Telemetri yakalayın: ortalama taşıma ağırlığı, kullanılan yuvalar, işe göre öğe dağılımı.
  3. 3. Gün: Tighten outliers (+5–10% weight on top 5 hoarded items).
  4. 4-5. Gün: Araç rolleri: yardımcı bagajları güçlendir; torpido gözü istismarını zayıflat.
  5. Gün 6: Bozulabilirler: ekle expiry yüksek marjlı tüketim ürünleri için.
  6. 7. Gün: Yama notlarını yayınlayın; iki haftalık bir inceleme belirleyin.

Minimum Telemetri

  • % time encumbered, avg slots used, en iyi 20 öğe (adet ve toplam ağırlığa göre) ve kasa kullanım yüzdeleri.

QA Kontrol Listesi (gönderime hazır)

  • Tüm öğelerin weight, stack, ve net etiketler.
  • Silahlar unique/non-stack ve dahil et serial, durability.
  • Kapsayıcılar zorlar ikisi birden ağırlığı ve yuvaları vardır (desteklendiği yerlerde).
  • Araç sınıfları mantıklı kapasitelere karşılık gelir.
  • İlerleme ile kademelendirilmiş gizli yerler.
  • Taşınmalar yedeklendi; geri alma işlemi test edildi.
  • Meta veri boyutu sınırlı; sunucu tarafında doğrulandı.

Ağırlık Bütçesi CSV (Google E-Tablolar'a kopyala)

name,label,class,weight_g,stack,stack_size
water,Water Bottle,consumable,500,true,10
bandage,Bandage,medical,150,true,5
lockpick,Lockpick,tool,50,true,10
pistol_ammo,Pistol Ammo (30),ammo,450,true,5
weapon_pistol,Pistol,weapon,1500,false,1

Araç Kapasitesi Tablosu (CSV)

container,weight_g,slots
Glovebox,10000,5
Sedan Trunk,80000,20
SUV/Van Trunk,120000,25
Truck Trunk,180000,28
Motorcycle,8000,3

Yaygın Hatalar ve Düzeltmeler

  • Oyuncular her zaman yük altında → Reduce top‑3 ubiquitous item weights by 15%; increase player cap by 10%.
  • Mikro öğelerin sonsuz biriktirilmesi → Slot sınırı ekleyin; minimum öğe ağırlığı ayarlayın (örn. 25g).
  • Ekonomi enflasyonu stoklama yoluyla → Bozulabilir ürünler ekleyin expiry, üretim girdisi ağırlık sürtünmesi veya saklama ücretleri.
  • Veritabanı şişmesi → Meta veri anahtarlarını budayın; büyük olanlardan kaçının notes alanlar.

Sonraki adımlar

  • Yukarıdaki hibrit ön ayarları yayınlayın, ardından telemetri ile yineleyin.
  • Envanter sürtünmesini ödemeler ve fiyatlarla uyumlu hale getirin—bakınız ekonomimiz sonrası bu ayarlarla iyi eşleşen lavabolar ve ilerleme modelleri için.

Belirli bir çerçeve çatallanması veya özel bir envanter hakkında sorularınız mı var? Ayrıntıları bırakın, tam yapılandırmaları uyarlayayım.