SourcePawn csgo pluginleri yapmakta kullandığımız bir dildir.SourcePawn Kurulum bu konuya bakarak bilgi sahibi olabilirsiniz. Derse başlamadan önce eğerhiç bir kodlama bilginiz yoksa bazı kavramlar öğrenmeniz gerekecektir.Bu kavramları CS 1.6 ile benzer olduğu için Temel Kavramlar konusuna bakarak bilgi sahibi olabilirsiniz.
Kütüphaneler Nedir ? Ne İşe Yarar? (Include)
Kütüphaneler sourcepawnda önceden hazılanmış fonksiyonları, stokları ve methodları ( bunu ileride anlatacağım ) içeren dosyalardır.Bu hazır kodları kullanmak için bu kodları içeren dosyaları çağırmamız gerekir.Bunu aşağıda gösterildiği şekilde yaparız.
#include <sourcemod>
Yukarıdaki kütüphane sourcepawndaki ana kütüphanedir.Bu kütüphane olmadan hiç bir plugini çalıştırmazsınız.SourcePawndaki tüm kodlara SourceMod API linkine tıklayarak ya da manuel olarak addons/sourcemod/scrpiting/include dizininde bulabilirsiniz.
Plugine Bilgi Ekleme
Yazdığınız pluginlere bazı bilgiler eklemek gerekmektedir.( Plugin Adı,Plugin Açıklaması,versiyonu vb).Yapımı basit ve kolaydır.
public Plugin myinfo =
{
name = "Plugin Dersi 1"
author = "Anil Can"
desciption = "Plugin dersi örnegi"
version = "1.0"
url = "https://forum.webdiyo.com"
}
Değişken Tanımlama ve Değer Atama
Değişenler kodlamanın temelini oluşturmaktadır.SourcePawnda değişken tanımlanırken 1.6ya göre daha gelişmiştir.Değişkenler türlerine göre başına tag alırlar.Örnek vermek gerekirse
int variable1 = 32
float varible2 = 5.0
char variable3[] = "Hello"
bool variable4 = false
Handle file = OpenDirectory( "addons/sourcemod/configs/maplist.cfg" ) Handle hakkında ayrı bir derste bilgi vereceğim
Değişken isimlendirme yaparken aşağıdakı kurallara uygun hareket etmelisiniz.
1-) Değişken isimleri yalnızca alfabetik karakterle başlayabilir.
2-) Değişkenlerde büyük küçük harf duyarı vardır.Yani int asd ve int ASD 2 farklı değişkendir.
3-) Değişkenlerde ilk karakter hariç rakam ve "_" kullanabilirisiniz ama bunların haricinde karakter kullanamazsınız.
4-) Değişken isimlendirirken boşluk bırakamazsınız.
5-) Değişkene verdiğiniz isimin bir anlam bağlantısı olmasına özen gösterin.Örnek vermek gerekirse "hosgeldin" şeklinde bir stringi değişkene atarken char welcome[] = "Hosgeldin" şeklinde yapmanızı öneririm.Yoksa sonra hem plugini okuyan için hem de sizin için zaman kaybı oluşturur.
Array Terimi( Diziler )
Bir çok değerin tek bir değişkenle tanımlandığı değişken çeşididir.
int numbers[5] = {3,6,9,12,15}
float vector[3] = {89.12 , 55,.43 , 67,12}
Şeklinde değişkenleri tanımlarız.Peki bu değişkenleri nasıl yazdığımız scriptlerde ulaşabiliriz.Her dizideki elemanın bir index değeri vardır.İndexi dizideki her elemanın o dizide karşı gelen bir nevi kimlik numarası diyebiliriz.Örnek vererek bu kavramı açıklayayım. numbers[ 1 ] 6'ya karşılık gelecektir.1 değeri bizim index değerimizdir.Şimdi aklınıza gelen index 1 neden dizideki 2. değişkene geldi diyebilirsiniz.Sebebi ise index 0 tan başlar ve eleman sayısının 1 eksiğine kadar devam eder yani son elemanın indexi 2 dir.Eğer numbers[5] yazarsanız plugininizde hata alırsınız.
String Terimi
String karakterleri depolayabildiğimiz bir değişken türüdür.Gösterimi aşağıdaki gibidir.
char my_string[] = "Hello"
char your_string[] = 'Welcome'
Array gibi string değişkenlerinde indexleri vardır.my_string[4] o harfine, your_string[5] m harfine karşılık gelmektedir.Ama bir farkları vardır.Stringlerin son indexi 0 a karşılık gelir.Yani my_string[5] ve your_string[7] değeri 0'dır.
Yorum Ekleme
Bazen yazdığınız puginleri diğer kullancıları bilgilendirmek veya pluginin gelişimi hakıından bilgi vermek için yorum ekleyebiliriz.Bunun koda bir etkisi yoktur.Eklentiyi kullanacak kişiye rahatlık sağlar.Yorum eklemenin 2 yolu vardır.Birinicisi yorumunuzu eklemeden önce // işaretini ekleyerek yapabilirsiniz.
// Örnek yorum yazımı
Ama bu sadece tek satıra yorum eklemenizi sağlar. Eğer yorumunuz birden fazla satırdan oluşuyorsa aşağıdaki yapıyla yorumunuzu ekleyebilirsiniz.
/* Örnek
yorum
yazımı
*/
Fonksiyonlar
Fonksiyonlar pluginimizde belirli kod parçacıklarıyla oluşturlmuş bir aksiyon gerçleştiren yapılardır.SourceModun içerisinde tanımlanmış fonksiyonlar olduğu gibi kendi fonksiyonlarını yaratabilirsiniz.Bazı fonsiyonlarda parametre olmazken bazı fonsiyonlarda parametre bulunur.Tüm fonksiyonlar bir değere dönmelidir.Pluginlerimiz başlatan fonksiyon OnPluginStart dır.
public void OnPluginStart()
{
}
Bir de parametresi olan bir fonskiyon OnClientConnected fonksiyonunu göstereyim.
public void OnClientConnected( int client )
{
Ama SourceMod 1.7 ile birlikte void anahtar kelimesi kullanıldığında fonkisyonlardaki bir değere dönme zorunluluğunu ortadan kaldırır.Fonksiyonlarla ilgili ayrıntılı bilgiyi ilerideki derslerde sizlere anlatacağım.
}
Yerel ve Global Değişkenler
Eğer bir değişken bir fonskiyonun bir karşılaştırma yapsının veya bir döngünün içerisinde tanımlanırsa bu değişken yerel değişken ( local variable ) olur ve koddan dışarı çıktığımızda o değişkenin bir anlamı kalmayacaktır.Global değişkenler ( global variable ) ise kodunuzun her yerde tanımlı bir değişkendir. Örnek vermek gerekirse
int variable1 = 5
public void OnClientConnected( client )
{
int variable2 = 10
}
variable1 bir global değişken olarak oluşturduk ve bu değişkeni script dosyamızın isteğimiz yerinde kullanabiliriz.Fakar variable2 sadece oluşturulduğu fonkisyonun içinde tanımlıdır.Fonksiyonun dışında çıktığımız zaman bu değişkeni kullanamayız.
Operatörler
Kodları yazarken çeşitli operatörlerden yararlanırız.Matematik operatörleri karşılaştırma operatörleri vb.
int a = 5
int b = 3
int c = 10
a * b = 15
a + b = 9
c / a = 2
c % b = 1 ( Buradaki operatör c değerinin b değerine bölündükten sonra kalan değerini verir.)
a - b = 2
Operatörleri kullanarak değişkenlerin değerlerini değiştirebiliriz.Bazı dillerin aksine sourcemod dinamik bir yapıya sahiptir.
a *=3 ( a artık 5*3 = 15 değerine değişti )
a += 4 ( a artık 5 + 4 = 9 değerine değişti )
Bazı operatörler ise 2 değişkeni karşılaştırır.
!= eşit değildir
== eşittir
< küçüktür
> büyüktür
<= küçük veya eşittir
>= büyük veya eşittir
Karşılaştırma Yapıları ( if else )
Karşılaştırma yapıları kodlarda çok sık kullanacağımız ve önemli bir yapılardır.Bu yapılarda verilen durumları sorgulayıp ona göre kodun çalışmasınız sağlar.Örnek vererek anlamanızı kolaylaştıralım.
int a = 5
int b = 10
if( a > b )
{
PrintToChatAll( "%i sayısı %i sayısından büyüktür", a, b )
}
else
{
PrintToChatAll( "%i sayısı %i sayısından küçüktür", a, b )
}
Önce % yapısını açıklayayım.Bu yapı değerleri döndürmemizi sağlar.Bu örnekteki %i integer değerleri döndürmemiz sağlar.
%f Ondalıklı sayıları döndürmemizi sağlar.
%s Karakterleri döndürmezi sağlar.
%i Tam sayıları döndürmezi sağlar.
%T Pluginimiz eğer multilanguage( birden fazla dil ) sahipse translations dosyasınını içindeki text dosyasını döndürür.
Eğer if yapısının içerisindeki ifade doğru ise 1. kodu eğere yanlış ise else yapısından sonraki kodu çalıştıracaktır.
Statik Değişkenler( Static Variable )
Statik değişkenler normal değişkenlerden farkı bir kez değer aldıktan sonra bu değerini değiştiremezsiniz.Eğer kodlarınızda değiştirmeyeceğiniz değişkenler var ise statik olarak kullanarak hafızadan kazanç sağlarsınız.
static int value1 = 10
Son Düzenleme: 21-04-2019, Saat: 12:35, Düzenleyen: Anıl Can.
Sadece CS:GO ekletisi yapıyorum 1.6 plugin isteklerine bakmıyorum.
Serverinize özel go eklentisi için steam üzerinden iletişime geçin
Steam : https://steamcommunity.com/id/cananil44
Serverinize özel go eklentisi için steam üzerinden iletişime geçin
Steam : https://steamcommunity.com/id/cananil44