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

Solved Триггер

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

Статус темы:
Закрыта.
  1. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    Доброго Времени Суток, у меня тут мыслишка пробежала по мозгам и решил спросить у экспертов. А можно-ли убрать "триггер" и тупо без всяких знаков давать комманды?
  2. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Он создан непосто так...
  3. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    я понимаю, ну может можно как нибудь. Было бы классно:opasnoste:
  4. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Можно конечно, не спрашивай как.
  5. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    А может всё таки подскажите?) :vau:
  6. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Конечно. Открываешь исходник. game_base.cpp вроде бы. Правишь его, сохраняешь изменения, потом компилируешь(эт важно). Вот и все, задача решена.
  7. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    А ты случайно не знаешь в каком месте?
  8. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Тебе повезло, как раз сегодня узнал. В функции EventPlayerChatToHost надо копать, инфа 146%.
    Я тут у Лонга подсмотрел, короче где то в функции найдешь
    Код:
                if( Message == "?trigger" )
                    SendChat( player, m_GHost->m_Language->CommandTrigger( string( 1, m_GHost->m_CommandTrigger ) ) );
                else if( !Message.empty( ) && Message[0] == m_GHost->m_CommandTrigger )
    как найдешь - возрадуйся, мы на полпути к цели
    Как радость пройдет - редактируй, до тех пор пока 3-я строчка не примет форму:
    Код:
    else if( !Message.empty( ) )
    Как примет она такую форму - быстро хватай и компилируй. Вроде все
    Doterok нравится это.
  9. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    Всё сделал, не все команды работаю почему то
  10. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Код:
     if( Message == "?trigger" )
                    SendChat( player, m_GHost->m_Language->CommandTrigger( string( 1, m_GHost->m_CommandTrigger ) ) );
                else if( !Message.empty( )  )
    
    что то мне подсказывает ты так сделал :D
  11. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    Код:
    SendChat( player, m_GHost->m_Language->CommandTrigger( string( 1, m_GHost->m_CommandTrigger ) ) );
                else if( !Message.empty( ) )
  12. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    А тут мой косяк, я забыл про 1 фигню. Бот обрубает же первый символ в команде.
    Код:
                    if( PayloadStart != string :: npos )
                    {
                        Command = Message.substr( 1, PayloadStart - 1 );
                        Payload = Message.substr( PayloadStart + 1 );
                    }
                    else
                        Command = Message.substr( 1 );
    Вот тут порядок наведи, и все заработает.
  13. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Тоесть 1 знак читает как тригер?
  14. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    а
    что там нужно изменить то?? всё также как у тебя
  15. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Ну
    Код:
    else if( !Message.empty( ) )
    убирает проверку на триггер, т.е. любое сообщение идет как команда, но т.к. бот при разбивании на команду и на опции команды срезает первый символ, считая его триггером( кем он в принципе и должен являтся ), но из-за наших изменений это не так.
  16. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    Код:
     else if( Message == "?trigger" )
                SendChat( player, m_GHost->m_Language->CommandTrigger( string( 1, m_GHost->m_CommandTrigger ) ) );
                else if( !Message.empty( ) )

    Код:
    if( PayloadStart != string :: npos )
                    {
                        Command = Message.substr(  1, PayloadStart - 1 );
                        Payload = Message.substr( PayloadStart + 1 );
                    }
                    else
                        Command = Message.substr( 1 );
    Всё так должно быть?
  17. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    Он реагирует на команды без тригера но не на все почему то,
  18. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Учитывая что вам по идее пофиг что там и как, и как все исправить, даю готовый код. В этом блоке сообщение которое отсылает игрок проверялось на триггер:
    Код:
                if( Message == "?trigger" )
                    SendChat( player, m_GHost->m_Language->CommandTrigger( string( 1, m_GHost->m_CommandTrigger ) ) );
                else if( !Message.empty( ) && Message[0] == m_GHost->m_CommandTrigger )
                {
                    // extract the command trigger, the command, and the payload
                    // e.g. "!say hello world" -> command: "say", payload: "hello world"
     
                    string Command;
                    string Payload;
                    string :: size_type PayloadStart = Message.find( " " );
     
                    if( PayloadStart != string :: npos )
                    {
                        Command = Message.substr( 1, PayloadStart - 1 );
                        Payload = Message.substr( PayloadStart + 1 );
                    }
                    else
                        Command = Message.substr( 1 );
     
                    transform( Command.begin( ), Command.end( ), Command.begin( ), (int(*)(int))tolower );
     
                    // don't allow EventPlayerBotCommand to veto a previous instruction to set Relay to false
                    // so if Relay is already false (e.g. because the player is muted) then it cannot be forced back to true here
     
                    if( EventPlayerBotCommand( player, Command, Payload ) )
                        Relay = false;
                }
    Мы же его видоизменяем:
    Код:
                if( !Message.empty( ) )
                {
                    string Command;
                    string Payload;
                    string :: size_type PayloadStart = Message.find( " " );
     
                    if( PayloadStart != string :: npos )
                    {
                        Command = Message.substr( 0, PayloadStart );
                        Payload = Message.substr( PayloadStart + 1 );
                    }
                    else
                        Command = Message;
     
                    transform( Command.begin( ), Command.end( ), Command.begin( ), (int(*)(int))tolower );
     
                    // don't allow EventPlayerBotCommand to veto a previous instruction to set Relay to false
                    // so if Relay is already false (e.g. because the player is muted) then it cannot be forced back to true here
     
                    if( EventPlayerBotCommand( player, Command, Payload ) )
                        Relay = false;
                }
    Лишнее про триггер я убрал, также часть комментов. Все теперь заработает как надо
    Doterok и Mangler нравится это.
  19. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    Вооо спасибо большое!! :avtoradolf:
  20. Mangler Ньюфаг

    Сообщения:
    35
    Спасибы:
    0
    Сборка бота GHost:
    GhostOne
    Дата начала использования бота:
    30.06.2012
    Skype:
    Мой статус
    а чтоб на канале тоже без тригера работал, надо в Bnet.cpp и Game.cpp изменать надо?
Статус темы:
Закрыта.