$ ABD Doları
  • $ ABD Doları
  • € AVRO
  • £ GBP
  • $ Avustralya Doları
  • R$ BRL
  • İsviçre Frangı İsviçre Frangı
  • ¥ Japon Yeni
FiveM Scripts Nasıl Değerlendirilir, Test Edilir ve Bakımı Yapılır

How to Evaluate and Test FiveM Scripts Before You Buy

Before you buy or install a FiveM script, test it like a QA lead: run it in an isolated Docker “Test City”, work through the acceptance checklist, score the risk from 0-100, and vet the vendor before money changes hands. This guide gives server owners and developers the full workflow — a copy-paste FXServer + MariaDB docker compose stack, resmon performance limits, security checks, and a maintenance playbook for after you ship.

Özetle;

  • Başlat Test Şehri (Docker) herhangi bir betiği güvenli bir şekilde izole etmek ve kıyaslamak için.
  • Çalıştır Kabul Kontrol Listesi bir kuruş el değiştirmeden önce.
  • Kullanın Risk Puanı (0–100) gönderme/bekletme/reddetme kararı vermek için.
  • Satıcıları şununla değerlendirin: Satıcı Değerlendirme Tablosu (bunu atlamayın).
  • Satın alıyorsanız, güvenilir mağazaları tercih edin — seçtiklerimize bakın: En İyi Tebex Mağazaları.

Bölüm 1 — Güvenli, Tekrarlanabilir Betik QA için “Test Şehri” (Docker)

Ne alırsınız

  • Konteynerleştirilmiş FXServer + MariaDB (+ Adminer)
  • Temiz sunucu.cfg ile oxmysql ve temel kaynaklar
  • Bind-mount ile bağlanmış resources/custom test edilen betiği bıraktığınız yer
  • Basit DB dizeleri için deterministik ağ adları/portları

test-city.zip'i indirin (Github)

Nasıl kullanılır:

  1. Zip'ten çıkar → cd test-city
  2. Kopyala .env.example ile .env ve kendi ... ayarlayın LICENSE_KEY (ve isterseniz DB bilgileri).
  3. Düşürmek oxmysql içine server-data/resources/[standalone]/oxmysql/.
  4. Test edilecek betiği şu konuma yerleştirin: server-data/resources/custom/<scriptname>/ ve ekle ensure <scriptname> ile server.cfg.
  5. docker compose build && docker compose up -d → Direct Connect ile bağlanın: localhost:30120.

Ön koşullar: Docker + Docker Compose, bir cfx lisans anahtarı ve bir oxmysql kaynak kopyası (şuraya bırakın: server-data/resources/[standalone]/oxmysql).

Klasör düzeni

test-city/
├─ docker-compose.yml
├─ fxserver/
│ ├─ Dockerfile
│ └─ entrypoint.sh
├─ server-data/
│ ├─ server.cfg
│ └─ resources/
│ ├─ [standalone]/oxmysql/ # place oxmysql here
│ └─ custom/ # put the script under test here (e.g., myscript/)
└─ .env

.env (örnek)

LICENSE_KEY=changeme_cfx_license_key
MYSQL_DATABASE=fivem
MYSQL_USER=fivem
MYSQL_PASSWORD=fivempw
MYSQL_ROOT_PASSWORD=rootpw
FX_ARTIFACT_URL=https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/LATEST.tar.xz
# Tip: replace with a specific artifact URL you trust for reproducibility.

docker-compose.yml

version: "3.9"

networks:
 testcity:

volumes:
 db_data:

services:
 db:
 image: mariadb:10.11
 restart: unless-stopped
 environment:
 MYSQL_DATABASE: ${MYSQL_DATABASE}
 MYSQL_USER: ${MYSQL_USER}
 MYSQL_PASSWORD: ${MYSQL_PASSWORD}
 MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
 command: >
 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 --innodb_buffer_pool_size=256M
 volumes:
 - db_data:/var/lib/mysql
 networks: [testcity]

 adminer:
 image: adminer:4
 restart: unless-stopped
 ports:
 - "8080:8080"
 networks: [testcity]
 depends_on: [db]

 fxserver:
 build:
 context: ./fxserver
 args:
 FX_ARTIFACT_URL: ${FX_ARTIFACT_URL}
 restart: unless-stopped
 environment:
 LICENSE_KEY: ${LICENSE_KEY}
 MYSQL_DATABASE: ${MYSQL_DATABASE}
 MYSQL_USER: ${MYSQL_USER}
 MYSQL_PASSWORD: ${MYSQL_PASSWORD}
 depends_on: [db]
 networks: [testcity]
 ports:
 - "30120:30120/udp"
 - "30120:30120/tcp"
 - "40120:40120/tcp" # txAdmin (optional)
 volumes:
 - ./server-data:/opt/fivem/server-data

fxserver/Dockerfile

FROM debian:bookworm-slim

ARG FX_ARTIFACT_URL
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends 
 xz-utils curl ca-certificates tini bash && 
 rm -rf /var/lib/apt/lists/*

# Fetch & extract FXServer artifact (URL provided via build-arg)
RUN mkdir -p /opt/fivem && 
 curl -fsSL "$FX_ARTIFACT_URL" -o /opt/fivem/fx.tar.xz && 
 tar -xJf /opt/fivem/fx.tar.xz -C /opt/fivem && 
 rm -f /opt/fivem/fx.tar.xz

# Non-root
RUN useradd -ms /bin/bash fivem
USER fivem

WORKDIR /opt/fivem
COPY --chown=fivem:fivem ../server-data /opt/fivem/server-data
COPY --chown=fivem:fivem entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/usr/bin/tini","--"]
CMD ["/bin/bash","/entrypoint.sh"]

fxserver/entrypoint.sh

#!/usr/bin/env bash
set -euo pipefail

# Provide DB string for oxmysql via server.cfg (already set there),
# just ensure the DB is reachable before boot to avoid spam errors.
echo "Waiting for database..."
until nc -z db 3306; do sleep 1; done
echo "DB ready."

# Run FXServer with our server.cfg
# Most Linux artifacts ship a run.sh in the artifact root.
exec bash /opt/fivem/run.sh +exec /opt/fivem/server-data/server.cfg

Eğer artifact'ınız farklı bir başlatıcı yolu kullanıyorsa, son satırı buna göre ayarlayın (örneğin, /opt/fivem/alpine/opt/cfx-server/run.sh).

server-data/server.cfg (yalın, test için hazır)

# ---------- Identity ----------
sv_licenseKey "%LICENSE_KEY%" # injected by env in entrypoint command or replace manually
sv_hostname "Test City — Script QA"
sets tags "qa,testing,fivemx"
sv_maxclients 2
onesync on
sv_scriptHookAllowed 0
sv_enforceGameBuild 3095

# ---------- Networking ----------
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

# ---------- Database (oxmysql) ----------
set mysql_connection_string "mysql://%MYSQL_USER%:%MYSQL_PASSWORD%@db:3306/%MYSQL_DATABASE%?charset=utf8mb4"

# ---------- Core / Base resources ----------
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure hardcap
ensure baseevents

# ---------- Datastore ----------
ensure oxmysql

# ---------- Under test ----------
# Drop your script folder into resources/custom/<scriptname> and enable here:
# ensure myscript

# ---------- QA helpers ----------
# Verbose logging in dev
setr con_minSeverity info

# Enable txAdmin panel (optional)
setr txAdminPort 40120

Scriptinizi etkinleştirin: şuraya kopyalayın: server-data/resources/custom/myscript/ ve ekle ensure myscript alt bloğa.

Çalıştırın

cd test-city
docker compose build
docker compose up -d
# Adminer at http://localhost:8080 (server: db, user: fivem, pass: fivempw)
# Connect FiveM client → Direct Connect: your-docker-host:30120

Bölüm 2 — Script Kabul Kontrol Listesi (Atlamayın)

Bunu her seferinde kullanın. Takipçinize kopyalayın ve maddeleri işaretleyin.

A. Ön uçuş (kurulumdan önce)

  • Kaynak türü: Açık kaynak / kısmen açık / yalnızca escrow.
  • Bağımlılıklar listelenmiş: çerçeve (ESX/QBCore/QBOX), ox_lib, oxmysql, PolyZone, vesaire.
  • fxmanifest.lua: lua54 'yes', doğru game 'gta5', fx_version eski değil.
  • Dokümanlar: kurulum adımları, yapılandırma örnekleri, izinler, yerelleştirmeler, bilinen çakışmalar.
  • Lisans/Kullanım Koşulları: kullanım hakları, para iade politikası, güncellemeler, destek kanalı.

B. Kurulabilirlik

  • Konsolda hata yok ensure: sıfır yığın izi veya varlık eksik spamı.
  • HAYIR deprecated natives spam.
  • Yapılandırma temiz yükleniyor: JSON/Lua sözdizimi hatası yok.
  • Veritabanı geçişleri: tabloları bir kez oluştur; yeniden başlatmalar tekrar uygulamaz veya bozmaz.

C. İşlevsellik

  • Çekirdek akışlar çalışıyor: mutlu yol test edildi (ör. satın alma, iş akışı, üretim).
  • Kenar durumlar: yanlış girdiler, eksik izinler, aralık dışı miktarlar.
  • Yerelleştirme: yerelleştirme sözü verildiyse sabit kodlanmış dizeler yok.
  • İzinler: personel/yönetici komutları kısıtlı; istemci tarafında ücretsiz erişim yok.

D. Performans (istemci ve sunucu)

  • resmon: boşta ≤ 0.10ms, aktif ≤ 0.50ms (istemci).
  • Sunucu tik sağlığı: normal kullanımda uzun duraklama uyarıları yok.
  • Veritabanı sorguları: sıkı döngü yok; hazırlanmış ifadeler kullanıldı; minimal N+1.

E. Güvenlik

  • Sunucu tarafı doğrulama: her sunucu olayı doğrulanır source, izinler ve giriş türleri.
  • İstemcide güven yok: yalnızca sunucu mantığından para/envanter değişiklikleri.
  • Eval yok/loadstring/remote code kalıplar.
  • Kötüye kullanımı önleme: spam yapan uç noktalarda hız sınırları/kısıtlamalar.
  • Escrow bütünlüğü: güvenli olmayan yapılandırma yükleyicilerinde arka kapı yok.

İyi etkinlik deseni (örnek):

RegisterNetEvent('myscript:buy', function(item, amount)
 local src = source
 if type(item) ~= 'string' or type(amount) ~= 'number' or amount < 1 then return end
 if not HasPermission(src, 'shop.buy') then return end
 local xPlayer = GetPlayer(src) -- framework adapter
 if not xPlayer then return end
 -- validate price server-side, check inventory limits, do DB in a transaction
end)

F. Uyumluluk ve Temizlik

  • Çerçeve adaptörleri mevcut (ESX/QBCore/QBOX) veya açıkça desteklenmediği belirtilen.
  • Küresel değişken sızıntısı yok, benzersiz olay adları, kaynak adı varsayımı yok.
  • Temiz kaldırma: kaynağı kaldırmak diğerlerini bozmaz.

Bölüm 3 — Nicel Risk Puanlama Modeli (0–100)

“Gönder/beklet/reddet” kararı vermek için kullanın. Düşük daha iyidir.

FaktörAğırlıkNasıl Puanlanır (0=iyi → 5=kötü)
Performans0.20resmon idle: 0=≤0.10ms, 1=≤0.20, 3=≤0.50, 5=>0.50; ani artışlar +1 ekler
Güvenlik0.250=tüm sunucu tarafından doğrulanan + hız sınırları; 3=bazı boşluklar; 5=istemciye güvenir / güvensiz olaylar
İstikrar0.150=hatasız; 3=ara sıra uyarılar; 5=sık hatalar/takılmalar
Uyumluluk0.100=adaptörler/testler; 3=yalnızca bir çerçeve; 5=yaygın bağımlılıkları bozar
Bakım Kolaylığı0.100=belgeler/değişiklikler/semantik sürümler; 5=belge yok/terk edilmiş
Tedarik Zinciri/Satıcı0.200=saygın, geçmiş, geri ödemeler; 5=bilinmeyen, politika yok

Formül

RiskScore = 100 * Σ(weight_i * (score_i / 5))

Bantlar ve Eylemler

  • 0–24 (Düşük): Staging'e gönder, izle.
  • 25–49 (Orta): Canlıya geçmeden önce düzeltilmesi gerekenler.
  • 50–74 (Yüksek): Beklet; satıcı yamalarını iste veya değiştir.
  • 75–100 (Kritik): Reddet.

Örnek

  • Perf=1, Sec=3, Stability=1, Compat=1, Maint=2, Vendor=1
  • Risk = 100*(.2*.2 + .25*.6 + .15*.2 + .1*.2 + .1*.4 + .2*.2) = 34 → Orta

Bölüm 4 — Satıcı Değerlendirme Kriterleri (her biri 0-5 arası puanlanır, yüksek daha iyidir) daha iyi)

Kriter“İyi” Olan Ne?Notlar
Kimlik ve Geçmiş KaydıNet marka, aktif yıllar, tutarlı tanıtıcıTek kullanımlık mağazalardan kaçının
BelgelemeKurulum + yapılandırma + izinler + sorun gidermeEkran görüntüleri/gifler yardımcı olur
Güncelleme SıklığıDeğişiklik Günlüğü, anlamsal sürümler, son taahhütler/sürümlerÜç ayda bir+ yeterlidir
Destek KalitesiBilet/Discord SLA'lar, tekrarlanabilir düzeltmeler, sadece “yeniden başlat” değil”Örnek yanıtlar
Sorun ŞeffaflığıHalka açık bilinen sorunlar ve yol haritasıDürüstlük > mükemmellik
Geri Ödeme/Kullanım Koşulları Netliğiİade süresi, koşulları, lisans koşullarıKaranlık desen yok
Test KanıtıHazırlık videosu, performans metrikleri, çerçeve listesiDaha da iyisi: demo sunucu
Güvenlik HijyeniSunucu tarafı kontrollerden, hassas anahtarlardan, eval'den bahsederDenetimler hakkında sor
Uyumluluk PolitikasıESX/QBCore/QBOX belirtildi, adaptörler, sürüm matrisiDesteklenen yapılar durumu
Fiyatlandırma ve DeğerKarmaşıklık için adil, bağımlılık ödeme duvarı yokEk satış tuzaklarına dikkat edin

Kriter Puanı (0-50):

  • 40–50: Güçlü — tercih edilen satıcı
  • 30–39: Kabul edilebilir — izle
  • 20–29: Zayıf — dikkatli ilerleyin
  • <20: Kaçının

Profesyonel İpucu: Saygın pazarlarla çapraz referans yapın. Buradan başlayın: En İyi Tebex Mağazaları.


Bölüm 5 — Bakım Kılavuzu (Gönderdikten Sonra)

  1. Sürüm sabitleme: kilit betik sürümleri + bağımlılık sürümleri (örneğin, oxmysql, ox_lib).
  2. Önce staging: tüm güncellemeler şuraya gelir Test Şehri; kabul kontrol listesini tekrar çalıştır.
  3. Yedeklemeler ve geri alma: Her güncellemeden önce DB anlık görüntüsü + kaynak dosyaları. Bir Rollback.md tam adımlarla.
  4. CI duman testi (isteğe bağlı, önerilir): başsız istemci bağlantısı + ana akışları vurmak için komut makrosu; sunucu konsolunu hatalar için ayrıştırın.
  5. Operasyonel metrikler: her betik için basit bir defter tutun: ortalama resmon (boşta/aktif), oturum başına hata sayısı, olay notları.
  6. Değişiklik günlüğü disiplini: satıcı değişiklik günlükleri isteyin; kendi entegrasyon notlarınızı tutun.
  7. Zamanlanmış etkinliklerin riskini azaltın: Yoğun saatler dışında güncelleyin; bakım pencerelerini duyurun.

Bölüm 6 — Kopyalayabileceğiniz Şablonlar

A. Test Planı (betik başına)

# Script Test Plan — <name> <version>

## Context
Framework(s): ESX/QBCore/QBOX
Dependencies: oxmysql vX, ox_lib vY, PolyZone vZ
DB Migrations: yes/no
Escrow: yes/no

## Functional Cases
- [ ] Case 1:
- [ ] Case 2:
- [ ] Negative 1:

## Performance
resmon idle: ____ ms
resmon active: ____ ms (scenario: ______)

## Security Checks
- [ ] All server events validate source/perm/input
- [ ] Rate limits present
- [ ] No client-trusted money/inventory mutations

## Logs & Errors
Paste snippet (server + F8): 

## Result
Pass/Fail + Notes

B. Rollback.md (iskelet)

# Rollback — <date> <script> <from→to>

1) Disable script: `stop <resource>`
2) Restore resource files from backup: <path>
3) Restore DB snapshot: <path/command>
4) Restart FXServer
5) Verify: console clean, perf normal, flows ok

C. Sorun Şablonu

**Summary**
What happened vs expected, with timestamps.

**Repro Steps**
1) ...
2) ...

**Env**
Artifact build:
Framework & versions:
Script version:
Other deps:

**Logs**
Server console:
F8:

**Attachments**
Screens/video if possible.

Bu Kılavuzu Etkin Bir Şekilde Kullanma

  1. Bootstrap Test Şehri bir kez, temiz tutun.
  2. Her aday betik için:
    • İçine bırak resources/custom/, şurada etkinleştir server.cfg.
    • Çalıştır Kabul Kontrol Listesi.
    • Hesapla Risk Puanı.
    • Satıcıyı şununla doğrulayın: Satıcı Değerlendirme Tablosu.
  3. Geçerse, staging'e birleştirin; geçmezse, düzeltmeler isteyin veya vazgeçin.

Daha fazla test kılavuzuna mı ihtiyacınız var? Learn how to measure script performance with Resmon in FiveM, fix sunucu iş parçacığı tıkanıklığı uyarıları, and build the Part 1 test server with Docker for FiveM.

After the test workflow is ready, compare the exact framework, dependencies, delivered files and setup notes in the FiveM scripts marketplace.