1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

Бан+кик сразу

Тема в разделе 'Кодинг/Собственные решения', создана пользователем Mr-Fane, 16 июн 2011.

  1. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Если есть возможность подскажите пожалуйста как сделать что-бы при отправки команды боту в лс типа !addban nick бот банил этого игрока, а также сразу выкидывал его из игры если этот игрок в ней находится.

    Как-то вот так:
    В самой игре

    Код:
    /w Bot !addban nick
    Owner: Игрок nick забанен игроком Owner на x дней и выкинут из игры
    
    Как изменить ланг - ерунда сам сделаю.Суть думаю уловили.Что конкретно и куда надо вписать в исходники бота для реализации этого простого замысла?
  2. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    зделай типа
    Код:
    if (command == "addban" && m_GameLoaded && !Payload.empty( ))
    {
    if (!CMDCheck(CMD_ban, AdminAccess))
    				{
    					SendChat(player->GetPID(), m_GHost->m_Language->GetLang("lang_0005"));
    					return HideCommand;
    				}
    
    
    QueueChatCommand("/w !ban " +Payload);
    QueueChatCommand("/w !kick " +Payload);
    SendAllChat(Payload+ " выкинут и забанен!!!);
    }
    Хз прально ли написал...
    Но суть ты уловил.
  3. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Выложи код своей команды addban, сделаю
  4. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Убило в хлам.
  5. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    прочти задание в моей теме -_-
  6. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Ты мне?
  7. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    до-_-, но ты уже посмотрел походу...
  8. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Вот

    Код:
    // !ADDBAN
    				// !BAN
    				// !B
    				//
    
    				if (!m_GHost->m_ReplaceBanWithWarn)
    				if( ( Command == "addban" || Command == "ban" || Command == "b" ) && !Payload.empty( ) )
    				{
    					// extract the victim and the reason
    					// e.g. "Varlock leaver after dying" -> victim: "Varlock", reason: "leaver after dying"
    
    					if (!CMDCheck(CMD_ban, AdminAccess))
    					{
    						QueueChatCommand(m_GHost->m_Language->YouDontHaveAccessToThatCommand( ), User, Whisper);
    						return;
    					}
    
    					string Victim;
    					string Reason;
    					stringstream SS;
    					SS << Payload;
    					SS >> Victim;
    					string pnam = GetPlayerFromNamePartial(Victim);
    					if (!pnam.empty())
    						Victim = pnam;
    
    					if( !SS.eof( ) )
    					{
    						getline( SS, Reason );
    						string :: size_type Start = Reason.find_first_not_of( " " );
    
    						if( Start != string :: npos )
    							Reason = Reason.substr( Start );
    					}
    
    					if (IsAdmin(Victim) || IsRootAdmin(Victim))
    					{
    						QueueChatCommand( "You can't ban an admin!", User, Whisper);
    						return;
    					}
    					if (IsSafe(Victim) && m_GHost->m_SafelistedBanImmunity)
    					{
    						QueueChatCommand( "You can't ban a safelisted player!", User, Whisper);
    						return;
    					}
    
    					if (m_GHost->m_ReplaceBanWithWarn)
    					{
    						WarnPlayer(Victim, Reason, User, Whisper);
    						return;
    					}
    
    					if( IsBannedName( Victim ) )
    						QueueChatCommand( m_GHost->m_Language->UserIsAlreadyBanned( m_Server, Victim ), User, Whisper );
    					else
    					{
    						string Usr;
    						Usr = Whisper ? User : string( );
    						if (m_GHost->m_WhisperAllMessages)
    							Usr = User;
    						uint32_t BanTime = m_GHost->m_BanTime;
    						m_PairedBanAdds.push_back( PairedBanAdd( Usr, m_GHost->m_DB->ThreadedBanAdd( m_Server, Victim, string( ), string( ), User, Reason, BanTime, 0 ) ) );
    					}
    				}
    Бот GhostOne 1.7.266
  9. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    [IMG]
    меня тоже :lol: :lol:
  10. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Когда я в ответ просил код команды я имел в виду код из game.cpp
    То, что выложили сюда, сделано для бана на канале в бнете, возникает вопрос при чем тут игра?
  11. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Да не вопрос вот из game.cpp

    Код:
    //
    			// !ADDBAN
    			// !BAN
    			// !B
    			//
    
    			if(!m_GHost->m_ReplaceBanWithWarn)
    			if( ( Command == "addban" || Command == "ban" || Command == "b" ) && !Payload.empty( ) && !m_GHost->m_BNETs.empty( ) )
    			{
    				if (!CMDCheck(CMD_ban, AdminAccess))
    				{
    					SendChat(player->GetPID(), m_GHost->m_Language->YouDontHaveAccessToThatCommand( ));
    					return HideCommand;
    				}
    
    				// extract the victim and the reason
    				// e.g. "Varlock leaver after dying" -> victim: "Varlock", reason: "leaver after dying"
    
    				string Victim;
    				string Reason;
    				stringstream SS;
    				SS << Payload;
    				SS >> Victim;
    
    				if( !SS.eof( ) )
    				{
    					getline( SS, Reason );
    					string :: size_type Start = Reason.find_first_not_of( " " );
    
    					if( Start != string :: npos )
    						Reason = Reason.substr( Start );
    				}
    
    				if( m_GameLoaded )
    				{
    					string VictimLower = Victim;
    					transform( VictimLower.begin( ), VictimLower.end( ), VictimLower.begin( ), (int(*)(int))tolower );
    					uint32_t Matches = 0;
    					CDBBan *LastMatch = NULL;
    
    					// try to match each player with the passed string (e.g. "Varlock" would be matched with "lock")
    					// we use the m_DBBans vector for this in case the player already left and thus isn't in the m_Players vector anymore
    
    					for( vector<CDBBan *> :: iterator i = m_DBBans.begin( ); i != m_DBBans.end( ); i++ )
    					{
    						string TestName = (*i)->GetName( );
    						transform( TestName.begin( ), TestName.end( ), TestName.begin( ), (int(*)(int))tolower );
    
    						if( TestName.find( VictimLower ) != string :: npos )
    						{
    							Matches++;
    							LastMatch = *i;
    						}
    					}
    
    					if( Matches == 0 )
    						SendAllChat( m_GHost->m_Language->UnableToBanNoMatchesFound( Victim ) );
    					else if( Matches == 1 )
    					{
    						bool isAdmin = IsOwner(LastMatch->GetName());
    						for( vector<CBNET *> :: iterator j = m_GHost->m_BNETs.begin( ); j != m_GHost->m_BNETs.end( ); j++ )
    						{
    							if( (*j)->IsAdmin(LastMatch->GetName() ) || (*j)->IsRootAdmin( LastMatch->GetName() ) )
    							{
    								isAdmin = true;
    								break;
    							}
    						}
    
    						if (isAdmin)
    						{
    							SendChat( player->GetPID(), "You can't ban an admin!");
    							return HideCommand;
    						}
    
    						if (IsSafe(LastMatch->GetName()) && m_GHost->m_SafelistedBanImmunity)
    						{
    							SendChat( player->GetPID(), "You can't ban a safelisted player!");
    							return HideCommand;
    						}
    
    						bool isBanned = false;
    						for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
    						{
    							if( (*i)->GetServer( ) == GetCreatorServer( ) )
    								if ((*i)->IsBannedName(LastMatch->GetName( )))
    									isBanned = true;
    
    						}
    
    						if (isBanned)
    						{
    							SendChat( player->GetPID(), m_GHost->m_Language->UserIsAlreadyBanned( m_Server, LastMatch->GetName() ));
    							return HideCommand;
    						}
    
    						Reason = CustomReason(Reason, LastMatch->GetName());
    
    						if (m_GHost->m_ReplaceBanWithWarn)
    						{
    							return HideCommand;
    						}
    						
    						uint32_t BanTime = m_GHost->m_BanTime;
    						m_PairedBanAdds.push_back( PairedBanAdd( User, m_GHost->m_DB->ThreadedBanAdd( LastMatch->GetServer(), LastMatch->GetName( ), LastMatch->GetIP( ), m_GameName, User, Reason, BanTime, 0 ) ) );
    
    						uint32_t GameNr = GetGameNr();
    
    						m_GHost->UDPChatSend("|ban "+UTIL_ToString(GameNr)+" "+LastMatch->GetName( ));
    						CONSOLE_Print( "[GAME: " + m_GameName + "] player [" + LastMatch->GetName( ) + "] was banned by player [" + User + "]" );
    						
    						string sBan = m_GHost->m_Language->PlayerWasBannedByPlayer(
    							LastMatch->GetServer(),
    							LastMatch->GetName( )+" ("+LastMatch->GetIP()+")", User, UTIL_ToString(BanTime));
    						string sBReason = sBan + ", "+Reason;
    						
    						if (Reason=="")
    						{
    							SendAllChat( sBan );
    						} else
    						{
    							if (sBReason.length()<220 && !m_GHost->m_TwoLinesBanAnnouncement)
    								SendAllChat( sBReason );
    							else
    							{
    								SendAllChat( sBan);
    								SendAllChat( "Ban reason: " + Reason);
    							}
    						}
    						if (m_GHost->m_NotifyBannedPlayers)
    						{
    							sBReason = "You have been banned";
    							if (Reason!="")
    								sBReason = sBReason+", "+Reason;
    							for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
    							{
    								if( (*i)->GetServer( ) == GetCreatorServer( ) )
    									(*i)->QueueChatCommand( sBReason, LastMatch->GetName(), true );
    							}
    						}
    					}
    					else
    						SendAllChat( m_GHost->m_Language->UnableToBanFoundMoreThanOneMatch( Victim ) );
    				}
    				else
    				{
    					CGamePlayer *LastMatch = NULL;
    					uint32_t Matches = GetPlayerFromNamePartial( Victim, &LastMatch );
    
    //					if( Matches == 0 )
    //						SendAllChat( m_GHost->m_Language->UnableToBanNoMatchesFound( Victim ) );
    					if( Matches <= 1 )
    					{
    						string BanPlayer = Victim;
    						if (Matches == 1)
    							BanPlayer = LastMatch->GetName();
    						bool isAdmin = IsOwner(BanPlayer);
    						for( vector<CBNET *> :: iterator j = m_GHost->m_BNETs.begin( ); j != m_GHost->m_BNETs.end( ); j++ )
    						{
    							if((*j)->IsAdmin(BanPlayer ) || (*j)->IsRootAdmin( BanPlayer ) )
    							{
    								isAdmin = true;
    								break;
    							}
    						}
    
    						if (isAdmin)
    						{
    							SendChat( player->GetPID(), "You can't ban an admin!");
    							return HideCommand;
    						}
    
    						if (IsSafe(BanPlayer) && m_GHost->m_SafelistedBanImmunity)
    						{
    							SendChat( player->GetPID(), "You can't ban a safelisted player!");
    							return HideCommand;
    						}
    
    						uint32_t BanTime = m_GHost->m_BanTime;
    
    						if (Matches == 1)
    							m_PairedBanAdds.push_back( PairedBanAdd( User, m_GHost->m_DB->ThreadedBanAdd( LastMatch->GetJoinedRealm( ), LastMatch->GetName( ), LastMatch->GetExternalIPString( ), m_GameName, User, Reason, BanTime, 0 ) ) );
    						else
    							m_PairedBanAdds.push_back( PairedBanAdd( User, m_GHost->m_DB->ThreadedBanAdd( m_Server, Victim, "", m_GameName, User, Reason, BanTime, 0 ) ) );
    
    						m_GHost->UDPChatSend("|ban "+Victim);
    						CONSOLE_Print( "[GAME: " + m_GameName + "] player [" + Victim + "] was banned by player [" + User + "]" );
    						string sBan = m_GHost->m_Language->PlayerWasBannedByPlayer( 
    							GetCreatorServer(),
    							Victim, User, UTIL_ToString(BanTime));
    						if (Matches == 1)
    							sBan = m_GHost->m_Language->PlayerWasBannedByPlayer( 
    							GetCreatorServer(),
    							Victim+" ("+LastMatch->GetExternalIPString()+")", User, UTIL_ToString(BanTime));
    						string sBReason = sBan + ", "+Reason;
    
    						if (Reason=="")
    						{
    							SendAllChat( sBan );
    						} else
    						{
    							if (sBReason.length()<220 && !m_GHost->m_TwoLinesBanAnnouncement)
    								SendAllChat( sBReason );
    							else
    							{
    								SendAllChat( sBan);
    								SendAllChat( "Ban reason: " + Reason);
    							}
    						}
    						if (m_GHost->m_NotifyBannedPlayers)
    						{
    							sBReason = "You have been banned";
    							if (Reason!="")
    								sBReason = sBReason+", "+Reason;
    							for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
    							{
    								if( (*i)->GetServer( ) == GetCreatorServer( ) )
    									(*i)->QueueChatCommand( sBReason, Victim, true );
    							}
    						}
    					}
    					else
    						SendAllChat( m_GHost->m_Language->UnableToBanFoundMoreThanOneMatch( Victim ) );
    				}
    			}
    
  12. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Учитывая, что дело будет в игре(не в лобби):
    Код:
    if( m_GameLoaded )
    {
     ...
       if (Matches == 1){
       ...
         if ( GetPlayerFromName(LastMatch->GetName())){
    			LastMatch->SetDeleteMe( true );
    			LastMatch->SetLeftReason( m_GHost->m_Language->WasKickedByPlayer( User ) );
    			LastMatch->SetLeftCode( PLAYERLEAVE_LOST );
          }
       }else
    	SendAllChat( m_GHost->m_Language->UnableToBanFoundMoreThanOneMatch( Victim ) );
    }
    з.ы. не проверял, но по идее должно работать
  13. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    GetPlayerFromName(LastMatch->GetName())= LastMatch
  14. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    А если игрока банят из бнета?
  15. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Если банят из бнета, то после самого бана надо прогнать все текущие игры по очереди,просматривая игроков. Совпадение = кик
  16. kucc Олд-фаг

    Сообщения:
    26
    Спасибы:
    1
    Я переделаю баны совсем по другому, вырезал весь код у ботов.
    Сделал баны в ПВПГНе, при бане на конкретном боте:
    1) игра перестаёт отображаться забаненному игроку
    2) зная название игры зайти не сможет
    3) изменив ник спуфером, зайти не сможет, так как основной настоящий аккаунт забанен
    4) даже те кто не в бане, на боте переделал проверку на левые символы - пробелы, русские буквы, цветной ник - всё от спуфера в общем.
    5) каждый бан распространяется на конкретного бота, забаненый на одном боте, сможет зайти к другому если там тоже не забанен, и видит все другие игры созданные не ботом
  17. kucc Олд-фаг

    Сообщения:
    26
    Спасибы:
    1
    В общем доработал ещё чуток систему.
    1) Банить можно имея больше 2000+ птс
    2) нельзя забанить игрока, имеющего больше чем у вас птс
    3) админы выше фингера могут банить и без птс
    4) у ботов убрал всю систему банов, вырезал просто напросто
    5) убрал так же полностью систему антиспуф на боте, так как больше нет нужды в этой системе.

    Что даже никто коментарии по этому поводу не оставит, или каких нибудь интересных предложений?
  18. rssrcnn Парнишка с небывалым умом

    Сообщения:
    114
    Спасибы:
    0
    комментарии? Код выкладывай -_-
  19. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    ...

    остальное бесполезный бред.
  20. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    а мне вот ето интересно, стимул будет однако. но только для SL игроков.