Тема: mafia для pvpgn
Показать сообщение отдельно
Непрочитано 06.02.2011, 22:15   #1
Пользователь

Автор темы (Топик Стартер) mafia для pvpgn

может немного не в тему форума , но именно на вашем сайте я нахожу все ответы на вопросы ...
так вот поставил стелсбота и скрипт на мафию .. все вроде хорошо, но бот не реагирует на команды .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
UNKNOWN_Nsk вне форума Ответить с цитированием