diff --git a/AutismBotIngame/README.md b/AutismBotIngame/README.md index 105fd5e2..d3b54450 100644 --- a/AutismBotIngame/README.md +++ b/AutismBotIngame/README.md @@ -19,3 +19,16 @@ exporting correct SDL_VIDEO_X11_VISUALID value is important before steam login f instead of automating the steam login its done manually due to requiring x2go/VNC/nomachine clients.
With the virtual desktop related to the VNC/x2go/nomachine client you can log into steam using the normal GUI ->
once logged in steam can run actively for months without requiring restarts + +## bashrc for x2go users +in the users thats running a x2go session edit the .bashrc file and add the follwing (remember SDL_VIDEO_X11_VISUALID deppends on glxinfo from xterm terminal): +if [[ $DISPLAY ]]; then + echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID + export SDL_VIDEO_X11_VISUALID=0x205 + echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID + steam +fi + +#X2GO_NXAGENT_DEFAULT_OPTIONS="-options nx/nx,sleep=0" /etc/x2go/x2goagent.options +#keeps session as R instead of S which is needed for interaction with graphical components such as steam and CS:S + diff --git a/AutismBotIngame/python/config.json b/AutismBotIngame/python/config.json new file mode 100644 index 00000000..0a2f59d9 --- /dev/null +++ b/AutismBotIngame/python/config.json @@ -0,0 +1,6 @@ +{ + "udp_port": 48482, + "chat_external_port": 48471, + "steam_port": 29074, + "server_ip_port": "135.125.188.157:27015" +} diff --git a/AutismBotIngame/python/ingamefollowct.py b/AutismBotIngame/python/ingamefollowct.py index 0719beb5..fbcfb5e2 100644 --- a/AutismBotIngame/python/ingamefollowct.py +++ b/AutismBotIngame/python/ingamefollowct.py @@ -8,55 +8,32 @@ import random import signal import socket import codecs +import json import datetime import time -who_am_i = subprocess.getoutput(["whoami"]) -looptestPath = f"""/home/{who_am_i}/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/cfg/looptest.cfg""" +whoami = subprocess.getoutput(["whoami"]) +with open(f'/home/{whoami}/ze_runner/config.json') as jsonfile: + data_ports = json.load(jsonfile) +looptestPath = f"/home/{whoami}/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/cfg/looptest.cfg" chatmsg = "" -def colored(r, g, b, text): - return "\033[38;2;{};{};{}m{} \033[38;2;255;255;255m".format(r, g, b, text) - def writeCfgInput(Input_user): with open(looptestPath, 'w') as f: - colored_text = colored(255, 0, 0, ('Input: ' + Input_user)) - #print(colored_text) f.write(Input_user) - + #print(Input_user) + time.sleep(0.1) + open(looptestPath, 'w').close() + def exit_handler(): print('reached exithandler') writeCfgInput('') + #securing the looptest.cfg wont be stuck accidently with commands def joinTeam(): str = "jointeam 2; joinclass 3; zspawn;" writeCfgInput(str) print('jointeam func: ') - time.sleep(4.5) - writeCfgInput('') - -def bot_process_surf(input_line): - bot_surf_plane = input_line[input_line.index("surfing:") + len("surfing:"):] - bot_surf_plane = bot_surf_plane.strip() - bot_surf_plane = [float(i.replace('\U00002013', '-')) for i in bot_surf_plane.split(' ')] - #X axis positive = hold A - #X axis negative = hold D - #if Y axis = 0.0 use X instead - #Y axis negative = hold A - #Y axis positive = hold D - strInput = "-forward; wait 3; " - if bot_surf_plane[1] < 0.0: - strInput += "+moveleft; wait 3; " - elif bot_surf_plane[1] > 0.0: - strInput += "+moveright; wait 3;" - elif bot_surf_plane[0] < 0.0: - strInput += "+moveleft; wait 3; " - elif bot_surf_plane[0] > 0.0: - strInput += "+moveright; wait 3; " - print('date: ', datetime.datetime.now().time(),'bot surfing bot_surf_plane: ', bot_surf_plane) - writeCfgInput(strInput) - time.sleep(0.1) - writeCfgInput("") def bot_process_movement(input_line): dist_target = input_line[input_line.index("dist_target:") + len("dist_target:"):input_line.index("targethuman:")] @@ -67,9 +44,9 @@ def bot_process_movement(input_line): dist_target = float(dist_target) enemy_distance = float(enemy_distance) targeteam = int(targeteam) - min_distance_target_human = 50.0 + min_distance_target_human = 1.0 strInput = "-attack; wait 2; -use; wait 5; +attack; wait 5; cl_minmodels 1; wait 2; +use; +forward; wait 2; " - if dist_target > min_distance_target_human and targeteam == 3: + if dist_target > min_distance_target_human: #print('dist_target: ', dist_target) strInput += "use weapon_elite; wait 3; " elif targeteam == 3: @@ -81,8 +58,6 @@ def bot_process_movement(input_line): strInput = strinput_append(strInput, 2) #print('strInput final:', strInput) writeCfgInput(strInput) - time.sleep(0.1) - writeCfgInput("") def strinput_append(strInput, nth): for _ in range(10 * nth): @@ -93,28 +68,63 @@ def strinput_append(strInput, nth): strInput += "+moveright; wait 15; -moveright; " return strInput -def kill_css_process(): - css_pid = subprocess.getoutput(["pidof hl2_linux"]) - if css_pid: - for pid in css_pid.split(" "): +def kill_user_owned_pid(pid): + print('pid: ', pid, ' killed') + pid = int(pid.strip()) + os.kill(pid, signal.SIGKILL) + time.sleep(10) + +def return_user_owned_pid(pidof): + owner_pid = subprocess.getoutput([f"{pidof}"]) + if owner_pid: + for pid in owner_pid.split(" "): username = subprocess.getoutput([f"""ps -o user= -p {pid}"""]) - if username == who_am_i: - print('pid: ', pid, 'shutting the bots game down....') - pid = int(pid.strip()) - os.kill(pid, signal.SIGTERM) - time.sleep(15) + if username == whoami: + return pid + return None + +def kill_owned_process(pidof): + pid = return_user_owned_pid(pidof) + while pid: + kill_user_owned_pid(pid) + pid = return_user_owned_pid(pidof) + +def restart_sdl_and_steam(): + #ending screen + subprocess.getoutput(["screen -XS XTERM quit"]) + kill_owned_process("pidof hl2_linux") + kill_owned_process("pidof xterm") + + x2go_session_list = subprocess.getoutput(["x2golistsessions"]) + print('x2go_session_list: ', x2go_session_list) + if not x2go_session_list: + print('no session available. establish the session manually again') + raise Exception('') + + x2go_session_display = x2go_session_list.split('|unloze.com')[0].rsplit('|', 1)[1] + x2go_session_pid = x2go_session_list.split('|')[0] + x2go_session_id = x2go_session_list.split('|')[1].split('|')[0] + x2go_session_command = 'TERMINAL xterm' + + subprocess.getoutput([f"screen -d -m -S XTERM x2goruncommand {x2go_session_display} {x2go_session_pid} {x2go_session_id} {x2go_session_command}"]) + print('reached .bashrc executing steam and variables') + time.sleep(360) + #we sleep here to wait for .bashrc to launch steam. It takes some minutes + +def launch_css_process(): print('preparing to launch game....') - os.chdir(f"""/home/{who_am_i}/.steam/debian-installation/""") - subprocess.check_call("./steam.sh %s" % ("-applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi -port 29073"), shell=True) + #deleting maps + subprocess.getoutput([f"rm '/home/{whoami}/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/download/maps/'*"]) + + #launching game + subprocess.getoutput([f"/home/{whoami}/.steam/debian-installation/steam.sh -applaunch 240 -textmode -novid -nosound -noipx -nojoy -noshaderapi -port {data_ports['steam_port']}"]) print('finished starting game') def bot_connect_ze(): #use whatever ip you want here to connect with - strdev = "connect 144.76.218.19:27019/test132;" - str1 = "connect 144.76.218.19:27015;" + strdev = "connect 135.125.188.157:27019/test132;" + str1 = f"connect {data_ports['server_ip_port']}" writeCfgInput(str1) - time.sleep(0.2) - writeCfgInput('') print('not yet connected') def pairwise(it): @@ -128,39 +138,43 @@ def pairwise(it): if __name__ == '__main__': atexit.register(exit_handler) - hetzner_ip = "144.76.218.19" - local_ip = "127.0.0.1" - local_port = 48479 - udp_external_ip = "164.132.201.173" + ovh_ip = "135.125.188.157" + local_port = data_ports['udp_port'] + external_port_messages = data_ports['chat_external_port'] buffer_size = 4096 #potentially not large enough? connection_issue_counter = 0; + pid = return_user_owned_pid("pidof hl2_linux") + if not pid: + restart_sdl_and_steam() + else: + kill_owned_process("pidof hl2_linux") + launch_css_process() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock_external = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("", local_port)) + sock.settimeout(5.0) messager_name = "" print('reached deadlock') try: while True: - data, addr = sock.recvfrom(buffer_size) + try: + data, addr = sock.recvfrom(buffer_size) + except socket.timeout: + continue data = codecs.decode(data, "utf-8", "ignore") - #print(data) ip = addr[0] port = addr[1] #print('port: ', port, " ip: ", ip) - #print(data) + #print('data: ', data) if not data: continue - if ip == udp_external_ip or ip == local_ip: + if ip == ovh_ip and port == external_port_messages: if messager_name in data: messager_name = "" response_msg = f"""say {messager_name} {data}""" print("remote UDP packet response_msg: ", response_msg) writeCfgInput(response_msg) - #needs mini delay to have time to write input to console - time.sleep(0.1) - writeCfgInput("") - if ip != hetzner_ip: + if ip != ovh_ip: continue if data == "autismo connected": print('Bot connected!') @@ -169,15 +183,20 @@ if __name__ == '__main__': elif data == "bot kicked server full": print('bot kicked server full: ', datetime.datetime.now().time()) elif data == "connect to ze": - if connection_issue_counter == 5 or connection_issue_counter == 50: - kill_css_process() + if connection_issue_counter == 20: + kill_owned_process("pidof hl2_linux") + launch_css_process() + elif connection_issue_counter == 50: + restart_sdl_and_steam() + launch_css_process() + connection_issue_counter = -10 connection_issue_counter += 1 print('connection_issue_counter: ', connection_issue_counter) bot_connect_ze() elif "clientmessage:" in data: messager_name = data.split("clientmessage:", 1)[1].split(" 72DqZ84")[0] databyte_send_message = messager_name + data.split("72DqZ84")[1] - sock_external.sendto(databyte_send_message.encode(), (udp_external_ip, local_port)) + sock.sendto(databyte_send_message.encode(), (ovh_ip, external_port_messages)) print('databyte_send_message: ', databyte_send_message) elif data.startswith("dist_target:"): bot_process_movement(data) @@ -185,28 +204,20 @@ if __name__ == '__main__': bot_process_surf(data) elif data.startswith("hull info:"): hull_info = data[data.index("hull info:") + len("hull info:"):] - colored_text = colored(255, 0, 0, ('hull_info: ' + hull_info)) strInput = "" if hull_info == "jump": strInput += "+jump; wait 5; -jump; +duck; wait 50; -duck; wait 5; " elif hull_info == "crouch": strInput += "+duck; wait 50; -duck; wait 5; " writeCfgInput(strInput) - #print(colored_text) - time.sleep(0.1) - writeCfgInput("") - except KeyboardInterrupt: - pass finally: sock.close() - sock_external.close() #/home/gameservers/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/cfg/autoexec.cfg: #alias loop "exec looptest.cfg; wait 5; loop;"; wait 5; loop; - -#-condebug -#cd /home/gameservers/.steam/debian-installation/ -#./steam.sh -applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi +#create looptest.cfg in /cfg/ folder +#X2GO_NXAGENT_DEFAULT_OPTIONS="-options nx/nx,sleep=0" /etc/x2go/x2goagent.options +#keeps session as R instead of S which is needed for interaction with graphical components such as steam and CS:S #cd /home/gameservers/ze_runner_files #python3 ingamefollowct.py @@ -214,3 +225,13 @@ if __name__ == '__main__': #before steam login: export SDL_VIDEO_X11_VISUALID=0x074 #to find correct SDL_VIDEO_X11_VISUALID use glxinfo in X2GO + +""" +.bashrc requires: +if [[ $DISPLAY ]]; then + echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID + export SDL_VIDEO_X11_VISUALID=0x205 + echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID + steam +fi +""" diff --git a/AutismBotIngame/python/udp_redirecter.py b/AutismBotIngame/python/udp_redirecter.py index 3ff7907f..9caa303e 100644 --- a/AutismBotIngame/python/udp_redirecter.py +++ b/AutismBotIngame/python/udp_redirecter.py @@ -15,7 +15,7 @@ import time if __name__ == '__main__': local_ip = "127.0.0.1" local_port = 48479 - udp_external_ip = "164.132.201.173" + udp_external_ip = "195.154.53.196" buffer_size = 4096 #potentially not large enough? sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock_external = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) @@ -39,4 +39,4 @@ if __name__ == '__main__': sock.close() sock_external.close() #UDP redirecter welp -#screen -d -m -S udp_redirecter python3 udp_redirecter.py +#screen -d -m -S udp_redirecter1 python3 udp_redirecter.py diff --git a/AutismBotIngame/service_files/clean_maps1.service b/AutismBotIngame/service_files/clean_maps1.service deleted file mode 100644 index 4f886c56..00000000 --- a/AutismBotIngame/service_files/clean_maps1.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Deleting files from places after a certain amount of days - -[Service] -Type=simple -User=autismbot1 -ExecStart=find "/home/autismbot1/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/download/maps" -maxdepth 1 -mmin +179 -type f -delete diff --git a/AutismBotIngame/service_files/clean_maps1.timer b/AutismBotIngame/service_files/clean_maps1.timer deleted file mode 100644 index ad00ba55..00000000 --- a/AutismBotIngame/service_files/clean_maps1.timer +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Runs the maps Cleaner once each 10 hours -Requires=clean_maps1.service - -[Timer] -OnCalendar=00/1:00 - -[Install] -WantedBy=multi-user.target