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

Help Вывод сообщений в игре

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

  1. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    Добрый день. У меня к вам несколько вопросов, с которыми не могу разобраться. Прошу в теме флудить/троллить, т.к. я новичок в ботах.
    1. Как сделать так, чтобы в играх в определенное время выводились сообщения (например: на 10-й минуте, затем на 15-й и т.д., каждые 5 минут).
    2. Установил себе DOS. Когда сыграл несколько игр, бот пересчитал очки по формуле, а на сайте совсем другие очки. Как сделать, чтобы на сайте были те же очки, что и на боте.
    P/S. Бот GHost One, если это имеет значение.
  2. Synth (LM) Пантограф!

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

    По-умолчанию, (int)m_MsgTime должна быть равна 600, (int)m_MsgInc = 0, а (bool)m_MsgStop = false;
    Код располагается в game_base.cpp, унаследуемый от CBaseGame метод Update( void *fd, void *send_fd )
    Для простоты, вставь перед:
    // show game start text
    // read from gameloaded.txt if available

    if (GetTime()>=m_GameLoadedTime+m_MsgTime && !m_MsgStop && m_GameLoaded)
    {
     
    m_MsgTime += 600; // добавляем 10 минут
    m_MsgInc++; // инкриминируем наш «переключатель» сообщений
     
    switch (m_MsgInc)
    {
    case 0:
    SendAllChat( "Сообщение на 10й минуте — строка выше" );
    SendAllChat( "Сообщение — строка ниже" );
    break;
    case 1:
    SendAllChat( "Сообщение на 20й минуте" );
    break;
    case 2:
    SendAllChat( "Сообщение на 30й минуте" );
    m_MsgStop = true; // отключаем вывод сообщений в этой игре
    break;
    }
     
    }
    Max5, ZeratuL1986 и SysiphuS нравится это.
  3. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    А со вторым вопросом есть кто может помочь?
  4. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    Skype:
    Мой статус
    Сделать одинаковые формулы пересчета в досе и в боте :limon:
  5. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    В боте у меня такая формула:
    Код:
    (((wins-losses)/totgames)+(kills-deaths+assists/2)+(creepkills/100+creepdenies/10+neutralkills/50)+(raxkills/6)+(towerkills/11))+1000
    А вот как изменить формулу пересчёта на ДОС, я не понял. Укажите пожалуйста, где именно нужно править?
    Видел в конфигурации ДОС:
    Код:
    $ScoreStart = '1000';
    $ScoreWins = '5';
    $ScoreLosses = '3';
    $ScoreDisc = '10';
    Но, бот вроде даёт определенные очки в зависимости от того, как сыграл игрок.
  6. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    45
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    хз что у тебя за дос.
    1) сделать одинаковыми формулу.
    2) отключить в досе и выводить напрямую с нужной таблицы.
    3) отключить пересчет в боте и сделать что бы считал сайт.
    4) откючить персчет в боте и в сайте, а включить ело.

    выбирай :D
  7. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    DOS 4.0
    Думаю, лучше всего будет первый вариант. А как сделать одинаковую формулу то? Где в ДОС её менять?
  8. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    45
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
  9. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    Я ведь писал, там нет формулы, или даже где можно её вписать:
    Код:
    <?php 
    if (strstr($_SERVER['REQUEST_URI'], basename(__FILE__) ) ) {header('HTTP/1.1 404 Not Found'); die; }
    $OSAppID = 'openstats_1';
     
    $SN = session_name( $OSAppID );
    if (!isset($_SESSION)) { session_start(); }
     
    $server = 'localhost';
    $username = 'user';
    $password = '123456789';
    $database = 'ghost';
     
    $website = 'http://localhost';
    $HomeTitle = 'DotA Open Stats';
    $HomeDesc = '';
    $HomeKeywords = 'dota, games, heroes, players, best players, top list, top players, statistics';
     
    $default_language = 'english';
    $DateFormat = 'd.m.Y';
    $DefaultStyle = 'theme';
     
    $LogoText = 'DotA Open Stats';
     
    //FACEBOOK APP SETUP
    //Enable Login via Facebook
    $FBLogin = '1';
    //FB Application ID
    $FacebookAppID = 'FB Application ID';
    //FB Application Secret
    $FacebookAppSecret = 'FB Application Secret';
     
    //Forum and WP integration
    $PHPbb3Integration = '0';
    $SMFIntegration = '0';
    $WPIntegration = '0';
     
    //Path to phpbb3 forum
    $phpbb_forum = 'forum/';
    $phpbb_forum_url = 'http://localhost/openstats/forum/';
    //Path to SMF forum
    $smf_forum = 'smf/';
    $smf_forum_url = 'http://localhost/openstats/smf/';
     
    //Path to wordpress
    $wp_path = 'wordpress/';
    $wp_url = 'http://localhost/openstats/wordpress/';
     
    //$HeroVote = '1'; //not working - removed
    $HeroVote = ""; //disabled
    $HeroVoteShow = '20';
     
    $HeroFileExt = 'gif';
     
    $ReplayLocation = 'replays';
     
    $GamesPerPage = '30';
    $TopPlayersPerPage = '30';
    //Heroes AND Items per page
    $HeroesPerPage = '30';
    $ItemsPerPage = '30';
     
    $NewsPerPage = '5';
    $CommentsPerPage = '10';
    //Limit words on news on homepage // 0 - to display full text
    $NewsWordLimit = '40';
     
    // Sort user comments: 1 - ID , 2 - newer , 3 - older
    $SortComments = '3';
     
    //Auto link in comments: 1 - allow, 2 - show plain text, 3 - remove all links
    $AutoLinkComments = '1';
    //If links removed, replace all LINKS with following text:
    $AutoLinkTextReplace = '';
    //Display full or short urls: 1 - full, 2 - short
    $AutoLinkFull = '0';
     
    //Show hero stats on user page (favorite hero, hero with most kills, deaths, assists...)
    $ShowUserHeroStats = '1';
     
    $UserRegistration = '0';
    $AllowComments = '1';
     
    //Allow users to upload avatar image
    $AllowUploadAvatar = '1';
    //Max image size in pixels (default: 320px, quality: 85)
    $MaxImageSize = '320';
    $ImageQuality = '85';
     
    $RecentGames = '1';
    $TotalRecentGames = '5';
     
    [B]$ScoreStart = '1000';[/B]
    [B]$ScoreWins = '5';[/B]
    [B]$ScoreLosses = '3';[/B]
    [B]$ScoreDisc = '10';[/B]
     
    //Enable/Disable Ban reports and appeals
    $BanReports = '1';
    $BanAppeals = '1';
     
    //Add report user link on user page
    $ReportUserLink = '1';
     
    //After how much time a user can write next report
    $BanReportTime = '180';
     
    //How many games to update at once
    $updateGames = '50';
    //CronJob Update Games
    $updateGamesCron = '10';
     
    //When user register: 1 - user must confirm registration via email, 0 - instant activation
    $UserActivation = '0';
     
    //Get heroes data from playdota website
    $PlayDotaHeroes = '0';
     
    $MaxPaginationLinks = '2';
     
    //Show fastest and longest game won
    $ShowLongFastGameWon = '0';
     
    $TopPage = '1';
    $HeroesPage = '0';
    $ItemsPage = '0';
    $BansPage = '1';
    $WarnPage = '1';
    $AdminsPage = '1';
    $SafelistPage = '0';
    $MemberListPage = '0';
    $GuidesPage = '0';
    $AboutUs = '0';
     
    $ShowMembersCountry = '1';
     
    //Allow comparing players
    $ComparePlayers = '1';
    $MaxPlayersToCompare = '10';
     
    //Show or hide (1/0) empty slots (empty username, or left time = 0 ... )
    $HideEmptySlots = '1';
     
    //Minimum game duration > 5*60 = 5 min (or 300 sec)
    //Only games with defined time (longer then $MinDuration ) will be counted in the statistics
     
    $MinDuration = 5*60;
     
    //Time a player leaves before the end of the game, which loses points ($ScoreDisc)
    //Eg. if the user leaves the game 5 minutes before game end he will receive negative points -10
    // $LeftTimePenalty = '300; in seconds (300 = 5 min), default
    $LeftTimePenalty = '300';
     
    //Enable/disable info about time to create page and total queries on every page
    $pageGen = '1';
    //Enable error reportings
    $_debug = '0';
     
    $TimeZone = 'Asia';
     
    //Gamelist patch support
    $GameListPatch = '0';
     
    $OS_INSTALLED = '1';
    ?>
    Если вы про эту формулу:
    $ScoreStart = '1000';
    $ScoreWins = '5';
    $ScoreLosses = '3';
    $ScoreDisc = '10';
    То, именно из за неё разные очки.
    Помогите пожалуйста исправить всё это.
  10. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    45
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    хз. значит не повезло тебе)
    меняй запрос в топе и убирай пересчет через сайт, что бы бот занимался этим делом.
  11. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    У меня вроде что-то получилось.
    1. Поставил - bot_norank = 1;
    2. Отключил - bot_updatedotaeloaftergame = 0 и bot_updatedotascoreaftergame = 0;
    3. На сайте включил Auto Update Games;

    Итог: На сайте и боте одинаковые очки, но, очки даются по формуле сайта:
    $ScoreStart = '1000';
    $ScoreWins = '5';
    $ScoreLosses = '3';
    $ScoreDisc = '10';

    Теперь как сделать, чтобы с формулы бота считали очки, неужели нельзя?
  12. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    Неужели все, кто хорошо разбирается в ботах, не могут нормально ответить и помочь?
    И да, LongMan, твой код для вывода сообщений не работает.
    Вставил в gamebase.cpp
    Код:
    if (GetTime()>=m_GameLoadedTime+m_MsgTime && !m_MsgStop && m_GameLoaded)
    {
     
    m_MsgTime += 600; // добавляем 10 минут
    m_MsgInc++; // инкриминируем наш «переключатель» сообщений
     
    switch (m_MsgInc)
    {
    case 0:
    SendAllChat( "Сообщение на 10й минуте — строка выше" );
    SendAllChat( "Сообщение — строка ниже" );
    break;
    case 1:
    SendAllChat( "Сообщение на 20й минуте" );
    break;
    case 2:
    SendAllChat( "Сообщение на 30й минуте" );
    m_MsgStop = true; // отключаем вывод сообщений в этой игре
    break;
    }
     
    }
    Перед
    Код:
    // show game start text
    // read from gameloaded.txt if available
    Результата нет, сообщения не выдает
  13. Synth (LM) Пантограф!

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

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    game_base.h
    virtual uint32_t GetLastInfo() { return m_LastInfo; }
    uint32_t m_LastInfo;
    game_base.cpp
    m_LastInfo = GetTime()+12;
    //info.txt
    if (GetTime() >= m_LastInfo && m_LastInfo != 0 && m_GameLoaded && GetTime() >= m_GameLoadedTime + 600) { uint32_t count = 0; string filename = "info.txt"; ifstream in; string Line; in.open( filename.c_str() ); if( !in.fail() ){ while( !in.eof( ) ) { getline( in, Line ); if(count < 3) SendAllChat(Line); count++; } in.close(); } m_LastInfo = GetTime() + 600; }
    как-то так
    AJlex нравится это.
  15. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    люди помогите а, вам так трудно ответить и указать что делать? как заставить сайт брать очки с таблицы scores, или заставить бота брать очки с таблицы stats?
  16. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    Skype:
    Мой статус
    1) проверить, указал ли правильный тип карты для DotA
    2) обновить очки (вручную или в конфиге автомататически выставить)
  17. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    можно подробнее с первым пунктом. если ты про
    map_type = dota
    map_matchmakingcategory = dota_elo
    у мня так и стоит
    и как обновлять
  18. Organated Гуру

    Сообщения:
    164
    Спасибы:
    14
    Сборка бота GHost:
    GhostOne 1.7 mod by Org-code
    Дата начала использования бота:
    1.89.89
    Я тоже задавлся подобным вопросом. Дело в том, что он юзает GhostOne и там немного иные таблицы килов/смертей/ассистов и т.д. Я пытался сделать так чтобы сайт пересчитывал очки, в итоге пришлось внести иземенения в дос. Да и с отображением статы в боте были траблы. Как то так.
  19. SysiphuS Парнишка с небывалым умом

    Сообщения:
    40
    Спасибы:
    1
    Сборка бота GHost:
    GHost One 1.7.266
    Дата начала использования бота:
    16.02.2012
    Сделал, чтобы считал сайт - всё получилось, только вот ещё одна проблемка.
    Скажем, к примеру, что у игрока PLAYER - 2000 PTS и у игрока PLAYER2 - 2000 PTS.
    И вот, на сайте PLAYER занимает 5 место, а PLAYER2 занимает 6 место.
    А на боте, при команде !sd player - выдает что он на 5 месте (правильно) и у player-2 выводит ,что он на пятом месте. Помогите исправить траблу, чтобы показывал реальное его место в топе, как и на сайте.
  20. Begzod Гуру

    Сообщения:
    141
    Спасибы:
    4
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.06.2010
    Не знаю, как сделать в компиляции.. ну есть вариант с формулой для этого вы делаете более сложный формулу так чтобы не было в виде: герои убийств 100+ смертей -100 и т.п, а вот так: убийств 120+ смертей 200- и т.п если возможно и на крипы, выши поставить отнимани очков и добавлении, незнаю как у дос но думою после такой формуле будет очень редко встречатся та проблема о которым вы писали