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

Возжелайте, и да будет вам дано

Тема в разделе 'Кодинг/Собственные решения', создана пользователем Synth (LM), 29 мар 2011.

  1. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Лонг а поповоду коментов игрока? отпостишь?)
    ------------------
    Да и по поиску игр вот:
    Код:
    MySQL Database Error:
    The database returned a invalid result.
    
    MySQL Error: 1064 ( You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT ,' at line 8)
    \n
  2. Synth (LM) Пантограф!

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

    Кидай коды файлов, которые ты изменял.
  3. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    а по-поводу моего админ топа?...
    __________________________________________________________________
    пс: в games когда выбираешь нужный тебе месяц и число, и нажимаешь "принять", количество игр не пишет("Всего игр: 1781") !!!
    ето я про твой сайт. (вроди после того как ты поставил "поиск по играм", перестало писать).
    __________________________________________________________________
    а возможно ли колоризировать TOP.PHP (как в играх). хотелось бы посмотреть что с етого получится [IMG]
  4. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Ах да. Сек.

    Оо а че там колоризировать?
  5. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Чет запрос вешает базу оО
  6. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    Игры Побед Процент побед Проигрышей

    а что делать? ето потому что safe+admin?
  7. Synth (LM) Пантограф!

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

    в common.php

    замени новые функции этими(той)

    Код:
    if ($DBScore == 0)
        {
           if ($ScoreMethod == 2) 
          {$scoreFormula = "$ScoreStart + (wins*$ScoreWins) + (losses*$ScoreLosses) + (disc*$ScoreDisc)";}
          
           if ($HideBannedUsersOnTop == 1) {$_sql = "AND bans.name is null";} else {$_sql = "";}
          
       $text = "
       SELECT *, 
       case when (kills = 0) then 0 
       when (deaths = 0) then 1000 
       else ((kills*1.0)/(deaths*1.0)) end as killdeathratio, 
       ($scoreFormula) as totalscore 
        FROM ( 
        SELECT 
        gp.name as name, 
        bans.name as banname, 
        avg(dp.courierkills) as courierkills, 
        avg(dp.raxkills) as raxkills,
        avg(dp.towerkills) as towerkills, 
        avg(dp.assists) as assists, 
        avg(dp.creepdenies) as creepdenies, 
        avg(dp.creepkills) as creepkills,
        avg(dp.neutralkills) as neutralkills, 
        avg(gp.left) as avgleft, avg(ga.duration) as avgduration,
        avg(dp.deaths) as deaths, 
        avg(dp.kills) as kills, 
        SUM(dp.kills) as totkills,
        SUM(dp.deaths) as totdeaths,
        COUNT(*) as totgames, 
        case when (kills = 0) then 0 
        when (deaths = 0) then 1000 
        else ((kills*1.0)/(deaths*1.0)) 
        end as killdeathratio,
        SUM(case when(((dg.winner = 1 and dp.newcolour < 6) 
        or (dg.winner = 2 and dp.newcolour > 6)) 
         AND gp.`left`/ga.duration >= $minPlayedRatio) then 1 
        else 0 end) as wins, 
         SUM(case when(((dg.winner = 2 and dp.newcolour < 6) 
        or (dg.winner = 1 and dp.newcolour > 6)) 
         AND gp.`left`/ga.duration >= $minPlayedRatio) 
        then 1 else 0 end) as losses
        
        , SUM(
        (gp.`leftreason` LIKE ('%has lost the connection%'))  
        OR (gp.`leftreason` LIKE ('%was dropped%')) 
        OR (gp.`leftreason` LIKE ('%Lagged out%')) 
        OR (gp.`leftreason` LIKE ('%ERR %'))
        OR (gp.`leftreason` LIKE ('%Lost the connection%'))
        ) as disc 
        
    FROM gameplayers as gp 
            LEFT JOIN dotagames as dg ON gp.gameid = dg.gameid 
            LEFT JOIN admins as ad ON ad.name = gp.name 
            LEFT JOIN safelist as sf ON sf.name = gp.name 
            LEFT JOIN dotaplayers as dp ON dg.gameid = dp.gameid 
            AND gp.colour = dp.colour 
            AND dp.newcolour <> 12 
            AND dp.newcolour <> 6
            LEFT JOIN games as ga ON dp.gameid = ga.id 
            LEFT JOIN scores as sc ON sc.name = gp.name 
            LEFT JOIN bans on bans.name = gp.name 
            WHERE dg.winner <> 0 $_sql AND (gp.name = ad.name  OR gp.name = sf.name)
            GROUP BY gp.name having totgames >= $games) as i 
        ORDER BY $order $sortdb, name $sortdb 
        LIMIT $offset, $rowsperpage";}
        else
        {
        if ($HideBannedUsersOnTop == 1) {$_sql = "AND bans.name is null";} else {$_sql = "";}
        
        $text = "
        SELECT *, 
        case when (kills = 0) then 0 
        when (deaths = 0) then 1000 
        else ((kills*1.0)/(deaths*1.0)) 
        end as killdeathratio 
        FROM (
              SELECT gp.name as name, 
            bans.name as banname, 
            avg(dp.courierkills) as courierkills, 
            avg(dp.raxkills) as raxkills,
            avg(dp.towerkills) as towerkills, 
            avg(dp.assists) as assists, 
            avg(dp.creepdenies) as creepdenies, 
            avg(dp.creepkills) as creepkills,
            avg(dp.neutralkills) as neutralkills, 
            avg(dp.deaths) as deaths, 
            avg(dp.kills) as kills, 
            SUM(dp.kills) as totkills,
             SUM(dp.deaths) as totdeaths,
            sc.score as totalscore, 
            COUNT(*) as totgames, 
            SUM(case when(((dg.winner = 1 and dp.newcolour < 6) 
            or (dg.winner = 2 and dp.newcolour > 6)) 
            AND gp.`left`/ga.duration >= $minPlayedRatio) then 1 else 0 end) as wins, 
            SUM(case when(((dg.winner = 2 and dp.newcolour < 6) 
            or (dg.winner = 1 and dp.newcolour > 6)) 
            AND gp.`left`/ga.duration >= $minPlayedRatio) then 1 else 0 end) as losses
            
            , SUM(
        (gp.`leftreason` LIKE ('%has lost the connection%'))  
        OR (gp.`leftreason` LIKE ('%was dropped%')) 
        OR (gp.`leftreason` LIKE ('%Lagged out%')) 
        OR (gp.`leftreason` LIKE ('%ERR %'))
        OR (gp.`leftreason` LIKE ('%Lost the connection%'))
        ) as disc 
            
            FROM gameplayers as gp 
            LEFT JOIN dotagames as dg ON gp.gameid = dg.gameid 
            LEFT JOIN admins as ad ON ad.name = gp.name 
            LEFT JOIN safelist as sf ON sf.name = gp.name 
            LEFT JOIN dotaplayers as dp ON dg.gameid = dp.gameid 
            AND gp.colour = dp.colour 
            AND dp.newcolour <> 12 
            AND dp.newcolour <> 6
            LEFT JOIN games as ga ON dp.gameid = ga.id 
            LEFT JOIN scores as sc ON sc.name = gp.name 
            LEFT JOIN bans on bans.name = gp.name 
            WHERE dg.winner <> 0 $_sql AND (gp.name = ad.name OR gp.name = sf.name)
            GROUP BY gp.name having totgames >= $games) as i 
            
        ORDER BY $order $sortdb, name $sortdb 
        LIMIT $offset, $rowsperpage";
        }
        
        return $text;
    Я вот просто выложил, база повиснит с ним.

    Код:
    	 if ($HideBannedUsersOnTop != '0')
        $_sql = " AND gp.name NOT IN (SELECT name FROM bans) ";
      else
        $_sql = "";
    	 $count = "
      SELECT COUNT(*) as count 
      FROM( 
           SELECT gp.name 
    	   FROM gameplayers as gp, 
    	   dotagames as dg, 
    	   games as ga,
    	   safelist as sf,
    	   admins as ad,
    	   dotaplayers as dp 
    	   WHERE dg.winner <> 0 
    	   AND dp.gameid = gp.gameid 
    	   AND dg.gameid = dp.gameid 
    	   AND dp.gameid = ga.id 
    	   AND gp.gameid = dg.gameid 
    	   AND gp.colour = dp.colour 
    	   $_sql 
    	   GROUP BY gp.name having count(*) >= $games
    	  ) as h
      LIMIT 1";
      
      return $count;
  8. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    щас проверю.
    ух, я и не думал что ето будет так сложно.

    а если зделать чисто топ по игроков safe-list, и в сейф лист добавить всех админов и рут админов.... (если конечно из за топа сейф листа база не будет падать)
  9. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Она из за всего падает :D И сл, и админы...
  10. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    ну тот запрос, там где были одни админы в топе, вроде норм.
    лонг думай, думай лонг .... :opasnoste:
  11. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    чуть попожжа буду з компом дам код.
    ЛОНГ плз скажи как в поиске зделать чтобы IP показывало нормальный, ну как и в реплеях.
    И еще скажи как в чате поставить вместо времени и даты - IP (ну если тоже не комерческая тайна ^^ )
  12. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Ну я не гений в sql запросах, как вы уже поняли... Не знаю. Чем тебя не устраивает первый ip в списке?)

    Вместо? Уныло же.
  13. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
  14. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    НУ ты же вроде писал что нужно чтото там с ORDER помудрить ( както ж цифры разные, а как ^^ )
    НУ а поповоду IP, ну вобщем нужно позарез если нежалко :parovozdjan:
    Типа идейка есть, но то если проканает :bIbIbIblya:
    Так что код дашь ? -_-
  15. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    А и Chart будет ? Ну код всмысле.
  16. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    завтра гляну, сегодне что-то не грузится, но полюбому лутше чем стандартный (унылый) топ.
    там у меня идейка будет с юзербаром...

    пс: я себе тоже зделал страницу 404 :rickroll:
  17. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Пока еще 4 идеи не получу от вас (на счет чарта), не дам [IMG]
  18. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    1) юзербар. хотелось бы дать пользователям выбирать себе юзербар. вот как здесь здесь. при вводе ника, тебе даётся код на 2 юзербара (но так как при создании юзербара они сохраняются в формате .jpg и имеют одинаковое названи, нужно будет указать разные папки
    + создавать 2 sig.php)
    //OUTPUT IMAGE TO BROWSER
    //CACHE IMAGE
    //image create by existing image

    2) может на главной странице зделать какойто опрос + что бы он был рандомный как цытаты с дотабаша.

    3-4 пока думаю...
    ________________________________________________________________________

    1)я не как не успокоюсь по поводу admin_top, нечего не получится? :newcry:
    2)хотел спросить, как зделать так, что бы в статистику (история игр), вносились только игры в конфиге которых указано что ето дота, а то вносятся все подрят как Draw.


    пс так топ по моему мнению смотрится лутше, будет время брось код.
  19. D-MiLIR Ньюфаг

    Сообщения:
    109
    Спасибы:
    0
    LongMan

    Хотел такую вещь добавить на сайт. Не знаю в как лучше с помощью диаграммы или списка.
    Идея такая:
    Хочу добавить в топ. "Самый результативный реалм" то есть с какого реалма игроки лучше играют. ^^
  20. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Не совсем понял, причем по ссылке, ерунда какая-то.

    Ты будешь писать опросы?)

    Ну пока выход нашел, но он явно нерациональный... ну хоть какой то...
    В общем добавь пока всех админов в сейфлист.

    Код:
         function getCountTops2($games,$HideBannedUsersOnTop){
    	 if ($HideBannedUsersOnTop != '0')
        $_sql = " AND gp.name NOT IN (SELECT name FROM bans) ";
      else
        $_sql = "";
    	 $count = "
      SELECT COUNT(*) as count 
      FROM( 
           SELECT gp.name 
    	   FROM gameplayers as gp, 
    	   dotagames as dg, 
    	   games as ga,
    	   admins as ad,
    	   safelist as sl,
    	   dotaplayers as dp 
    	   WHERE dg.winner <> 0 
    	   AND dp.gameid = gp.gameid 
    	   AND dg.gameid = dp.gameid 
    	   AND dp.gameid = ga.id 
    	   AND gp.gameid = dg.gameid 
    	   and gp.name = sl.name
    	   AND gp.colour = dp.colour 
    	   $_sql 
    	   GROUP BY gp.name having count(*) >= $games
    	  ) as h
      LIMIT 1";
      
      return $count;
    	 }
    Код:
            function getTops/*Я забыл какое название фукнции у тебя там :D вставь сам */($scoreFormula,$minPlayedRatio,$games,$order,$sortdb,$offset,$rowsperpage,$DBScore,$ScoreMethod,$ScoreWins,$ScoreLosses,$ScoreDisc,$ScoreStart,$HideBannedUsersOnTop){
        if ($DBScore == 0)
        {
           if ($ScoreMethod == 2) 
          {$scoreFormula = "$ScoreStart + (wins*$ScoreWins) + (losses*$ScoreLosses) + (disc*$ScoreDisc)";}
          
           if ($HideBannedUsersOnTop == 1) {$_sql = "AND bans.name is null";} else {$_sql = "";}
          
       $text = "
       SELECT *, 
       case when (kills = 0) then 0 
       when (deaths = 0) then 1000 
       else ((kills*1.0)/(deaths*1.0)) end as killdeathratio, 
       ($scoreFormula) as totalscore 
        FROM ( 
        SELECT 
        gp.name as name, 
        bans.name as banname, 
        avg(dp.courierkills) as courierkills, 
        avg(dp.raxkills) as raxkills,
        avg(dp.towerkills) as towerkills, 
        avg(dp.assists) as assists, 
        avg(dp.creepdenies) as creepdenies, 
        avg(dp.creepkills) as creepkills,
        avg(dp.neutralkills) as neutralkills, 
        avg(gp.left) as avgleft, avg(ga.duration) as avgduration,
        avg(dp.deaths) as deaths, 
        avg(dp.kills) as kills, 
        SUM(dp.kills) as totkills,
        SUM(dp.deaths) as totdeaths,
        COUNT(*) as totgames, 
        case when (kills = 0) then 0 
        when (deaths = 0) then 1000 
        else ((kills*1.0)/(deaths*1.0)) 
        end as killdeathratio,
        SUM(case when(((dg.winner = 1 and dp.newcolour < 6) 
        or (dg.winner = 2 and dp.newcolour > 6)) 
         AND gp.`left`/ga.duration >= $minPlayedRatio) then 1 
        else 0 end) as wins, 
         SUM(case when(((dg.winner = 2 and dp.newcolour < 6) 
        or (dg.winner = 1 and dp.newcolour > 6)) 
         AND gp.`left`/ga.duration >= $minPlayedRatio) 
        then 1 else 0 end) as losses
        
        , SUM(
        (gp.`leftreason` LIKE ('%has lost the connection%'))  
        OR (gp.`leftreason` LIKE ('%was dropped%')) 
        OR (gp.`leftreason` LIKE ('%Lagged out%')) 
        OR (gp.`leftreason` LIKE ('%ERR %'))
        OR (gp.`leftreason` LIKE ('%Lost the connection%'))
        ) as disc 
        
    FROM gameplayers as gp 
            LEFT JOIN dotagames as dg ON gp.gameid = dg.gameid 
            LEFT JOIN admins as ad ON ad.name = gp.name 
             LEFT JOIN safelist as sl ON sl.name = gp.name 
           
            LEFT JOIN dotaplayers as dp ON dg.gameid = dp.gameid 
            AND gp.colour = dp.colour 
            AND dp.newcolour <> 12 
            AND dp.newcolour <> 6
            LEFT JOIN games as ga ON dp.gameid = ga.id 
            LEFT JOIN scores as sc ON sc.name = gp.name 
            LEFT JOIN bans on bans.name = gp.name 
            WHERE dg.winner <> 0 $_sql  AND (gp.name = ad.name OR gp.name = sf.name)
            GROUP BY gp.name having totgames >= $games) as i 
        ORDER BY $order $sortdb, name $sortdb 
        LIMIT $offset, $rowsperpage";}
        else
        {
        if ($HideBannedUsersOnTop == 1) {$_sql = "AND bans.name is null";} else {$_sql = "";}
        
        $text = "
        SELECT *, 
        case when (kills = 0) then 0 
        when (deaths = 0) then 1000 
        else ((kills*1.0)/(deaths*1.0)) 
        end as killdeathratio 
        FROM (
              SELECT gp.name as name, 
            bans.name as banname, 
            avg(dp.courierkills) as courierkills, 
            avg(dp.raxkills) as raxkills,
            avg(dp.towerkills) as towerkills, 
            avg(dp.assists) as assists, 
            avg(dp.creepdenies) as creepdenies, 
            avg(dp.creepkills) as creepkills,
            avg(dp.neutralkills) as neutralkills, 
            avg(dp.deaths) as deaths, 
            avg(dp.kills) as kills, 
            SUM(dp.kills) as totkills,
             SUM(dp.deaths) as totdeaths,
            sc.score as totalscore, 
            COUNT(*) as totgames, 
            SUM(case when(((dg.winner = 1 and dp.newcolour < 6) 
            or (dg.winner = 2 and dp.newcolour > 6)) 
            AND gp.`left`/ga.duration >= $minPlayedRatio) then 1 else 0 end) as wins, 
            SUM(case when(((dg.winner = 2 and dp.newcolour < 6) 
            or (dg.winner = 1 and dp.newcolour > 6)) 
            AND gp.`left`/ga.duration >= $minPlayedRatio) then 1 else 0 end) as losses
            
            , SUM(
        (gp.`leftreason` LIKE ('%has lost the connection%'))  
        OR (gp.`leftreason` LIKE ('%was dropped%')) 
        OR (gp.`leftreason` LIKE ('%Lagged out%')) 
        OR (gp.`leftreason` LIKE ('%ERR %'))
        OR (gp.`leftreason` LIKE ('%Lost the connection%'))
        ) as disc 
            
            FROM gameplayers as gp 
            LEFT JOIN dotagames as dg ON gp.gameid = dg.gameid 
            LEFT JOIN admins as ad ON ad.name = gp.name 
            LEFT JOIN safelist as sf ON sf.name = gp.name 
            LEFT JOIN dotaplayers as dp ON dg.gameid = dp.gameid 
            AND gp.colour = dp.colour 
            AND dp.newcolour <> 12 
            AND dp.newcolour <> 6
            LEFT JOIN games as ga ON dp.gameid = ga.id 
            LEFT JOIN scores as sc ON sc.name = gp.name 
            LEFT JOIN bans on bans.name = gp.name 
            WHERE dg.winner <> 0 $_sql AND (gp.name = ad.name OR gp.name = sf.name)
            GROUP BY gp.name having totgames >= $games) as i 
            
        ORDER BY $order $sortdb, name $sortdb 
        LIMIT $offset, $rowsperpage";
        }
        
        return $text;
    }