Oyun içi Oyuncu Ban Questi [Hileye Karşı Özel]

maxbro

[GM]MaxBro
MT Üye
Mesaj
514
Çözümler
19
Beğeni
348
Puan
819
Merhaba arkadaşlar herkese iyi forumlar dilerim. Bugün sizlere daha önce yazmış olduğum bir oyun içi ban questini paylaşmak istiyorum. Bu ban questini yazmamın sebebi, karşılaşmış olduğum yeni bir hileye karşı hem çözüm sunmak hem de oyuncuları banladıktan sonra oyundan atılmasını sağlamak. Oyun içinde veya web panellerinden oyuncuyu banladığınız takdirde oyuncu oyun içinde aktif ise dc atılır. Karşılaşmış olduğum hilede oyuncuyu banladığınız halde oyun içinde oyuncuyu manuel olarak dc atsanız dahi oyuncu dc yemeden karakter ekranında tekrar oyuna login olması ve bu sebeple klasik yöntemlerin işlevsiz kalmasından kaynaklıydı.
Hileye karşı etkisi ise oyuna girişlerde oyuncunun hesabının banlı olup olmadığının sorgusunu yapmasından kaynaklıdır. Eğer banlıysa tekrar ve tekrar oyuncu hileli olsa dahi oyundan atılacaktır. İyi çalışmalar.

Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.



banekran.PNG
mmo.PNG
 
Üyeler nasıl indirecek bir güzellik yapabilir misin :)
 
Üyeler nasıl indirecek bir güzellik yapabilir misin :)
Merhaba,


Gizli içerikler ilgili üye rankı veya Premium üye rankı mevcut ise görüntülenmektedir.

Cuzi miktarlar ile premium üye ranklı alabilirsiniz.
Bknz: Premium üyelik satın al
Banka kartı/kredi kartı yok ise havale/fast/eft ile de ödeme yapabilirsiniz <3
 
Üyeler nasıl indirecek bir güzellik yapabilir misin :)
Site genelinde uyguladığımız tek kısıtlama ziyaretçilere linklerin ve resim dosyası haricindeki ek dosyaların üyelik gerektirmesi. Bunlar haricindeki tüm kısıtlamalar "özel içerikler" ile içerik üreticilerimize sunduğumuz araçlardır. Tüm üyelerimiz istediği şekilde içeriklerinin belirli bölümlerini "özel içerik" kategorisine alabilir. Üyelerimizin tercihlerine saygı duyuyoruz. İçerik üreticimiz @maxbro 'ya ait bu karar ^_^

Özel içerikler hakkında detaylı bilgiyi şuradan edinebilirsiniz;
Özel İçerikler!
 
Quest_functions listesinde mysql_direct_query ve pc.dc_delayed0 fonksiyonları eksik. Onları eklemeniz gerekmekte.
Oldu hocam teşekkür ederim şimdi de lettere bastığımda hiç birşey olmuyor kayboluyor neden olabilir .quest ve .lua olarak okuttum questi ikisinde de aynı
 
Oldu hocam teşekkür ederim şimdi de lettere bastığımda hiç birşey olmuyor kayboluyor neden olabilir .quest ve .lua olarak okuttum questi ikisinde de aynı
Reboot çektiniz mi. Reboottan sonra hata devam ederse, oyun hangi core'da çalışıyor ise o coredeki syserri kontrol edin.
 
Reboot çektiniz mi. Reboottan sonra hata devam ederse, oyun hangi core'da çalışıyor ise o coredeki syserri kontrol edin.
Reboottan sonra çalıştı oyuncu adını yazdığımda işlem gerçekleşmiyor ch1 syser baktığımda aşağıdaki hata çıkıyor hocam

SYSERR: Apr 21 11:47:08 :: RunState: LUA_ERROR: [string "gm_ban"]:7: attempt to call global `mysql_direct_query' (a nil value)
SYSERR: Apr 21 11:47:08 :: WriteRunningStateToSyserr: LUA_ERROR: quest gm_ban.start click
 
Reboottan sonra çalıştı oyuncu adını yazdığımda işlem gerçekleşmiyor ch1 syser baktığımda aşağıdaki hata çıkıyor hocam

SYSERR: Apr 21 11:47:08 :: RunState: LUA_ERROR: [string "gm_ban"]:7: attempt to call global `mysql_direct_query' (a nil value)
SYSERR: Apr 21 11:47:08 :: WriteRunningStateToSyserr: LUA_ERROR: quest gm_ban.start click
Sanırım src kısmında mysql_direct_query fonksiyonunun kodu değişip build alınmalı. Ama onun öncesinde questlibde değişip denemek lazım, olmaz ise srcden güncellenip build alınmalı.
 
Sanırım src kısmında mysql_direct_query fonksiyonunun kodu değişip build alınmalı. Ama onun öncesinde questlibde değişip denemek lazım, olmaz ise srcden güncellenip build alınmalı.
Hocam siz öyle deyince farklı bir queste baktım aktif olan mysql sorgusu olan quest_functionsta da vardı game.mysql_query2(query) olarak değiştirdiğimde oldu :)

Çok teşekkür ederim aynı şekilde hem website panelindeki oyuncuyu hem game dosyasındaki account tablosunda 2 taraftada oyuncuyu banlıyorum ban nedeni ve ban süresi de ekledim aynı zamanda :)

ss.png
 
Hocam siz öyle deyince farklı bir queste baktım aktif olan mysql sorgusu olan quest_functionsta da vardı game.mysql_query2(query) olarak değiştirdiğimde oldu :)

Çok teşekkür ederim aynı şekilde hem website panelindeki oyuncuyu hem game dosyasındaki account tablosunda 2 taraftada oyuncuyu banlıyorum ban nedeni ve ban süresi de ekledim aynı zamanda :)

12259 eklentisini görüntüle
Harika, çalıştığına çok sevindim.
 
Server taraflı ban kodu var zaten ( /ban )

C++:
ACMD(do_ban)
{
    // Args
    char arg1[256], arg2[256], arg3[256];
    one_argument(two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3));

    // Invalid syntax
    if (!*arg1 || !*arg2 || !*arg3)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Yanlis kullanim. Dogrusu: <oyuncu ismi> <saat biciminden sure> <neden> uyari: sebebi yazarken bosluk yerine _ kullan!");
        return;
    }

    const char* szName = arg1;
    const auto iDuration = static_cast<int32_t>(std::strtol(arg2, nullptr, 0));
    const char* szReason = arg3;

    if (iDuration <= 0)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Ban suresi 0 olamaz.");
        return;
    }

    const auto tch = CHARACTER_MANAGER::Instance().FindPC(szName);

    if (!tch)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "%s oyunda degil", szName);
        return;
    }

    if (!tch->GetDesc())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "%s boyle biri yok", szName);
        return;
    }

    if (tch == ch)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kendini banlayamazsin!");
        return;
    }

    if (tch->GetGMLevel() > GM_PLAYER)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Yoneticiyi banlayamazsin!");
        return;
    }

    std::unique_ptr<SQLMsg> pMsg(DBManager::Instance().DirectQuery("UPDATE account.account SET availDt = FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) + %i), reason = '%s' WHERE id = %d", iDuration * 3600, szReason, tch->GetDesc()->GetAccountTable().id));
    tch->GetDesc()->DelayedDisconnect(5);
    sys_log(0, "[%s] adli hesap, [%s[%d]] adli oyuncu [%s] sebebiyle [%i] sureligine yasaklandi.", szName, ch->GetName(), ch->GetPlayerID(), szReason, iDuration);
    ch->ChatPacket(CHAT_TYPE_INFO, "%s adli hesap %i sureligine banlandi. sebep: %s", szName, iDuration, szReason);
}
 
Geri
Üst