Ön SözBu 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ı- Kodunuzu paylaşmadan önce denemeniz gerekmektedir!
- Paylaştığınız kod size ait değilse sahibinin ismini bildiriniz!
- Konuyla alakasız yorumlar atmayınız!
- Paylaştığınız kod fonksiyon tanımına uymuyorsa silinebilir.
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);
}
}
}
minrand
stock minrand(min, max) return random(max - min) + min;
Minimum random değerini ve maximum random değerini ayarlar.
Örnek kullanım:
new deger = minrand(5, 10);
printf("gelen deger: %d", deger);
minimum 5 maximum 10 gelir.
Oyuncunun belirli bir silahını silme;
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:
CMD:osil(playerid, params[])
{
SilahSil(playerid, SilahID);
return 1;
}
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:
Arkadaşlar bir şeyleri seviyeli olarak açıklayın lütfen, iletileriniz siliniyor yoksa.
Matematik İşlemleri
İki sayıyı birbirine işlem yaptırır.
stock Topla(sayi, sayi2)
{
return sayi + sayi2;
}
stock Cikar(sayi, sayi2)
{
return sayi - sayi2;
}
stock Carp(sayi, sayi2)
{
return sayi * sayi2;
}
stock Bol(sayi, sayi2)
{
return sayi / sayi2;
}
Örnek kullanım:
printf("25 + 49 = %d", Topla(25, 49));
stock KaresiniAl(sayi)
{
return sayi * sayi;
}
stock KupunuAl(sayi)
{
return sayi * sayi * sayi;
}
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:
public OnFilterScriptInit()
{
new st[128];
format(st, 128, "%d", nTime(3, 2));
print(st);
return 1;
}
GetVehicleType
#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:
public OnPlayerStateChange(playerid,newstate,oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
if(GetVehicleType(GetVehicleModel(GetPlayerVehicleID(playerid))) == VEHICLE_TYPE_PLANE)
{
// Kodlar
}
}
return 1;
}
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
prinft("%i",GetPlayerID("_Backup"));
Çıktı 5
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.
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.
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.
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.
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.
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
Fonksiyona verdiğiniz tamsayı değerini para birimine çevirir.
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;
}
// 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.
Ö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;
}
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.
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
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.
Alıntı yapılan: ThaLasso - 11 Kasım 2017, 19:40:26
Fonksiyona verdiğiniz tamsayı değerini para birimine çevirir.
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;
}
// 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.
// 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.
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;
}
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.
stock AktifOyuncuCek()
{
new sayi;
for(new s = 0; s < MAX_PLAYERS; s++)
{
if(IsPlayerConnected(s))
{
sayi++;
}
}
return sayi;
}
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.
stock AktifOyuncuCek()
{
new sayi;
for(new s = 0; s < MAX_PLAYERS; s++)
{
if(IsPlayerConnected(s))
{
sayi++;
}
}
return sayi;
}
stock Oyuncular()
{
new toplam;
foreach(new i: Player)
{
toplam++;
}
return toplam;
}
veya
stock Oyuncular()
{
return Iter_Count(Player);
}
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.
stock AktifOyuncuCek()
{
new sayi;
for(new s = 0; s < MAX_PLAYERS; s++)
{
if(IsPlayerConnected(s))
{
sayi++;
}
}
return sayi;
}
stock Oyuncular()
{
new toplam;
foreach(new i: Player)
{
toplam++;
}
return toplam;
}
veya
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.
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)
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)
#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;
}
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;
}
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;
}
Roleplay sunucuları veya benzeri bir reload sistemi için kullanabileceğiniz animasyonlar.
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;
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;
}
Binary file, dosya yolu ile dosya adına göre boş bir ID çekme;
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;
}
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;
}
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;
}
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));
}
Hatalı e-posta tespit eder. Kendinize göre yazıları düzeltin işte.
#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:
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;
}
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.
#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:
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.
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.
#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:
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ış.
Girilen silahın ismini verir;
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;
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.
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;
}
Model isminden araç model idsini verir;
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;
}
MySQL R40+ sürümler için kolay veri çekmeye yarar;
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;
}
İki oyuncunun birbirine girilen mesafede yakın olup olmadıklarını kontrol eder.
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)
Bilgi (replaceSwear)
Bir string icindeki küfürlu yaziyi '*' haline cevirir.
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;
}
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.)
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.
}
[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
.
.
*/
}
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
}
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
*/
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
}
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 */
}
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;
}
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;
}
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
}
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.
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
}
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.
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;
}
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.
İki oyuncunun birbirine yakın koordinatlarda olup olmadığını kontrol eder. Yakınsa 1 değilse 0 değerini döndürür.
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):
if(!IsPlayerNearPlayer(playerid, targetid, 30.0)) return SendClientMessage(playerid, -1, "aranızdaki mesafe 30.0'dan fazla");
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)
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;
main() {
new Float:dex, arguman[32];
printf("GetMaxIndexArgs: %d", GetMaxIndexArgs(dex, arguman));
}
Belirtilen aracın hızını ayarlar ve almaya yarar:
// 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:
// 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:
// 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:
// 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);
}