1. Присоединяйтесь к нашему дискорд серверу: https://discord.gg/gGtcVT9CKs
    У проекта OZ Game есть свой собственный PvPGN сервер для игры в Warcraft 3!
    На данном сервере вы найдёте все наши хосты.

БУРБОТ

Тема в разделе "Техническая поддержка", создана пользователем letruck, 30 янв 2018.

Статус темы:
Закрыта.
  1. TopicStarter Overlay
    letruck

    letruck

    Сообщения:
    222
    Симпатии:
    62
    если возможно впихните что нибудь из этого


    в лобби показывает мод игры, владельца , игр на боте, название игры
    Код:
    //    SendChat( player, "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" );
    //    SendChat( player, "Owner: "+m_OwnerName+"    Game Name:     " + m_GameName );
        if( !m_HCLCommandString.empty( ) )
      SendChat( player, "Мод игры: " + m_HCLCommandString );
         SendChat( player, "Владелец игры: " + m_OwnerName );
      SendChat( player, "Игр на боте: " + UTIL_ToString( m_GHost->m_Games.size( ) ));
      uint32_t NowOnline = 0;
     for (uint32_t i=0; i<m_GHost->m_Games.size( ); i++ )
     {
     NowOnline = NowOnline + m_GHost->m_Games[i]->GetNumHumanPlayers( );
     }
     SendChat( player, "Игроков на боте: " + UTIL_ToString(NowOnline+GetNumHumanPlayers( )));
      SendChat( player, "Название игры: " + m_GameName );
    }
    показывает в лобби сервер с которого зашел игрок, страну , провайдера,ип адрес
    Код:
    // join message from diff realms
      string ServName = "Unknown realm";
      if( HostCounterID != 0 )
      {
          for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
          {
            if( (*i)->GetHostCounterID( ) == HostCounterID )
                ServName = (*i)->GetServerAlias();
          }
      }
    else ServName = "Garena";
    SendAllChat( " Игрок " + joinPlayer->GetName( ) + " приперся с сервера " + ServName + "");
    string msgcountry = Player->GetCountry();
    SendAllChat( "Страна: " + (msgcountry == "??" ? "Неизвестно" :  msgcountry));
    string msgprovider = Player->GetProvider();
    SendAllChat( "Провайдер: " + (msgprovider == "" ? "Неизвестно" :  msgprovider));
    SendAllChat( "IP адрес [" + joinPlayer->GetName( ) + "] →  [" + Player->GetExternalIPString() + "]" );
     
    
    цветной ник у рута , админа , игрока . можно по своему переделать

    Код:
    // send info about the new player to every other player
    
            // nik name hakersoft
                string s;
                if( (*i)->GetSocket( ) )
                {
     
    if(IsRootAdmin((Player)->GetName( )))s="|cFFFF00CC"; //значок рута
    else if(IsAdmin((Player)->GetName( )))s="|cFFCC00FF"; //значок админа
    else if (IsReserved((Player)->GetName( ))||IsSafe((Player)->GetName( )))s="|cFF33FF00";//сейф\резерв
    else s="";// обычные игроки.Если сделать else s="●" , то у обычных игроков перед ником будет ●
     
     
                    if( m_GHost->m_HideIPAddresses )
                        (*i)->GetSocket( )->PutBytes( m_Protocol->SEND_W3GS_PLAYERINFO( Player->GetPID( ),(s + (Player)->GetName( ) ).substr( 0, 15 ), BlankIP, BlankIP ) );
                    else
                        (*i)->GetSocket( )->PutBytes( m_Protocol->SEND_W3GS_PLAYERINFO( Player->GetPID( ), ( s + (Player)->GetName( ) ).substr( 0, 15 ),Player->GetExternalIP( ), Player->GetInternalIP( ) ) );
                }
     
                // send info about every other player to the new player
    if(IsRootAdmin((*i)->GetName( )))s="|cFFFF00CC";
    else if(IsAdmin((*i)->GetName( )))s="|cFFCC00FF";
    else if (IsReserved((*i)->GetName( ))||IsSafe((*i)->GetName( )))s="|cFF33FF00";
    else s="";
     
                if( m_GHost->m_HideIPAddresses )
                    Player->Send( m_Protocol->SEND_W3GS_PLAYERINFO( (*i)->GetPID( ), (s + (*i)->GetName( ) ).substr( 0, 15 ), BlankIP, BlankIP ) );
                else
                    Player->Send( m_Protocol->SEND_W3GS_PLAYERINFO( (*i)->GetPID( ), (s + (*i)->GetName( ) ).substr( 0, 15 ), (*i)->GetExternalIP( ), (*i)->GetInternalIP( ) ) );
            }
        }
    лимит птс при входу в игру
    Код:
    //
    // !PTS
    //
    
    if( Command == "pts" && !m_GameLoading && !m_GameLoaded )
    {
    double Score;
    string ss;
    string Scores;
    string ScoreS;
    bool isAdmin = false;
    
    if (Payload.empty( ))
    {
    m_ScoreCheck=false;
    
    SendAllChat( "Проверка на PTS отключена!");
    } else
    
    {
    m_ScoreCheck=true;
    m_Scores = UTIL_ToDouble(Payload);
    Scores = UTIL_ToString(m_Scores, 2);
    
    SendAllChat( "Проверка на PTS включена вход доступен с Начисления PTS: >="+Scores);
    

    смотреть правила в игре командой !pravila . создаем в корневой папке фаил !pravila.txt и пишем в каждой строке

    Код:
    Открываем файл Game_base.cpp
    
    Находим
    m_AutoWarnMarks = m_Map->GetAutoWarnMarks( );
    Над ним добавляем
    Код:
    //
    // !RULES
    //
    
    else if( Command == "pravila" || Command == "pr" )
    {
    // read from rules.txt if available
    
    ifstream in;
    in.open( "pravila.txt" );
    
    if( !in.fail( ) )
    {
    // don't print more than 8 lines
    
    uint32_t Count = 0;
    string Line;
    
    while( !in.eof( ) && Count < 11 )
    {
    getline( in, Line );
    
    if( Line.empty( ) )
    {
    if( !in.eof( ) )
    SendChat( player, " " );
    }
    else
    SendChat( player, Line );
    
    ++Count;
    }
    
    in.close( );
    }
    else
    CONSOLE_Print( "[GAME: " + m_GameName + "] Failed to open [pravila.txt]" );
    }
    
    включаемое и выключаемое фф админами

    Код:
    //
        //!FF
        //
       
        if( ( Command == "fastfinish" || Command == "ff" ) && m_GameLoaded )
        {
          if (!m_GHost->m_StartFF)
            SendChat (player, "Команда !FF выключена!");
          else
          {
            unsigned char CurentTeam=m_Slots[GetSIDFromPID(player->GetPID())].GetTeam();
          if (CurentTeam>1)
             return false ;
          player->SetFFVote(true);
          uint32_t VotesNeeded= 0;
          uint32_t Votes = 0;
            for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
          {
             if( !(*i)->GetLeftMessageSent( ) )
             if(m_Slots[GetSIDFromPID((*i)->GetPID())].GetTeam() == CurentTeam)
             {
                VotesNeeded++;
                if( (*i)->GetFFVote( ) )
                   Votes++;
             }
          }
             SendAllChat( player->GetName()+" признал что он дно!! [" + UTIL_ToString( Votes )+"/"+ UTIL_ToString(VotesNeeded)+"] "+"спаси нервы пиши тоже !ff ");
             if( Votes >= VotesNeeded )
                  {
                   if (m_DotaGame )
                   {
                   SendAllChat("Победители The " + (string)(CurentTeam == 0 ? "Scourge" : "Sentinel") + " игра закончится через 5 секунд.");
                   m_Stats->SetWinner((uint32_t)(CurentTeam == 0 ? 2 : 1));
                   }
                   else SendAllChat("Игра закончится через 20 секунд.");
                   m_GameEndCountDownStarted = true;
                   m_GameEndCountDownCounter = 20;
                   m_GameEndLastCountDownTicks = GetTicks();
                  }
          }
    
        }
    
        if ( Command == "startff" && !Payload.empty( )  && (AdminCheck || RootAdminCheck))
        {
            if (Payload == "on"){
                m_GHost->m_StartFF = true;
            SendAllChat( "Команда!ff включена администратором" );
        }
            else if (Payload == "off"){
                m_GHost->m_StartFF = false;
                 SendAllChat( "Команда !ff отключена администратором" );
            }
    
    
        }
    
        /*
            if (Payload == "on")
            {
            SetStartFF(true);
            SendAllChat( "!ff включено" );
            }
            else if (Payload == "off")
            {
                SetStartFF(false);
             
            }*/
     
    

    команда !server чтобы узнать сервер игрока

    Код:
    //
    // !SERVER
    //
    
    if( Command == "server" )
    {
        string servermsg;
        string serveralias;
    
        if( !Payload.empty( ) )
        {
            CGamePlayer *LastMatch = NULL;
    
            uint32_t Matches = GetPlayerFromNamePartial( Payload , &LastMatch );
            if (Matches == 1)
            {
                servermsg = LastMatch->GetName( );
                servermsg += ": ";
                serveralias = LastMatch->GetJoinedRealm( ).empty( ) ? "N/A" : LastMatch->GetJoinedRealm( );
    
                if ( serveralias != "N/A" )
                {
                    for( vector<CBNET *> :: iterator j = m_GHost->m_BNETs.begin( ); j != m_GHost->m_BNETs.end( ); j++ )
                    {
                        if( (*j)->GetServer( ) == serveralias )
                        {
                            serveralias = (*j)->GetServerAlias( );
                            break;
                        }
                    }                      
                }
    
                servermsg += serveralias;
            }
            else
            {
                servermsg = "Error. Player not found.";
            }
        }
        else
        {
            for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
            {
                if ( i == m_Players.begin( ) )
                    servermsg = (*i)->GetName( );
                else
                    servermsg += (*i)->GetName( );
    
                servermsg += ": ";
                serveralias = (*i)->GetJoinedRealm( ).empty( ) ? "N/A" : (*i)->GetJoinedRealm( );
    
                if ( serveralias != "N/A" )
                {
                    for( vector<CBNET *> :: iterator j = m_GHost->m_BNETs.begin( ); j != m_GHost->m_BNETs.end( ); j++ )
                    {
                        if( (*j)->GetServer( ) == serveralias )
                        {
                            serveralias = (*j)->GetServerAlias( );
                            break;
                        }
                    }                      
                }
    
                servermsg += serveralias;
    
                if( i != m_Players.end( ) - 1 )
                    servermsg += ", ";
            }
    
        }
    
        SendAllChat( servermsg );
    
        return HideCommand;
    }
    

    миниантимх в карте

    Код:
    В теле
    Код:
     
    void CBaseGame :: EventPlayerAction( CGamePlayer *player, CIncomingAction *action )
    Вставляем это
    Код:
    if( !action->GetAction( )->empty( ) && (*action->GetAction( ))[0] == 0x51 && m_GetMapType == "dota")
      SendAllChat( "Внимание! " + player->GetName( )+" использует MapHack!");
    Эффект заставит долго ждать.
     
    void CBaseGame :: EventPlayerAction( CGamePlayer *player, CIncomingAction *action )
    {
    if( !action->GetAction( )->empty( ) && (*action->GetAction( ))m_GetMapType == "dota")
      SendAllChat( "Внимание! " + player->GetName( )+" использует MapHack!");
    m_Actions.push( action );
     
    // check for players saving the game and notify everyone
     
    if( !action->GetAction( )->empty( ) && (*action->GetAction( ))[0] == 6 )
    {
    CONSOLE_Print( "[GAME: " + m_GameName + "] player [" + player->GetName( ) + "] is saving the game" );
    SendAllChat( m_GHost->m_Language->PlayerIsSavingTheGame( player->GetName( ) ) );
    }
    }
    
    
    сколько часов всего игрок играл на боте
    Код:
    В ghostdbsqlite.cpp
    И так:поменял AVG(loadingtime)(среднее время загрузки в стате) на
    SUM(left)(сумирует все значения времени игры конкретного юзера, в секундах)
    До
    CDBGamePlayerSummary *CGHostDBSQLite :: GamePlayerSummaryCheck( string name )
    
    {
    
    if( GamePlayerCount( name ) == 0 )
    
    return NULL;
    
    transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );
    
    CDBGamePlayerSummary *GamePlayerSummary = NULL;
    
    sqlite3_stmt *Statement;
    
    m_DB->Prepare( "SELECT MIN(datetime), MAX(datetime), COUNT(*), MIN(loadingtime), AVG(loadingtime), MAX(loadingtime), MIN(left/CAST(duration AS REAL))*100, AVG(left/CAST(duration AS REAL))*100, MAX(left/CAST(duration AS REAL))*100, MIN(duration), AVG(duration), MAX(duration) FROM gameplayers LEFT JOIN games ON games.id=gameid WHERE name=?", (void **)&Statement );
    
    После
    
    CDBGamePlayerSummary *CGHostDBSQLite :: GamePlayerSummaryCheck( string name )
    {
    if( GamePlayerCount( name ) == 0 )
    return NULL;
    
    transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );
    CDBGamePlayerSummary *GamePlayerSummary = NULL;
    sqlite3_stmt *Statement;
    m_DB->Prepare( "SELECT MIN(datetime), MAX(datetime), COUNT(*), MIN(loadingtime), SUM(left) , MAX(loadingtime), MIN(left/CAST(duration AS REAL))*100, AVG(left/CAST(duration AS REAL))*100, MAX(left/CAST(duration AS REAL))*100, MIN(duration), AVG(duration), MAX(duration) FROM gameplayers LEFT JOIN games ON games.id=gameid WHERE name=?", (void **)&Statement );
    
    
    Далее ищем в game.cpp
    
    SendAllChat( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString( (float)GamePlayerSummary->GetAvgLoadingTime( ) / 1000, 2 ), UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ) );
    
    
    И другие вхождения, у меня их 3
    И меняем их на:
    SendAllChat( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString(GamePlayerSummary->GetAvgLoadingTime( ) / 3600)+" часов "+UTIL_ToString((GamePlayerSummary->GetAvgLoadingTime( ) % 3600)/60)+" минут." , UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ) );
    
    
    Ну и в Languages\Russian.cfg меняем примерно так, или на ваше усмотрение:
    lang_0061 = $USER$ - $TOTALGAMES$ игр. Играл на боте: $AVGLOADINGTIME$ Среднее пребывание: $AVGSTAY$ %.
    

    сообщение при сносе вышек

    Код:
    В statsdota.cpp
    if( Killer )
    {
    CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] player [" + Killer->GetName( ) + "] destroyed a level [" + Level + "] " + AllianceString + " tower (" + SideString + ")" );
     
    m_Game->SendAllyChat(Killer->GetPID(), Killer->GetName() + " destroyed a level [" + Level + "] " + AllianceString + " tower (" + SideString + ")" ); // для союзников "убийцы" вышки
     
    for( vector<CGamePlayer *> :: iterator i = m_Game->m_Players.begin( ); i != m_Game->m_Players.end( ); i++ )
    {
    if (m_Game->m_Slots[m_Game->GetSIDFromPID((*i)->GetPID())].GetTeam() != m_Game->m_Slots[m_Game->GetSIDFromPID(Killer->GetPID())].GetTeam())
    {
    m_Game->SendAllyChat((*i)->GetPID(), (*i)->GetName() + " destroyed a level [" + Level + "] " + AllianceString + " tower (" + SideString + ")" ); // для союзников убитой вышки
    break;
    }
    }
    }
    
    надпись при фб и оповещение о плохом счете

    Код:
    statsdota.cpp
    
    m_Winner = 0;
    m_Min = 0;
    m_Sec = 0;
    + m_FirstBlood = false;
    Ищем
    
    uint32_t GameNr = m_Game->GetGameNr();
    добавляем ниже
    
    
    Код:
     
    if(  Killer )
                                {
                                                                        // fb check
                                                                        if(!m_FirstBlood){
                                                                           ///тут может быть выше действие
                                                                            m_FirstBlood = true;
                                                                            m_Game->SendAllChat( Killer->GetName() + " Уася ты краусавчек");
                                                                        }
                                                                        }
                                    m_Game->m_GHost->UDPChatSend("|gameupdate "+UTIL_ToString(GameNr));
                                    if (Victim)
                                        Victim->SetDOTADeaths(Victim->GetDOTADeaths()+1);
                                    if( Killer && Victim )
                                    {
                                        Killer->SetDOTAKills(Killer->GetDOTAKills()+1);
                                        CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] player [" + Killer->GetName( ) + "] killed player [" + Victim->GetName( ) + "]" );
    
                                        m_Game->m_GHost->UDPChatSend("|gameupdate "+UTIL_ToString(GameNr));
    if (Victim)
    
    {
    if(Victim->GetDOTAKills() + 4 < Victim->GetDOTADeaths())
    m_Game->SendAllChat(Victim->GetName() + " Ты свой счет видел? Нубло галимое ливни! " +UTIL_ToString( Victim->GetDOTAKills() ) + "/" + UTIL_ToString( Victim->GetDOTADeaths() ) ) ;
    if( Killer && Victim )
    
    Killer->SetDOTAKills(Killer->GetDOTAKills()+1);
    CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] player [" + Killer->GetName( ) + "] killed player [" + Victim->GetName( ) + "]" );
    
    }
                                        m_Game->SendAllChat( Victim->GetName( ) + ", обоссать бы твои кривые руки!!!");
                                    }
                                    else if( Victim )
                                    {
                                        if( ValueInt == 0 )
                                            CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] the Sentinel killed player [" + Victim->GetName( ) + "]" );
                                        else if( ValueInt == 6 )
                                            CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] the Scourge killed player [" + Victim->GetName( ) + "]" );
                                    }
                                }
                                else if( KeyString.size( ) >= 8 && KeyString.substr( 0, 7 ) == "Courier" )
                                {
    

    надпись при убийстве куры
    Код:
    // a courier died
    
                                    if( ( ValueInt >= 1 && ValueInt <= 5 ) || ( ValueInt >= 7 && ValueInt <= 11 ) )
                                    {
                                        if( !m_Players[ValueInt] )
                                            m_Players[ValueInt] = new CDBDotAPlayer( );
    
                                        m_Players[ValueInt]->SetCourierKills( m_Players[ValueInt]->GetCourierKills( ) + 1 );
                                    }
    
                                    string VictimColourString = KeyString.substr( 7 );
                                    uint32_t VictimColour = UTIL_ToUInt32( VictimColourString );
                                    CGamePlayer *Killer = m_Game->GetPlayerFromColour( ValueInt );
                                    CGamePlayer *Victim = m_Game->GetPlayerFromColour( VictimColour );
    
                                    if( Killer && Victim )
                                        CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] player [" + Killer->GetName( ) + "] killed a courier owned by player [" + Victim->GetName( ) + "]" );
                                    else if( Victim )
                                    {
                                        if( ValueInt == 0 )
                                            CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] the Sentinel killed a courier owned by player [" + Victim->GetName( ) + "]" );
                                        else if( ValueInt == 6 )
                                            CONSOLE_Print( "[STATSDOTA: " + m_Game->GetGameName( ) + "] the Scourge killed a courier owned by player [" + Victim->GetName( ) + "]" );
                                        m_Game->SendAllChat( Victim->GetName( ) + ", трахнули твою куру!");
                                    }
                                }
                                else if( KeyString.size( ) >= 8 && KeyString.substr( 0, 5 ) == "Tower" )
                                {
     
    Последнее редактирование: 30 янв 2018
    wgccj11 и Dan нравится это.
  2. RRezak09

    RRezak09 Guest

    Показывать ИП адреса такое себе, вычислять начнут же по ИП, я как человек который по кд ловит угрозы расправой принципиально против :Af
     
    wgccj11 нравится это.
  3. TopicStarter Overlay
    letruck

    letruck

    Сообщения:
    222
    Симпатии:
    62
    RRezak09, так там ип адреса можно вырезать

    если лень давайте я сам впихну все это ))))
     
  4. премы и админы и так цветом выделены в лоби на озбнете :Af
     
    Erare и vlad_cool нравится это.
  5. TopicStarter Overlay
    letruck

    letruck

    Сообщения:
    222
    Симпатии:
    62
    игра бутылочка ))
    Код:
    P.S Для тех кто в танке: я код добавил перед
    
    // upgrade LAN players to admins in case bot_lanadmins = 1
    
    
    ////тестовая бутылочка
    
       if(( Command == "butilochka" || Command == "but" || Command == "бутылочка"  || Command == "бут"))
        {
       int range = 0;
       string MASSIV_STROK[22]={"поцеловать","обнять","поцеловать в губы","высосать мозг у","угостить пивом","отрезать яйца у","откусить ухо у","сделать все что захочет с","отсасать у","почесать яйца","Дать 100$","Ливануть во время игры","Насрать на","Вставить","Пнуть по яйцам","Отрезать ***","Проиграть в игре","Кидать на мать МАТ","С*ить яйца у","Взорвать","Ограбить РосБанк","Целовать в дырочку"};
       string name = "";
       //получение количества играков
       for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
       {
       range+=1;
       }
       //расчёт случаного числа из количества игркаов
       int random_int = rand() % (range+1);
       int sravnenie = 0; //число для сравнение
       //получение имени игкровка
       for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
       {
       sravnenie++;
       if(sravnenie==random_int){//сравнение
       name = (*i)->GetName( );
       }
       }
       if(User==name || name=="")
       {
       SendChat( player, " |cFF00C000[Бутылочка]|r: крутаника еще разочек :)");
       }else{//оповестим чат
       SendAllChat(" |cFF00C000[Бутылочка]|r: "+User+" крутит бутылочку, бутылочка крутится, крутится и указывает на "+name);
       SendAllChat(" |cFF00C000[Бутылочка]|r: теперь "+User+" должен(а)  "+MASSIV_STROK[rand() % (9)]+" "+name);
       }  
       }
    

    AmeliaРanda, так у тебя через озбнет клиент только видно. у многих нет ознет клиента

    в лод карте сменил скрин))
    можно и эту карту ставить на бот ,я не художник простите))
    [​IMG]
     
  6. RRezak09

    RRezak09 Guest

    Если все фишки озбнета будут доступны и без озбнета, есть вероятность того что озбнет станет менее популярным !Al
     
  7. BigWolf

    BigWolf

    Сообщения:
    4.097
    Симпатии:
    1.288
    Пофотожопить чтоль. Ну если попросят - сделаю. Крейд если шо мастер :Af
     
  8. Dan

    Dan мадыр на пенсии

    Сообщения:
    5.329
    Симпатии:
    2.992
    Насчёт мода прикольно. А так-то остальное вроде есть уже, не?

    Спам, лишняя инфа, айпи вообще ни к чему светить. Сервер вроде и так есть.

    Вот за цветной ник премы бы продали задницы, я думаю. Тут уж как Крейд решит, но если их выдавать с умом и ограниченно - ничо такая фишка.

    Если правила уложить в две-три строки, то можно. Но ещё и нужно до игроков донести, что существует такая команда.

    Занятная фишка, полезно при выдаче бана, к примеру.

    Вот тут такооооое себе. Особенно в такой формулировке, когда антимх (как я понимаю) не стопроцентный, а основанный на кликах...

    Тоже спам.

    В дотке вообще куча спама в лобби, народ ливает-заходит по кд, чат летит вверх - ни к чему добавлять излишеств, минимализм хорош.

    P.S. Всё сказанное - исключительно моё личное и субъективное мнение. А само наличие кода в помощь - уже круто.
     
    RRezak09 нравится это.
  9. епта лучше вместо ладскрина вставь -фф в карту !Ap
     
  10. TopicStarter Overlay
    letruck

    letruck

    Сообщения:
    222
    Симпатии:
    62
    да там не показывает сервер. просто пишет что игрок присоеденился к игре

    так этот код можно изменить . чтобы в игре самому менять цвет ника или через саит менять цвет ника

    ставишь каждые 10 минут оповещение от бота
    что есть такие то команды и можно купить админки на боте и тд
    у меня на боте этот код тоже есть нада порыскать если нада)

    он передачу голда игроку точно определяет . знаю

    вот есть карта дота 6.88v3 с антихаком и куча фишек новых. но она весит 11,5 мб DotA Allstars 6.88v3 http://d1stats.ru/files/Allstars/DotA Allstars 6.88v3.w3x
    я могу посидеть 1-2 дня помучаться . сжать попробывать карту до 8 мб . чтобы у всех игроков шла карта
    стоит ли делать?
     
  11. RRezak09

    RRezak09 Guest

    8 мб + антихак это хорошо. Но хотелось ты имена пароли и явки этих "фишек",

    А то судя по ченджлогу на который ведёт ссылка которую ты дал, это больше напоминает the forest :Af
     
  12. TopicStarter Overlay
    letruck

    letruck

    Сообщения:
    222
    Симпатии:
    62
    RRezak09, сегодня ночью сжимал и переделывал файлы для карты 6.88v3
    У меня получилось сжать карту с 11.5 до 8мб .
     
  13. Kreyd

    Kreyd Администратор

    Сообщения:
    5.945
    Симпатии:
    4.300
    Я наоборот всё это вырезал а они хотят внедрить :facepalm:
    Всё что нужно игроку это зайти и поиграть, всё просто. Главное стабильность, низкий пинг. К сожалению десинхронизацию никак не пофиксить.

    Мод пишется при первом заходе в лобби, кому нужно тот прочитает. :)
    Цветные ники есть на озбнете. А на других платформах ограничение в 4 символа в нике, зачем это нужно. Ну а так да, если тупо срубить бабла то можно.
     
    RRezak09 нравится это.
  14. RRezak09

    RRezak09 Guest

    Крид, действительно, если бы была возможность добавь такие фишки как у айкапа, на счёт ладдер бонусов и брони, повально души начали бы игроки продавать чтобы купить их. Какие истерики игроки устраивают ради потерянных 4-ёх птс. А там уже можно было бы вырезать возможность банить премам, всё таки самые горячие и долгие темы, это баны премов.
     
  15. Kreyd

    Kreyd Администратор

    Сообщения:
    5.945
    Симпатии:
    4.300
    Самое нужно наверное это отображение птс в нике, после ника наверное. Но если у кого длинный ник то не будет. Вообще пусть играют на озбнет там всё есть и реконнектор и анти мх. !Ap

    Я наоборот не вводил ничего на рейтинг, тогда какой смысл в рейтинге если его можно купить?
    По поводу премов. Баны и кик это функции админа как-раз для контроля игрового процесса. Кто знал что в данных группах будут вредители :(
     
  16. RRezak09

    RRezak09 Guest

    Kreyd, Рейтинг никогда не бывает 100% объективным:Af, можно ввести это бонусы на адекватные цены и брать количествам, людям то невдомёк будет понять что если бонусы есть у всех от них толку мало !Aj.
    И надо заставить бура добавить возможность модераторам редактировать статистику игрокам своего раздела(убрать 1 игру, не отменяя всей команде). Порой нужно такое)
     
  17. Kreyd

    Kreyd Администратор

    Сообщения:
    5.945
    Симпатии:
    4.300
    Ну придётся делать.
    1. Интеграция сайта в форум.
    2. Пилить личный кабинет и авторизацию игроков на боте.
    3. И прочие плюшки.

    Панда не любит пхп дрочерство, он считает это для лайтовых пацанов. !Ag
     
  18. RRezak09

    RRezak09 Guest

    !Alвозможно ли что у нас есть какой нибудь модер с позиции слабака, по совместительству лайтовый пацан, так же по совместительству твоя левая рука? !Al, Который возможно уже чуть ли не на коленях умоляет дать ему поработать!Al
     
  19. Kreyd

    Kreyd Администратор

    Сообщения:
    5.945
    Симпатии:
    4.300
    Хотя лучше интеграцию делать на другом домене, а базу форума сделать общей.
     
    RRezak09 нравится это.
  20. RRezak09

    RRezak09 Guest

    Я тебе про достойных узбеков, а ты про каких то кульных казахов, нам нужен результат) а не тернии на пути к успеху :Af
     

Статус темы:
Закрыта.