Opublikowano Niedziela o 21:525 dn Cześć, udostępniam wam ciekawy dodatek na serwer. Często bywało tak, że gracze mieli pretensje o brak reakcji Administracji na boty. Ta komenda znacznie ułatwi wam informowanie graczy, że nie siedzicie na dupie bezczynnieGlobalna informacja dla każdego graczaAutomatyczne wylogowanie gracza bez odliczaniaUstawienie Statusu konta w bazie danych na BLOCKcmd_gm.cpp ACMD(do_ban) { char arg1[256], arg2[256], arg3[256]; one_argument(two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3)); if (!*arg1 || !*arg2) { ch->ChatPacket(CHAT_TYPE_INFO, "U?ycie: /ban <nick> <czas w minutach> <powod>"); return; } LPCHARACTER victim = CHARACTER_MANAGER::instance().FindPC(arg1); if (!victim) { ch->ChatPacket(CHAT_TYPE_INFO, "Nie znaleziono gracza o nicku: %s", arg1); return; } int minutes = atoi(arg2); if (minutes <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, "Czas bana musi być dłuższy niż 0."); return; } std::string reason = *arg3 ? arg3 : "Brak powodu"; char escaped_reason[256]; DBManager::instance().EscapeString(escaped_reason, sizeof(escaped_reason), reason.c_str(), reason.length()); DWORD account_id = victim->GetAID(); char szQuery[256]; snprintf(szQuery, sizeof(szQuery), "SELECT login FROM account.account WHERE id=%u LIMIT 1", account_id); std::unique_ptr<SQLMsg> pLoginMsg(DBManager::instance().DirectQuery(szQuery)); const char* account = "UNKNOWN"; if (pLoginMsg->Get()->uiNumRows > 0) { MYSQL_ROW row = mysql_fetch_row(pLoginMsg->Get()->pSQLResult); if (row && row[0]) account = row[0]; } // Ustawienie statusu na 'BLOCK' w bazie danych char szUpdateQuery[512]; snprintf(szUpdateQuery, sizeof(szUpdateQuery), "UPDATE account.account SET status='BLOCK' WHERE id=%u", account_id); DBManager::instance().DirectQuery(szUpdateQuery); // Automatyczne rozłączanie gracza, bez odliczania victim->ChatPacket(CHAT_TYPE_NOTICE, "Zostałe? zbanowany przez GM: %s", ch->GetName()); victim->Disconnect("ban"); // Globalny komunikat dla każdego gracza char notice[512]; snprintf(notice, sizeof(notice), "|cFFFF0000|hGracz %s został zbanowany przez %s. Powod: %s", victim->GetName(), ch->GetName(), escaped_reason); SendNotice(notice); // Log do bazy char szLogQuery[1024]; snprintf(szLogQuery, sizeof(szLogQuery), "INSERT INTO account.ban_log (player_name, account_login, gm_name, reason, ban_time) " "VALUES ('%s', '%s', '%s', '%s', NOW())", victim->GetName(), account, ch->GetName(), escaped_reason); DBManager::instance().DirectQuery(szLogQuery); // Informacja Tylko dla GM ch->ChatPacket(CHAT_TYPE_INFO, "Zbanowano gracza %s na %d minut. Powod: %s", victim->GetName(), minutes, reason.c_str()); } cmd_general.cpp Na górze dodaj ACMD(do_ban); Gdzieś na końcu { "ban", do_ban, 0, POS_DEAD, GM_IMPLEMENTOR },
Opublikowano Niedziela o 22:235 dn Autor 12 minut temu, Arta napisał(a):Source manderia leaked by grzybJak nie potrafisz docenić kogoś pracy to się nie wypowiadaj.
Opublikowano Poniedziałek o 05:055 dn świetna robota ale zamiast komendy kick dopisać wyłączenie clienta użytkownika bo tak na autologinie będzie mógł wejść w nieskończoność chyba że mu się zmieni hasło a to bez sens smaczek odemnie: src client >> PythonNetworkStream.cppw void CPythonNetworkStream::AbsoluteExitGame()nie wiem jak u was w jakims randomowym source mam tak void CPythonNetworkStream::AbsoluteExitGame() { if (!IsOnline()) return; OnRemoteDisconnect(); Disconnect(); }zamienić na void CPythonNetworkStream::AbsoluteExitGame() { if (!IsOnline()) return; OnRemoteDisconnect(); MessageBoxA(NULL, "Zostałeś zbanowany przez administratora.\nGra zostanie zamknięta.", "ZBANOWANY", MB_OK | MB_ICONERROR); ExitApplication(); }Dlaczego tak?AbsoluteExitGame() jest wołane m.in. przez LogOutGame(), a to z kolei przez ExitGame().A jeśli serwer woła victim->Disconnect("ban"), to klient to traktuje jak zwykłe rozłączenie (przechodzi do okna logowania).Więc najlepiej przekierować to wszystko do twardego zamknięcia aplikacji.
Cześć, udostępniam wam ciekawy dodatek na serwer. Często bywało tak, że gracze mieli pretensje o brak reakcji Administracji na boty.
Ta komenda znacznie ułatwi wam informowanie graczy, że nie siedzicie na dupie bezczynnie
Globalna informacja dla każdego gracza
Automatyczne wylogowanie gracza bez odliczania
Ustawienie Statusu konta w bazie danych na BLOCK