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

Help Проблема !Yes

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

  1. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Помогите переделать кусок мне под брт !voteban + yes

    Код:
           
            if ( m_KickVotePlayer.empty( ) && !m_BanVotePlayer.empty( ) && !player->GetBanVote( ) )
            {
                player->SetBanVote( true );
                VotesNeeded = (uint32_t)ceil( ( GetNumHumanPlayers( ) - 1 ) * (float)m_GHost->m_VoteKickPercentage / 100 );
                Votes = 0;
     
                for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                {
                    if( (*i)->GetBanVote( ) )
                        Votes++;
                }
     
                if( Votes >= VotesNeeded )
                {
                    CGamePlayer *Victim = GetPlayerFromName( m_BanVotePlayer, true );
     
                      if( Victim )
                                        m_PairedBanAdds.push_back( PairedBanAdd( "Votebanned", m_GHost->m_DB->ThreadedBanAdd( Victim->GetServer( ), Victim->GetName( ), Victim->GetIP( ), m_GameName, "Votebanned", "Votebanned" ) ) );               
                        }
                else SendAllChat( UTIL_ToString( VotesNeeded - Votes ) + " more vote(s) needed to ban [" + m_BanVotePlayer + "]." );
            }
        }
    
  2. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    Откуда кусок кода то?
  3. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    С Оне а нужен этот кусок переделать под брт
  4. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Если не сложно передай пжл я просто рак(
  5. rost Гуру

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

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    чувак ты выложи лог ошибок, офк ты просто не обьявил его
  7. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    Ты не понял... Я имел ввиду: Ты сам делал команду или какую либо дополнял?

    Задумка интересная, попробую помочь
  8. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Код:
    вот сама полностью ес
     
        //
        // !YES
        //
     
        if( Command == "yes" )
        {
            uint32_t VotesNeeded;
            uint32_t Votes;
     
            if ( m_BanVotePlayer.empty( ) && !m_KickVotePlayer.empty( ) && player->GetName( ) != m_KickVotePlayer && !player->GetKickVote( ) )
            {
                player->SetKickVote( true );
                VotesNeeded = (uint32_t)ceil( ( GetNumHumanPlayers( ) - 1 ) * (float)m_GHost->m_VoteKickPercentage / 100 );
                Votes = 0;
     
                for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                {
                    if( (*i)->GetKickVote( ) )
                        Votes++;
                }
     
                if( Votes >= VotesNeeded )
                {
                    CGamePlayer *Victim = GetPlayerFromName( m_KickVotePlayer, true );
     
                    if( Victim )
                    {
                        Victim->SetDeleteMe( true );
                        Victim->SetLeftReason( m_GHost->m_Language->WasKickedByVote( ) );
     
                        if( !m_GameLoading && !m_GameLoaded )
                            Victim->SetLeftCode( PLAYERLEAVE_LOBBY );
                        else
                            Victim->SetLeftCode( PLAYERLEAVE_LOST );
     
                        if( !m_GameLoading && !m_GameLoaded )
                            OpenSlot( GetSIDFromPID( Victim->GetPID( ) ), false );
     
                        CONSOLE_Print( "[GAME: " + m_GameName + "] votekick against player [" + m_KickVotePlayer + "] passed with " + UTIL_ToString( Votes ) + "/" + UTIL_ToString( GetNumHumanPlayers( ) ) + " votes" );
                        SendAllChat( m_GHost->m_Language->VoteKickPassed( m_KickVotePlayer ) );
                    }
                    else
                        SendAllChat( m_GHost->m_Language->ErrorVoteKickingPlayer( m_KickVotePlayer ) );
     
                    m_KickVotePlayer.clear( );
                    m_StartedKickVoteTime = 0;
                }
                else
                    SendAllChat( m_GHost->m_Language->VoteKickAcceptedNeedMoreVotes( m_KickVotePlayer, User, UTIL_ToString( VotesNeeded - Votes ) ) );
            }
           
            if ( m_KickVotePlayer.empty( ) && !m_BanVotePlayer.empty( ) && !player->GetBanVote( ) )
            {
                player->SetBanVote( true );
                VotesNeeded = (uint32_t)ceil( ( GetNumHumanPlayers( ) - 1 ) * (float)m_GHost->m_VoteKickPercentage / 100 );
                Votes = 0;
     
                for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                {
                    if( (*i)->GetBanVote( ) )
                        Votes++;
                }
     
                if( Votes >= VotesNeeded )
                {
                    CGamePlayer *Victim = GetPlayerFromName( m_BanVotePlayer, true );
     
                      if( Victim )
                                        m_PairedBanAdds.push_back( PairedBanAdd( "Votebanned", m_GHost->m_DB->ThreadedBanAdd( Victim->GetServer( ), Victim->GetName( ), Victim->GetIP( ), m_GameName, "Votebanned", "Votebanned" ) ) );               
                        }
                else SendAllChat( UTIL_ToString( VotesNeeded - Votes ) + " more vote(s) needed to ban [" + m_BanVotePlayer + "]." );
            }
        }
  9. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    я делал по коду !votekick.
    просто его надо чуть переделать под брт я не могу видимо рак( !voteban саму команду сделал и норм а вот ес не могу
    Код:
    лог ошибок
     
    1>------ Построение начато: проект: ghost, Конфигурация: Release MySQL Win32 ------
    1>Компиляция...
    1>game.cpp
    1>.\game.cpp(6473) : error C2039: m_Language: не является членом "CGHost"
    1>        d:\123 не юзаю\brtghost1.7.1\ghost\ghost.h(71): см. объявление 'CGHost'
    1>.\game.cpp(6473) : error C2227: выражение слева от "->WasKickedByVote" должно указывать на тип класса, структуры или объединения либо на универсальный тип
    1>.\game.cpp(6484) : error C2039: m_Language: не является членом "CGHost"
    1>        d:\123 не юзаю\brtghost1.7.1\ghost\ghost.h(71): см. объявление 'CGHost'
    1>.\game.cpp(6484) : error C2227: выражение слева от "->VoteKickPassed" должно указывать на тип класса, структуры или объединения либо на универсальный тип
    1>.\game.cpp(6487) : error C2039: m_Language: не является членом "CGHost"
    1>        d:\123 не юзаю\brtghost1.7.1\ghost\ghost.h(71): см. объявление 'CGHost'
    1>.\game.cpp(6487) : error C2227: выражение слева от "->ErrorVoteKickingPlayer" должно указывать на тип класса, структуры или объединения либо на универсальный тип
    1>.\game.cpp(6493) : error C2039: m_Language: не является членом "CGHost"
    1>        d:\123 не юзаю\brtghost1.7.1\ghost\ghost.h(71): см. объявление 'CGHost'
    1>.\game.cpp(6493) : error C2227: выражение слева от "->VoteKickAcceptedNeedMoreVotes" должно указывать на тип класса, структуры или объединения либо на универсальный тип
    1>.\game.cpp(6513) : error C2039: GetServer: не является членом "CGamePlayer"
    1>        d:\123 не юзаю\brtghost1.7.1\ghost\gameplayer.h(87): см. объявление 'CGamePlayer'
    1>.\game.cpp(6513) : error C2039: GetIP: не является членом "CGamePlayer"
    1>        d:\123 не юзаю\brtghost1.7.1\ghost\gameplayer.h(87): см. объявление 'CGamePlayer'
    1>.\game.cpp(6513) : error C2660: CGHostDB::ThreadedBanAdd: функция не принимает 6 аргументов
    1>.\game.cpp(6530) : warning C4806: ==: небезопасная операция: значение типа 'bool', приведенное к типу 'int', не может равняться данной константе
    1>Журнал построения был сохранен в "file://d:\123 не юзаю\brtGHost1.7.1\ghost\Release MySQL\BuildLog.htm"
    1>ghost - ошибок 11, предупреждений 1
    ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
    
  10. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    m_Language->
    На лол "D
    Я не выспался но кажется надо обьявить в геймплаерс,цпп/х
    и фиксануть это
    m_Language->Если я не прав поправьте :D
  11. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Короч попробывал в оне и понял что тут наверное запрос на бан не оч
    Код:
    1>------ Построение начато: проект: ghost, Конфигурация: Release MySQL Win32 ------
    1>Компиляция...
    1>game.cpp
    1>.\game.cpp(5778) : error C2039: GetServer: не является членом "CGamePlayer"
    1>        d:\zona download\ghost\gameplayer.h(85): см. объявление 'CGamePlayer'
    1>.\game.cpp(5778) : error C2039: GetIP: не является членом "CGamePlayer"
    1>        d:\zona download\ghost\gameplayer.h(85): см. объявление 'CGamePlayer'
    1>.\game.cpp(5778) : error C2660: CGHostDB::ThreadedBanAdd: функция не принимает 6 аргументов
    1>Журнал построения был сохранен в "file://d:\Zona Download\ghost\Release MySQL\BuildLog.htm"
    1>ghost - ошибок 3, предупреждений 0
    ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
  12. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
  13. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Ну Votekick 100%))))


    Только вот это уже гдето было, он мог бы и поискать. И на БРТ разве в ласт ревизиях нету?



    Реализация:


    Game_Base.h

    Находим:
    Код:
    string m_KickVotePlayer;
    Выше ставим:
    Код:
    string m_BanVotePlayer;
    Находим:
    Код:
    uint32_t m_StartedKickVoteTime;
    Выше ставим:
    Код:
    uint32_t m_StartedBanVoteTime;

    Gameplayer.h

    Находим:
    Код:
    bool m_KickVote;
    Выше ставим:
    Код:
    bool m_BanVote;


    Находим:
    Код:
    bool GetKickVote( ){ return m_KickVote; }
    Выше ставим:
    Код:
    bool GetBanVote( ){ return m_BanVote; }


    Находим:
    Код:
    void SetKickVote( bool nKickVote ){ m_KickVote = nKickVote; }
    Выше ставим:
    Код:
    void SetBanVote( bool nBanVote ){ m_BanVote = nBanVote; }

    Gameplayers.cpp

    Находим:
    Код:
    m_KickVote = false;
    Выше ставим:
    Код:
    m_BanVote = false;
    Game_Base.cpp

    Находим:
    Код:
    string m_KickVotePlayer;
    Выше ставим:
    Код:
    string m_BanVotePlayer;
    Находим:
    Код:
    m_StartedKickVoteTime = 0;
    Выше ставим:
    Код:
    m_StartedBanVoteTime = 0;
    Находим:
    Код:
    // expire the votekick
    Выше ставим:
    Код:
        // expire the voteban
     
        if( !m_BanVotePlayer.empty( ) && GetTime( ) - m_StartedBanVoteTime >= 90 )
        {
            CONSOLE_Print( "[GAME: " + m_GameName + "] voteban against player [" + m_BanVotePlayer + "] expired" );
            SendAllChat( "Голосование за бан " + m_BanVotePlayer + " провалено!" ) );
            m_BanVotePlayer.clear( );
            m_StartedBanVoteTime = 0;
            for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
            (*i)->SetBanVote( false );
        }

    Находим:
    Код:
    // abort the votekick
    Выше ставим:
    Код:
    // abort the voteban
     
     
    if( !m_BanVotePlayer.empty( ) )
    SendAllChat( "Голосование за бан " + m_BanVotePlayer + " провалено, кто-то ливнул..." );

    Game.cpp

    Находим:
    Код:
    //
    // !VOTEKICK
    //
    Выше ставим:
    Код:
    //
    // !VOTEBAN
    //
     
    if( Command == "voteban" && !Payload.empty( ) && !player->GetBanVote( ) && m_GameLoaded)
    {
    if( !m_BanVotePlayer.empty( ) )
          SendChat( player, 'Невозможно запустить два голосования одновременно!" );
    else
    {
    uint32_t NeedVotes = 0;
        CGamePlayer *LastMatch = NULL;
          uint32_t Matches = GetPlayerFromNamePartial( Payload, &LastMatch );
          if( Matches == 1 )
          {
                for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                {
                  (*i)->SetBanVote( false );
                  NeedVotes++;
                }
                  NeedVotes--;
                  if( NeedVotes > 1 )
                  {
                  player->SetBanVote( true );
                  m_BanVotePlayer = LastMatch->GetName( );
                  m_StartedBanVoteTime = GetTime( );
                  SendAllChat( User + " хочет забанить " + LastMatch->GetName( ) + ". Голоса: [1/" + UTIL_ToString( NeedVotes )  + "]" );
                  SendAllChat( "Пишите !ban для подтверждения!" );
                  }
          }
    }
    }
    

    Находим:
    Код:
    //
    // !YES
    //
    Выше ставим:
    Код:
    //
    // !BAN
    //
     
    if( Command == "ban" && Payload.empty( ) && !player->GetBanVote( ) && !m_BanVotePlayer.empty( ) && m_GameLoaded)
    {
    player->SetBanVote( true );
    uint32_t NeedVotes = 0;
    uint32_t Votes = 0;
        CGamePlayer *LastMatch = NULL;
          uint32_t Matches = GetPlayerFromNamePartial( m_BanVotePlayer, &LastMatch );
          if( Matches == 1 )
          {
                for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                  {
                  NeedVotes++;
                  if((*i)->GetBanVote( ) )
                  Votes++;
                  }
                  NeedVotes--;
                  if( Votes >= NeedVotes )
                  {
                  m_PairedBanAdds.push_back( PairedBanAdd( "", m_GHost->m_DB->ThreadedBanAdd( LastMatch->GetJoinedRealm( ), LastMatch->GetName( ), "", m_GameName, "", "Забанен голосованием" ) ) );
                  LastMatch->SetDeleteMe( true );
                  LastMatch->SetLeftReason( "забанен и кикнут голосованием" );
                  OpenSlot( GetSIDFromPID(LastMatch->GetPID( ) ),false);
                  m_BanVotePlayer.clear();
                  m_StartedBanVoteTime = 0;
                  }
                  else
                  SendAllChat( User + " поддержует бан " + LastMatch->GetName( ) + ". Голоса: [" UTIL_ToString( Votes )  + "/" + UTIL_ToString( NeedVotes )  + "]" );
          }
    }
    
    Надеюсь в потемках нечего не упустил)))
    Только я вот не уверен по функции бана (именно добавление), т.к. это с ghost++ и тут нету срока, в брт нужно будет еще наверное 1 поле указать - срок.
    Guard, Doterok и Sparko_Dima нравится это.
  14. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    не в ластрелизах нету((( блин где указать срок бана((
  15. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Ну вот для БРТ замените кому надо само добавление бана на вот это:
    Код:
    m_PairedBanAdds.push_back( PairedBanAdd( "", m_GHost->m_DB->ThreadedBanAdd( LastMatch->GetJoinedRealm(), LastMatch->GetName( ), "", m_GameName, "", "Забанен голосованием", "10", 0 ) ) );
    Sparko_Dima нравится это.
  16. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Спасибо огромное!!!!!!!!! думаю можно ище будет попробывать намутить !votemute команду))) не поможешь с реализацией?
  17. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Щас нет. То было время и написал. Если честно ты можешь абсолютно скопировав эту команду сделать и вотемуте, заменяй только так:

    BanVote => MuteVote
    BanVotePlayer => MuteVotePlayer
    StartedBanVoteTime => StartedMuteVoteTime

    ну и в финале для мута, а не бана:
    Код:
    if(Votes >= NeedVotes)
    {
        SendAllChat( "Голосованием игроку " + LastMatch->GetName( ) + " был блокирован чат" );
        LastMatch->SetMuted( true );
        m_MuteVotePlayer.clear();
        m_StartedMuteVoteTime = 0;
    }

    Обновил верхний код, добавь там про сброс BanVotePlayer (m_BanVotePlayer.clear() - при подтверждении голосования)
    Sparko_Dima нравится это.
  18. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Я чет подумал значит мут придется давать на время или на всегда, ведь он не сможет анмут сделать:lol:
  19. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    это да ^_^
  20. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    Сложно будет сделать мут на время?