PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
// Dosyamizin konumunu file adli bir sabite baglayalim.
new const file[] = "addons/amxmodx/configs/kayitlar.log";
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
}
public plugin_cfg() {
// Belirtilen konumda oyle bir dosya yoksa biz yaratalim.
if(!file_exists(file)) {
new f = fopen(file,"wt");
fclose(f);
}
}
public client_putinserver(id) {
// Oyuncu oyuna girdiginde bilgilerini toplayalim
new name[32],steamid[32],ip[32];
get_user_name(id,name,sizeof(name))
get_user_authid(id,steamid,sizeof(steamid))
get_user_ip(id,ip,sizeof(ip),0)
// Eger ismi daha once dosyanin icine yazilmamissa oyuncuyu ekleyecek fonksiyonu calistiralim.
if(!is_name_exist(id,file)) {
add_player(name,steamid,ip)
}
}
// add player fonksiyonunu yaratalim
public add_player(const name[],const steamid[], const ip[]) {
new WriteData[96];
format(WriteData,sizeof(WriteData),"^"%s^" ^"%s^" ^"%s^"",name,steamid,ip)
write_file(file,WriteData)
}
// is_name_exist stockunu yaratalim. Bu Stock eger oyuncunun ismi dosyada yaziliysa true, yazili degilse false a doner.
stock is_name_exist(id,const file[]) {
// Toplam satir sayısını bulalım.
new total_lines = file_size(file,1);
new txtlen,found_matching;
new szLineText[96],user_name[32];
get_user_name(id,user_name,sizeof(user_name))
// Olası tüm satırlar için kontrol yapmamız gerek. Bunun için de for döngüsünü kullanalım.
for( new line ; line < total_lines ; line++ ) { // Satır, toplam satır sayısına eşit olduğunda döngü duracaktır.
// Dosyada belli bir satırı okutmak için bu fonksiyonu kullanalım.
read_file(file,line,szLineText,sizeof(szLineText),txtlen)
// satır boş ise döngüyi baştan alalım. Böylece olası bir boş satır varsa cpu kullanımından tasarruf etmek için
// başa sarıp bir sonraki satıra atlayalım.
if(szLineText[0] == 0) continue;
new arg_name[32],arg_steamid[32],arg_ip[32];
// Parse = parçala fonksiyonu, belli bir stringi bölmek için kullanılır.
// Peki neye göre bölüyor ? Parse tırnak içinde belirtilmiş tüm yazıları parçalar.
// Örnegin ("a" "b" "c") bir string halinde bulunuyorsa, bu fonksiyonla bu stringi 3 farklı stringe ayırabiliriz.
// ("a") , ("b"), ("c") şekline parçalanmış olur
parse(szLineText,arg_name,sizeof(arg_name),arg_steamid,sizeof(arg_steamid),arg_ip,sizeof(arg_ip))
// Eğer ilk parametrede yazan isim bilgisi ile belirtilen oyuncunun ismi aynı ise eşleşme_bulundu değişkenine 1 ekle.
// Ve döngüyü kır. Böylece boşa cpu kullanmamış oluruz.
if(equali(user_name,arg_name)) {
found_matching++
break;
}
continue
}
// Eger eşleşme bulunduysa true ya döndür.
if(found_matching) return true;
// Bulunmadıysa false.
return false;
}