Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.47 KB | None | 0 0
  1. =====
  2.  
  3. Kwskii
  4.  
  5. ## Features
  6.  
  7. Options;
  8. - Per Weapon Recoil Reduction
  9. - Per Weapon Anti Bloom
  10. - Per Weapon Fire Rate Control and Autofire
  11. - Fast Weapon Switching using Animation Canceling
  12. - Quick Shoot Hotkey using Animation Canceling
  13. - Turbo use Option to Autofire Use when the button is held down
  14. - AR Perfect Aim 100% First Shot Accuracy
  15. - Fast Edit Reset to automaticly stop editing upon rightclick
  16.  
  17. Always On Features;
  18. - Auto Reload Cancel on Weapon Switch or Use
  19.  
  20.  
  21.  
  22. ## Usage
  23.  
  24. Start Script in CMD Window
  25.  
  26. """
  27. # TODO
  28. # -Add Keybinds to select weapon loadout
  29. # -Tune Weapon Defs
  30. # -Add LMG Def
  31. # -Add Couch Peek
  32. # -Add type checker in Quick_Shoot to check if pump or rocket, etc
  33. # -Add Key Handlers like jump, escape, map, inventory, build, edit, crouch, reload
  34. # -Add Turbofarming
  35.  
  36. # -Add Fast_Shoot time to Weapon Defs
  37. # -Add Crouch Modifier to Weapon Defs
  38.  
  39. #Current Bugs;
  40.  
  41. #Bug #1:
  42. #Effect: When Hip Firing with Recoil compensation aiming the weapon upward causes the anti recoil to over compensate.
  43.  
  44. #Imports:
  45. from time import gmtime, strftime, sleep, time
  46. from ctypes import windll, c_uint, Structure, c_long, byref
  47. from win32api import GetKeyState, GetAsyncKeyState
  48. import mouse
  49. import keyboard
  50. import weapon
  51.  
  52. #Weapon_Tables Init
  53. nowep = weapon.Weapon("None")
  54. Pickaxe = weapon.Weapon("Pickaxe")
  55. AR = weapon.Weapon("AR")
  56. SCAR = weapon.Weapon("SCAR")
  57. BURST = weapon.Weapon("BURST")
  58. PUMP = weapon.Weapon("PUMP")
  59. TAC = weapon.Weapon("TAC")
  60. HEAVY = weapon.Weapon("HEAVY")
  61. SMG = weapon.Weapon("SMG")
  62. S_SMG = weapon.Weapon("S_SMG")
  63. TOMMYGUN = weapon.Weapon("TOMMYGUN")
  64. P90 = weapon.Weapon("P90")
  65. HR = weapon.Weapon("HR")
  66. BOLT = weapon.Weapon("BOLT")
  67. SAR = weapon.Weapon("SAR")
  68. ROCKET = weapon.Weapon("ROCKET")
  69. NADES = weapon.Weapon("NADES")
  70. HEAL = weapon.Weapon("HEAL")
  71.  
  72. #Settings;
  73.  
  74. #Debug:
  75. Debug = True #Debug Mode, used for Output of Debug Info.
  76. Debug_Movement = False #If Debug Mode is On, output Mouse Movement Info.
  77. Debug_Buttons = True #If Debug Mode is On, output Mouse Button Activity.
  78. Debug_Wheel = False #If Debug Mode is On, output Mouse Wheel Movement Info.
  79. Debug_Keyboard = False #If Debug Mode is On, output Keyboard Activity.
  80.  
  81.  
  82. #Features;
  83.  
  84. #General:
  85. Option_AR_Perfect_Aim = False #If Enabled, causes constant First Shot Accuracy with AR when in ADS.
  86. Option_Fast_Weapon_Switch = True #If Enabled, causes the Weapon Pullout Animation Cancel to be done on every weapon switch.
  87. Option_Reload_Canceling = True #If Enabled, causes an Animation Cancel to occur if reloading when attempting to use.
  88.  
  89. #Quick Shoot:
  90. Option_Quick_Shoot = True #If Enabled, allows an instant fire of a specific weapon choosen below.
  91. if Option_Quick_Shoot:
  92. Quick_Shoot_Default_Weapon = PUMP
  93. QuickShoot_Fire_Attempts = 40 #(Delay is 10ms so loop of 40 is around 400ms).
  94.  
  95. #Turbo Use:
  96. Option_Turbo_Use = True #When Enabled, causes the use Key to Autofire when held down.
  97. Delay_Turbo_Use = 0.060 #Time inbetween autofire + the natural 20ms delay for the keypress.
  98.  
  99. #Editing:
  100. Option_Fast_Edit_Reset = True #When the Reset Edit Button is Pressed, Instantly exit edit mode.
  101.  
  102. #Ghost Peaking(TODO):
  103. Use_Ghost_Peaking = True #If Enabled, uses a Modifier Key to enable fast crouching while shooting.
  104. Ghost_Peak_Delay = 100 #Time between Ghost Peak Shots.
  105.  
  106. #Fast Farming(TODO):
  107. Fast_Farming = False #If Enabled, Uses a Button to activate "Current Farming Exploit".
  108. Turbofarm_Activation_Window = 300 #Delay from pressing "Farming_Button" to start Normal Farming instead of turbo.
  109. Turbofarm_Fast_Swing_Delay = 200
  110. Turbofarm_Emote_Time = 70
  111. Turbofarm_Slow_Swing_Delay = 400
  112. Turbofarm_Emote_Cancel_Delay = 300
  113. STWAF = False #If Enabled, Switch to a Weapon of Choice after Farming.
  114. STWAF_WeaponSlot = 1 #Weapon to Switch to after Farming.
  115.  
  116. #Anti Recoil:
  117. Use_No_Recoil_ADS = True #If Enabled, Reduces Recoil when ADS Firing.
  118. Use_No_Recoil_Hipfire = True #If Enabled, Reduces Recoil when Hip Firing.
  119. Use_Jitter = True #If Enabled, Moves the Aim back and forth while firing.
  120.  
  121. #Weapon Slot Options
  122. Default_Ingame_Weapon_Slot1 = AR
  123. Default_Ingame_Weapon_Slot2 = PUMP
  124. Default_Ingame_Weapon_Slot3 = SMG
  125. Default_Ingame_Weapon_Slot4 = HR
  126. Default_Ingame_Weapon_Slot5 = HEAL
  127.  
  128. #-------------------------------
  129. #Keybinds;
  130. #-------------------------------
  131.  
  132. #Macro Related;
  133. #-------------------------------
  134.  
  135. #General:
  136. Keybind_Fire = "left" #Key to Shoot Weapons.
  137.  
  138. #Key to Fast Fire Pre Set Weapon.
  139. if Option_Quick_Shoot:
  140. Keybind_QuickShoot_Button = "x2"
  141. Keybind_QuickShoot_Button_Code = 0x06
  142.  
  143. Keybind_Enable = "middle" #Key to Enable/Disable the Macro.
  144. Keybind_Edit = "alt" #Desired Key to go into edit mode.(Must have In-game set to alternate).
  145. Keybind_Use = "f" #Desired key for Use.
  146. if Option_Turbo_Use:
  147. Keybind_Use_Key_Code = 0x46
  148.  
  149. #Weapon Keybinds Part 1 (Macro)
  150. #-----------------------------------------------
  151. #Set these to the same as in-game if not using fast weapon switching.
  152. #If using fast weapon switching set these to your desired keys for each slot-
  153. #and scroll down to set the alternate in game key binds so the fast switch can work.
  154. Keybind_Weapon_Slot1 = "2"
  155. Keybind_Weapon_Slot2 = "3"
  156. Keybind_Weapon_Slot3 = "4"
  157. Keybind_Weapon_Slot4 = "z"
  158. Keybind_Weapon_Slot5 = "x"
  159. Keybind_Weapon_Pickaxe = "l"
  160.  
  161. #Ingame;
  162. #These Keybinds should match the ones set in game.
  163. #-------------------------------
  164.  
  165. #General:
  166. Ingame_Keybind_Jump = "space"
  167. Ingame_Keybind_Crouch = "shift" #Ingame Keybind set for Crouch.
  168. Ingame_Keybind_Fire = "k" #Ingame Keybind set to Fire(Not Mouse1!!!).
  169. if Option_Turbo_Use:
  170. Ingame_Keybind_Use = "i"
  171. else:
  172. Ingame_Keybind_Use = Keybind_Use
  173. Ingame_Keybind_Reload = "r"
  174.  
  175. #Weapon Keybinds Part 2 (In-game)
  176. # Fast Weapon Switching:
  177. #-------------------------------------------------
  178. #Used ONLY when Option_Fast_Weapon_Switch is Enabled.
  179. #Fast Weapon Switching is Required to have intermedary control over the weapon keys so-
  180. #they need to be set to something different in-game.
  181. #Ignore this Section if not using Fast Weapon Switching.
  182. if Option_Fast_Weapon_Switch == True:
  183. Ingame_Weapon_Slot1 = "p"
  184. Ingame_Weapon_Slot2 = "6"
  185. Ingame_Weapon_Slot3 = "7"
  186. Ingame_Weapon_Slot4 = "8"
  187. Ingame_Weapon_Slot5 = "9"
  188. Ingame_Weapon_Pickaxe = "0"
  189. else:
  190. Ingame_Weapon_Slot1 = Keybind_Weapon_Slot1
  191. Ingame_Weapon_Slot2 = Keybind_Weapon_Slot2
  192. Ingame_Weapon_Slot3 = Keybind_Weapon_Slot3
  193. Ingame_Weapon_Slot4 = Keybind_Weapon_Slot4
  194. Ingame_Weapon_Slot5 = Keybind_Weapon_Slot5
  195. Ingame_Weapon_Pickaxe = Keybind_Weapon_Pickaxe
  196.  
  197. #Other Weapons
  198. Weapon_Trap = "5" #Actual In-game Keybind used to select traps.
  199.  
  200. #Building:
  201. Ingame_Keybind_Ramp = "e" #Actual Ingame Keybind set for Ramp.
  202. Ingame_Keybind_Wall = "x" #Actual Ingame Keybind set for Wall(Thumb Button 2 on Logetech G502).
  203. Ingame_Keybind_Platform = "q" #Actual Ingame Keybind set for Platform.
  204. Ingame_Keybind_Roof = "[" #Actual Ingame Keybind set for Roof.
  205.  
  206. #Editing:
  207. Ingame_Keybind_Edit = "]" #Alternate Ingame Keybind set for Edit.
  208. Ingame_Keybind_Edit_Reset = "right" #Actual Ingame Keybind set for Edit Reset.
  209.  
  210. #Emoting:
  211. Keybind_EmoteWheel_Up = "up"
  212. Keybind_EmoteWheel_Down = "down"
  213. Keybind_Emote = "n"
  214. Keybind_FastEmote1 = "f1"
  215. Keybind_FastEmote2 = "f2"
  216. Keybind_FastEmote3 = "f3"
  217.  
  218.  
  219. #Globals:
  220. global Running
  221. global Enabled
  222. global Current_Weapon
  223. global Current_Loadout
  224. global JitterFlop
  225. global Editing
  226. global Building
  227. global Crouching
  228. global Jumping
  229. global Reloading
  230. global Using
  231.  
  232. #Main Functions;
  233.  
  234. #Main Function: Gets run at start after init.
  235. def main():
  236. # Print out a List of the Globals to Check Inits.
  237. DebugPrint('Printing Globals List:')
  238. DebugPrintGlobals()
  239.  
  240. #Hook Logical Mouse Events.
  241. DebugPrint('Hooking Mouse Input')
  242. mouse.hook(Mouse_Input)
  243.  
  244. #Hook Logical Keyboard Events.
  245. DebugPrint('Hooking Keyboard Input')
  246. keyboard.hook(Keyboard_Input)
  247.  
  248.  
  249. #Helper Functions;
  250.  
  251. #Move Mouse: Moves Mouse Relative to Current Location.
  252. def Move_Mouse(x, y):
  253. windll.user32.mouse_event(
  254. c_uint(0x0001),
  255. c_uint(x),
  256. c_uint(y),
  257. c_uint(0),
  258. c_uint(0)
  259. )
  260.  
  261. class POINT(Structure):
  262. _fields_ = [("x", c_long), ("y", c_long)]
  263.  
  264. def queryMousePosition():
  265. pt = POINT()
  266. windll.user32.GetCursorPos(byref(pt))
  267. return pt
  268.  
  269. #Cancel Anim: Cancels Weapon Switching Animation and Pickaxe Swings.
  270. def Cancel_Anim(Weapon, Emote_Bind):
  271. #Emote to cancel pull out animation.
  272. keyboard.press(Emote_Bind);
  273. sleep(0.100);
  274. #Switch to Desired Weapon.
  275. Switch_to_Weapon(Weapon)
  276. sleep(0.020);
  277. keyboard.release(Emote_Bind);
  278. sleep(0.030);
  279.  
  280. #Converts Inventory Slot ID to actual weapon slot.
  281. def InvSlot_to_WeaponKeybind(InvSlot):
  282. if InvSlot == 0:
  283. return Ingame_Weapon_Slot1
  284. if InvSlot == 1:
  285. return Ingame_Weapon_Slot2
  286. if InvSlot == 2:
  287. return Ingame_Weapon_Slot3
  288. if InvSlot == 3:
  289. return Ingame_Weapon_Slot4
  290. if InvSlot == 4:
  291. return Ingame_Weapon_Slot5
  292.  
  293. #Check Quick Shoot Button Function.
  294. def isPressed_QuickShoot_Button():
  295. QuickShoot_Button_State = GetKeyState(Keybind_QuickShoot_Button_Code)
  296. DebugPrint("MB6:{0}".format(QuickShoot_Button_State))
  297. if QuickShoot_Button_State < 0:
  298. return True
  299. return False
  300.  
  301. def Toggle_Enabled():
  302. global Enabled
  303. if Enabled:
  304. Enabled = False
  305. else:
  306. Enabled = True
  307. DebugPrint("Enabled changed to {0}".format(Enabled))
  308.  
  309. #Debug PrintFunction: Print's Debug Output if Debug is Enabled.
  310. def DebugPrint(s):
  311. if Debug:
  312. print("{0}:{1}".format(strftime("%H:%M:%S", gmtime()),s));
  313.  
  314. def DebugPrintGlobals():
  315. for k, v in globals().items():
  316. print("{0} = {1}".format(k, v))
  317.  
  318. #Turbo Use Function: Sends the Use Event as long as the Use key is held down.
  319. def Turbo_Use():
  320. global Reloading
  321. global Using
  322.  
  323. #Check if we are Reloading and want to use Reload Canceling.
  324. if Reloading and Option_Reload_Canceling:
  325. #Since we are canceling the Reload, set global to false.
  326. Reloading = False
  327. Using = False
  328.  
  329. #Switch Directly to Pickaxe to Cancel the Reload.
  330. keyboard.send(Ingame_Weapon_Pickaxe);
  331. sleep(0.020);
  332.  
  333. #Switch Back to the Weapon we had before the Animation Cancel.
  334. Switch_to_Weapon(Current_Weapon)
  335.  
  336. #Check if we are'nt already Using.
  337. if not Using:
  338. Using = True
  339. DebugPrint("Detected Use Action")
  340.  
  341. #Handle Turbo Use Action.
  342. if Option_Turbo_Use:
  343.  
  344. overrun = 400
  345. #While Use Key is Down Loop.
  346. while True:
  347. #Overrun Protection.
  348. overrun = overrun - 1
  349. if overrun == 0:
  350. break
  351.  
  352. sleep(0.020) #Sleep To prevent GetKeyState Lockup.
  353.  
  354. if windll.user32.GetKeyState(Keybind_Use_Key_Code) >= 0:
  355. break
  356.  
  357. DebugPrint("Sending Turbo Use Action")
  358.  
  359. #Send Use Action.
  360. keyboard.press(Ingame_Keybind_Use)
  361. sleep(0.020)
  362. keyboard.release(Ingame_Keybind_Use)
  363.  
  364. #Delay a Pre Set amount.
  365. sleep(Delay_Turbo_Use)
  366. else:
  367. print("Sending Use Action")
  368. keyboard.send(Ingame_Keybind_Use)
  369. sleep(0.080)
  370.  
  371.  
  372. #Shooting Functions;
  373.  
  374. #Quick_Shoot: Quick Switches to Desired Weapon, pulls trigger and then switches back.
  375. def Quick_Shoot(Weapon):
  376. global Editing
  377. global Building
  378. global Reloading
  379.  
  380. #Set Building and Editing to False since we are now shooting.
  381. Building = False
  382. Editing = False
  383.  
  384. #Store our Current Weapon so we can return to it after Quick.
  385. OldWeapon = Current_Weapon
  386. print("Insta Shooting {0}".format(Weapon.name))
  387.  
  388. #Loop Until Button is Detected
  389. while True:
  390. if not isPressed_QuickShoot_Button():
  391. break #Break to Handle Quick Shoot.
  392. sleep(0.100)
  393.  
  394. #Check if we are ADS
  395. MB2_State = GetKeyState(0x02)
  396. DebugPrint("Checking for MB2 or Reload")
  397. if MB2_State < 0 or Reloading:
  398. #We are ADS and trying to shoot with No Recoil.
  399. DebugPrint("Detected MB2 for ADS or Reloading")
  400. keyboard.send(Ingame_Weapon_Pickaxe);
  401. sleep(0.020);
  402.  
  403. #Since we are shooting and have canceled any reload anim by now set it to false.
  404. Reloading = False
  405.  
  406. #Emote to cancel pull out animation.
  407. Cancel_Anim(Weapon, Keybind_FastEmote3)
  408.  
  409. count = 0
  410. #Loop while Attempting to Fire at a specified count.
  411. while True:
  412. count = count + 1
  413. if count == QuickShoot_Fire_Attempts:
  414. break #Break when we have hit the end of the delay.
  415. #Send Fire Event.
  416. keyboard.send(Ingame_Keybind_Fire)
  417. DebugPrint("Firing Fast")
  418. sleep(0.010)
  419. #Switch back to Weapon that was Active before the Fast Shoot.
  420. Switch_to_Weapon(OldWeapon)
  421. sleep(0.100)
  422. #Check if MB1 is still down.
  423. Handle_MB1_Down()
  424.  
  425. #Fire: Handles No Recoil and Anti Bloom
  426. def Fire(ADS, Recoil):
  427. global JitterFlop
  428. global Crouching
  429. global Reloading
  430.  
  431. #Init Locals
  432. local_Jitter = 0
  433. local_Jitter_ADS = 0
  434.  
  435. #We are Shooting and not reloading so set global to False
  436. Reloading = False
  437.  
  438. Local_Mouse_Pos = queryMousePosition()
  439.  
  440. DebugPrint("Sending Simulated Fire Event")
  441. keyboard.press(Ingame_Keybind_Fire) #Send the input to fire the weapon
  442. sleep(0.020) #Delay to ensure the fire button gets recognized by the game
  443.  
  444. if Current_Weapon.name != "Pickaxe" and (Current_Weapon.type == "AR" or Current_Weapon.type == "SMG"):
  445.  
  446. #We are Shooting with Fire Button Down and without a Pickaxe
  447. if Current_Weapon.ControlFireRate:
  448. #Release the Fire Button if we are controlling Fire Rate
  449. keyboard.release(Ingame_Keybind_Fire)
  450.  
  451. #If Fire has beeen called with the Recoil Bool then we can compensate
  452. if Recoil:
  453. #We are not Pickaxing and wanting to use Jitter so set it based on weapon
  454. if Use_Jitter:
  455. if JitterFlop == False:
  456. JitterFlop = True
  457. local_Jitter = Current_Weapon.jitter
  458. local_Jitter_ADS = Current_Weapon.jitter_ADS
  459. else:
  460. JitterFlop = False
  461. local_Jitter = Current_Weapon.jitter * -1
  462. local_Jitter_ADS = Current_Weapon.jitter_ADS * -1
  463. if Current_Weapon.firstshot == 0:
  464. Current_Weapon.firstshot = time()
  465. print("firstshot: {0}".format(time()))
  466. if ADS:
  467. #mouse.move(local_Jitter_ADS, Current_Weapon.recoil_ADS_Static, absolute=False, duration=Current_Weapon.update_time_ADS)
  468. Move_Mouse(local_Jitter_ADS, Current_Weapon.recoil_ADS_Init)
  469. else:
  470. print("current coursor pos: X:{0}, Y:{1}".format(Local_Mouse_Pos.x, Local_Mouse_Pos.y))
  471. Move_Mouse(local_Jitter, Current_Weapon.recoil_Hip_Init)
  472. else:
  473. difference = time() - Current_Weapon.firstshot
  474. print("Not firstshot, Difference: {0}".format(difference))
  475. if ADS:
  476. #mouse.move(local_Jitter_ADS, Current_Weapon.recoil_ADS_Static, absolute=False, duration=Current_Weapon.update_time_ADS)
  477. if difference >= Current_Weapon.recoil_ADS_Init_Delay:
  478. Move_Mouse(local_Jitter_ADS, Current_Weapon.recoil_ADS_Static)
  479. else:
  480. Move_Mouse(local_Jitter_ADS, Current_Weapon.recoil_ADS_Init)
  481. else:
  482. if difference >= Current_Weapon.recoil_Hip_Init_Delay:
  483. print("current coursor pos: X:{0}, Y:{1}".format(Local_Mouse_Pos.x, Local_Mouse_Pos.y))
  484. Move_Mouse(local_Jitter, Current_Weapon.recoil_Hip_Static)
  485. else:
  486. print("current coursor pos: X:{0}, Y:{1}".format(Local_Mouse_Pos.x, Local_Mouse_Pos.y))
  487. Move_Mouse(local_Jitter, Current_Weapon.recoil_Hip_Init)
  488. #mouse.move(local_Jitter, Current_Weapon.recoil_Hip_Static, absolute=False, duration=Current_Weapon.update_time)
  489. DebugPrint("Done Sending Simulated Fire Event")
  490.  
  491. #Switch to Weapon: Finds Weapon in Current Loadout and Switches to it
  492. def Switch_to_Weapon(Weapon):
  493. global Editing
  494. global Building
  495. global Current_Weapon
  496. global Reloading
  497.  
  498. if Weapon == Current_Weapon and not Building and not Editing:
  499. return 2 #Return Error:2 Which means Weapon is Already Out.
  500.  
  501. #Check if we are trying to switch to the Pickaxe.
  502. if Weapon.name == "Pickaxe":
  503. DebugPrint("Attempting to Switch Weapon to Pickaxe")
  504.  
  505. #Send Event to Switch to Pickaxe.
  506. keyboard.send(Ingame_Weapon_Pickaxe)
  507.  
  508. #Set the Global to the new weapon.
  509. Current_Weapon = Weapon
  510.  
  511. #Reset Globals.
  512. Building = False
  513. Editing = False
  514. Reloading = False
  515.  
  516. return 1 #Return 1 for Success.
  517. else: #We are trying to switch to another weapon other than the pickaxe.
  518.  
  519. DebugPrint("Attempting to Switch Weapon\nSearching for Weapon:{0} in Current Loadout".format(Weapon.name))
  520.  
  521. #Parse the Players Current Loadout for the Weapon.
  522. for i in range(len(Current_Loadout)):
  523. DebugPrint("Checking Inventory Slot{0}\nFound: {1}".format(i, Current_Loadout[i].name))
  524.  
  525. if Current_Loadout[i].name == Weapon.name:
  526. DebugPrint("Found Weapon, Attempting Switch")
  527.  
  528. #Switch to the Found weapon
  529. keyboard.send(InvSlot_to_WeaponKeybind(i))
  530.  
  531. #Set the Global to the new weapon.
  532. Current_Weapon = Weapon
  533.  
  534. #Reset Globals.
  535. Building = False
  536. Editing = False
  537. Reloading = False
  538.  
  539. return 1 #Return 1 for Success.
  540. elif i >= 5: #We have reached the end of the Loadout.
  541. break #Break to return 3 Error.
  542. return 3 #Return 3 Which means Unknown Error.
  543.  
  544. #Handle Mouse Button 1 Down, Pretty much the Bread and Butter
  545. #TODO need to find a better way to check MB1, MB2 and MB6 so it doesnt use Win32API
  546. def Handle_MB1_Down():
  547.  
  548. #Locals
  549. ADS = False
  550. overrun = 0
  551.  
  552. #Debug Out
  553. DebugPrint("MB1 Event Detected")
  554.  
  555. #Loop While MB1 is down and fast shoot button is not pressed
  556. while True:
  557. #Prevent Infinite Loop from an Overrun Error.
  558. overrun = overrun + 1
  559. if overrun >= 4000:
  560. Current_Weapon.firstshot = 0 #Reset First Shot Timer
  561. keyboard.release(Ingame_Keybind_Fire) #Relase the Actual Fire Key
  562. break #Break if we hit overrun
  563.  
  564. #Use Win32API to get state of MB1 and MB2 because mouse.is_pressed() is retarted
  565. MB1_State = GetKeyState(0x01)
  566. DebugPrint("Checking if MB1 is Still Down")
  567. #Check if MB1 is still down both Logically and Hardware Based
  568. if MB1_State >= 0 and GetAsyncKeyState(0x01) == 0:
  569. Current_Weapon.firstshot = 0 #Reset First Shot Timer
  570. DebugPrint("MB1 Button Released, State: {0}".format(MB1_State))
  571. keyboard.release(Ingame_Keybind_Fire) #Relase the Actual Fire Key
  572. break #Break if we are not pressing MB1 Anymore
  573. else:
  574. DebugPrint("MB1 Still Detected, State: {0}".format(MB1_State))
  575.  
  576. #Check if we are in Pickaxe Mode
  577. if Current_Weapon.name == "Pickaxe":
  578.  
  579. #Check if Quick Shoot Button is Pressed
  580. if isPressed_QuickShoot_Button() and Option_Quick_Shoot:
  581. break #Break to Handle Quick Shoot
  582.  
  583. DebugPrint("Swinging Pickaxe")
  584. Fire(False, False) # Send Command to Swing Pickaxe
  585.  
  586. #FastFarming would go here
  587.  
  588. #if we are using Quick shoot then we need to check every 10ms during the pickaxe swing delay
  589. if Option_Quick_Shoot:
  590. count = 20 # 20x10ms = 200ms (Current Optimal Pickaxe Swingtime)
  591. while True:
  592. count = count - 1
  593. if count <= 0:
  594. break #Break to Swing the Axe again
  595. if isPressed_QuickShoot_Button():
  596. break #Break to Handle Quick Shoot
  597. sleep(0.010)
  598. else: #Not using Quickshoot so just delay 200ms
  599. sleep(0.200)
  600.  
  601. else: # Trying to Fire something that is not a pickaxe
  602.  
  603. #Check if we are trying to Quick Shoot
  604. if isPressed_QuickShoot_Button() and Option_Quick_Shoot:
  605. Current_Weapon.firstshot = 0 #Reset First Shot Timer
  606. if not Current_Weapon.ControlFireRate: #Fire Key may still be Down from Last Fire() so release it.
  607. keyboard.release(Ingame_Keybind_Fire)
  608. break #Break to Handle Quick Shoot
  609.  
  610. #Check if we are ADS.
  611. MB2_State = GetKeyState(0x02)
  612. DebugPrint("Checking for MB2")
  613. #Check for MB2 both Logically and Hardware Based
  614. if MB2_State < 0 and GetAsyncKeyState(0x02) == 1:
  615. #We are ADS and trying to shoot with No Recoil
  616. DebugPrint("MB2 is Detected, Setting ADS to True")
  617. ADS = True
  618. else:
  619. ADS = False
  620.  
  621. #Check if we should use anti recoil for hipfire
  622. if Use_No_Recoil_Hipfire and not ADS:
  623. #Hipfire No Recoil
  624. DebugPrint("Hipfire Reducing")
  625. Fire(False, True)
  626.  
  627. #Check if we are trying to Quick Shoot
  628. if isPressed_QuickShoot_Button() and Option_Quick_Shoot:
  629. Current_Weapon.firstshot = 0 #Reset First Shot Timer
  630. if not Current_Weapon.ControlFireRate: #Fire Key may still be Down from Last Fire() so release it.
  631. keyboard.release(Ingame_Keybind_Fire)
  632. break #Break to Handle Quick Shoot
  633.  
  634. #Delay for the set amount of time in the Weapon Def
  635. sleep(Current_Weapon.update_time)
  636. elif ADS and Use_No_Recoil_ADS:
  637. #ADS, No Recoil
  638. DebugPrint("ADS Reducing")
  639. Fire(True, True)
  640.  
  641. #Check if we are trying to Quick Shoot
  642. if isPressed_QuickShoot_Button() and Option_Quick_Shoot:
  643. Current_Weapon.firstshot = 0 #Reset First Shot Timer
  644. if not Current_Weapon.ControlFireRate: #Fire Key may still be Down from Last Fire() so release it.
  645. keyboard.release(Ingame_Keybind_Fire)
  646. break #Break to Handle Quick Shoot
  647.  
  648. #Delay for the set amount of time in the Weapon Def
  649. sleep(Current_Weapon.update_time_ADS)
  650. else:
  651. #No Recoil Mode Off
  652. DebugPrint("Not Reducing")
  653. Fire(False, False)
  654.  
  655. #Check if we are trying to Quick Shoot
  656. if isPressed_QuickShoot_Button() and Option_Quick_Shoot:
  657. Current_Weapon.firstshot = 0 #Reset First Shot Timer
  658. if not Current_Weapon.ControlFireRate: #Fire Key may still be Down from Last Fire() so release it.
  659. keyboard.release(Ingame_Keybind_Fire)
  660. break #Break to Handle Quick Shoot
  661.  
  662. #Delay for the set amount of time in the Weapon Def
  663. sleep(Current_Weapon.delay_time)
  664.  
  665. # if Current_Weapon.ControlFireRate == False:
  666. # Current_Weapon.firstshot = 0
  667. # keyboard.release(Ingame_Keybind_Fire)
  668. # break
  669.  
  670. #Keyboard Hook Callback Function: Gets run when Keyboard activity is detected.
  671. def Keyboard_Input(Keyboard_Event):
  672. global Editing
  673. global Building
  674. global Crouching
  675. global Jumping
  676. global Reloading
  677. global Using
  678.  
  679. if type(Keyboard_Event) == keyboard._keyboard_event.KeyboardEvent:
  680. #Debug Output
  681. if Debug_Keyboard:
  682. DebugPrint("Keyboard_Event: Key:{0},Scancode:{1}, Action:{2},Modifier:{3} Time:{4}".format(Keyboard_Event.name,Keyboard_Event.scan_code, Keyboard_Event.event_type, Keyboard_Event.modifiers, Keyboard_Event.time))
  683.  
  684. #Weapon Slot 1
  685. if Keyboard_Event.name == Keybind_Weapon_Slot1 and Keyboard_Event.event_type == "down" and Enabled:
  686.  
  687. #Get Weapon in Slot 1 of Inventory
  688. TargetWeapon = Current_Loadout[0]
  689.  
  690. #Check if we should try and Fast Switch the Weapon
  691. if Option_Fast_Weapon_Switch and TargetWeapon.type != "Heal" and TargetWeapon.type != "Nade":
  692. if TargetWeapon != Current_Weapon or (Building or Editing):
  693. Cancel_Anim(TargetWeapon, Keybind_FastEmote3)
  694. else:
  695. DebugPrint("Error when attempting to fast switch: Weapon Already Selected")
  696. else:
  697. #If we are in the middle of a reload then Cancel by switching to Pickaxe
  698. if Reloading:
  699. Reloading = False
  700. keyboard.send(Ingame_Weapon_Pickaxe);
  701. sleep(0.020);
  702. Switch_to_Weapon(TargetWeapon)
  703.  
  704. #Weapon Slot 2
  705. elif Keyboard_Event.name == Keybind_Weapon_Slot2 and Keyboard_Event.event_type == "down" and Enabled:
  706.  
  707. #Get Weapon in Slot 2 of Inventory
  708. TargetWeapon = Current_Loadout[1]
  709.  
  710. #Check if we should try and Fast Switch the Weapon
  711. if Option_Fast_Weapon_Switch and TargetWeapon.type != "Heal" and TargetWeapon.type != "Nade":
  712. if TargetWeapon != Current_Weapon or (Building or Editing):
  713. Cancel_Anim(TargetWeapon, Keybind_FastEmote3)
  714. else:
  715. DebugPrint("Error when attempting to fast switch: Weapon Already Selected")
  716. else:
  717. #If we are in the middle of a reload then Cancel by switching to Pickaxe
  718. if Reloading:
  719. Reloading = False
  720. keyboard.send(Ingame_Weapon_Pickaxe);
  721. sleep(0.020);
  722. Switch_to_Weapon(TargetWeapon)
  723.  
  724. #Weapon Slot 3
  725. elif Keyboard_Event.name == Keybind_Weapon_Slot3 and Keyboard_Event.event_type == "down" and Enabled:
  726.  
  727. #Get Weapon in Slot 3 of Inventory
  728. TargetWeapon = Current_Loadout[2]
  729.  
  730. #Check if we should try and Fast Switch the Weapon
  731. if Option_Fast_Weapon_Switch and TargetWeapon.type != "Heal" and TargetWeapon.type != "Nade":
  732. if TargetWeapon != Current_Weapon or (Building or Editing):
  733. Cancel_Anim(TargetWeapon, Keybind_FastEmote3)
  734. else:
  735. DebugPrint("Error when attempting to fast switch: Weapon Already Selected")
  736. else:
  737. #If we are in the middle of a reload then Cancel by switching to Pickaxe
  738. if Reloading:
  739. Reloading = False
  740. keyboard.send(Ingame_Weapon_Pickaxe);
  741. sleep(0.020);
  742. Switch_to_Weapon(TargetWeapon)
  743.  
  744. #Weapon Slot 4
  745. elif Keyboard_Event.name == Keybind_Weapon_Slot4 and Keyboard_Event.event_type == "down" and Enabled:
  746.  
  747. #Get Weapon in Slot 4 of Inventory
  748. TargetWeapon = Current_Loadout[3]
  749.  
  750. #Check if we should try and Fast Switch the Weapon
  751. if Option_Fast_Weapon_Switch and TargetWeapon.type != "Heal" and TargetWeapon.type != "Nade":
  752. if TargetWeapon != Current_Weapon or (Building or Editing):
  753. Cancel_Anim(TargetWeapon, Keybind_FastEmote3)
  754. else:
  755. DebugPrint("Error when attempting to fast switch: Weapon Already Selected")
  756. else:
  757. #If we are in the middle of a reload then Cancel by switching to Pickaxe
  758. if Reloading:
  759. Reloading = False
  760. keyboard.send(Ingame_Weapon_Pickaxe);
  761. sleep(0.020);
  762. Switch_to_Weapon(TargetWeapon)
  763.  
  764. #Weapon Slot 5
  765. elif Keyboard_Event.name == Keybind_Weapon_Slot5 and Keyboard_Event.event_type == "down" and Enabled:
  766.  
  767. #Get Weapon in Slot one of Inventory
  768. TargetWeapon = Current_Loadout[4]
  769.  
  770. #Check if we should try and Fast Switch the Weapon
  771. if Option_Fast_Weapon_Switch and TargetWeapon.type != "Heal" and TargetWeapon.type != "Nade":
  772. if TargetWeapon != Current_Weapon or (Building or Editing):
  773. Cancel_Anim(TargetWeapon, Keybind_FastEmote3)
  774. else:
  775. DebugPrint("Error when attempting to fast switch: Weapon Already Selected")
  776. else:
  777. #If we are in the middle of a reload then Cancel by switching to Pickaxe
  778. if Reloading:
  779. Reloading = False
  780. keyboard.send(Ingame_Weapon_Pickaxe);
  781. sleep(0.020);
  782. Switch_to_Weapon(TargetWeapon)
  783.  
  784. #Weapon Slot Pickaxe
  785. elif Keyboard_Event.name == Keybind_Weapon_Pickaxe and Keyboard_Event.event_type == "down" and Enabled:
  786.  
  787. #Check if we should try and Fast Switch the Weapon
  788. if Option_Fast_Weapon_Switch:
  789. if Pickaxe != Current_Weapon or (Building or Editing):
  790. Cancel_Anim(Pickaxe, Keybind_FastEmote3)
  791. else:
  792. DebugPrint("Error when attempting to fast switch: Weapon Already Selected")
  793. else:
  794. Switch_to_Weapon(Pickaxe)
  795.  
  796. #Edit Keybind Handling
  797. elif Keyboard_Event.name == Keybind_Edit and Keyboard_Event.event_type == "down" and Enabled:
  798. #Set the Edit flag
  799. if not Editing:
  800. keyboard.send(Ingame_Keybind_Edit)
  801. DebugPrint("Detected Editing")
  802. Editing = True
  803. elif Keyboard_Event.name == Keybind_Edit and Keyboard_Event.event_type == "up" and Enabled:
  804. #Set the Edit flag
  805. if Editing:
  806. keyboard.send(Ingame_Keybind_Edit)
  807. DebugPrint("Finished Editing")
  808. Editing = False
  809.  
  810. #Building Keybind Handling
  811. elif Keyboard_Event.name == Ingame_Keybind_Ramp and Keyboard_Event.event_type == "down" and Enabled:
  812. DebugPrint("Detected Building")
  813. #Set the Building flag
  814. Building = True
  815. elif Keyboard_Event.name == Ingame_Keybind_Platform and Keyboard_Event.event_type == "down" and Enabled:
  816. DebugPrint("Detected Building")
  817. #Set the Building flag
  818. Building = True
  819. elif Keyboard_Event.name == Ingame_Keybind_Roof and Keyboard_Event.event_type == "down" and Enabled:
  820. DebugPrint("Detected Building")
  821. #Set the Building flag
  822. Building = True
  823.  
  824. #Cruching Keybind Handling
  825. elif Keyboard_Event.name == Ingame_Keybind_Crouch and Keyboard_Event.event_type == "down" and Enabled:
  826. DebugPrint("Detected Crouching")
  827. #Set the Building flag
  828. if Crouching:
  829. Crouching = False
  830. else:
  831. Crouching = True
  832.  
  833. #Jumping Keybind Handling
  834. elif Keyboard_Event.name == Ingame_Keybind_Jump and Keyboard_Event.event_type == "down" and Enabled:
  835. DebugPrint("Detected Jumping")
  836. #Set the Jumping Global to Current Time.
  837. Jumping = time()
  838. #Set the Crouching Global to False since if jumping we are not crouching.
  839. Crouching = False
  840.  
  841. #Reload Keybind Handling
  842. elif Keyboard_Event.name == Ingame_Keybind_Reload and Keyboard_Event.event_type == "down" and Enabled:
  843. DebugPrint("Detected Reloading")
  844. Reloading = True
  845.  
  846. #Use Keybind Handling
  847. elif Keyboard_Event.name == Keybind_Use and Keyboard_Event.event_type == "down" and Enabled:
  848. Turbo_Use()
  849. elif Keyboard_Event.name == Keybind_Use and Keyboard_Event.event_type == "up" and Enabled:
  850. Using = False
  851. DebugPrint("Detected End of Use Action")
  852.  
  853. #Mouse Hook Callback Function: Gets run when Mouse activity is detected.
  854. def Mouse_Input(Mouse_Event):
  855. global Editing
  856. global Building
  857.  
  858. if Running:
  859. #Mouse Wheel Event.
  860. if type(Mouse_Event) == mouse._mouse_event.MoveEvent:
  861. if Debug_Movement:
  862. DebugPrint("Move_Event: x:{0}, y:{1}, Time:{2}".format(Mouse_Event.x, Mouse_Event.y, Mouse_Event.time))
  863.  
  864. #Mouse Button Event.
  865. elif type(Mouse_Event) == mouse._mouse_event.ButtonEvent:
  866.  
  867. if Debug_Buttons:
  868. DebugPrint("Button_Event: Type:{0}, Button:{1}, Time:{2}".format(Mouse_Event.event_type, Mouse_Event.button, Mouse_Event.time))
  869.  
  870. #Handle MouseButton1 Down Event
  871. if Mouse_Event.event_type == "down" and Mouse_Event.button == Keybind_Fire and Enabled:
  872. #Only Handle MB1 for Weapons so if building or editing then we dont want to control it.
  873. if not Editing and not Building:
  874. Handle_MB1_Down()
  875.  
  876. #Handle MouseButton2 Down Event
  877. elif Mouse_Event.event_type == "down" and Mouse_Event.button == Ingame_Keybind_Edit_Reset and Enabled:
  878. #Fast Edit Reset:
  879. if Editing and Option_Fast_Edit_Reset:
  880.  
  881. #If we are editing and right click with Fast Reset enabled then exit edit mode.
  882. keyboard.send(Ingame_Keybind_Edit)
  883. DebugPrint("Finished Editing with Quick Reset")
  884. Editing = False
  885.  
  886. #Handle Quick Switch Weapon
  887. elif Mouse_Event.event_type == "down" and Mouse_Event.button == Keybind_QuickShoot_Button and Enabled:
  888. Quick_Shoot(PUMP)
  889.  
  890. #Handle Enable Eventv
  891. elif Mouse_Event.event_type == "down" and Mouse_Event.button == Keybind_Enable:
  892. Toggle_Enabled()
  893.  
  894. #Handle Building Event
  895. elif Mouse_Event.event_type == "down" and Mouse_Event.button == Ingame_Keybind_Wall:
  896. DebugPrint("Detected Building")
  897. Building = True
  898.  
  899. elif type(Mouse_Event) == mouse._mouse_event.WheelEvent:
  900. if Debug_Wheel:
  901. DebugPrint("Wheel_Event: Delta:{0}, Time:{1}".format(Mouse_Event.delta, Mouse_Event.time))
  902.  
  903. def Init_Weapons():
  904. #AR
  905. #Info;
  906. #Advertised Fire Rate = 181.81ms (5.5)
  907. AR.recoil_Hip_Init = 21
  908. AR.recoil_Hip_Init_Delay = 0.340
  909. AR.recoil_Hip_Static = 23
  910. AR.recoil_ADS_Init = 30
  911. AR.recoil_ADS_Init_Delay = 0.330
  912. AR.recoil_ADS_Static = 1
  913. AR.jitter = 0
  914. AR.jitter_ADS = 0
  915. AR.update_time = 0.040 #+0.020
  916. if Option_AR_Perfect_Aim:
  917. AR.update_time_ADS = 0.330
  918. else:
  919. AR.update_time_ADS = 0.040
  920. AR.firstshot = 0.0
  921. AR.ControlFireRate = True
  922. AR.type = "AR"
  923. #SCAR
  924. SCAR.recoil_Hip_Init = 21
  925. SCAR.recoil_Hip_Init_Delay = 0.340
  926. SCAR.recoil_Hip_Static = 23
  927. SCAR.recoil_ADS_Init = 30
  928. SCAR.recoil_ADS_Init_Delay = 0.330
  929. SCAR.recoil_ADS_Static = 1
  930. SCAR.jitter = 0
  931. SCAR.jitter_ADS = 0
  932. SCAR.update_time = 0.040
  933. SCAR.update_time_ADS = 0.330
  934. SCAR.firstshot = 0.0
  935. SCAR.ControlFireRate = True
  936. SCAR.type = "AR"
  937. #BURST
  938. BURST.recoil_Hip_Init = 150
  939. BURST.recoil_Hip_Static = 100
  940. BURST.recoil_ADS_Init = 125
  941. BURST.recoil_ADS_Static = 70
  942. BURST.jitter = 2
  943. BURST.jitter_ADS = 2
  944. BURST.update_time = 10
  945. BURST.update_time_ADS = 10
  946. BURST.firstshot = 0
  947. BURST.type = "AR"
  948. #PUMP
  949. PUMP.firstshot = 0
  950. PUMP.type = "Shotgun"
  951. #TAC
  952. TAC.firstshot = 0
  953. TAC.type = "Shotgun"
  954. #HEAVY
  955. HEAVY.firstshot = 0
  956. HEAVY.type = "Shotgun"
  957. #SMG
  958. SMG.recoil_Hip_Init = 4
  959. SMG.recoil_Hip_Init_Delay = 0.160
  960. SMG.recoil_Hip_Static = 8
  961. SMG.recoil_ADS_Init = 5
  962. SMG.recoil_ADS_Init_Delay = 0.160
  963. SMG.recoil_ADS_Static = 1
  964. SMG.jitter = 10
  965. SMG.jitter_ADS = 2
  966. SMG.update_time = 0.010
  967. SMG.update_time_ADS = 0.010
  968. SMG.firstshot = 0.0
  969. SMG.ControlFireRate = False
  970. SMG.type = "SMG"
  971. #SILENCEDSMG
  972. S_SMG.recoil_Hip_Init = 150
  973. S_SMG.recoil_Hip_Static = 100
  974. S_SMG.recoil_ADS_Init = 125
  975. S_SMG.recoil_ADS_Static = 70
  976. S_SMG.jitter = 2
  977. S_SMG.jitter_ADS = 2
  978. S_SMG.update_time = 10
  979. S_SMG.update_time_ADS = 10
  980. S_SMG.firstshot = 0
  981. S_SMG.type = "SMG"
  982. #TOMMYGUN
  983. TOMMYGUN.recoil_Hip_Init = 150
  984. TOMMYGUN.recoil_Hip_Static = 100
  985. TOMMYGUN.recoil_ADS_Init = 125
  986. TOMMYGUN.recoil_ADS_Static = 70
  987. TOMMYGUN.jitter = 2
  988. TOMMYGUN.jitter_ADS = 2
  989. TOMMYGUN.update_time = 10
  990. TOMMYGUN.update_time_ADS = 10
  991. TOMMYGUN.firstshot = 0
  992. TOMMYGUN.type = "SMG"
  993. #P90
  994. P90.recoil_Hip_Init = 150
  995. P90.recoil_Hip_Static = 100
  996. P90.recoil_ADS_Init = 125
  997. P90.recoil_ADS_Static = 70
  998. P90.jitter = 2
  999. P90.jitter_ADS = 2
  1000. P90.update_time = 10
  1001. P90.update_time_ADS = 10
  1002. P90.firstshot = 0
  1003. P90.type = "SMG"
  1004. #Hunting Rifle
  1005. HR.firstshot = 0
  1006. HR.type = "Sniper"
  1007. #Bolt Rifle
  1008. BOLT.firstshot = 0
  1009. BOLT.type = "Sniper"
  1010. #Scoped AR
  1011. SAR.firstshot = 0
  1012. SAR.type = "Sniper"
  1013. #Rockets
  1014. ROCKET.firstshot = 0
  1015. ROCKET.type = "Splode"
  1016. #Grenades
  1017. NADES.firstshot = 0
  1018. NADES.type = "Nade"
  1019. #Healing
  1020. HEAL.type = "Heal"
  1021.  
  1022. #Detect if we are being run
  1023. if __name__ == '__main__':
  1024. DebugPrint('Starting FortBolt\n')
  1025. DebugPrint('Initalizing Globals\n')
  1026. Running = True
  1027. Enabled = False
  1028. JitterFlop = False
  1029. Editing = False
  1030. Building = False
  1031. Crouching = False
  1032. Reloading = False
  1033. Using = False
  1034. Jumping = 0.0
  1035. Init_Weapons()
  1036. Current_Weapon = Pickaxe
  1037. Current_Loadout = [AR, PUMP, SMG, HR, HEAL]
  1038.  
  1039. try:
  1040. main()
  1041. exit
  1042. except ValueError:
  1043. print("Error: Could not Run Script")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement