HeroHunt App: Ayarlar
config/config.lua içindeki tüm seçenekler; telefon uygulaması ve keşif haritasından spawnlar, nadirlikler, Candy ve görevlere kadar, ayrıca hero ve görev katalogları.
İpucu
Değişiklikten sonra sadece kaynağı ensure hype-herohunt-app ile yeniden başlat; sunucuyu tamamen yeniden
başlatmana gerek yok. Aktif spawnlar veritabanında tutulur ve yeniden başlatmadan sonra geri gelir.
Scriptin üç ayar dosyası var:
| Dosya | İçerik |
|---|---|
config/config.lua | Bu sayfadaki tüm seçenekler |
config/heroes.lua | Hero kataloğu, bkz. Herolar |
config/tasks.lua | Günlük, haftalık ve genel görevler, bkz. Görev kataloğu |
Her dosya tek bir tablo döndürür; aşağıdaki bölümler config.lua dosyasındaki sırayı izler. Süreler adlarındaki
birimdedir (...Seconds saniye, ...Ms milisaniye), mesafeler metre cinsindendir. Geçersiz hero ve görev kayıtları
başlatmada atlanır ve sunucu konsoluna yazılır.
Genel
Debug = false,
Framework = "auto",
Ownership = "character",Seçenek
Tür
"character" ile koleksiyon QBox ve QBCore'da citizenid, ESX'te identifier değerine aittir. "account" ile
oyuncunun Rockstar lisansına aittir.
Ownership'i canlıya almadan seç
Koleksiyonlar sahip anahtarına göre tutulur. Sonradan "character" ile "account" arasında geçiş yapmak mevcut
koleksiyonları taşımaz; oyuncular boş bir koleksiyonla başlar.
Uygulama
Uygulamanın lb-phone'da ve App Store'da nasıl görüneceği.
App = {
identifier = "hype-herohunt",
name = "HeroHunt",
description = "Explore the city, discover heroes and complete your collection.",
developer = "Hype Studios",
defaultApp = false,
price = 0,
size = 52400,
},Seçenek
Tür
Uygulama simgesi web/build/icon.svg dosyasıdır. Uygulama telefon ayarlarındaki açık veya koyu temayı izler.
Arayüz
Seçenek
Tür
Keşif
Keşif alanı, haritada oyuncunun etrafındaki dairedir. İçindeki herolar yakalanabilir.
Discovery = {
Radius = 100.0,
PreviewRadius = 150.0,
SyncIntervalMs = 3000,
PositionIntervalMs = 500,
PositionMinMove = 1.0,
Area = {
fill = "#7c5cff",
fillOpacity = 0.12,
border = "#7c5cff",
borderOpacity = 1.0,
borderWidth = 2,
},
},Seçenek
Tür
Spawnlar ve konumlar sadece uygulama ekranda açıkken aktarılır. Telefonu kapatmak güncellemeleri durdurur.
Spawn
Sunucu her SpawnIntervalSeconds süresinde RoutingBucket içindeki her oyuncuya bakar. SpawnRadius içinde
TargetPerPlayer sayısından az hero varsa oyuncudan MinPlayerDistance ile SpawnRadius arasında yeni noktalar
seçer (tur başına oyuncu başı en fazla 4), mesafe, yoğunluk veya kara liste kurallarına uymayanları atlar ve kalanları
zemin kontrolü için o oyuncunun oyununa gönderir. Geçerli noktalar herkesin gördüğü spawnlara dönüşür.
Spawn = {
Enabled = true,
MaxActiveHeroes = 300,
SpawnIntervalSeconds = 30,
SpawnsPerTick = 12,
DespawnAfterSeconds = 1800,
TargetPerPlayer = 6,
SpawnRadius = 180.0,
MinPlayerDistance = 20.0,
MinSpawnDistance = 15.0,
AreaRadius = 150.0,
MaxPerArea = 10,
-- ...
},Seçenek
Tür
Zemin kontrolü; zemini veya navmesh'i olmayan, suda, iç mekânda, bir araca 3 metreden yakın olan ve güvenli konumu zemin yüksekliğinden uzak kalan noktaları reddeder.
Kara liste
Heroların asla çıkmadığı daireler. Her kaydın bir label (sadece senin için), bir x, y merkezi ve bir radius
değeri vardır.
Blacklist = {
{ label = "Fort Zancudo", x = -2200.0, y = 3100.0, radius = 900.0 },
{ label = "Bolingbroke", x = 1690.0, y = 2600.0, radius = 220.0 },
{ label = "Mission Row PD", x = 440.0, y = -982.0, radius = 45.0 },
{ label = "Pillbox Hospital", x = 307.0, y = -595.0, radius = 45.0 },
},Bölgeler
Görevlerin region filtresinde kullanılan isimli daireler. Her spawn, kendisini içeren ilk bölgeyi (liste sırasıyla)
kaydeder ve label değeri Downtown bölgesinde 3 hero yakala gibi görev başlıklarında görünür.
Regions = {
{ id = "vinewood", label = "Vinewood", x = 300.0, y = 200.0, radius = 650.0 },
{ id = "downtown", label = "Downtown", x = 150.0, y = -850.0, radius = 700.0 },
{ id = "vespucci", label = "Vespucci", x = -1300.0, y = -1200.0, radius = 650.0 },
{ id = "sandy", label = "Sandy Shores", x = 1850.0, y = 3700.0, radius = 600.0 },
{ id = "paleto", label = "Paleto Bay", x = -250.0, y = 6300.0, radius = 550.0 },
},Seçenek
Tür
Yakalama
Seçenek
Tür
Nadirlikler
Her kaydın anahtarı, heroes.lua dosyasında ve görev filtrelerinde kullanılan nadirlik kimliğidir.
Rarities = {
common = { order = 1, color = "#94a3b8", spawnWeight = 60, catchChance = 1.0, captureCandy = 1 },
uncommon = { order = 2, color = "#22c55e", spawnWeight = 25, catchChance = 1.0, captureCandy = 2 },
rare = { order = 3, color = "#3b82f6", spawnWeight = 10, catchChance = 1.0, captureCandy = 3 },
epic = { order = 4, color = "#a855f7", spawnWeight = 4, catchChance = 1.0, captureCandy = 5 },
legendary = { order = 5, color = "#f59e0b", spawnWeight = 1, catchChance = 1.0, captureCandy = 10 },
},Seçenek
Tür
Spawn ağırlığı her hero için ayrı uygulanır; yani daha çok herosu olan bir nadirlik toplamda daha sık çıkar. Varsayılan katalogla (20 Yaygın, 14 Sıradışı, 9 Nadir, 5 Destansı ve 2 Efsanevi hero) her spawnın ihtimalleri:
| Nadirlik | Hero | Ağırlık | Spawn başına ihtimal |
|---|---|---|---|
| Yaygın | 20 | 60 | ~%72,2 |
| Sıradışı | 14 | 25 | ~%21,1 |
| Nadir | 9 | 10 | ~%5,4 |
| Destansı | 5 | 4 | ~%1,2 |
| Efsanevi | 2 | 1 | ~%0,1 |
Yeni bir nadirlik eklemek için buraya bir kayıt, her dil dosyasında da rarity altına onun adını ekle.
Candy
Seçenek
Tür
Dönüştürme, her kopya için heronun heroes.lua içindeki candyValue değerini verir. Yakalama ise nadirliğin
captureCandy değerini verir.
Görevler
Seçenek
Tür
Güvenlik
Seçenek
Tür
Yakalama bekleme süresi Capture.CooldownMs ayarıdır. Dönüşümler ve görev ödülleri benzersiz bir istek kimliği de
taşır, böylece aynı istek asla iki kez ödenmez.
Geçmiş
Seçenek
Tür
Herolar
Hero kataloğu config/heroes.lua dosyasıdır ve 50 heroyla gelir. Hero eklemek için bir kayıt ekle:
return {
{ id = "hero_001", name = "Volty", rarity = "common", candyValue = 1, image = "heroes/hero_001.png", enabled = true },
-- ...
{ id = "hero_051", name = "Nova", rarity = "epic", candyValue = 8, image = "heroes/hero_051.png",
silhouette = "heroes/hero_051_s.png", catchChance = 0.6 },
}Seçenek
Tür
- Her karttaki numara, heronun dosyadaki sırasıdır. Numaraları korumak için yeni heroları sona ekle.
- Dahil olan 50 heronun portreleri ve silüetleri
web/build/heroes/klasöründedir. Yeni bir hero için iki görseli de oraya koy (veya https adresleri kullan) vesilhouettedeğerini kendin ver. Bir görsel yüklenemezse uygulama yerine nötr bir robot simgesi gösterir. - Bir heroyu kaldırmak için satırı silmek yerine
enabled = falseyap. Kopyası olan oyuncular onu görmeye devam eder, ama koleksiyon toplamına artık sayılmaz. - Geçersiz veya tekrar eden bir
idya da bilinmeyen birrarityiçeren kayıt atlanır; örneğin: Config: heroes[51].rarity = mythic is invalid, skipped.
Görev kataloğu
Görevler config/tasks.lua dosyasında tanımlanır. İlerleme sadece gerçek sunucu olaylarından sayılır: yakalamalar ve
dönüşümler.
return {
-- Günlük havuz
{ id = "d_capture_5", period = "daily", type = "capture", target = 5, reward = { type = "candy", amount = 8 } },
{ id = "d_uncommon_2", period = "daily", type = "capture", target = 2, filter = { minRarity = "uncommon" }, reward = { type = "candy", amount = 10 } },
{ id = "d_downtown_3", period = "daily", type = "capture", target = 3, filter = { region = "downtown" }, reward = { type = "candy", amount = 10 } },
-- Haftalık havuz
{ id = "w_epic_1", period = "weekly", type = "capture", target = 1, filter = { minRarity = "epic" }, reward = { type = "candy", amount = 45 } },
-- Genel ilerleme
{ id = "g_first_capture", period = "general", type = "capture", target = 1, title = "tasks.custom.first_capture", reward = { type = "candy", amount = 5 } },
-- ...
}Varsayılan dosyada 9 günlük, 7 haftalık ve 10 genel görev var.
Seçenek
Tür
Periyotlar
| Periyot | Davranış |
|---|---|
daily | Her gün Tasks.ResetHour saatinde yenilenir. Günlük havuzdan Tasks.DailyCount görev seçilir |
weekly | Her hafta Tasks.WeekStartsOn gününde yenilenir. Haftalık havuzdan Tasks.WeeklyCount görev seçilir |
general | Kalıcı hedefler; her zaman etkindir ve bir kez tamamlanır |
Seçim tarihe göre yapılır; bu yüzden tüm oyuncular aynı günlük ve haftalık görevleri alır ve görevler her yenilenmede değişir. Bir havuzu düzenleyip kaynağı yeniden başlatmak o anki seçimi değiştirebilir.
Türler
| Tür | İlerleme | Filtreler |
|---|---|---|
capture | Her yakalama | minRarity, rarity, region, hero |
discover | Periyot içinde ilk kez yakalanan her hero | region |
discovered_total | Keşfedilen farklı hero sayısı, periyoda bağlı değil | - |
capture_rarities | Periyot içinde yakalanan farklı nadirlik sayısı | - |
convert | Candy'ye dönüştürülen her kopya | - |
earn_candy | Yakalama ve dönüşümlerden kazanılan Candy (görev ödülleri sayılmaz) | - |
Filtreler
Seçenek
Tür
Özel başlıklar
title verilmezse başlık tür ve filtreden üretilir; örneğin 2 Sıradışı ya da daha nadir hero yakala. Kendi metnini
kullanmak için her dil dosyasında tasks.custom altına bir anahtar ekle ve title (veya description) değerini ona
yönlendir. Görevin hedefi %s olarak aktarılır.
"tasks": {
"custom": {
"first_capture": "İlk heronu yakala",
"complete_collection": "Koleksiyonu tamamla",
"night_hunter": "Gece %s hero yakala"
}
}{ id = "g_night_hunter", period = "general", type = "capture", target = 20, title = "tasks.custom.night_hunter", reward = { type = "candy", amount = 25 } },Görevler her başlatmada hero_tasks tablosuna yazılır. Dosyadan kaldırılan görevler orada kapatılır, ilerlemeleri
veritabanında kalır.
Diller
Dil ox_lib'den gelir, bu yüzden config yerine server.cfg içinde ayarlanır:
setr ox:locale "tr"en ve tr dahildir. Kodla eşleşen bir dosya yoksa İngilizce kullanılır. Yeni bir dil eklemek için
locales/en.json dosyasını kopyala, çevir, dil koduyla kaydet (örneğin de.json) ve ox:locale değerini o kod yap.
Uygulama metinleri, nadirlik adları, görev başlıkları, görev bildirimi ve hata mesajları aynı dosyadadır. Hero adları
heroes.lua dosyasından, bölge adları Regions ayarından gelir.
Kurulum
lb-phone için hero toplama uygulamasını birkaç dakikada sunucunda çalışır hâle getir; ortak dünya spawnları ilk başlatmadan itibaren hazır.
Export ve Event'ler
Yönetici komutları, HeroHunt App'in dinlediği oyuncu yükleme event'leri, framework köprüleri, lb-phone entegrasyonu ve verilerin nasıl okunacağı.