diff --git a/CHANGELOG.md b/CHANGELOG.md index d8124dc..98d631f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## 1.0b14 + +Добавлено: + - Плагин `BanIP`. Расширены команды `/offban`, `/ioffban`, `/ban`, `/sban` и `/iban`. Теперь если ввести: `/offban [Nick_Name] [Причина] 1` ("1" последним параметром) - то после бана аккаунта игрок будет забанен и по IP. Также работают остальные команды: `/ioffban [Nick_Name] [Причина] 1`, `/ban [ID] [Причина] 1`, `/sban [ID] [Причина] 1` и `/iban [ID] [Причина] 1`. + - Модуль `IgnoreList`. Добавлены команды `/ignore [Nick_Name]` и `/unignore [Nick_Name]` для временного добавления и удаления игроков из ИгнорЛиста. + +Исправлено: + - Исправлена проблема, когда после сохранения настроек при выставленной раскладке клавиатуры не по-умолчанию вылетала ошибка "... is not a valid key name". + - Плагин `TakeNearby`. Исправлена проблема, когда скрипт зацикливался на одном игроке, если тот отходил. Также теперь оружие забирается за 1 раз, а не по 2 раза, как раньше. + - Улучшена работа скрипта автоматического обновления AdminHelper'а. + - Из плагина `AutoConnect` удалена опция "Имеются проблемы с подключением к 10-15 серверам" в связи с уходом проблемы. + ## 1.0b13 Добавлено: diff --git a/GUI.ahk b/GUI.ahk index 8089b59..bbf6a7b 100644 --- a/GUI.ahk +++ b/GUI.ahk @@ -8,6 +8,8 @@ #Include scripts\ConfigReader.ahk +DetectHiddenWindows, On + class AdminHelperGui { @@ -276,14 +278,26 @@ class AdminHelperGui Return } + changeKeyboardLayoutToDefault() + { + RegRead, DefaultKeyboardLayout , HKEY_CURRENT_USER, Keyboard Layout\Preload, 1 + DefaultKeyboardLayout := DllCall("LoadKeyboardLayout", "Str", DefaultKeyboardLayout , "Int", 1) + PostMessage, 0x50, 0, %DefaultKeyboardLayout%, , ahk_id %A_ScriptHWND% + SendMessage, 0x50,, %DefaultKeyboardLayout%, , ahk_id %A_ScriptHWND% + + Return + } + dataUpdate() { Global Config + this.changeKeyboardLayoutToDefault() + For ModuleName, ModuleVariableObject in Config["modules"] { For ModuleVariableName, ModuleVariableData in ModuleVariableObject { ModuleVariableInputName = GuiModule%ModuleName%%ModuleVariableName%Input - GuiControlGet, %ModuleVariableInputName% + GuiControlGet, %ModuleVariableInputName%, Settings: ModuleVariableInputValue := %ModuleVariableInputName% if (SubStr(ModuleVariableName, -3) <> "File") { @@ -295,7 +309,7 @@ class AdminHelperGui } For PluginName, PluginVariableObject in this.plugins { - GuiControlGet, GuiPlugin%PluginName%Status + GuiControlGet, GuiPlugin%PluginName%Status, Settings: this.plugins[PluginName]["Status"] := GuiPlugin%PluginName%Status } @@ -303,7 +317,7 @@ class AdminHelperGui For PluginName, PluginVariableObject in Config["plugins"] { For PluginVariableName, PluginVariableData in PluginVariableObject { PluginVariableInputName = GuiPlugin%PluginName%%PluginVariableName%Input - GuiControlGet, %PluginVariableInputName% + GuiControlGet, %PluginVariableInputName%, Settings: PluginVariableInputValue := %PluginVariableInputName% if (SubStr(PluginVariableName, -3) <> "File") { @@ -314,7 +328,7 @@ class AdminHelperGui } } - GuiControlGet, GuiAdminLVLInput + GuiControlGet, GuiAdminLVLInput, Settings: Config["AdminLVL"] := GuiAdminLVLInput this.pluginsStatusesSave() @@ -405,7 +419,7 @@ class AdminHelperGui { FileDelete, .cache\UserBinds.ahk.tmp - GuiControlGet, GuiUserBindsInput + GuiControlGet, GuiUserBindsInput, Settings: FileAppend, %GuiUserBindsInput%, .cache\UserBinds.ahk.tmp FileCopy, .cache\UserBinds.ahk.tmp, UserBinds.ahk, 1 FileDelete, .cache\UserBinds.ahk.tmp diff --git a/Meta.ini b/Meta.ini index 3d278d4..89edffa 100644 --- a/Meta.ini +++ b/Meta.ini @@ -2,10 +2,10 @@ Name=AdminHelper Description=AHK- SAMP-RP Author=Danil Valov -Version=1.0b13 -LastUpdate=Mar 28, 2016 +Version=1.0b14 +LastUpdate=Mar 29, 2016 [Options] AdminLVL=5|LVL ( , lvl', ) -EnabledPlugins=AutoHP,BanIP,Connect,GetIP,GiveGuns,Hbj,LastPM,LastSMS,PMToLastMuteOrDM,ReconLastPM,ReconLastWarning,ReconViewer,SetHPs,TagName,TakeNearby,TP,Uninvites| +EnabledPlugins=AutoHP,BanIP,Connect,GetIP,GiveGuns,Hbj,LastPM,LastSMS,PMToLastMuteOrDM,ReconLastPM,ReconLastWarning,ReconViewer,SetHPs,TakeNearby,TP,Uninvites| RepositoryUrl=https://api.github.com/repos/danilvalov/adminhelper-for-samp-rp/releases/latest| diff --git a/README.md b/README.md index a339f41..e962582 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,14 @@ * **IgnoreList** - модуль исключает в плагинах игроков, которые не должны добавляться в список телепортации, у которых не должно изыматься оружие через `/giveguns`, `/hbjs` и т.д., т.е. "список неприкасамых" - в него по-умолчанию входят все Администраторы SAMP-RP (список игроков в игнор-листе можно посмотреть/изменить в Настройках скрипта (двойной клик по иконке AHK в трее)). + Добавляет также поддержку следующих команд: + + - `/ignore [Nick_Name]` - временно добавить игрока в ИгнорЛист. + + - `/unignore [Nick_Name]` - временно удалить игрока из ИгнорЛиста. + + Бывают ситуации, когда на МП нужно пропускать при выдаче оружия/объектов/хп какого-то игрока (например, если он - организатор). Или наоборот, нужно временно убрать Администратора из ИгнорЛиста. Эти команды добавляют/удаляют из ИгнорЛиста игроков до перезапуска AdminHelper'а. Если вы хотите добавить какого-то игрока в ИгнорЛист на постоянной основе - воспользуйтесь окном Настроек AdminHelper'а и вкладкой "ИгнорЛист". + * **JSON** - добавление поддержки обработки JSON-файлов в скрипте (требуется для получения информации о местоположении игрока по его IP). @@ -151,9 +159,19 @@ - Забанить по IP последнего забаненного игрока + автоматическая проверка на наличие игроков с таким же IP онлайн (с 4-го лвла). По-умолчанию, работает на сочетании "Alt+Numpad9" - можно поменять в Настройках скрипта (двойной клик по иконке AHK в трее). - - `/banipn [nick]` - забанить по IP игрока с указанным ником. + - `/banipn [Nick_Name]` - забанить по IP игрока с указанным ником. + + - `/unbanipn [Nick_Name]` - разбанить IP игрока с указанным ником. + + - `/offban [Nick_Name] [Причина] 1` - игрок будет забанен в оффе на месяц сразу с баном по IP. + + - `/ioffban [Nick_Name] [Причина] 1` - игрок будет забанен в оффе до 2038 года сразу с баном по IP. - - `/unbanipn [nick]` - разбанить IP игрока с указанным ником. + - `/ban [ID] [Причина] 1` - игрок будет забанен на месяц сразу с баном по IP. + + - `/sban [ID] [Причина] 1` - игрок будет тихо забанен на месяц сразу с баном по IP. + + - `/iban [ID] [Причина] 1` - игрок будет забанен до 2038 года сразу с баном по IP. * **GetIP** - плагин для работы с IP-адресами игроков. @@ -240,11 +258,16 @@ ### Мероприятия * **День Z** - в штат попал вирус, превращающий людей в зомби. Цель людей - спастись. Цель зомби - убивать живых. Цель гос.служб - ловить зомби и привозить их в больницы. Главная цель гос.служб - найти нулевого пациента (который заражает людей). + После запуска МП - нулевой пациент, за которым мы следим, при приближении к живых людям - заражает их, после чего они тоже прекращаются в Зомби. + Активация: `/event dayz [id_нулевого_пациента]`. + * **Парашюты** - автоматически телепортирует игроков, присылающих смс, к себе, при этом выдавая парашют. + Взлетаем повыше (например, над площадью у Мэрии), запускаем МП и объявляем: "/o Желающие попрыгать с парашютом на площадь у Мэрии - кидаем '+' в смс" (пример). + Активация: `/event parachute`. @@ -272,4 +295,3 @@ * `CheckerID` - плагин, полностью заменяющий собейтовский чекер (данная возможность уже находится уже реализована и находится в тестировании). * `ChatID` - плагин, отображающий автоматически иды игроков рядом с их никами в чате и в килллисте (данная возможность уже находится уже реализована и находится в тестировании). * `AirBrake` - плагин, позволяющий летать (данная возможность уже реализована и находится в тестировании). - * `TakeNearby` - плагин, позволяющий отображать оружие/нарко у всех игроков, находящихся поблизости. diff --git a/Updater.ahk b/Updater.ahk index 264f6e5..39c500c 100644 --- a/Updater.ahk +++ b/Updater.ahk @@ -44,6 +44,26 @@ class Updater Return } + RemoveOldVersion() { + Loop, Files, % UpdateDirPath "\*.*", FD + { + if A_LoopFileAttrib contains D + { + if A_LoopFileName not contains .cache + { + FileRemoveDir, %A_LoopFileName%, 1 + } + } else { + if A_LoopFileName not contains UserBinds.ahk,UninvitesList.ini + { + FileDelete, %A_LoopFileName% + } + } + } + + Return + } + Update() { FullPathToProjectDir := SubStr(A_ScriptFullPath, 1, -StrLen(".cache\Updater.ahk")) @@ -60,6 +80,8 @@ class Updater UrlDownloadToFile, % Repository_Data["zipball_url"], .cache\update.zip + this.RemoveOldVersion() + Unz(FullPathToProjectDir ".cache\update.zip", FullPathToProjectDir ".cache\updateDir") this.UpdateDir(FullPathToProjectDir) diff --git a/events/DayZ/Funcs.ahk b/events/DayZ/Funcs.ahk index eccdf1b..cfc385d 100644 --- a/events/DayZ/Funcs.ahk +++ b/events/DayZ/Funcs.ahk @@ -75,6 +75,15 @@ class DayZEvent Return } + if (NearestPlayer.ID != this.__zero) { + this.__zero := NearestPlayer.ID + this.__step := 1 + + addMessageToChatWindow("{FF0000} " NearestPlayer.NAME "[" this.__zero "].") + + Return + } + if (NearestPlayer.HP <= 0) { this.__nearestPlayer := {} this.__nearestPlayer["ID"] := -1 diff --git a/libraries/HotkeyParser.ahk b/libraries/HotkeyParser.ahk deleted file mode 100644 index 8f0362a..0000000 --- a/libraries/HotkeyParser.ahk +++ /dev/null @@ -1,571 +0,0 @@ -/* -HParse() -© Avi Aryan - -5th Revision - 8/7/14 -========================================================================= -Extract Autohotkey hotkeys from user-friendly shortcuts reliably and V.V -========================================================================= -========================================== -EXAMPLES - Pre-Runs -========================================== - -msgbox % Hparse("Cntrol + ass + S", false) ;returns As 'ass' is out of scope and RemoveInvaild := false -msgbox % Hparse("Contrl + At + S") ;returns ^!s -msgbox % Hparse("^!s") ;returns ^!s as the function-feed is already in Autohotkey format. -msgbox % Hparse("LeftContrl + X") ;returns Lcontrol & X -msgbox % Hparse("Contrl + Pageup + S") ;returns As the hotkey is invalid -msgbox % HParse("PagUp + Ctrl", true) ;returns ^PgUp as ManageOrder is true (by default) -msgbox % HParse("PagUp + Ctrl", true, false) ;returns as ManageOrder is false and hotkey is invalid -msgbox % Hparse("Ctrl + Alt + Ctrl + K") ;returns as two Ctrls are wrong -msgbox % HParse("Control + Alt") ;returns ^Alt and NOT ^! -msgbox % HParse("Ctrl + F1 + Nmpd1") ;returns As the hotkey is invalid -msgbox % HParse("Prbitscreen + f1") ;returns PrintScreen & F1 -msgbox % HParse("Prbitscreen + yyy") ;returns PrintScreen As RemoveInvalid is enabled by default. -msgbox % HParse("f1+ browser_srch") ;returns F1 & Browser_Search -msgbox % HParse("Ctrl + joy1") ;returns Ctrl & Joy1 -msgbox % Hparse("pagup & paegdown") ;returns PgUp & PgDn -MsgBox % HParse("Ctrl + printskreen", 1, 1, 1) ; SEND Mode - on returns ^{printscreen} -msgbox % Hparse_rev("^!s") ;returns Ctrl+Alt+S -msgbox % Hparse_rev("Pgup & PgDn") ;returns Pageup & PgDn -*/ - -;################################################################### -;PARAMETERS - HParse() [See also Hparse_Rev() below] -;------------------------------- -;HParse(Hotkey, RemoveInvalid, ManageOrder, sendMd) -;################################################################### - -;• Hotkey - The user shortcut such as (Control + Alt + X) to be converted - -;• RemoveInvalid(true) - Remove Invalid entries such as the 'ass' from (Control + ass + S) so that the return is ^s. When false the function will return when an -; invalid entry is found. - -;• ManageOrder(true) - Change (X + Control) to ^x and not x^ so that you are free from errors. If false, a value is returned when the hotkey is found un-ordered. - -;+ SendMd(true) - returns ^{printscreen} instead of ^printscreen so that the hotkey properly works with the Send command - -HParse(Hotkey, RemoveInvaild = true, ManageOrder = true, sendMd=false) -{ - -firstkey := Substr(Hotkey, 1, 1) -if firstkey in ^,!,+,# - return, Hotkey - -loop,parse,Hotkey,+-&,%a_space% -{ - if (Strlen(A_LoopField) != 1) - { - parsed := Hparse_LiteRegexM(A_LoopField) - if sendMd && (StrLen(parsed)>1) && (Instr(parsed, "vk") != 1) - parsed := "{" parsed "}" - If !(RemoveInvaild) - { - IfEqual,parsed - { - Combo = - break - } - else - Combo .= " & " . parsed - } - else - IfNotEqual,parsed - Combo .= " & " . parsed - } - else - Combo .= " & " . A_LoopField -} - -non_hotkey := 0 -IfNotEqual, Combo ;Convert the hotkey to perfect format -{ - StringTrimLeft,Combo,Combo,3 - loop,parse,Combo,&,%A_Space% - { - if A_Loopfield not in ^,!,+,# - non_hotkey+=1 - } -;END OF LOOP - if (non_hotkey == 0) - { - StringRight,rightest,Combo,1 - StringTrimRight,Combo,Combo,1 - IfEqual,rightest,^ - rightest = Ctrl - else IfEqual,rightest,! - rightest = Alt - ELSE IfEqual,rightest,+ - rightest = Shift - else rightest = LWin - Combo := Combo . Rightest - } -;Remove last non - IfLess,non_hotkey,2 - { - IfNotInString,Combo,Joy - { - StringReplace,Combo,Combo,%A_Space%&%A_Space%,,All - temp := Combo - loop,parse,temp - { - if A_loopfield in ^,!,+,# - { - StringReplace,Combo,Combo,%A_loopfield% - _hotkey .= A_loopfield - } - } - Combo := _hotkey . Combo - - If !(ManageOrder) ;ManageOrder - IfNotEqual,Combo,%temp% - Combo = - - temp := "^!+#" ;just reusing the variable . Checking for Duplicates Actually. - IfNotEqual,Combo - { - loop,parse,temp - { - StringGetPos,pos,Combo,%A_loopfield%,L2 - IF (pos != -1){ - Combo = - break - } - } - } - ;End of Joy - } - else ;Managing Joy - { - StringReplace,Combo,Combo,^,Ctrl - StringReplace,Combo,Combo,!,Alt - StringReplace,Combo,Combo,+,Shift - StringReplace,Combo,Combo,#,LWin - StringGetPos,pos,Combo,&,L2 - if (pos != -1) - Combo = - } -} -else -{ - StringGetPos,pos,Combo,&,L2 - if (pos != -1) - Combo = -} -} - -return, Combo -} - -;########################################################################################### -;Hparse_rev(Keycombo) -; Returns the user displayable format of Ahk Hotkey -;########################################################################################### - -HParse_rev(Keycombo){ - - if Instr(Keycombo, "&") - { - loop,parse,Keycombo,&,%A_space%%A_tab% - toreturn .= A_LoopField " + " - return Substr(toreturn, 1, -3) - } - Else - { - StringReplace, Keycombo, Keycombo,^,Ctrl& - StringReplace, Keycombo, Keycombo,#,Win& - StringReplace, Keycombo, Keycombo,+,Shift& - StringReplace, Keycombo, Keycombo,!,Alt& - loop,parse,Keycombo,&,%A_space%%A_tab% - toreturn .= ( Strlen(A_LoopField)=1 ? Hparse_StringUpper(A_LoopField) : A_LoopField ) " + " - return Substr(toreturn, 1, -3) - } -} - -Hparse_StringUpper(str){ - StringUpper, o, str - return o -} - -;------------------------------------------------------ -;SYSTEM FUNCTIONS : NOT FOR USER'S USE -;------------------------------------------------------ - -Hparse_LiteRegexM(matchitem, primary=1) -{ - -regX := Hparse_ListGen("RegX", primary) -keys := Hparse_Listgen("Keys", primary) -matchit := matchitem - -loop,parse,Regx,`r`n, -{ - curX := A_LoopField - matchitem := matchit - exitfrombreak := false - - loop,parse,A_LoopField,* - { - if (A_index == 1) - if (SubStr(matchitem, 1, 1) != A_LoopField){ - exitfrombreak := true - break - } - - if (Hparse_comparewith(matchitem, A_loopfield)) - matchitem := Hparse_Vanish(matchitem, A_LoopField) - else{ - exitfrombreak := true - break - } - } - - if !(exitfrombreak){ - linenumber := A_Index - break - } -} - -IfNotEqual, linenumber -{ - StringGetPos,pos1,keys,`n,% "L" . (linenumber - 1) - StringGetPos,pos2,keys,`n,% "L" . (linenumber) - return, Substr(keys, (pos1 + 2), (pos2 - pos1 - 1)) -} -else - return Hparse_LiteRegexM(matchit, 2) -} -; Extra Functions ----------------------------------------------------------------------------------------------------------------- - -Hparse_Vanish(matchitem, character){ - StringGetPos,pos,matchitem,%character%,L - StringTrimLeft,matchitem,matchitem,(pos + 1) - return, matchitem -} - -Hparse_comparewith(first, second) -{ -if first is Integer - IfEqual,first,%second% - return, true - else - return, false - -IfInString,first,%second% - return, true -else - return, false -} - -;###################### DANGER ################################ -;SIMPLY DONT EDIT BELOW THIS . MORE OFTEN THAN NOT, YOU WILL MESS IT. -;################################################################### -Hparse_ListGen(what,primary=1){ -if (primary == 1) -{ -IfEqual,what,Regx -Rvar = -( -L*c*t -r*c*t -l*s*i -r*s*i -l*a*t -r*a*t -S*p*c -C*t*r -A*t -S*t -W*N -t*b -E*r -E*s*c -B*K -D*l -I*S -H*m -E*d -P*u -p*d -l*b*t -r*b*t -m*b*t -up -d*n -l*f -r*t -F*1 -F*2 -F*3 -F*4 -F*5 -F*6 -F*7 -F*8 -F*9 -F*10 -F*11 -F*12 -N*p*Do -N*p*D*v -N*p*M*t -N*p*d*Ad -N*p*S*b -N*p*E*r -s*l*k -c*l -n*l*k -p*s -c*t*b -pa*s -b*r*k -x*b*1 -x*b*2 -z*z*z*z*callmelazybuthtisisaworkaround -) -;==================================================== -;# Original return values below (in respect with their above positions, dont EDIT) -IfEqual,what,Keys -Rvar = -( -LControl -RControl -LShift -RShift -LAlt -RAlt -space -^ -! -+ -# -Tab -Enter -Escape -Backspace -Delete -Insert -Home -End -PgUp -PgDn -LButton -RButton -MButton -Up -Down -Left -Right -F1 -F2 -F3 -F4 -F5 -F6 -F7 -F8 -F9 -F10 -F11 -F12 -NumpadDot -NumpadDiv -NumpadMult -NumpadAdd -NumpadSub -NumpadEnter -ScrollLock -CapsLock -NumLock -PrintScreen -CtrlBreak -Pause -Break -XButton1 -XButton2 -A_lazys_workaround -) -} -else -{ -;here starts the second preference list. -IfEqual,what,Regx -Rvar= -( -N*p*0 -N*p*1 -N*p*2 -N*p*3 -N*p*4 -N*p*5 -N*p*6 -N*p*7 -N*p*8 -N*p*9 -F*13 -F*14 -F*15 -F*16 -F*17 -F*18 -F*19 -F*20 -F*21 -F*22 -F*23 -F*24 -N*p*I*s -N*p*E*d -N*p*D*N -N*p*P*D -N*p*L*f -N*p*C*r -N*p*R*t -N*p*H*m -N*p*Up -N*p*P*U -N*p*D*l -J*y*1 -J*y*2 -J*y*3 -J*y*4 -J*y*5 -J*y*6 -J*y*7 -J*y*8 -J*y*9 -J*y*10 -J*y*11 -J*y*12 -J*y*13 -J*y*14 -J*y*15 -J*y*16 -J*y*17 -J*y*18 -J*y*19 -J*y*20 -J*y*21 -J*y*22 -J*y*23 -J*y*24 -J*y*25 -J*y*26 -J*y*27 -J*y*28 -J*y*29 -J*y*30 -J*y*31 -J*y*32 -B*_B*k -B*_F*r -B*_R*e*h -B*_S*p -B*_S*c -B*_F*t -B*_H*m -V*_M*e -V*_D*n -V*_U -M*_N*x -M*_P -M*_S*p -M*_P*_P -L*_M*l -L*_M*a -L*_A*1 -L*_A*2 - -) -IfEqual,what,keys -Rvar= -( -Numpad0 -Numpad1 -Numpad2 -Numpad3 -Numpad4 -Numpad5 -Numpad6 -Numpad7 -Numpad8 -Numpad9 -F13 -F14 -F15 -F16 -F17 -F18 -F19 -F20 -F21 -F22 -F23 -F24 -NumpadIns -NumpadEnd -NumpadDown -NumpadPgDn -NumpadLeft -NumpadClear -NumpadRight -NumpadHome -NumpadUp -NumpadPgUp -NumpadDel -Joy1 -Joy2 -Joy3 -Joy4 -Joy5 -Joy6 -Joy7 -Joy8 -Joy9 -Joy10 -Joy11 -Joy12 -Joy13 -Joy14 -Joy15 -Joy16 -Joy17 -Joy18 -Joy19 -Joy20 -Joy21 -Joy22 -Joy23 -Joy24 -Joy25 -Joy26 -Joy27 -Joy28 -Joy29 -Joy30 -Joy31 -Joy32 -Browser_Back -Browser_Forward -Browser_Refresh -Browser_Stop -Browser_Search -Browser_Favorites -Browser_Home -Volume_Mute -Volume_Down -Volume_Up -Media_Next -Media_Prev -Media_Stop -Media_Play_Pause -Launch_Mail -Launch_Media -Launch_App1 -Launch_App2 - -) -} -;<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -return, Rvar -} \ No newline at end of file diff --git a/modules/HotKeyRegister/Funcs.ahk b/modules/HotKeyRegister/Funcs.ahk index 1df92c1..f4d3692 100644 --- a/modules/HotKeyRegister/Funcs.ahk +++ b/modules/HotKeyRegister/Funcs.ahk @@ -5,8 +5,8 @@ HotKeyRegister(HotKey, Callback) { - if (HotKey && StrLen(HotKey) && Hparse(HotKey, false)) { - Hotkey, % Hparse(HotKey, false), % Callback + if (HotKey && StrLen(HotKey)) { + Hotkey, % HotKey, % Callback } Return diff --git a/modules/IgnoreList/Funcs.ahk b/modules/IgnoreList/Funcs.ahk index 44c50eb..c0da70b 100644 --- a/modules/IgnoreList/Funcs.ahk +++ b/modules/IgnoreList/Funcs.ahk @@ -7,6 +7,16 @@ class IgnoreList { _ignoreList := [] + __hasValueInArray(Array, Value) + { + for Key, Val in Array { + if (Val = Value) { + Return Key + } + } + Return 0 + } + ignoreListRead() { Global Config @@ -51,10 +61,100 @@ class IgnoreList Return } + + getNicksFromData(Data) + { + Nicks := [] + + Loop, % (Data.MaxIndex() - 1) + { + DataValue := Data[A_Index + 1] + + NickName := RegExReplace(DataValue, "[^a-zA-Z0-9\_]", "") + + if (StrLen(NickName) && NickName = Data[2]) { + UserId := RegExReplace(DataValue, "[^0-9]", "") + + if (StrLen(UserId) && StrLen(UserId) >= 0 && StrLen(UserId) <= 999 && UserId = NickName) { + hardUpdateOScoreboardData() + + NickName := getPlayerNameById(UserId) + + if (!NickName) { + addMessageToChatWindow("{FF0000} ID " UserId " .") + + Continue + } + + Nicks.Insert(NickName) + } else { + if (StrLen(NickName) < 3 || StrLen(NickName) > 20) { + addMessageToChatWindow("{FF0000} : " NickName ".") + + Continue + } + + Nicks.Insert(NickName) + } + } + } + + Return Nicks + } + + add(Data) + { + addMessageToChatWindow("{FFFF00} :") + + NickNames := this.getNicksFromData(Data) + + Loop, % NickNames.MaxIndex() + { + NickName := NickNames[A_Index] + + if (this.__hasValueInArray(this._ignoreList, NickName)) { + addMessageToChatWindow("{FF0000} " NickName " , .. .") + + Continue + } + + this._ignoreList.Insert(NickNames[A_Index]) + addMessageToChatWindow("{00D900} " NickName) + } + + Return + } + + remove(Data) + { + addMessageToChatWindow("{FFFF00} :") + + NickNames := this.getNicksFromData(Data) + + Loop, % NickNames.MaxIndex() + { + NickName := NickNames[A_Index] + NickNameIndex := this.__hasValueInArray(this._ignoreList, NickName) + + if (!NickNameIndex) { + addMessageToChatWindow("{FF0000} " NickName " .") + + Continue + } + + this._ignoreList.RemoveAt(NickNameIndex) + addMessageToChatWindow("{00D900} " NickName) + } + + Return + } } IgnoreList := new IgnoreList() +CMD.commands["/ignore"] := "IgnoreList.add" +CMD.commands["/unignore"] := "IgnoreList.remove" + checkInIgnoreList(PlayerNick) { Return IgnoreList.check(PlayerNick) diff --git a/modules/IgnoreList/Meta.ini b/modules/IgnoreList/Meta.ini index a82bf21..15e5c92 100644 --- a/modules/IgnoreList/Meta.ini +++ b/modules/IgnoreList/Meta.ini @@ -7,7 +7,7 @@ LastUpdate=Mar 20, 2016 [Config] RequiredLibraries=SAMP-UDF-Ex -RequiredModules= +RequiredModules=CMD AdminLVL=1 [Options] diff --git a/plugins/AutoConnect/Funcs.ahk b/plugins/AutoConnect/Funcs.ahk index 3159361..8b84e45 100644 --- a/plugins/AutoConnect/Funcs.ahk +++ b/plugins/AutoConnect/Funcs.ahk @@ -17,7 +17,6 @@ class AutoConnect _nickName := "" _autoConnectOnStartup := 0 _saveChatlog := 0 - _problemConnection := 0 __stringJoin(Array, Delimiter = ";") { @@ -164,7 +163,6 @@ class AutoConnect IniRead, LocalNickName, % this._configFile, Connect, NickName, % this._nickName IniRead, LocalServerIP, % this._configFile, Connect, ServerIP, % this._serverIP IniRead, LocalAutoConnectOnStartup, % this._configFile, Connect, AutoConnectOnStartup, % this._autoConnectOnStartup - IniRead, LocalProblemConnection, % this._configFile, Connect, ProblemConnection, % this._problemConnection IniRead, LocalSaveChatlog, % this._configFile, Connect, SaveChatlog, % this._saveChatlog this._sampFile := LocalSAMPFile @@ -172,7 +170,6 @@ class AutoConnect this._nickName := LocalNickName this._serverIP := LocalServerIP this._autoConnectOnStartup := LocalAutoConnectOnStartup - this._problemConnection := LocalProblemConnection this._saveChatlog := LocalSaveChatlog Return @@ -185,7 +182,6 @@ class AutoConnect IniWrite, % this._nickName, % this._configFile, Connect, NickName IniWrite, % this._serverIP, % this._configFile, Connect, ServerIP IniWrite, % this._autoConnectOnStartup, % this._configFile, Connect, AutoConnectOnStartup - IniWrite, % this._problemConnection, % this._configFile, Connect, ProblemConnection IniWrite, % this._saveChatlog, % this._configFile, Connect, SaveChatlog Return @@ -202,9 +198,9 @@ class AutoConnect this.getConfig() - NameServersList := [] + Local NameServersList := [] - LocalServerIndex := 1 + Local LocalServerIndex := 1 Loop, % this._serversList.MaxIndex() { @@ -244,10 +240,7 @@ class AutoConnect Gui, AutoConnect:Add, Checkbox, w320 y+10 x10 vAutoConnectSaveChatlog, GuiControl, , AutoConnectSaveChatlog, % this._saveChatlog - Gui, AutoConnect:Add, Checkbox, w320 y+10 x10 vAutoConnectProblemConnection, 10-15 - GuiControl, , AutoConnectProblemConnection, % this._problemConnection - - Gui, AutoConnect:Add, Button, x200 y+15 gAutoConnectConnect, % !checkHandles() ? "" : "" + Gui, AutoConnect:Add, Button, x200 y+25 gAutoConnectConnect, % !checkHandles() ? "" : "" Gui, AutoConnect:Add, Button, x+10 gAutoConnectClose, if (!Force && this._autoConnectOnStartup && this.connect(Startup)) { @@ -266,7 +259,6 @@ class AutoConnect GuiControlGet, AutoConnectNickName GuiControlGet, AutoConnectServerName GuiControlGet, AutoConnectOnStartup - GuiControlGet, AutoConnectProblemConnection GuiControlGet, AutoConnectSaveChatlog AutoConnectNickName := Trim(AutoConnectNickName) @@ -279,7 +271,6 @@ class AutoConnect this._nickName := AutoConnectNickName this._serverIP := AutoConnectServerIP this._autoConnectOnStartup := AutoConnectOnStartup - this._problemConnection := AutoConnectProblemConnection this._saveChatlog := AutoConnectSaveChatlog LocalServer := this._serverIP @@ -307,24 +298,6 @@ class AutoConnect ServerIndexByIP := this.getServerIndexByIP(this._serverIP) - if (this._problemConnection && ServerIndexByIP && ServerIndexByIP - 0 >= 10) { - LocalServer := this._serversList[9].ip - - RunWait, %LocalSAMPFile% -c -h%LocalServer%-p7777-n%LocalNickName% - - Sleep 5000 - - this._checkerRunning := 0 - - Chatlog.reader() - - this._checkerRunning := 1 - - Chatlog.startTimer() - } else { - RunWait, %LocalSAMPFile% -c -h%LocalServer%-p7777-n%LocalNickName% - } - Return True } else if (!StrLen(LocalSAMPFile)) { MsgBox, `samp.exe` @@ -338,7 +311,6 @@ class AutoConnect this._nickName := AutoConnectNickName this._serverIP := AutoConnectServerIP this._autoConnectOnStartup := AutoConnectOnStartup - this._problemConnection := AutoConnectProblemConnection this._saveChatlog := AutoConnectSaveChatlog this.saveConfig() @@ -384,6 +356,4 @@ AutoConnectChecker(ChatlogString) Chatlog.checker.Insert("AutoConnectChecker") - - AutoConnect.init() diff --git a/plugins/AutoConnect/Labels.ahk b/plugins/AutoConnect/Labels.ahk index af70e20..eaf280a 100644 --- a/plugins/AutoConnect/Labels.ahk +++ b/plugins/AutoConnect/Labels.ahk @@ -4,7 +4,7 @@ ;; AutoConnectGUIOpen: - AutoConnect.generateGUI(1) + AutoConnect.generateGUI(1, 0) Return diff --git a/plugins/BanIP/Funcs.ahk b/plugins/BanIP/Funcs.ahk index 6c76d2f..afda533 100644 --- a/plugins/BanIP/Funcs.ahk +++ b/plugins/BanIP/Funcs.ahk @@ -5,7 +5,9 @@ class BanIP { - lastBanIP := + lastBanIP := "" + checkAccountIsBanned := 0 + checkAccountIsOffline := 0 nick(Data) { @@ -71,6 +73,73 @@ class BanIP Return } + + banWithBanIP(Data) { + Global Config + + if (Data[4] && StrLen(Data[4]) && Data[4] = "1") { + this.lastBanIP := "" + + Sleep 1200 + + checkAccountIsOffline := 0 + + Chatlog.reader() + + if (this.checkAccountIsOffline = 1) { + Return + } + + if (!this.lastBanIP || !StrLen(this.lastBanIP)) { + Return + } + + sendChatMessage("/banip " this.lastBanIP) + + if (Config["AdminLVL"] >= 4 && Config["plugins"]["BanIP"]["GetIPUsersBoolean"]) { + sendChatMessage("/pgetip 4 " this.lastBanIP) + } + } + + Return + } + + offbanWithBanIP(Data) { + if (Data[4] && StrLen(Data[4]) && Data[4] = "1") { + NickName := RegExReplace(Data[2], "[^a-zA-Z0-9\_]", "") + + if (!NickName || !StrLen(NickName) || NickName != Data[2] || StrLen(NickName) < 3 || StrLen(NickName) > 20) { + Return + } + + Sleep 1200 + + this.checkAccountIsBanned := 0 + + Chatlog.reader() + + if (this.checkAccountIsBanned = 1) { + Return + } + + GetIP.RegGetIP := + GetIP.LastGetIP := + + sendChatMessage("/agetip " NickName) + + Sleep 1200 + + Chatlog.reader() + + if (!GetIP.LastGetIP || !StrLen(GetIP.LastGetIP)) { + Return + } + + sendChatMessage("/banip " GetIP.LastGetIP) + } + + Return + } } BanIP := new BanIP() @@ -78,6 +147,11 @@ BanIP := new BanIP() CMD.commands["banipn"] := "BanIP.nick" CMD.commands["unbanipn"] := "BanIP.nick" +CMD.commands["ban"] := "BanIP.banWithBanIP" +CMD.commands["sban"] := "BanIP.banWithBanIP" +CMD.commands["iban"] := "BanIP.banWithBanIP" +CMD.commands["offban"] := "BanIP.offbanWithBanIP" +CMD.commands["ioffban"] := "BanIP.offbanWithBanIP" BanIPChatlogChecker(ChatlogString) @@ -99,6 +173,14 @@ BanIPChatlogChecker(ChatlogString) BanIP.lastBanIP := LastBanIP } } + + if (InStr(ChatlogString, " ")) { + BanIP.checkAccountIsBanned := 1 + } + + if (InStr(ChatlogString, " !")) { + BanIP.checkAccountIsOffline := 1 + } } Chatlog.checker.Insert("BanIPChatlogChecker") diff --git a/plugins/TakeNearby/Funcs.ahk b/plugins/TakeNearby/Funcs.ahk index 42ae424..0b412ad 100644 --- a/plugins/TakeNearby/Funcs.ahk +++ b/plugins/TakeNearby/Funcs.ahk @@ -12,7 +12,11 @@ class TakeNearby _playersList := [] _currentPlayersList := [] + _step := 1 + start() { + this._step := 1 + this._playersList := NearbyPlayers.get(["/take", "8"]) if (!this._playersList.MaxIndex()) { @@ -71,28 +75,30 @@ class TakeNearby NeededPosition := this.getNeededPosition(DialogText) - if (!NeededPosition) { + if (!NeededPosition || this.step = 2) { SendInput {Esc} - this._currentPlayersList.RemoveAt(1) + this._step := 1 Return False } - showGameText("Take" (this._type = "narko" ? "Narko" : "Guns") " [ID: " this._currentPlayersList[1] "] [Players: " (this._playersList.MaxIndex() - this._currentPlayersList.MaxIndex()) " / " this._playersList.MaxIndex() "]", 1200, 4) - Loop, % (NeededPosition - 2) { SendInput {Down} } SendInput {Enter} + + this._step := 2 } else { if (!this._currentPlayersList.MaxIndex()) { SetTimer, TakeNearbyTimer, Off this._run := 0 + showGameText("Take" (this._type = "narko" ? "Narko" : "Guns") " [ID: " this._currentPlayersList[1] "] [Players: " (this._playersList.MaxIndex() - this._currentPlayersList.MaxIndex()) " / " this._playersList.MaxIndex() "]", 1200, 4) + addMessageToChatWindow("{FFFF00} " (this._type = "narko" ? "" : "") " .") Return @@ -100,6 +106,8 @@ class TakeNearby sendChatMessage("/take " this._currentPlayersList[1]) + this._currentPlayersList.RemoveAt(1) + Return }