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
Webailesi Portal Sistemi
Tasarım yapımcısı: WxTimer
Tasarım ismi: WebAilesi Yeşil
Tasarım sürümü: v3
Kullanım alanları & önemli bilgileri;
İndir;
Tasarım ismi: WebAilesi Yeşil
Tasarım sürümü: v3
Kullanım alanları & önemli bilgileri;
- Jailbreak Ts3 adreslerinde kullanılabilir.
Tasarım Görüntüsü

Bu içeriği görebilmek için kayıt olmanız gerekiyor!
FONKSİYONLAR
Bu yapıyı bir önceki derste anlamıştım.Anlamayanlar bir öncekir derse bakabilir.Şimdi konsol komudu eklemek için RegConsoleCmd komudunu kullanacağız.
Şimdi bu komut 1.6 register_clcmd ye göre daha gelişmiştir.Bu komudu konsola direk sm_degree ile çalışmakla beraber chata !degree /degree ile çalışmaktadır.Yani ilave bir chat komudu eklemenize gerek yoktur.Kullanıcı sm_degree komudunu çalıştırdığında CommandDegree publicini çalıştıracak.
İlk parametre kullanıcının indexi ikinci parametre ise sm_degree komudundan sonraki kaç adet terim kullanıldığına döner.Örnek vermek gerekirse kullanıcı sm_degree ali 23 webdiyo diyo bir komud girerse args değeri 3'e eşit olacaktır.Şimdi kullanıcı eğer eksik veya fazla parametre girerse eklentiyi durdurup kullanıcıya hata mesajı verelim.
Şimdi Plugin_Handled plugini durdurmamızı sağlar ve kodun ileriye gitmesini engeller.4 çeşit return değerimiz vardır.
Plugin_Continue Çağrıyı durdurur ama plugini çalışması devam eder.
Plugin_Changed Koddaki girdi veya çıktı değerleri yeniden değer vermenizi sağlar.
Plugin_Handled Çağrıyı durdurur hem de plugin çalışması durdurur.
Plugin_Stop Plugin_Handled farkı ilerideki komutları da durdurmanızı sağlar.
Kullanıcının yazdığı değeri bir değişkene kaydedelim.Kullanıcının yazdığırı değeri almak için GetCmdArg komudunu kullanacağız.
Şimdi komuttaki ilk paramtere kaçıncı argümanı aldığımızı belirler.Örnek verelim ss_heal nick 100 diye bir komut girildi.Eğer ilk parametreyi 2 olarak girersek 100 argümanı alıcaktır.2.parametre argümanın depolanacağı değişken, 3. parametre ise argümanın uzunluğu hesaplar.Not bu komut argümanı otomatik string olarak alır.sizeof otomatik stringin uzunluğunu hesaplanmasını sağlar. Değerimiz string olduğundan değişkeni float türüne çevirmemiz gerekiyor. Bunun için 2. değişken oluşturup bunu floata çevireceğiz.
Şimdi kodumuzun son kısmına geldik. Derece değerini grada çevirip kullanıcıyı bilgilendiren bir bilgi mesajı verelim.
İşte basit bir komutla girdiğmiz dereceyi grada çeviren bir plugin yazdık.Bu plugini eke koycam isteyenler incelebilir.
DÖNGÜLER( While, for, do while yapısı )
Bazen fonskiyonlardan işlemleri tekrar tekrar yapılması gerekir.Bunun için biz döngüleri kullanırız.Şimdi 0 dan 10 a kadar olan tüm doğal sayıların toplamını yazan bir fonksiyon yazacağım.Bunu ilkini döngü kulllanmadan yazacağım.
Şimdi bu şeklide yazılan scriptte fonkisyonun 10 kere çağırılmasına neden olur ve hafızda fazla yer kaplamsına neden olur.Böyle tekrar içeren yapılarda döngüleri kullanırız.Aynı fonksiyonu şu şekilde yazabiliriz.
Gördüğünüz gibi fonksiyonu birden fazla çağırmak yerine tek bir çağırmada hallettik.Şimdi döngünü nasıl yaıldığını ve nasıl çalıştığını anlatacağım.1. parametre değişkeni tanımladığımız bölümdür.2. paramtere ise durumun kontrol edildiği parametredir.Son parametre ise 2. paramteredeki durum sağlanıyorsa işlenen paramteredir.Şimdi örneği açıklamak gerekirse 10 a kadar sayıların toplamını veren değeri bir değişkene atadım.İlk eleman 0 son eleman ise kullanıcının girdiği değer şeklinde yazıldı.For yapısında 1. dönüşünde sum değişekininin i değeri kadar artti( yani i++= 1 ).Yani sum değişkeni değeri 1 oldu.2. dönüşünde gene aynı şekilde olacaktır. sum değereri i kadar artacak( 1 +2 = 3).Şeklinde devam edecektir.En sonunda döngünden çıkınca bir bilgi mesajı verdik ve g_sum global bir değişken olduğundan değerini 0 atadık.
while yapısı for döngüsüne göre daha basittir sadece tek bir paramtereye sahiptir.Parametetredeki değer false olana kadar döngü devam eder.
while( durum koşulu )
{
//Kod block kısmı
}
do while döngüsü tek farkı değeri false olsa bile en az içerisindeki 1 kez çalıştırır.
do
{
//Kod block kısmı
}
while( durum koşulu )
Bir önceki derste fonksiyonların ne olduğunu anlatmıştım. Eğer o dersi okumadaysanız Ders 1 linkine tıklayarak ulaşabilirsiniz.Şimdi yapacağımız kendi fonsiyonlarımızı nasıl kurabiliceğimizi göstereceğim.
Şimdi elimizdeki bir derece cinsinden açıyı bir grada dönüşütüren bir fonksiyon yazalım.Fonksiyonun döneceği değeri float ( integerde olabilir ama açılarda float almak daha ksin sonuç verir.) cinsinden olacağı için fonsiyon şu şeklide başlıyacak.
float DegreeToGrad( float degree )
{
}
Fonksiyonumuzu oluşturduk.Şimdi bir grad değeri veren bir değişken yaratalım.Sonra degree parametresini kullanarak gradı bulalım.
float DegreeToGrad( float degree )
{
float grad = ( degree * 10.0 ) / 9.0
}
Şeklinde grad değerini bulduk.Son yapacağmız işlem ise fonksiyonu bu değere döndürmesini sağlamaktır.
float DegreeToGrad( floar degree )
{
float grad = ( degree * 10.0 ) / 9.0
return grad
}
Şimdi oluşturduğumuz fonksiyonu nasıl kullanacağımıza dair bir örnek plugin yazalım.Konsolo sm_degree diye bir konsol komudu oluşturup bu fonksiyonu kullanalım.PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "Functions",
author = "Anil Can",
description = "Sample of Functions",
version = "1.0.0",
url = "https://forum.webdiyo.com"
}
public void OnPluginStart( )
{
}
Bu yapıyı bir önceki derste anlamıştım.Anlamayanlar bir öncekir derse bakabilir.Şimdi konsol komudu eklemek için RegConsoleCmd komudunu kullanacağız.
PHP Kod:
public void OnPluginStart( )
{
RegConsoleCmd( "sm_degree", CommandDegree );
}
PHP Kod:
public Action TestFloat( int client, int args )
{
}
İlk parametre kullanıcının indexi ikinci parametre ise sm_degree komudundan sonraki kaç adet terim kullanıldığına döner.Örnek vermek gerekirse kullanıcı sm_degree ali 23 webdiyo diyo bir komud girerse args değeri 3'e eşit olacaktır.Şimdi kullanıcı eğer eksik veya fazla parametre girerse eklentiyi durdurup kullanıcıya hata mesajı verelim.
PHP Kod:
public Action TestFloat( int client, int args )
{
if( args != 1 )
{
ReplyToCommand( client, "Eksik veya fazla terim yazdiniz" );
return Plugin_Handled;
}
}
Plugin_Continue Çağrıyı durdurur ama plugini çalışması devam eder.
Plugin_Changed Koddaki girdi veya çıktı değerleri yeniden değer vermenizi sağlar.
Plugin_Handled Çağrıyı durdurur hem de plugin çalışması durdurur.
Plugin_Stop Plugin_Handled farkı ilerideki komutları da durdurmanızı sağlar.
Kullanıcının yazdığı değeri bir değişkene kaydedelim.Kullanıcının yazdığırı değeri almak için GetCmdArg komudunu kullanacağız.
PHP Kod:
public Action CommandDegree( int client, int args )
{
if( args != 1 )
{
ReplyToCommand( client, "Eksik veya fazla terim yazdiniz" );
return Plugin_Handled;
}
char arg[ 32 ];
GetCmdArg( 1, arg, sizeof( arg ) )
}
Şimdi komuttaki ilk paramtere kaçıncı argümanı aldığımızı belirler.Örnek verelim ss_heal nick 100 diye bir komut girildi.Eğer ilk parametreyi 2 olarak girersek 100 argümanı alıcaktır.2.parametre argümanın depolanacağı değişken, 3. parametre ise argümanın uzunluğu hesaplar.Not bu komut argümanı otomatik string olarak alır.sizeof otomatik stringin uzunluğunu hesaplanmasını sağlar. Değerimiz string olduğundan değişkeni float türüne çevirmemiz gerekiyor. Bunun için 2. değişken oluşturup bunu floata çevireceğiz.
PHP Kod:
public Action CommandDegree( int client, int args )
{
if( args != 1 )
{
ReplyToCommand( client, "Eksik veya fazla terim yazdiniz" );
return Plugin_Handled;
}
char arg[ 32 ];
GetCmdArg( 1, arg, sizeof( arg ) )
float degree = StringToFloat( arg );
}
PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "Functions",
author = "Anil Can",
description = "Sample of Functions",
version = "1.0.0",
url = "https://forum.webdiyo.com"
}
public void OnPluginStart( )
{
RegConsoleCmd( "sm_degree", CommandDegree );
}
public Action CommandDegree( int client, int args )
{
if( args != 1 )
{
ReplyToCommand( client, "Eksik veya fazla terim yazdiniz" );
return Plugin_Handled;
}
char arg[ 32 ];
GetCmdArg( 1, arg, sizeof( arg ) )
float degree = StringToFloat( arg );
PrintToChat( client, "%f degree is equal to %f grad", degree, DegreeToGrad( degree ) );
return Plugin_Handled;
}
float DegreeToGrad( float degree )
{
float grad = ( degree * 10.0 ) / 9.0;
return grad;
}
İşte basit bir komutla girdiğmiz dereceyi grada çeviren bir plugin yazdık.Bu plugini eke koycam isteyenler incelebilir.
DÖNGÜLER( While, for, do while yapısı )
Bazen fonskiyonlardan işlemleri tekrar tekrar yapılması gerekir.Bunun için biz döngüleri kullanırız.Şimdi 0 dan 10 a kadar olan tüm doğal sayıların toplamını yazan bir fonksiyon yazacağım.Bunu ilkini döngü kulllanmadan yazacağım.
PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "Fonkisyonlar",
author = "Anil Can",
description = "Fonksiyon Ornegi 2",
version = "1.0.0",
url = "https://forum.webdiyo.com"
}
int g_sum = 0;
int g_count = 0;
public void OnPluginStart( )
{
RegConsoleCmd( "sm_sum", CommandSum );
}
public Action CommandSum( int client, int args )
{
if( args != 1 )
{
ReplyToCommand( client, "Eksik veya fazla terim yazdiniz" );
return Plugin_Handled;
}
char arg[ 32 ];
GetCmdArg( 1, arg, sizeof( arg ) );
int value = StringToInt( arg );
SumInteger( value );
return Plugin_Handled;
}
int SumInteger( int g_value )
{
g_count += 1;
g_sum += g_count;
if( g_count == g_value )
{
PrintToChatAll( "%i'a kadar sayilarin toplami %i'dir.", g_value, g_sum );
g_sum = 0
}
else
{
SumInteger( g_value );
}
}
PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "Fonkisyonlar",
author = "Anil Can",
description = "Fonksiyon Ornegi 3",
version = "1.0.0",
url = "https://forum.webdiyo.com"
}
int g_sum = 0;
public void OnPluginStart( )
{
RegConsoleCmd( "sm_sum", CommandSum );
}
public Action CommandSum( int client, int args )
{
if( args != 1 )
{
ReplyToCommand( client, "Eksik veya fazla terim yazdiniz" );
return Plugin_Handled;
}
char arg[ 32 ];
GetCmdArg( 1, arg, sizeof( arg ) );
int value = StringToInt( arg );
SumInteger( value );
return Plugin_Handled;
}
int SumInteger( int g_value )
{
for( int i = 0; i <= g_value; i++ )
{
g_sum += i;
}
PrintToChatAll( "%i'a kadar sayilarin toplami %i'dir.", g_value, g_sum );
g_sum = 0
}
while yapısı for döngüsüne göre daha basittir sadece tek bir paramtereye sahiptir.Parametetredeki değer false olana kadar döngü devam eder.
while( durum koşulu )
{
//Kod block kısmı
}
do while döngüsü tek farkı değeri false olsa bile en az içerisindeki 1 kez çalıştırır.
do
{
//Kod block kısmı
}
while( durum koşulu )
Bu rehberde Notepad++ ile bir cs go eklentisinin nasıl compile edileceği hakkında bilgiler yer almaktadır.Öncelikle
1-) Notepad++ indir bu linkten notepad++ indirip kurun.
2-) Eklentiler/Eklentiler yöneticisi/Uygun kısmında NppExec adlı eklentiyi kurun ve programı yeniden başlatın.
3-) Sourcemod indir bunu indirin ve nereye kurmak istiyorsanız oraya kurun.
4-) Notepad++ F6 tuşuna basın( belki sizde farklı bir tuş olabilir.Öğrenmek için Çalıştır/Kısayolu değiştir/Eklenti Komutları/Execute bakarak öğrenebilirsiniz.).

Resimde örneğini verdiğim şekilde olacak.
SET compiler = C:\cs_go\csgo\addons\sourcemod\scripting\spcomp.exe ( Compilerin bulunduğu dosya )
SET include = C:\cs_go\csgo\addons\sourcemod\scripting\include (Kütüphanelerin bulunduğu dosya )
SET output = C:\Users\anilc_000\Desktop\$(NAME_PART).smx ( Compile olan dosyalrın nereye gideceği yol ama sakın $(NAME_PART).smx bu kısmı unutmayın )
NPP_SAVE
"$(compiler)" -i"$(include)" -o"$(output)" "$(FULL_CURRENT_PATH)" ( Burayı değiştirmeyin )
Tasarım Yapımcısı: Pizza
Tasarım İsmi: Tesla S
Tasarım Sürüm: 1.0
Kullanım Alanları & Önemli Bilgileri;
Rar Şifresi:
Yeni sürüm;
Tasarım İsmi: Tesla S
Tasarım Sürüm: 1.0
Kullanım Alanları & Önemli Bilgileri;
- Genel CS 1.6 Teamspeak 3 Adresleri
Tasarım Görüntüsü:

Rar Şifresi:
Bu içeriği görebilmek için kayıt olmanız gerekiyor!
Yeni sürüm;
Yedek ismi: İncold Jailbreak Yedek
Yedek yapımcısı: WxTimer & Raskoln.
Yedek sürümü: v2
Yedek testi: Yapıldı,Başarılı.
Kullanım Alanları & Önemli Bilgiler;
Yedek yapımcısı: WxTimer & Raskoln.
Yedek sürümü: v2
Yedek testi: Yapıldı,Başarılı.
Kullanım Alanları & Önemli Bilgiler;
- TS3 JaiLBreaK
Ekran görüntüsü & video


İndir;
Komut Oluşturma
Bu derste sourcemod'da nasıl kullanıcı ve admin komudu oluşturmayı göstereceğim.Şimdi kullanıcının kendi ipsini öğrenmesini sağlayan bir eklenti yazalım.!myip yazınca kullanıcı kendi ipsini öğrensin.Bunun için bir konsol komudu oluşturmamız gerekiyor.RegConsoleCmd komudunu kullanarak oluşturalım.
Sourcemod da amxmodx e göre farkı say komudu için ekstra bir komut girmenize gerek yoktur.Bu komutla !myip , .myip veya konsola sm_myip ile kullanıcı komudu çalıştıracaktır.1. parametre kullanıcının gireceği komut, 2. paramtetre komut girildikten sonra çalışacak fonksiyon ismi, 3. parametre ise komut hakkında bilgi vermedir.Şimdi yapacağımız şeyler kullanıcı eğer sm_myip den sonra bir arguman girerse plugini durdurup doğru kullanımı gösterelim.GetClientIp ile kullanıcının ipsini alıp print edelim.
Böylece pluginimiz bitti.Kullanıcı !myip yazınca kendi ipsini öğrendiği bir eklenti yazdım.Şimdi ise bir admin komutu nasıl yapılacağına dair bir örnek plugin yazalım.Şimdi bir respawn plugini yazalım.Bunun için RegAdminCmd komudunu kullanacağız.
Şimdi komudumuzu yarattık.Komuttan sonraki yazdığımız ismi GetCmdArg komuduyla yakalıyacağız.Bu komutla ilgili önemli bir özellik var.Bu komut alınan verileri stringe çevirir.Eğer bir sayı değeri kullanmak istiyorsanız daha sonra bu değeri çevirmeniz gerek fakat biz zaten string isteiğimiz için sorun yok.Adminin yazdığı nick otomatik tanımlayacak komut kullanacağız.FindTarget komuduyla hedefimizi yakalayacağız.Fakat eğer hedef yakalama başarısız olduysa bunu bir if koşuluyla kontrol edip durdurualım.Ayrıca sadece ölü oyuncuları canlandıralım bu komutla.O yüzden 2. if koşulu oluşturalım.Kodumuz aşağıdaki gibi olacaktır.
GetCmdArg Kullanımı
Örnek vererek anlatıyım. Kullanıcı sm_haydar ali 3 diye komut girdi.Dediğim örnek yukarıdaki örnekten bağımsızdır.Fonkisyonun içindeki int args girilen tüm ifadeyi alır.GetCmdArg ile biz bunu parçalara ayırırız.İlk parametreyi 0 girersek "sm_haydar", 1 girersek "ali" 2 girersek ise "3" ü alır.Dikkat etmeniz gereken durum ise tüm ifadeler string türünde alınır.2. parametre ise depolanacağı değişken ve 3. değişken ise stringin maksimum uzunluğu.sizeof otomatik stringin uzunluğunu hesaplar.
Burada kafanızı karıştırabilecek kısım %N olan bölüm olabilir.Çünkü bu format şekli 1.6'da mevcut değil.%N clientin ismini çevirmemizi sağlayan bir dönüşümdür.Şimdi komudumuz düzgünce çalışıyor fakat pratik değil.Eğer topluca canlandırmak isteğimizde bu komut işe yaramazdır.Bunu yapmamızı sağlayan tek bir komut vardır.ProcessTargetString komuduyla hem tek tek hemde topluca komud uygulamamız sağlar.Bu şekile dönüştürmeden önce multiplelanguage( çokludil ) pluginlerin uzantısı olan translation dosyaları nasıl oluşurulur onu anlatmam gerekiyor.
MultiLanguage Pluginler
MultiLanguage pluginler eklentinizdeki chat menu vs. kısmı bir çok dilde görüntülenmesini sağlar. Plugine entegre etmeden önce bir translation textin nasıl olması gerektiğini anlatacağım.Bu dosyalar key-value( anahtar değer ) formatındadır.

Şeklinde oluşturulur.Eğer döndürelecek bir kısım varsa ( %s %i ) gibi bunu eklemenin yöntemi ise

Bu şekilde format yapısı yapılır bu formatların numaralandırması pluginde yazılan sıraya bağlıdır.Şimdi ise pluginde nasıl yapılcağını anlatalım.İlk Önce bu dosyları yükletmemiz gerekir.Bunun için ise LoadTranslations( "Dosya İsmi" ) komudunu kullanacağız.Print ederken ise ilk örnekteki "Welcome" bizim anahtar kelimemizdir.Pluginde şu şekilde olacaktır.PrintToChat( client, "%t", "Welcome" ). Görüldüğü üzere %t Translation kısmını döndürür.
Şimdi örneğimize geri dönersek şimdi pluginimize translation kısımlarını ve toplu komut ekliyoruz.
ProcessTargetString Kullanımı
Bu yapı ileride çok kullancağımızı gelişmiş ve kullanımı kolay bir yapıdır.Paramterlerini tek tek açıklamya başlayalım.1. parametre hedefimizi belirlememizi sağlar.2. parametre komudu çalıştıran kişi, 3. parametre hedefin kaç kişi olduğunu belirler,4. parametre hedeflenebilecek maksimum oyuncu sayısı, 5. parametre hedefleri geçirebilidğimiz bazı filtereler örneğin COMMAND_FILTER_DEAD ile sadece ölü oyuncuların geçebilceği bir filtre, 6. parametre hedefin ismi, 7. parametre ise hedef isminin maksimum uzunluğu ve son parametre ise dil dosyasının var olup olmadığını kontrol eder.
COMMAND_FILTER_ALIVE Canlı oyuncular filtrrden geçer.
COMMAND_FILTER_DEAD Ölü oyuncular filtreden geçer.
COMMAND_FILTER_CONNECTED Servere bağlı oyuncular filtreden geçer.
COMMAND_FILTER_NO_IMMUNITY Dokunulmazlığı yok sayar.
COMMAND_FILTER_NO_MULTI Toplu komud filtreden geçmez
COMMAND_FILTER_NO_BOTS Botlar filtreden geçmez.
Yaptığım tüm pluginleri eke koydum inceleyebilirsiniz.
Bu derste sourcemod'da nasıl kullanıcı ve admin komudu oluşturmayı göstereceğim.Şimdi kullanıcının kendi ipsini öğrenmesini sağlayan bir eklenti yazalım.!myip yazınca kullanıcı kendi ipsini öğrensin.Bunun için bir konsol komudu oluşturmamız gerekiyor.RegConsoleCmd komudunu kullanarak oluşturalım.
PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "IP",
author = "Anil Can",
description = "Kullanıcı Kendi IP ogrenir",
version = "1.0",
url = "https://forum.webdiyo.com/newthread.php?fid=99"
}
public void OnPluginStart( )
{
RegConsoleCmd( "sm_myip", MyIp, "Kendi ip numaranızı öğrenirsiniz" );
}
PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "IP",
author = "Anil Can",
description = "Kullanıcı Kendi IP ogrenir",
version = "1.0",
url = "https://forum.webdiyo.com/newthread.php?fid=99"
}
public void OnPluginStart( )
{
RegConsoleCmd( "sm_myip", MyIp, "Kendi ip numaranızı öğrenirsiniz" );
}
public Action MyIp( int client, int args )
{
if( args > 1 )
{
ReplyToCommand( client, "Kullanımı <sm_myip>" );
return Plugin_Handled;
}
char buffer[ 32 ];
GetClientIP( client, buffer, sizeof( buffer ) );
PrintToChat( client, "Senin IP NO : %s", buffer );
return Plugin_Handled;
}
Böylece pluginimiz bitti.Kullanıcı !myip yazınca kendi ipsini öğrendiği bir eklenti yazdım.Şimdi ise bir admin komutu nasıl yapılacağına dair bir örnek plugin yazalım.Şimdi bir respawn plugini yazalım.Bunun için RegAdminCmd komudunu kullanacağız.
PHP Kod:
#include < sourcemod >
public Plugin myinfo =
{
name = "Revive",
author = "Anil Can",
description = "Ölü oyuncuları canlandırma",
version = "1.0",
url = "https://forum.webdiyo.com/newthread.php?fid=99"
}
public void OnPluginStart( )
{
RegAdminCmd( "sm_rev", Admn_Revive, ADMFLAG_SLAY, "Ölü oyuncuları revlemenizi sağlar" );
}
PHP Kod:
#include < sourcemod >
#include < cstrike >
public Plugin myinfo =
{
name = "Revive",
author = "Anil Can",
description = "Ölü oyuncuları canlandırma",
version = "1.0",
url = "https://forum.webdiyo.com/newthread.php?fid=99"
}
public void OnPluginStart( )
{
RegAdminCmd( "sm_rev", Admn_Revive, ADMFLAG_SLAY, "Ölü oyuncuları revlemeniz sağlar" );
}
public Action Admn_Revive( int client, int args )
{
if( args < 1 )
{
ReplyToCommand( client, "<sm_rev> nick " );
return Plugin_Handled;
}
char arg[ 32 ], name[ MAX_NAME_LENGTH ];
GetCmdArg( 1, arg, sizeof( args ) );
int target = FindTarget( client, arg );
if( target == -1 )
{
ReplyToCommand( client, "Oyuncu bulunamadı." );
return Plugin_Handled;
}
if( IsPlayerAlive( target ) || !IsClientConnected( target ) )
{
ReplyToCommand( client, "Sadece ölü oyuncuları canlandırabilirsin." );
return Plugin_Handled;
}
CS_RespawnPlayer( target );
GetClientName( client, name, sizeof( name ) );
PrintToChatAll( "%s %N adlı yetkili tarafından canlandırıldı.", name, client );
return Plugin_Handled;
}
Örnek vererek anlatıyım. Kullanıcı sm_haydar ali 3 diye komut girdi.Dediğim örnek yukarıdaki örnekten bağımsızdır.Fonkisyonun içindeki int args girilen tüm ifadeyi alır.GetCmdArg ile biz bunu parçalara ayırırız.İlk parametreyi 0 girersek "sm_haydar", 1 girersek "ali" 2 girersek ise "3" ü alır.Dikkat etmeniz gereken durum ise tüm ifadeler string türünde alınır.2. parametre ise depolanacağı değişken ve 3. değişken ise stringin maksimum uzunluğu.sizeof otomatik stringin uzunluğunu hesaplar.
Burada kafanızı karıştırabilecek kısım %N olan bölüm olabilir.Çünkü bu format şekli 1.6'da mevcut değil.%N clientin ismini çevirmemizi sağlayan bir dönüşümdür.Şimdi komudumuz düzgünce çalışıyor fakat pratik değil.Eğer topluca canlandırmak isteğimizde bu komut işe yaramazdır.Bunu yapmamızı sağlayan tek bir komut vardır.ProcessTargetString komuduyla hem tek tek hemde topluca komud uygulamamız sağlar.Bu şekile dönüştürmeden önce multiplelanguage( çokludil ) pluginlerin uzantısı olan translation dosyaları nasıl oluşurulur onu anlatmam gerekiyor.
MultiLanguage Pluginler
MultiLanguage pluginler eklentinizdeki chat menu vs. kısmı bir çok dilde görüntülenmesini sağlar. Plugine entegre etmeden önce bir translation textin nasıl olması gerektiğini anlatacağım.Bu dosyalar key-value( anahtar değer ) formatındadır.

Şeklinde oluşturulur.Eğer döndürelecek bir kısım varsa ( %s %i ) gibi bunu eklemenin yöntemi ise

Bu şekilde format yapısı yapılır bu formatların numaralandırması pluginde yazılan sıraya bağlıdır.Şimdi ise pluginde nasıl yapılcağını anlatalım.İlk Önce bu dosyları yükletmemiz gerekir.Bunun için ise LoadTranslations( "Dosya İsmi" ) komudunu kullanacağız.Print ederken ise ilk örnekteki "Welcome" bizim anahtar kelimemizdir.Pluginde şu şekilde olacaktır.PrintToChat( client, "%t", "Welcome" ). Görüldüğü üzere %t Translation kısmını döndürür.
Şimdi örneğimize geri dönersek şimdi pluginimize translation kısımlarını ve toplu komut ekliyoruz.
PHP Kod:
#include < sourcemod >
#include < cstrike >
public Plugin myinfo =
{
name = "Revive",
author = "Anil Can",
description = "Ölü oyuncuları canlandırma",
version = "1.0",
url = "https://forum.webdiyo.com/newthread.php?fid=99"
}
public void OnPluginStart( )
{
RegAdminCmd( "sm_rev", Admn_Revive, ADMFLAG_SLAY, "Ölü oyuncuları revlemeniz sağlar" );
LoadTranslations( "respawn.phrases" );
LoadTranslations( "common.phrases" );
}
public Action Admn_Revive( int client, int args )
{
if( args < 1 )
{
ReplyToCommand( client, "<sm_rev> nick " );
return Plugin_Handled;
}
char arg[ 32 ], target_name[ MAX_NAME_LENGTH ], name[ MAX_NAME_LENGTH ];
int target_list[ MAXPLAYERS ], target_count;
bool tn_is_ml;
GetCmdArg( 1, arg, sizeof( arg ) );
if( ( target_count = ProcessTargetString( arg,
client,
target_list,
MAXPLAYERS,
COMMAND_FILTER_DEAD,
target_name,
sizeof( target_name ),
tn_is_ml ) ) <= 0 )
{
ReplyToTargetError( client, target_count );
return Plugin_Handled;
}
for( int i = 0; i < target_count; i++ )
{
CS_RespawnPlayer( target_list[ i ] );
}
GetClientName( client, name, sizeof( name ) );
if( tn_is_ml )
{
PrintToChatAll( "%t", "Revive", target_name, client );
}
else
{
PrintToChatAll( "%s %N yetkili tarafından canlandırıldı." );
}
return Plugin_Handled;
}
ProcessTargetString Kullanımı
Bu yapı ileride çok kullancağımızı gelişmiş ve kullanımı kolay bir yapıdır.Paramterlerini tek tek açıklamya başlayalım.1. parametre hedefimizi belirlememizi sağlar.2. parametre komudu çalıştıran kişi, 3. parametre hedefin kaç kişi olduğunu belirler,4. parametre hedeflenebilecek maksimum oyuncu sayısı, 5. parametre hedefleri geçirebilidğimiz bazı filtereler örneğin COMMAND_FILTER_DEAD ile sadece ölü oyuncuların geçebilceği bir filtre, 6. parametre hedefin ismi, 7. parametre ise hedef isminin maksimum uzunluğu ve son parametre ise dil dosyasının var olup olmadığını kontrol eder.
COMMAND_FILTER_ALIVE Canlı oyuncular filtrrden geçer.
COMMAND_FILTER_DEAD Ölü oyuncular filtreden geçer.
COMMAND_FILTER_CONNECTED Servere bağlı oyuncular filtreden geçer.
COMMAND_FILTER_NO_IMMUNITY Dokunulmazlığı yok sayar.
COMMAND_FILTER_NO_MULTI Toplu komud filtreden geçmez
COMMAND_FILTER_NO_BOTS Botlar filtreden geçmez.
Yaptığım tüm pluginleri eke koydum inceleyebilirsiniz.
Bu stock birden fazla rastgele oyuncu seçmenizi sağlar ve aynı oyuncu denk gelmez.Aynı kodu benzer mantıkla 1.6 içinde uyguluyabilirsiniz.Bu kodu yaptığım bir modda kullanıyorum denenmiş bir kod parçasıdır.
PHP Kod:
stock void RandomPlayer( int value )
{
int[ ] playerlist = new int[ MaxClients + 1 ]; // Burada oyuncuları kaydedeciğmiz dinamik bir integer değişken oluşturdum
int count = 0; //Toplam oyuncu sayısını depolayacak değişken
for( int i = 1; i <= MaxClients; i++ )
{
if( !IsClientConnected( i ) ) continue;
playerlist[ count++ ] = i; // Aradığımız oyuncuyu bulursak oyuncunun indexini ve oyuncu sayısını +1 arttırıyor.
}
Handle szarray = CreateArray( 32 ); // Rastgele Oyuncuları depolayacak dinamik bir array oluşturdum
if( count != 0 )
{
int target;
for( int i = 0; i < value; i++ ) // Kaç adet rastgele oyuncu istiyorsak o kadar döngüyü buluyoruz
{
do
{
target = playerlist[ GetRandomInt( 0, count - 1 ) ]; // Rastgele oyuncuyu bulduk
}
while( FindValueInArray( szarray, target ) != -1 ); // Ama eğer önceden seçilmişse bir daha rastgele oyuncu aratıyoruz
PushArrayCell( szarray, target ); // Bulduğumuz oyuncuyu arraya atıyoruz ki bundan sonra bir daha seçilmesin
PrintToChatAll( "Rastgele Seçilen Oyuncu %N", target );
}
ClearArray( szarray ); // Döngü bittikten sonra işimiz bitti bu yüzden arrayı sıfırlıyoruz
}
}
Tasarım yapımcısı: WxTimer
Tasarım ismi: WebAilesi
Tasarım sürümü: v2
Kullanım alanları & önemli bilgileri;
İndir;
Tasarım ismi: WebAilesi
Tasarım sürümü: v2
Kullanım alanları & önemli bilgileri;
- Jailbreak Ts3 adreslerinde kullanılabilir.
Tasarım Görüntüsü

Bu içeriği görebilmek için kayıt olmanız gerekiyor!
Tasarım yapımcısı: WxTimer
Tasarım ismi: WebAilesi Mor İcon
Tasarım sürümü: v1
Kullanım alanları & önemli bilgileri;
İndir;
Tasarım ismi: WebAilesi Mor İcon
Tasarım sürümü: v1
Kullanım alanları & önemli bilgileri;
- Her Türlü Ts3 Sunucularında Kullanabilirsiniz.
Tasarım Görüntüsü

Bu içeriği görebilmek için kayıt olmanız gerekiyor!
Hoşgeldin, Ziyaretçi
Forumda Ara
Forum İstatistikleri
Son Aktiviteler
STEAM ıd
Yorumlar:
5
•
Okunma:
146