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

has left the game voluntarily

Тема в разделе 'Кодинг/Собственные решения', создана пользователем SecretMan, 28 июл 2009.

  1. SecretMan Ньюфаг

    Сообщения:
    2
    Спасибы:
    0
    Такой вопрос, т.е. просьба для JiLiZART'a:)

    Сообщение: "has left the game voluntarily" Происходит когда кто нибудь добровольно ливается.
    Хочу сделать чтоб он больше не играл на моем хосте, т.е. банить надо, но в ручную лень прописывать в публичных играх.
    Я знаю что можно как то зацепиться за это сообщение, чтоб бот вместо него говорил команду !banlast
    автоматически, т.е. автоматически забанить ливера.
    Если знаешь как это сделать подскажи плиз?! Или же есть способ включить автобан?
    З.Ы. "Дураг ни знаед"
  2. JiLiZART Администрация

    Сообщения:
    814
    Спасибы:
    34
    Сборка бота GHost:
    Ghost++ 17.1
    Дата начала использования бота:
    12.12.04
    В исходниках ищем, где публикуется это событие, и ищем комманду !banlast после копируем от туда пару строчек, после чего при каждом ливе добровольно бот будет банить игрока.
  3. SecretMan Ньюфаг

    Сообщения:
    2
    Спасибы:
    0
    Я обковырял много исходников, ничего не нашел, кроме как в language.cfg под lang_0082 написано has left the game voluntarily. Попробовал заменить на команду !banlast и в итоге в игре появляется такое сообщение: "AbCdEf !banlast" где  AbCdEf - это ник игрока и все, а вот исходник, где ник цепляется за это сообщение  не могу найти.
    Если не трудно, помоги найти :)
  4. Sandro Парнишка с небывалым умом

    Сообщения:
    158
    Спасибы:
    3
    Попробуй изменить вот это:
    Код:
    void CBaseGame :: EventPlayerLeft( CGamePlayer *player )
    {
    	// this function is only called when a player leave packet is received, not when there's a socket error, kick, etc...	
    
    	uint32_t GameNr = 0;
    	for( vector<CBaseGame *> :: iterator i = m_GHost->m_Games.begin( ); i != m_GHost->m_Games.end( ); i++ )
    	{
    		if ((*i)->GetGameName()==GetGameName())
    		{
    			break;
    		}
    		GameNr++;
    	}
    	bool show = true;
    	if (m_GHost->m_CurrentGame)
    		if	(m_GHost->m_CurrentGame->GetGameName()==GetGameName())
    			show = false;
    	if (show)
    		m_GHost->UDPChatSend("|leaver "+UTIL_ToString(GameNr)+" "+player->GetName());
    
    
    	m_LastLeaverTicks = GetTicks();
    	player->SetDeleteMe( true );
    	player->SetLeftReason( m_GHost->m_Language->HasLeftVoluntarily( ) );
    	player->SetLeftCode( PLAYERLEAVE_LOST );
    
    	ReCalculateTeams();
    
    	if( !m_GameLoading && !m_GameLoaded )
    		OpenSlot( GetSIDFromPID( player->GetPID( ) ), false );
    }
    находится в game.cpp
  5. Sandro Парнишка с небывалым умом

    Сообщения:
    158
    Спасибы:
    3
    ах да. еще могу предложить обновление гхоста. в новой версии появилась функция автобана
  6. LESTAT85 Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Зачем мучаться , неужели так трудно сделать команду !bl l на горячую клавишу ?
  7. Sandro Парнишка с небывалым умом

    Сообщения:
    158
    Спасибы:
    3
    люди часто оставляют гхост работать и уходят по делам(функция автохост). Как ты "нажмешь"  горячую клавишу, если ты за три далеко от компа
  8. kakawkin Ньюфаг

    Сообщения:
    3
    Спасибы:
    0
    а если после строки
    Код:
    player->SetLeftCode( PLAYERLEAVE_LOST );
    добавить
    Код:
    SendAllChat("!addban"+PLAYERLEAVE_LOST);
    будет писаться сразху после ливера и тем самым банится ?
  9. Tsukasa-mixer Старожила

    Сообщения:
    66
    Спасибы:
    0
    для этих целей у всех должны быть права админа, т.к. бот будет писать эту фигню от имени случайного игрока.... т.е. функция работать не будет, хотя сообщение бот добросовестна сам себе и отправит и даже обработать попробует.... дойдёт до проверки на админ права и пошлёт игрока в Гималаи.