Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[DL] Bezpieczne banowanie z poziomu GM'a


.Teodor #2

Rekomendowane odpowiedzi

Opublikowano

Hm... A gdzie jest ten cały skrypt startowy ? ;x jeśli chodzi o give_basic_weapon.quest to tam nie ma ./game

,, Co masz zrobić jutro... zrób pojutrze.''

Opublikowano

Hm... A gdzie jest ten cały skrypt startowy ? ;x jeśli chodzi o give_basic_weapon.quest to tam nie ma ./game

 

start.sh a nie quest na eq startowe >.<

Domyslnie pownienes go miec tu:

/usr/home/nazwa

np

/usr/home/game/start.sh

sygna1.png

Opublikowano

Po edytowaniu root'a po wpisaniu loginu i hasła wyłącza się client. ;o Wie ktoś może o co chodzi? .. Odstępy zachowane są.

,, Co masz zrobić jutro... zrób pojutrze.''

Opublikowano

Source, without library "ban_command.h". :)

 

#include "ban_command.h"
 
#ifdef UE_LIB
#       define DBPREFIX "test_"
#else
#       define DBPREFIX ""
#endif
 
void do_ban(LPCHARACTER pkChr, const char *argument, int cmd, int subcmd)
{
        char args[2][256];
        argument = two_arguments(argument, args[0], 256, args[1], 256);
        if (args[0][0] != '\0')
        {
                bool bPermanent = false;
                DWORD dwTime = 0;
                if (args[1][0] == '\0')
                {
                        // No second argument, permanent ban
                        bPermanent = true;
                }
                else
                {
                        if (isdigit(args[1][0]))
                        {
                                dwTime = parse_time_str(args[1]);
                        }
                        else if (!strcmp("permanent", args[1]))
                        {
                                bPermanent = true;
                        }
                        else
                        {
                                pkChr->ChatPacket(CHAT_TYPE_INFO, "Invalid second argument: '%s'", args[1]);
                                return;
                        }
                }
               
                LPDESC pTargetDesc = singleton_DESC_MANAGER->FindByCharacterName(args[0]);
                char* szLogin;
                DWORD dwAID;
               
                if (pTargetDesc)
                {
                        if (pTargetDesc == pkChr->GetDesc())
                        {
                                pkChr->ChatPacket(CHAT_TYPE_INFO, "You cannot ban yourself.");
                                return;
                        }
                        // Target found
                        szLogin = pTargetDesc->GetAccountTable().login;
                        dwAID = pTargetDesc->GetAccountTable().id;
                }
                else
                {
                        pkChr->ChatPacket(CHAT_TYPE_INFO, "Unable to find player %s online. Querying database.", args[0]);
                        char szQuery[512];
                        char szName[128];
                        singleton_DBManager->EscapeString(szName, 128, args[0], strlen(args[0]));
                        snprintf(szQuery, 512, "SELECT a.id, a.login FROM " DBPREFIX "account.account a JOIN player p ON p.account_id = a.id WHERE p.name = '%s' LIMIT 1", szName);
                        SQLMsg* pMsgPlayer = singleton_DBManager->DirectQuery(szQuery);
                        if (pMsgPlayer)
                        {
                                SQLResult* pRes = pMsgPlayer->Get();
                                if (pRes)
                                {
                                        MYSQL_ROW mRow = mysql_fetch_row(pRes->pSQLResult);
                                        if (mRow)
                                        {
                                                dwAID = strtoul(mRow[0], 0, 10);
                                                szLogin = mRow[1];
                                                delete pMsgPlayer;
                                        }
                                        else
                                        {
                                                pkChr->ChatPacket(CHAT_TYPE_INFO, "Query error.");
                                                delete pMsgPlayer;
                                                return;
                                        }
                                }
                                else
                                {
                                        pkChr->ChatPacket(CHAT_TYPE_INFO, "Query error.");
                                        delete pMsgPlayer;
                                        return;
                                }
                        }
                        else
                        {
                                pkChr->ChatPacket(CHAT_TYPE_INFO, "Query error.");
                                return;
                        }
                }
                char szQuery[512];
               
                if (bPermanent)
                {
                        snprintf(szQuery, 512, "UPDATE " DBPREFIX "account.account SET status = 'BANNED' WHERE id = %d", dwAID);
                }
                else
                {
                        snprintf(szQuery, 512, "UPDATE " DBPREFIX "account.account SET status = 'OK', availDt = FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP())+%d) WHERE id = %d", dwTime, dwAID);
                }
                SQLMsg* pMsg = singleton_DBManager->DirectQuery(szQuery);
                if (pMsg && pMsg->Get())
                {
                        pkChr->ChatPacket(CHAT_TYPE_INFO, "Player '%s' (account '%s') %sbanned successfully.", args[0], szLogin, (!bPermanent && dwTime == 0) ? "un" : "");
                        if (pTargetDesc && (dwTime != 0 || bPermanent))
                                singleton_DESC_MANAGER->DestroyDesc(pTargetDesc, true);
                        delete pMsg;
                }
                else
                {
                        pkChr->ChatPacket(CHAT_TYPE_INFO, "An error has occurred.");
                }
        }
        else
        {
                pkChr->ChatPacket(CHAT_TYPE_INFO, "Usage: /ban PlayerName [duration]");
        }
}
 
void initBanCommand()
{
        static command_info c_ban_command = {"ban", do_ban, 0, 0, 5};
        MAKE_COMMAND_EARLY(&c_ban_command);
       
        LOADED_LIBMODULE("Ban command");
}

 

50596142255057180250.png

Opublikowano

Według mnie jest to troszke bez sensu bo :
- Jeżeli mamy gm'a i ten gm ma keylongera na komputerze osoba która wbije na jego konto ma możlwiość zbanowania a jeżeli by miał do mysql to jest ograniczenie NA IP ! .

- Brak powodów
- Zaśmiecanie clienta,game

---
Tyle na to powiem

Legenda Metin2!

sig_team.png

Opublikowano

Dlaczego po wgraniu tego lib-a chociaż wszystko działa (banowanie itd.), komenda /ban także działa, to przestaje działać funkcja query, a sysser pluje, że zmienna globalna "back", z której korzysta funkcja query ma wartość nil?

  • 3 tygodnie później...
  • 1 rok później...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...