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

Создаём комманду для старта по голосованию.

Тема в разделе 'Кодинг/Собственные решения', создана пользователем Zarj, 11 ноя 2010.

  1. Suro Ньюфаг

    Сообщения:
    15
    Спасибы:
    0
    Я не знаю как вы все компилите, но у меня с первого раза все получилось.

    Напишу минусы.
    1) Для этой команды нужно десять голосов для старта. В том числе и хоста. Смысл тогда этой команды? Хост и так может прописать старт игры. Хотя могу и ошибаться...
    2) Первый кто написал команду, хотя мб и даже не первый, короче говоря каманда заворкала с 2-3й попытки...
    3) Когда пользователь ливает из лобби и его слот занимает другой игрок, то голос этого игрока уже защитан так как игрок который ливнул из этого слота написал команду.
    4) Все сидят ждут пока афк или чуви на морозе додумается написать команду
    5) Нужно чтобы хост мог отменить эту команду, так как иногда залетит какой-то детел с высоким пингом, или слотеры, или перекинь меня с верха в низ так как там мой друг или еще что-то, а в это время все могут написать команду и игра начнется... ну конечно слотеры врятли пропишут команду, но вот когда сидишь кикаешь типов с большим пингом и тут старт игры - не ок
    6) плюс если кто-то в процессе принятия голосов для игры ливнет, то игра начнется с дисбалансом.

    конечно команда хороша, но я еще не понял ее смысл.
    Если игра с хостом, то все и так будут сидеть ждать от хоста реакции, либо на эту команду, либо на !start
    Если автохост, то там бот при всех забитых слотах начинает игру.
  2. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    пиз**ж и провокация^^
    same^^ фиксится изменением условия customization/sozda-m-kommandu-dlya-starta-po-golosovaniyu-t1520-15.html#p11632
    !a будет работать какбЭ
  3. denischegaev Парнишка с небывалым умом

    Сообщения:
    289
    Спасибы:
    0
    Сборка бота GHost:
    17.266
  4. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    скажи предыдушему что ты делал...
  5. Suro Ньюфаг

    Сообщения:
    15
    Спасибы:
    0
    т.е. мне что-ли?
  6. MooDBlooD Ньюфаг

    Сообщения:
    56
    Спасибы:
    1
    Короче, заметил я следующую фишку, что не все могут юзать команду.
    Я админ бота, и от меня команда !go упорно не реагирует...
    Так же бот не всем позволяет заюзать команду...
    Но если кто-то заюзал, то принимает от всех...
  7. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Выложи свою строку где описана сама комманда, чую подвох там, у меня всегда всё чётко с 1 раза работает.
    Suro, тебе fake уже всё объяснил, а по поводу
    У меня лично бот хостит ТТВ, там играют 3х3, дак вот у меня стоит проверка чтоб в каждой комманде было по 1 игроку, тоесть для игры 1х1.

    P.s. заметил один трабл, после написания этой команды у меня бот стал иногда вылитать, а именно всегда в логе было последнее действие что человек добавлен в сэйф лист, в тот момент бот не мог приконнектиться к 1 из 6 сервов, сейчас всё норм, если у вас тоже хоть раз вылетал сам бот после внедрения данной комманды - прошу отписать лог последних 5 строк, если у вас всё норм, то возможно у меня это стихийное xD
  8. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    единственное что может не дать простым пользователям юзать команды
    так это вот эта строка
    находится перед NON ADMIN COMMANDS (помоему только в ghost one
    Код:
    	else
    	{
    		if( !player->GetSpoofed( ) )
    			CONSOLE_Print( "[GAME: " + m_GameName + "] non-spoofchecked user [" + User + "] sent command [" + Command + "] with payload [" + Payload + "]" );
    		else
    			CONSOLE_Print( "[GAME: " + m_GameName + "] non-admin [" + User + "] sent command [" + Command + "] with payload [" + Payload + "]" );
    
    		if (Command != "yes" && Command !="votekick" && Command != "rmk" && Command != "ff" && Command != "fastfinish")
    		if (!m_GHost->m_NonAdminCommands)
    			return HideCommand;
    	}
    
    	/*********************
    	* NON ADMIN COMMANDS *
    	*********************/
    
  9. denischegaev Парнишка с небывалым умом

    Сообщения:
    289
    Спасибы:
    0
    Сборка бота GHost:
    17.266
    не со всеми пунктами согласен, но команда не всегда запускается с первой попытки и иногда от кого то другого только. в чем же трабла мб?
  10. MooDBlooD Ньюфаг

    Сообщения:
    56
    Спасибы:
    1
    game.cpp
    Код:
             //
             // !VSTART
             //
    
             if( ( Command == "go" || Command == m_GHost->m_Language->cmdgo( ) ) && !player->GetStartVote( ) && !m_CountDownStarted && !m_GameLoaded)
             {
    
                ReCalculateTeams();
                if (m_Team1<1 || m_Team2<1)
                {
                   SendAllChat(m_GHost->m_Language->txtone( ) );
                   return HideCommand;
                }
    
                if (m_StartVotePlayer.empty())
                {
                   for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                      (*i)->SetStartVote( false );
                   m_StartVotePlayer = player->GetName();
                   m_StartedStartVoteTime = GetTime();
                }
                player->SetStartVote( true );
                uint32_t VotesNeeded = (uint32_t)ceil ( GetNumHumanPlayers( )  * (float)100 );
                if (VotesNeeded>GetNumHumanPlayers())
                   VotesNeeded = GetNumHumanPlayers();
                uint32_t Votes = 0;
    
                for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                {
                   if( (*i)->GetStartVote( ) )
                      Votes++;
                }
    
                if( Votes >= VotesNeeded )
                {
                   SendAllChat(m_GHost->m_Language->txttwo( ) );
                      if( Votes >= VotesNeeded )
                         StartCountDown( true );
                      else
                      {
                         if( GetTicks( ) - m_LastPlayerLeaveTicks >= 2000 )
                            StartCountDown( false );
                         else
                            SendAllChat( m_GHost->m_Language->CountDownAbortedSomeoneLeftRecently( ) );
                      }
    
                   m_StartVotePlayer.clear( );
                   m_StartedStartVoteTime = 0;
                }
                else
                   SendAllChat( User+ m_GHost->m_Language->txttri( ) +" [" + UTIL_ToString( Votes )+"/"+ UTIL_ToString(VotesNeeded)+"] "+string( 1, m_GHost->m_CommandTrigger )+"go"+ m_GHost->m_Language->txtfour( ) );
             }
    Language.cpp
    Код:
    string CLanguage :: cmdgo( )
    {
       string Out = m_CFG->GetString( "lang_1120", "lang_1120" );
       return Out;
    }
    
    string CLanguage :: txtone( )
    {
       string Out = m_CFG->GetString( "lang_1121", "lang_1121" );
       return Out;
    }
    
    string CLanguage :: txttwo( )
    {
       string Out = m_CFG->GetString( "lang_1122", "lang_1122" );
       return Out;
    }
    
    string CLanguage :: txttri( )
    {
       string Out = m_CFG->GetString( "lang_1123", "lang_1123" );
       return Out;
    }
    
    string CLanguage :: txtfour( )
    {
       string Out = m_CFG->GetString( "lang_1124", "lang_1124" );
       return Out;
    }
    
    Language.h
    Код:
        string cmdgo( );
        string txtone( );
        string txttwo( );
        string txttri( );
        string txtfour( );
    Language.cfg
    Код:
    lang_1120 = го
    lang_1121 = Невозможно стартовать игру с пустой коммандой противника!
    lang_1122 = Игра начнётся через 10 секунд!
    lang_1123 = проголосовал за немедленное начало старта.
    lang_1124 = (!го) для согласия старта.
    Я конечно не силен в С++, но есть у меня одна мысля...
    Собственно бот в самой игре пишет от имени игрока, за которого он закрепился.
    Может ли быть такое, что старт он принимает только от этого игрока?
    Тоесть в строчке !player->GetStartVote( ) из-за тригера "!" он отправляет ответ не True а False?
    И таким образом обычные игроки могут только продолжать голосование?
  11. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    это проверка (голосовал ли этот игрок)
    я вспомнил в чём мб трабла, так же было и с рмк(фф)
    дело в том что зарж обьявил переменную но не обнулил(на сколько я помню в этом случае она может принимать любые значения)
    gameplayer.cpp ~252
    сразу после
    Код:
    CGamePlayer :: CGamePlayer( CGameProtocol *nProtocol, CBaseGame *nGame, CTCPSocket *nSocket, unsigned char nPID, string nJoinedRealm, string nName, BYTEARRAY nInternalIP, bool nReserved ) : CPotentialPlayer( nProtocol, nGame, nSocket )
    {
    вставляем...
    Код:
    m_StartVote = false;
  12. denischegaev Парнишка с небывалым умом

    Сообщения:
    289
    Спасибы:
    0
    Сборка бота GHost:
    17.266
    команда плохо работает царь. не с первой попытки срабатывает. в чем трабл?
  13. T-150 Парнишка с небывалым умом

    Сообщения:
    27
    Спасибы:
    1
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.08.2010

    т.е если всё это выполнить то бот будет слушаться всех?
  14. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    если это выполнить то эта команда будет работать даже когда команды пользователей отменены
  15. T-150 Парнишка с небывалым умом

    Сообщения:
    27
    Спасибы:
    1
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.08.2010
    Не всегда срабатывает! Что такое?
  16. MooDBlooD Ньюфаг

    Сообщения:
    56
    Спасибы:
    1
    Народ, вот тут решился я всётаки покапаться в логе...
    Вот что там есть... (Это всего две строки, но их вполне мне кажется достаточно)
    Тут видно, что я прописываю команду go (в других случаях "го")... Но ничего не происходит...
    В чем собственно проблема то?
    Тоже из лога
    И тоже нифига не работает (в данном случае писалась команда "го")
  17. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Возможно ты чтото изменял, если полностью следовать инструкции - работоспособность обеспечена! (Но всё же почемуто некоторые говорят что робит не с 1 попытки у некоторых игроков, по этому поводу хз, у меня всё точно на 100% робило, возможно влияют какието настройки или свои дополнения)
  18. MooDBlooD Ньюфаг

    Сообщения:
    56
    Спасибы:
    1
    Нет, всё делал как тут описано... Если на мапе 3 игрока (2v1 из 10v2), то работать никак не хочет(((
  19. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Хм ясно написано
    PHP:
    <span class="syntaxdefault">            ReCalculateTeams</span><span class="syntaxkeyword">();<br />            if (</span><span class="syntaxdefault">m_Team1</span><span class="syntaxkeyword"><</span><span class="syntaxdefault"></span><span class="syntaxkeyword">|| </span><span class="syntaxdefault">m_Team2</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)<br />            {<br />               </span><span class="syntaxdefault">SendAllChat</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Невозможно СЃС‚артовать РёРіСЂСѓ СЃ РїСѓСЃС‚РѕР№ РєРѕРјРјР°РЅРґРѕР№ РїСЂРѕС‚РёРІРЅРёРєР°!"</span><span class="syntaxkeyword">);<br />               return </span><span class="syntaxdefault">HideCommand</span><span class="syntaxkeyword">;<br />            } </span><span class="syntaxdefault"></span>
    Если хоть в 1 тиме игроков меньше чем 1, то комманда не робит, вывод ты скорей всего менял чтото в ReCalculateTeams
  20. MooDBlooD Ньюфаг

    Сообщения:
    56
    Спасибы:
    1
    Неа... Тут всё по сути должно быть нормально...
    Код:
                ReCalculateTeams();
                if (m_Team1<1 || m_Team2<1)
                {
                   SendAllChat(m_GHost->m_Language->txtone( ) );
                   return HideCommand;
                }