toXic | 30 Eylül 2010 09:41 | IRCServices - ngi ve ni Kullanimlar. IRCServiceste bazi durumlari kullanmak için pointerlar kullanilir. Bu pointerlar birçok özellikleri almak için, işlem yapmak için sıkca kullanilir. Örneğin *ni..
Örnek vericek olursak; Kod:
/************************************************************************/
//coded toXic
static void do_sans(User *u)
{
NickInfo *ni;
ni = get_nickinfo(u->nick);
#define bekle 3;
static int toxolog = 60*60*24*bekle;
time_t now = time(NULL);
NickGroupInfo *ngi;
ngi = get_ngi(ni);
if (!ni) {
send_cmd(s_NickServ, "NOTICE %s Nickiniz'i kaydetmelisiniz.", u->nick);
return;
}
if (!is_services_admin(u) && ngi->lastsans && now - ngi->lastsans < toxolog) {
send_cmd(s_NickServ, "NOTICE %s Bu Komutu \2( 3 ) \2 Gunde, sadece \2 1 \2 Kez Kullanabilirsiniz..", u->nick);
return;
}
ngi->lastsans = now;
/*
int Kalan;
Kalan = now - ngi->lastsans - toxolog;
send_cmd(s_NickServ, "NOTICE %s kalan sureniz ( \2%d\2 )", u->nick, Kalan);
*/
int x = 0;
int ibo = 0;
for (ibo = 0; ibo < 1; ++ibo)
x=rand()%100;
send_cmd(s_NickServ, "NOTICE %s Sans Numaraniz, \2 ( %d )\2 Olmustur..", u->nick, x);
send_cmd(s_NickServ, "NOTICE %s Kazanma bilgisi ", u->nick);
if (x == 35) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "SWHOIS %s :Vhost Sansli Kullanicisi", u->nick);
}
else if (x == 44) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Size Whois cekenleri goreceksiniz..", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +W :1", u->nick);
}
else if (x == 62) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Kanallardan atilmayacaksiniz..", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +q :1", u->nick);
}
else if (x == 77) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Vip Kullanicisi oldunuz.", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +qW :1", u->nick);
}
else if (x == 93) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Size Whois cekenleri goreceksiniz..", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +W :1", u->nick);
}
else {
send_cmd(s_NickServ, "NOTICE %s Maalesef, Sansli gununuzde degilsiniz..", u->nick);
send_cmd(s_NickServ, "NOTICE %s Tekrar Kullanim icin, \2 3 \2 Gun beklemelisiniz..", u->nick);
}
}
bu sekilde bir kod yazalim. Burada *ni'yi kullandik. Fakat Kullanicinin bilgilerini almak için bir pointer daha kullanmaliyiz. Oda; Kod:
ni = get_nickinfo(u->nick); Burada, get_nickinfo kullanicinin nick bilgilerini alir. Mesela sunucuya giren kullanicilara karşilama yapmak için, Kod:
NickInfo *ni;
ni = get_nickinfo(u->nick);
#define tox "Nickiniz kayitlidir."
if (ni) {
send_cmd(s_NickServ, "PRIVMSG %s %s", u->nick, tox);
} Olarak kullaniyoruz, Kullanicinin nickinin kayitli olup olmadiğini bu şekilde algilatiyoruz. Kod:
if (!ni) {
send_cmd(s_NickServ, "NOTICE %s Nickiniz'i kaydetmelisiniz.", u->nick);
return;
} Burada kayitsiz nicklere komut kullanimini kapadik. return burada işlemi kesmiş. Eğer return kullanilmasa idi, işlem gerçekleşirdi.
İlk Kodumuzda varsayalim ki, Kod:
ni = get_nickinfo(u->nick); yok.. Alıntı:
© NickServ Sifre kabul edildi.
nickserv -- sans
© NickServ Nickiniz'i kaydetmelisiniz.
|
Nick kayitli olduğu halde, nickinizi kaydetmelisiniz diyor. 10 harfcik bir kod bile çok önemli kod yazimi için. Hatta bu segmantationa kadar rahatlikla götürebilir.
Gelelim ngi ' ye.
Kullanimi; Seklindedir.
Bunu; Kod:
if (!is_services_admin(u) && ngi->lastsans && now - ngi->lastsans < toxolog) {
send_cmd(s_NickServ, "NOTICE %s Bu Komutu \2( 3 ) \2 Gunde, sadece \2 1 \2 Kez Kullanabilirsiniz..", u->nick);
return;
} olarak kullanmişiz. ngi en cok emaildi sifre idi yani kişiye özel işlemlerde kullanilmaktadir. |