removing the magic code value
This commit is contained in:
		
							parent
							
								
									bd6bd20d51
								
							
						
					
					
						commit
						b713cd4931
					
				
							
								
								
									
										1325
									
								
								AutismBotIngame/python/autism_bot_info.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1325
									
								
								AutismBotIngame/python/autism_bot_info.sp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										263
									
								
								AutismBotIngame/python/ingamefollowct.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								AutismBotIngame/python/ingamefollowct.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,263 @@
 | 
			
		||||
#!/home/autismbot1/ze_runner/venv/bin/python3
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
import subprocess
 | 
			
		||||
import atexit
 | 
			
		||||
from threading import Timer
 | 
			
		||||
import string
 | 
			
		||||
import random
 | 
			
		||||
import signal
 | 
			
		||||
import socket
 | 
			
		||||
import codecs
 | 
			
		||||
import json
 | 
			
		||||
import datetime
 | 
			
		||||
import time
 | 
			
		||||
import glob
 | 
			
		||||
 | 
			
		||||
connection_issue_counter = 0;
 | 
			
		||||
call_bot_connect = True
 | 
			
		||||
 | 
			
		||||
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 writeCfgInput(Input_user):
 | 
			
		||||
    with open(looptestPath, 'w') as f:
 | 
			
		||||
        f.write(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
 | 
			
		||||
    kill_owned_process("pidof hl2_linux")
 | 
			
		||||
    kill_owned_process("pidof xterm")
 | 
			
		||||
    #deleting POSIX shared memory objects, as long as one process has them open they exist. THis is to prevent /dev/shm from being full
 | 
			
		||||
    #due to steam child processes.
 | 
			
		||||
    #even with steam turned offline might there be chromium web browsers left over from steam who still hold processes open.
 | 
			
		||||
    #only kind of potential issues from this is steam cloud being out of sync, which is really fucking irrelevant.
 | 
			
		||||
    subprocess.getoutput([f"pkill -9 -u {whoami}"])
 | 
			
		||||
 | 
			
		||||
def bot_process_movement(input_line):
 | 
			
		||||
    dist_target = input_line[input_line.index("dist_target:") + len("dist_target:"):input_line.index("enemy_distance")]
 | 
			
		||||
    enemy_distance = input_line[input_line.index("enemy_distance:") + len("enemy_distance:"):input_line.index("targeteam:")]
 | 
			
		||||
    targeteam = input_line[input_line.index("targeteam:") + len("targeteam:"):input_line.index("state:")]
 | 
			
		||||
    state = input_line[input_line.index("state:") + len("state:"):]
 | 
			
		||||
 | 
			
		||||
    state = int(state.strip())
 | 
			
		||||
    dist_target = float(dist_target)
 | 
			
		||||
    enemy_distance = float(enemy_distance)
 | 
			
		||||
    targeteam = int(targeteam)
 | 
			
		||||
    #request by bane that bots should simply not infect people shrug
 | 
			
		||||
    strInput = "-attack; wait 2; -use; wait 5; -attack; wait 5; cl_minmodels 1; wait 2; +use; wait 5; "
 | 
			
		||||
    if targeteam == 3:
 | 
			
		||||
        strInput = "-attack; wait 2; -use; wait 5; +attack; wait 5; cl_minmodels 1; wait 2; +use; wait 5; "
 | 
			
		||||
    #python has no switches and such
 | 
			
		||||
    if state in [5, 7]:
 | 
			
		||||
        strInput += "-forward; wait 2; use weapon_knife; wait 5;"
 | 
			
		||||
    elif state >= 3:
 | 
			
		||||
        strInput += "use weapon_knife; wait 5; +forward; wait 2;"
 | 
			
		||||
    elif state == 0:
 | 
			
		||||
        strInput += "use weapon_p90; wait 2; -forward; wait 2;"
 | 
			
		||||
    elif state == 1:
 | 
			
		||||
        strInput += "wait 2; use weapon_elite; wait 3; +forward; wait 2;"
 | 
			
		||||
    elif state == 2: 
 | 
			
		||||
        strInput += "-forward; wait 2; use weapon_elite; wait 3;"
 | 
			
		||||
    elif state == 8:
 | 
			
		||||
        strInput += "use weapon_knife; wait 5; +forward; wait 2;"
 | 
			
		||||
 | 
			
		||||
    #print('dist_target: ', dist_target, ' enemy distance: ', enemy_distance, ' targeteam: ', targeteam, ' state:', state)
 | 
			
		||||
    if state not in [0, 2, 5, 7, 8]:
 | 
			
		||||
        strInput = strinput_append(strInput, 2)
 | 
			
		||||
    #print('strInput final:', strInput)
 | 
			
		||||
    writeCfgInput(strInput)
 | 
			
		||||
 | 
			
		||||
def strinput_append(strInput, nth):
 | 
			
		||||
    for _ in range(3 * nth):
 | 
			
		||||
        boolean_val = random.choice([True, False])
 | 
			
		||||
        if boolean_val:
 | 
			
		||||
            strInput += " +moveleft; wait 15; -moveleft; "
 | 
			
		||||
        else:
 | 
			
		||||
            strInput += " +moveright; wait 15; -moveright; "
 | 
			
		||||
    return strInput
 | 
			
		||||
 | 
			
		||||
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 == 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():
 | 
			
		||||
    #subprocess.getoutput(["screen -XS XTERM quit"])
 | 
			
		||||
    kill_owned_process("pidof hl2_linux")
 | 
			
		||||
    kill_owned_process("pidof xterm")
 | 
			
		||||
    
 | 
			
		||||
    x2go_session_list = subprocess.getoutput(["x2golistsessions"])
 | 
			
		||||
    print('x2golistsessions: ', x2go_session_list)
 | 
			
		||||
    if not x2go_session_list:
 | 
			
		||||
        print('no session. creating Display to make idle session')
 | 
			
		||||
        subprocess.getoutput([f"screen -d -m -S pyhoca_display ./run_follow.sh"])
 | 
			
		||||
        while not x2go_session_list or len(x2go_session_list.split('|')[0].replace(" ", "")) == 0:
 | 
			
		||||
            time.sleep(5)
 | 
			
		||||
            x2go_session_list = subprocess.getoutput(["x2golistsessions"])
 | 
			
		||||
        print(f'finally found x2go_session_list: {x2go_session_list}')
 | 
			
		||||
 | 
			
		||||
    hostname = subprocess.getoutput(['hostname'])
 | 
			
		||||
    x2go_session_display = x2go_session_list.split(f'|{hostname}')[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' 
 | 
			
		||||
    xterm_cmd = f'screen -d -m -S XTERM x2goruncommand {x2go_session_display} {x2go_session_pid} {x2go_session_id} {x2go_session_command}'
 | 
			
		||||
    print(f'xterm_cmd: {xterm_cmd}')
 | 
			
		||||
    subprocess.getoutput([xterm_cmd])
 | 
			
		||||
    print('reached .bashrc executing steam and variables')
 | 
			
		||||
    time.sleep(40)
 | 
			
		||||
    #we sleep here to wait for .bashrc to launch steam. It takes some time
 | 
			
		||||
 | 
			
		||||
def bot_connect(data):
 | 
			
		||||
    #use whatever ip you want here to connect with
 | 
			
		||||
    str1 = ""
 | 
			
		||||
    if "connect to ze" == data:
 | 
			
		||||
        str1 = f"connect {data_ports['server_ip_port_ze']}"
 | 
			
		||||
    elif "connect to ze2" == data:
 | 
			
		||||
        str1 = f"connect {data_ports['server_ip_port_ze2']}; wait 15000;"
 | 
			
		||||
    writeCfgInput(str1)
 | 
			
		||||
    time.sleep(1)
 | 
			
		||||
    writeCfgInput("")
 | 
			
		||||
    t = Timer(150, attempt_bot_connect)
 | 
			
		||||
    t.start()
 | 
			
		||||
 | 
			
		||||
def attempt_bot_connect():
 | 
			
		||||
    global connection_issue_counter
 | 
			
		||||
    global call_bot_connect
 | 
			
		||||
    connection_issue_counter += 1
 | 
			
		||||
    call_bot_connect = True
 | 
			
		||||
    print('finished timer callback')
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    atexit.register(exit_handler)
 | 
			
		||||
    local_port = data_ports['udp_port']
 | 
			
		||||
    external_port_messages = data_ports['chat_external_port']
 | 
			
		||||
    buffer_size = 4096 #potentially not large enough?
 | 
			
		||||
 | 
			
		||||
    #if downloading maps we give it 10 seconds delay to see if the size changed, if not its probably safe to delete the .bz2 file as no download in progress
 | 
			
		||||
    bz2_maps = {}
 | 
			
		||||
    while True:
 | 
			
		||||
        found = False
 | 
			
		||||
        for f in glob.glob(f"/home/{whoami}/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/download/maps/*.bz2"):
 | 
			
		||||
            found = True
 | 
			
		||||
            fsize = subprocess.Popen(["du", "-sh", f], stdout=subprocess.PIPE).communicate()[0].decode().split("\t")[0]
 | 
			
		||||
            #deleting left over bz2 files because they give missing map issue
 | 
			
		||||
            if f in bz2_maps:
 | 
			
		||||
                #if the size is still the same it should be abandoned bz2 file that we can delete
 | 
			
		||||
                if bz2_maps[f] == fsize:
 | 
			
		||||
                    subprocess.Popen(["rm", f], stdout=subprocess.PIPE).communicate()[0]
 | 
			
		||||
            bz2_maps[f] = fsize
 | 
			
		||||
        #no bz2 maps left to be concerned about
 | 
			
		||||
        if not found:
 | 
			
		||||
            break
 | 
			
		||||
        time.sleep(10)
 | 
			
		||||
 | 
			
		||||
    maps_folder_size = subprocess.Popen(["du", "-sh", f"/home/{whoami}/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/download/maps"], stdout=subprocess.PIPE).communicate()[0].decode().split("\t")[0]
 | 
			
		||||
    #deleting when maps folder larger than 150GB
 | 
			
		||||
    if maps_folder_size.endswith("G"): 
 | 
			
		||||
        maps_folder_size = float(maps_folder_size[:-1])
 | 
			
		||||
        if maps_folder_size > 40.0:
 | 
			
		||||
            for f in glob.glob(f"/home/{whoami}/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/download/maps/*"):
 | 
			
		||||
                subprocess.Popen(["rm", f], stdout=subprocess.PIPE).communicate()[0]
 | 
			
		||||
    restart_sdl_and_steam()
 | 
			
		||||
    is_bot_connected_to_ze2 = False
 | 
			
		||||
 | 
			
		||||
    print('preparing to launch game....')
 | 
			
		||||
    sock = 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 = ""
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        while True:
 | 
			
		||||
            try:
 | 
			
		||||
                data, addr = sock.recvfrom(buffer_size)
 | 
			
		||||
            except socket.timeout:
 | 
			
		||||
                continue
 | 
			
		||||
            data = codecs.decode(data, "utf-8", "ignore")
 | 
			
		||||
            ip = addr[0]
 | 
			
		||||
            port = addr[1]
 | 
			
		||||
            #print('port: ', port, " ip: ", ip)
 | 
			
		||||
            #print('data: ', data)
 | 
			
		||||
            if not data:
 | 
			
		||||
                continue
 | 
			
		||||
            #print("ip: ", ip, " port: ", port)
 | 
			
		||||
            if ip == data_ports['discord_bot_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)
 | 
			
		||||
            if ip != data_ports['ovh_ip']:
 | 
			
		||||
                continue
 | 
			
		||||
            elif data == "rtv":
 | 
			
		||||
                response_msg = "say rtv"
 | 
			
		||||
                writeCfgInput(response_msg)
 | 
			
		||||
            elif data == "bot kicked server full":
 | 
			
		||||
                print('bot kicked server full: ', datetime.datetime.now().time())
 | 
			
		||||
            elif "autismo connected to ze" == data:
 | 
			
		||||
                print('Bot connected to ze!')
 | 
			
		||||
                connection_issue_counter = 0
 | 
			
		||||
                is_bot_connected_to_ze2 = False
 | 
			
		||||
            elif "not connected to ze2" == data:
 | 
			
		||||
                is_bot_connected_to_ze2 = False
 | 
			
		||||
            elif "autismo connected to ze2" == data:
 | 
			
		||||
                print('Bot connected to ze2!')
 | 
			
		||||
                connection_issue_counter = 0
 | 
			
		||||
                is_bot_connected_to_ze2 = True
 | 
			
		||||
            elif "connect to ze" == data or ("connect to ze2" == data and not is_bot_connected_to_ze2):
 | 
			
		||||
                if connection_issue_counter == 5:
 | 
			
		||||
                    kill_owned_process("pidof hl2_linux")
 | 
			
		||||
                    print('exiting')
 | 
			
		||||
                    sock.close()
 | 
			
		||||
                    sys.exit(1)
 | 
			
		||||
                else:
 | 
			
		||||
                    if call_bot_connect:
 | 
			
		||||
                        call_bot_connect = False
 | 
			
		||||
                        print('data: ', data)
 | 
			
		||||
                        print("connection_issue_counter: ", connection_issue_counter)
 | 
			
		||||
                        bot_connect(data)
 | 
			
		||||
            elif "clientmessage:" in data:
 | 
			
		||||
                messager_name = data.split("clientmessage:", 1)[1].split(" put your magic code here.")[0]
 | 
			
		||||
                databyte_send_message = messager_name + data.split("put your magic code here.")[1]
 | 
			
		||||
                sock.sendto(databyte_send_message.encode(), (data_ports["discord_bot_ip"], external_port_messages))
 | 
			
		||||
                #print('databyte_send_message: ', databyte_send_message)
 | 
			
		||||
            elif data.startswith("dist_target:"):
 | 
			
		||||
                bot_process_movement(data)
 | 
			
		||||
            elif data.startswith("surfing:"):
 | 
			
		||||
                bot_process_surf(data)
 | 
			
		||||
            elif data.startswith("hull info:"):
 | 
			
		||||
                hull_info = data[data.index("hull info:") + len("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)
 | 
			
		||||
    finally:
 | 
			
		||||
        sock.close()
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user