Регистрация | Вход
[ Главная · Новые сообщения ]
Форум » Основной раздел » Мастерская » Вопросы по скриптам
Вопросы по скриптам
dthopa 09.08.11 09:54 #76
Пытаюсь переделать скрипт пуля под русскую рулетку... какая команда делает/запускает рандом? я хочу сделать рандом от 0 до 6, если выпадает 3 то проиграл.

(в С+ Random(n,a) n и а - диапозон, в tcl - не знаю.)
Vladislav 09.08.11 09:59 #77
[rand 7] Число должно быть на 1 больше нужного. И русская рулетка есть !рхелп
dthopa 09.08.11 11:02 #78
о, спасибо, про рулетку я слоу... я просто почти все игры снес из бота...

вдобавок та рулетка что у вас... слишком навороченная, мне удобнее переделать пулю под рулетку. что-бы проигравший попадал в бан =)

Quote
set megahal(flood) 3:120
Думаю было-бы разумно добавить globalFlood, т.к. защита от флуда распространяется на одного пользователя. А когда 10 человек задают вопросы, то канал просто переполнен тролингом бота.

Нужен наверное скрипт, который следит за общим количество обращений к боту на канале. Если, например, более 10 обращений к боту за 2-4 минуты, то бот игнорирует всех N секунд.
Vladislav 10.08.11 11:15 #79
В рулетке добавил в условие:

Code
if {$a == 1} {


кикалку, считаю что банить слишком жестоко)

Code
if {[botisop $chan] || [botishalfop $chan]} {putkick $chan $nick "$::gcolor(4)Слит!"}


А про флуд может чем поможет процедура определяется количеством команд в промежуток времени:

Code
      
bind pub - !example PROCNAME
proc PROCNAME {nick host hand chan text} {
# Указываем сколько команд в какой промежуток времени можно использовать.
set flood 3:180

# Создаем счетчик.
if ![info exists ::mylastPROCNAME] {
set ::mylastPROCNAME 0
}

# Обрабатываем настройку флуда.
set max [lindex [split $flood ":"] 0]
set time [lindex [split $flood ":"] 1]

# Выбираем способ отправки.
if {$::mylastPROCNAME >= $max} {
set type NOTICE
set dest $nick
} else {
set type PRIVMSG
set dest $chan
}

# Увеличиваем счетчик и после окончания времени уменьшаем его.
incr ::mylastPROCNAME
utimer $time [list incr ::mylastPROCNAME -1]

# Отправляем сообщение.
puthelp "$type $dest :$text"
}
dthopa 10.08.11 16:41 #80
Я обычную пулю переделал под !релтка, вашу рулетку убрал. сделал бан 20 минут и переделал описания. Вообщем даже в такую рулетку некоторые периодически играют, и даже умудряются по 10 раз выйграть.

я в tlc скрипте полный... ну понял... немного не понятно куда это и на что менять, защиту от флуда. На каналах с онлайном под 30 это просто ужс.. каждый пытается обратится к боту.. и это превращается в хаос.
Vladislav 10.08.11 21:00 #81
Я ещё раз повторю, что народ наиграется и потом сам будешь просить чтоб использовали бота) видимо у тебя народ дикий, не видел ботов. У меня он стоял на канале с онлайном в 150 и ничего, кончено на таких каналах нужно все сервисы переводить в приват или на отдельный канал, так как главное это общение, а бот этому только мешает. 30 человек это пустой, канал должно быть норм.
dthopa 11.08.11 08:49 #82
У нас народ очень дикий (выходцы FO), из за этого один из опов канала постоянно бота банит, когда тот начинает флудить. Мне бот нужен что-бы когда в будни онлайн ИРЦ падает, или игровой сервак лежит, они хоть как-то развлекались ну и контролирует пользователей от матов, ну и давал справку.

По этому нужна защита от общего количества обращений к боту.

Для некоторых юзеров было-бы не плохо раскоментировать на русском "allprotection.tlc" Я этим скриптом не пользуюсь, но другой оп, которому я дал матера для бота спросил "что делат это/то/се".

Решил разнообразить описания в скрипте рулетки и она перестала работать, в чем ошибка?
Code
namespace eval bull {

variable bantime "20"
variable commands {пуля рулетка}
variable bulllist {"револьвер" "магнум" "самопал" "самодельный револьвер"}
variable bulllist2 {"Его мозги забрызгали седящих на канале" "мозг красиво повисли на люстре" "но оружие оказалось бракованым. Она взела базар и изрешетила его"}
variable bulllist3 {"патрон заклинило в гнезде, у когото удачный день" "она растроилась и кинула револьвер в сторону и ушла" "гнездо оказалось пустым. Кто-то видимо обосрался от страха, ведь там было заряжено 4 патрона"}
variable bulllist4 {"Одним меньше, одним больше, какая разница?" "Что я наделала?!" "Мы все хотим справедливости!" "Будешь мне еще хамить" "Хах! как красиво растеклась его кровь" "теперь можно его продовать на органы"}
foreach cmd $commands { bind pub - $::gprefix(1)$cmd [namespace current]::main }
setudef flag nobull

proc main {nick uhost hand chan text} {
variable bantime; variable bulllist; variable bulllist2; variable bulllist3; variable bulllist4
if {[channel get $chan nobull]} { return }
if {[rand 7] != 2} {putserv "PRIVMSG $chan : Взвела $bulllistrand... *ЩЕЛК*, $bulllistrand3!"; return }
if {[isop $nick $chan] && [ishalfop $nick $chan]} { putserv "NOTICE $nick :Извините, но опам запрещено использовать эту команду."; return }
set bulllistrand [lindex $bulllist [rand [llength $bulllist]]]; set bulllistrand2 [lindex $bulllist2 [rand [llength $bulllist2]]]; set bulllistrand3 [lindex $bulllist3 [rand [llength $bulllist3]]]; set bulllistrand4 [lindex $bulllist4 [rand [llength $bulllist4]]]
set banmask "*![regsub -- {\~} [lindex [split $uhost @] 0] {?}]@[lindex [split $uhost @] 1]"
if {![file exists data/bull.dat]} {set file [open data/bull.dat w+]; close $file}
set file [open data/bull.dat r]
set data [read $file]
if {$data == ""} {
close $file
set file [open data/bull.dat w]
puts $file "$nick\+1"
close $file
putserv "PRIVMSG $chan :\001ACTION Взвела $bulllistrand... *БУМ*, $bulllistrand2\001"
putserv "MODE $chan +b $banmask"
putserv "KICK $chan $nick :$::gcolor(14)Ты стал$::gcolor(6) 1$::gcolor(14)-ым! $::gcolor(4)поздравляю!\003"
timer $bantime [list [namespace current]::removeban $chan $banmask]
putserv "PRIVMSG $chan :$bulllistrand4"
} else {
close $file
set file [open data/bull.dat w]
set who [lindex [split $data "+"] 0]
set count [lindex [split $data "+"] 1]
incr count
puts $file "$nick\+$count"
close $file
putserv "PRIVMSG $chan :\001ACTION Взвела $bulllistrand... *БУМ*, $bulllist2rand\001"
putserv "MODE $chan +b $banmask"
putserv "KICK $chan $nick :$::gcolor(14)Ты стал$::gcolor(6) $count$::gcolor(14)-ым. Предыдущим был:$::gcolor(6) $who$::gcolor(14)!\003 (бан 20 минут=))"
timer $bantime [list [namespace current]::removeban $chan $banmask]
putserv "PRIVMSG $chan :$bulllistrand4"
}
}
proc removeban {chan mask} {
putserv "MODE $chan -b $mask"
}

строка if {[rand 7] != 2} {putserv "PRIVMSG $chan : Взвела $bulllistrand... *ЩЕЛК*, $bulllistrand3!"; return } была проверкой на права, но почему то бот имеющий +h не реагировал на halfop и по этому строка была переписано и без нее работало все.
Vladislav 11.08.11 13:09 #83
Ошибка всегда пишется в PuTTY или DC, если нужно вывести информацию о ошибке то сразу после неё пишем .set errorInfo или на канале !tcl $::errorInfo

Quote

<Vladislav> !загрузка bullet.tcl
<Windrop> -(Загрузка)- Скрипт: bullet.tcl (scripts->games) Строк: 57 Размер: 3.064КБ - ОШИБКА
<Windrop> -(Ошибка)- отсутствует закрывающая фигурная скобка
<Windrop> -(Ошибка)- при выполнении
<Windrop> -(Ошибка)- "namespace eval bull {
<Windrop> -(Ошибка)-
<Windrop> -(Ошибка)- variable bantime "20"
<Windrop> -(Ошибка)- variable commands {пуля рулетка}
<Windrop> -(Ошибка)- Более 6 строк. Прекращаю вывод.

<Vladislav> !загрузка bullet.tcl
<Windrop> -(Загрузка)- Скрипт: bullet.tcl (scripts->games) Строк: 58 Размер: 3.066КБ - OK

<Vladislav> !пуля
<Vladislav> !tcl $::errorInfo
<Windrop> [ERROR 0.126ms] неизвестная команда "невозможно прочитать "bulllistrand": переменная не существует
<Windrop> [TCL] при выполнении
<Windrop> [TCL] "putserv "PRIVMSG $chan : Взвела $bulllistrand... *ЩЕЛК*, $bulllistrand3!""
<Windrop> [TCL] (процедура "::bull::main" строка 4)
<Windrop> [TCL] вызванное из
<Windrop> [TCL] "::bull::main $_pub1 $_pub2 $_pub3 $_pub4 $_pub5""
<Windrop> [TCL] Более 6 строк. Прекращаю вывод.


Певрая ошибка у тебя переменные используются до их назначения, вторая ошибка не верно написана переменная и скобки внизу не хватает (возможно не скопировал сюда) ошибок видимо много, всё не смотрел, но так оно хотяб робит:

Code
namespace eval bull {     

variable bantime "20"     
variable commands {пуля рулетка}     
variable bulllist {"револьвер" "магнум" "самопал" "самодельный револьвер"}     
variable bulllist2 {"Его мозги забрызгали седящих на канале" "мозг красиво повисли на люстре" "но оружие оказалось бракованым. Она взела базар и изрешетила его"}     
variable bulllist3 {"патрон заклинило в гнезде, у когото удачный день" "она растроилась и кинула револьвер в сторону и ушла" "гнездо оказалось пустым. Кто-то видимо обосрался от страха, ведь там было заряжено 4 патрона"}     
variable bulllist4 {"Одним меньше, одним больше, какая разница?" "Что я наделала?!" "Мы все хотим справедливости!" "Будешь мне еще хамить" "Хах! как красиво растеклась его кровь" "теперь можно его продовать на органы"}     
foreach cmd $commands { bind pub - $::gprefix(1)$cmd [namespace current]::main }     
setudef flag nobull     

proc main {nick uhost hand chan text} {     
variable bantime; variable bulllist; variable bulllist2; variable bulllist3; variable bulllist4     
if {[channel get $chan nobull]} { return }     
if {[isop $nick $chan] && [ishalfop $nick $chan]} { putserv "NOTICE $nick :Извините, но опам запрещено использовать эту команду."; return }     
set bulllistrand [lindex $bulllist [rand [llength $bulllist]]]; set bulllistrand2 [lindex $bulllist2 [rand [llength $bulllist2]]]; set bulllistrand3 [lindex $bulllist3 [rand [llength $bulllist3]]]; set bulllistrand4 [lindex $bulllist4 [rand [llength $bulllist4]]]     
if {[rand 7] != 2} {putserv "PRIVMSG $chan : Взвела $bulllistrand... *ЩЕЛК*, $bulllistrand3!"; return }     
set banmask "*![regsub -- {\~} [lindex [split $uhost @] 0] {?}]@[lindex [split $uhost @] 1]"     
if {![file exists data/bull.dat]} {set file [open data/bull.dat w+]; close $file}     
set file [open data/bull.dat r]     
set data [read $file]     
if {$data == ""} {     
close $file     
set file [open data/bull.dat w]     
puts $file "$nick\+1"     
close $file     
putserv "PRIVMSG $chan :\001ACTION Взвела $bulllistrand... *БУМ*, $bulllistrand2\001"     
putserv "MODE $chan +b $banmask"     
putserv "KICK $chan $nick :$::gcolor(14)Ты стал$::gcolor(6) 1$::gcolor(14)-ым! $::gcolor(4)поздравляю!\003"     
timer $bantime [list [namespace current]::removeban $chan $banmask]     
putserv "PRIVMSG $chan :$bulllistrand4"     
} else {     
close $file     
set file [open data/bull.dat w]     
set who [lindex [split $data "+"] 0]     
set count [lindex [split $data "+"] 1]     
incr count     
puts $file "$nick\+$count"     
close $file     
putserv "PRIVMSG $chan :\001ACTION Взвела $bulllistrand... *БУМ*, $bulllistrand2\001"     
putserv "MODE $chan +b $banmask"     
putserv "KICK $chan $nick :$::gcolor(14)Ты стал$::gcolor(6) $count$::gcolor(14)-ым. Предыдущим был:$::gcolor(6) $who$::gcolor(14)!\003 (бан 20 минут=))"     
timer $bantime [list [namespace current]::removeban $chan $banmask]     
putserv "PRIVMSG $chan :$bulllistrand4"     
}     
}     

proc removeban {chan mask} {     
putserv "MODE $chan -b $mask"     
}

}
dthopa 11.08.11 15:42 #84
Я скопировал часть скрипта "пуля" сюда. Именно ту часть, которую редактировал. Я поменял одну строчку "проверки на наличие опа" и поменял ее на рандом, при не выполнении которого игрок получает пулю.
вот полный скрипт:
Code
####################################################
# Windrop © Vladislav  
# Автор: Vladislav
# Версия: 1.0
# Описание: Рулетка. Банит при проигрыше.
# Команды: !пулю
####################################################

namespace eval bull {

variable bantime "20"
variable commands {пуля рулетка}
variable bulllist {"револьвер" "магнум" "самопал" "самодельный револьвер"}
variable bulllist2 {"Его мозги забрызгали седящих на канале" "мозг красиво повисли на люстре" "но оружие оказалось бракованым. Она взела базар и изрешетила его"}
variable bulllist3 {"патрон заклинило в гнезде, у когото удачный день" "она растроилась и кинула револьвер в сторону и ушла" "гнездо оказалось пустым. Кто-то видимо обосрался от страха, ведь там было заряжено 4 патрона"}
variable bulllist4 {"Одним меньше, одним больше, какая разница?" "Что я наделала?!" "Мы все хотим справедливости!" "Будешь мне еще хамить" "Хах! как красиво растеклась его кровь" "теперь можно его продовать на органы"}
foreach cmd $commands { bind pub - $::gprefix(1)$cmd [namespace current]::main }
setudef flag nobull

proc main {nick uhost hand chan text} {
variable bantime; variable bulllist; variable bulllist2; variable bulllist3; variable bulllist4
if {[channel get $chan nobull]} { return }
if {[rand 7] != 2} {putserv "PRIVMSG $chan : Взвела $bulllistrand... *ЩЕЛК*, $bulllistrand3!"; return }
if {[isop $nick $chan] && [ishalfop $nick $chan]} { putserv "NOTICE $nick :Извините, но опам запрещено использовать эту команду."; return }
set bulllistrand [lindex $bulllist [rand [llength $bulllist]]]; set bulllistrand2 [lindex $bulllist2 [rand [llength $bulllist2]]]; set bulllistrand3 [lindex $bulllist3 [rand [llength $bulllist3]]]; set bulllistrand4 [lindex $bulllist4 [rand [llength $bulllist4]]]
set banmask "*![regsub -- {\~} [lindex [split $uhost @] 0] {?}]@[lindex [split $uhost @] 1]"
if {![file exists data/bull.dat]} {set file [open data/bull.dat w+]; close $file}
set file [open data/bull.dat r]
set data [read $file]
if {$data == ""} {
close $file
set file [open data/bull.dat w]
puts $file "$nick\+1"
close $file
putserv "PRIVMSG $chan :\001ACTION Взвела $bulllistrand... *БУМ*, $bulllistrand2\001"
putserv "MODE $chan +b $banmask"
putserv "KICK $chan $nick :$::gcolor(14)Ты стал$::gcolor(6) 1$::gcolor(14)-ым! $::gcolor(4)поздравляю!\003"
timer $bantime [list [namespace current]::removeban $chan $banmask]
putserv "PRIVMSG $chan :$bulllistrand4"
} else {
close $file
set file [open data/bull.dat w]
set who [lindex [split $data "+"] 0]
set count [lindex [split $data "+"] 1]
incr count
puts $file "$nick\+$count"
close $file
putserv "PRIVMSG $chan :\001ACTION Взвела $bulllistrand... *БУМ*, $bulllist2rand\001"
putserv "MODE $chan +b $banmask"
putserv "KICK $chan $nick :$::gcolor(14)Ты стал$::gcolor(6) $count$::gcolor(14)-ым. Предыдущим был:$::gcolor(6) $who$::gcolor(14)!\003 (бан 20 минут=))"
timer $bantime [list [namespace current]::removeban $chan $banmask]
putserv "PRIVMSG $chan :$bulllistrand4"
}
}
proc removeban {chan mask} {
putserv "MODE $chan -b $mask"
}
}
Сравните его со своим скриптом пули...
Vladislav 11.08.11 16:32 #85
Вопрос то в чём? Последний код отличается от предыдущего выложенного тобой только наличием шапки и последней закрывающей скобкой.

В эту проверку ты добавил переменные $bulllistrand $bulllistrand3 которые ещё не назначены, они ниже идут set bulllistrand [lindex $bulllist [rand [llength $bulllist]]]; ... Следовательно проверка твоя должна быть под ними. И нет такой переменной $bulllist2rand есть $bulllistrand2.

Это всё ясно описано в информации о ошибках. И это всё написано в посте выше.
Evil_Moderate 01.10.11 09:40 #86
добавил к боту игру сказка, работала нормально

Quote
[19:48:38] <Evil_Moderate> !сказка
[19:48:40] <%Gemini> Для участии в игре <Сказка> наберите !рег На это у вас есть 3 мин
[19:48:45] <Evil_Moderate> !рег
[19:48:56] <%Волчица> !рег
[19:49:07] <@ВкУсНяШкА> !рег
[19:51:09] <@Nasтюша> !рег
[19:51:39] <%Gemini> Регистрация в игру закончена. Начнем играть.
[19:51:41] <%Gemini> В игре участвуют: Evil_Moderate Волчица ВкУсНяШкА Nasтюша
[20:09:59] <@Evil_Moderate> !стоп
[20:10:00] <%Gemini> Игра остановлена.
[20:10:02] <%Gemini> А теперь послушайте сказку:
[20:10:02] <%Gemini> Жила была Золушка ,она..................


а теперь перестал отвечать на команду стоп

Quote
[14:37:56] <@Evil_Moderate> !сказка
[14:37:57] <Gemini> Для участии в игре <Сказка> наберите !рег На это у вас есть 2 мин
[14:38:03] <@Evil_Moderate> !стоп
[14:39:56] <Gemini> Игра остановлена. Слишком мало игроков.


тоесть когда играешь и сказку уже дописали приходится ждать когда истечет время каждого игрока пробовал переустраивать скрипт,скачать с другого источника
преустановить самого бота - результат тот же В чем может быть сама проблема?
Vladislav 01.10.11 10:02 #87
Проблема в том что у этого скрипта совпадают команды с другими скриптами в боте. !стоп это в викторине, а !рег это в рулетке. Какой скрипт загрузится последнем на тот и будут работать эти команды. Проверять нужно прежде чем ставить скрипты. Нужно заменить на ту команду которой ещё нет.
Evil_Moderate 01.10.11 10:06 #88
я в этом новичок,можешь пнуть на нужную литературу или показать пример,строку где можно изменить имя команды и еще добавляя скрипты нужно было добавлять команды в хелп ,пробовал прописывать но либо пропадала часть стандартной помощи либо вообще не отображался хелп. как правильнее добавить хелп на новые командвы?
Vladislav 01.10.11 10:14 #89
Литература и примеры простых скриптов есть в этом разделе.

Открываешь скрипт, находишь строки начинающие на bind:

Quote

bind pub - !рег ::fun::reg
bind pub - !стоп ::fun::stop
bind pub - !имя ::fun::chhand


Данные команды уже есть у бота, меняешь на то что придёт в голову, например:

Quote

bind pub - !рега ::fun::reg
bind pub - !стопэ ::fun::stop
bind pub - !нейм ::fun::chhand


Про хэлп:

Quote
%c14|%uИгры%u%c14:%c06 %pвхелп !сказка %pсхелп
Evil_Moderate 02.10.11 09:00 #90
как переделать данный скрипт на все каналы ? ссори за вид,исходника не нашел.

Code
## AntiFlood Tcl script by Forb

set once 1 ## Установим значение начальной переменной (счетчик)
set mlock 0 ## Переменная флаг: установлен ли +R на канал?
set chann "#channel" ## Собственно, сам канал

foreach tms "[timers]" {
if {([llength $tms] != 0)} {
set tmc [lindex $tms 1]
set tid [lindex $tms 2]
if {($tmc == "unmode")} {
killtimer $tid
}
}
}

foreach tms "[utimers]" {
if {([llength $tms] != 0)} {
set tmc [lindex $tms 1]
set tid [lindex $tms 2]
if {($tmc == "strip")} {
killutimer $tid
}
}
}

## Данные процедуры убивают все таймеры при запуске (либо rehash'е скрипта). Это нужно для того, чтобы скрипт работал корректно при каждом перезапуске (иначе таймеры будут выполняться в 2 раза чаще).

utimer 20 strip ## Запускаем таймер на 20 секунд для обработки процедуры strip
timer 10 unmode ## И на каждые 10 минут - процедура для снятия режима +R

proc strip { } {
global once
set once 1
utimer 20 strip ## Процедура strip будет обнулять счетчик по истечению 20 секунд (чтобы не перепутать флуд с обычными заходами) и повторно активировать таймер
}

proc unmode { } { ## Данная процедура снимает +R по истечении 10 минут
global once chann mlock
if {($mlock == 1)} { ## Если режим установлен
putserv "MODE $chann -R"
set mlock 0 ## Снимаем его, и изменяем значение флага
}
timer 10 unmode ## Повторно активируем таймер
}

proc joined {nick uhost handle chan args } { ## Процедура, которая будет обрабатываться при каждом заходе ника (параметры ник, хост, хэндл в боте, канал и аргументы
global once chann mlock ## Глобализуем счетчик, канал и переменную-флаг
if {($chan == $chann)} {
incr once ## Инкрименируем счетчик, если канал совпадает с нужным
if {($once >= 10)} {
putchan $chann "Flood detected!" ## Если счетчик достиг 10 - пишем сообщение о детектировании флуда
putserv "MODE $chann +R" ## Устанавливаем +R
set mlock 1 ## И меняем значение флага на 1
}
}
}

bind join - *@* joined ## Устанавливаем bind на join (полную маску)
Форум » Основной раздел » Мастерская » Вопросы по скриптам
Поиск: