projects-jenz/AutismBotIngame/python/ingamefollowct.py

251 lines
8.4 KiB
Python
Raw Normal View History

2020-01-23 23:15:26 +01:00
import os
import sys
2020-01-23 23:15:26 +01:00
import subprocess
import atexit
2020-01-26 02:29:34 +01:00
from threading import Timer
2020-01-23 23:15:26 +01:00
import string
import random
import time
import mysql.connector
from mysql.connector import Error
from settings import mysql_connection_ip, mysql_connection_user, mysql_connection_pw, mysql_connection_database
2020-01-23 23:15:26 +01:00
looptestPath = '/home/nonroot/.steam/steam/steamapps/common/Counter-Strike Source/cstrike/cfg/looptest.cfg'
def get_connection():
return mysql.connector.connect(
host=mysql_connection_ip,
user=mysql_connection_user,
passwd=mysql_connection_pw,
database=mysql_connection_database)
2020-01-23 23:15:26 +01:00
def writeCfgInput(Input):
with open(looptestPath, 'w') as f:
f.write(Input)
2020-01-23 23:15:26 +01:00
def resetCfgInputShortWait():
str = "{0}; wait 5;"
2020-01-23 23:15:26 +01:00
with open(looptestPath, 'w') as f:
f.write(str)
time.sleep(0.5)
2020-01-23 23:15:26 +01:00
def exit_handler():
2020-02-09 00:26:05 +01:00
print('reached exithandler')
str = "wait 5;"
with open(looptestPath, 'w') as f:
f.write(str)
2020-01-26 02:29:34 +01:00
2020-01-23 23:15:26 +01:00
def joinTeam():
str = "jointeam 2; wait 2; zspawn; wait 1; {0}; wait 5;"
2020-01-23 23:15:26 +01:00
writeCfgInput(str)
time.sleep(4.5)
print('jointeam func: ')
2020-01-23 23:15:26 +01:00
def checkbotteam():
mysql_check_spectator()
resetCfgInputShortWait()
connectionTimer = Timer(20.0, checkbotteam)
connectionTimer.daemon = True
connectionTimer.start()
2020-01-23 23:15:26 +01:00
def mysql_check_spectator():
cnx = get_connection()
cur = cnx.cursor()
sql_statement = f"""SELECT spectate from unloze_css_autism_bot.`bot status`"""
cur.execute(sql_statement)
result = cur.fetchall()[0]
spectate = result[0]
print('spectate: ', spectate)
if spectate != 0:
joinTeam()
cur.close()
cnx.close()
def mysql_get_player_info(movement_list):
cnx = get_connection()
cur = cnx.cursor()
sql_statement = f"""SELECT * from unloze_css_autism_bot.`bot movement input` ORDER BY entry_time LIMIT 1"""
sql_row_count = "SELECT COUNT(*) FROM unloze_css_autism_bot.`bot movement input`"
cur.execute(sql_statement)
result = cur.fetchall()
cur.execute(sql_row_count)
result_count = cur.fetchone()[0]
if result:
result = result[0]
movement_input = result[0]
client_angles = [result[1], result[2], result[3]]
xyz_difference = [result[4], result[5], result[6]]
client_coordinates = result[7], result[8], result[9]
hunt_or_mimic = result[10]
stuckX = result[11]
stuckY = result[12]
strInput = "-attack; wait 5; -jump; wait 5; -duck; wait 5; +attack; wait 5; cl_minmodels 1; "
print('movement_list[0]: ', movement_list[0], '#false = forward, true = back')
print('movement_list[1]: ', movement_list[1], '#false = left, true = right')
print('result_count: ', result_count)
axis_distance = 105
#print('stuckX: ', stuckX, ' stuckY: ', stuckY)
if stuckX and xyz_difference[0] < -axis_distance or xyz_difference[0] > axis_distance:
movement_list[0] = not movement_list[0]
strInput += " +jump; wait 3; +duck; wait 5;"
if stuckY and xyz_difference[1] < -axis_distance or xyz_difference[1] > axis_distance:
movement_list[1] = not movement_list[1]
strInput += " +jump; wait 3; +duck; wait 5;"
if hunt_or_mimic:
print('hunt_or_mimic enabled')
bool_x_axis_permit = True
bool_y_axis_permit = True
sql_statement = f"""SELECT entry_time FROM unloze_css_autism_bot.`bot movement input` where client_coord_0 = '{client_coordinates[0]}' and client_coord_1 = '{client_coordinates[1]}'
and client_coord_2 = '{client_coordinates[2]}' LIMIT 1"""
cur.execute(sql_statement)
entry_time = cur.fetchall()[0][0]
#once hunt_or_mimic is reached it should remain true until round restart or ct death, once close enough distance bot has to copy its input for rest of round
if not hunt_or_mimic:
if xyz_difference[0] > axis_distance:
movement_list[0] = True
elif xyz_difference[0] < -axis_distance:
movement_list[0] = False
else:
bool_x_axis_permit = False
strInput += " -back; wait 5; -forward; wait 5;"
if xyz_difference[1] < -axis_distance:
movement_list[1] = True
elif xyz_difference[1] > axis_distance:
movement_list[1] = False
else:
bool_y_axis_permit = False
strInput += " -moveright; wait 5; -moveleft; wait 5;"
print('xyz_difference[0]: ', xyz_difference[0])
print('xyz_difference[1]: ', xyz_difference[1])
strInput += f""" setang 0 180 0; wait 5; """
else:
#print('client_angles: ', client_angles)
print('movement_input: ', movement_input)
strInput += f""" setang {client_angles[0]} {client_angles[1]} {client_angles[2]}; wait 5; {movement_input};"""
#if xyz_difference[0] > -axis_distance and xyz_difference[0] < axis_distance and xyz_difference[1] > -axis_distance and xyz_difference[1] < axis_distance:
sql_statement = f"""DELETE FROM unloze_css_autism_bot.`bot movement input` where entry_time <= '{entry_time}'"""
cur.execute(sql_statement)
print('Deleted ', cur.rowcount, ' rows before/during entry_time:', entry_time)
cnx.commit()
if xyz_difference[0] > -25 and xyz_difference[0] < 25:
strInput += "-back; wait 5; -forward; wait 5;"
if xyz_difference[1] > -25 and xyz_difference[1] < 25:
strInput += "-moveright; wait 5; -moveleft; wait 5;"
if not hunt_or_mimic:
if bool_x_axis_permit:
if movement_list[0]:
strInput += " -back; wait 5; +forward; wait 5;"
else:
strInput += " -forward; wait 5; +back; wait 5;"
if bool_y_axis_permit:
if movement_list[1]:
strInput += " -moveleft; wait 5; +moveright; wait 5;"
else:
strInput += " -moveright; wait 5; +moveleft; wait 5;"
sql_statement = f"""DELETE FROM unloze_css_autism_bot.`bot movement input` where entry_time <= '{entry_time}'"""
cur.execute(sql_statement)
#print('sql_statement: ', sql_statement)
#print('Deleted ', cur.rowcount, ' rows before/during entry_time:', entry_time)
cnx.commit()
#print('strInput final:', strInput)
writeCfgInput(strInput)
time.sleep(0.10)
writeCfgInput("wait 5;")
cur.close()
cnx.close()
run_delay = 0.05 #0.05
connectionTimer = Timer(run_delay, mysql_get_player_info, args=[movement_list])
connectionTimer.daemon = True
connectionTimer.start()
def mysql_check_messages():
cnx = get_connection()
cur = cnx.cursor()
sql_statement = """SELECT responsemessage FROM unloze_css_autism_bot.chatting WHERE responsemessage != '' LIMIT 1"""
cur.execute(sql_statement)
result = cur.fetchall()
if result:
result = result[0][0]
str = f"""say {result}"""
print('str: ', str)
writeCfgInput(str)
2020-05-06 01:24:15 +02:00
time.sleep(0.9)
sql_statement = f"""DELETE FROM unloze_css_autism_bot.`chatting` WHERE `responsemessage` = '{result}'"""
print('sql_statement: ', sql_statement)
cur.execute(sql_statement)
cnx.commit()
cur.close()
cnx.close()
connectionTimer = Timer(2, mysql_check_messages)
2020-02-09 00:26:05 +01:00
connectionTimer.daemon = True
connectionTimer.start()
def mysql_check_if_connected():
cnx = get_connection()
cur = cnx.cursor()
sql_statement = """SELECT connected, playercount from unloze_css_autism_bot.`bot status`"""
cur.execute(sql_statement)
result = cur.fetchall()[0]
#print('result: ', result, ' result[0]: ', result[0])
connected = result[0]
playercount = result[1]
#playercount might not be updated ingame and auto leave?
print('connected: ', connected)
if connected == 0:
2020-05-06 01:24:15 +02:00
str1 = "connect 151.80.230.149:27015;"
writeCfgInput(str1)
time.sleep(0.2)
writeCfgInput("wait 5;")
time.sleep(15.50)
print('not yet connected')
mysql_check_if_connected()
obsolete = """
elif playercount > 60:
str1 = "connect 151.80.230.149:27016;"
writeCfgInput(str1)
time.sleep(0.5)
writeCfgInput("wait 500;")
time.sleep(15.50)
print('not yet connected')
mysql_check_if_connected() """
connectionTimer = Timer(60.0 * 2, mysql_check_if_connected)
2020-02-09 00:26:05 +01:00
connectionTimer.daemon = True
connectionTimer.start()
cur.close()
cnx.close()
2020-02-28 22:00:22 +01:00
def mysql_reset_input():
cnx = get_connection()
cur = cnx.cursor()
sql_statement = f"""DELETE FROM unloze_css_autism_bot.`bot movement input`"""
cur.execute(sql_statement)
cnx.commit()
cur.close()
cnx.close()
2020-02-09 00:26:05 +01:00
def deadlock():
try:
while True: 42 == 42
except KeyboardInterrupt:
pass
2020-01-23 23:15:26 +01:00
if __name__ == '__main__':
atexit.register(exit_handler)
resetCfgInputShortWait()
mysql_check_if_connected()
checkbotteam()
print('reached mysql _get_player_info')
mysql_reset_input()
mysql_get_player_info([False, True])
mysql_check_messages()
2020-02-09 00:26:05 +01:00
print('reached deadlock')
deadlock()
#/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/
#./steam.sh -applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi +exec looptest.cfg