İçeriğe geç

Kurulum

On dakika sürer ve bunun çoğu sunucunun başlamasını beklemektir. İçe aktarılacak bir SQL dosyası ve çalıştırılacak ikinci bir program yoktur — kaynak ilk kez başladığında tablolar kendi kendini oluşturur.

Aşağıdaki her adım çalıştığını nasıl anlayacağınızla biter, böylece hiçbir zaman acaba oldu mu diye düşünerek bir sonraki adıma geçmezsiniz.


Neye ihtiyacınız varNeden
oxmysql, çalışır durumdaTelefonun hatırladığı her şey veritabanınızda yaşar
ESX, QBCore, QBox veya fmLibKendiliğinden algılanır; hangisi olduğunu söylemeniz gerekmez
Son birkaç yıla ait bir FiveM sunucusuTelefonun web tarafı sunucunun yerleşik Node yapısını kullanır

Başka hiçbir şey gerekmez. npm yok, derleme (build) adımı yok, web sunucusu yok.


mic_phone klasörünü resources içine bırakın — köşeli parantezli bir klasörün içi en düzenli olanıdır:

resources/[mic]/mic_phone/

Klasörün adını mic_phone olarak tutun. Yeniden adlandırırsanız hiçbir şey bozulmaz, ancak telefonun web adresi klasör adından oluşturulur, bu yüzden onun hakkında yazılan her şeyin de değişmesi gerekir.


2.Dayandığı kaynaklardan sonra başlatın

Section titled “2.Dayandığı kaynaklardan sonra başlatın”

server.cfg içinde, oxmysql’in ve framework’ünüzün altında:

ensure oxmysql
ensure es_extended # or qb-core / qbx_core
ensure mic_phone

Başlangıçta konsol şunu söylediğinde çalışmış demektir:

[mic_phone] web: door B listening on http://0.0.0.0:30125 · door A at /mic_phone/web/ on the game port

Bunun yerine framework hakkında kırmızı bir satır görürseniz, mic_phone kaynağını framework’ünüzden sonra başlatın — sebep neredeyse her zaman budur.


3. Veritabanı — yapılacak bir şey yok

Section titled “3. Veritabanı — yapılacak bir şey yok”

İlk başlatma sql/schema.sql dosyasını okur ve eksik olan her şeyi oluşturur. Arka arkaya CREATE TABLE IF NOT EXISTS mic_phone_… satırlarının geçtiğini göreceksiniz. Hepsi bu kadar.

Bu satırlar bir kez görünüp sonraki başlatmalarda bir daha görünmediğinde çalışmış demektir.


4. Oyunculara açacakları bir eşya verin

Section titled “4. Oyunculara açacakları bir eşya verin”

Kutudan çıktığı haliyle telefon, envanterde phone adında bir eşyaya ihtiyaç duyar:

-- shared/config.lua
Config.Open = {
RequireItem = true,
Item = 'phone',
...
}

Çoğu ESX ve QB kurulumunda bu eşya zaten vardır. ox_inventory kullanıcıları: eğer yoksa eşya listenize ekleyin. Sadece deniyor musunuz? RequireItem = false yapın ve bu adımı tamamen atlayın.

Sunucuya girip eşyayı üzerinize aldığınızda ve F1 telefonu açtığında çalışmış demektir. /phone komutu da aynı işi yapar ve telefon açıkken T tuşu onu tablete dönüştürür.


Örnek dosyayı kopyalayın ve istediğiniz kısımları doldurun:

shared/server_config.example.lua → shared/server_config.lua

Bu dosya yalnızca sunucu scripti olarak yüklenir, dolayısıyla içindeki hiçbir şey oyuncuya ulaşmaz. Burada iki şey bulunur:

Fotoğraflar, videolar ve sesli notlar. ServerConfig.Media.Token içine (veya FIVEMANAGE_MEDIA_API_KEY convar değerine) bir Fivemanage medya token’ı koyun; telefon dosyaları kendisi yükler ve yalnızca ortaya çıkan bağlantıyı kaydeder. Bir Discord webhook’u yedek (fallback) olarak çalışır.

İkisi de ayarlanmazsa, FallbackToDataUrl dosyayı veritabanınızın içinde tutar. Bu, test için uygundur ancak canlı sunucuda ağırdır — birkaç saniyelik ses bile dokunduğu her satırda onlarca kilobayt yer kaplar. Bir token ayarlayın ya da bu seçeneği kapatıp yüklemelerin açıkça hata vermesini sağlayın.

Discord webhook’ları. Her olay türü için bir URL veya her şeyi yakalamak için Default. Diğerlerini atlasanız bile ayarlamaya değer olan tek seçenek Server’dır: bir oyuncu yerine sunucu hakkında size bilgi veren tek webhook budur — örneğin adres değiştiğinde veya bir sertifika yenilenemediğinde.


Telefon çalışıyor. Aşağıdaki her şey isteğe bağlıdır.


İsteğe bağlı: gerçek bir telefonda oyun telefonu

Section titled “İsteğe bağlı: gerçek bir telefonda oyun telefonu”

Oyuncular karakterlerinin telefonunu kendi gerçek telefonlarında taşıyabilirler. Bu özellik zaten açıktır: oyun içi telefonda Ayarlar › Bağlı cihazlar bir QR kod gösterir; oyuncular bunu taratır ve ekranda çıkan altı haneli kodu oyuna geri yazarlar. O cihaz artık o karakter gibi hareket eder.

Düz HTTP üzerinden bu onlara mesajları, postaları, kişileri, garajı, mülkleri ve geri kalan her şeyi zaten verir. Bir tarayıcının güvenli olmayan bir sayfaya vermeyeceği şey ise işin en güzel kısmıdır:

Düz HTTPHTTPS
Mesajlar, posta, garaj ve diğer her şeyevetevet
Uygulama kapalıyken bildirimlerhayırevet
Aramalarhayırevet
Sesli notlar için mikrofonhayırevet
Kendi simgesiyle bir uygulama olarak yüklemehayırevet

Bu kaynak kendi sertifikasını alabilir ve yenileyebilir. Sunucunuza bir alan adı yönlendirin, iki port açın ve üç satırı doldurun:

-- shared/server_config.lua (server-only: this file is never sent to a client)
ServerConfig.Web = {
Url = 'https://phone.yourserver.com/',
Https = {
Enabled = true,
Names = { 'phone.yourserver.com' },
Contact = '[email protected]',
},
}
  1. Bir alan adı. Bir VPS üzerinde bu, sunucu adresine işaret eden tek bir A kaydıdır. Alan adınız yok mu? duckdns.org size bir dakikada ücretsiz bir tane verir.
  2. Güvenlik duvarından Port 80 ve port 443 geçişi. 80 numaralı port yalnızca sertifika istenirken açılır ve yanıt alınır alınmaz tekrar kapatılır.

Konsol şunu söylediğinde çalışmış demektir:

https: asking for phone.yourserver.com
https: port 80 open for the challenge
https: challenge port closed
https: certificate in hand, good until 2027-01-31
https: listening on https://phone.yourserver.com/

Eğer 443 doluysa — bazı yönlendiriciler (router) bunu kendi yönetim sayfaları için tutar — başka bir port üzerinden yayın yapın: Port = 8443 yazın, 8443 portunu yönlendirin ve Url = 'https://phone.yourserver.com:8443/' olarak ayarlayın. Yalnızca doğrulama (challenge) işleminin 80 portunda olması gerekir; sertifika bir porta değil bir alan adına aittir ve her şey yine sorunsuz çalışır.

docs/HTTPS.md diğer durumları kapsar: Cfx.re proxy’si arkasında, halihazırda çalıştırdığınız bir ters proxy (reverse proxy) arkasında veya size port vermeyen bir barındırma (hosting) firmasında.


phonehttps check — sertifika yetkilisinin test sunucusuna makinenizle konuşup konuşamayacağını sorar. Sertifika gelmediğinde ilk olarak bunu çalıştırın: güvenlik duvarınız ile bu kaynağı birbirinden ayırır.

phonehttps — sertifikanın ne durumda olduğunu ve ne zaman yenileneceğini gösterir.

phoneduck — bu sunucu kendi DuckDNS adını kendisine yönlendirilmiş halde tutuyorsa, adın ne durumda olduğunu ve bunu en son ne zaman bildirdiğini gösterir. phoneduck now mevcut adresi gönderir ve DuckDNS’in ne yanıt verdiğini yazdırır; bu da adresin değişmesini beklemeden token’ın yanlış olup olmadığını anlamanın yoludur.

Gördüğünüz durumSebebi
Telefon açılmıyorphone eşyası yok veya RequireItem açık ve oyuncunun üzerinde telefon yok
QR kod ulaşılamayan bir yere işaret ediyorServerConfig.Web.Url değerini elle ayarlayın; otomatik tahmin portu değiştiren bir yönlendiricinin ötesini göremez
Sertifika yok ve günlük (log) doğrulamayı suçluyor80 numaralı port bu makineye ulaşmıyor. Sırasıyla port yönlendirmesini ve güvenlik duvarını kontrol edin
Fotoğraflar çok büyük / veritabanı hızla büyüyorMedya token’ı yok ve FallbackToDataUrl dosyaları veritabanında tutuyor
İki oyuncu arasındaki aramalarda ses yokSes auto olarak ayarlı ve hiçbir ses kaynağı bulunamadı; Config.Bridge.voice içinde kendinizinkini belirtin

  • shared/server_config.lua yalnızca size aittir. Asla kimseyle paylaşmayın veya herkese açık bir yere yüklemeyin; medya token’ınızı ve webhook URL’lerinizi barındırır.
  • Server webhook’unu okuduğunuz bir yere yönlendirin. Telefonun ön kapısının çalışmayı durdurduğunu söyleyen webhook budur ve bir oyuncu size söylemeden önce alacağınız tek uyarıdır.
  • Açtıysanız Config.Debug ayarını kapatın: her köprü (bridge) kararını konsola yazdırır.
  • Herkese açık bir şehir yönetiyorsanız Güvenlik sayfasına on dakika ayırmaya değer: bu kaynağın kendisine bağlanan kişiler hakkında ne varsaydığını ve değiştirilmiş (modlu) bir istemcinin kendi karakterinin ötesine geçememesi için uyguladığı kuralları anlatır.