- Katılım
- 4 yıl 6 ay 11 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ı: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;
- Otomatik otomatik tamamlama
- Güçlü C # özellikleri
- Nuget goodies (Birim testi için Kitaplıklar, JSON için vb.)
- 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.
- using static CitizenFX.Core.Native.API;Betiğinizin üst kısmına ekleyerek , Lua'daki gibi yerel işleve erişebilirsiniz.
- 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şturmaArtı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)
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
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!
İ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.
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.
Ş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
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
Linkleri,görmek için
Giriş yap veya üye ol.