Скрипт мониторинга игрового сервера

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

Скрипт мониторинга игрового сервера

Сообщение andreichsb » 16 ноя 2008 23:41

Ребят, подскажите пожалуйста, был вот такой скрипт
Код: Выделить всё
if { ![info exists egglib(ver)] || [expr {$egglib(ver) < 1.2}] } {
putlog "***********************************************"
putlog " egglib_pub NOT FOUND OR VERSION IS TOO OLD!"
putlog " Download last version of egglib_pub here:"
putlog "http://eggdrop.org.ru/scripts/egglib_pub.zip"
putlog "***********************************************"
die
}

# bind на команду !online для всех юзеров.
bind pub - !код pub_online

proc pub_online {nick uhost hand chan args} {
# указываем URL для сайта, с которого будет брать информацию
set query "http://10.37.2.51/"

# Инициализируем HTTP, нам вернут id, с котором мы будем работать далее
# а так-же зарегестрируются 2 функции pub_online_on_data - это вызовется
# если данные прийдут. и pub_online_on_error - вызовется если произойдет
# какой-то облом.
set id [::egglib::http_init "pub_online_"]

# собственно забираем страничку.
# [list $nick $uhost $chan] - это дополнительные аргументы которые нужно
# передать в pub_online_on_error и pub_online_on_data
::egglib::http_get $id $query [list $nick $uhost $chan]
}

# callback функция для ошибок.
proc pub_online_on_error {id nick uhost chan} {
# скажем юзеру об ошибке
::egglib::out $nick $chan "Я не смог соединиться с сервером... -.-"
}

# callback функция если всё хорошо...
proc pub_online_on_data {id data nick uhost chan} {
putlog "pub_online_on_data"

# разбиваем html в $data на строки... и обрабатываем каждую строку.
foreach line [split $data \n] {
# ищем нужную нам строку, заодно и выдираем оттуда заветное число.
# "\ " мы делаем чтоб regexp был правильный
# "\d+" означает 1 или более сиволов от 0 до 9.
# параметры для regexp:
# $line - отсюда берём
# g - сюда положится всякий злам
# num - сюда положится то, что в скобках (\d+) - те, наше число.
if { [regexp -nocase -- {<b>Игроки:</b> (\d+)} $line g num]} {
# если число нашлось... печатаем результат на канал
::egglib::out $nick $chan "Игроков на безмодовом сервере: $num"
# ... и выходим из функции...
return
}
}
# если мы попали сюда... значит мы не смогли найти желаемую строку...
# напишем что не смогли, чтоб бот не был молчалив.
::egglib::out $nick $chan "Я не смог узнать текущее кол-во юзеров..."
}


потом со временем поднял второй игровой сервер, требуется мониторинг и на него, а как сделать не понимаю.
сделал так
Код: Выделить всё
if { ![info exists egglib(ver)] || [expr {$egglib(ver) < 1.2}] } {
putlog "***********************************************"
putlog " egglib_pub NOT FOUND OR VERSION IS TOO OLD!"
putlog " Download last version of egglib_pub here:"
putlog "http://eggdrop.org.ru/scripts/egglib_pub.zip"
putlog "***********************************************"
die
}

# bind на команду !online для всех юзеров.
bind pub - !код pub_online

proc pub_online {nick uhost hand chan args} {
# указываем URL для сайта, с которого будет брать информацию
set query "http://10.10.10.38/"
set query2 "http://10.10.10.38/statcod5/"
# Инициализируем HTTP, нам вернут id, с котором мы будем работать далее
# а так-же зарегестрируются 2 функции pub_online_on_data - это вызовется
# если данные прийдут. и pub_online_on_error - вызовется если произойдет
# какой-то облом.
set id [::egglib::http_init "pub_online_"]
set id2 [::egglib::http_init "pub_online2_"]
# собственно забираем страничку.
# [list $nick $uhost $chan] - это дополнительные аргументы которые нужно
# передать в pub_online_on_error и pub_online_on_data
::egglib::http_get $id $query [list $nick $uhost $chan]
}
::egglib::http_get $id2 $query2 [list $nick $uhost $chan]
}

# callback функция для ошибок.
proc pub_online_on_error {id nick uhost chan} {
proc pub_online2_on_error {id nick uhost chan} {
# скажем юзеру об ошибке
::egglib::out $nick $chan "Я не смог соединиться с сервером... -.-"
}
::egglib::out $nick $chan "Я не смог соединиться с сервером... -.-"
}
# callback функция если всё хорошо...
proc pub_online_on_data {id data nick uhost chan} {
proc pub_online2_on_data1 {id data nick uhost chan} {
putlog "pub_online_on_data"
putlog "pub_online2_on_data1"
# разбиваем html в $data на строки... и обрабатываем каждую строку.
foreach line [split $data \n] {
foreach line [split $data1 \n] {
# ищем нужную нам строку, заодно и выдираем оттуда заветное число.
# "\ " мы делаем чтоб regexp был правильный
# "\d+" означает 1 или более сиволов от 0 до 9.
# параметры для regexp:
# $line - отсюда берём
# g - сюда положится всякий злам
# num - сюда положится то, что в скобках (\d+) - те, наше число.
if { [regexp -nocase -- {<b>Игроки:</b> (\d+)} $line g num]} {
if { [regexp -nocase -- {<b>Игроки:</b> (\d+)} $line g num1]} {
# если число нашлось... печатаем результат на канал
::egglib::out $nick $chan "Игроков на сервере CoD4 - $num Статистика тут http://10.10.10.38/stats/ Подробный мониторинг тут http://10.10.10.38"
::egglib::out $nick $chan "Игроков на сервере CoD5 - $num1
# ... и выходим из функции...

return
}
}
# если мы попали сюда... значит мы не смогли найти желаемую строку...
# напишем что не смогли, чтоб бот не был молчалив.
::egglib::out $nick $chan "Я не смог узнать текущее кол-во игроков..."
}

не работает, где затык подскажите пожалуйста,я в ткл скриптинге не шарю вообще

From tvrsh: не забываем использовать теги [Code].
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 16 ноя 2008 23:57

Ну то что ты написал абсолютно не верно. Если первый скрипт работал и на новом сервере такая же хтмл страничка то достаточно вписать адрес нового сервера в
Код: Выделить всё
set query "http://10.10.10.38/"

Или ты хочешь выводить статистику обоих серверов сразу?
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 00:24

сори за неправильно написанное сообщение, исправлюсь (первый раз тут)
да, я хочу что бы бот по запросу !код выводил статистику обоих сервов, типа так..
bot: nick - на сервере код4 игроков 12
на сервере код5 игроков 16
и далее инфа...
да и еще, заказал бы даже за оплату скрипт выводящий по запросу !топ в канал топ10 игроков на сервере, статистика такая же как тут http://russiaclan.ru/ultrastats/index.php
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 00:38

Попробуй так:
Код: Выделить всё
    if { ![info exists egglib(ver)] || [expr {$egglib(ver) < 1.2}] } {
    putlog "***********************************************"
    putlog " egglib_pub NOT FOUND OR VERSION IS TOO OLD!"
    putlog " Download last version of egglib_pub here:"
    putlog "http://eggdrop.org.ru/scripts/egglib_pub.zip"
    putlog "***********************************************"
    die
    }

    bind pub - !код pub_online

    proc pub_online {nick uhost hand chan args} {
        set query "http://10.37.2.51/"
        set query2 "http://10.10.10.38/statcod5/"

        set id [::egglib::http_init "pub_online_"]
        set id2 [::egglib::http_init "pub_online2_"]

        ::egglib::http_get $id $query [list $nick $uhost $chan]
        ::egglib::http_get $id2 $query2 [list $nick $uhost $chan]

    }

    proc pub_online_on_error {id nick uhost chan} {
        ::egglib::out $nick $chan "Я не смог соединиться с сервером CoD4..."
    }

    proc pub_online2_on_error {id2 nick uhost chan} {
        ::egglib::out $nick $chan "Я не смог соединиться с сервером CoD5..."
    }

    proc pub_online_on_data {id data nick uhost chan} {
        putlog "pub_online_on_data"
            foreach line [split $data n] {
                if { [regexp -nocase -- {<b>Игроки:</b> (d+)} $line g num]} {
                    ::egglib::out $nick $chan "Игроков на безмодовом сервере CoD4: $num"
                    return
                }
            }
        ::egglib::out $nick $chan "Я не смог узнать текущее кол-во игроков на сервере CoD4..."
    }

    proc pub_online2_on_data {id2 data nick uhost chan} {
        putlog "pub_online2_on_data"
            foreach line [split $data n] {
                if { [regexp -nocase -- {<b>Игроки:</b> (d+)} $line g num]} {
                    ::egglib::out $nick $chan "Игроков на безмодовом сервере CoD5: $num"
                    return
                }
            }
        ::egglib::out $nick $chan "Я не смог узнать текущее кол-во игроков на сервере CoD5..."
    }




Не тестировал. Если будут ошибки в патилайне показывай.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 00:52

не правильно был вставлен первый ип, а так все работает, большое спасибо.
а как насчет второго скрипта?
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 00:58

Последний скрипт который я написал теоретически должен отслеживать оба сервера. Он работает ли нет? На твои серверы можно попасть снаружи или они локальные только?
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 01:00

они только локальные, по серверу код4 выдает, а по код5 говорит "не смог узнать количество" хотя на сервере есть игроки.
а про второй скрипт я имел ввиду тот который топ будет выдавать
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 01:05

Ну если я не вижу твою страничку с топом как я могу ее обработать, сохрани ее и приложи к сообщению.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 01:16

а с этим скриптом что делать ? он не отображает :( по серверу код5, хотя адрес точен я проверял, хтмл мониторинг там пашет
а по топу, так там вроде нужна хтмлка ведь - так вот тут http://russiaclan.ru/ultrastats/index.php точно (1 в 1) такая же статистика (просто моя в локалке, ее не посмотриш) хотя не знаю, попробуй зайти через сайт http://callofduty5.spb.ru там в навигации ссылка "статистика игроков"
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 20:08

Вот держи, не надо ни за что платить. Да и в пм тоже писать не надо. Раньше чем я напишу скрипт я его всеравно не выложу.
Заменишь в строке
Код: Выделить всё
set cod(page) http://russiaclan.ru/ultrastats/index.php
на свой урл.
Код: Выделить всё
namespace eval cod {}
setudef flag nopubcod
set cod(pref) "!"
set cod(commands) "cod"
set cod(time) 30
set cod(page) http://russiaclan.ru/ultrastats/index.php
set cod(version) "1.0"
set cod(author) "tvrsh @ IrcNet.ru"
package require http
foreach bind [split $cod(commands) " "] {
   bind pub -|- $cod(pref)$bind ::cod::pub
   bind msg -|- $cod(pref)$bind ::cod::msg
}

proc ::cod::msg {nick uhost hand arg} {
    ::cod::cod $nick $uhost $hand $nick $arg
}

proc ::cod::pub {nick uhost hand chan arg} {
   if {[channel get $chan nopubcod]} return
   ::cod::cod $nick $uhost $hand $chan $arg
}

proc ::cod::cod {nick uhost hand chan arg} {
   global cod lastbind
   if {[info exists cod(host,$uhost)]} {
      if {$chan == $nick} {
         putquick "PRIVMSG $nick :\00303Пожалуйста подождите. Запрос не чаще одного раза в \00304$cod(time) \00303секунд."
         return
      } else {
         putquick "NOTICE $nick :\00303Пожалуйста подождите. Запрос не чаще одного раза в \00304$cod(time) \00303секунд."
         return
      }
   }
   set agent "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"
   set cod(host,$uhost) 1
   set cod(timer,$uhost) [utimer $cod(time) [list ::cod::reset $uhost ] ]
   set cod_tok [::http::config -useragent $agent]
   set cod_tok [::http::geturl $cod(page) -timeout 30000] 
   set html [::http::data $cod_tok]
   ::http::cleanup $cod_tok

       regsub -all -- {\n} $html "" html
           foreach line [split $html \n] {
               if {[regexp -nocase -- {20\ Top\ Игроков(.*?)&nbsp;} $line garb data]} {
               set html $data
               regsub -all -- {<td.*?>} $html "" html
               regsub -all -- {<\/td>} $html "" html
               regsub -all -- {<table.*?>} $html "" html
               regsub -all -- {<\/table>} $html "" html
               regsub -all -- {<img\ align=\"left\"\ src=\".\/images\/bars\/bar-small\/green.*?\">} $html "" html             
               regsub -all -- {<\/img>} $html "" html
               regsub -all -- {<A.*?>} $html "" html
               regsub -all -- {<\/A>} $html "" html
               regsub -all -- {<B>} $html "" html
               regsub -all -- {<\/B>} $html "" html
               regsub -all -- {\s+} $html " " html
               regsub -all -- { <\/tr> <tr> } $html "|" html
               regsub -all -- { <tr> <\/tr>} $html "" html
               regsub -all -- { <tr> } $html "" html
               regsub -all -- { <\/tr> } $html "" html
               regsub -all -- {<img align=\"left\" src=\"./images/bars/bar-small/red.*?\" width=\".*?%\" height=\".*?\" title=\"Ratio} $html "" html
               regsub -all -- {\">} $html " " html
                  foreach a [split $html |] {
                       putserv "PRIVMSG $chan :\00302[lindex [split $a] 0] \00303[lindex [split $a] 1] \00304[lindex [split $a] 2] \00305[lindex [split $a] 3] \00306[lindex [split $a] 4] \00307[lrange [split $a] 5 end]"
                   }
               return
      }   
   }
}

proc ::cod::reset { uhost } {
    global cod
    catch {killutimer $cod(timer,$uhost)}
     catch {unset cod(timer,$uhost)}
      catch {unset cod(host,$uhost)}
}

putlog "cod.tcl v$cod(version) by $cod(author) loaded."
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 21:35

ааааа, у меня слов нет - огромное огромное спасибо, все работает, только я спрашивал то про первый скрипт который вчера писали :) он по серверу код5 не может узнать кол-во игроков :(
а как во втором скрипте сделать поменьше кол-во выводимых игроков в топе (например 5 или 10) ???
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 22:15

Для первого скрипта я не вижу страничку откуда брать инфу.
Вот второй. Пишешь !cod количество игроков.
Код: Выделить всё
namespace eval cod {}
setudef flag nopubcod
set cod(pref) "!"
set cod(commands) "cod"
set cod(time) 30
set cod(page) http://russiaclan.ru/ultrastats/index.php
set cod(version) "1.0"
set cod(author) "tvrsh @ IrcNet.ru"
package require http
foreach bind [split $cod(commands) " "] {
   bind pub -|- $cod(pref)$bind ::cod::pub
   bind msg -|- $cod(pref)$bind ::cod::msg
}

proc ::cod::msg {nick uhost hand arg} {
    ::cod::cod $nick $uhost $hand $nick $arg
}

proc ::cod::pub {nick uhost hand chan arg} {
   if {[channel get $chan nopubcod]} return
   ::cod::cod $nick $uhost $hand $chan $arg
}

proc ::cod::cod {nick uhost hand chan arg} {
   global cod lastbind
       set arg [lindex [split $arg] 0]
   if {[info exists cod(host,$uhost)]} {
      if {$chan == $nick} {
         putquick "PRIVMSG $nick :\00303Пожалуйста подождите. Запрос не чаще одного раза в \00304$cod(time) \00303секунд."
         return
      } else {
         putquick "NOTICE $nick :\00303Пожалуйста подождите. Запрос не чаще одного раза в \00304$cod(time) \00303секунд."
         return
      }
   }
   
       if {![isnumber $arg]} {
           set arg 6
       } else {
           if {$arg < 1 || $arg > 20} {set arg 6} else {set arg [incr arg]}
       }
       
       set agent "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"
   set cod(host,$uhost) 1
   set cod(timer,$uhost) [utimer $cod(time) [list ::cod::reset $uhost ] ]
   set cod_tok [::http::config -useragent $agent]
   set cod_tok [::http::geturl $cod(page) -timeout 30000] 
   set html [::http::data $cod_tok]
   ::http::cleanup $cod_tok

       set rgx "Сыграно\\\ времени(.*?)<B>$arg<\\\/B><\\\/td>"
       regsub -all -- {\n} $html "" html
           foreach line [split $html \n] {
               if {[regexp -nocase -- $rgx $line garb data]} {
               set html $data
               regsub -all -- {<td.*?>} $html "" html
               regsub -all -- {<\/td>} $html "" html
               regsub -all -- {<table.*?>} $html "" html
               regsub -all -- {<\/table>} $html "" html
               regsub -all -- {<img\ align=\"left\"\ src=\".\/images\/bars\/bar-small\/green.*?\">} $html "" html             
               regsub -all -- {<\/img>} $html "" html
               regsub -all -- {<A.*?>} $html "" html
               regsub -all -- {<\/A>} $html "" html
               regsub -all -- {<B>} $html "" html
               regsub -all -- {<\/B>} $html "" html
               regsub -all -- {\s+} $html " " html
               regsub -all -- { <\/tr> <tr> } $html "|" html
               regsub -all -- { <tr> <\/tr>} $html "" html
               regsub -all -- { <tr> } $html "" html
               regsub -all -- { <\/tr> } $html "" html
               regsub -all -- {<img align=\"left\" src=\"./images/bars/bar-small/red.*?\" width=\".*?%\" height=\".*?\" title=\"Ratio} $html "" html
               regsub -all -- {\">} $html " " html
                  putserv "PRIVMSG $chan :\00302№ \00303Имя \00304Убито \00305Смерти \00306Ратио \00307Сыграно времени"
                  foreach a [split [string trimright [string trimleft $html |] |] |] {
                      putserv "PRIVMSG $chan :\00302[lindex [split $a] 0] \00303[lindex [split $a] 1] \00304[lindex [split $a] 2] \00305[lindex [split $a] 3] \00306[lindex [split $a] 4] \00307[lrange [split $a] 5 end]"
                   }
               return
      }   
   }
}

proc ::cod::reset { uhost } {
    global cod
    catch {killutimer $cod(timer,$uhost)}
     catch {unset cod(timer,$uhost)}
      catch {unset cod(host,$uhost)}
}

putlog "cod.tcl v$cod(version) by $cod(author) loaded."
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 22:22

<html>

...

</html>

From tvrsh: больше не разматывай тут такие портянки а прикладывай файлы к сообщениям. И второй раз про теги [code] и [quote] напоминаю.
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 22:36

Вот ты копируешь кучу нечитабельного кода. Не догадываешься что проще сохранить хтмл страничку и приложить к сообщению. И как я должен догадаться что с нее забирать надо?
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 22:54

сори еще раз за "портянку"
эмс, ну там в первом коде ведь есть данные которые берутся с нее, тот скрипт берет данные с точно такого же мониторинга, я бы хтмл страничку приложил но ваш серв отклоняет такое вложение как возможную атаку, прикладываю в архиве
У вас нет необходимых прав для просмотра вложений в этом сообщении.
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 17 ноя 2008 23:13

У тебя есть два полностью рабочих скрипта, что тебе еще нужно? Объединить их в один? Я не вижу в этом необходимости, смени команды на cod4 и cod5 в них и пользуйся. Тем более писать скрипты на для локальной статистики не очень удобно, да и кому это кроме тебя пригодится.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 17 ноя 2008 23:48

не , ты меня не понял.
Тот скрипт который ты выложил сегодня для вывода топа игроков полностью рабочий - спс еще раз за него.
А тот что вчера написал (на моем примере) он по 4ке выводит а по 5ке не хочет - "я не смог узнать количество игроков"
просто у меня есть каналы тех поддержки (их в основном использует локальный контингент)
а есть и сайт и хтмл мониторинги и статистика (они уже для тех у кого либо мирки нет либо инет)
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 18 ноя 2008 00:03

На, держи, не тестировал.
Код: Выделить всё
if { ![info exists egglib(ver)] || [expr {$egglib(ver) < 1.2}] } {
    putlog "***********************************************"
    putlog " egglib_pub NOT FOUND OR VERSION IS TOO OLD!"
    putlog " Download last version of egglib_pub here:"
    putlog "http://eggdrop.org.ru/scripts/egglib_pub.zip"
    putlog "***********************************************"
    die
    }

    bind pub - !код pub_online

    proc pub_online {nick uhost hand chan args} {
        set query "http://10.37.2.51/"
        set query2 "http://10.10.10.38/statcod5/"

        set id [::egglib::http_init "pub_online_"]
        set id2 [::egglib::http_init "pub_online2_"]

        ::egglib::http_get $id $query [list $nick $uhost $chan]
        ::egglib::http_get $id2 $query2 [list $nick $uhost $chan]

    }

    proc pub_online_on_error {id nick uhost chan} {
        ::egglib::out $nick $chan "Я не смог соединиться с сервером CoD4..."
    }

    proc pub_online2_on_error {id2 nick uhost chan} {
        ::egglib::out $nick $chan "Я не смог соединиться с сервером CoD5..."
    }

    proc pub_online_on_data {id data nick uhost chan} {
        putlog "pub_online_on_data"
            foreach line [split $data n] {
                if { [regexp -nocase -- {<b>Игроки:</b> (d+)} $line g num]} {
                    ::egglib::out $nick $chan "Игроков на безмодовом сервере CoD4: $num"
                    return
                }
            }
        ::egglib::out $nick $chan "Я не смог узнать текущее кол-во игроков на сервере CoD4..."
    }

    proc pub_online2_on_data {id2 data nick uhost chan} {
        putlog "pub_online2_on_data"
            foreach line [split $data n] {
                if { [regexp -nocase -- {<b>Players:</b> (.*?)</td>} $line g num]} {
                    ::egglib::out $nick $chan "Игроков на WW Server SB: $num"
                    return
                }
            if { [regexp -nocase -- {<b>Map:</b> (.*?)</td>} $line g num]} {
                    ::egglib::out $nick $chan "Карта: $num"
                    return
                }
            if { [regexp -nocase -- {<b>Game Type:</b> (.*?)</td>} $line g num]} {
                    ::egglib::out $nick $chan "Тип игры: $num"
                    return
                }
            }
        ::egglib::out $nick $chan "Я не смог узнать текущее кол-во игроков на WW Server SB..."
    }
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт мониторинга игрового сервера

Сообщение andreichsb » 18 ноя 2008 10:02

не работает :(, говорит две строчки
"не смог узнать кол-во игроков на сервере код4"
"режим - саб"
и все
andreichsb
 
Сообщения: 14
Зарегистрирован: 16 ноя 2008 23:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скрипт мониторинга игрового сервера

Сообщение tvrsh » 19 ноя 2008 00:57

Найди мне в инете такую же статистику, тогда посмотрю. А пока я затрудняюсь что либо сказать по этому поводу.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

След.

Вернуться в TCL скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

cron