02-06-2011, 10:15 PM
может немного не в тему форума , но именно на вашем сайте я нахожу все ответы на вопросы ...
так вот поставил стелсбота и скрипт на мафию .. все вроде хорошо, но бот не реагирует на команды .kill , .save , и т.д. ... не подскажите в чем проблема может быть ?
вот код скрипта
так вот поставил стелсбота и скрипт на мафию .. все вроде хорошо, но бот не реагирует на команды .kill , .save , и т.д. ... не подскажите в чем проблема может быть ?
вот код скрипта
Код:
'///////////mafia for stealthbot ver 1.22
'///////////Created by nice-day (http://mafa.hotmail.ru)
public const AdminFilePath = "admin.ini"
dim game_active 'если true то игра запущена
dim day_time 'длинна дня в секундах
dim night_time 'длинна ночи в секундах
dim time_counter 'счётчик времени игры(за день проходит 2 круга - один для дня и один для ночи)
dim it_is_night 'если ночь, то true
dim people(200,20) 'всё по игрокам
dim people_quantity 'количество игроков
dim classic_counter 'счётчик первых classic_time секунд игры
dim classic_active ' работает ли классическая мафия
dim classic_time ' начальное время перед стартом игры
dim classic_array(200) 'массив присоединившихся игроков в классике
dim classic_array_counter ' маркер длинны массива
dim master ' хозяин бота
dim reconnectTimer 'время реконнекта
dim idle_message_counter 'счётчик промежуточного сообщения
dim idle_message 'промежуточное сообщение
dim idle_time 'промежуток между сообщениями
dim max_players ' максимум игроков в игре (0-не ограниченно)
dim players_joined ' количество подключившихся игроков
'/////////////////////////////////////////////////////////////////////////
Sub Load_admin '/////подпрограмма загрузки администратора игры из файла
On Error Resume Next
Dim fso, admin_file
master=""
Set fso = CreateObject("Scripting.FileSystemObject")
Set admin_file = fso.OpenTextFile(AdminFilePath, 1, True)
master=trim(admin_file.ReadLine)
admin_file.close
if (Err.Number>0) then
master=""
' AddChat vbGreen, "error in Load_admin " & Err.Number
' Addq "/w " & master & " error in Load_admin " & Err.Number
end if
On Error GoTo 0
End Sub
Sub Start_game 'запуск игры
On Error Resume Next
if (game_active=false) then
time_counter=night_time
it_is_night=true
game_active=true
Victory_test
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Start_game " & Err.Number
Addq "/w " & master & " error in Start_game " & Err.Number
end if
On Error GoTo 0
End SUB
'///////////////////////////////////////////////////////////////////////////
Sub Stop_game 'прекращение игры
On Error Resume Next
classic_counter=0
classic_array_counter=0
classic_active=false
game_active=false
time_counter=night_time
it_is_night=true
Init_people
max_players=0
players_joined=0
if (Err.Number>0) then
AddChat vbGreen, "error in Stop_game " & Err.Number
Addq "/w " & master & " error in Stop_game " & Err.Number
end if
On Error GoTo 0
End Sub
'/////////////////////////////////////////////////////////////////////////////
Sub Start_classic
On Error Resume Next
if (max_players>12) then
max_players=12
end if
players_joined=0
time_counter=night_time
it_is_night=true
classic_active=true
game_active=true
if (max_players>=1 and max_players<=12) then
classic_counter=600 '10 минут на сбор
else
classic_counter=classic_time
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Start_classic " & Err.Number
Addq "/w " & master & " error in Start_classic " & Err.Number
end if
On Error GoTo 0
end Sub
'/////////////////////////////////////////////////////////////////////////////////
Sub Init_people '/////подпрограмма инициализации массива игроков
On Error Resume Next
for i=0 to (200-1)
for j=0 to (20-1)
people(i,j)=-1
next
next
people_quantity=0
people(0,0)="Username"
people(0,1)=0 '"side" '//0-deadman 1-peasant 2-mafia 3-maniac
people(0,2)=0 ' "profession" '1-doctor 2-lawyer 3-policeman
people(0,3)=1 ' "voted" '0-no 1-yes
people(0,4)="EMPTY SLOT"
people(0,5)=0 ' "voting counter" '0-noone vote N-quantity of votes
people(0,6)=0 ' "protection by DOCTOR or LAWYER" '0-no 1-y
people(0,7)=0 ' "maniac's victim" '0-no 1-y
people(0,8)=0 ' "voting's victim" '0-no 1-y
people(0,9)=0 ' "leaver" '0-no 1-y
people(0,10)=1 ' "used ability this round" '0-no 1-y
if (Err.Number>0) then
AddChat vbGreen, "error in Init_people " & Err.Number
Addq "/w " & master & " error in Init_people " & Err.Number
end if
On Error GoTo 0
End Sub
'///////////////////////////////////////////////////////////////////////////////////
Sub Alive_players 'выводит список играющих игроков
On Error Resume Next
five=0
str="/me Ceйчac живы: "
for i=1 to (people_quantity)
if (people(i,1)>0) then
five=five+1
str=(str & "(" & i & ")" & "-" & people(i,0) & "; ")
if (five>4) then
AddQ str
str="/me Ceйчac живы: "
five=0
end if
end if
next
if (five>0) then
AddQ str
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Alive_players " & Err.Number
Addq "/w " & master & " error in Alive_players " & Err.Number
end if
On Error GoTo 0
end Sub
'///////////////////////////////////////////////////////////////////////////////////////
Sub Victory_test 'проверка на победу и отключение игры в случае победы
On Error Resume Next
dim side(4)
side(1)=side(2)=side(3)=0
for i=1 to (people_quantity)
if (people(i,1)>0) then
side(people(i,1))=side(people(i,1))+1
end if
next
if (side(1)>0 AND (side(2)=0 AND side(3)=0)) then
'мирные победили
Alive_players
AddQ "/me MИPHЫE ГPAЖДAHE пoбeдили в игpe!"
Stop_game
end if
if (side(2)>0 AND (side(1)=0 AND side(3)=0)) then
'мафия победила
Alive_players
AddQ "/me MAФИЯ пoбeдилa в игpe!"
Stop_game
end if
if (side(3)=1 AND (side(1)=0 AND side(2)=0)) then
Alive_players
AddQ "/me MAHЬЯK пoбeдил в игpe"
Stop_game
end if
if (side(3)=0 AND (side(1)=0 AND side(2)=0)) then
Alive_players
AddQ "/me Hичeйнaя пoбeдa. HИKTO нe выжил"
Stop_game
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Victory_test " & Err.Number
Addq "/w " & master & " error in Victory_test " & Err.Number
end if
On Error GoTo 0
end Sub
'//////////////////////////////////////////////////////////////////////////////////////////////////////
Sub Vote_result 'podvodim itogi golosovania i obnylyaem shethik golosovania(v samom konce dniy i nochi)
On Error Resume Next
max_vote=0 'наибольший результат
max_num=0 ' число людей с наибольшим результатом
max_id=0 ' номер игрока с наибольшим результатом
maf_num=0' число мафий
for i=1 to (people_quantity)
if (people(i,1)>0) then
if (people(i,1)=2) then
maf_num=maf_num+1
end if
if (people(i,5)=max_vote) then
max_num=max_num+1
end if
if (people(i,5)>max_vote) then
max_vote=people(i,5)
max_id=i
max_num=1
end if
end if
next
if(max_num=1 AND max_vote>0) then
'если найдена жертва с большинством голосов
people(max_id,8)=1
else
if(it_is_night=true ) then
if( maf_num>0) then
Addq "/me HИKTO нe был убит MAФИEЙ нoчью(ничeйнoe гoлoсoвaниe)."
end if
else
Addq "/me HИKTO нe был кaзнён днём(ничeйнoe гoлoсoваниe)"
end if
end if
'обнуляем счётчики
for i=1 to (people_quantity)
if (people(i,1)>0) then
people(i,5)=0
end if
next
if (Err.Number>0) then
AddChat vbGreen, "error in Vote_result " & Err.Number
Addq "/w " & master & " error in Vote_result " & Err.Number
end if
On Error GoTo 0
end Sub
'////////////////////////////////////////////////////////////////////////////////////////////////////////
Sub Death_results 'здесь вычисляем кто умер, убиваем их и выводим сообщения об убийсвах и покушениях(такж обнуляем флаги)
On Error Resume Next
for i=1 to (people_quantity)
if (people(i,1)>0 AND (people(i,7)=1 OR people(i,8)=1) ) then
'если жив и если пытаются убить
killer_str=""
protector_str=""
if (it_is_night=true) then
'если ночью
if (people(i,6)=1) then
'если защитили
protector_str=" ДOKTOP "
end if
if (people(i,7)=1 AND people(i,8)=1) then
'если убивают мафия и маньяк
killer_str=" MAФИEЙ и MAHЬЯKOM "
end if
if (people(i,7)=1 AND people(i,8)=0) then
'если убивает маньяк
killer_str=" MAHЬЯKOM "
end if
if (people(i,7)=0 AND people(i,8)=1) then
'если убивает мафия
killer_str=" MAФИEЙ "
end if
else
'если днём
if (people(i,6)=1) then
'если защитили
protector_str=" AДBOKAT "
end if
if people(i,8)=1 then
'если убивают мирные
killer_str=" ГPAЖДAHAMИ "
end if
end if
if (people(i,6)=1) then
'если защитили(итог)
ADDQ "/me " & killer_str & "былa пoпыткa убить " & "(" & i & ")-"& people(i,0) & " ,нo " & protector_str & " cпac eгo."
'обнуляем всё, кроме сигнала о том что человек вышел с канала
people(i,6)=0
people(i,7)=0
people(i,8)=0
for j=3 to 8
people(i,j)=0
next
for j=10 to (20-1)
people(i,j)=0
next
else
'если не защитили(итог)
ADDQ "/me " & "(" & i & ")-"& people(i,0) & " " & Get_user_status(i) & " был убит " & killer_str
people(i,1)=0
for j=2 to (20-1)
people(i,j)=-1
next
end if
else
'обнуляем флаги
for j=3 to 8
people(i,j)=0
next
for j=10 to (20-1)
people(i,j)=0
next
end if
next
' убиваем ливеров
for i=1 to (people_quantity)
if (people(i,9)=1) then
Addq "/me " & people(i,0) & " " & Get_user_status(i) & " умep пpи пoрыткe пoкинуть кaнaл игpы"
people(i,1)=0
for j=2 to (20-1)
people(i,j)=-1
next
end if
next
if (Err.Number>0) then
AddChat vbGreen, "error in Death_results " & Err.Number
Addq "/w " & master & " error in Death_results " & Err.Number
end if
On Error GoTo 0
end Sub
'////////////////////////////////////////////////////////////////////////////////
Sub Give_classic_roles 'разадаём роли для классики
On Error Resume Next
dim good_array(200) 'временный массив чтобы упорядочить пользователей
number_of_ppl=0
for i=1 to classic_array_counter
if (classic_array(i)<>"") then
number_of_ppl=number_of_ppl+1
good_array(number_of_ppl)=classic_array(i)
end if
next
num_maniac=FIX(0.126*number_of_ppl)
num_mafia=FIX(0.330*number_of_ppl)
num_peasant=FIX(0.544*number_of_ppl)
num_delta=number_of_ppl-(num_peasant+num_mafia+num_maniac)
num_peasant=num_peasant+num_delta
num_doctor=0
num_policeman=0
num_lawyer=0
if (num_peasant=1) then
num_peasant=num_peasant-1
num_doctor=num_doctor+1
end if
if (num_peasant>1) then
num_peasant=num_peasant-2
num_doctor=num_doctor+1
num_policeman=num_policeman+1
end if
if (num_mafia>0) then
num_mafia=num_mafia-1
num_lawyer=num_lawyer+1
end if
ADDQ "/me ИГPAЮT: " & num_doctor & " дoктop; " & num_policeman & " мeнт; " & num_peasant & " гpaждaне; "
ADDQ "/me ИГРАЮТ: " & num_lawyer & " мaфия-aдвoкaт; " & num_mafia & " мaфия; " & num_maniac & " мaньяк; "
i=1
Do While i<=number_of_ppl
chk=0
rand=rnd(1)
doctor_deg=CDbl(num_doctor/number_of_ppl)
lawyer_deg=CDbl(num_lawyer/number_of_ppl)
policeman_deg=CDbl(num_policeman/number_of_ppl)
mafia_deg=CDbl(num_mafia/number_of_ppl)
maniac_deg=CDbl(num_maniac/number_of_ppl)
peasant_deg=CDbl(num_peasant/number_of_ppl)
if (rand<doctor_deg AND num_doctor>0) then
'доктор
temp=Add_user(good_array(i),2)
num_doctor=num_doctor-1
chk=1
end if
if (rand>=doctor_deg AND rand<(doctor_deg+lawyer_deg) AND num_lawyer>0) then
'адвокат
temp=Add_user(good_array(i),3)
num_lawyer=num_lawyer-1
chk=1
end if
if (rand>=(doctor_deg+lawyer_deg) AND rand<(doctor_deg+lawyer_deg+policeman_deg) AND num_policeman>0) then
'мент
temp=Add_user(good_array(i),4)
num_policeman=num_policeman-1
chk=1
end if
if (rand>=(doctor_deg+lawyer_deg+policeman_deg) AND rand<(doctor_deg+lawyer_deg+policeman_deg+mafia_deg) AND num_mafia>0) then
'мафия
temp=Add_user(good_array(i),5)
num_mafia=num_mafia-1
chk=1
end if
if (rand>=(doctor_deg+lawyer_deg+policeman_deg+mafia_deg) AND rand<(doctor_deg+lawyer_deg+policeman_deg+mafia_deg+maniac_deg) AND num_maniac>0) then
'маньяк
temp=Add_user(good_array(i),6)
num_maniac=num_maniac-1
chk=1
end if
if (rand>=(doctor_deg+lawyer_deg+policeman_deg+mafia_deg+maniac_deg) AND num_peasant>0) then
'пизант
temp=Add_user(good_array(i),1)
num_peasant=num_peasant-1
chk=1
end if
if (chk=0) then
i=i-1
end if
i=i+1
loop
if (Err.Number>0) then
AddChat vbGreen, "error in Give_classic_roles " & Err.Number
Addq "/w " & master & " error in Give_classic_roles " & Err.Number
end if
On Error GoTo 0
End Sub
'/////////////////////////////////////////////////////////////////////////////////
'//добавляет пользователя с именем user в игру, назначая роль role:0 -случайно, 1-пизант 2-доктор 3-адвокат;4-мент; 5-мафия; 6-маньяк
Function Add_user(user, role)
On Error Resume Next
for i=1 to (people_quantity)
if (people(i,0)=user) then
if (Err.Number>0) then
AddChat vbGreen, "error in Add_user " & Err.Number
Addq "/w " & master & " error in Add_user " & Err.Number
end if
On Error GoTo 0
Exit Function
end if
next
if (role=0) then
'если случайный выбор
people_quantity=people_quantity+1
people(people_quantity,0)=user
rand=rnd(1)
if (rand<0.05) then
'maniac
people(people_quantity,1)=3
people(people_quantity,2)=0
AddQ "/w " & user & " ты MAHЬЯK"
end if
if (rand>=0.05 AND rand<0.25) then
'mafia
people(people_quantity,1)=2
people(people_quantity,2)=0
AddQ "/w " & user & " ты MAФИЯ"
end if
if (rand>=0.25 AND rand<0.30) then
'doctor
people(people_quantity,1)=1
people(people_quantity,2)=1
AddQ "/w " & user & " ты ДOKTOP"
end if
if (rand>=0.30 AND rand<0.35) then
'lawyer
people(people_quantity,1)=2
people(people_quantity,2)=2
AddQ "/w " & user & " ты AДBOKAT-МАФИИ"
end if
if (rand>=0.35 AND rand<0.40) then
'policeman
people(people_quantity,1)=1
people(people_quantity,2)=3
AddQ "/w " & user & " ты MEHT"
end if
if (rand>=0.40) then
'peasant
people(people_quantity,1)=1
people(people_quantity,2)=0
AddQ "/w " & user & " ты ГPAЖДAHИH"
end if
for i=3 to 20
'обнуляем все настройки
people(people_quantity,i)=0
next
end if
if (role>0 AND role<7) then
'если заданный выбор
people_quantity=people_quantity+1
people(people_quantity,0)=user
if (role=1) then
'если пизант
people(people_quantity,1)=1
people(people_quantity,2)=0
AddQ "/w " & user & " ты ГPAЖДAHИH"
end if
if (role=2) then
'если доктор
people(people_quantity,1)=1
people(people_quantity,2)=1
AddQ "/w " & user & " ты ДOKTOP"
end if
if (role=3) then
'если адвокат
people(people_quantity,1)=2
people(people_quantity,2)=2
AddQ "/w " & user & " ты MAФИЯ-AДBOKAT"
end if
if (role=4) then
'если мент
people(people_quantity,1)=1
people(people_quantity,2)=3
AddQ "/w " & user & " ты MEHT"
end if
if (role=5) then
'если мафия
people(people_quantity,1)=2
people(people_quantity,2)=0
AddQ "/w " & user & " ты MAФИЯ"
end if
if (role=6) then
'если маньяк
people(people_quantity,1)=3
people(people_quantity,2)=0
AddQ "/w " & user & " ты MAHЬЯK"
end if
for i=3 to 20
'обнуляем все настройки
people(people_quantity,i)=0
next
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Add_user " & Err.Number
Addq "/w " & master & " error in Add_user " & Err.Number
end if
On Error GoTo 0
end Function
'///////////////////////////////////////////////////////////////////////
Function Get_id_by_name(user) ' получить номер игрока по его нику 0-если такого нет
'On Error Resume Next
for i=1 to (people_quantity)
if (lcase(trim(people(i,0)))=lcase(trim(user))) then
Get_id_by_name=i
if (Err.Number>0) then
AddChat vbGreen, "error in Get_id_by_name " & Err.Number
Addq "/w " & master & " error in Get_id_by_name " & Err.Number
end if
On Error GoTo 0
Exit Function
end if
next
Get_id_by_name=0
if (Err.Number>0) then
AddChat vbGreen, "error in Get_id_by_name " & Err.Number
Addq "/w " & master & " error in Get_id_by_name " & Err.Number
end if
On Error GoTo 0
end Function
'//////////////////////////////////////////////////////////////////////////
Function Kill_leaver(user) 'убивает чела покидающего канал
On Error Resume Next
id1=Get_id_by_name(user)
if(id1>0) then
If (people(id1,1)>0) then
people(id1,9)=1
end if
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Kill_leaver " & Err.Number
Addq "/w " & master & " error in Kill_leaver " & Err.Number
end if
On Error GoTo 0
end Function
'///////////////////////////////////////////////////////////////////////
Function Get_user_status(userID) 'строковый статус игрока с номером userID
On Error Resume Next
if(people(userID,1)=0) then
Get_user_status="TPУП"
end if
if(people(userID,1)=1) then
Get_user_status="ГPAЖДAHИH"
if (people(userID,2)=1) then
Get_user_status="ДOKTOP"
end if
if (people(userID,2)=3) then
Get_user_status="MEHT"
end if
end if
if(people(userID,1)=2) then
Get_user_status="MAФИЯ"
if (people(userID,2)=2) then
Get_user_status="MAФИЯ-AДBOKAT"
end if
end if
if(people(userID,1)=3) then
Get_user_status="MAHЬЯK"
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Get_user_status " & Err.Number
Addq "/w " & master & " error in Get_user_status " & Err.Number
end if
On Error GoTo 0
end Function
'////////////////////////////////////////////////////////////////////////////////////////
'// функция делит сообщение Message, состоящие из 2 слов разделённых пробелом, на отдельные 2 слова и
'// возвращает номер первое слово, если numOfReturn=0 и 2-ое, если numOfReturn=1
Function DivideMessage (message, numOfReturn)
On Error Resume Next
DivideMessage = Message
if(numOfReturn=0) then
DivideMessage=Left(Trim(message),InStr(Trim(message) & " "," ")-1)
else
DivideMessage=Trim(Mid(Trim(message),InStr(Trim(message)+" "," ")+1,Len(Trim(message))-Len(Left(Trim(message),InStr(Trim(message)+" "," ")))))
end if
if (Err.Number>0) then
DivideMessage = ""
AddChat vbGreen, "error in DivideMessage " & Err.Number
Addq "/w " & master & " error in DivideMessage " & Err.Number
end if
On Error GoTo 0
End Function
'/////////////////////////////////////////////////////////////////////////////////////////////
'// функция добовляет точку к началу сообщения, если точки ещё нет
Function AddPoint(message)
On Error Resume Next
AddPoint = Message
if (Left(Message,1)<> ".") then
AddPoint="." & Message
else
AddPoint=Message
end if
if (Err.Number>0) then
DivideMessage = ""
AddChat vbGreen, "error in AddPoint " & Err.Number
Addq "/w " & master & " error in AddPoint " & Err.Number
end if
On Error GoTo 0
End Function
'/////////////////////////////////////////////////////////////////////////////////////////////
Function Str_to_num (message) 'если строка числовая и число от 1 до 200(макс число игроков), то она превращается в число, а иначе 0
On Error Resume Next
if (IsNumeric(message)=true and Len(trim(message))<9 ) then
'если строка цифровая и если число не более 8 цифр
if (CLng(message)<=200 AND CLng(message)>0) then
Str_to_num=CLng(message)
else
Str_to_num=0
end if
else
Str_to_num=0
end if
if (Err.Number>0) then
Str_to_num=0
AddChat vbGreen, "error in Str_to_num " & Err.Number
Addq "/w " & master & " error in Str_to_num " & Err.Number
end if
On Error GoTo 0
End Function
'/////////////////////////////////////////////////////////////////////////////////////////////
Function Who_is_mafia() 'фукция возвращает номер босса или 0 если нет мафии
On Error Resume Next
mafia1="MAФИЯ: "
mafia2="Hoмepa игpoкoв MAФИИ: "
mafia_num=0
for i=1 to (people_quantity)
if (people(i,1)=2) then
mafia1=mafia1 & "(" & i & ")-" & people(i,0) & "; "
mafia2=mafia2 & i &"; "
mafia_num=mafia_num+1
end if
next
if (mafia_num>3) then
Who_is_mafia=mafia2
else
Who_is_mafia=mafia1
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Who_is_mafia " & Err.Number
Addq "/w " & master & " error in Who_is_mafia " & Err.Number
end if
On Error GoTo 0
End Function
'//////////////////////////////////////////////////////////////////////
'добавляет юзера в массив классики
Function Add_classic(user)
On Error Resume Next
for i=1 to classic_array_counter
if (lcase(user)=lcase(classic_array(i))) then
if (Err.Number>0) then
AddChat vbGreen, "error in Add_classic " & Err.Number
Addq "/w " & master & " error in Add_classic " & Err.Number
end if
On Error GoTo 0
Exit Function
end if
next
classic_array_counter=classic_array_counter+1
classic_array(classic_array_counter)=user
players_joined=players_joined+1
addq "/me " & user & " в игpe"
if (Err.Number>0) then
AddChat vbGreen, "error in Add_classic " & Err.Number
Addq "/w " & master & " error in Add_classic " & Err.Number
end if
On Error GoTo 0
End Function
'///////////////////////////////////////////////////////////////////
Function Del_classic(user) 'удаляет юзера из массива классики
On Error Resume Next
for i=1 to classic_array_counter
if (lcase(user)=lcase(classic_array(i))) then
addq "/me " & user & " ушёл"
players_joined=players_joined-1
classic_array(i)=""
end if
next
if (Err.Number>0) then
AddChat vbGreen, "error in Del_classic " & Err.Number
Addq "/w " & master & " error in Del_classic " & Err.Number
end if
On Error GoTo 0
End Function
'////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////
'// Fires when the bot executes.
Sub Event_Load()
On Error Resume Next
reconnectTimer=25
Randomize
'/////////////////////
Load_admin
' master="administrator"
day_time=180
night_time=180
classic_time=60
idle_time=600
'//////////////////////
Init_people
scTimer.Interval = 1000
scTimer.Enabled = true
classic_counter=0
game_active =false
classic_active=false
idle_message_counter=idle_time
idle_message="/me Узнать правила игры МАФИЯ можно на сайте http://mafa.hotmail.ru"
max_players=0
players_joined=0
if (Err.Number>0) then
AddChat vbGreen, "error in Event_Load " & Err.Number
Addq "/w " & master & " error in Event_Load " & Err.Number
end if
On Error GoTo 0
End Sub
'////////////////////////////////////////////////////////////////////////////
'// Fires when the server sends a blue INFO-type message. (Includes ban and kick messages.)
Sub Event_ServerInfo(Message)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_ServerInfo " & Err.Number
Addq "/w " & master & " error in Event_ServerInfo " & Err.Number
end if
On Error GoTo 0
End Sub
'//////////////////////////////////////////////////////////////////////////////
'// Fires when the server sends a red ERROR-type message. (Includes "That user is not logged on." etc.)
Sub Event_ServerError(Message)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_ServerError " & Err.Number
Addq "/w " & master & " error in Event_ServerError " & Err.Number
end if
On Error GoTo 0
End Sub
'//////////////////////////////////////////////////////////////////////////////
'// Fires when a user on battle.net talks.
Sub Event_UserTalk(Username, Flags, Message, Ping)
On Error Resume Next
Png=Ping
Select Case AddPoint(lcase(trim(DivideMessage(Message, 0))))
Case ".start"
if (classic_active=true AND classic_counter>60 AND (trim(lcase(Username))=trim(lcase(master)) OR trim(master)="")) then
classic_counter=65
end if
Case ".stop"
if (classic_active=true AND classic_counter>0 AND master<>"" AND trim(lcase(Username))=trim(lcase(master))) then
Stop_game
addq "/me игpa ocтaнoвлeнa"
end if
Case ".go"
if (game_active=false and (lcase(Username)=lcase(master) OR master="" ) ) then
Stop_game
max_players=Str_to_num(DivideMessage(Message, 1))
Start_classic
end if
' Case ".pause"
' game_active=false
Case ".join"
If (classic_active=true AND classic_counter>0) then
if ((players_joined<max_players AND max_players>0) OR (max_players=0)) then
Add_classic(Username)
end if
end if
' if (classic_active=false) then
' temp=Add_user( Username , 0)
' end if
End Select
if (game_active=true) then
'только если игра идёт
Select Case AddPoint(trim(lcase(DivideMessage (Message, 0))))
Case ".vote"
if (it_is_night=false AND people(Get_id_by_name(Username),1)>0 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),3)=0 AND Trim(DivideMessage(Message, 1))<>"") then
'мирные голусуют (есль день, ты ALL, твоя цель жива и ты не голосовал)
people(Str_to_num(DivideMessage(Message, 1)),5)=people(Str_to_num(DivideMessage(Message, 1)),5)+1
people(Get_id_by_name(Username),3)=1
addq "/me " & Username & " гoлocуeт зa " & people(Str_to_num(DivideMessage(Message, 1)),0)
end if
End Select
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Event_UserTalk " & Err.Number
Addq "/w " & master & " error in Event_UserTalk " & Err.Number
end if
On Error GoTo 0
End Sub
'///////////////////////////////////////////////////////////////////////
'// Fires when a user speaks with /emote.
Sub Event_UserEmote(Username, Flags, Message)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_UserEmote " & Err.Number
Addq "/w " & master & " error in Event_UserEmote " & Err.Number
end if
On Error GoTo 0
End Sub
'///////////////////////////////////////////////////////////////////////
'// Fires when a whisper is recieved.
Sub Event_WhisperFromUser(Username, Flags, Message)
On Error Resume Next
Select Case lcase(DivideMessage (Message, 0))
Case ".sendbot"
if (lcase(Username)=lcase(master)) then
addq "/join " & DivideMessage (Message, 1)
else
if (game_active=false) then
addq "/join " & DivideMessage (Message, 1)
else
addq "Game is active. Try later"
end if
end if
end select
if (game_active=true) then
'только если игра идёт
Select Case AddPoint(Trim(lcase(DivideMessage (Message, 0))))
Case ".vote"
if (it_is_night=true AND people(Get_id_by_name(Username),1)=2 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),3)=0 AND Trim(DivideMessage(Message,1))<>"") then
'мафия голусует (есль ночь, ты мафия, твоя цель жива и ты не голосовал)
people(Str_to_num(DivideMessage(Message, 1)),5)=people(Str_to_num(DivideMessage(Message, 1)),5)+1
people(Get_id_by_name(Username),3)=1
addq "/w " & Username & " ты xoчeшь убить " & people(Str_to_num(DivideMessage(Message, 1)),0)
end if
if (it_is_night=false AND people(Get_id_by_name(Username),1)>0 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),3)=0 AND Trim(DivideMessage(Message, 1))<>"") then
'мирные голусуют (есль день, ты ALL, твоя цель жива и ты не голосовал)
people(Str_to_num(DivideMessage(Message, 1)),5)=people(Str_to_num(DivideMessage(Message, 1)),5)+1
people(Get_id_by_name(Username),3)=1
addq "/me " & Username & " гoлocуeт зa " & people(Str_to_num(DivideMessage(Message, 1)),0)
end if
Case ".kill"
if (it_is_night=true AND people(Get_id_by_name(Username),1)=3 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),10)=0 AND Trim(DivideMessage(Message, 1))<>"") then
'маньяк убивает (есль ночь, ты маньяк, твоя цель жива и ты не ещё не убивал)
people(Str_to_num(DivideMessage(Message, 1)),7)=1
people(Get_id_by_name(Username),10)=1
addq "/w " & Username & " ты xoчeшь убить " & people(Str_to_num(DivideMessage(Message, 1)),0)
end if
Case ".mafia"
if (it_is_night=true AND people(Get_id_by_name(Username),1)=2 AND people(Get_id_by_name(Username),10)=0) then
'ищем мафию (есль ночь, ты мафия и ты не ещё не проверял)
people(Get_id_by_name(Username),10)=1
addq "/w " & Username & " " & Who_is_mafia()
end if
Case ".save"
if (it_is_night=true AND people(Get_id_by_name(Username),2)=1 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),10)=0 AND CInt(Get_id_by_name(Username))<>CInt(Str_to_num(DivideMessage(Message, 1))) AND Trim(DivideMessage(Message, 1))<>"") then
'доктор спасает (есль ночь, ты доктор, твоя цель жива и ты ещё не защищал и номер цели не равен твоему номеру)
people(Str_to_num(DivideMessage(Message, 1)),6)=1
people(Get_id_by_name(Username),10)=1
addq "/w " & Username & " ты зaщитил " & people(Str_to_num(DivideMessage(Message, 1)),0)
end if
if (it_is_night=false AND people(Get_id_by_name(Username),2)=2 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),10)=0 AND CInt(Get_id_by_name(Username))<>CInt(Str_to_num(DivideMessage(Message, 1))) AND Trim(DivideMessage(Message, 1))<>"") then
'адвокат спасает (есль не ночь, ты адвокат, твоя цель жива и ты ещё не защищал)
people(Str_to_num(DivideMessage(Message, 1)),6)=1
people(Get_id_by_name(Username),10)=1
addq "/w " & Username & " ты зaщитил " & people(Str_to_num(DivideMessage(Message, 1)),0)
end if
Case ".check"
if (it_is_night=false AND people(Get_id_by_name(Username),2)=3 AND people(Str_to_num(DivideMessage(Message, 1)),1)>0 AND people(Get_id_by_name(Username),10)=0 AND Trim(DivideMessage(Message, 1))<>"") then
'мент проверяет (есль не ночь, ты мент, твоя цель жива и ты ещё не проверял
people(Get_id_by_name(Username),10)=1
addq "/w " & Username & " " & people(Str_to_num(DivideMessage(Message, 1)),0) & " ни ктo инoй, кaк " & Get_user_status(DivideMessage (Message, 1))
end if
End Select
end if
Select Case lcase(message)
Case ".pingme"
End Select
if (Err.Number>0) then
AddChat vbGreen, "error in Event_WhisperFromUser " & Err.Number
Addq "/w " & master & " error in Event_WhisperFromUser " & Err.Number
end if
On Error GoTo 0
End Sub
'//////////////////////////////////////////////////////////////////////////////////////
'// Fires when a user joins the channel.
'// Level will contain 0 for no-level Warcraft III players or non-Warcraft III products.
'// Message contains the user's PARSED statstring.
'// OriginalStatstring contains the user's UNPARSED statstring.
Sub Event_UserJoins(Username, Flags, Message, Ping, Product, Level, OriginalStatstring)
On Error Resume Next
id1=Get_id_by_name(Username)
if(id1>0) then
If (people(id1,1)>0 AND people(id1,9)=1) then
people(id1,9)=0
end if
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Event_UserJoins " & Err.Number
Addq "/w " & master & " error in Event_UserJoins " & Err.Number
end if
On Error GoTo 0
End Sub
'////////////////////////////////////////////////////////////////////////////////////
'// Fires when a user leaves the channel.
Sub Event_UserLeaves(Username, Flags)
On Error Resume Next
Kill_leaver(Username)
If (classic_active=true AND classic_counter>0) then
Del_classic(Username)
end if
if (Err.Number>0) then
AddChat vbGreen, "error in Event_UserLeaves " & Err.Number
Addq "/w " & master & " error in Event_UserLeaves " & Err.Number
end if
On Error GoTo 0
End SUb
'/////////////////////////////////////////////////////////////////////////////
'// Fires when Battle.net updates a user's flags in the channel.
Sub Event_FlagUpdate(Username, NewFlags, Ping)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_FlagUpdate " & Err.Number
Addq "/w " & master & " error in Event_FlagUpdate " & Err.Number
end if
On Error GoTo 0
End Sub
'// Fires after a successful login.
Sub Event_LoggedOn(Username, Product)
On Error Resume Next
command botvars.username, "/cq", True
Stop_game
if (Err.Number>0) then
AddChat vbGreen, "error in Event_LoggedOn " & Err.Number
Addq "/w " & master & " error in Event_LoggedOn " & Err.Number
end if
On Error GoTo 0
End Sub
'////////////////////////////////////////////////////////////////////////////
'// Fires once for each user in the channel upon joining a channel.
Sub Event_UserInChannel(Username, Flags, Message, Ping, Product)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_UserInChannel " & Err.Number
Addq "/w " & master & " error in Event_UserInChannel " & Err.Number
end if
On Error GoTo 0
End Sub
'//////////////////////////////////////////////////////////////////////////
'// Flags in this case stores the channel's flags.
Sub Event_ChannelJoin(ChannelName, Flags)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_ChannelJoin " & Err.Number
Addq "/w " & master & " error in Event_ChannelJoin " & Err.Number
end if
On Error GoTo 0
End Sub
'///////////////////////////////////////////////////////////////////////////
'// Executes every X milliseconds, as set by using its .Interval property.
Sub scTimer_Timer()
On Error Resume Next
if(game_active AND classic_counter>0 AND classic_active=true) then
'если идёт время присоединения к классической игре
if (classic_counter=classic_time AND max_players=0) then
'(нет максимума игроков)
for i=0 to 200
classic_array(i)=""
next
classic_array_counter=0
'в самом начале периода присоединения к игре
ADDQ "/me Дoбpo пoжaлoвaть в MAФИЮ!!! (http://mafa.hotmail.ru)"
' ADDQ "/me Bвeдитe кoмaнду '.join', чтoбы игpaть в игpу."
' if ((players_joined<max_players AND max_players>0) OR (max_players=0)) then
ADDQ "/me У вac еcть " & classic_time & " ceк., чтoбы зaйти в игpу (ввeдитe '.join')."
end if
if (classic_counter=600 AND max_players>0) then
'(установлен максимума игроков)
for i=0 to 200
classic_array(i)=""
next
classic_array_counter=0
'в самом начале периода присоединения к игре
ADDQ "/me Дoбpo пoжaлoвaть в MAФИЮ!!! (http://mafa.hotmail.ru)"
ADDQ "/me ПАРАМЕТРЫ: мaкс. игpoкoв - " & max_players & "; макc. вpeмя oжидaния - 10 минут."
ADDQ "/me Bвeдитe кoмaнду '.join', чтoбы приcoeдинитьcя к игpе."
end if
if (players_joined>=max_players AND max_players>0 AND classic_counter>65 ) then
'если набрали нужное количество игроков
classic_counter=65
end if
if(((classic_counter) Mod 60 = 0) AND (max_players>0)) then
'каждые 60 сек
AddQ "/me " & classic_counter/60 & " мин. дo нaчaлa игpы. (" & players_joined & " из " & max_players & " игроков в игpe)"
end if
if(((classic_counter-5) Mod 20 = 0) AND (classic_counter<60)) then
'каждые 20 сек
AddQ "/me " & classic_counter & "ceк"
end if
if (classic_counter=1) then
'в конце периода присоединения к игре
ADDQ "/me Игpa MAФИЯ нaчaлacь..."
Give_classic_roles
AddQ "/me B пpoфилe бoтa " & BotVars.Username & " вы нaйдётe кoмaнды игpы."
Victory_test
end if
classic_counter=classic_counter-1
end if
if(game_active AND classic_counter=0) then
'работает только когда игра запущена
if (time_counter>0) then
if (it_is_night=true) then
'тут всё что происходит ночью
if(time_counter=night_time) then
'в самом начале ночи
AddQ "/me .....Hacтaлa HOЧЬ..."
' AddQ "/me зaйдитe в пpoфиль бoтa " & BotVars.Username & " чтoбы пocмoтpeть кoмaнды игpы."
Alive_players
'AddQ "/me <MAFIA> - whisper(/w) " & BotVars.Username & " '.vote NUM' to vote for killing of player number NUM."
'AddQ "/me <MAFIA> - whisper(/w) mafiabot '.boss' to find mafia-boss"
'AddQ "/me <MANIAC> - whisper(/w) mafiabot '.kill NUM' to kill player number NUM."
'AddQ "/me <DOCTOR> - whisper(/w) mafiabot '.save NUM' to protect player number NUM."
end if
if((time_counter-1) Mod 60 = 0) then
AddQ "/me :" & time_counter-1 & "ceк"
end if
if((time_counter-1) Mod 30 = 0) then
'каждые 30 сек ночью
no_end=false 'если false то надо закончить раунд а если true то не надо
for i=1 to (people_quantity)
if ((people(i,1)=2 AND people(i,3)=0) OR (people(i,1)=1 AND people(i,2)=1 AND people(i,10)=0) OR (people(i,1)=3 AND people(i,10)=0) ) then
'если кто-то из мафии не голосовал, доктор не защищал, маньяк не убивал
no_end=true
end if
next
if (no_end=false) then
time_counter=1
no_end=true
end if
end if
else
'тут всё что происходит днём
if(time_counter=day_time) then
'в самом начале дня
AddQ "/me .....Hacтaл ДEHЬ..."
' AddQ "/me зaйдитe в пpoфиль бoтa " & BotVars.Username & " чтoбы пocмoтpeть кoмaнды игpы."
Alive_players
'AddQ "/me <ALL> - tell '.vote NUM' to vote for the death penalty of player number NUM."
'AddQ "/me <LAWYER> - whisper(/w) mafiabot '.save NUM' to save player NUM from death penalty."
'AddQ "/me <POLICEMAN> - whisper(/w) mafiabot '.check NUM' to check player number NUM if he is criminal."
end if
if((time_counter-1) Mod 60 = 0) then
'каждые 60 сек
AddQ "/me " & time_counter-1 & "ceк"
end if
if((time_counter-1) Mod 30 = 0) then
'каждые 30 сек днём
no_end=false 'если false то надо закончить раунд а если true то не надо
for i=1 to (people_quantity)
if ((people(i,1)>0 AND people(i,3)=0) ) then
'если кто-то не голосовал
no_end=true
end if
next
if (no_end=false) then
time_counter=1
no_end=true
end if
end if
end if
time_counter=time_counter-1
else
if (it_is_night=true) then
'когда кончается ночь
Vote_result
Death_results
Victory_test
time_counter=day_time
it_is_night=false
else
'когда кончается день
Vote_result
Death_results
Victory_test
time_counter=night_time
it_is_night=true
end if
end if
end if
'/////////////////pereconnect
if ((reconnectTimer=20) AND (ssc.IsOnline()=false)) then
AddChat vbGreen, "Connect now"
command botvars.username, "/cq", True
Stop_game
Connect()
Connect()
end if
if ((ssc.IsOnline()=false) AND (reconnectTimer=0)) then
reconnectTimer=1200
else
if (ssc.IsOnline()=true) then
reconnectTimer=0
end if
end if
if (reconnectTimer>0) then
if ((reconnectTimer mod 100 )=0) then
AddChat vbGreen, reconnectTimer
end if
reconnectTimer=reconnectTimer-1
end if
'////////////промежуточное сообщение
if (game_active=false) then
if (idle_message_counter=0) then
Addq idle_message
idle_message_counter=idle_time
end if
if (idle_message_counter>0) then
idle_message_counter=idle_message_counter-1
end if
end if
if (Err.Number>0) then
AddChat vbGreen, "error in scTimer_Timer " & Err.Number
Addq "/w " & master & " error in scTimer_Timer " & Err.Number
end if
On Error GoTo 0
End Sub
'////////////////////////////////////////////////////////////////////////////////
'// Executes after the user presses ENTER in the Send box on the bot. Text will always be processed by the bot and sent to battle.net before arriving here.
Sub Event_PressedEnter(Text)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_PressedEnter " & Err.Number
Addq "/w " & master & " error in Event_PressedEnter " & Err.Number
end if
On Error GoTo 0
End Sub
'///////////////////////////////////////////////////////////////////////////////////
'// Executes when the bot recieves a Profile return from the server. KeyName will be one of the following:
' Profile\Sex
' Profile\Location
' Profile\Description
'// KeyValue will contain the value of that profile key as a string.
Sub Event_KeyReturn(KeyName, KeyValue)
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_KeyReturn " & Err.Number
Addq "/w " & master & " error in Event_KeyReturn " & Err.Number
end if
On Error GoTo 0
End Sub
'////////////////////////////////////////////////////////////////////////////////////
'// Executes when the bot is closed. You can use this sub to write things to disk before the bot shuts down.
Sub Event_Close()
On Error Resume Next
if (Err.Number>0) then
AddChat vbGreen, "error in Event_Close " & Err.Number
Addq "/w " & master & " error in Event_Close " & Err.Number
end if
On Error GoTo 0
End Sub