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 )