├── README.md └── tsl.py /README.md: -------------------------------------------------------------------------------- 1 | 使用: 2 |
pip install pynput         
 3 | python tslgame.py
 4 | 
5 | 6 | f7 = 开/关脚本 7 | 开启脚本后按鼠标左键就会自动向下偏移,按pageUp/pageDown可以切换不同的武器预设。 8 | 武器预设为m16时按住鼠标左键会自动连点。 9 | 10 | f8 = 开/关调试模式 11 | 调试模式开启后不再使用武器预设数据,而是以15px为基础,通过pageUp/pageDown自由控制偏移量。 12 | 你可以通过这个模式寻找适合不同武器的偏移量,然后写回到武器预设里。 13 | 14 | **注意:这个脚本已经可以运行,但是武器预设的偏移量并没有经过实际测试。** 15 | 如果你有兴趣的话欢迎使用f8调试模式测试各个武器的偏移量,然后提交pull request给我 16 | -------------------------------------------------------------------------------- /tsl.py: -------------------------------------------------------------------------------- 1 | import time, threading, random 2 | from pynput import mouse, keyboard 3 | 4 | GUN_TYPE = 0 5 | GUN_PRESETS = [ 6 | { 'name': 'M4', 'delta': 15, 'cd': 0.086 }, 7 | { 'name': 'M16', 'delta': 11, 'cd': 0.075 }, 8 | { 'name': 'Scarl', 'delta': 19, 'cd': 0.096 }, 9 | { 'name': 'Mini14', 'delta': 11.2, 'cd': 0.1 }, 10 | { 'name': 'AKM', 'delta': 15, 'cd': 0.1 }, 11 | { 'name': 'UMP9', 'delta': 15, 'cd': 0.092 }, 12 | { 'name': 'Uzi', 'delta': 15, 'cd': 0.048 } 13 | ] 14 | 15 | ON = False 16 | TEST_MODE = False 17 | 18 | MOUSE_LEFT_DOWN = False 19 | CLICK_SENT_BY_SCRIPT = 0 20 | 21 | MOUSE_Y_DELTA = 15 22 | 23 | controller = mouse.Controller() 24 | 25 | def init_keyboard(): 26 | def on_press(key): 27 | global ON, TEST_MODE, MOUSE_Y_DELTA, GUN_TYPE, GUN_PRESETS 28 | 29 | # turnOn/Off 30 | if key == keyboard.Key.f7: 31 | ON = not ON 32 | print 'Program %s' % ('ON' if ON else 'OFF') 33 | 34 | # do not handle other input when off 35 | if not ON: 36 | return True 37 | 38 | # switch test mode 39 | if key == keyboard.Key.f8: 40 | TEST_MODE = not TEST_MODE 41 | if TEST_MODE: 42 | print 'Test mode %s' % ('ON' if TEST_MODE else 'OFF') 43 | 44 | # page up 45 | elif key == keyboard.Key.page_up: 46 | if TEST_MODE: 47 | MOUSE_Y_DELTA += 1 48 | print 'Current mouse delta: %s' % MOUSE_Y_DELTA 49 | elif GUN_TYPE < len(GUN_PRESETS) - 1: 50 | GUN_TYPE += 1 51 | print 'Weapon mode switched to %s' % GUN_PRESETS[GUN_TYPE]['name'] 52 | 53 | # page down 54 | elif key == keyboard.Key.page_down: 55 | if TEST_MODE: 56 | MOUSE_Y_DELTA -= 1 57 | print 'Current mouse delta: %s' % MOUSE_Y_DELTA 58 | elif GUN_TYPE > 0 : 59 | GUN_TYPE -= 1 60 | print 'Weapon mode switched to %s' % GUN_PRESETS[GUN_TYPE]['name'] 61 | 62 | with keyboard.Listener(on_press=on_press) as listener: 63 | listener.join() 64 | 65 | k = threading.Thread(target=init_keyboard) 66 | k.setDaemon(True) 67 | k.start() 68 | 69 | # -- 70 | 71 | def move_mouse(): 72 | global ON, TEST_MODE, MOUSE_Y_DELTA, MOUSE_LEFT_DOWN, GUN_PRESETS, GUN_TYPE 73 | while True: 74 | if ON and MOUSE_LEFT_DOWN: 75 | controller.move(0, GUN_PRESETS[GUN_TYPE]['delta'] if not TEST_MODE else MOUSE_Y_DELTA) 76 | time.sleep(GUN_PRESETS[GUN_TYPE]['cd'] if not TEST_MODE else 0.1) 77 | 78 | t = threading.Thread(target=move_mouse) 79 | t.setDaemon(True) 80 | t.start() 81 | 82 | # -- 83 | # auto send click for M16A4 84 | def click_mouse(): 85 | global ON, MOUSE_LEFT_DOWN, CLICK_SENT_BY_SCRIPT, GUN_PRESETS, GUN_TYPE 86 | cooldown = 0.125 87 | while True: 88 | if ON and MOUSE_LEFT_DOWN and GUN_PRESETS[GUN_TYPE]['name'] == 'M16': 89 | CLICK_SENT_BY_SCRIPT += 2 90 | controller.click(mouse.Button.left) 91 | cooldown = random.uniform(0.001, 0.125) 92 | time.sleep(cooldown) 93 | 94 | t2 = threading.Thread(target=click_mouse) 95 | t2.setDaemon(True) 96 | t2.start() 97 | 98 | # -- 99 | 100 | def on_click(x, y, button, pressed): 101 | global MOUSE_LEFT_DOWN, CLICK_SENT_BY_SCRIPT 102 | if button == mouse.Button.left: 103 | # don't handle auto-sent left down 104 | if CLICK_SENT_BY_SCRIPT > 0: 105 | CLICK_SENT_BY_SCRIPT -= 1 106 | else: 107 | MOUSE_LEFT_DOWN = pressed 108 | 109 | # listen 110 | with mouse.Listener(on_click=on_click) as listener: 111 | listener.join() --------------------------------------------------------------------------------