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.
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.
Ellerine sağlık, "wb" ve "w" tanıtılmamış
#define w "{FFFFFF}"
#define wb "{2196f3}"
case 1: BilgiMesaji(id, "Bir admin tarafından "wb"Gümüş VIP "w"yapıldınız!");
Alıntı yapılan: Veoper - 10 Mart 2019, 10:46:05
Ellerine sağlık, "wb" ve "w" tanıtılmamış
#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:
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}"
Güzel anlatım için teşekkürler.
Eline sağlık. :helal:
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.
Yararlı.
Eline Sağlik.
Herkese teşekkür ederim.
Eline sağlık dostum.
Teşekkürler