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.
Başlamadan önce
Section titled “Başlamadan önce”| Neye ihtiyacınız var | Neden |
|---|---|
| oxmysql, çalışır durumda | Telefonun hatırladığı her şey veritabanınızda yaşar |
| ESX, QBCore, QBox veya fmLib | Kendiliğinden algılanır; hangisi olduğunu söylemeniz gerekmez |
| Son birkaç yıla ait bir FiveM sunucusu | Telefonun 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.
1. Klasörü yerine koyun
Section titled “1. Klasörü yerine koyun”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 oxmysqlensure es_extended # or qb-core / qbx_coreensure mic_phoneBaş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 portBunun 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.luaConfig.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.
5. Yalnızca sunucuya özel ayarlar
Section titled “5. Yalnızca sunucuya özel ayarlar”Örnek dosyayı kopyalayın ve istediğiniz kısımları doldurun:
shared/server_config.example.lua → shared/server_config.luaBu 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,
FallbackToDataUrldosyayı 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.
İşlem tamam
Section titled “İşlem tamam”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 HTTP | HTTPS | |
|---|---|---|
| Mesajlar, posta, garaj ve diğer her şey | evet | evet |
| Uygulama kapalıyken bildirimler | hayır | evet |
| Aramalar | hayır | evet |
| Sesli notlar için mikrofon | hayır | evet |
| Kendi simgesiyle bir uygulama olarak yükleme | hayır | evet |
Hiçbir şey kurmadan HTTPS almak
Section titled “Hiçbir şey kurmadan HTTPS almak”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' }, },}- 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.orgsize bir dakikada ücretsiz bir tane verir. - 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.comhttps: port 80 open for the challengehttps: challenge port closedhttps: certificate in hand, good until 2027-01-31https: 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.
Bir şeyler yolunda gitmediğinde
Section titled “Bir şeyler yolunda gitmediğinde”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 durum | Sebebi |
|---|---|
| Telefon açılmıyor | phone eşyası yok veya RequireItem açık ve oyuncunun üzerinde telefon yok |
| QR kod ulaşılamayan bir yere işaret ediyor | ServerConfig.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çluyor | 80 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üyor | Medya token’ı yok ve FallbackToDataUrl dosyaları veritabanında tutuyor |
| İki oyuncu arasındaki aramalarda ses yok | Ses auto olarak ayarlı ve hiçbir ses kaynağı bulunamadı; Config.Bridge.voice içinde kendinizinkini belirtin |
Şehrinizi açmadan önce
Section titled “Şehrinizi açmadan önce”shared/server_config.luayalnı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.Serverwebhook’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.Debugayarı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.