primarily about the bot being able to kill hl2_linux and restarting it by itself

This commit is contained in:
jenzur 2020-08-19 00:12:39 +02:00
parent 8aad46e08a
commit d59b90c187
2 changed files with 82 additions and 25 deletions

View File

@ -5,6 +5,7 @@ import atexit
from threading import Timer
import string
import random
import signal
import time
import socket
import codecs
@ -22,7 +23,7 @@ def resetCfgInputShortWait():
str = "wait 5; "
with open(looptestPath, 'w') as f:
f.write(str)
time.sleep(0.5)
time.sleep(0.2)
def exit_handler():
print('reached exithandler')
@ -82,8 +83,8 @@ def bot_process_movement(input_line):
bot_stuck = int(bot_stuck)
targeteam = int(targeteam)
#maybe 0.8 instead
min_distance_target_human = 1.6
strInput = "-attack; wait 2; -use; wait 5; -jump; wait 5; -duck; wait 5; +attack; wait 5; cl_minmodels 1; wait 2; +use; "
min_distance_target_human = 0.1
strInput = "-attack; wait 2; -use; wait 5; -jump; wait 5; -duck; wait 5; +attack; wait 5; cl_minmodels 1; wait 2; +use; +forward; wait 2; "
if bot_stuck:
print('bot stuck')
strInput += "+jump; wait 5; +duck; wait 5; -jump; wait 15; -duck; wait 3;"
@ -96,12 +97,11 @@ def bot_process_movement(input_line):
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;"
strInput += "setang -90 0 0; wait 5; -back; wait 3; -moveleft; wait 3; -moveright; wait 5; -jump; wait 3; -duck; wait 3; "
ladder_counter += 1
elif bot_on_type == 2:
print('bot surfing')
else:
strInput += "-moveright; wait 3; -moveleft; wait 3;"
ladder_counter = 0
min_enemy_distance = 100.0
if bot_on_type == 1 or bot_on_type == 3:
@ -111,16 +111,10 @@ def bot_process_movement(input_line):
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!')
strInput = strinput_append(strInput, 2)
#print('strInput final:', strInput)
writeCfgInput(strInput)
time.sleep(0.2)
time.sleep(0.4)
writeCfgInput("wait 5;")
def strinput_append(strInput, nth):
@ -132,6 +126,18 @@ 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:
print('css_pid: ', css_pid, 'shutting the bots game down....')
css_pid = int(css_pid.strip())
os.kill(css_pid, signal.SIGTERM)
time.sleep(15)
print('preparing to launch game....')
os.chdir('/home/gameservers/.steam/debian-installation/')
subprocess.check_call("./steam.sh %s" % ("-applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi +exec looptest.cfg"), shell=True)
print('finished starting game')
def bot_connect_ze():
#use whatever ip you want here to connect with
strdev = "connect 151.80.230.149:27019/test132;"
@ -139,7 +145,6 @@ def bot_connect_ze():
writeCfgInput(str1)
time.sleep(0.2)
writeCfgInput("wait 5;")
time.sleep(15.50)
print('not yet connected')
if __name__ == '__main__':
@ -149,6 +154,7 @@ if __name__ == '__main__':
local_port = 48477
udp_external_ip = "62.210.110.245"
buffer_size = 4096 #potentially not large enough?
connection_issue_counter = 0;
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)
@ -172,13 +178,17 @@ if __name__ == '__main__':
writeCfgInput(response_msg)
time.sleep(0.5)
resetCfgInputShortWait()
time.sleep(0.2)
#print('data: ', data)
if data == "autismo connected":
print('Bot connected!')
connection_issue_counter = 0
time.sleep(2)
joinTeam()
elif data == "connect to ze":
if connection_issue_counter == 5:
kill_css_process()
connection_issue_counter += 1
print('connection_issue_counter: ', connection_issue_counter)
bot_connect_ze()
elif "clientmessage:" in data:
sock_external.sendto(databyte, (udp_external_ip, local_port))

View File

@ -180,7 +180,8 @@ public Action permitStuck(Handle timer, any data)
public void OnMapStart()
{
CreateTimer(0.2, recursive_pressing, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
//0.2
CreateTimer(0.5, recursive_pressing, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
CreateTimer(1.0, clients_coordinates, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
CreateTimer(10.0, bot_check_connect, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
@ -242,7 +243,7 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float
Format(keyinput, sizeof(keyinput), "keyinput: %s dist_target: %f", keyinput, dist_target);
send_socket_msg(keyinput, strlen(keyinput));
cmdpost_run_cooldown = true;
CreateTimer(0.5, runcmd_cooldown);
CreateTimer(0.25, runcmd_cooldown);
}
}
}
@ -252,8 +253,19 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float
if (!(flags & FL_ONGROUND) && (flags_old & FL_ONGROUND) && !(buttons_old & IN_JUMP) && !(buttons & IN_JUMP))
{
float Vel[3];
float velocity_addition_z_axis = 300.0;
GetEntPropVector(client, Prop_Data, "m_vecVelocity", Vel);
Vel[2] += 300.0;
if (IsValidClient(targethuman))
{
//TODO maybe?
GetEntPropVector(present, Prop_Send, "m_vecOrigin", bot_old_coords);
if (client_old_coords[targethuman][2] != bot_old_coords[2])
{
Vel[0] -= velocity_addition_z_axis / 10;
Vel[1] -= velocity_addition_z_axis / 10;
}
}
Vel[2] += velocity_addition_z_axis;
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, Vel);
}
buttons_old = buttons;
@ -311,7 +323,7 @@ public Action recursive_pressing(Handle timer, any data)
{
face_call(targethuman);
find_closest_match = is_client_stuck_or_afk(targethuman);
if (!find_closest_match)
if (!find_closest_match || admins[targethuman] || vips[targethuman])
{
face_call(targethuman);
find_closest_match = IsAbleToSee(present, targethuman) ? false : true;
@ -339,12 +351,11 @@ public Action recursive_pressing(Handle timer, any data)
float min_enemy_distance = 100.0;
GetEntPropVector(target_enemy, Prop_Send, "m_vecOrigin", pos);
enemy_distance = get_power_distance(present, pos);
//important to keep min_distance_target_human in sync with the variable value in python
float min_distance_target_human = 1.6;
//human aiming for zombie
if (targeteam == 3)
{
if (dist_target > 0 && dist_target < min_distance_target_human && enemy_distance > min_enemy_distance)
float min_distance_target_human = 0.1;
if (0 < dist_target <= min_distance_target_human && enemy_distance > min_enemy_distance)
{
chasing_enemy = true;
face_call(target_enemy);
@ -367,9 +378,11 @@ public Action recursive_pressing(Handle timer, any data)
if (round_start_stuck)
bot_stuck = is_bot_stuck();
}
//TODO in some cases prevent bot from jumping over edge
//TODO in some cases crouch under obstacles or jump more? maybe trace raying all obstacles, maybe use TR_GetPlaneNormal
//make this replace is_bot_stuck() probably
//crouch_or_jump = 0: nothing. crouch_or_jump = 1: crouch. crouch_or_jump = 2: jump.
int crouch_or_jump = trace_geometry();
//TODO in some cases crouch under obstacles? maybe trace raying all
if (bot_on_type != 2)
{
if (IsValidClient(targethuman))
@ -382,6 +395,20 @@ public Action recursive_pressing(Handle timer, any data)
return Plugin_Continue;
}
public int trace_geometry()
{
float vPos[3];
float angles[3];
//GetClientEyeAngles(client, angles);
GetEntPropVector(present, Prop_Data, "m_vecOrigin", vPos);
TR_TraceRay(vPos, angles, MASK_PLAYERSOLID_BRUSHONLY, RayType_Infinite);
if (TR_DidHit())
{
}
return 0;
}
public void check_bot_surfing()
{
float vPos[3];
@ -573,6 +600,16 @@ public int GetClosestClient_option1(int entity, int targeteam)
bool vippresent = false;
float nearestdistance = -1.0;
int nearest = -1;
int priority_targets[MAXPLAYERS + 1];
int targets = 0;
for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && IsPlayerAlive(i) && GetClientTeam(i) == targeteam && i != present)
if (admins[i] || vips[i])
{
priority_targets[targets] = i;
targets++;
}
for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && IsPlayerAlive(i) && GetClientTeam(i) == targeteam && i != present)
{
@ -602,6 +639,16 @@ public int GetClosestClient_option1(int entity, int targeteam)
float pos[3];
GetEntPropVector(i, Prop_Send, "m_vecOrigin", pos);
float dist_target = get_power_distance(entity, pos);
//focuses on group of priority to determine while still ignoring non vip/admins
if (admins[i] || vips[i])
{
for (int j = 0; j <= targets; j++)
{
float pos_priority[3];
GetEntPropVector(priority_targets[j], Prop_Send, "m_vecOrigin", pos_priority);
dist_target += get_power_distance(i, pos_priority);
}
}
if (nearestdistance < 0 || dist_target < nearestdistance)
{
nearest = i;
@ -617,7 +664,7 @@ public float get_power_distance(int target_player, float [3]pos)
GetClientAbsOrigin(target_player, vec);
float x_axis = Pow(vec[0] - pos[0], 2.0);
float y_axis = Pow(vec[1] - pos[1], 2.0);
float z_axis = FloatAbs(Pow(vec[2] - pos[2], 3.0));
float z_axis = FloatAbs(Pow(vec[2] - pos[2], 1.4));
float power_distance = SquareRoot(x_axis * x_axis + y_axis * y_axis + z_axis * z_axis);
float defaultcap = 1000.0;
return power_distance / defaultcap;