GTAMulti - GTA Türkiye

San Andreas Multiplayer => PAWN Kodlama => Mod Galerisi => Konuyu başlatan: EvoturK - 28 Şubat 2017, 23:17:40

Başlık: Kullanışlı Fonksiyonlar
Gönderen: EvoturK - 28 Şubat 2017, 23:17:40
Ön Söz
Bu konuda yazdığınız veya bulduğunuz kullanışlı fonksiyonları paylaşabilirsiniz.

Fonksiyon Nedir?
Bir kod içine girdiğiniz veriler doğrultusunda veya veri girmeden birtakım işlemler yapıp size return ile bir sonuç döndürüyorsa buna fonksiyon denir.

Konu Kuralları
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Excision - 02 Mart 2017, 22:50:17
Serverdaki bütün kişilere müzik açmanızı sağlar. Kullanımı gayet basittir.
Örnek olarak PlayAudioStreamForAll("http://radyo.dogannet.tv/hitplay"); şeklinde kullanabilirsiniz.
stock PlayAudioStreamForAll(link[])
{
for(new al = 0, j = GetPlayerPoolSize(); al <= j; al++)
{
    if(IsPlayerConnected(al))
    {
        StopAudioStreamForPlayer(al);
  PlayAudioStreamForPlayer(al,link);
     }
}
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Skism - 03 Mart 2017, 21:21:32
minrand



PAWN Kodu: Seç
stock minrand(min, max) return random(max - min) + min;

Minimum random değerini ve maximum random değerini ayarlar.

Örnek kullanım:
PAWN Kodu: Seç
new deger = minrand(5, 10);
printf("gelen deger: %d", deger);


minimum 5 maximum 10 gelir.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: NexoR - 05 Mart 2017, 10:49:23
Oyuncunun belirli bir silahını silme;

PAWN Kodu: Seç
stock SilahSil(playerid, silahID)
{
new n_Silah[13], n_Mermi[13], n_TempSilahId, n_TempMermi;
for(new n = 0; n < 13; n++)
{
GetPlayerWeaponData(playerid, n, n_TempSilahId, n_TempMermi);
if(n_TempSilahId != silahID)
{
n_Silah[n] = n_TempSilahId;
n_Mermi[n] = n_TempMermi;
}
}
ResetPlayerWeapons(playerid);
for(new n = 0; n < 13; n++)
{
if(n_Silah[n] != 0)
{
GivePlayerWeapon(playerid, n_Silah[n], n_Mermi[n]);
}
}
return 1;
}


Kullanım:

PAWN Kodu: Seç
CMD:osil(playerid, params[])
{
SilahSil(playerid, SilahID);
return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Jawié - 05 Mart 2017, 19:48:16
Her return değeri olan fonksiyon olmuyor. Bu paylaştığın şey bir komut -ki sana ait değil. ZCMD, Zeex tarafından yapılmış bir komut istemcisi biliyorsun.  :maalesef:
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Hwang - 06 Mart 2017, 18:00:10
Arkadaşlar bir şeyleri seviyeli olarak açıklayın lütfen, iletileriniz siliniyor yoksa.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Skism - 19 Mart 2017, 14:14:07
Matematik İşlemleri



İki sayıyı birbirine işlem yaptırır.
PAWN Kodu: Seç

stock Topla(sayi, sayi2)
{
return sayi + sayi2;
}


PAWN Kodu: Seç

stock Cikar(sayi, sayi2)
{
return sayi - sayi2;
}


PAWN Kodu: Seç

stock Carp(sayi, sayi2)
{
return sayi * sayi2;
}


PAWN Kodu: Seç

stock Bol(sayi, sayi2)
{
return sayi / sayi2;
}


Örnek kullanım:
PAWN Kodu: Seç

printf("25 + 49 = %d", Topla(25, 49));
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: _Code - 10 Mayıs 2017, 17:16:00
PAWN Kodu: Seç
stock KaresiniAl(sayi)
{
return sayi * sayi;
}

stock KupunuAl(sayi)
{
return sayi * sayi * sayi;
}

Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Jawié - 13 Temmuz 2017, 17:50:43
PAWN Kodu: Seç
stock nTime(sure, tip)
{
if(tip == 0) return sure * 1000; // Saniye
if(tip == 1) return sure*60000; // Dakika
if(tip == 2) return sure * 3600000; // Saat
if(tip == 3) return sure * 86400; // Gün
return 1;
}


Süreyi saniye, dakika, saat, gün cinsine direkt çevirir.

Örnek Kullanım:

PAWN Kodu: Seç
public OnFilterScriptInit()
{
new st[128];
format(st, 128, "%d", nTime(3, 2));
print(st);
return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Gorkem95 - 13 Temmuz 2017, 21:47:36
GetVehicleType


PAWN Kodu: Seç


#define VEHICLE_TYPE_INVALID 0
#define VEHICLE_TYPE_PLANE 1
#define VEHICLE_TYPE_HELI 2
#define VEHICLE_TYPE_BIKE 3
#define VEHICLE_TYPE_BOAT 4
#define VEHICLE_TYPE_TRAILER 5
#define VEHICLE_TYPE_VEHICLE 6

stock GetVehicleType(vehiclemodel)
{
if(!(0x18F > vehiclemodel < 0x264))
{
  switch(vehiclemodel)
  {
   case 460,476,511,512,513,519,520,553,577,592,593: return 1;
   case 417,425,447,469,487,488,497,548,563: return 2;
   case 448,461,462,463,468,471,481,509,510,521,522,523,581,586: return 3;
   case 430,446,452,453,454,472,473,484,493,495: return 4;
   case 435,450,569,570,584,590,591,606,607,608,610,611: return 5;
   default: return 6;
  }
}
return 0;
}


Kullanım:


PAWN Kodu: Seç

public OnPlayerStateChange(playerid,newstate,oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
  if(GetVehicleType(GetVehicleModel(GetPlayerVehicleID(playerid))) == VEHICLE_TYPE_PLANE)
  {
   // Kodlar
  }
}
return 1;
}
   


Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Backup - 08 Eylül 2017, 13:55:46



Bir nickin idsini çekmesini sağlar. Bulamazsa -1 verir.

stock GetPlayerID(name[])
{
new searchname[MAX_PLAYER_NAME];
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(!IsPlayerConnected(i)) continue;
GetPlayerName(i, searchname, sizeof(searchname));
if(strcmp(searchname, name, true) == 0)
{
return i;
}
}
return -1;
}


Örnek kullanım
PAWN Kodu: Seç
prinft("%i",GetPlayerID("_Backup"));

Çıktı 5
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Kraus - 09 Eylül 2017, 18:35:17
Ayların Kaç Çektiğini Bulma Fonksiyonu / Şubat Ayının Kaç Çektiğini Bulma Fonksiyonu

Yıla göre şubat ayının kaç çektiğini gösteriyor. 4'e bölünebilirlik mantığıyla kodladım.
PAWN Kodu: Seç

SubatKacCekiyor(yil) {
new sonuc = yil % 4;
if(sonuc > 0) return 28;
else return 29;
}


Bu fonksiyon da bana ait. Tüm aylar için kullanılabilir. Şubat ayı için yukarıdaki fonksiyonu bu fonksiyonda kullandım. Şubat ayını kullanmayacaksanız yıl kısmını yazmayabilirsiniz.
PAWN Kodu: Seç

AyKacCekiyor(ay, yil = 2017)
{
switch(ay)
{
    case 1, 3, 5, 7, 8, 10, 12: return 31;
    case 2: return SubatKacCekiyor(yil);
}
return 30;
}





Fonksiyonun Testi:

(https://i.hizliresim.com/mE3MaP.png)

Burada 2. ay Şubat'tır. Şubat ayı dört yılda bir 29 çeker, yani dörde bölünebilen sayılarda 29 çeker. Gördüğünüz üzere sistem doğru çalışıyor.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Dyternal - 17 Ekim 2017, 20:13:37
PAWN Kodu: Seç
GetName(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
}


» Tek tek uğraşacağımıza bu kod işe yarar.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Jawié - 22 Ekim 2017, 13:38:54
Aracı Süreni Bulma Fonksiyonu:

stock SurucuOgren(_aracID){
for(new i = 0; i <= MAX_PLAYERS; i++){
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInVehicle(i, _aracID){ if(GetPlayerState(i) == PLAYER_STATE_DRIVER){ return i;}}}return -5;}


* Aracı süren birisi yoksa -5 değerini döndürür.

» Örnek Kullanım:

CMD:surucu(playerid, params[]){
new str[111111], name[24]; GetPlayerName(SurucuOgren(GetPlayerVehicleID(playerid)), name, 24);
format(str, sizeof(str), "Sürücü: %s",name);
SendClientMessage(playerid, -1, str);
return 1;}


- Binmiş olduğu araçta kimin olduğunu öğrenir.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Jawié - 28 Ekim 2017, 18:29:13
stock WeapSlot(_silahID)
{
switch(_silahID)
{
case 0, 1: return 0;
case 2..9: return 1;
case 10..15: return 10;
case 16,17,18,39: return 8;
case 22,23,24: return 2;
case 25,26,27: return 3;
case 28,29,32: return 4;
case 30,31: return 5;
case 33,34: return 6;
case 35,36,38,37: return 7;
case 40: return 12;
case 41,42,43: return 9;
case 44,45,46: return 11;
}
return -5;
}


Örnek Kullanım:

WeapSlot(34);

Çıktı:

6
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Kripteks - 11 Kasım 2017, 19:40:26
Fonksiyona verdiğiniz tamsayı değerini para birimine çevirir.

PAWN Kodu: Seç
stock ParaAyirici(para)
{
new string[64];
format(string, sizeof string, "%i", para);
new sayi;
for(new i = strlen(string); i > 0; i--)
{
     sayi++;
     if(sayi == 4) strins(string, ".", i), sayi = 1;
}
return string;
}


PAWN Kodu: Seç
// Kullanım örneği
public OnGameModeInit()
{
new yazi[100];
new tamsayi = 10000;
format(yazi, sizeof(yazi), "Eski hali: %d - Yeni hali: %s",tamsayi, ParaAyirici(tamsayi));
printf(tamsayi);
return 1;
}

// Ekran Çıktısı
// Eski hali: 10000 - Yeni hali: 10.000


Dikkat edilmesi gereken nokta fonksiyon string değer döndürmektedir. Yani çağırırken "%d" değilde "%s" kullanmalısınız.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Wither - 30 Kasım 2017, 20:24:07
Öncelikle "Yazının ilk harfini büyütme" fonksiyonu var.


"text[0] = toupper(text[0]);"


şeklinde kullanılıyor. Ancak türkçe harfleri büyütmüyor veya yanlış büyütüyor.
Bu sorunu çözmek için benim yaptığım aşağıdaki fonksiyonu kullanabilirsiniz.
Mantığı basit ve uzun olabilir ama işinizi görür;


stock Wtoupper(ch)
{
if(ch == 'q') ch = 'Q';
else if(ch == 'w') ch = 'W';
else if(ch == 'e') ch = 'E';
else if(ch == 'r') ch = 'R';
else if(ch == 't') ch = 'T';
else if(ch == 'y') ch = 'Y';
else if(ch == 'u') ch = 'U';
else if(ch == 'ı') ch = 'I';
else if(ch == 'o') ch = 'O';
else if(ch == 'p') ch = 'P';
else if(ch == 'ğ') ch = 'Ğ';
else if(ch == 'ü') ch = 'Ü';
else if(ch == 'a') ch = 'A';
else if(ch == 's') ch = 'S';
else if(ch == 'd') ch = 'D';
else if(ch == 'f') ch = 'F';
else if(ch == 'g') ch = 'G';
else if(ch == 'h') ch = 'H';
else if(ch == 'j') ch = 'J';
else if(ch == 'k') ch = 'K';
else if(ch == 'l') ch = 'L';
else if(ch == 'ş') ch = 'Ş';
else if(ch == 'i') ch = 'İ';
else if(ch == 'z') ch = 'Z';
else if(ch == 'x') ch = 'X';
else if(ch == 'c') ch = 'C';
else if(ch == 'v') ch = 'V';
else if(ch == 'b') ch = 'B';
else if(ch == 'n') ch = 'N';
else if(ch == 'm') ch = 'M';
else if(ch == 'ö') ch = 'Ö';
else if(ch == 'ç') ch = 'Ç';
return ch;
}


Şu şekilde kullanılıyor;


public OnPlayerText(playerid, text[])
{
text[0] = Wtoupper(text[0]);
return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Dyternal - 12 Aralık 2017, 21:08:32
stock Turkceyecevir(txt[])
{
    new cevirildi[256];
    strcat(cevirildi, txt);

    for (new i = 0; i < 256; i++)
    {
        switch (cevirildi[i])
        {
            case '?: cevirildi[i] = 'g';
            case '?: cevirildi[i] = 'G';
            case '?: cevirildi[i] = 's';
            case '?: cevirildi[i] = 'S';
            case '?: cevirildi[i] = 'i';
            case '?: cevirildi[i] = 'o';
            case '?: cevirildi[i] = 'O';
            case '?: cevirildi[i] = 'c';
            case '?: cevirildi[i] = 'C';
            case '?: cevirildi[i] = 'u';
            case '?: cevirildi[i] = 'U';
            case '?: cevirildi[i] = 'I';
        }
    }
    return cevirildi;
}



>> Bu fonksiyonumuz sayesinde textdrawlarda türkçe harfleri ingilizce harflere çevirebiliriz.
Bilmeyenler için söyleyeyim textdrawlarda türkçe karakter kullanamazsınız. PM Okuma Sistemi Haberler sistemi gibi sistemlerde işinize yarar.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Lé Spîke - 12 Aralık 2017, 21:16:47
Alıntı yapılan: STaRDuST10 - 12 Aralık 2017, 21:08:32

stock Turkceyecevir(txt[])
{
    new cevirildi[256];
    strcat(cevirildi, txt);

    for (new i = 0; i < 256; i++)
    {
        switch (cevirildi[i])
        {
            case '?: cevirildi[i] = 'g';
            case '?: cevirildi[i] = 'G';
            case '?: cevirildi[i] = 's';
            case '?: cevirildi[i] = 'S';
            case '?: cevirildi[i] = 'i';
            case '?: cevirildi[i] = 'o';
            case '?: cevirildi[i] = 'O';
            case '?: cevirildi[i] = 'c';
            case '?: cevirildi[i] = 'C';
            case '?: cevirildi[i] = 'u';
            case '?: cevirildi[i] = 'U';
            case '?: cevirildi[i] = 'I';
        }
    }
    return cevirildi;
}



>> Bu fonksiyonumuz sayesinde textdrawlarda türkçe harfleri ingilizce harflere çevirebiliriz.
Bilmeyenler için söyleyeyim textdrawlarda türkçe karakter kullanamazsınız. PM Okuma Sistemi Haberler sistemi gibi sistemlerde işinize yarar.


? Yazdığımızda g G vs çevirir
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Dyternal - 12 Aralık 2017, 21:22:42
Alıntı yapılan: DeliOqlan - 12 Aralık 2017, 21:16:47

Alıntı yapılan: STaRDuST10 - 12 Aralık 2017, 21:08:32

stock Turkceyecevir(txt[])
{
    new cevirildi[256];
    strcat(cevirildi, txt);

    for (new i = 0; i < 256; i++)
    {
        switch (cevirildi[i])
        {
            case '?: cevirildi[i] = 'g';
            case '?: cevirildi[i] = 'G';
            case '?: cevirildi[i] = 's';
            case '?: cevirildi[i] = 'S';
            case '?: cevirildi[i] = 'i';
            case '?: cevirildi[i] = 'o';
            case '?: cevirildi[i] = 'O';
            case '?: cevirildi[i] = 'c';
            case '?: cevirildi[i] = 'C';
            case '?: cevirildi[i] = 'u';
            case '?: cevirildi[i] = 'U';
            case '?: cevirildi[i] = 'I';
        }
    }
    return cevirildi;
}



>> Bu fonksiyonumuz sayesinde textdrawlarda türkçe harfleri ingilizce harflere çevirebiliriz.
Bilmeyenler için söyleyeyim textdrawlarda türkçe karakter kullanamazsınız. PM Okuma Sistemi Haberler sistemi gibi sistemlerde işinize yarar.


? Yazdığımızda g G vs çevirir

Hayır ğ olduğunda oluyor.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Dyternal - 12 Aralık 2017, 21:33:49
Alıntı yapılan: ThaLasso - 11 Kasım 2017, 19:40:26

Fonksiyona verdiğiniz tamsayı değerini para birimine çevirir.

PAWN Kodu: Seç
stock ParaAyirici(para)
{
new string[64];
format(string, sizeof string, "%i", para);
new sayi;
for(new i = strlen(string); i > 0; i--)
{
     sayi++;
     if(sayi == 4) strins(string, ".", i), sayi = 1;
}
return string;
}


PAWN Kodu: Seç
// Kullanım örneği
public OnGameModeInit()
{
new yazi[100];
new tamsayi = 10000;
format(yazi, sizeof(yazi), "Eski hali: %d - Yeni hali: %s",tamsayi, ParaAyirici(tamsayi));
printf(tamsayi);
return 1;
}

// Ekran Çıktısı
// Eski hali: 10000 - Yeni hali: 10.000


Dikkat edilmesi gereken nokta fonksiyon string değer döndürmektedir. Yani çağırırken "%d" değilde "%s" kullanmalısınız.


Yanlışlık yapmışsın.

PAWN Kodu: Seç
// Kullanım örneği
public OnGameModeInit()
{
new yazi[100];
new tamsayi = 10000;
format(yazi, sizeof(yazi), "Eski hali: %d - Yeni hali: %s",tamsayi, ParaAyirici(tamsayi));
printf(yazi);
return 1;
}

// Ekran Çıktısı
// Eski hali: 10000 - Yeni hali: 10.000


printf(tamsayi); olursa arguments hatası verecektir. yazi olarak değiştiriniz.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Backup - 05 Ocak 2018, 13:45:36
Yazılan yazıyı küçültmeye yarar.

#define strToLower(%0) for(new __i; %0[__i] != EOS; ++__i) %0[__i] = ('A' <= %0[__i] <= 'Z') ? (%0[__i] += 'a' - 'A') : (%0[__i])



public OnPlayerText(playerid, text[])
{
      strToLower(text);
      return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: trabzon - 27 Ocak 2018, 16:00:24
Players property kullanarak, 's' değerine atama yapıyoruz.
IsPlayerConnected fonksiyonu kullanarak aktif oyuncuları çekebilmemiz için atadığımız 's' değerini kullanıyoruz.
sayi değişkeni ile, fonksiyonda döngü sağlayarak aktif sayıyı ele alıyoruz.


PAWN Kodu: Seç
stock AktifOyuncuCek()
{
new sayi;
for(new s = 0; s < MAX_PLAYERS; s++)
{
if(IsPlayerConnected(s))
{
sayi++;
}
}
return sayi;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: _Code - 30 Ocak 2018, 13:26:54
Alıntı yapılan: Silver - 27 Ocak 2018, 16:00:24

Players property kullanarak, 's' değerine atama yapıyoruz.
IsPlayerConnected fonksiyonu kullanarak aktif oyuncuları çekebilmemiz için atadığımız 's' değerini kullanıyoruz.
sayi değişkeni ile, fonksiyonda döngü sağlayarak aktif sayıyı ele alıyoruz.


PAWN Kodu: Seç
stock AktifOyuncuCek()
{
new sayi;
for(new s = 0; s < MAX_PLAYERS; s++)
{
if(IsPlayerConnected(s))
{
sayi++;
}
}
return sayi;
}



PAWN Kodu: Seç
stock Oyuncular()
{
new toplam;
foreach(new i: Player)
{
toplam++;
}
return toplam;
}


veya

PAWN Kodu: Seç

stock Oyuncular()
{
return Iter_Count(Player);
}


Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: trabzon - 12 Şubat 2018, 12:55:51
Alıntı yapılan: RECEP - 30 Ocak 2018, 13:26:54

Alıntı yapılan: Silver - 27 Ocak 2018, 16:00:24

Players property kullanarak, 's' değerine atama yapıyoruz.
IsPlayerConnected fonksiyonu kullanarak aktif oyuncuları çekebilmemiz için atadığımız 's' değerini kullanıyoruz.
sayi değişkeni ile, fonksiyonda döngü sağlayarak aktif sayıyı ele alıyoruz.


PAWN Kodu: Seç
stock AktifOyuncuCek()
{
new sayi;
for(new s = 0; s < MAX_PLAYERS; s++)
{
if(IsPlayerConnected(s))
{
sayi++;
}
}
return sayi;
}



PAWN Kodu: Seç
stock Oyuncular()
{
new toplam;
foreach(new i: Player)
{
toplam++;
}
return toplam;
}


veya

PAWN Kodu: Seç

stock Oyuncular()
{
return Iter_Count(Player);
}



Realy?

Açık ve basit bir fonksiyon kurdum. Ayrıca foreach kütüphanesini kullanmışsın. İşlevsel basitliği var fakat herkes bu isimde ki kütüphaneyi kullanmak zorunda değil.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: trabzon - 15 Şubat 2018, 16:29:45
stock SatirDuzenle(str[])
{
    new a, b, x = strlen(str);
    for( ; a < x; ++a)
    {
        switch(str[a])
        {
            case '\n', '\t', '\f', '\r', ' ': continue;
            default: break;
        }
    }
    for(b = (x - 1); b > a; --b)
    {
        switch(str[b])
        {
            case '\n', '\t', '\f', '\r', ' ': continue;
            default: break;
        }
    }
    strmid(str, str, a, (b + 1), cellmax);
    return 1;
}


(https://i.hizliresim.com/y03vY0.png)
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Kraus - 16 Şubat 2018, 17:29:02
Oyuncuların yazdığı string değerini TextDraw'da kullanıyorsanız işinize yarayacaktır. Strlib include'u gereklidir.

Strlib (http://forum.sa-mp.com/showthread.php?t=85697)


PAWN Kodu: Seç
#include <strlib>

stock RemoveTRInputForTextDraw(nickname[])
{
new tmp[1024];
format(tmp, sizeof(tmp), "%s", nickname);
format(tmp, sizeof(tmp), "%s", str_replace("ğ","g",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("Ğ","G",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("ş","s",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("Ş","S",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("ı","i",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("İ","I",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("ö","o",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("Ö","O",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("ç","c",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("Ç","C",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("ü","u",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("Ü","U",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~n~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~r~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~r~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~g~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~b~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~l~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~h~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~u~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~d~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~<~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~>~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("(","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace(")","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~k~","",tmp));
format(tmp, sizeof(tmp), "%s", str_replace("~","",tmp));
  return tmp;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Excision - 16 Şubat 2018, 17:29:16
Alıntı yapılan: ebuaga - 16 Şubat 2018, 17:19:50

Alıntı yapılan: Dyternal - 12 Aralık 2017, 21:08:32

stock Turkceyecevir(txt[])
{
    new cevirildi[256];
    strcat(cevirildi, txt);

    for (new i = 0; i < 256; i++)
    {
        switch (cevirildi[i])
        {
            case '?: cevirildi[i] = 'g';
            case '?: cevirildi[i] = 'G';
            case '?: cevirildi[i] = 's';
            case '?: cevirildi[i] = 'S';
            case '?: cevirildi[i] = 'i';
            case '?: cevirildi[i] = 'o';
            case '?: cevirildi[i] = 'O';
            case '?: cevirildi[i] = 'c';
            case '?: cevirildi[i] = 'C';
            case '?: cevirildi[i] = 'u';
            case '?: cevirildi[i] = 'U';
            case '?: cevirildi[i] = 'I';
        }
    }
    return cevirildi;
}



>> Bu fonksiyonumuz sayesinde textdrawlarda türkçe harfleri ingilizce harflere çevirebiliriz.
Bilmeyenler için söyleyeyim textdrawlarda türkçe karakter kullanamazsınız. PM Okuma Sistemi Haberler sistemi gibi sistemlerde işinize yarar.


Maalesef çalışmıyor Ç harfi ve ö harfini saymıyor

stock ConvertToTurkish(txt[])
{
    new converted_txt[256];
    strcat(converted_txt, txt);

    for (new i = 0; i < 256; i++)
    {
        switch (converted_txt[i])
        {
            case 'ğ': converted_txt[i] = 'g';
            case 'Ğ': converted_txt[i] = 'G';
            case 'ş': converted_txt[i] = 's';
            case 'Ş': converted_txt[i] = 'S';
            case 'ı': converted_txt[i] = 'i';
            case 'ö': converted_txt[i] = 'o';
            case 'Ö': converted_txt[i] = 'O';
            case 'ç': converted_txt[i] = 'c';
            case 'Ç': converted_txt[i] = 'C';
            case 'ü': converted_txt[i] = 'u';
            case 'Ü': converted_txt[i] = 'U';
            case 'İ': converted_txt[i] = 'I';
        }
    }
    return converted_txt;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: _Code - 23 Haziran 2018, 02:21:29

PAWN Kodu: Seç


stock GetDriverID(vehicleid) //Araç sürenin idini verir
{
foreach(new i : Player)
{
        if(GetPlayerVehicleID(i) == vehicleid && GetPlayerState(i) == PLAYER_STATE_DRIVER) return i;
    }
    return -1;
}

stock IsVehicleUsed(vehicleid) //Belirttiğiniz aracın kullanılıp kullanılmadığını gösterir
{
if(IsPlayerConnected(GetDriverID(vehicleid))) return 1;
return 0;
}





Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Amper - 03 Temmuz 2018, 18:36:01
Roleplay sunucuları veya benzeri bir reload sistemi için kullanabileceğiniz animasyonlar.
PAWN Kodu: Seç
stock SarjorYenilemeAnimasyon(playerid, silahid)
{
switch (silahid)
{
    case 22: ApplyAnimation(playerid, "COLT45", "colt45_reload", 4.0, 0, 0, 0, 0, 0);
case 23: ApplyAnimation(playerid, "SILENCED", "Silence_reload", 4.0, 0, 0, 0, 0, 0);
case 24: ApplyAnimation(playerid, "PYTHON", "python_reload", 4.0, 0, 0, 0, 0, 0);
case 25, 27: ApplyAnimation(playerid, "BUDDY", "buddy_reload", 4.0, 0, 0, 0, 0, 0);
case 26: ApplyAnimation(playerid, "COLT45", "sawnoff_reload", 4.0, 0, 0, 0, 0, 0);
case 29..31, 33, 34: ApplyAnimation(playerid, "RIFLE", "rifle_load", 4.0, 0, 0, 0, 0, 0);
case 28, 32: ApplyAnimation(playerid, "TEC", "tec_reload", 4.0, 0, 0, 0, 0, 0);
}
return 1;
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: trabzon - 06 Temmuz 2018, 23:09:46

stock OyuncuIDcek(isim[])
{
    new ad[MAX_PLAYER_NAME+1];
    foreach(new i : Player)
    {
        GetPlayerName(i, ad, MAX_PLAYER_NAME+1);
        if(!strcmp(ad, isim))
        {
            return i;
        }
    }
    return -1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: jensen - 23 Temmuz 2018, 04:50:09
Binary file, dosya yolu ile dosya adına göre boş bir ID çekme;
PAWN Kodu: Seç
BosVeriID()
{
new dosya[65];
for(new veriid = 0; veriid < MAX_VERI; veriid++)
{
format(dosya, sizeof(dosya), "/Veriler/%d.cfg", veriid);
if(!fexist(dosya)))
{
    return veriid;
}
}
return -1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: fakecause - 08 Eylül 2018, 13:51:06
Hatalı e-posta adresi girişini engeller.
stock IsValidMail(const address[])
{
new len = strlen(address), atcount = (0), IsValid = false;
if( len < 5 )
{
IsValid = false;
    goto IsValidMail__the_end;
}
loop: len(i)
{
    if( address[i] == '@' ) atcount ++;
    if( atcount > 1 )
{
IsValid = false;
break;
}

if(( address[i] >= 'a' && address[i] <= 'z' ) || ( address[i] >= 'A' && address[i] <= 'Z' ) || ( address[i] == '.' ) || ( address[i] == '_' ) || ( address[i] == '-' ))
IsValid = true;
else
{
    if((address[i] != '@'))
{
        IsValid = false;
        break;
}
}

if(i + 1 == len)
    if(((address[i] >= 'a' && address[i] <= 'z') || (address[i] >= 'A' && address[i] <= 'Z')) && (address[i] != '.'))
IsValid = true;
if(i + 1 == len && address[i] == '.')
    IsValid = false;
}
IsValidMail__the_end:
return IsValid ? true : false;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Zoxy - 25 Ekim 2018, 19:19:32
Yazıda kaç tane sayı olduğunu gösterir.

GetNumericCount(const yazi[])
{
    new sayi = 0;
    for (new i = 0, l = strlen(yazi); i != l; i ++)
    {
          if(yazi[i] >= '0' && yazi[i] <= '9')
          {
             sayi++;
          }
    }
    return sayi;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Levi - 07 Ocak 2019, 16:18:18
2 oyuncu arasındaki mesafeyi bulur.

stock Float:GetDistanceBetweenPlayers(playerid, toplayerid)
{
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(toplayerid)) return -1.00;

new Float:Pos[2][3];
GetPlayerPos(playerid, Pos[0][0], Pos[0][1], Pos[0][2]);
GetPlayerPos(toplayerid, Pos[1][0], Pos[1][1], Pos[1][2]);

return floatsqroot(floatpower(floatabs(floatsub(Pos[1][0], Pos[0][0])),2) + floatpower(floatabs(floatsub(Pos[1][1], Pos[0][1])),2) + floatpower(floatabs(floatsub(Pos[1][2], Pos[0][2])),2));
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: haroldfinch - 10 Mart 2019, 15:51:59
Hatalı e-posta tespit eder. Kendinize göre yazıları düzeltin işte.

PAWN Kodu: Seç

#define MAX_TOPLEVEL_DOMAINS 269

new TopLevelDomains[MAX_TOPLEVEL_DOMAINS][] = {
{"ac"}, {"ad"}, {"ae"}, {"aero"}, {"af"}, {"ag"}, {"ai"}, {"al"}, {"am"}, {"an"}, {"ao"}, {"aq"}, {"ar"}, {"arpa"}, {"as"},
{"asia"}, {"at"}, {"au"}, {"aw"}, {"ax"}, {"az"}, {"ba"}, {"bb"}, {"bd"}, {"be"}, {"bf"}, {"bg"}, {"bh"}, {"bi"}, {"biz"}, {"bj"},
{"bm"}, {"bn"}, {"bo"}, {"br"}, {"bs"}, {"bt"}, {"bv"}, {"bw"}, {"by"}, {"bz"}, {"ca"}, {"cat"}, {"cc"}, {"cd"}, {"cf"}, {"cg"},
{"ch"}, {"ci"}, {"ck"}, {"cl"}, {"cm"}, {"cn"}, {"co"}, {"com"}, {"coop"}, {"cr"}, {"cu"}, {"cv"}, {"cx"}, {"cy"}, {"cz"}, {"de"},
{"dj"}, {"dk"}, {"dm"}, {"do"}, {"dz"}, {"ec"}, {"edu"}, {"ee"}, {"eg"}, {"er"}, {"es"}, {"et"}, {"eu"}, {"fi"}, {"fj"}, {"fk"},
{"fm"}, {"fo"}, {"fr"}, {"ga"}, {"gb"}, {"gd"}, {"ge"}, {"gf"}, {"gg"}, {"gh"}, {"gi"}, {"gl"}, {"gm"}, {"gn"}, {"gov"}, {"gp"},
{"gq"}, {"gr"}, {"gs"}, {"gt"}, {"gu"}, {"gw"}, {"gy"}, {"hk"}, {"hm"}, {"hn"}, {"hr"}, {"ht"}, {"hu"}, {"id"}, {"ie"}, {"il"}, {"im"},
{"in"}, {"info"}, {"int"}, {"io"}, {"iq"}, {"ir"}, {"is"}, {"it"}, {"je"}, {"jm"}, {"jo"}, {"jobs"}, {"jp"}, {"ke"}, {"kg"}, {"kh"}, {"ki"},
{"km"}, {"kn"}, {"kp"}, {"kr"}, {"kw"}, {"ky"}, {"kz"}, {"la"}, {"lb"}, {"lc"}, {"li"}, {"lk"}, {"lr"}, {"ls"}, {"lt"}, {"lu"}, {"lv"}, {"ly"},
{"ma"}, {"mc"}, {"md"}, {"me"}, {"mg"}, {"mh"}, {"mil"}, {"mk"}, {"ml"}, {"mm"}, {"mn"}, {"mo"}, {"mobi"}, {"mp"}, {"mq"}, {"mr"}, {"ms"}, {"mt"}, {"mu"},
{"museum"}, {"mv"}, {"mw"}, {"mx"}, {"my"}, {"mz"}, {"na"}, {"name"}, {"nc"}, {"ne"}, {"net"}, {"nf"}, {"ng"}, {"ni"}, {"nl"}, {"no"}, {"np"}, {"nr"},
{"nu"}, {"nz"}, {"om"}, {"org"}, {"pa"}, {"pe"}, {"pf"}, {"pg"}, {"ph"}, {"pk"}, {"pl"}, {"pm"}, {"pn"}, {"pr"}, {"pro"}, {"ps"}, {"pt"}, {"pw"}, {"py"},
{"qa"}, {"re"}, {"ro"}, {"rs"}, {"ru"}, {"rw"}, {"sa"}, {"sb"}, {"sc"}, {"sd"}, {"se"}, {"sg"}, {"sh"}, {"si"}, {"sj"}, {"sk"}, {"sl"}, {"sm"}, {"sn"},
{"so"}, {"sr"}, {"st"}, {"su"}, {"sv"}, {"sy"}, {"sz"}, {"tc"}, {"td"}, {"tel"}, {"tf"}, {"tg"}, {"th"}, {"tj"}, {"tk"}, {"tl"}, {"tm"}, {"tn"}, {"to"},
{"tp"}, {"tr"}, {"travel"}, {"tt"}, {"tv"}, {"tw"}, {"tz"}, {"ua"}, {"ug"}, {"uk"}, {"us"}, {"uy"}, {"uz"}, {"va"}, {"vc"}, {"ve"}, {"vg"}, {"vi"}, {"vn"},
{"vu"}, {"wf"}, {"ws"}, {"ye"}, {"yt"}, {"yu"}, {"za"}, {"zm"}, {"zw"}
};

IsValidEMail(email[])
{
if(isnull(email)) return -1;

    new lenght = strlen(email),
        emailsplit[2][128],
        domainsplit[2][128];

sscanf(email, "p<@>s[128]s[128]", emailsplit[0], emailsplit[1]);

if(!strlen(emailsplit[0])) return -1;

sscanf(emailsplit[1], "p<.>s[128]s[128]", domainsplit[0], domainsplit[1]);

    if(strlen(domainsplit[0]) < 3) return -2;

    if(emailsplit[0][0] ==  .  || emailsplit[0][strlen(emailsplit[0]) - 1] ==  .  || strfind(emailsplit[0], "..", true) != -1) return -3;

new atsign;
    for(new j = 0; j < lenght; j++)
    {
        if(emailsplit[0][j])
        {
            if((emailsplit[0][j] >=  A  && emailsplit[0][j] <=  Z ) || (emailsplit[0][j] >=  a  && emailsplit[0][j] <=  z ) || (emailsplit[0][j] >=  0  && emailsplit[0][j] <=  9 ) || (emailsplit[0][j] ==  . ) || (emailsplit[0][j] ==  - ) || (emailsplit[0][j] ==  _ ))
            {
            }
            else return -4;
        }

        if(domainsplit[0][j])
        {
            if((domainsplit[0][j] >=  A  && domainsplit[0][j] <=  Z ) || (domainsplit[0][j] >=  a  && domainsplit[0][j] <=  z ) || (domainsplit[0][j] ==  - ))
            {
            }
            else return -5;
        }

        if(email[j] ==  @ )
        {
            atsign ++;
            if(atsign > 1) return -6;
        }
    }

if(!strcmp(email, "isim@domain.com", true)) return -8;

    for(new j = 0; j < MAX_TOPLEVEL_DOMAINS; j++)
    {
        if(strcmp(domainsplit[1], TopLevelDomains[j], true) == 0) return 1;
    }
    return -7;
}


Örnek kullanım:

PAWN Kodu: Seç

if(IsValidEMail(inputtext) <= 0)
{
switch(IsValidEMail(inputtext))
{
case -1: MesajGonder(playerid, TIP_HATA, "Yazmış olduğunuz e-posta adresi..bi saniye hiç bir şey yazmamışsın ki. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -2: MesajGonder(playerid, TIP_HATA, "Bir yere kadar doğru fakat yazmış olduğun domain kısmı olmamış. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -3: MesajGonder(playerid, TIP_HATA, "Domain isminden sonraki nokta(.) kısmında sıkıntı var. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -4: MesajGonder(playerid, TIP_HATA, "E-posta adresinde sadece A-Z, a-z, - ve _ kullanabilirsin. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -5: MesajGonder(playerid, TIP_HATA, "Domain kısmında sadece A-Z, a-z, - ve _ kullanabilirsin. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -6: MesajGonder(playerid, TIP_HATA, "Birden fazla @ işareti koymuşsun, öyle bir e-posta adresi olamaz. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -8: MesajGonder(playerid, TIP_HATA, "E-posta adresini isim@domain.com şeklinde gir dedik, isim@domain.com yaz demedik.");
}
Dialog_Show(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, DIALOG_BASLIK" - E-mail", "{C85A5A}Geçerli bir e-mail adresi giriniz:", "Tamam", "");
return 1;
}

Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: ace - 12 Mart 2019, 18:23:55
Alıntı yapılan: haroldfinch - 10 Mart 2019, 15:51:59

Hatalı e-posta tespit eder. Kendinize göre yazıları düzeltin işte.

PAWN Kodu: Seç

#define MAX_TOPLEVEL_DOMAINS 269

new TopLevelDomains[MAX_TOPLEVEL_DOMAINS][] = {
{"ac"}, {"ad"}, {"ae"}, {"aero"}, {"af"}, {"ag"}, {"ai"}, {"al"}, {"am"}, {"an"}, {"ao"}, {"aq"}, {"ar"}, {"arpa"}, {"as"},
{"asia"}, {"at"}, {"au"}, {"aw"}, {"ax"}, {"az"}, {"ba"}, {"bb"}, {"bd"}, {"be"}, {"bf"}, {"bg"}, {"bh"}, {"bi"}, {"biz"}, {"bj"},
{"bm"}, {"bn"}, {"bo"}, {"br"}, {"bs"}, {"bt"}, {"bv"}, {"bw"}, {"by"}, {"bz"}, {"ca"}, {"cat"}, {"cc"}, {"cd"}, {"cf"}, {"cg"},
{"ch"}, {"ci"}, {"ck"}, {"cl"}, {"cm"}, {"cn"}, {"co"}, {"com"}, {"coop"}, {"cr"}, {"cu"}, {"cv"}, {"cx"}, {"cy"}, {"cz"}, {"de"},
{"dj"}, {"dk"}, {"dm"}, {"do"}, {"dz"}, {"ec"}, {"edu"}, {"ee"}, {"eg"}, {"er"}, {"es"}, {"et"}, {"eu"}, {"fi"}, {"fj"}, {"fk"},
{"fm"}, {"fo"}, {"fr"}, {"ga"}, {"gb"}, {"gd"}, {"ge"}, {"gf"}, {"gg"}, {"gh"}, {"gi"}, {"gl"}, {"gm"}, {"gn"}, {"gov"}, {"gp"},
{"gq"}, {"gr"}, {"gs"}, {"gt"}, {"gu"}, {"gw"}, {"gy"}, {"hk"}, {"hm"}, {"hn"}, {"hr"}, {"ht"}, {"hu"}, {"id"}, {"ie"}, {"il"}, {"im"},
{"in"}, {"info"}, {"int"}, {"io"}, {"iq"}, {"ir"}, {"is"}, {"it"}, {"je"}, {"jm"}, {"jo"}, {"jobs"}, {"jp"}, {"ke"}, {"kg"}, {"kh"}, {"ki"},
{"km"}, {"kn"}, {"kp"}, {"kr"}, {"kw"}, {"ky"}, {"kz"}, {"la"}, {"lb"}, {"lc"}, {"li"}, {"lk"}, {"lr"}, {"ls"}, {"lt"}, {"lu"}, {"lv"}, {"ly"},
{"ma"}, {"mc"}, {"md"}, {"me"}, {"mg"}, {"mh"}, {"mil"}, {"mk"}, {"ml"}, {"mm"}, {"mn"}, {"mo"}, {"mobi"}, {"mp"}, {"mq"}, {"mr"}, {"ms"}, {"mt"}, {"mu"},
{"museum"}, {"mv"}, {"mw"}, {"mx"}, {"my"}, {"mz"}, {"na"}, {"name"}, {"nc"}, {"ne"}, {"net"}, {"nf"}, {"ng"}, {"ni"}, {"nl"}, {"no"}, {"np"}, {"nr"},
{"nu"}, {"nz"}, {"om"}, {"org"}, {"pa"}, {"pe"}, {"pf"}, {"pg"}, {"ph"}, {"pk"}, {"pl"}, {"pm"}, {"pn"}, {"pr"}, {"pro"}, {"ps"}, {"pt"}, {"pw"}, {"py"},
{"qa"}, {"re"}, {"ro"}, {"rs"}, {"ru"}, {"rw"}, {"sa"}, {"sb"}, {"sc"}, {"sd"}, {"se"}, {"sg"}, {"sh"}, {"si"}, {"sj"}, {"sk"}, {"sl"}, {"sm"}, {"sn"},
{"so"}, {"sr"}, {"st"}, {"su"}, {"sv"}, {"sy"}, {"sz"}, {"tc"}, {"td"}, {"tel"}, {"tf"}, {"tg"}, {"th"}, {"tj"}, {"tk"}, {"tl"}, {"tm"}, {"tn"}, {"to"},
{"tp"}, {"tr"}, {"travel"}, {"tt"}, {"tv"}, {"tw"}, {"tz"}, {"ua"}, {"ug"}, {"uk"}, {"us"}, {"uy"}, {"uz"}, {"va"}, {"vc"}, {"ve"}, {"vg"}, {"vi"}, {"vn"},
{"vu"}, {"wf"}, {"ws"}, {"ye"}, {"yt"}, {"yu"}, {"za"}, {"zm"}, {"zw"}
};

IsValidEMail(email[])
{
if(isnull(email)) return -1;

    new lenght = strlen(email),
        emailsplit[2][128],
        domainsplit[2][128];

sscanf(email, "p<@>s[128]s[128]", emailsplit[0], emailsplit[1]);

if(!strlen(emailsplit[0])) return -1;

sscanf(emailsplit[1], "p<.>s[128]s[128]", domainsplit[0], domainsplit[1]);

    if(strlen(domainsplit[0]) < 3) return -2;

    if(emailsplit[0][0] ==  .  || emailsplit[0][strlen(emailsplit[0]) - 1] ==  .  || strfind(emailsplit[0], "..", true) != -1) return -3;

new atsign;
    for(new j = 0; j < lenght; j++)
    {
        if(emailsplit[0][j])
        {
            if((emailsplit[0][j] >=  A  && emailsplit[0][j] <=  Z ) || (emailsplit[0][j] >=  a  && emailsplit[0][j] <=  z ) || (emailsplit[0][j] >=  0  && emailsplit[0][j] <=  9 ) || (emailsplit[0][j] ==  . ) || (emailsplit[0][j] ==  - ) || (emailsplit[0][j] ==  _ ))
            {
            }
            else return -4;
        }

        if(domainsplit[0][j])
        {
            if((domainsplit[0][j] >=  A  && domainsplit[0][j] <=  Z ) || (domainsplit[0][j] >=  a  && domainsplit[0][j] <=  z ) || (domainsplit[0][j] ==  - ))
            {
            }
            else return -5;
        }

        if(email[j] ==  @ )
        {
            atsign ++;
            if(atsign > 1) return -6;
        }
    }

if(!strcmp(email, "isim@domain.com", true)) return -8;

    for(new j = 0; j < MAX_TOPLEVEL_DOMAINS; j++)
    {
        if(strcmp(domainsplit[1], TopLevelDomains[j], true) == 0) return 1;
    }
    return -7;
}


Örnek kullanım:

PAWN Kodu: Seç

if(IsValidEMail(inputtext) <= 0)
{
switch(IsValidEMail(inputtext))
{
case -1: MesajGonder(playerid, TIP_HATA, "Yazmış olduğunuz e-posta adresi..bi saniye hiç bir şey yazmamışsın ki. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -2: MesajGonder(playerid, TIP_HATA, "Bir yere kadar doğru fakat yazmış olduğun domain kısmı olmamış. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -3: MesajGonder(playerid, TIP_HATA, "Domain isminden sonraki nokta(.) kısmında sıkıntı var. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -4: MesajGonder(playerid, TIP_HATA, "E-posta adresinde sadece A-Z, a-z, - ve _ kullanabilirsin. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -5: MesajGonder(playerid, TIP_HATA, "Domain kısmında sadece A-Z, a-z, - ve _ kullanabilirsin. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -6: MesajGonder(playerid, TIP_HATA, "Birden fazla @ işareti koymuşsun, öyle bir e-posta adresi olamaz. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -8: MesajGonder(playerid, TIP_HATA, "E-posta adresini isim@domain.com şeklinde gir dedik, isim@domain.com yaz demedik.");
}
Dialog_Show(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, DIALOG_BASLIK" - E-mail", "{C85A5A}Geçerli bir e-mail adresi giriniz:", "Tamam", "");
return 1;
}


Efsane ellerine sağlık.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: Levi - 03 Nisan 2019, 01:11:33
Alıntı yapılan: haroldfinch - 10 Mart 2019, 15:51:59

Hatalı e-posta tespit eder. Kendinize göre yazıları düzeltin işte.

PAWN Kodu: Seç

#define MAX_TOPLEVEL_DOMAINS 269

new TopLevelDomains[MAX_TOPLEVEL_DOMAINS][] = {
{"ac"}, {"ad"}, {"ae"}, {"aero"}, {"af"}, {"ag"}, {"ai"}, {"al"}, {"am"}, {"an"}, {"ao"}, {"aq"}, {"ar"}, {"arpa"}, {"as"},
{"asia"}, {"at"}, {"au"}, {"aw"}, {"ax"}, {"az"}, {"ba"}, {"bb"}, {"bd"}, {"be"}, {"bf"}, {"bg"}, {"bh"}, {"bi"}, {"biz"}, {"bj"},
{"bm"}, {"bn"}, {"bo"}, {"br"}, {"bs"}, {"bt"}, {"bv"}, {"bw"}, {"by"}, {"bz"}, {"ca"}, {"cat"}, {"cc"}, {"cd"}, {"cf"}, {"cg"},
{"ch"}, {"ci"}, {"ck"}, {"cl"}, {"cm"}, {"cn"}, {"co"}, {"com"}, {"coop"}, {"cr"}, {"cu"}, {"cv"}, {"cx"}, {"cy"}, {"cz"}, {"de"},
{"dj"}, {"dk"}, {"dm"}, {"do"}, {"dz"}, {"ec"}, {"edu"}, {"ee"}, {"eg"}, {"er"}, {"es"}, {"et"}, {"eu"}, {"fi"}, {"fj"}, {"fk"},
{"fm"}, {"fo"}, {"fr"}, {"ga"}, {"gb"}, {"gd"}, {"ge"}, {"gf"}, {"gg"}, {"gh"}, {"gi"}, {"gl"}, {"gm"}, {"gn"}, {"gov"}, {"gp"},
{"gq"}, {"gr"}, {"gs"}, {"gt"}, {"gu"}, {"gw"}, {"gy"}, {"hk"}, {"hm"}, {"hn"}, {"hr"}, {"ht"}, {"hu"}, {"id"}, {"ie"}, {"il"}, {"im"},
{"in"}, {"info"}, {"int"}, {"io"}, {"iq"}, {"ir"}, {"is"}, {"it"}, {"je"}, {"jm"}, {"jo"}, {"jobs"}, {"jp"}, {"ke"}, {"kg"}, {"kh"}, {"ki"},
{"km"}, {"kn"}, {"kp"}, {"kr"}, {"kw"}, {"ky"}, {"kz"}, {"la"}, {"lb"}, {"lc"}, {"li"}, {"lk"}, {"lr"}, {"ls"}, {"lt"}, {"lu"}, {"lv"}, {"ly"},
{"ma"}, {"mc"}, {"md"}, {"me"}, {"mg"}, {"mh"}, {"mil"}, {"mk"}, {"ml"}, {"mm"}, {"mn"}, {"mo"}, {"mobi"}, {"mp"}, {"mq"}, {"mr"}, {"ms"}, {"mt"}, {"mu"},
{"museum"}, {"mv"}, {"mw"}, {"mx"}, {"my"}, {"mz"}, {"na"}, {"name"}, {"nc"}, {"ne"}, {"net"}, {"nf"}, {"ng"}, {"ni"}, {"nl"}, {"no"}, {"np"}, {"nr"},
{"nu"}, {"nz"}, {"om"}, {"org"}, {"pa"}, {"pe"}, {"pf"}, {"pg"}, {"ph"}, {"pk"}, {"pl"}, {"pm"}, {"pn"}, {"pr"}, {"pro"}, {"ps"}, {"pt"}, {"pw"}, {"py"},
{"qa"}, {"re"}, {"ro"}, {"rs"}, {"ru"}, {"rw"}, {"sa"}, {"sb"}, {"sc"}, {"sd"}, {"se"}, {"sg"}, {"sh"}, {"si"}, {"sj"}, {"sk"}, {"sl"}, {"sm"}, {"sn"},
{"so"}, {"sr"}, {"st"}, {"su"}, {"sv"}, {"sy"}, {"sz"}, {"tc"}, {"td"}, {"tel"}, {"tf"}, {"tg"}, {"th"}, {"tj"}, {"tk"}, {"tl"}, {"tm"}, {"tn"}, {"to"},
{"tp"}, {"tr"}, {"travel"}, {"tt"}, {"tv"}, {"tw"}, {"tz"}, {"ua"}, {"ug"}, {"uk"}, {"us"}, {"uy"}, {"uz"}, {"va"}, {"vc"}, {"ve"}, {"vg"}, {"vi"}, {"vn"},
{"vu"}, {"wf"}, {"ws"}, {"ye"}, {"yt"}, {"yu"}, {"za"}, {"zm"}, {"zw"}
};

IsValidEMail(email[])
{
if(isnull(email)) return -1;

    new lenght = strlen(email),
        emailsplit[2][128],
        domainsplit[2][128];

sscanf(email, "p<@>s[128]s[128]", emailsplit[0], emailsplit[1]);

if(!strlen(emailsplit[0])) return -1;

sscanf(emailsplit[1], "p<.>s[128]s[128]", domainsplit[0], domainsplit[1]);

    if(strlen(domainsplit[0]) < 3) return -2;

    if(emailsplit[0][0] ==  .  || emailsplit[0][strlen(emailsplit[0]) - 1] ==  .  || strfind(emailsplit[0], "..", true) != -1) return -3;

new atsign;
    for(new j = 0; j < lenght; j++)
    {
        if(emailsplit[0][j])
        {
            if((emailsplit[0][j] >=  A  && emailsplit[0][j] <=  Z ) || (emailsplit[0][j] >=  a  && emailsplit[0][j] <=  z ) || (emailsplit[0][j] >=  0  && emailsplit[0][j] <=  9 ) || (emailsplit[0][j] ==  . ) || (emailsplit[0][j] ==  - ) || (emailsplit[0][j] ==  _ ))
            {
            }
            else return -4;
        }

        if(domainsplit[0][j])
        {
            if((domainsplit[0][j] >=  A  && domainsplit[0][j] <=  Z ) || (domainsplit[0][j] >=  a  && domainsplit[0][j] <=  z ) || (domainsplit[0][j] ==  - ))
            {
            }
            else return -5;
        }

        if(email[j] ==  @ )
        {
            atsign ++;
            if(atsign > 1) return -6;
        }
    }

if(!strcmp(email, "isim@domain.com", true)) return -8;

    for(new j = 0; j < MAX_TOPLEVEL_DOMAINS; j++)
    {
        if(strcmp(domainsplit[1], TopLevelDomains[j], true) == 0) return 1;
    }
    return -7;
}


Örnek kullanım:

PAWN Kodu: Seç

if(IsValidEMail(inputtext) <= 0)
{
switch(IsValidEMail(inputtext))
{
case -1: MesajGonder(playerid, TIP_HATA, "Yazmış olduğunuz e-posta adresi..bi saniye hiç bir şey yazmamışsın ki. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -2: MesajGonder(playerid, TIP_HATA, "Bir yere kadar doğru fakat yazmış olduğun domain kısmı olmamış. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -3: MesajGonder(playerid, TIP_HATA, "Domain isminden sonraki nokta(.) kısmında sıkıntı var. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -4: MesajGonder(playerid, TIP_HATA, "E-posta adresinde sadece A-Z, a-z, - ve _ kullanabilirsin. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -5: MesajGonder(playerid, TIP_HATA, "Domain kısmında sadece A-Z, a-z, - ve _ kullanabilirsin. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -6: MesajGonder(playerid, TIP_HATA, "Birden fazla @ işareti koymuşsun, öyle bir e-posta adresi olamaz. Lütfen e-posta adresini isim@domain.com şeklinde gir.");
case -8: MesajGonder(playerid, TIP_HATA, "E-posta adresini isim@domain.com şeklinde gir dedik, isim@domain.com yaz demedik.");
}
Dialog_Show(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, DIALOG_BASLIK" - E-mail", "{C85A5A}Geçerli bir e-mail adresi giriniz:", "Tamam", "");
return 1;
}


hata verecektir. dialog_show tanımlanmamış.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: viathegod32 - 17 Nisan 2019, 23:59:42
Girilen silahın ismini verir;

PAWN Kodu: Seç
stock SilahIsim(silahid)
{
new silahisim[32];
GetWeaponName(silahid, silahisim, sizeof(silahisim));

if(!silahid) silahisim = "Yok";
else if(silahid == 18) silahisim = "Molotov Cocktail";
else if(silahid == 44) silahisim = "Nightvision";
else if(silahid == 45) silahisim = "Infrared";
return silahisim;
}






Roleplay isim kontrolü yapar;

PAWN Kodu: Seç
stock RolePlayIsimKontrol(const isim[]) {
if(!isim[0] || strfind(isim, "_") == -1)
    return 0;

else for(new i = 0, len = strlen(isim); i != len; i ++) {
    if((i == 0) && (isim[i] <  A  || isim[i] >  Z ))
        return 0;

else if((i != 0 && i < len  && isim[i] ==  _ ) && (isim[i + 1] <  A  || isim[i + 1] >  Z ))
    return 0;

else if((isim[i] <  A  || isim[i] >  Z ) && (isim[i] <  a  || isim[i] >  z ) && isim[i] !=  _  && isim[i] !=  . )
    return 0;
}
return 1;
}






Girilen silahın obje modelini verir.

PAWN Kodu: Seç
stock SilahObjeBul(silahid) {
    new const silahmodelleri[] = {
0, 331, 333, 334, 335, 336, 337, 338, 339, 341, 321, 322, 323, 324,
325, 326, 342, 343, 344, 0, 0, 0, 346, 347, 348, 349, 350, 351, 352,
353, 355, 356, 372, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
367, 368, 368, 371
    };
    if(1 <= silahid <= 46)
        return silahmodelleri[silahid];

return 0;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: viathegod32 - 18 Nisan 2019, 00:09:32
Model isminden araç model idsini verir;

PAWN Kodu: Seç
new stock aracIsimler[][] = {
    "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster",
    "Stretch", "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
    "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer",
    "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach",
    "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo", "Seasparrow",
    "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair",
    "Berkley s RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic",
    "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton",
    "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
    "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick",
    "Boxville", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher",
    "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt", "Tanker", "Roadtrain",
    "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck",
    "Fortune", "Cadrona", "SWAT Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan",
    "Blade", "Streak", "Freight", "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder",
    "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster", "Monster",
    "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
    "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30",
    "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
    "Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "LSPD Devriye Aracı", "SFPD Devriye Aracı", "LVPD Devriye Aracı",
    "Police Rancher", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs",
    "Boxville", "Tiller", "Utility Trailer"
};

stock AracModelBul(const isim[])
{
if(IsNumeric(isim) && (strval(isim) >= 400 && strval(isim) <= 611))
    return strval(isim);

for(new i = 0; i < sizeof(aracIsimler); i++)
{
    if(strfind(aracIsimler[i], isim, true) != -1)
    {
        return i + 400;
}
}
return 0;
}

stock IsNumeric(const str[])
{
for(new i = 0, l = strlen(str); i != l; i ++)
{
    if(i == 0 && str[0] ==  - )
continue;

    else if(str[i] <  0  || str[i] >  9 )
return 0;
}
return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: viathegod32 - 20 Nisan 2019, 00:42:41
MySQL R40+ sürümler için kolay veri çekmeye yarar;

PAWN Kodu: Seç
stock Float:vericek_float(row, const field_name[])
{
static Float:str;
cache_get_value_name_float(row, field_name, str);
return str;
}

stock vericek_int(row, const field_name[])
{
    static str;
    cache_get_value_name_int(row, field_name, str);
    return str;
}

stock vericek_bool(row, const field_name[])
{
    static bool:test, bool:test2;
    cache_get_value_name_bool(row, field_name, test);
    switch(test) {
case 1: test2 = true;
default: test2 = false;
    }
    return test2;
}

stock vericek_varchar(row, const field_name[])
{
    static bilgi[1024];
    cache_get_value_name(row, field_name, bilgi);
    return bilgi;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: viathegod32 - 21 Nisan 2019, 14:54:58
İki oyuncunun birbirine girilen mesafede yakın olup olmadıklarını kontrol eder.

PAWN Kodu: Seç
stock YakinlikKontrol(playerid, hedefid, Float:mesafe)
{
new Float:fX, Float:fY, Float:fZ;
GetPlayerPos(hedefid, fX, fY, fZ);
return (GetPlayerInterior(playerid) == GetPlayerInterior(hedefid) && GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(hedefid)) && IsPlayerInRangeOfPoint(playerid, mesafe, fX, fY, fZ);
}


Örnek kullanım;

YakinlikKontrol(playerid, oyuncuid, 5.0)
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: ace - 12 Temmuz 2019, 11:20:04
Bilgi (replaceSwear)
Bir string icindeki küfürlu yaziyi '*' haline cevirir.

PAWN Kodu: Seç
stock replaceSwear(string[], badWord[], replace = '*')
{
new
i
;
while((i = strfind(string, badWord, true)) != -1)
{
for(new x = (i + strlen(badWord)); i != x; ++i)
{
string[i] = replace;
}
}
return 1;
}

PAWN Kodu: Seç
public OnPlayerText(playerid, text[])
{
new
badWords[][] =
{
"mal",
"salak"
}
;
for(new i; i != sizeof(badWords); ++i)
{
replaceSwear(text, badWords[i]);
}
return 1;
}

Bu örnek chat'de yazilan küfürleri '*' ile degistirir. (Mesela "mal" yazan olursa "***" haline cevirir).
(Istediginiz kadar önlemek icin küfürler ekleyebilirsiniz.)

Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 17 Haziran 2020, 22:03:13
Girilen herhangi bir sayının faktöriyelini almanızı sağlar.
stock Faktoriyel_Al(sayi){
new
bsayi = 1
;
for(new i = sayi; i > 0; i--){
  bsayi = bsayi * i;
}
return bsayi;
}
// Örnek Kullanım :
main()
{
    printf("Girilen Sayinin Faktoriyeli : %d", Faktoriyel_Al(5));
    // Örneğin 5 sayısının faktoriyelini hesaplamak istediniz, Çıktı : 120 olacaktır.
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 18 Haziran 2020, 00:19:54
[ALINTI] - Döngü kullanmak sizin verimliliğinizi düşürecektir ancak aşağıdaki fonksiyonlar sayesinde dizi değişkenlerinizi çok daha hızlı ve verimli bir şekilde doldurabilirsiniz !.
stock memset(variable[], cells, value) {
    new address;

    #emit LOAD.S.pri  variable
    #emit STOR.S.pri  address

    raw_memset(address, cells, value);
}

stock raw_memset(address, cells, value) {
    new param_adr;

    #emit LCTRL       6
    #emit MOVE.alt
    #emit LCTRL       0
    #emit ADD
    #emit MOVE.alt
    #emit LCTRL       1
    #emit SUB.alt
    #emit ADD.C       92
    #emit STOR.S.pri  param_adr
    #emit LOAD.S.pri  cells
    #emit SHL.C.pri   2
    #emit SREF.S.pri  param_adr

    #emit LOAD.S.alt  address
    #emit LOAD.S.pri  value
    #emit FILL        0
}

Örnek Kullanım :
new Dizi[10] = {5, 6, ...};
main()
{
     memset(Dizi, sizeof Dizi, 1234);
     for (new i = 0; i < sizeof(Dizi); i++){
     printf("Dizi Index [%d] = %d", i, Dizi[i]);
     }
      /* Çıktı : Dizi Index [0] = 1234
                        .
                        .
     */
}
     
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 18 Haziran 2020, 18:08:51
String veya Integer veri tipi dizi değişkenlerinde aramak istediğiniz herhangi bağımsız bir değerin veya metinin Index türünden karşılığını döndürür.

stock Dizi_Index_Ara_Int(d_dizi[], hucre = sizeof(d_dizi), adeger){
 for(new i = 0; i < hucre; i++){
 if(d_dizi[i] != adeger)
     continue;
 else
     return printf("Deger :%d",i);
 }
 return print("Aradiginiz Deger Bulunamadi (!)");
}
stock Dizi_Index_Ara_String(d_dizim[][], hucrem = sizeof(d_dizim), adegerm[]){
 for(new i = 0; i < hucrem; i++){
 if(strcmp(d_dizim[i], adegerm) != 0)
     continue;
 else
     return printf("Deger :%d",i);
 }
 return print("Aradiginiz Metin Bulunamadi (!)");
}
Hadi bir örnekle açıklayalım , Aşağıdaki şekilde iki farklı dizi değişkeniniz olduğunu düşünün.
new dizi[4] = {1, 3, 5, 7}; // Integer Dizi
new s_dizi[][] = {"merhaba", "gta", "multi"}; // String Dizi
Daha sonra ise kullanıma geçiyoruz :
main()
{
        Dizi_Index_Ara_Int(dizi, sizeof(dizi), 5); // 5 değerini arar ve Index numarasını döndürür.  Çıktı : Deger:2
        Dizi_Index_Ara_String(s_dizi, sizeof(s_dizi), "merhaba"); // "merhaba" adlı metni arar ve Index numarasını döndürür. Çıktı : Deger:0
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 24 Haziran 2020, 23:25:30
Aşağıdaki fonksiyon ile herhangi bir metinsel ifadenin içerisinde yer alan bir karakterin, metin içerisinde tekrar edip etmediğini kontrol edebilirsiniz :
#define MAX_TKARAKTER    29
// Max. Tekrar Eden Karakter - Alfabe Sayisi ; Kendinize Göre Düzenleyebilirsiniz
stock Tekrar_Karakter(metin[]){
 new
    k = 0,
    d_harf = 0,
    u = strlen(metin) - 1,
    bool:k_varmi,
    bool:k_dolu[MAX_TKARAKTER char]
 ;
 while(k < u){
    k++;
    if(k == d_harf)
        k = d_harf + 1;
    if(metin[d_harf] == metin[k] && metin[d_harf] != ' '){
      metin[k] = ' ';
      k_varmi = true; k_dolu{d_harf} = true;
     }
     if(k == u){
      if(metin[d_harf] != ' ' && k_dolu{d_harf}) { printf("Tekrarlanan Karakter : %c", metin[d_harf]); }
      d_harf++; k = -1;
     }
     if(d_harf == u)
        break;
 }
 if(!k_varmi)
    print("[UYARI] : Tekrarlanan Karakter Yok (!)");
}
Örnek Kullanım :
main()
{
  new k_Bul[] = "merhaba gta multi"; // Tekrar Eden Karakter : m, a ve t
  Tekrar_Karakter(k_Bul);
}
/* Çıktı :  Tekrarlanan Karakter : m
            Tekrarlanan Karakter : a
            Tekrarlanan Karakter : t
*/
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 06 Temmuz 2020, 20:12:18
Aşağıdaki fonksiyon, kullanılmasını istemediğiniz Türkçe karakterleri, kullanılmasını istediğiniz diğer karakterler ile değiştirerek tanımlanan metinsel ifadeyi döndürür :

new const Karakterler[][] = {
{'Ç', 'C'}, {'ç', 'c'},
{'İ', 'I'}, {'ı', 'i'},
{'Ş', 'S'}, {'ş', 's'},
{'Ğ', 'G'}, {'ğ', 'g'},
{'Ü', 'U'}, {'ü', 'u'},
{'Ö', 'O'}, {'ö', 'o'}
};
stock Turkce_Karakter(metin[]){
new
b_harf = 0,
k = -1,
  kar = sizeof(Karakterler) - 1,
  mu = strlen(metin)
;

while(k < kar){
    k++;
    if(metin[b_harf] == Karakterler[k][0]){
        metin[b_harf] = Karakterler[k][1];
          b_harf++;   k = -1;
      }
      if(b_harf == mu)
  break;
      if(k == kar && metin[b_harf] != Karakterler[k][0]){ b_harf++; k = -1; }
}
return metin;
}
Örnek Kulanım :
main()
{
    new Turkce_Metin[] = "Türkçe Öğreniyorum";
    printf("Yeni Metin : %s", Turkce_Karakter(Turkce_Metin));
    // Çıktı : Yeni Metin : Turkce Ogreniyorum
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 03 Ağustos 2020, 22:21:41
Aşağıdaki fonksiyon, herhangi bir metinsel ifade içerisinde silinmesini istediğiniz karakteri silerek düzenlenen metinsel ifadeyi döndürür :
stock Kar_Sil(metin[], karakter[], ku = sizeof(metin))
{
new
    IndexNum,
    mu = strlen(karakter)
;
if(mu == 1)
{
    for(new i; i < ku - 1; i++)
    {
if((IndexNum = strfind(metin, karakter, false)) != -1)
strdel(metin, IndexNum, IndexNum + 1);
    }
}
return metin;
}
Örnek Kullanım :
main()
{
    new karak[] = "merhaba gta multi";
    printf("Yeni Metin : %s", Kar_Sil(karak, "m"));
    /* Eğer 'm' adlı karakter varsa siler.
    Çıktı : Yeni Metin : erhaba gta ulti */
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 03 Eylül 2020, 14:51:48
Aşağıdaki fonksiyon RCON - Adminler için bir sohbet kayıt metin belgesi oluşturarak RCON - Adminler arasında geçen dialogları kayıt altına almanızı sağlar :
#define sohkay "sohbetkayit.txt"  // metin belgesi ismi
stock Sohbet_Kayit(playerid = 0xFFFF, const metin[])
{
if(IsPlayerAdmin(playerid))
{
                new
ymetin[30 + 128],
  File:mdosya=fopen(#sohkay, io_append),
  Isim[30]
;
GetPlayerName(playerid, Isim, sizeof Isim);
format(ymetin, sizeof ymetin, "%s: %s\r\n", Isim, metin);
Turkce_Karakter(ymetin), fwrite(mdosya, ymetin);
        fclose(mdosya);
}
}
Dikkat edilmesi gerekenler listesinde sadece "scripfliles" klasörü içerisine "sohbetkayit" adlı bir metin belgesi oluşturmaktır. Ayırca Turkce_Karakter() adlı fonksiyon yukarıda tanımlı olmaktadır.

Örnek Kullanım :
public OnPlayerText(playerid, text[])
{
Sohbet_Kayit(playerid, text);
return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 10 Ekim 2020, 15:38:13
Aşağıdaki fonksiyon yardımı ile iki nokta arasındaki mesafeyi yaklaşık olarak KM cinsinden hesaplayabilirsiniz :
stock Float:KM_Hesapla(Float:X2, Float:X1, Float:Y2, Float:Y1)
{
new
        Float:Islem,
Float:Metre,
Float:MesafeX,
Float:MesafeY,
Float:Hipo
;
Metre = floatdiv(85, 100); // Yaklaşık bir adım birim uzunluk
MesafeX = floatabs(X2 - X1); MesafeY = floatabs(Y2 - Y1);
Hipo = floatsqroot((MesafeX * MesafeX) + (MesafeY * MesafeY));
Islem = floatdiv(Hipo, Metre); // Metre Çevir
return floatdiv(Islem , 100); // KM Çevir
}
Örnek Komut :
CMD:birimkm(playerid)
{
new
    Float:X,
    Float:Y,
    Float:Z,
            Float:X1,
    Float:Y1,
    mGon[256]
;
GetPlayerPos(playerid, X, Y, Z);
X1=X+500; Y1=Y+500;
format(mGon, 256, "Koord X: %0.2f Koord Y: %0.2f Koord X1: %0.2f Koord Y1:%0.2f KM:%0.2f",X,Y,X1,Y1,KM_Hesapla(X1,X,Y1,Y));
SendClientMessage(playerid, -1, mGon);
SetPlayerPos(playerid,X1,Y1,Z+2);
return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 23 Ekim 2020, 16:11:17
Bir proje için hazırlamış olduğum bir fonksiyon ; Girilen Ay'ın sahip olduğu Max. gün sayısını döndürür :
stock MaxAyGun(ay)
{
new snc, a, g, y;
  getdate(y, a, g);
switch(ay)
{
case 1, 3, 5, 7, 8, 10, 12:
    snc = 31 ;
                case 4, 6, 9, 11:
    snc = 30;
                case 2:
    snc = ((y % 4) == 0) ? (29) : (28);
default:
    snc = 0;
}
return snc;
}
Örnek Kullanım :
main()
{
   printf("Max. Gun : %d", MaxAyGun(2)); //Şubat , Çıktı : Max. Gun : 29
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 23 Ekim 2020, 16:17:38
Yine bir proje için hazırlamıştım ; Bu fonksiyon, İki tarih arasındaki gün sayısını almanızı sağlar :
stock GunHesabi(y, a, g, y2, a2, g2)
{
new ysnc, asnc, sncg , i = 1, j = (a2 - a);
ysnc = (y2 - y) * 365;
if(ysnc >= 365 && (a == a2) && (g == g2))
    return ysnc;
if(j == 0 && ysnc < 365)
    return asnc = g2 - g;
for( ; i <= j; i++)
{
asnc = asnc + MaxAyGun(a + i);
}
asnc = asnc + (MaxAyGun(a) - g) - (MaxAyGun(a + j) - g2);
sncg = ysnc + asnc;
return sncg;
}
Örnek Kullanım :
main()
{
  new yil, ay, gun;
  getdate(yil, ay, gun);
  printf("Gun Sayisi %d ", GunHesabi(yil, ay, gun, 2022, 11, 25));
  //Çıktı : Gun Sayisi : 773
}
DipNot : MaxAyGun() adlı fonksiyon yukarıda tanımlı olmaktadır.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 29 Kasım 2020, 20:48:03
Aşağıdaki fonksiyon, kullandığınız benzersiz tamsayı bir dizi içeriğini, büyükten küçüğe veya küçükten büyüğe belirtilen limit koşulu altında sıralamanızı sağlar. Bazı arkadaşlar MySQL sorgusu kullanmadan direkt olarak oyun içerisinden veri sıralaması yapmak isterse kullanışlı olabileceğini düşünüyorum :

stock Sirala(dizi[], u = sizeof (dizi), bool:tip = false, limit = 10)
{
new
    kukla[MAX_PLAYERS + 1],
    kukIndex
;
for(new i; i < u; i++)
{
for(new j; j < u; j++)
{
if(dizi[i] < dizi[j])
{
    kukIndex = kukIndex + 1;
}
if(j == (u - 1))
{
        if(kukIndex == 0)
    {
        kukla[0] = dizi[i];
    }
    else
    {
kukla[kukIndex] = dizi[i];
  kukIndex = 0;
          }
}
}
if(i == (u - 1))
{
    if(!tip)
    {
                         for(new k; k < u ; k++)
         {
    if(k > (limit - 1))
        continue;
    else
printf("Sayi : %i", kukla[k]);
}
    }
    else
    {
                         for(new k = (u - 1), m = k; k > -1; k--)
         {
    if(k <= (m - limit))
        continue;
    else
printf("Sayi : %i", kukla[k]);
        }
           }
       }
       }
}

boo:tip :
false - Büyükten Küçüğe.
true - Küçükten Büyüğe
Varsayılan false
limit :
Sıralama Limiti - Varsayılan 10

Aşağıdaki dizi örneklerinde Tamsayı ifade ve ASCII karakter kodlarını içeren 2 dizi bulunmakta. Bunları kullanarak örnek bir uygulama yapalım :

new Sira_Dizi[12] = {11, 10, 12, 2, 4, 5, 6, 7, 3, 8, 1, 9};
new Sira_Dizi2[5] = {
'M', // 77
'U', // 85
'L', // 76
'T', // 84
'I'  // 73
};

main()
{
    Sirala(Sira_Dizi, sizeof (Sira_Dizi), false, 6);
    // Çıktı : 12, 11, 10, 9, 8, 7
    Sirala(Sira_Dizi2, sizeof (Sira_Dizi2), false, 4);
    // Çıktı : 85, 84, 77, 76
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 08 Aralık 2020, 19:19:16
Aşağıdaki fonksiyon yardımı ile yaklaşmakta olan yılbaşı gecesi için kalan zamanı gün, saat, dakika, saniye cinsinden alabilmenizi sağlar :

stock YB_Geri_Sayim(const bgun = 1440, const bsaat = 60, const bdakika = 60)
{
new msg[72],
saat, dakika, saniye,
yil, ay, gun,
kalan_gun
;
gettime(saat, dakika, saniye);
getdate(yil, ay, gun);
kalan_gun = GunHesabi(yil, ay, gun, 2020, 8, 31);
format(msg, 64, "Kalan Zaman : Gun %i, Saat %i, Dakika %i, Saniye %i", kalan_gun, (((bgun / 60) - saat) - 1), ((bsaat - dakika) - 1),(bdakika - saniye));
return msg;
}
Örnek Kullanım :
main()
{
    printf(YB_Geri_Sayim());
    // Çıktı : Kalan Zaman Gun 23, Saat 4, Dakika 42, Saniye 54
}
DipNot : GunHesabi() ve MaxAyGun() adlı fonksiyonlar yukarıda tanımlı olmaktadır.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 23 Aralık 2020, 13:05:27
Aşağıdaki fonksiyon yardımı ile girilen ip adresinin diğer oyuncular ile karşılaştırılmasını ve aynı ip adresini kullanan oyuncu sayısını almanızı sağlar:
stock IP_AL(ip_adresi[])
{
 new
     ip_sayim = 0,
     i = 0, j = GetMaxPlayers(),
     ip_adres[32+1]
 ;
 for( ; i < j; i++)  if(IsPlayerConnected(i))
 {
            GetPlayerIp(i,ip_adres,32);
            if(!strcmp(ip_adres, ip_adresi)) ip_sayim++;
 }
 return ip_sayim;
}
Örnek Kullanım:
#define MAX_GIRIS (2)
public OnPlayerConnect(playerid)
{
        new ip_ad[32+1];
        GetPlayerIp(playerid,ip_ad,32);
        new ip_say = IP_AL(ip_ad);
        if(ip_say > MAX_GIRIS)
          return SendClientMessage(playerid,-1,"Aynı IP üzerinden girilen limit sınırını aştınız(!)"), Kick(playerid);
 return 1;
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: squarepants - 20 Şubat 2021, 22:45:57
Basit ama kullanışlı olduğunu düşünerek oluşturmuş olduğum bu fonksiyon, 2D koordinat düzlemi üzerinde bölgesel olarak çalışabilmenize olanak sağlar.
stock Duzlem_Bolgesi(Float:mX, Float:mY, Float:X, Float:Y)
{
new sonuc = (X > mX && Y > mY) ? (1) : ((X < mX && Y > mY) ? (2) : ((X < mX && Y < mY) ? (3) : (4)));
return sonuc;
}

Örneğin:

Bilindiği üzere 30  veya 150 dereceye ait sinus değerleri, birim çember üzerinde aynı değeri ifade etmektedir (0.5 veya 1 / 2). Bu yüzden ters trigonometrik fonksiyonlar ile açı hesabı yapabilmek arcsinus fonksiyonu için [-1, 1] arasında kısıtlanmaktadır. Bu kısıtlamayı kaldırabilmek ve doğru açı hesabını yapabilmek için aşağıdaki örneği inceleyebilirsiniz:

main()
{
        new Float: ax = 0.0, Float:by = 0.0, Float: cx = ax - 0.866, Float:dy = by + 0.5, Float:hipo, Float:Aci[2];
        hipo = floatsqroot((floatabs(cx - ax) * floatabs(cx - ax)) + (floatabs(dy - by) * floatabs(dy - by)));
        switch(Duzlem_Bolgesi(ax, by, cx, dy))
{
case 1:
{
Aci[0] = asin(floatabs(dy - by) / hipo);
Aci[1] = acos(floatabs(ax - cx) / hipo);
}
case 2:
{
Aci[0] = 180 - asin(floatabs(dy - by) / hipo);
Aci[1] = 180 - acos(floatabs(ax - cx) / hipo);
}
case 3:
{
                        Aci[0] = 270 - asin(floatabs(dy - by) / hipo);
Aci[1] = 270 - acos(floatabs(ax - cx) / hipo);
}
case 4:
{
                        Aci[0] = 360 - asin(floatabs(dy - by) / hipo);
Aci[1] = 360 - acos(floatabs(ax - cx) / hipo);
}
}
        printf("sinus aci degeri : %f", Aci[0]); //sinus aci degeri : 149.999267
printf("cosinus aci degeri : %f", Aci[1]); //cosinus aci degeri : 149.999267
}
Görüldüğü üzere asin(0.5 / hipo), bize istediğimiz açı değerini verecektir. Ancak bu açı - 0.866 değeri nedeni ile 2. bölgede ise 150 değeri yerine 30 değeri ile sabit kalacaktır. Bu nedenle 180  - asin(0.5 / hipo) işlemi ile istenilen bölgede istenilen açı değerini çekmiş bulunuyoruz (149.999267), yaklaşık olarak 150 derece floatround() fonsiyonu ile istenilen tamsayı değerine yuvarlanabilir.
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: mojo - 27 Ocak 2022, 04:42:03
İki oyuncunun birbirine yakın koordinatlarda olup olmadığını kontrol eder. Yakınsa 1 değilse 0 değerini döndürür.

PAWN Kodu: Seç
stock IsPlayerNearPlayer(playerid, targetid, Float: radius)
{
    new Float: x, Float: y, Float: z;
    GetPlayerPos(targetid, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, radius, x, y, z))
    {
        return 1;
    }
    return 0;
}

Örnek kullanım (targetid tanımlanmış olmalıdır):

PAWN Kodu: Seç
if(!IsPlayerNearPlayer(playerid, targetid, 30.0)) return SendClientMessage(playerid, -1, "aranızdaki mesafe 30.0'dan fazla");
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: R4IN - 28 Şubat 2022, 17:38:10
Parametre dönüşlerinin veya diğer anlamıyla argümanların aktif olup olmadığını kontrol etmeden önce belirli parametreler içerisinde döngü oluşturur ve çalışıp çalışmadığını konsola yazdırır.

(https://i.hizliresim.com/b95i09p.PNG)

PAWN Kodu: Seç
stock GetMaxIndexArgs(Float:index, args[])
{
for(new i = 0; i < index; i++)
{
    if(!args[0])
    {
args[0] = args[1];
while(index < 4)
{
                args[0] = args[1];
if(args[1] != args[2]) return 1;
else
{
    if(args[3])
    {
args[3] = args[4];
index++;
}
else
{
    return args[0];
}
}
}
}
else
{
    for(index = 1; index < args[0]; i++)
    {
switch (index)
{
case 0:
{
        return i + 1 / args[1];
}
case 1:
{
    return i - 1 / args[2];
}
case 2:
{
    return i * 1 / args[3];
}
    case 3:
    {
        return i / 1 / args[3];
    }
    default:
    {
        args[0] = args[1];
    }
}
    }
}
}
return true;
}

* Ne işe yarar? *

- Parametre olarak argümanların optimizasyon sorunu bir nevi iyileştirir. Ayrıca index numaralarını öğrenebilirsiniz.

Örnek kullanım;


PAWN Kodu: Seç
main() {

new Float:dex, arguman[32];
printf("GetMaxIndexArgs: %d", GetMaxIndexArgs(dex, arguman));
}
Başlık: Ynt: Kullanışlı Fonksiyonlar
Gönderen: ReveR - 18 Ağustos 2024, 00:04:50
Belirtilen aracın hızını ayarlar ve almaya yarar:

PAWN Kodu: Seç
// Belirtilen araç ID'sine sahip aracın hızını ayarlar
SetVehicleSpeed(vehicleid, Float:speed)
{
    new Float:velocity[3];
    GetVehicleVelocity(vehicleid, velocity[0], velocity[1], velocity[2]);
    velocity[0] *= speed;
    velocity[1] *= speed;
    velocity[2] *= speed;
    SetVehicleVelocity(vehicleid, velocity[0], velocity[1], velocity[2]);
}

// Belirtilen araç ID'sine sahip aracın hızını alır
GetVehicleSpeed(vehicleid, &Float:speed)
{
    new Float:velocity[3];
    GetVehicleVelocity(vehicleid, velocity[0], velocity[1], velocity[2]);
    speed = floatsqroot(velocity[0] * velocity[0] + velocity[1] * velocity[1] + velocity[2] * velocity[2]);
}

Araç motorunu ve ışıklarını kontrol etmen için:

PAWN Kodu: Seç
// Belirtilen araç ID'sine sahip aracın motorunu açar veya kapatır
SetVehicleEngineState(vehicleid, state)
{
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vehicleid, state, lights, alarm, doors, bonnet, boot, objective);
}

// Belirtilen araç ID'sine sahip aracın ışıklarını açar veya kapatır
SetVehicleLightsState(vehicleid, state)
{
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vehicleid, engine, state, alarm, doors, bonnet, boot, objective);
}

Aracın hasarını ayarlar veya almaya yarar:

PAWN Kodu: Seç
// Belirtilen araç ID'sine sahip aracın hasar durumunu ayarlar
SetVehicleDamage(vehicleid, panels, doors, lights, tires)
{
    UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
}

// Belirtilen araç ID'sine sahip aracın hasar durumunu alır
GetVehicleDamage(vehicleid, &panels, &doors, &lights, &tires)
{
    GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
}

Araç Patlatma ve Onarma ile ilgili işlemler:

PAWN Kodu: Seç
// Belirtilen araç ID'sine sahip aracı patlatır
ExplodeVehicle(vehicleid)
{
    SetVehicleHealth(vehicleid, 0.0);
}

// Belirtilen araç ID'sine sahip aracı onarır
RepairVehicle(vehicleid)
{
    SetVehicleHealth(vehicleid, 1000.0);
    new panels, doors, lights, tires;
    GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
    UpdateVehicleDamageStatus(vehicleid, 0, 0, 0, 0);
}