Advertisement
Cubed2

BF4 NO-RECOIL

May 24th, 2015
1,576
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.10 KB | None | 0 0
  1. #SingleInstance force
  2. #MaxThreadsPerHotkey 2
  3. #NoEnv
  4. SetBatchLines -1
  5. CoordMode, Mouse, Screen
  6.  
  7. global voice := ComObjCreate("SAPI.SpVoice"), weap, HWND_GUI, HWND_GUNS
  8. voice.rate := -1
  9.  
  10. OnMessage(0x03, "GuiMove")
  11.  
  12. weap := gunarray()
  13.  
  14. Menu, Tray, NoStandard
  15. Menu, Tray, Add, Show Window, ShowWindow
  16. Menu, Tray, Add
  17. Menu, Tray, Add, Exit, Exit
  18. Menu, Tray, Click, 1
  19. Menu, Tray, Default, Show window
  20.  
  21. SetWorkingDir % A_Appdata "\BF4Tools"
  22.  
  23. global Settings := new Settings("settings.ini")
  24. Settings.Read()
  25.  
  26. SetTimer, gamecheck, 500
  27.  
  28. Gui, Add, Button, x118 y4 h70 gSettings hwndHWND_SETTINGSBUTTON, >>
  29.  
  30. Gui, Add, Text, x10 y10, Game:
  31. Gui, Add, Text, x45 y10 w70 vRunningText, Checking..
  32.  
  33. Gui, Add, Text, x10 y30 gToggleNoRecoil, NoRecoil:
  34. Gui, Add, Text, % "x60 y30 w50 gToggleNoRecoil vNoRecoilText c" (Settings.NoRecoil ? "Green" : "Red"), % (Settings.NoRecoil ? "Enabled" : "Disabled")
  35.  
  36. Gui, Add, Button, % "x10 y50 vWeapon gDropDownList w100 gChooseWeapon", % Settings.Weapon
  37. GuiControl, ChooseString, Weapon, % Settings.Weapon
  38. Gui, Show, w150, BF4Tools
  39. Gui, % "-0x20000 +hwnd" RandomString(10) " +Owner"
  40. HWND_GUI := WinExist("BF4Tools")
  41.  
  42. GuiControl, focus, NoRecoil ; have "nothing" in focus
  43.  
  44. Hotkey, % "~*" Settings.NoRecoilHotkey, ToggleNoRecoil
  45. Hotkey, ~*LButton, Fire
  46.  
  47. ShowWindow:
  48. if !WinActive("ahk_id" HWND_GUI)
  49. WinActivate % "ahk_id" HWND_GUI
  50. return
  51.  
  52. ToggleNoRecoil:
  53. Settings["NoRecoil"] := !Settings["NoRecoil"]
  54. Settings.Write("NoRecoil", Settings["NoRecoil"])
  55. if (!Settings["NoRecoil"]) {
  56. SoundPlay, *16
  57. Gui, Font, cRed
  58. GuiControl, Font, NoRecoilText
  59. GuiControl,, NoRecoilText, Disabled
  60. } else {
  61. SoundPlay, *48
  62. Gui, Font, cGreen
  63. GuiControl, Font, NoRecoilText
  64. GuiControl,, NoRecoilText, Enabled
  65. } Gui, Font
  66. return
  67.  
  68. ~F9::
  69. ~F10::
  70. ~F11::
  71. ~F12::
  72. a := Settings["Gun" (RegExReplace(A_ThisHotkey, "[~F]", "") - 8)]
  73. if !a
  74. return
  75. Settings.Write("Weapon", a)
  76. GuiControl 1:, Weapon, % a
  77. saygun(Settings.Weapon)
  78. return
  79.  
  80. #IfWinActive Battlefield 4
  81. ~Right::
  82. ~Left::
  83. Gui Submit, NoHide
  84. RecoilMultiplier := (A_ThisHotkey = "~Right" ? (RecoilMultiplier + 1) : (RecoilMultiplier - 1))
  85. GuiControl,, RecoilMultiplier, % RecoilMultiplier
  86. GuiControl,, MultiplierText, % "x" Round(RecoilMultiplier / 100, 2)
  87. Settings.Write("RecoilMultiplier", RecoilMultiplier)
  88. voice.speak("", 2)
  89. voice.speak((StrLen(RecoilMultiplier) > 2 ? (SubStr(RecoilMultiplier, 1, 1) "." SubStr(RecoilMultiplier, 2, 2)) : ("0." RecoilMultiplier)), 1)
  90. return
  91.  
  92. CheckBox:
  93. Gui Submit, NoHide
  94. Settings.Write("HeavyBarrel", HeavyBarrel)
  95. return
  96.  
  97. DropDownList:
  98. Gui Submit, NoHide
  99. Settings.Write("Weapon", Weapon)
  100. return
  101.  
  102. Fire:
  103. Critical
  104. if !WinActive("Battlefield 4")
  105. return
  106. for x, b in weap
  107. for a, y in b
  108. if (a = Settings.Weapon)
  109. typ := x, break
  110. mult := weap[typ, Settings.Weapon, "FSM"]
  111. rec_up := weap[typ, Settings.Weapon, "RU"]
  112. rec_hor := weap[typ, Settings.Weapon, "RHA"]
  113. rec_dir := (rec_hor = 0 ? 0 : (rec_hor > 0 ? -1 : 1))
  114. rpm_ps := weap[typ, Settings.Weapon, "RPM"] / 60
  115. sleep % Settings.Delay
  116. s:=l:=time()
  117.  
  118. While (GetKeyState("LButton", "P"))&&(GetKeyState("RButton", "P") || Settings.Force)&&(Settings.NoRecoil)&&(running) {
  119. if (rpm_ps*rec_up*(Settings.RecoilMultiplier/3)*((time()-l)/1000000)*((time()-s)/10000<rpm_ps?((Settings.HeavyBarrel?2:1)*mult):1) >= 1) {
  120. i++
  121. l:=time(),move(((Abs(i*rec_hor)>rec_up)?(rec_dir*(i:=1)):0),(Settings.Invert?-1:1))
  122. }
  123. }
  124.  
  125. return
  126.  
  127. gamecheck:
  128. Process, exist, bf4.exe
  129. if (Errorlevel > 0) {
  130. running := true
  131. Gui, Font, cGreen
  132. GuiControl, Font, RunningText
  133. GuiControl,, RunningText, Running!
  134. Gui, Font
  135. } else {
  136. running := false
  137. Gui, Font, cRed
  138. GuiControl, Font, RunningText
  139. GuiControl,, RunningText, Not running..
  140. Gui, Font
  141. } Gui, Submit, NoHide
  142. return
  143.  
  144. GuiMove() {
  145. global
  146. WinGetPos, x, y, w,, % "ahk_id" HWND_GUI
  147. if WinExist("ahk_id" HWND_SETTINGS)
  148. Gui 2: Show, % "x" x+(w+10) " y" y " NoActivate"
  149. if WinExist("ahk_id" HWND_GUNS)
  150. Gui 3: Show, % "x" x-150 " y" y
  151. }
  152.  
  153. Settings:
  154. if WinExist("ahk_id" HWND_SETTINGS) {
  155. gosub SettingsSave
  156. return
  157. } GuiControl,, >>, X
  158. Hotkey, % "~*" Settings.NoRecoilHotkey, Off
  159. Gui 2: Margin, 8, 6
  160. Gui 2: Add, Text, x10, NoRecoil toggle:
  161. Gui 2: Add, Hotkey, vNoRecoilHotkey hwndHWND_HOTKEY, % Settings.NoRecoilHotkey
  162. AddToolTip(HWND_HOTKEY, "Button to toggle NoRecoil")
  163. Gui 2: Add, Text, x10 y55, F9:
  164. Gui 2: Add, Button, vGun1 gChooseGun1 yp-4 x35 w95, % Settings.Gun1
  165. Gui 2: Add, Text, x10, F10:
  166. Gui 2: Add, Button, vGun2 gChooseGun2 yp-4 x35 w95, % Settings.Gun2
  167. Gui 2: Add, Text, x10, F11:
  168. Gui 2: Add, Button, vGun3 gChooseGun3 yp-4 x35 w95, % Settings.Gun3
  169. Gui 2: Add, Text, x10, F12:
  170. Gui 2: Add, Button, vGun4 gChooseGun4 yp-4 x35 w95, % Settings.Gun4
  171. Loop 4
  172. GuiControl 2: ChooseString, Gun%A_Index%, % Settings["Gun" A_Index]
  173. Gui 2: Add, CheckBox, % "vHeavyBarrel hwndHWND_BARREL x8 Checked" Settings.HeavyBarrel, Heavy barrel?
  174. Gui 2: Add, CheckBox, % "vForce hwndHWND_FORCE x8 Checked" Settings.Force, Force NoRecoil
  175. Gui 2: Add, CheckBox, % "vInvert hwndHWND_INVERT x8 Checked" Settings.Invert, Inverted look
  176. AddToolTip(HWND_FORCE, "Enable if you use toggle aim, as opposed to hold to aim")
  177. AddToolTip(HWND_INVERT, "Enable if you use inverted look ingame")
  178. AddToolTip(HWND_BARREL, "Enable if your gun uses Heavy Barrel attachment")
  179. Gui 2: Add, Text, x10, Recoil strength:
  180. Gui 2: Add, Slider, x10 vRecoilMultiplier hwndHWND_SLIDER gSlider NoTicks Range10-250 AltSubmit Center w90, % Settings.RecoilMultiplier
  181. Gui 2: Add, Text, vMultiplierText yp+5 x110, % "x" Round(Settings.RecoilMultiplier / 100, 2)
  182. AddToolTip(HWND_SLIDER, "The sensitivity of the algorithm. Change until it matches your ingame sensitivity,")
  183. Gui 2: Add, Text, x10, Initial delay:
  184. Gui 2: Add, Slider, vDelay hwndHWND_DELAY Range10-150 ToolTip, % Settings.Delay
  185. Gui 2: Font, s7, Arial
  186. Gui 2: Add, Text,, Enjoy the Tool, Cubed2 <3
  187. AddToolTip(HWND_DELAY, "The amount to wait until countering recoil after firing (default: 40)")
  188. Gui 2: -0x20000 +Owner -Caption +Border +hwndHWND_SETTINGS
  189. WinGetPos, x, y, w,, % "ahk_id" HWND_GUI
  190. Gui 2: Show, % "x" x+(w+10) " y" y " hide", Settings
  191. DllCall("AnimateWindow", "UInt", HWND_SETTINGS, "Int", 100, "UInt", "0x40001")
  192. Gui 2: Show
  193. GuiControl 2: focus, NoRecoilHotkey
  194. GuiControl 2: focus, NoRecoil toggle:
  195. return
  196.  
  197. SettingsSave:
  198. Gui 2: Submit, NoHide
  199. if !NoRecoilHotkey {
  200. TrayTip,, All Hotkeys have to be filled/unique.
  201. return
  202. } Hotkey("~*" NoRecoilHotkey, "ToggleNoRecoil")
  203. Hotkey("~*" NoRecoilHotkey, "On")
  204. Settings.Write("HeavyBarrel", HeavyBarrel)
  205. Settings.Write("NoRecoilHotkey", NoRecoilHotkey)
  206. Settings.Write("Delay", Delay)
  207. Settings.Write("Invert", Invert)
  208. Settings.Write("Force", Force)
  209. GuiControl,, X, >>
  210. DllCall("AnimateWindow", "UInt", HWND_SETTINGS, "Int", 100, "UInt", "0x90000")
  211. Gui 2: Destroy
  212. WinActivate ahk_id%HWND_GUI%
  213. TrayTip,, Settings saved.
  214. return
  215.  
  216. Slider:
  217. Gui Submit, NoHide
  218. GuiControl 2:, MultiplierText, % "x" Round(RecoilMultiplier / 100, 2)
  219. Settings.Write("RecoilMultiplier", RecoilMultiplier)
  220. return
  221.  
  222. ChooseWeapon:
  223. ChooseGun1:
  224. ChooseGun2:
  225. ChooseGun3:
  226. ChooseGun4:
  227. ChooseWeap(Settings[SubStr(A_ThisLabel, 7)], SubStr(A_ThisLabel, 7))
  228. return
  229.  
  230. ChooseWeap(pre, butto) {
  231. static
  232. if WinExist("ahk_id" HWND_GUNS)
  233. Gui 3: Destroy
  234. Gui 3: Add, DropDownList, vGunType gTypeChange, % arraytoguilist(weap)
  235. for x, b in weap
  236. for a, y in b
  237. if (a = pre)
  238. typ := x, break
  239. GuiControl 3: ChooseString, GunType, % typ
  240. Gui 3: Add, ListBox, vGunWeap h200
  241. GuiControl 3:, GunWeap, % arraytoguilist(weap[typ])
  242. GuiControl 3: ChooseString, GunWeap, % pre
  243. Gui 3: Add, Button, gSave w120, Save
  244. Gui 3: Add, Edit,vbutton x0 y0 h0 w0 Hidden, % butto
  245. Gui 3: -0x20000 +hwndHWND_GUNS -Caption +ToolWindow
  246. WinGetPos x, y,,, % "ahk_id" HWND_GUI
  247. Gui 3: Show, % "x" x-150 " y" y, Guns
  248. return
  249.  
  250. Save:
  251. Gui 3: Submit, NoHide
  252. if !GunWeap
  253. return
  254. if (button = "Weapon") {
  255. GuiControl 1:, Weapon, % GunWeap
  256. Settings.Write("Weapon", GunWeap)
  257. } else {
  258. GuiControl 2:, % button, % GunWeap
  259. Settings.Write("Gun" SubStr(button, 0), GunWeap)
  260. } Gui 3: Destroy
  261. return
  262.  
  263. TypeChange:
  264. Gui 3: Submit, NoHide
  265. GuiControl 3:, ListBox1, % "|" arraytoguilist(weap[GunType])
  266. return
  267.  
  268. 3GuiClose:
  269. Gui 3: Destroy
  270. return
  271. }
  272.  
  273. arraytoguilist(arr) {
  274. for a, b in arr
  275. out .= a "|"
  276. return out
  277. }
  278.  
  279. saygun(string) {
  280. a := RegExReplace(string, "-", "")
  281. Loop, parse, a
  282. if (RegExMatch(a, "[0-9][0-9]") = A_Index) && !RegExMatch(a, "[0-9][0-9][0-9]")
  283. d .= A_LoopField
  284. else
  285. d .= A_LoopField . " "
  286. voice.speak("", 2)
  287. voice.speak(d, 1)
  288. }
  289.  
  290. time() {
  291. varsetcapacity(Count1, 8, 0)
  292. DllCall("QueryPerformanceCounter", Uint, &Count1)
  293. Count1:=Numget(Count1, 0)
  294. return % Floor(count1 / 3.385)
  295. }
  296.  
  297. GuiEscape:
  298. GuiClose:
  299. Gui Submit
  300. ExitApp
  301. return
  302.  
  303. Class Settings {
  304. __New(file) {
  305. this.file := file
  306. this.defaults := {"NoRecoilHotkey": "F6"
  307. , "RecoilMultiplier": 100
  308. , "Weapon": "AK-12"
  309. , "HeavyBarrel": false
  310. , "NoRecoil": true
  311. , "HoldRight": true
  312. , "Delay": 40
  313. , "Invert": false
  314. , "Force": false
  315. , "Gun1": "AK-12"
  316. , "Gun2": "AEK-971"
  317. , "Gun3": "FAMAS"
  318. , "Gun4": "AUG A3"}
  319. }
  320.  
  321. Defaults() {
  322. for a, b in this.defaults
  323. this.Write(a, b)
  324. }
  325.  
  326. Read() {
  327. for a, b in this.defaults
  328. if ((this[a] := IniRead(this.file, "Settings", a)) = "")
  329. this.Write(a, b)
  330. }
  331.  
  332. Write(key, value) {
  333. IniWrite(value, this.file, "Settings", key)
  334. this[key] := value
  335. }
  336. }
  337.  
  338. IniRead(file, section, key) {
  339. IniRead, tempf, % A_WorkingDir "\" file, % section, % key, % A_Space
  340. return tempf
  341. }
  342.  
  343. IniWrite(value, file, section, key) {
  344. IniWrite, % value, % A_WorkingDir "\" file, % section, % key
  345. }
  346.  
  347. move(x, y) {
  348. DllCall("mouse_event", uint, 1, int, x, int, y, uint, 0, int, 0)
  349. }
  350.  
  351. Equals(needle, haystack) {
  352. Loop, parse, haystack, % "|"
  353. if (A_LoopField = needle)
  354. return true
  355. return false
  356. }
  357.  
  358. Hotkey(key, label := "", hwnd := "") {
  359. if (hwnd)
  360. Hotkey, IfWinActive, % "ahk_id" hwnd
  361. else
  362. Hotkey, IfWinActive
  363. Hotkey, % key, % label, UseErrorLevel
  364. }
  365.  
  366. Random(min, max) {
  367. Random, out, % min, % max
  368. return out
  369. }
  370.  
  371. RandomString(length, special := false) {
  372. Loop % length
  373. str .= (r := Random(1, special ? 4 : 3)) = 1
  374. ? Random(0, 9) : r = 2
  375. ? Chr(Random(65, 90)) : r = 3
  376. ? Chr(Random(97, 122)) : SubStr("-_?!&:", r := Random(1, 6), 1)
  377. return % str
  378. }
  379.  
  380. Exit:
  381. ExitApp
  382. return
  383.  
  384. #if true
  385.  
  386. AddToolTip(CtrlHwnd,text,Modify=0) {
  387. static TThwnd, GuiHwnd, Ptr
  388. if (!TThwnd) {
  389. Gui,+LastFound
  390. GuiHwnd:=WinExist()
  391. TThwnd:=DllCall("CreateWindowEx","Uint",0,"Str","TOOLTIPS_CLASS32","Uint",0,"Uint",2147483648 | 3,"Uint",-2147483648
  392. ,"Uint",-2147483648,"Uint",-2147483648,"Uint",-2147483648,"Uint",GuiHwnd,"Uint",0,"Uint",0,"Uint",0)
  393. Ptr:=(A_PtrSize ? "Ptr" : "UInt"), DllCall("uxtheme\SetWindowTheme","Uint",TThwnd,Ptr,0,"UintP",0)
  394. } Varsetcapacity(TInfo,44,0), Numput(44,TInfo), Numput(1|16,TInfo,4), Numput(GuiHwnd,TInfo,8), Numput(CtrlHwnd,TInfo,12), Numput(&text,TInfo,36)
  395. !Modify ? (DllCall("SendMessage",Ptr,TThwnd,"Uint",1028,Ptr,0,Ptr,&TInfo,Ptr))
  396. . (DllCall("SendMessage",Ptr,TThwnd,"Uint",1048,Ptr,0,Ptr,A_ScreenWidth))
  397. DllCall("SendMessage",Ptr,TThwnd,"UInt",(A_IsUnicode ? 0x439 : 0x40c),Ptr,0,Ptr,&TInfo,Ptr)
  398. }
  399.  
  400. gunarray() {
  401. w1 := { "ACE 23": {"RPM": 770, "FSM": 2.0, "RU": 0.36, "RHA": 0.05} ; ASSAULT
  402. , "AEK-971": {"RPM": 900, "FSM": 3.0, "RU": 0.38, "RHA": 0.125}
  403. , "AK-12": {"RPM": 650, "FSM": 2.1, "RU": 0.3, "RHA": -0.025}
  404. , "AR 160": {"RPM": 700, "FSM": 1.6, "RU": 0.23, "RHA": 0.0}
  405. , "AUG A3": {"RPM": 700, "FSM": 2.1, "RU": 0.26, "RHA": -0.025}
  406. , "BULLDOG": {"RPM": 700, "FSM": 1.75, "RU": 0.5, "RHA": 0.0}
  407. , "CZ-805": {"RPM": 700, "FSM": 2.1, "RU": 0.29, "RHA": 0.1}
  408. , "F2000": {"RPM": 850, "FSM": 3.0, "RU": 0.3, "RHA": -0.05}
  409. , "FAMAS": {"RPM": 1000, "FSM": 2.5, "RU": 0.4, "RHA": 0.1}
  410. , "L85A2": {"RPM": 750, "FSM": 1.5, "RU": 0.37, "RHA": 0.0}
  411. , "M16A4": {"RPM": 800, "FSM": 2.3, "RU": 0.28, "RHA": 0.075}
  412. , "M416": {"RPM": 750, "FSM": 2.2, "RU": 0.32, "RHA": 0.1}
  413. , "QBZ-95-1": {"RPM": 650, "FSM": 2.0, "RU": 0.24, "RHA": -0.05}
  414. , "SAR-21": {"RPM": 600, "FSM": 1.8, "RU": 0.18, "RHA": 0.0}
  415. , "SCAR-H": {"RPM": 620, "FSM": 1.6, "RU": 0.5, "RHA": 0.0}}
  416. w2 := { "A-91": {"RPM": 800, "FSM": 2.0, "RU": 0.31, "RHA": 0.0} ; CARBINES
  417. , "ACE 21 CQB": {"RPM": 770, "FSM": 2.2, "RU": 0.36, "RHA": 0.05}
  418. , "ACE 52 CQB": {"RPM": 650, "FSM": 2.3, "RU": 0.45, "RHA": 0.0}
  419. , "ACW-R": {"RPM": 880, "FSM": 2.3, "RU": 0.38, "RHA": -0.05}
  420. , "AK 5C": {"RPM": 700, "FSM": 1.65, "RU": 0.32, "RHA": 0.0}
  421. , "AKU-12": {"RPM": 680, "FSM": 1.8, "RU": 0.3, "RHA": 0.075}
  422. , "G36C": {"RPM": 650, "FSM": 1.7, "RU": 0.33, "RHA": 0.0}
  423. , "M4": {"RPM": 800, "FSM": 2.3, "RU": 0.28, "RHA": 0.075}
  424. , "MTAR-21": {"RPM": 900, "FSM": 2.8, "RU": 0.34, "RHA": 0.0}
  425. , "SG553": {"RPM": 830, "FSM": 2.2, "RU": 0.3, "RHA": 0.1}
  426. , "TYPE-95B-1": {"RPM": 650, "FSM": 2.0, "RU": 0.24, "RHA": -0.05}}
  427. w3 := { "ACE 53 SV": {"RPM": 260, "FSM": 2.1, "RU": 0.5, "RHA": 0.2} ; DMR
  428. , "M39 EMR": {"RPM": 300, "FSM": 2.0, "RU": 0.7, "RHA": 0.0}
  429. , "MK11 MOD 0": {"RPM": 260, "FSM": 2.0, "RU": 0.5, "RHA": 0.25}
  430. , "QBU-88": {"RPM": 310, "FSM": 2.0, "RU": 0.4, "RHA": 0.2}
  431. , "RFB": {"RPM": 260, "FSM": 2.0, "RU": 0.5, "RHA": 0.3}
  432. , "SCAR-H SV": {"RPM": 260, "FSM": 2.0, "RU": 0.5, "RHA": 0.2}
  433. , "SKS": {"RPM": 333, "FSM": 2.0, "RU": 0.35, "RHA": 0.05}
  434. , "SVD-12": {"RPM": 260, "FSM": 2.0, "RU": 0.5, "RHA": -0.215}}
  435. w4 := { "AS VAL": {"RPM": 900, "FSM": 3.5, "RU": 0.4, "RHA": 0.15} ; ENGINEER
  436. , "CBJ-MS": {"RPM": 700, "FSM": 2.3, "RU": 0.29, "RHA": 0.0}
  437. , "CZ-3A1": {"RPM": 1000, "FSM": 3.3, "RU": 0.4, "RHA": 0.125}
  438. , "JS2": {"RPM": 900, "FSM": 2.5, "RU": 0.38, "RHA": 0.1}
  439. , "MP7": {"RPM": 950, "FSM": 2.5, "RU": 0.35, "RHA": 0.1}
  440. , "MPX": {"RPM": 850, "FSM": 2.1, "RU": 0.36, "RHA": 0.0}
  441. , "MX4": {"RPM": 830, "FSM": 2.6, "RU": 0.36, "RHA": -0.15}
  442. , "P90": {"RPM": 900, "FSM": 3.0, "RU": 0.35, "RHA": 0.0}
  443. , "PDW-R": {"RPM": 750, "FSM": 2.0, "RU": 0.26, "RHA": 0.1}
  444. , "PP-2000": {"RPM": 650, "FSM": 1.65, "RU": 0.24, "RHA": -0.05}
  445. , "SR-2": {"RPM": 900, "FSM": 2.3, "RU": 0.29, "RHA": 0.0}
  446. , "UMP-45": {"RPM": 600, "FSM": 1.8, "RU": 0.4, "RHA": 0.0}
  447. , "UMP-9": {"RPM": 700, "FSM": 1.5, "RU": 0.26, "RHA": 0.0}}
  448. /*
  449. w5 := { "44 MAGNUM": {"RPM": 150, "FSM": 1.0, "RU": 2.0, "RHA": 0.0} ; SECONDARY
  450. , "93R": {"RPM": 900, "FSM": 2.0, "RU": 0.5, "RHA": 0.0}
  451. , "COMPACT 45": {"RPM": 320, "FSM": 1.0, "RU": 0.7, "RHA": 0.0}
  452. , "CZ-75": {"RPM": 360, "FSM": 1.0, "RU": 0.6, "RHA": 0.0}
  453. , "DEAGLE 44": {"RPM": 220, "FSM": 1.0, "RU": 2.0, "RHA": 0.0}
  454. , "FN57": {"RPM": 455, "FSM": 1.0, "RU": 0.7, "RHA": 0.0}
  455. , "G18": {"RPM": 900, "FSM": 2.0, "RU": 0.7, "RHA": 0.0}
  456. , "M1911": {"RPM": 310, "FSM": 1.0, "RU": 0.6, "RHA": 0.0}
  457. , "M9": {"RPM": 400, "FSM": 1.0, "RU": 0.45, "RHA": 0.0}
  458. , "MP412 REX": {"RPM": 180, "FSM": 1.0, "RU": 2.0, "RHA": 0.0}
  459. , "MP443": {"RPM": 380, "FSM": 1.0, "RU": 0.7, "RHA": 0.0}
  460. , "P226": {"RPM": 400, "FSM": 1.0, "RU": 0.4, "RHA": -0.1}
  461. , "QSZ-92": {"RPM": 455, "FSM": 1.0, "RU": 0.4, "RHA": 0.0}}
  462. */
  463. w6 := { "AWS": {"RPM": 780, "FSM": 1.0, "RU": 0.35, "RHA": 0.05} ; SUPPORT
  464. , "LSAT": {"RPM": 650, "FSM": 1.0, "RU": 0.25, "RHA": 0.0}
  465. , "M240B": {"RPM": 650, "FSM": 0.5, "RU": 0.6, "RHA": 0.0}
  466. , "M249": {"RPM": 800, "FSM": 1.0, "RU": 0.325, "RHA": -0.075}
  467. , "M60E4": {"RPM": 570, "FSM": 0.5, "RU": 0.6, "RHA": -0.05}
  468. , "MG4": {"RPM": 800, "FSM": 1.0, "RU": 0.4, "RHA": 0.1}
  469. , "PKP PECHENEG": {"RPM": 600, "FSM": 0.65, "RU": 0.55, "RHA": 0.0}
  470. , "QBB-95-1": {"RPM": 650, "FSM": 1.6, "RU": 0.24, "RHA": -0.05}
  471. , "RPK-12": {"RPM": 600, "FSM": 1.6, "RU": 0.3, "RHA": -0.025}
  472. , "RPK-74M": {"RPM": 600, "FSM": 0.75, "RU": 0.22, "RHA": -0.025}
  473. , "TYPE-88 LMG": {"RPM": 700, "FSM": 1.0, "RU": 0.28, "RHA": 0.0}
  474. , "U-100 MK5": {"RPM": 590, "FSM": 1.5, "RU": 0.25, "RHA": 0.0}}
  475. return {"ASSAULT": w1, "CARBINES": w2, "DMR": w3, "ENGINEER": w4, "SUPPORT": w6}
  476. } ; download complete
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement