├── 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()
--------------------------------------------------------------------------------