Neler yeni

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Türkiye'nin İlk ve tek FiveM forum adresi

Forum adresimize hoş geldin FiveMTürk olarak amacımız siz değerli kullanıcılarımıza en aktif fikir ve paylaşım platformu sunmak bir yana en güvenilir şekilde alışveriş yapabileceğiniz bir platform sunmaktır.
DF DF
DF DF
DF DF

Rehber C # Kurulumu ve Temel bir Kaynak Oluşturma

MiddleStonks

Üye
FT Kullanıcı
Katılım
3 yıl 11 ay 8 gün
Mesajlar
440
Discord
MiddleStonks#1877
C # kullanarak nasıl kaynak yaratılacağına dair herhangi bir kılavuz bulamadığım için (en azından bu forumda) C # ortamını nasıl düzgün bir şekilde kurululacağını ve onunla basit bir komut dosyası oluşturmayı öğreteceğim. Bunu yapmak zor değil.

Amacım C # ile ilgili temel bilgilerin çoğunu kapsamaktır. (Kurulum aşamasında problem veyahut bir yerde anlamadıysanıza discord veya konunun altına mesaj atmanız yeterlidir.) Bu konuya girmeden önce, C # kullanmanın bazı artılarını ve eksilerini göz önünde bulundurun;

Artıları:
  • Otomatik otomatik tamamlama
  • Güçlü C # özellikleri
  • Nuget goodies (Birim testi için Kitaplıklar, JSON için vb.)
Eksikleri:
  • Kurulum için ekstra çalışma
  • Önceden programlama deneyimine sahip olmadığınızda girmek daha zordur

C # kullanmanın, lua kullanmaktan bazı farklılıkları vardır, temel farklar şunlardır:
  • C # temsilciler kullanır.
    • BaseScript, Tick olayına abone olmamızı sağlar
    • Olay işleyicileri aynı zamanda temsilcilerdir.
  • "Büyülü" yerel işlevler yok.
    • Function.Call (hash, argümanlar) kullanarak çağırabiliriz
    • Statik bir yönerge yaparsınız.
  • Ortak varlıklar için veri türleri ve C # api'de daha fazlası.
    • Pedleri, oyuncuları ve daha fazlasını içerir
    • Nesnenin kendi önceden tanımlanmış işlevleri vardır, yararlı olabilir.
  1. using static CitizenFX.Core.Native.API;Betiğinizin üst kısmına ekleyerek , Lua'daki gibi yerel işleve erişebilirsiniz.
Ön koşullar
  • Sunucu ve istemci dosyalarına erişim.
  • Visual Studio yüklemesi (Visual studio 2017 önerilir).

Kurulum

1) Kütüphane edinme

Öncelikle iki kitaplığa ihtiyacımız var, ilk kitaplık sunucu dosyalarında (yapılarda) bulunur:
[server-path]/citizen/clr2/lib/mono/4.5/CitizenFX.Core.dll

Dosyayı bulabileceğiniz bir yere kopyalayın ve yeniden adlandırın CitizenFX.Server.dll
Kitaplık, sunucuya özgü tüm işlevleri içerir.


İkinci dosya istemcide bulunur:

%localappdata%/FiveM/FiveM Application Data/citizen/clr2/lib/mono/4.5/CitizenFX.Core.dll
Dosyayı bulabileceğiniz bir yere kopyalayın ve yeniden adlandırın CitizenFX.Client.dll


2) Visual Studio'da proje oluşturma

Artık Visual Studio'da kendi kütüphanelerimizi yapmamız gerekiyor, boş bir çözüm yapıyor olacağız ve projeleri kendimiz ekleyeceğiz. Öncelikle, Visual Studio başlangıç sayfasında “Create new project” e tıklayın ve “Blank solution” ı seçin.

Şahsen proje dosyalarımı kaynak klasörüne koymayı seviyorum (yani /resources/basic-resource/source/[project-files], bu şekilde dll'yi herhangi bir kodlanmış yol olmadan doğrudan doğru klasöre oluşturabilirsiniz)

47134
Devam etmek için tamam'a basın. Yeni bir ekran açılmalıdır. Şimdi Solution [solution-name]-> Ekle -> Yeni Proje'ye sağ tıklayın (aşağıdaki resme bakın). Şimdi 3 proje yapmak istiyoruz (veya sadece iki, size bağlı). Üç proje de "Sınıf Kitaplığı (.NET Framework)" olmalı ve aşağıdaki gibi adlandırılmalıdır (BasicResource'u kendi adınızla değiştirin):
  • BasicResourceShare
  • BasicResourceClient
  • BasicResourceServer
BasicResourceShared projesi, istemci ve sunucu arasında paylaşılan tüm kodu tutacaktır.
BasicResourceClient tüm istemciye özel kodu
tutacaktır BasicResourceServer tüm sunucuya özel kodu tutacaktır
.

3) Projelerin yapılandırılması
FX sunucusunun kitaplıkları yükleyebilmesi için, derleme adının önünde “.net” olması gerekir. Bu, bir projenin özelliklerine gidip derleme adından sonra .net ekleyerek yapılabilir. Bunu 3 proje için de yapmanız gerekiyor!

47139

47140

İsteğe bağlı: Kaynak koda sahipseniz, kitaplıkları doğrudan doğru konuma oluşturabilirsiniz. Bunu mutlak yollarla da yapabilirsiniz, ancak bunu bir kaynak kontrolüne koyduğunuzda veya projeyi başka biriyle paylaştığınızda bozulacağı için yapmamanızı şiddetle tavsiye ediyorum.

Şimdi zaten mülklerde olduğunuzu varsayarsak, "build" sekmesine tıklayın. Altta bir "çıktı" bölümü ve çıktı yolu görüyorsunuz. Yolu şu şekilde değiştirin: ..\..\
Bu, temelde "iki klasör geri git" anlamına gelir.



47142
4) Referans eklemek
Referanslar, istemci ve sunucu klasöründen çıkardığımız kütüphanelerdir. Referans eklemek için projeyi açıp “Referans maddesine” sağ tıklayıp “Referans Ekle” yi seçebilirsiniz.
Şimdi göz at sekmesine basın ve Gözat… düğmesine tıklayın ve iki kitaplığı ekleyin. Kontrol edilmediklerinden emin olun.


47143

47144

Şimdi müşteri için CitizenFX.Client.dll'yi eklemek istiyorsunuz. CitizenFX.Server.dll eklemek istediğiniz sunucu için. Bu, Referans Ekle ile yapılır -> Dahil etmek istediğiniz kütüphanenin onay kutusunu işaretleyin. Paylaşılan projede ikisi de olmamalıdır. Sunucu ve istemci projesinde, paylaşılan kitaplığı da (BasicResourceShared proje kitaplığı dosyası) eklemek istiyorsunuz.

Temel bir kaynak oluşturmak
1) Temel komut dosyası
C # ile herhangi bir şey oluşturmak için, önce BaseScript'ten sapmalıyız. Bu komut dosyası, "CitizenFX.Core" ad alanında bulunur.
Metin şunun gibi görünecektir:

C#:
using CitizenFX.Core;

namespace BasicResourceClient
{
    public class BasicResourceClient : BaseScript
    {
    }
}

Hem sunucu hem de istemci BaseScript'ten açılmalıdır. Temel komut dosyası, bir sunucu "işaretini" dinlemek gibi işlevler ekler. Bu, bir kurucu ekleyerek ve onay temsilcisine abone olarak yapılabilir:
C#:
using CitizenFX.Core;
using System.Threading.Tasks;

namespace BasicResourceClient
{
    public class BasicResourceClient : BaseScript
    {
        public BasicResourceClient()
        {
            Tick += OnTick;
        }

        private async Task OnTick()
        {
            await Delay(100);
        }
    }
}

Onay, delege bir Görev olduğundan, eşzamansız olarak ele alınmalıdır. Ekleyerek, await Delay(1000);devam etmeden önce 1000 milisaniye beklemesi tavsiye edilir.

2) Günün mesajı
Şimdi basit bir motd sistemi yapalım. Sunucu, sunucuya bağlanan istemciye günün mesajını gönderecektir. Sunucu, bağlanan herhangi bir oyuncuyu dinlemek için bir "olay işleyici" ekleyecektir. EventHandlers sınıfı, olay çağrıldığında geri aramayı çağırır ve argümanlar da iletir.
Sunucudaki uygulama şuna benzer bir şey olacaktır
:
C#:
    public class BasicResourceServer : BaseScript
    {
        public static string Motd = "Cake is a lie";

        public BasicResourceServer()
        {
            EventHandlers.Add("playerSpawned", new Action<Vector3>(OnPlayerSpawned));
        }

        private void OnPlayerSpawned([FromSource]Vector3 pos)
        {
            TriggerClientEvent(player, "sendMotd", Motd);
        }
    }

Yapıcıda yeni bir işleyici eklediğimizi görebilir ve olay alındığında hangi geri çağrının çağrılacağını söyleyebilirsiniz. playerConnecting, sunucu kodundaki dahili bir olaydır ve birisi bağlandığında çağrılmalıdır (duuh). Yapıcıda EventHandler'ı kaydederiz ve çeşitli argümanlarla bir geri arama yaparız. Geri çağırma OnPlayerConnecting, aynı argümanlara sahip işleve doğru işaret eder . [FromSource]Özniteliği fark etmiş olabilirsiniz , bu eklenmiştir, böylece sistem hangi parametrenin doldurulacağını bilir. playerDeğişken, olayı çağıran Player nesnesidir. Çağrılan her olayda kullanılabilir oyuncu nesnesi olacaktır, ihtiyacınız yoksa şu şekilde ihmal edebilirsiniz:
C#:
  public class BasicResourceServer : BaseScript
    {
        public static string Motd = "Cake is a lie";

        public BasicResourceServer()
        {
            EventHandlers.Add("playerSpawned", new Action<Vector3>(OnPlayerSpawned));
        }

        private void OnPlayerSpawned([FromSource]Vector3 pos)
        {
            TriggerClientEvent(player, "sendMotd", Motd);
        }
    }

İstemcide, gelen motd olaylarını dinlemek için aynısını yapabiliriz:
C#:
    public class BasicResourceClient : BaseScript
    {
        public bool hasReceivedMotd = false;

        public BasicResourceClient()
        {
            EventHandlers.Add("sendMotd", new Action<string>(ReceivedMotd));
        }

        private void ReceivedMotd(string motd)
        {
            if(!hasReceiveMotd)
            {
                TriggerEvent("chatMessage", "SYSTEM", new[] { 255, 0, 0 }, motd);
                hasReceiveMotd = true;
            }
        }
    }

Şimdi kodu yazmamız gerekiyor, tüm çözümleri derlemek için Ctrl + Shift + B tuşlarına basabilir veya çözüme sağ tıklayıp Build solution

47153
3) Kaynağı kurma
Her şeyin çalışması için __resource.lua eklememiz yeterlidir. Komut dosyası adlarını söylemek yerine, derleme adı + uzantıyı dahil etmek istiyoruz. Benim durumumda şuna benzer:
Kod:
client_script {
    "BasicResourceShared.net.dll",
    "BasicResourceClient.net.dll"
}
server_script {
    "BasicResourceShared.net.dll",
    "BasicResourceServer.net.dll"
}

Ve server.cfg'ye start komutunu ekleyerek:
Kod:
start basic-resource

 
DF
c# güzel bir dil gerçektende ama bunun yanı sıra resmon değeride bi o kadar fazla o yüzden dolayı belli eventler veriliyor .dll dosyalarında ve o eventler ile lua üzerinden yönlendiriliyor çünkü lua sencron çalıştığı için fazla işletim sistemine gerek duymuyor. bu yüzden dolayı hala günümüzde bile güncel oyunlarda lua görebiliriz. c++ ' ın yanı sıra...
 
DF

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Bu konuyu görüntüleyen kullanıcılar

Tema düzenleyici

Tema özelletirmeleri

Granit arka planlar

Lütfen Javascript'i etkinleştirin!Javascript'i etkinleştirin!