Consumables: Kurulum
Porsiyon bazlı yiyecek ve içecek sistemini, ox_inventory ve qb-inventory eşya tanımları ve görselleriyle birlikte sunucunda çalışır hâle getir.
Başlamadan önce
OneSync'in açık olduğundan ve sunucu artifact'inin güncel olduğundan emin ol. Script framework, envanter, target ve bildirim kaynağını kendisi tespit eder; tek veritabanı tablosunu da ilk açılışta kendisi oluşturur.
Gereksinimler
| Kaynak | Gerekli | Not |
|---|---|---|
| ox_lib | Evet | Callback'ler, tuş atamaları ve diller |
| oxmysql | Evet | Yere bırakılan yiyecekleri saklar |
| ox_inventory / ps-inventory / jpr-inventory / qb-inventory | Evet | Biri yeterli, bu sırayla tespit edilir |
| qbx_core / qb-core / es_extended | İsteğe bağlı | Bu sırayla tespit edilir, hiçbiri yoksa standalone çalışır |
| ox_target / qb-target | İsteğe bağlı | Yerdeki yiyeceği incelemek ve almak için gerekli |
| okokNotify / ps-ui / ox_lib | İsteğe bağlı | Bildirimler, config'teki Notifications ayarına bak |
Envanter ve framework eşleşmeleri
qb tarzı envanterler (qb-inventory, ps-inventory, jpr-inventory) sadece qb-core ile çalışır. ESX ve standalone
sunucular ox_inventory kullanmalı. Desteklenen bir envanter yoksa kaynak No supported inventory found hatasıyla
durur.
İndirme bağlantıları ve başlatma sırası için Bağımlılıklar sayfasına bak.
Kurulum adımları
Kaynağı indir
Script ücretsiz ve açık kaynaktır (MIT). GitHub üzerinden indirebilirsin. Bkz. Ücretsiz scriptler.
Klasör adını değiştirme
Klasörün adı mutlaka hype-consumables olmalı. ox_inventory eşya tanımları hype-consumables.useFood
çağırır; arayüz ve export'lar da bu isim üzerinden çalışır.
Arayüz web/build içinde derlenmiş olarak gelir. Node.js'e sadece arayüzü değiştirmek istersen ihtiyaç duyarsın
(bkz. SSS).
Eşyaları ekle
Kullandığın envantere göre sadece birini uygula. Eşya adları config/foods.lua içindeki anahtarlarla aynı olmalı.
Hazır gelen 13 eşya: burger, sandwich, hotdog, taco, fries, donut, chips, egobar, water, sprunk,
ecola, coffee ve grapejuice.
INSTALL/ox_inventory.md içindeki Lua eşya tanımlarını ox_inventory/data/items.lua dosyasındaki return { ... }
tablosuna ekle. burger, sprunk, water, sandwich, coffee ve grapejuice orada zaten var: mevcut
tanımlarını sil ve dosyadakilerle değiştir. Tüm eşyalar aynı yapıdadır:
['burger'] = {
label = 'Burger',
weight = 20,
stack = true,
close = true,
consume = 0,
description = 'Freshly made burger. Eaten bite by bite.',
client = {
export = 'hype-consumables.useFood',
},
buttons = {
{ label = 'Give to someone', action = function(slot) exports['hype-consumables']:giveFood(slot) end },
{ label = 'Put on the ground', action = function(slot) exports['hype-consumables']:dropFood(slot) end },
},
},| Alan | Neden |
|---|---|
weight | Sadece ambalaj. Kalan gram / ml metadata üzerinden eklenir, yani yarısı yenmiş burger daha hafiftir |
consume = 0 | Eşyayı ox_inventory silmez, her lokmayı script yönetir |
client.export | Eşya kullanımı scripte devredilir, framework'ün tüketim kayıtlarına hiç ulaşılmaz |
buttons | Envanterdeki sağ tık menüsü: bir oyuncuya ver veya yere bırak |
INSTALL/item-images/*.png dosyalarını ox_inventory/web/images/ klasörüne kopyala. Buton yazılarını istersen
Türkçeye çevirebilirsin.
İki dosyada da isteğe bağlı bir spoiled_food eşyası var. Bunu sadece Spoilage.spoiledItem değerini
'spoiled_food' yaparsan ekle (bkz. Bozulma).
Veritabanı
Çoğu durumda yapman gereken bir şey yok. Script ilk açılışta tek tablosu olan hype_consumables_drops tablosunu
oluşturur; bu tablo yere bırakılan yiyecekleri restart sonrasına taşır. Veritabanı kullanıcının CREATE yetkisi yoksa
INSTALL/install.sql dosyasını bir kez elle çalıştır:
CREATE TABLE IF NOT EXISTS `hype_consumables_drops` (
`id` VARCHAR(32) NOT NULL,
`item` VARCHAR(64) NOT NULL,
`metadata` LONGTEXT NOT NULL,
`x` FLOAT NOT NULL,
`y` FLOAT NOT NULL,
`z` FLOAT NOT NULL,
`heading` FLOAT NOT NULL DEFAULT 0,
`owner` VARCHAR(64) NULL DEFAULT NULL,
`created_at` INT NOT NULL,
PRIMARY KEY (`id`)
);Açlık, susuzluk, kalan miktar ve son kullanma tarihleri bu tabloda değil, eşya metadata'sında ve framework'ünde tutulur.
Kaynağı başlat
server.cfg dosyasına bağımlılıklarından sonra ekle ve dili ayarla.
ensure ox_lib
ensure oxmysql
ensure qbx_core # veya qb-core / es_extended (isteğe bağlı)
ensure ox_inventory # veya qb-inventory / ps-inventory / jpr-inventory
ensure ox_target # veya qb-target
# HypeScripts
ensure hype-consumables
setr ox:locale "tr" # "en" ve "tr" hazır gelirTemel ayarları yap
Varsayılanlar kurulumdan hemen sonra çalışır. Tuşlara, bozulma sürelerine ve yerdeki yiyecek sınırlarına bakmak için
config/config.lua, yiyecekleri ayarlamak için config/foods.lua dosyasını aç. Tüm seçenekler için
Ayarlar sayfasına bak.
Başlatma sırası önemli
hype-consumables envanterden önce başlarsa No supported inventory found yazar ve durur. Framework'ten önce
başlarsa standalone moda geçer, açlık ve susuzluk uygulanmaz.
Kontrol et
Config'te Debug = true yap ve sunucuyu başlat. Konsolda şu satırları ara:
[DEBUG:SERVER] [INFO] Framework detected: qbx_core
[DEBUG:SERVER] [INFO] Inventory detected: ox_inventory
[hype-consumables] Loaded 0 food drops
[DEBUG:SERVER] [INFO] 13 foods loaded (framework: qbx_core)Envanterinde eksik bir eşya varsa konsol onu listeler: These foods are not registered in ox_inventory (see INSTALL): ...
Kendine bir burger ver ve kullan. İlk lokma hemen alınır ve sağ alt köşede küçük bir panel açılır. Yeni lokmalar için
E tuşuna bas; kalan gramın hem panelde hem envanterde azaldığını gör.
Kalanını saklamak için X tuşuna bas, sonra burgeri tekrar kullan: kaldığın yerden devam eder. Yere bırakmak için Q
tuşuna bas, sonra target ile İncele ve Yerden al seçeneklerini dene.
Yanında ikinci bir oyuncu varken yemek yerken H tuşuna, ardından teklifi göndermek için Y tuşuna bas. Diğer oyuncu
Y ile kabul eder. Her şey çalışıyorsa Debug = false yap.
Nasıl çalışır
- Lokma lokma: 200 g'lık bir burger 20 g'lık 10 lokmada yenir. 4 lokmadan sonra envanter ve panel 120 g gösterir. Lokmalar asla otomatik alınmaz; her lokma bir tuş basışıdır.
- Sakla ve devam et: istediğin an bırakabilirsin. Kalanı envanterde durur, eşyayı tekrar kullanınca kaldığın yerden devam edersin.
- Kapalı ve açılmış: yeni yiyecek kapalı bir pakettir. Birlikte oluşan kapalı paketler yığılır. İlk lokma paketi açar, ona benzersiz bir id verir ve kendi slotuna taşır; bu yüzden bir yığından yemeye başlamak için bir boş slot gerekir.
- Oyunculara ver: yiyeceği yakındaki bir oyuncuya teklif et. Teklif cevaplanana kadar eşya kilitlenir, kabul edilince sunucuda karşı tarafa taşınır.
- Yerdeki yiyecek: yere bırakılan yiyecek dünyada obje olarak kalır, incelenip yerden alınabilir ve restart sonrasında da yerinde durur.
- Gerçek zamanlı bozulma: yiyecekler kategorilerine göre gerçek zamanlı bozulur, sunucu kapalıyken bile. Bozulan yiyecek envanterde işaretlenir ve varsayılan olarak yenemez.
- Açlık ve susuzluk: her lokma, payına düşen açlık ve susuzluğu framework üzerinden ekler. Daha küçük olan son lokma orantılı sayılır.
- Sunucu tarafı: tüm miktarlar, son kullanma tarihleri ve besin değerleri sunucuda hesaplanır. Arayüz sadece gösterir.
Tuşlar
Panel fare veya imleç kullanmaz; her işlem bir tuştur ve ipucu olarak gösterilir.
| Tuş | İşlem |
|---|---|
| Eşyayı kullan | Yemeye başla (ilk lokma hemen alınır) |
E | Lokma al / yudum al (aynı eşyayı tekrar kullanmak da aynı işi yapar) |
Q | Yere bırak |
X | Bırak ve kalanını sakla |
H | Birine ver: yakındaki oyuncu listesini açar, tekrar basınca sıradakini seçer |
Y / N | Teklifi gönder / vazgeç, gelen teklifi kabul et / reddet |
| Envanterde sağ tık | Ver / yere bırak (sadece ox_inventory) |
| Target | Yerdeki yiyeceği İncele / Yerden al |
Yeme tuşları GTA kontrolleridir. Yemek yerken veya oyuncu seçerken her karede engellenirler, böylece aynı tuştaki oyun
eylemleri (siper, korna, farlar) karışmaz; geri kalan zamanda oyuna aittirler. Y ve N, oyuncuların
Ayarlar → Tuş Atamaları → FiveM altından değiştirebileceği tuş atamalarıdır.
Envanterler
| ox_inventory | qb-inventory / ps-inventory / jpr-inventory | |
|---|---|---|
| Eşya kullanımı | Eşya tanımındaki client.export | QBCore.Functions.CreateUseableItem |
| Metadata | Eşyanın metadata alanı | Eşyanın info alanı |
| Yığılma | Kapalı paketler yığılır, açılan yiyecek kendi slotunu alır | Her yiyecek unique |
| Yeni eşyalar | Metadata createItem hook'u ile hemen yazılır | Metadata ilk kullanımda veya oyuncu girişinde yazılır |
| Kilitler | Teklif edilen eşya taşınamaz; yenen yiyeceği envanterden çıkarmak yemeyi bitirir | Hook yok; değişiklikler teklif kabul edilirken veya sonraki lokmada yakalanır |
| Ekstralar | Kalan ağırlık, yüzde çubuğu, sağ tık ile ver / bırak butonları | Yemek yerken tuşlarla ver / bırak |
Framework'ler
| Framework | Açlık / susuzluk | Kimlik |
|---|---|---|
qbx_core | Oyuncu state bag'i ve metadata | citizenid |
qb-core | Metadata ve hud:client:UpdateNeeds | citizenid |
es_extended | esx_status:add / esx_status:remove | identifier |
| Standalone | hype-consumables:server:addStatus sunucu event'i | license2 / license |
Standalone sunucularda hazır bir açlık ve susuzluk sistemi yoktur. Değerleri kendi status veya HUD kaynağında
hype-consumables:server:addStatus event'i ile uygula.
Sonraki adımlar
SSS
HeroHunt App'te en sık karşılaşılan sorunların çözümleri; telefonda görünmeyen uygulama ve çıkmayan herolardan yakalama, Candy ve görevlere kadar.
Ayarlar
config/config.lua ve config/foods.lua içindeki tüm seçenekler; tuşlardan lokma süresine, bozulma sürelerinden yiyecek vermeye, yere bırakmaya ve kendi yiyeceğini eklemeye kadar.