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

Roleplay Sunucuları İçin Admin Sistemleri

Başlatan DarkKnife, 01 Haziran 2022, 19:42:29

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

DarkKnife

Konu belirli aralıklarla güncelleniyor yeni komutlar ekleniyor!
Öncelikle merhaba bu konu altında roleplay sunucularında adminlerin işini kolaylaştırabilecek birkaç komut paylaşacağım. Aşağıda paylaşılan kodlar Victim Roleplay altyapısında yazılmıştır yani Victim ve Unique Roleplay paketini kullanan kişiler direkt kodu atarak çalıştırabilir.

Offline Admin Verme
PAWN Kodu: Seç
CMD:osetadmin(playerid, params[])
{
if (PlayerData[playerid][pAdmin] < 5)
    return HataMesajGonder(playerid, "Bu komutu kullanamazsınız.");

new name[MAX_PLAYER_NAME], level;

if(sscanf(params, "s[24]d", name, level))
    return KullanimMesajGonder(playerid, "/osetadmin [Karakter Adı] [Seviye]");

new tmpName[24], query[512];

if (level > PlayerData[playerid][pAdmin]) return HataMesajGonder(playerid, "Kendinizden yüksek yetki veremezsiniz.");

if (level < 0 || level > 5)
    return HataMesajGonder(playerid, "Maksimum 5 seviye adminlik verilebilir.");


MesajGonder(playerid, "%s adlı hesabı %d level admin yaptın.", name, level);

format(query,sizeof(query),"UPDATE `oyuncular` SET `AdminLevel` = %d WHERE `Isim` = '%s'", level, name);
mysql_query(g_SQL, query, false, "", "");
return 1;
}

Spec PM - PM İzleme
PAWN Kodu: Seç
CMD:specpm(playerid) // Komut Kısmı
{
   if (PlayerData[playerid][pAdmin] < 1)
  return HataMesajGonder(playerid, "Bu komutu kullanamazsınız.");
   if (PlayerData[playerid][pSpecPM] == 0)
   {
  PlayerData[playerid][pSpecPM] = 1;
      MesajGonder(playerid, "Başarıyla PM izlemesi açıldı.");
   }
   else
   {
  PlayerData[playerid][pSpecPM] = 0;
  MesajGonder(playerid, "Başarıyla PM izlemesi kapatıldı.");
   }
 return 1;
/pm komutu içerisinde PM mesajını gönderdikten sonrasına
foreach (new i:Player) if (OyundaDegil(i) && PlayerData[i][pAdmin] >= 1 && PlayerData[i][pSpecPM] == 1)
    {
       SendClientMessageEx(i, COLOR_ORANGE, "[Spec PM] %s >> %s: %s", ReturnName(playerid, 0), ReturnName(userid, 0), text);
    }
}

Quit Check - Çıkış Kontrol Sistemi
PAWN Kodu: Seç
CMD:quitcheck(playerid, params[]) // Komut Kısmı
{
   if (PlayerData[playerid][pAdmin] < 1)
  return HataMesajGonder(playerid, "Bu komutu kullanamazsınız.");
 
   if (isnull(params) || strlen(params) > 24)
        return KullanimMesajGonder(playerid, "/quitcheck [Kullanıcı Adı]");
       
   if (GetPlayerID(params) != -1) return HataMesajGonder(playerid, "Oyuncu oyunda.");
   static
     query[128];
   format(query, sizeof(query), "SELECT `CikisZaman` FROM `oyuncular` WHERE `Isim` = '%s'", SQL_ReturnEscaped(params));
   mysql_tquery(g_SQL, query, "OnLeaveDate", "ds", playerid, params);
   return 1;
}
PAWN Kodu: Seç
forward OnLeaveDate(extraid, username[]);
public OnLeaveDate(extraid, username[]) // Metot tanım
{
    if (!IsPlayerConnected(extraid))
        return 0;

    new rows, date[25], admin;

    cache_get_row_count(rows);

    if (rows) {
        cache_get_value_name(0, "CikisZaman", date, 25);
        cache_get_value_name_int(0, "AdminLevel", admin);
        if (admin > PlayerData[extraid][pAdmin]) return HataMesajGonder(extraid, "Bu oyuncu sizden yüksek yetkiye sahiptir.");

        MesajGonder(extraid, "%s adlı kişinin son çıkış tarihi: %s", username, date);
    }
    else {
        HataMesajGonder(extraid, "Böyle bir karakter bulunamadı.");
    }
    return 1;
}
PAWN Kodu: Seç
Tanımlar
Oyuncu verileri kısmına ekleyin,
pCikisZaman
OnPlayerDisconnect'in içine,
format(PlayerData[playerid][pCikisZaman],25,ReturnDate());
MySQL üzerinden veritabanınıza girin oyuncuların verilerinin tutulduğu kısma girip yeni bir değer oluşturmanız lazım. Oluşturacağınız değer şöyle olması lazım;
Ad: CikisZaman, Tip: varchar veya time | Eğer varchar kullandıysanız uzunluğu 25 girin.
Herhangi bir sorun olması halinde Discord üzerinden ulaşabilirsiniz. Discord: DarkKnife#0318
Son düzenlenme: 04 Haziran 2022, 19:03:28 DarkKnife Sebep: .

DarkKnife

Admin Filter
PAWN Kodu: Seç
CMD:afilter(playerid, params[])
{
if (PlayerData[playerid][pAdmin] < 1)
return HataMesajGonder(playerid, "Bu komutu kullanamazsınız.");
new id;
     if (sscanf(params, "d", id))
       return KullanimMesajGonder(playerid, "/afilter [ID/Isim]");
     if (!OyundaDegil(id)) return HataMesajGonder(playerid, "Belirtilen kişi oyunda değil.");
  if (PlayerData[playerid][pAdmin] < PlayerData[id][pAdmin])
return HataMesajGonder(playerid, "Bu oyuncu sizden yüksek seviye yetkiye sahiptir.");
if (PlayerData[playerid][pFilter] >= 0)
{
    MesajGonder(playerid, "%s adlı oyuncuyu izlemeye aldınız.");
    PlayerData[playerid][pFilter] = id;
}
else
     {
        MesajGonder(playerid, "%s adlı oyuncuyu izlemeyi kapattınız.");
    PlayerData[playerid][pFilter] = -1;
     }
return 1;
}
Eğer bunu bir yerde kullanmak istiyorsanız örnek olarak şöyle olabilir.
Mesela filter koyduğunuz bir oyuncu rk olduğunda log gelmesini istiyorsanız;
PAWN Kodu: Seç
foreach (new i:Player) if (PlayerData[i][pFilter] == playerid && PlayerData[i][pAdmin] >= 1)
        {
   MesajGonder(i, "İzlediğiniz oyuncu %s, %s adlı oyuncu tarafından hastaneye gönderildi.", ReturnName(playerid, 0), ReturnName(killerid, 0));
        }
NOT: pFilter ı tanımlarken -1 olarak tanımlayın yoksa 0 dan başlayacaktır yani 0 ID li kişiyi otomatik izlemeye alır.
Herhangi bir sorun olması halinde Discord üzerinden ulaşabilirsiniz. Discord: DarkKnife#0318


DarkKnife

İstediğiniz bir sistem varsa özelden veya buradan yazarsanız yaparım.


#McAllen

PAWN DEVELOPER

DarkKnife


beratmethe

MesajGonder yerine SendServerMessage yada SendClientMessage kullansaydınız güzel olurdu ama yinede.
Alıntı yapılan: Zwen - 04 Haziran 2022, 22:27:35
Paylaşım için teşekkürler.


DarkKnife

Alıntı yapılan: Zwen - 04 Haziran 2022, 23:14:42
MesajGonder yerine SendServerMessage yada SendClientMessage kullansaydınız güzel olurdu ama yinede.
Alıntı yapılan: Zwen - 04 Haziran 2022, 22:27:35
Paylaşım için teşekkürler.
Bundan söyle öyle yapıp paylaşırım o zaman.


DarkKnife

Spec List - Oyuncuyu İzleyenleri Gösterme
PAWN Kodu: Seç
CMD:speclist(playerid, params[])
{
if (PlayerData[playerid][pAdmin] < 1)
   return HataMesajGonder(playerid, "Bu komutu kullanamazsınız.");
   
new id, count = 0;
     if (sscanf(params, "d", id))
       return KullanimMesajGonder(playerid, "/speclist [ID/Isim]");
     if (!OyundaDegil(id)) return HataMesajGonder(playerid, "Belirtilen kişi oyunda değil.");
  if (PlayerData[playerid][pAdmin] < PlayerData[id][pAdmin])
return HataMesajGonder(playerid, "Bu oyuncu sizden yüksek seviye yetkiye sahiptir.");
foreach (new i:Player) if (PlayerData[i][pSpecID] == id && PlayerData[playerid][pAdmin] > PlayerData[i][pAdmin])
{
count++;
SendClientMessage(playerid, -1, "%s %s", GetAdminRank(playerid), PlayerData[playerid][pAdminName]);
}
if (!count) return HataMesajGonder(playerid, "Bu kişiyi kimse izlemiyor.");
  return 1;
}
SendClientMessage içerisindeki -1 yeri rengi belirler ben -1 yaptım yani renksiz siz oraya HEX kodunu girip renklendirebilirsiniz veya MesajGonder gibi tanımlı bir fonksiyonunuz varsa onu da kullanabilirsiniz.
Herhangi bir sorun olması halinde Discord üzerinden ulaşabilirsiniz. Discord: DarkKnife#0318


DarkKnife

Weapon Ban - Silah Kullanım Yasaklama
PAWN Kodu: Seç
CMD:silahyasakla(playerid, params[])
{
if (PlayerData[playerid][pAdmin] < 1)
   return HataMesajGonder(playerid, "Bu komutu kullanamazsınız.");
   
new id, gun;
    if (sscanf(params, "ud", id, gun)) return KullanimMesajGonder(playerid, "/silahyasakla [ID/Isim] [Gün]");
    if (!OyundaDegil(id)) return HataMesajGonder(playerid, "Belirtilen oyuncu bulunamadı.");
    if (gun > 30) return HataMesajGonder(playerid, "Gün en fazla 30 olarak girilebilir.");
    if (gun == 0 && PlayerData[id][pSilahYasak] == 0) return HataMesajGonder(playerid, "Bu kişinin silah kullanması yasaklanmamış.");
    if (gun > 1 && PlayerData[id][pSilahYasak] == 1) return HataMesajGonder(playerid, "Bu kişinin silah kullanması zaten yasaklanmış.");
    if (PlayerData[playerid][pAdmin] < PlayerData[id][pAdmin]) return HataMesajGonder(playerid, "Kendinizden yüksek seviye yetkililere bu işlemi uygulayamazsınız.");
    if (gun > 0)
    {
   PlayerData[id][pSilahYasak] = 1;
   PlayerData[id][pSilahYasakSure] = gettime()+gun*86400;
   SendClientMessage(playerid, -1, "%s adlı oyuncuya %d gün silah kullanım yasağı koydunuz.", ReturnName(id, 0), gun);
   SendClientMessage(id, -1, "%s adlı yetkili size %d gün silah kullanım yasağı koydu.", PlayerData[playerid][pAdminName], gun);
   Oyuncu_Kaydet(id);
   AdminMessage(COLOR_LIGHTRED, "AdmCmd: %s adlı yetkili %s adlı oyuncuya %d gün silah kullanım yasağı koydu.", PlayerData[playerid][pAdminName], ReturnName(id, 0), gun);
   Log_Write("logs/weapon-ban.log", "[%s] %s adli yetkili %s adli oyuncuya %d gun silah kullanim yasagi koydu.", ReturnDate(), PlayerData[playerid][pAdminName], ReturnName(id, 0), gun);
}
if (gun == 0)
{
       PlayerData[id][pSilahYasak] = 0;
   PlayerData[id][pSilahYasakSure] = 0;
   SendClientMessage(playerid, -1, "%s adlı oyuncunun silah kullanım yasaığını kaldırdınız.", ReturnName(id, 0));
   MesajGonder(id, "%s adlı yetkili silah kullanım yasağınızı kaldırdı.", PlayerData[playerid][pAdminName]);
   Oyuncu_Kaydet(id);
   AdminMessage(COLOR_LIGHTRED, "AdmCmd: %s adlı yetkili %s adlı oyuncunun silah kullanım yasağını kaldırdı.", PlayerData[playerid][pAdminName], ReturnName(id, 0));
}
  return 1;
}
Diyelim ki silah kullanımını buradan yasakladınız ama hala silah kullanabilecek. Bu yüzden bazı yerlere eklemeler yapıyoruz.
Örnek: OnPlayerWeaponShot'a

PAWN Kodu: Seç
if (PlayerData[playerid][pSilahYasak] == 1 && IsBulletWeapon(weaponid))
    {
SetPlayerArmedWeapon(playerid, 0);
HataMesajGonder(playerid, "Silah kullanım yasağınız olduğu için ateş edemezsiniz.");
return 0;
    }
Kodun anlamı kişinin silah yasağı varsa ve silahı ateşlediyse anlamına gelir. Bunu OnPlayerUpdate gibi yerlere silah elindeyse gibi de koyabilirsiniz orası size kalmış.
Ayrıca MySQL üzerine int türünde SilahYasak ve int türünde SilahYasakSure diye değerler oluşturuyoruz. Ayrıca PlayerData eklemelerini yapıyoruz.
SendClientMessage içerisindeki -1 yeri rengi belirler ben -1 yaptım yani renksiz siz oraya HEX kodunu girip renklendirebilirsiniz veya MesajGonder gibi tanımlı bir fonksiyonunuz varsa onu da kullanabilirsiniz.
Herhangi bir sorun olması halinde Discord üzerinden ulaşabilirsiniz. Discord: DarkKnife#0318


Utherz

Doğrular ve yanlışlar yoktur, sadece yorumlar vardır.

Eamon

Her moda uymayan bir şeyi paylaşmak pek doğru değil BENCE.

Bugünün güzel zamanları, yarının üzücü düşünceleridir.

DarkKnife

Alıntı yapılan: Utherz - 05 Haziran 2022, 04:03:21
ctrl + c ctrl + v
Eğer internette bu kodların aynısı varsa ctrl + c ctrl + v diyebilirsin.


DarkKnife

Alıntı yapılan: Eamon - 05 Haziran 2022, 18:53:01
Her moda uymayan bir şeyi paylaşmak pek doğru değil BENCE.
Eğer Discord üzerinden ulaşırlarsa onların moduna uyuşan sistemi de yaparım.