updated autism bot plugin and python script to make movement hopefully less annoying to players
This commit is contained in:
parent
04df522156
commit
614de777f3
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user