GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Süreli *** sistemleri nasıl yapılır?

Başlatan Dyternal, 10 Mart 2019, 09:07:58

« önceki - sonraki »

0 Üye ve 3 Ziyaretçi konuyu incelemekte.

Dyternal

Forumda bir arkadaşımızın yardım talebi üzerine yapılmıştır. Umarım işinize yarar dostlarım.


Ben şuanda VIP sistemi üzerine gideceğim.





Öncelikle bir değişken oluşturalım.


new oVIP[MAX_PLAYERS];


Şimdide /makevip komutunu yapalım.


CMD:makevip(playerid, params[])
{
new id, level, gun;
if(!IsPlayerAdmin(playerid)) return HataMesaji(playerid, "RCON değilsin!");

if(sscanf(params, "uid", id, level, gun)) return KullanimMesaji(playerid, "makevip <id/isim> <gun>");
if(!IsPlayerConnected(id)) return HataMesaji(playerid, "Oyuncu oyunda değil!");
if(level < 0 || level > 4) return HataMesaji(playerid, "Level aralığı: "ad"1-4");

VIPYap(id, gun, level);
return 1;
}


Komutu yaptık fakat orada gördüğünüz VIPYap fonksiyonu şuanda modda yok, hemen ekleyelim. Bundan sonrasını anlatacağım...


stock VIPYap(id, gun, level)
{
new query[500];
oVIP[playerid] = level;
switch(level)
{
case 0:
{
BilgiMesaji(id, "Bir admin tarafından "wb"VIP "w"yetkiniz alındı!");
mysql_format(sql, query, sizeof query, "DELETE FROM `vipler` WHERE `vip_isim`='%d'", IsimCek(id));
mysql_query(sql, query);
return 1;
}
case 1: BilgiMesaji(id, "Bir admin tarafından "wb"Gümüş VIP "w"yapıldınız!");
case 2: BilgiMesaji(id, "Bir admin tarafından "wb"Altın VIP "w"yapıldınız!");
case 3: BilgiMesaji(id, "Bir admin tarafından "wb"Elmas VIP "w"yapıldınız!");
case 4: BilgiMesaji(id, "Bir admin tarafından "wb"Premium VIP "w"yapıldınız!");
}
mysql_format(sql, query, sizeof query, "DELETE FROM `vipler` WHERE `vip_isim`='%s'", IsimCek(id));
mysql_query(sql, query);
mysql_format(sql, query, sizeof query, "INSERT INTO `vipler` (vip_isim, vip_level, vip_asilgun, vip_gun) VALUES ('%s', '%d', '%d', '%d')", IsimCek(id), level, gettime() + (gun * 86400), gun);
mysql_query(sql, query);
        }
return 1;
}


Burada oyuncuya leveli verdik ve yetkiye göre isimlendirerek oyuncuya mesaj gönderdik, sonra veritabanından oyuncuyu silip viplere kaydettirdik.

NOT: vip_asilgun bizim çok işimize yarayacak, vip_gun ise bizim anlamamız için...

Her şeyi hallettik süreleri falan fakat kontrolü yapmadık hemen yapalım!

stock VIPKontrol(playerid)
{
new query[500];
mysql_format(sql, query, sizeof(query), "SELECT * FROM `vipler` WHERE `vip_isim` = '%s'", IsimCek(playerid));
mysql_query(sql, query);

if(cache_num_rows() > 0)
{
new gun, level;
            cache_get_value_name_int (0, "vip_level", level);
cache_get_value_name_int (0, "vip_asilgun", gun);
if(gettime() < gun)
{
oVIP[playerid] = level;
switch(level)
{
case 1: BilgiMesaji(playerid, "Oyuna "wb"Gümüş VIP "w"olarak giriş yaptınız!");
case 2: BilgiMesaji(playerid, "Oyuna "wb"Altın VIP "w"olarak giriş yaptınız!");
case 3: BilgiMesaji(playerid, "Oyuna "wb"Elmas VIP "w"olarak giriş yaptınız!");
case 4: BilgiMesaji(playerid, "Oyuna "wb"Premium VIP "w"olarak giriş yaptınız!");
}
}
else
{
mysql_format(sql, query, sizeof query, "DELETE FROM `vipler` WHERE `vip_isim` = '%s'", IsimCek(playerid));
mysql_query(sql, query);
  oVIP[playerid] = 0;
switch(level)
{
case 1: BilgiMesaji(playerid, "VIP süreniz sona erdi! - "wb"Gümüş VIP");
case 2: BilgiMesaji(playerid, "VIP süreniz sona erdi! - "wb"Altın VIP");
case 3: BilgiMesaji(playerid, "VIP süreniz sona erdi! - "wb"Elmas VIP");
case 4: BilgiMesaji(playerid, "VIP süreniz sona erdi! - "wb"Premium VIP");
}
}
}
return 1;
}


Burada ise size önemli dediğim vip_asilgun ile bugün arasındaki farkı sorgulattık ve şuanki zaman o zamandan küçükse oyuncumuza yetkisini verdik. Eğer şuanki zamandan büyükse yetkisini aldık.

Herşeyi hallettik şimdi sorgumuzu oyuncu oyuna bağlanınca yaptıralım siz istediğiniz gibi girişede koyabilirsiniz.


public OnPlayerConnect(playerid)
{
        VIPKontrol(playerid);
return 1;
}


Her şey tamam fakat BilgiMesaji gibi fonksiyonları unuttuk hemen yazalım.


stock BilgiMesaji(playerid, msj[])
{
new str[500];
format(str, sizeof str, "< ! >: {FFFFFF}%s", msj);
return SendClientMessage(playerid, 0x33FF33AA, str);
}
stock KullanimMesaji(playerid, msj[])
{
new str[500];
format(str, sizeof str, "KULLANIM: {FFFFFF}/%s", msj);
return SendClientMessage(playerid, 0xFFBD0AAA, str);
}
stock HataMesaji(playerid, msj[])
{
new str[500];
format(str, sizeof str, "< ! >: {FFFFFF}%s", msj);
return SendClientMessage(playerid, 0xFF384CFF, str);
}
stock YetersizSeviye(playerid, level)
{
new str[500];
format(str, sizeof str, "< ! >: {FFFFFF}Bu komutu kullanabilmek için {33FF33}%d{FFFFFF} seviye yetkili olmalısınız!", level);
return SendClientMessage(playerid, 0xFF0000AA, str);
}





Anlamadığınız yer olursa sorabilirsiniz.
Son düzenlenme: 10 Mart 2019, 10:27:09 Dyternal

xentrow


Dyternal

Modumdan çıkardığım için vericek_int fonksiyonunu değiştirmeyi unutmuşum, düzenlendi.

Alıntı yapılan: darkwing - 10 Mart 2019, 10:00:03

Eline sağlık  :helal:


Teşekkürler işine yarar inşallah.


Veoper

Ellerine sağlık, "wb" ve "w" tanıtılmamış

PAWN Kodu: Seç

#define w "{FFFFFF}"
#define wb "{2196f3}"


case 1: BilgiMesaji(id, "Bir admin tarafından "wb"Gümüş VIP "w"yapıldınız!");
Son düzenlenme: 10 Mart 2019, 10:48:03 Veoper

Dyternal

Alıntı yapılan: Veoper - 10 Mart 2019, 10:46:05

Ellerine sağlık, "wb" ve "w" tanıtılmamış

PAWN Kodu: Seç

#define w "{FFFFFF}"
#define wb "{2196f3}"


case 1: BilgiMesaji(id, "Bir admin tarafından "wb"Gümüş VIP "w"yapıldınız!");


Teşekkürler, dediğim gibi Freeroam modumdan çıkardığım için oldu bunlar hep.  :helal:


flareoNNN

Komutta;
if(sscanf(params, "uid", id, level, gun)) return KullanimMesaji(playerid, "makevip <id/isim> <level> <gün>");

VIPYap fonksiyonun da;
mysql_format(sql, query, sizeof query, "DELETE FROM `vipler` WHERE `vip_isim`= '%e'", IsimCek(id));

olarak düzenle.

VIPKontrol'ün OnPlayerSpawn vb. bir yerde çağırılması daha doğru olur, aksi halde oyuncu oyundan hiç çıkmazsa VIP kullanmaya devam edebilir.

YetersizSeviye fonksiyonu boşa eklenmiş, IsimCek fonksiyonu eksik.

stock IsimCek(playerid)
{
new ism[24] = _:0.0;
GetPlayerName(playerid, ism, 24);
return ism;
}


Ayrıca cache tutması gerekmeyen mysql_query'lerin cache'lerini temizle aksi halde zamanla MySQL sunucu RAM'ını şişerecek ve lag yapacaktır.

Son olarak bir renk eksik;
#define ad "{00FF00}"
Son düzenlenme: 10 Mart 2019, 17:59:11 flareoNNN

cudless


Joker

open.mp Turkey Department Manager
victimrp.com founder

Dyternal

Alıntı yapılan: flareoNNN - 10 Mart 2019, 17:47:36

Komutta;
if(sscanf(params, "uid", id, level, gun)) return KullanimMesaji(playerid, "makevip <id/isim> <level> <gün>");

VIPYap fonksiyonun da;
mysql_format(sql, query, sizeof query, "DELETE FROM `vipler` WHERE `vip_isim`= '%e'", IsimCek(id));

olarak düzenle.

VIPKontrol'ün OnPlayerSpawn vb. bir yerde çağırılması daha doğru olur, aksi halde oyuncu oyundan hiç çıkmazsa VIP kullanmaya devam edebilir.

YetersizSeviye fonksiyonu boşa eklenmiş, IsimCek fonksiyonu eksik.

stock IsimCek(playerid)
{
new ism[24] = _:0.0;
GetPlayerName(playerid, ism, 24);
return ism;
}


Ayrıca cache tutması gerekmeyen mysql_query'lerin cache'lerini temizle aksi halde zamanla MySQL sunucu RAM'ını şişerecek ve lag yapacaktır.

Son olarak bir renk eksik;
#define ad "{00FF00}"



Sen nesin ya? xd

Alıntı yapılan: cudless - 10 Mart 2019, 20:51:14

Güzel anlatım için teşekkürler.


Rica ederim.

Alıntı yapılan: Joker - 10 Mart 2019, 20:52:37

Eline sağlık. :helal:


Sağol.


FelleR



Warning

Eline Sağlik.
Son düzenlenme: 30 Eylül 2019, 14:39:54 Byrpo


Dyternal


laéx