Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   WarCraft III (https://forum.zone-game.info/forumdisplay.php?f=96)
-   -   mafia для pvpgn (https://forum.zone-game.info/showthread.php?t=12434)

UNKNOWN_Nsk 06.02.2011 22:15

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



Текущее время: 14:33. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot