updated autism bot plugin and python script to make movement hopefully less annoying to players

This commit is contained in:
jenz 2022-07-14 21:23:19 +02:00
parent 04df522156
commit 614de777f3
3 changed files with 171 additions and 129 deletions

View File

@ -33,34 +33,41 @@ def exit_handler():
kill_owned_process("pidof xterm")
def bot_process_movement(input_line):
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("enemy_distance:")]
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("target_enemy:")]
target_enemy = input_line[input_line.index("target_enemy:") + len("target_enemy:"):]
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)
min_distance_target_human = 10.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:
strInput += "use weapon_elite; wait 3; "
elif targeteam == 3:
strInput += "use weapon_p90; wait 3; "
elif targeteam == 2:
strInput += "use weapon_knife; wait 5; "
print('dist_target: ', dist_target, ' enemy distance: ', enemy_distance)
strInput = strinput_append(strInput, 2)
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;"
print('dist_target: ', dist_target, ' enemy distance: ', enemy_distance, ' targetteam: ', 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(10 * nth):
for _ in range(3 * nth):
boolean_val = random.choice([True, False])
if boolean_val:
strInput += "+moveleft; wait 15; -moveleft; "
strInput += " +moveleft; wait 15; -moveleft; "
else:
strInput += "+moveright; wait 15; -moveright; "
strInput += " +moveright; wait 15; -moveright; "
return strInput
def kill_user_owned_pid(pid):
@ -187,8 +194,6 @@ if __name__ == '__main__':
kill_owned_process("pidof hl2_linux")
print('exiting')
sys.exit(1)
if not connected_to_other or "connect to ze" == data:
print('data: ', data)
connection_issue_counter += 1

View File

@ -4,14 +4,14 @@ import subprocess
whoami = subprocess.getoutput(["whoami"])
with open(f'/home/{whoami}/ze_runner/config.json') as jsonfile:
data_ports = json.load(jsonfile)
data_ports = json.load(jsonfile)
#enter screen to enter password
def main():
with Display() as disp:
d = subprocess.getoutput(["echo $DISPLAY"])
print(d)
subprocess.getoutput([f"pyhoca-cli --server localhost -N --password {data_ports['x2go_pw']}"])
with Display() as disp:
d = subprocess.getoutput(["echo $DISPLAY"])
print(d)
subprocess.getoutput([f"pyhoca-cli --server localhost -N --password {data_ports['x2go_pw']}"])
if __name__ == '__main__':
main()
main()

View File

@ -25,13 +25,13 @@ float client_old_coords[MAXPLAYERS + 1][3];
float targethuman_self_teleported[MAXPLAYERS + 1][3];
bool chat_cooldown = false;
//admins & vips
bool admins[MAXPLAYERS + 1];
bool vips[MAXPLAYERS + 1];
//socket for bot input
Handle global_socket;
//timer handle
Handle g_hTimer_pressing = null;
Handle g_hTimer_bot_connect = null;
public Plugin myinfo =
{
name = "coordinates for the bot",
@ -43,20 +43,35 @@ public Plugin myinfo =
public void OnPluginStart()
{
for (int i = 1; i <= MaxClients; i++)
for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i))
{
target_friend[i] = 0;
target_enemy[i] = 0;
OnClientPostAdminCheck(i);
}
//talking
RegConsoleCmd("sm_autism", cmd_talk, "talking to the bot through java application");
RegConsoleCmd("sm_botrtv", cmd_botrtv, "making bots rtv");
//UDP connection
connect_socket();
chat_cooldown = false;
{
target_friend[i] = 0;
target_enemy[i] = 0;
OnClientPostAdminCheck(i);
}
//talking
RegConsoleCmd("sm_autism", cmd_talk, "talking to the bot through java application");
RegConsoleCmd("sm_botrtv", cmd_botrtv, "making bots rtv");
//UDP connection
connect_socket();
chat_cooldown = false;
g_hTimer_bot_connect = CreateTimer(15.0, bot_check_connect, _, TIMER_REPEAT);
g_hTimer_pressing = CreateTimer(0.30, recursive_pressing, _, TIMER_REPEAT);
}
public void OnPluginEnd()
{
if (g_hTimer_pressing != null)
{
delete g_hTimer_pressing;
}
if (g_hTimer_bot_connect != null)
{
delete g_hTimer_bot_connect;
}
}
public void reset_target_tp(int client)
@ -136,8 +151,8 @@ public bool is_autism_bot4(int client)
public Action cmd_botrtv(int client, int args)
{
if (vips[client] || admins[client])
{
if ((CheckCommandAccess(client, "sm_kick", ADMFLAG_KICK)) || (CheckCommandAccess(client, "sm_reserved", ADMFLAG_RESERVATION)))
{
for (int i = 1; i <= MaxClients; i++)
{
if (IsValidClient(i) && !IsFakeClient(i))
@ -162,57 +177,59 @@ public Action cmd_botrtv(int client, int args)
}
}
}
}
return Plugin_Handled;
}
return Plugin_Handled;
}
public Action cmd_talk(int client, int args)
{
char info[generic_length];
GetCmdArgString(info, sizeof(info));
if (strlen(info) == 0)
{
PrintToChat(client, "Add a message to the command if autism bot is ingame and running on discord");
return Plugin_Handled;
}
if (is_bot_player(client))
{
return Plugin_Handled;
}
if (chat_cooldown)
{
PrintToChat(client, "spamming bot too much, applying cooldown");
return Plugin_Handled;
}
bool bot_found = false;
for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && !IsFakeClient(i))
{
if (is_autism_bot1(i))
{
cmd_talk_help(ports[0], client, info);
bot_found = true;
}
if (is_autism_bot2(i))
{
cmd_talk_help(ports[1], client, info);
bot_found = true;
}
if (is_autism_bot3(i))
{
cmd_talk_help(ports[2], client, info);
bot_found = true;
}
if (is_autism_bot4(i))
{
cmd_talk_help(ports[3], client, info);
bot_found = true;
}
}
if (!bot_found)
PrintToChat(client, "bot not connected to server");
return Plugin_Handled;
{
char info[generic_length];
GetCmdArgString(info, sizeof(info));
if (strlen(info) == 0)
{
PrintToChat(client, "Add a message to the command if autism bot is ingame and running on discord");
return Plugin_Handled;
}
if (is_bot_player(client))
{
return Plugin_Handled;
}
if (chat_cooldown)
{
PrintToChat(client, "spamming bot too much, applying cooldown");
return Plugin_Handled;
}
bool bot_found = false;
for (int i = 1; i <= MaxClients; i++)
{
if (IsValidClient(i) && !IsFakeClient(i))
{
if (is_autism_bot1(i))
{
cmd_talk_help(ports[0], client, info);
bot_found = true;
}
if (is_autism_bot2(i))
{
cmd_talk_help(ports[1], client, info);
bot_found = true;
}
if (is_autism_bot3(i))
{
cmd_talk_help(ports[2], client, info);
bot_found = true;
}
if (is_autism_bot4(i))
{
cmd_talk_help(ports[3], client, info);
bot_found = true;
}
}
}
if (!bot_found)
PrintToChat(client, "bot not connected to server");
return Plugin_Handled;
}
public Action bot_chat_cooldown(Handle timer, any data)
@ -236,10 +253,7 @@ public void did_target_tp(int client, int bot_client)
public void OnMapStart()
{
//0.2 too spammmy, 1.5 too slow
chat_cooldown = false;
CreateTimer(0.30, recursive_pressing, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
CreateTimer(15.0, bot_check_connect, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public void send_socket_msg(char[] query_msg, int len, int port)
@ -550,29 +564,62 @@ public Action recursive_pressing(Handle timer, any data)
GetEntPropVector(target_enemy[client], Prop_Send, "m_vecOrigin", pos);
enemy_distance = get_power_distance(client, pos);
}
float max_range_dist = 500.0;
if (0 < dist_target < max_range_dist && IsValidClient(target_enemy[client]))
float max_range_dist = 150.0;
int state = -1;
if (GetEntityMoveType(client) == MOVETYPE_LADDER)
{
face_call(target_enemy[client], client);
state = 8;
}
else if (IsValidClient(target_friend[client]))
face_call(target_friend[client], client);
else if (IsValidClient(target_enemy[client]) && !admins[target_enemy[client]] && !vips[target_enemy[client]])
//if bot is ct: is close enough to friend, can stop following friend and focus on shooting zombies
else if (targeteam == 3 && 0 < dist_target < max_range_dist && IsValidClient(target_enemy[client]))
{
face_call(target_enemy[client], client);
state = 0;
}
//if bot is ct: if bot is not close enough to friend follow him
else if (targeteam == 3 && dist_target > max_range_dist)
{
face_call(target_friend[client], client);
state = 1;
}
//if bot is ct and close enough to friend then just do nothing in case of there being no enemy to shoot at
else if (targeteam == 3)
{
state = 2;
}
//if bot is zm follow enemy sometimes
else if (targeteam == 2 && 0 < enemy_distance < max_range_dist * 5 && IsValidClient(target_enemy[client]))
{
face_call(target_enemy[client], client);
state = 3;
}
//if bot is zm just follow the closest friend zm, but not constantly when too close because people start bitching then
else if (targeteam == 2 && dist_target > max_range_dist / 2)
{
face_call(target_friend[client], client);
state = 4;
}
//if bot is zm and no close enemies and no friends far away enough to follow then check if friend is close, if its the case then do nothing
else if (targeteam == 2 && 0 < dist_target < max_range_dist / 2)
{
face_call(target_friend[client], client);
state = 5;
}
//if bot is zm and there are no friends close or far away but there is also no enemy close check if there is an enemy far away
else if (targeteam == 2 && IsValidClient(target_enemy[client]))
{
face_call(target_enemy[client], client);
state = 6;
}
//else nothing to do as zm
else if (targeteam == 2)
{
state = 7;
}
if (GetEntProp(client, Prop_Data, "m_nWaterLevel") <= 2 && GetEntityMoveType(client) != MOVETYPE_LADDER)
trace_hulling_bot(client);
char message[generic_length * 7];
if (IsValidClient(target_friend[client]))
Format(message, sizeof(message), "dist_target: %f targethuman: %N enemy_distance: %f targeteam: %i", dist_target, target_friend[client], enemy_distance, targeteam);
else
Format(message, sizeof(message), "dist_target: %f targethuman: none enemy_distance: %f targeteam: %i", dist_target, enemy_distance, targeteam);
if (IsValidClient(target_enemy[client]))
Format(message, sizeof(message), "%s target_enemy: %N", message, target_enemy[client]);
else
Format(message, sizeof(message), "%s target_enemy: none", message);
Format(message, sizeof(message), "dist_target: %f enemy_distance: %f targeteam: %i state: %i", dist_target, enemy_distance, targeteam, state);
if (is_autism_bot1(client))
{
send_socket_msg(message, strlen(message), ports[0]);
@ -826,12 +873,10 @@ public int GetClosestClient_option1(bool finding_friend, int client)
{
float nearestdistance = -1.0;
int nearest = -1;
if (GetEntityMoveType(client) == MOVETYPE_LADDER)
return nearest;
for (int i = 1; i <= MaxClients; i++)
if (IsValidClient(i) && IsPlayerAlive(i) && i != client && !is_bot_player(i))
{
if (!IsAbleToSee(client, i) || is_client_stuck_or_afk(client, i) || admins[i])
if (!IsAbleToSee(client, i) || is_client_stuck_or_afk(client, i))
{
continue;
}
@ -842,8 +887,9 @@ public int GetClosestClient_option1(bool finding_friend, int client)
{
continue;
}
if ((admins[i] || vips[i] || i == target_friend[client]))
dist_target /= 5;
/*
if (i == target_friend[client])
dist_target /= 5; */
if (nearestdistance < 0 || dist_target < nearestdistance)
{
nearest = i;
@ -888,10 +934,6 @@ public void OnClientPostAdminCheck(int client)
{
send_socket_msg(msg, strlen(msg), ports[3]);
}
if (CheckCommandAccess(client, "sm_kick", ADMFLAG_KICK))
admins[client] = true;
else if (CheckCommandAccess(client, "sm_reserved", ADMFLAG_RESERVATION))
vips[client] = true;
client_old_coords[client][0] = 0.0;
client_old_coords[client][1] = 0.0;
client_old_coords[client][2] = 0.0;
@ -926,20 +968,15 @@ stock void connect_socket()
public void OnClientDisconnect(int client)
{
if (CheckCommandAccess(client, "sm_kick", ADMFLAG_KICK))
admins[client] = false;
else if (CheckCommandAccess(client, "sm_reserved", ADMFLAG_RESERVATION))
vips[client] = false;
bot_avoid_edge[client] = -1;
client_old_coords[client][0] = 0.0;
client_old_coords[client][1] = 0.0;
client_old_coords[client][2] = 0.0;
for (int i = 1; i <= MaxClients; i++)
{
if (IsValidClient(i) && is_bot_player(i) && i != client)
target_friend_afk_counter[i][client] = 0;
}
{
if (IsValidClient(i) && is_bot_player(i) && i != client)
target_friend_afk_counter[i][client] = 0;
}
reset_target_tp(client);
}