import os import sys import subprocess import atexit from threading import Timer import string import random import time import socket import codecs looptestPath = '/home/gameservers/.steam/steam/steamapps/common/Counter-Strike Source/cstrike/cfg/looptest.cfg' chatmsg = "" ladder_counter = 0 message_counter = 0 def writeCfgInput(Input): with open(looptestPath, 'w') as f: f.write(Input) def resetCfgInputShortWait(): str = "wait 5; " with open(looptestPath, 'w') as f: f.write(str) time.sleep(0.5) def exit_handler(): print('reached exithandler') resetCfgInputShortWait() def joinTeam(): str = "jointeam 2; wait 2; zspawn; wait 1; {0}; wait 5;" writeCfgInput(str) time.sleep(4.5) print('jointeam func: ') def bot_process_keyinput(input_line): movement_input = input_line[input_line.index("keyinput:") + len("keyinput:"):input_line.index("dist_target:")] dist_target = input_line[input_line.index("dist_target:") + len("dist_target:"):] dist_target = float(dist_target) strInput = "" for _ in range(2): strInput += f"""{movement_input}; wait 5; """ strInput += "-jump; wait 5; -duck; wait 5;" writeCfgInput(strInput) print('dist_target: ', dist_target, ' movement strinput: ', strInput) time.sleep(0.2) writeCfgInput("wait 5;") def bot_process_movement(input_line): global message_counter message_counter += 1 dist_target = input_line[input_line.index("dist_target:") + len("dist_target:"):input_line.index("targethuman:")] targethuman = input_line[input_line.index("targethuman:") + len("targethuman:"):input_line.index("bot_on_type:")] bot_on_type = input_line[input_line.index("bot_on_type:") + len("bot_on_type:"):input_line.index("enemy_distance:")] enemy_distance = input_line[input_line.index("enemy_distance:") + len("enemy_distance:"):input_line.index("bot_stuck:")] bot_stuck = input_line[input_line.index("bot_stuck:") + len("bot_stuck:"):input_line.index("targeteam:")] targeteam = input_line[input_line.index("targeteam:") + len("targeteam:"):] dist_target = float(dist_target) enemy_distance = float(enemy_distance) bot_on_type = int(bot_on_type) bot_stuck = int(bot_stuck) targeteam = int(targeteam) strInput = "-attack; wait 2; -use; wait 5; -jump; wait 5; -duck; wait 5; +attack; wait 5; cl_minmodels 1; wait 2; +use; " if bot_stuck: print('bot stuck') strInput += "+jump; wait 15; +duck; wait 15; -jump; wait 15; -duck; wait 3;" if dist_target > 0.5: strInput += "use weapon_elite; wait 3; " elif targeteam == 3: strInput += "use weapon_p90; wait 3; " elif targeteam == 2: strInput += "use weapon_knife; wait 5; " global ladder_counter if bot_on_type == 0 and ladder_counter < 100: print('bot_on_type ladder, ladder_counter: ', ladder_counter) strInput += "setang -90 90 0; wait 5; -back; wait 3; -moveleft; wait 3; -moveright; wait 5; -jump; wait 3; -duck; wait 3; +forward; wait 5;" ladder_counter += 1 elif bot_on_type == 2: print('bot surfing') strInput += "-forward; wait 3;" strInput = strinput_append(strInput, 10) else: ladder_counter = 0 min_distance_target_human = 0.2 min_enemy_distance = 10.0 if bot_on_type == 1 or bot_on_type == 3: print('bot_on_type 1 = water | 3 = downhill: ', bot_on_type) for _ in range(10): strInput += "+jump; wait 5;" if message_counter > 10: print('target human: ', targethuman, ' dist_target: ', dist_target, ' enemy distance: ', enemy_distance) message_counter = 0 if enemy_distance < 0 or dist_target > min_distance_target_human or enemy_distance < min_enemy_distance or targeteam == 2: strInput += "+forward; wait 5; " strInput = strinput_append(strInput, 1) else: strInput += "-forward; wait 5;" print('-forward!') #print('strInput final:', strInput) writeCfgInput(strInput) time.sleep(0.2) writeCfgInput("wait 5;") def strinput_append(strInput, nth): for _ in range(10 * nth): boolean_val = random.choice([True, False]) if boolean_val: strInput += "+moveleft; wait 15; -moveleft; " else: strInput += "+moveright; wait 15; -moveright; " return strInput def bot_connect_ze(): #use whatever ip you want here to connect with strdev = "connect 151.80.230.149:27019/test132;" str1 = "connect 151.80.230.149:27015;" writeCfgInput(str1) time.sleep(0.2) writeCfgInput("wait 5;") time.sleep(15.50) print('not yet connected') if __name__ == '__main__': atexit.register(exit_handler) resetCfgInputShortWait() local_ip = "127.0.0.1" local_port = 48477 udp_external_ip = "62.210.110.245" buffer_size = 4096 #potentially not large enough? with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock: with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock_external: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("", local_port)) print('reached deadlock') try: while True: data, addr = sock.recvfrom(buffer_size) databyte = data data = codecs.decode(data, "utf-8", "ignore") ip = addr[0] port = addr[1] #print('port: ', port, " ip: ", ip) if not data: continue if ip not in [local_ip, udp_external_ip]: continue if ip == udp_external_ip: print("enabled remote UDP packet") response_msg = f"""say {data}""" writeCfgInput(response_msg) time.sleep(0.5) resetCfgInputShortWait() time.sleep(0.2) #print('data: ', data) if data == "autismo connected": print('Bot connected!') time.sleep(2) joinTeam() elif data == "connect to ze": bot_connect_ze() elif "clientmessage:" in data: sock_external.sendto(databyte, (udp_external_ip, local_port)) print('sent databyte: ', databyte) elif data.startswith("dist_target:"): bot_process_movement(data) elif data.startswith("keyinput:"): bot_process_keyinput(data) except KeyboardInterrupt: pass #/home/gameservers/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/cfg/autoexec.cfg: #/home/nonroot/.steam/steam/steamapps/common/Counter-Strike Source/cstrike/cfg/autoexec.cfg: #alias loop "exec looptest.cfg; wait 5; loop;"; wait 5; loop; #-condebug #cd /home/nonroot/.steam/ #cd /home/gameservers/.steam/debian-installation/ #./steam.sh -applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi +exec looptest.cfg #cd /home/gameservers/ze_runner_files #./play.sh #screen -A -d -m -S ze_runner ./play.sh