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

Установка и настройка Dota Open Stats

Тема в разделе 'Запуск и Поддержка', создана пользователем Synth (LM), 15 дек 2010.

Статус темы:
Закрыта.
  1. Synth (LM) Пантограф!

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

    1. Скачиваем последнюю версию Dota Open Stats (дальше DOS).
    2. Распаковываем в C:\AppServ\www (или туда, где установлен AppServ).
    3. Открываем phpmyadmin (localhost/phpmyadmin), вводим в логин-форму ваши данные, которые вы вводили при установке AppServ - например USERNAME - lol123, PASSWORD - abc123.
    4. Нажимаем вкладку SQL.

    • Если вы уже создали базу данных ghost (для своего бота), то выполните только этот шаг:
      • Выполните SQL запрос из файла MySQLSetup.sql, который находится в директории DOS'a/DOC
      Иначе, если вы делаете это в первый раз, делайте следущие шаги:
      • Выполните SQL запрос из файла mysql_create_tables_v2.5one.sql, который лежит в директории Вашего бота GHost.
      • Затем выполните SQL запрос из файла MySQLSetup.sql, который находится в директории DOS'a/DOC
      • В конфиге Вашего бота, поставьте нужные значения в поля:
        Код:
        db_type = mysql
        db_mysql_server = localhost
        db_mysql_database = ghost
        db_mysql_user = ИМЯ_ЮЗЕРА_ОТ_БАЗЫ_ДАННЫХ
        db_mysql_password = ПАРОЛЬ_ДЛЯ_ЮЗЕРА
        db_mysql_port = 3306
      • Теперь ваш бот будет работать на MySQL базе данных.
      Обязательно выполните SQL запрос из файла optimizeMySQL.sql, который находится в директории DOS'a/DOC


    5. Открываем файл config.php - редактируем:

    Ставим те значения, которые указаны ниже или описанные в комментариях.




    На этом настройка закончена. Приятного пользования.
    PS: Инструкция не предназначена для нубов.
  2. America Ньюфаг

    Сообщения:
    20
    Спасибы:
    0
    Доброе утро, вот случайно увидел у вас ДОС, решил поставить и себе (до этого сидел на Аллстатс).

    но с ДОС что-то вообще не получается :/

    1.В старую мускульную дб ghost (что стояла на Аллстатах) через пхп админ выполнил сюл запрос MySQLSetup.sql и optimizeMySQL.sql. (добавились кажется слева структуры w3mmdplayers и w3mmdvars.

    2.т.к. пользуюсь вамп сервером, закинул ДОС в папку www, отредактировал config.php, изменив
    теперь пытаюсь зайти в http://localhost, но иногда выдается сообщение что сервер недоступен, попробуйте пожже, а после рестарта вампа выдает вот что:
    Код:
    * --> **********************************************/ define("database",""); class database { // mysql link identifier var $link_ident = NULL; // debug mode var $debug = true; // query counter var $query_count = 0; var $login = array(); var $last_id = NULL; var $default_error_message = 'Sorry, a internal error occured. Please go back an try it again.
    
    Back'; /* ** database ** database constructor */ function database(){ // parameter count: $args = func_num_args(); if ($args == 4) { /* set login data: host, username, password, database */ $this->login = func_get_args(); } } /* ** set_login ** set login data (host, username, password, database) */ function set_login(){ // parameter count: $args = func_num_args(); if ($args >= 3) { /* set login data: host, username, password, database */ $this->login = func_get_args(); } } /* ** set_database ** */ function set_database($database){ $this->login[3] = $database; } /* ** is_connected ** */ function is_connected(){ return ($this->link_ident !== NULL); } /* ** error ** */ function error($msg){ $error = @mysql_error($this->link_ident); $errno = @mysql_errno($this->link_ident); if ($this->debug){ print '
    '; print 'MySQL Database Error:
    '; print $msg; print '
    
    MySQL Error: ' . $errno . ' ( ' . $error . ')
    \n'; print '
    '; } else { print $this->default_error_message; } exit; } /* ** connect ** Connect to the database server. */ function connect(){ if ($this->is_connected()) { // Connection is alread etablished return true; } if (count($this->login) != 4) { $this->error('Did not found the login settings.'); return false; } $this->link_ident = mysql_connect($this->login[0], $this->login[1], $this->login[2]); if (!$this->link_ident) { $this->error('Could not connect to the database.'); return false; } if (!@mysql_select_db($this->login[3], $this->link_ident)) { $this->error('Could not select the database.'); return false; } return true; } /* ** get_query_cout ** */ function get_query_cout(){ return $this->query_count; } /* ** simple_escape ** */ function simple_escape($str) { if (function_exists('mysql_real_escape_string')) { return @mysql_real_escape_string($str, $this->link_ident); } else { return @mysql_escape_string($str); } } /* ** insert_array ** */ function insert_array($table, $data_array){ $row_keys = array(); $row_vals = array(); // go trough all keys: while (list($key, $val) = each($data_array)){ // add key $row_keys[] = "`$key`"; // prepare and add value if ($val == 'NOW()'){ $val = 'NOW()'; } else if (!is_numeric($val)) { $val = '"'.$this->simple_escape($val).'"'; } $row_vals[] = $val; } // generate query string $query_str = 'INSERT INTO ' . $table; $query_str .= ' ('.implode(',', $row_keys).') '; $query_str .= 'VALUES ('.implode(',', $row_vals).');'; // exec. query: return $this->query($query_str); } /* ** prepare_query ** */ function prepare_query(){ // parameter count: $args = func_num_args(); if ($args >= 1) { $args = func_get_args(); $sql = $args[0]; unset($args[0]); return vsprintf($sql, $args); } return ''; } /* ** close ** Close the database connection. */ function close(){ if ($this->is_connected()) { $r = @mysql_close($this->link_ident); $this->link_ident = NULL; return $r; } } /* ** print_query ** Print query */ function print_query($query_string) { print '
    
    ';
            print_r($query_string);
            print '
    
    '; } /* ** get_insert_id ** */ function get_insert_id(){ return mysql_insert_id($this->link_ident); } /* ** debug_query ** */ function debug_query($query_string) { $r = $this->query($query_string); print ''; print ''; print '
    SQL Query:
    '; print htmlentities($query_string); print '
    
    '; print ''; $first_row = $this->fetch_array($r); if ($first_row){ $keys = array_keys($first_row); print ''; for ($x=0; $x < count($keys); $x++){ print ''; } print ''; $x = 0; while ($row = $this->fetch_array($r)){ print ''; while(list($name, $value) = each($row)){ print ($value != '') ? '' : ''; } print "\n"; $x++; } print '
    '.$keys[$x].'
    '.htmlentities($value).'	 
    '; } else { print 'No rows found!'; } } /* ** query ** */ function query($query_string) { // Connect to the database if we are // not already connected $this->connect(); $query_string = trim($query_string); if (empty($query_string) or $query_string == '') { return false; } // Check if we are connected to the database if (!$this->is_connected()) { $this->error('No database connection found.'); return false; } // Execute the query: $q_id = @mysql_query($query_string, $this->link_ident); // Update query count $this->query_count++; // If a empty result is given if (!$q_id) { $this->error('The database returned a invalid result.'); return false; } return $q_id; } /* ** query_fetch ** */ function &query_fetch($query_string){ $query_handle = $this->query($query_string); if ($this->num_rows($query_handle) == 0){ return array(); } else { return $this->fetch_array($query_handle); } } /* ** query_single_result ** */ function query_single_result($query_string){ $query_handle = $this->query($query_string); if ($this->num_rows($query_handle) == 0){ return ''; } else { $result = $this->fetch_array($query_handle, 'num'); return isset($result[0]) ? $result[0] : ''; } } /* ** count_rows ** */ function count_rows($query_string){ $query_handle = $this->query($query_string); if (!$this->num_rows($query_handle)){ return 0; } else { $row = $this->fetch_array($query_handle); return isset($row[0]) ? $row[0] : 0; } } /* ** num_rows ** */ function num_rows($r){ return @mysql_num_rows($r); } /* ** num_cols ** */ function num_cols($r){ return @mysql_num_fields($r); } /* ** table_size ** returns something like: 484.2 KB */ function table_size($table_name, $database=NULL) { if ($database === NULL){ $database = isset($this->login[3]) ? $this->login[3] : ''; } if ($database == ''){ $this->error('No database given.'); } $this->connect(); $r = $this->query("SHOW TABLE STATUS FROM ".$database." LIKE '".$table_name."'", $this->link_ident); $size = intval($this->result($r, 0, 'Index_length')) + intval($this->result($r, 0, 'Data_length')); return $this->nice_date($size); } /* ** nice_date ** returns something like: 484.2 KB */ function nice_date($size){ $units = array(' B', ' KB', ' MB', ' GB', ' TB'); for ($i = 0; $size > 1024; $i++) { $size /= 1024; } return round($size, 2).$units[$i]; } /* ** database_size ** returns something like: 484.2 KB */ function database_size($database) { $this->connect(); $tables = mysql_list_tables($database, $this->link_ident); if (!$tables) { return -1; } $table_count = mysql_num_rows($tables); $size = 0; for ($i=0; $i < $table_count; $i++) { $table_name = mysql_tablename($tables, $i); $r = $this->query("SHOW TABLE STATUS FROM ".$database." LIKE '".$table_name."'", $this->link_ident); $size += intval($this->result($r, 0, 'Index_length')) + intval($this->result($r, 0, 'Data_length')); } return $this->nice_date($size); } /* ** affected_rows ** */ function &affected_rows(){ return @mysql_affected_rows($this->link_ident); } /* ** fetch_object ** */ function &fetch_object($handle) { return @mysql_fetch_object($handle); } /* ** fetch_array ** */ function &fetch_array($handle, $type = 'assoc') { if ($type == 'assoc'){ $result_type = MYSQL_ASSOC; } else if ($type == 'num'){ $result_type = MYSQL_NUM; } else if ($type == 'row'){ $result_type = MYSQL_ROW; } else { $result_type = MYSQL_BOTH; } //I hate this :) $return = @mysql_fetch_array($handle, $result_type); return $return; } function &fetch_row($handle) { $return = @mysql_fetch_row($handle); return $return; } /* ** free ** Deletes the results and frees the memory */ function free($result){ return @mysql_free_result($result); } /* ** result ** */ function &result($handle, $row, $col) { $return = @mysql_result($handle, $row, $col); return $return; } function getUserWins($username) { $sql = "SELECT COUNT(*) FROM gameplayers LEFT JOIN games ON games.id=gameplayers.gameid LEFT JOIN dotaplayers ON dotaplayers.gameid=games.id AND dotaplayers.colour=gameplayers.colour LEFT JOIN dotagames ON games.id=dotagames.gameid WHERE LOWER(name) = LOWER('$username') AND ((winner=1 AND dotaplayers.newcolour>=1 AND dotaplayers.newcolour<=5) OR (winner=2 AND dotaplayers.newcolour>=7 AND dotaplayers.newcolour<=11)) AND gameplayers.`left`/games.duration >= 0.8 LIMIT 1"; $result = mysql_query($sql); $row = mysql_fetch_array($result, MYSQL_ASSOC); $inwins=$row["COUNT(*)"]; //mysql_free_result($result); return $inwins; } function getUserLosses($username) { $sql = "SELECT COUNT(*) FROM gameplayers LEFT JOIN games ON games.id=gameplayers.gameid LEFT JOIN dotaplayers ON dotaplayers.gameid=games.id AND dotaplayers.colour=gameplayers.colour LEFT JOIN dotagames ON games.id=dotagames.gameid WHERE name='$username' AND ((winner=2 AND dotaplayers.newcolour>=1 AND dotaplayers.newcolour<=5) OR (winner=1 AND dotaplayers.newcolour>=7 AND dotaplayers.newcolour<=11)) AND gameplayers.`left`/games.duration >= 0.8 LIMIT 1"; $result = mysql_query($sql); $row = mysql_fetch_array($result, MYSQL_ASSOC); $inlosses=$row["COUNT(*)"]; //mysql_free_result($result); return $inlosses; } // end of class } ?>
    Fatal error: Class 'database' not found in C:\Program Files\wamp\www\includes\db_connect.php on line 47
    
    Что не так я делаю? спасибо
  3. Synth (LM) Пантограф!

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

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    там надо дополнение включить, какео точно - не помню...
  5. Synth (LM) Пантограф!

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

    Сообщения:
    20
    Спасибы:
    0
    fake , спасибо. я совсем и забыл про это)

    на вампе все отлично пошло

    хорошо что вы есть :newcry: ))))
  7. America Ньюфаг

    Сообщения:
    20
    Спасибы:
    0
    Добрый день, вот снова пару вопросиков насобиралось)

    1. при выборе стиля страниц (дота, твиллинг и дефолт) когда выбираешь дефолт, то кнопочки "главная", "топ игроков" и т.д. смещаются влево. если ставить стиль - дота, то кнопки как и подобает красуются по центру экрана. можно ли как-то поправить что у дефолтной все было также с расположением?

    2. вышла дота 6.70, как добавить чтобы отображались новые герои и новые арты? чего куда вписать/добавить/подправить ?!

    Заранее благодарен
  8. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    стиль к разрабу дота ос.Итемы если краб то жди нового релиза, если норм то айсфрог написал коды для ленивых, осталось вынять иконку с варкрафта и всё это прикрутить по гайду HELLICOPTER`a
  9. Synth (LM) Пантограф!

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

    Код:
    INSERT INTO `heroes` VALUES ('E02I', 'E02I', 'Tuskarr', 'Hailing from the Borean Tundra, Ymir is one of the wisest Tuskarr warriors. Acquainted with years of warfare experience against raiding Ice Trolls and Nerubian Spiders that beset his village during his younger years, Ymir eagerly volunteered himself into the ranks of the Sentinel to help halt the notorious rise of the Lich King. A specialist in controlling the element of ice, Ymir''s prowess lies in surprising enemies with frosty magics. His arsenal not only consists of propelling Snowballs and hurling shards of solidifying ice, but also conjuring massive Snowstorms that greatly impede his enemies'' battle efficiency.', 'Strength   23 + 2.3 (Main)  Agility   23 + 2.1  Intelligence   18 + 1.7', 'Ice Shards, Snowball, Frozen Sigil, Walrus Punch');
    [IMG]

    Код:
    INSERT INTO `heroes` VALUES ('E02F', 'E02F', 'Icarus', 'Ancient scriptures spoke of seven sacred emanations of light, and of their convergence in great conflict. The collision of these rays upon the mortal realm created a pyre of the highest purity, giving birth to the mythical Phoenix. As a manifestation of divine flames, Icarus can discharge either flames of death and destruction, or of life and healing. The concentrated beam of energy that he can emit can incinerate whole armies from across the battlefield. Unafraid to utilize his own life-force in order to vanquish his enemies, Icarus can also harness the direct power of the sun to create a stellar explosion.', 'Strength   22 + 2.9 (Main)  Agility   12 + 1.3  Intelligence   18 + 1.8', 'Icarus Dive, Fire Spirits, Sun Ray, Supernova');
    [IMG]

    Код:
    INSERT INTO `items` VALUES ('h0CY', 'Medallion of Courage', 'Medallion of Courage', 0x3c623e52657175697265733c2f623e3a0d0a2d20436861696e6d61696c0d0a2d20536f6269204d61736b0d0a2d205265636970652028323030290d0a0d0a3c623e47697665733c2f623e3a0d0a2b20362041726d6f720d0a2b20353025204d616e6120526567656e65726174696f6e0d0a0d0a54617267657420616e20656e656d7920756e69742c20626f746820796f7520616e642074686520656e656d79206c6f736520362061726d6f7220666f722061206475726174696f6e2e0d0a0d0a3c623e436f6f6c646f776e3c2f623e3a20370d0a3c623e4475726174696f6e3c2f623e3a20370d0a3c623e436173742052616e67653c2f623e3a20383030, 'h0CY.jpg');
    [IMG]



    Код:
    INSERT INTO `items` VALUES ('h0D1', 'Smoke of Deceit', 'Smoke of Deceit', 0x436f6e73756d61626c650d0a436f73743a203130300d0a436861726765733a20310d0a537461636b61626c6520696e20696e76656e746f72790d0a0d0a53746f72652053746f636b204d61783a20330d0a53746f72652053746f636b205265706c656e6973682054696d653a203130206d696e757465730d0a0d0a506c6163657320612062756666206f6e20616c6c20616c6c69656420706c6179657220636f6e74726f6c6c656420756e69747320696e2039303020616f652e204d616b6573207468656d20696e76697369626c652c206772616e747320313025206d6f7665737065656420626f6e75732c20616e642070726576656e7473207468656d2066726f6d20617070656172696e67206f6e206d696e696d617020746f20656e656d7920706c61796572732e0d0a0d0a496620796f75206765742077697468696e2039303020616f65206f6620616e20656e656d79206865726f206f7220746f7765722c207468652062756666207765617273206f66662e20496620796f752061747461636b20637265657073206f7220526f7368616e2c2069742064697370656c6c732e0d0a0d0a42756666206c6173747320757020746f203430207365636f6e64730d0a393020436f6f6c646f776e, 'h0D1.jpg');
    
    [IMG]

    Код:
    INSERT INTO `items` VALUES ('h0DO', 'Ancient Janggo of Endurance', 'Ancient Janggo of Endurance', 0x52657175697265733a0d0a2d204272616365722028353235290d0a2d20526f6265206f6620746865204d6167692028343530290d0a2d205265636970652028373530290d0a0d0a50726f76696465733a0d0a2b203820416c6c2053746174730d0a2b20382044616d6167650d0a2b203525204d5320616e6420415320417572610d0a0d0a436f6d65732077697468203320636861726765732e205768656e20757365642c206772616e7473206e656172627920706c6179657220636f6e74726f6c6c656420756e69747320616e20657874726120313025204d5320616e6420415320627566662e204c6173747320666f722036207365636f6e64732e200d0a0d0a436f6f6c646f776e3a203330, 'h0DO.jpg');
    [IMG]
  10. F4RR4LL Ньюфаг

    Сообщения:
    30
    Спасибы:
    0
    HELLICOPTER, не могли бы вы написать мануал по настройке Dota Open stats на Wamp сервер, как я понял нужна еще дополнительная настройка вампа, функции какие включать надо итд. И еще 1н вопросик каким вебсервером пользуетесь вы? Просто из Денвера, AppServ, и wamp я слышал что самый надежный wamp это так или нет?
    зЫ как сделать чтобы создание юзербара(signature) было в списке так же как Игры, Топ игроков, баны итд?
    [IMG]
  11. Synth (LM) Пантограф!

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

    C:\AppServ\www\style\dota\header.html
    в <table class="header"><tr>

    <a class="menuButtons" href="signature.php">Создать юзер-бар</a>
  12. F4RR4LL Ньюфаг

    Сообщения:
    30
    Спасибы:
    0
    Спасибо) только вот Создать юзербар написано иероглифами....
    зЫ Скажи плиз если я например хочу добавить ссылку на свой форум чтобы она была рядом с Топ, игры, итд
    то мне нужно так сделать?
    <a class="menuButtons" href="http://САЙТ.ru">Мой форум</a>
    и все оно будет работать?
  13. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Да, только чтобы без иероглифов - сохрани в UTF-8
  14. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Ты скачай файл русского языка - будет красивше -_-
  15. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    будет время, дашь адрес твоей статы
    хчю глянуть на сейфлист :avtoradolf:
  16. Lacky Ньюфаг

    Сообщения:
    27
    Спасибы:
    0
    У меня стоял Wamp - и все работало.
    Сейчас поставл appserv. Подскажите как перекинуть таблицы и все данные с Wamp в app. я не сильно шарю в этом...
  17. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Раз:
    [IMG]
    Два:
    [IMG]
    Три:
    [IMG]
  18. Lacky Ньюфаг

    Сообщения:
    27
    Спасибы:
    0
    Спасибо большое. Все вроде получилось .... Вот на начальной странице у меня есть строчка . Типо скачать последнюю версию OpenStats 1.3.1 . Я ее просто скачиваю закидываю в папку с заменой файлов ( и меняю на мой конфиг) и все ? в файле russian.cfg если что добавляю перевод фраз (новых) . и по идее обновление законченно ?
  19. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Ну да, только не хватает SQL инъекции, там же новый герой и шмотки возможно еще что-то.
  20. Synth (LM) Пантограф!

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