GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

[RAGE-MP] Skin Oluşturmak & Entegre Etmek

Başlatan Krips Je, 22 Nisan 2025, 00:51:00

« önceki - sonraki »

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

Krips Je

Merhaba, ben Krips.

Bu konuda sizlerle RageMP üzerinde özel skin (karakter modeli) ekleme ve oyuncunun bu skinleri seçip kullanabileceği bir sistem kurmayı baştan sona detaylıca anlatacağım.

Bu sistemde sadece dosyayı at kullan mantığından ziyade, sunucu tarafı, client tarafı ve HTML tabanlı kullanıcı arayüzünün birbiriyle nasıl haberleştiğini, hangi mantıkla çalıştığını ve potansiyel hatalardan nasıl kaçınacağınızı öğreneceksiniz.

Hazırsanız başlayalım. :oku2:



1. Skin Dosyalarının Hazırlanması

Öncelikle kullanmak istediğiniz skinin .ydd, .ytd, .ymt gibi oyun modeli dosyalarının elinizde bulunması gerekiyor. Bu dosyalar genellikle .zip veya .rar arşivleri içinde gelir.

İzlemeniz gereken yol şu şekilde;

- Her skin için ayrı bir klasör oluşturun. Örneğin: krips_skin
- Bu klasörün içerisine sadece model dosyalarını (.ydd, .ytd, .ymt) koyun.
- Skin dosya isimlerinde boşluk veya Türkçe karakter kullanmayın.
- Klasör adıyla model isminin aynı olması önerilir (örnek: klasör adı krips_skin, dosya adı krips.ydd)

Hazırladığınız bu klasörleri client_packages/skins/ altına koyacağız.



2. Skin Dosyalarının Cliente Tanıtılması

Skin dosyalarının client tarafında düzgün şekilde yüklenebilmesi için aşağıdaki adımları uygulayın;

- client_packages içerisinde skins adında bir klasör oluşturun.
- Hazırladığınız her skin klasörünü buraya yerleştirin.
- Client-side JS dosyanızda bir event tanımlayarak, oyuncunun modelini değiştirmesini sağlayın.

PAWN Kodu: Seç
// client_packages/skinChanger.js

mp.events.add("setCustomSkin", (skinName) => {
const modelHash = mp.game.joaat(skinName);
mp.players.local.setModel(modelHash);
});

Bu kod, sunucudan gelen bir skin adını alıp oyuncunun modelini değiştirir.



3. Sunucu Tarafında Skin Komutu

Sunucu tarafında oyuncudan gelen skin talebini yakalayacak bir event tanımlıyoruz. Bu sayede oyuncu UI üzerinden skin seçtiğinde, model değişimini hem kontrol edebilir hem de istenirse veritabanına kayıt edebiliriz.

PAWN Kodu: Seç
// server-side

mp.events.add("server:selectSkin", (player, skinName) => {
player.call("setCustomSkin", [skinName]);
});

Bu örnekte, clientden gelen skinName doğrudan setCustomSkin eventine iletiliyor.

İstersen bu noktada sunucuda whitelist, cinsiyet kontrolü veya erişim izni gibi sistemler de kurabilirsin sana kalmış birşey  :hm:



4. HTML UI Sistemi ile Skin Seçme

Oyuncunun görsel bir arayüz üzerinden skin seçebilmesi için HTML kullanacağız. RageMP'de HTML UI sistemi gömülü Chromium tarayıcısı ile çalışır. Yani oluşturduğumuz HTML dosyaları aslında bir web sayfası gibi çalışır.

Arayüz Dosyasını Oluşturmak için şunları yap;

client_packages/ui/index.html yolunda bir dosya oluşturun ve içerisine şunu yazın:

PAWN Kodu: Seç

<!DOCTYPE html>


<html lang="tr">
<head>
  <meta charset="UTF-8">
  <title>Skin Seçimi</title>
  <script>
    function selectSkin(skinName) {
      if (typeof mp !== 'undefined') {
        mp.trigger("server:selectSkin", skinName);
      } else {
        console.log("mp.trigger çalışmıyor, test modundasın.");
      }
    }
  </script>
</head>
<body style="background-color:#1e1e1e; color:white; text-align:center; padding-top:80px;">
  <h1>Skin Seçimi</h1>
  <button onclick="selectSkin('krips')">Krips Skin</button>
  <button onclick="selectSkin('vagos')">Vagos Skin</button>
  <button onclick="selectSkin('cop')">Polis Skin</button>
</body>
</html>


Bu arayüzde 3 farklı skin seçeneği sunuluyor. Her butona tıklanıldığında ilgili skin adı sunucuya mp.trigger ile gönderiliyor.

HTML UI yi Oyuncuya Açmak için;

Client-side tarafında bu HTML dosyasını göstermek için aşağıdaki kodu yazmalısın.

PAWN Kodu: Seç
// client_packages/skinUI.js

let browser = null;

mp.events.add("showSkinUI", () => {
if (browser === null) {
browser = mp.browsers.new("package://client_packages/ui/index.html");
mp.gui.cursor.visible = true;
}
});

Sunucu tarafında bu UI yi açtırmak için şu komut kullanılabilirsin;

PAWN Kodu: Seç
player.call("showSkinUI");



5. FPS ve Performans Uyumlu Kullanım

Bu sistemde dikkat etmeniz gereken bazı kritik noktalar var;

- Her yeni UI açışta mp.browsers.new kullanmak yerine, bir kez açıp yeniden kullanmak daha iyidir.
- UI kapanacağı zaman mutlaka destroy edilmelidir. Örnek;

PAWN Kodu: Seç
if (browser !== null) {
browser.destroy();
browser = null;
mp.gui.cursor.visible = false;
}

- Skin değiştirdikten sonra model yüklenme süresi boyunca oyuncuyu dondurmak veya geçici siyah ekran efekti vermek kullanıcı deneyimini iyileştirir.
- UI açıkken chat, ESC, F1 gibi kontrolleri devre dışı bırakmak mantıklıdır.



Final.

Skin sistemi RageMP'de stabil çalışması için sadece model dosyasını koymak yeterli değildir. Gerçekten düzgün ve kullanıcı dostu bir sistem için

- Skin dosyalarını klasörlü ve isimli şekilde düzenle.
- Client, server ve UI taraflarının birbirine nasıl veri gönderdiğini anla.
- HTML UI ile kullanıcıya anlaşılır bir arayüz sun.
- Gerektiğinde model değişimi sonrası animasyon, dondurma, efekt gibi UX detaylarını uygula.

Takipte kal, görüşlerini ve önerilerini mutlaka yaz. :serefe:



"Kodunu yaz, gerisini compiler düşünsün." - Meçhul Yazılımcı
    

Krips Je

Ek Anlatım;



Kıyafet Eklemek ile Skin Eklemek Arasındaki Fark Nedir?

RageMP de genelde iki farklı karakter düzenleme yöntemi vardır;
- Özel Skin (Ped Modeli) Eklemek için; Tek parça model olarak çalışır. Mesela bir hayvan modeli, özel karakter gibi.
- Kıyafet (Component) Eklemek için; Mevcut MP karakterler üzerine üst, alt, saç, aksesuar gibi parçaları giydirmektir.

Bu ikisi birbirinden tamamen farklıdır.

Skin modeli eklendiğinde oyuncunun tüm görünümü tek parça olarak değişir. Ama kıyafet eklendiğinde, sadece seçili bölgeler (örneğin tişört veya pantolon) değişir. Bu sebeple kıyafet eklemek daha esnektir ama aynı zamanda biraz daha karmaşıktır.

OpenIV Kullanarak Kıyafet Dosyası Çıkartmak

Kıyafet dosyaları .ydd, .ytd, .yft, .ymt gibi uzantılara sahip olur ve genellikle oyun içerisindeki karakter sistemine uygun olarak yerleştirilmesi gerekir.

OpenIV ile kıyafet ekleme süreci şöyle işler;

- OpenIV programını aç ve GTA V mod klasörünü seç.
- x64v.rpf, x64w.rpf, update/x64/dlcpacks gibi klasörlerdeki mp_m_freemode_01 ve mp_f_freemode_01 karakter dosyalarını bul.
- Bu karakterler MP (multiplayer) karakterleri olduğu için tüm component sistemleri buraya bağlıdır.
- .ydd dosyaları modeldir, .ytd dosyaları ise texturedir.
- Kıyafet modunu indirip .ydd ve .ytd dosyalarını bu sistemin içinde uygun slotlara göre yerleştirmen gerekir. Örneğin mesela;

- jbib_004_u.ydd üst gövde
- lowr_008_u.ydd alt gövde
- hair_005_u.ydd saç modeli

DipNot: Kıyafetler belirli slotlara göre çalışır. Slotlar çakışırsa görünmez olabilir ya da eski kıyafetlerin üstüne biner.


OpenIV ile Düzenlenen Dosyaları RageMP ye Aktarma

Kıyafet dosyalarını aldıktan sonra, özel bir dlc.rpf paketi oluşturman gerekir. Bunu RageMP de aşağıdaki şekilde yükleyebilirsin.
- client_packages klasöründe bir dlc klasörü oluştur.
- Kıyafet modlarını burada kendi klasörüne koy.
- İçerisine stream, setup2.xml ve content.xml dosyalarını yerleştir.
- client-side scriptte şu kodla yükleme yapılabilir;

PAWN Kodu: Seç
// Client tarafında özel DLC load etme
mp.game.streaming.requestNamedPtfxAsset("dlc_myclothes");

Gerçek örneklerde requestNamedPtfxAsset yerine doğrudan kıyafetler, component slotlarıyla beraber setComponentVariation fonksiyonuyla giydirilir yani;

PAWN Kodu: Seç
mp.players.local.setComponentVariation(11, 4, 0, 2); // Üst gövde

Burada 11 = üst gövde slotu, 4 = kıyafet ID'si, 0 = texture varyantı.

Kıyafetleri UI Üzerinden Seçilebilir Hale Getirmek

Vue.js veya HTML arayüz ile oyuncuya kıyafet seçme imkanı sunmak istiyorsan, aşağıdaki gibi bir sistem oluşturabilirsin.

PAWN Kodu: Seç
Tişört 1
Pantolon 2

Server tarafında alınan verileri cliente direkt aktar;

PAWN Kodu: Seç
// server-side
mp.events.add("server:wearClothes", (player, compId, drawableId, textureId) => {
player.call("client:applyClothes", [compId, drawableId, textureId]);
});

Client tarafında uygulama yapmak için;

PAWN Kodu: Seç
// client-side
mp.events.add("client:applyClothes", (compId, drawableId, textureId) => {
mp.players.local.setComponentVariation(compId, drawableId, textureId);
});


Sonuç ve Tavsiyelerim Nedir?

- Skin sistemleri tek parça modelle çalışır, daha az uğraştırır ama özelleştirilemez.
- Kıyafet sistemleri çok parçalıdır ama karakteri kişiselleştirme imkanı verir.
- Kıyafetler için OpenIV bilgisi şart. Slotlar, texture varyantları dikkat ister.
- UI ile entegre sistem kurarsan hem kullanıcı deneyimi artar, hem hatalar azalır.

"Kodunu yaz, gerisini compiler düşünsün." - Meçhul Yazılımcı