From 646a81151a303a94ee332f5985b6698f34d1cc92 Mon Sep 17 00:00:00 2001 From: christian Date: Sat, 27 Mar 2021 00:57:40 +0100 Subject: [PATCH] updated to handle stuff multiple clients but might need further edits --- AutismBotIngame/scripting/autism_bot_info.sp | 241 +++++++++++-------- 1 file changed, 145 insertions(+), 96 deletions(-) diff --git a/AutismBotIngame/scripting/autism_bot_info.sp b/AutismBotIngame/scripting/autism_bot_info.sp index 66503265..4edef4e9 100644 --- a/AutismBotIngame/scripting/autism_bot_info.sp +++ b/AutismBotIngame/scripting/autism_bot_info.sp @@ -3,7 +3,7 @@ #define DEBUG #define PLUGIN_AUTHOR "jenz" -#define PLUGIN_VERSION "1.4" +#define PLUGIN_VERSION "1.5" #define generic_length 256 #include @@ -13,7 +13,7 @@ #include //#pragma newdecls required -int present = 0; +int present[MAXPLAYERS + 1]; int targethuman = 0; int target_enemy = 0; int buttons_old; @@ -42,6 +42,9 @@ public Plugin myinfo = public void OnPluginStart() { + for (int i = 1; i <= MaxClients; i++) + if (IsValidClient(i)) + present[i] = 0; //talking RegConsoleCmd("sm_autism", cmd_talk, "talking to the bot through java application"); @@ -75,7 +78,7 @@ public void trigger_teleport(const char[] output, int entity_index, int client, GetEntPropVector(client, Prop_Send, "m_vecOrigin", targethuman_teleported); CreateTimer(6.0, reset_target_tp); } - else if (IsValidClient(present) && client == present) + else if (IsValidClient(client) && client == present[client]) CreateTimer(0.1, reset_target_tp); } @@ -91,7 +94,7 @@ public void Trigger_Multiple(const char[] output, int entity_index, int client, CreateTimer(6.0, reset_target_tp); } } - else if (IsValidClient(present) && client == present) + else if (IsValidClient(client) && client == present[client]) { if (origin_command_check(entity_index)) CreateTimer(0.1, reset_target_tp); @@ -126,9 +129,9 @@ public Action reset_target_tp(Handle timer, any data) return Plugin_Continue; } -public bool distance_check() +public bool distance_check(int client) { - float dist_target = get_power_distance(present, targethuman_teleported); + float dist_target = get_power_distance(present[client], targethuman_teleported); float min_required_distance = 50000.0; if (dist_target > min_required_distance) return false; @@ -150,17 +153,26 @@ public Action cmd_talk(int client, int args) PrintToChat(client, "spamming bot too much, applying cooldown"); return Plugin_Handled; } - if (IsValidClient(present)) - { - chat_cooldown = true; - char magic_code[16]; - Format(magic_code, sizeof(magic_code), "72DqZ84"); - Format(msg, sizeof(msg), "clientmessage:%N %s %s", client, magic_code, info); - send_socket_msg(msg, strlen(msg)); - CreateTimer(2.0, bot_chat_cooldown); - } - else - PrintToChat(client, "bot not connected to server"); + for (int i = 1; i <= MaxClients; i++) + if (IsValidClient(i) && !IsFakeClient(i)) + { + char ip_addr[generic_length]; + GetClientIP(i, ip_addr, sizeof(ip_addr)); + if (present[i] == i) + { + if (StrContains(ip_addr, "127.0.0.1")) + { + chat_cooldown = true; + char magic_code[16]; + Format(magic_code, sizeof(magic_code), "72DqZ84"); + Format(msg, sizeof(msg), "clientmessage:%N %s %s", client, magic_code, info); + send_socket_msg(msg, strlen(msg)); + CreateTimer(2.0, bot_chat_cooldown); + return Plugin_Handled; + } + } + } + PrintToChat(client, "bot not connected to server"); return Plugin_Handled; } @@ -191,24 +203,57 @@ public void send_socket_msg(char[] query_msg, int len) SocketSendTo(global_socket, query_msg, len, "127.0.0.1", 48477); //udp } +public void send_socket_msg1(char[] query_msg, int len) +{ + if (global_socket != INVALID_HANDLE && SocketIsConnected(global_socket)) + SocketSendTo(global_socket, query_msg, len, "127.0.0.1", 48478); //udp +} + + public Action bot_check_connect(Handle timer, any data) { - if (!IsValidClient(present) && GetClientCount(false) <= 61) - { - char msg[generic_length]; - //PrintToChatAll("sending UDP message..."); - Format(msg, sizeof(msg), "connect to ze"); + int client_count = GetClientCount(false); + bool found_bot_1 = false; + bool found_bot_2 = false; + for (int i = 1; i <= MaxClients; i++) + if (IsValidClient(i) && !IsFakeClient(i)) + { + char ip_addr[generic_length]; + GetClientIP(i, ip_addr, sizeof(ip_addr)); + if (i == present[i]) + { + if (client_count > 61) + { + char msg[generic_length]; + if (StrContains(ip_addr, "127.0.0.1")) + { + KickClient(i, "server full you need to leave"); + Format(msg, sizeof(msg), "bot kicked server full"); + send_socket_msg(msg, strlen(msg)); + } + else if (StrContains(ip_addr, "164.132.201.173")) + { + KickClient(i, "server full you need to leave"); + Format(msg, sizeof(msg), "bot kicked server full"); + send_socket_msg1(msg, strlen(msg)); + } + } + else + { + if (StrContains(ip_addr, "127.0.0.1")) + found_bot_1 = true; + else if (StrContains(ip_addr, "164.132.201.173")) + found_bot_2 = true; + } + } + } + char msg[generic_length]; + //PrintToChatAll("sending UDP message..."); + Format(msg, sizeof(msg), "connect to ze"); + if (!found_bot_1) send_socket_msg(msg, strlen(msg)); - } - /* - else if (IsValidClient(present) && GetClientCount(false) >= 63) - { - char msg[generic_length]; - KickClient(present, "server full you need to leave"); - Format(msg, sizeof(msg), "bot kicked server full"); - send_socket_msg(msg, strlen(msg)); - } - */ + if (!found_bot_2) + send_socket_msg1(msg, strlen(msg)); return Plugin_Continue; } @@ -216,10 +261,10 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float int cmdnum, int tickcount, int seed, const int mouse[2]) { if (!IsClientInGame(client)) return; - if (client == present) + if (client == present[client]) { int flags = GetEntityFlags(client); - if (!(flags & FL_ONGROUND) && (flags_old & FL_ONGROUND) && !(buttons_old & IN_JUMP) && !(buttons & IN_JUMP) && (GetEntityMoveType(present) != MOVETYPE_LADDER)) + if (!(flags & FL_ONGROUND) && (flags_old & FL_ONGROUND) && !(buttons_old & IN_JUMP) && !(buttons & IN_JUMP) && (GetEntityMoveType(present[client]) != MOVETYPE_LADDER)) { float Vel[3], feet_origin[3], ground_pos[3], downwards[3]; //TODO @@ -227,11 +272,11 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float GetEntPropVector(client, Prop_Data, "m_vecVelocity", Vel); Vel[2] += velocity_addition_z_axis; - GetClientAbsOrigin(present, feet_origin); + GetClientAbsOrigin(present[client], feet_origin); downwards[0] = 90.0; downwards[1] = 0.0; downwards[2] = 0.0; - TR_TraceRayFilter(feet_origin, downwards, MASK_ALL, RayType_Infinite, TraceRayDontHitSelf, present); + TR_TraceRayFilter(feet_origin, downwards, MASK_ALL, RayType_Infinite, TraceRayDontHitSelf, present[client]); if (TR_DidHit()) { TR_GetEndPosition(ground_pos); @@ -240,9 +285,9 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float if (ground_distance > 80) { float angles_eye[3]; - GetClientEyeAngles(present, angles_eye); + GetClientEyeAngles(present[client], angles_eye); feet_origin[2] += 10.0; - TR_TraceRayFilter(feet_origin, angles_eye, MASK_ALL, RayType_Infinite, TraceRayDontHitSelf, present); + TR_TraceRayFilter(feet_origin, angles_eye, MASK_ALL, RayType_Infinite, TraceRayDontHitSelf, present[client]); if (TR_DidHit()) { TR_GetEndPosition(ground_pos); @@ -253,7 +298,7 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float if (IsValidClient(targethuman)) { float feet_origin_pre[3], human_feet_origin[3]; - GetClientAbsOrigin(present, feet_origin_pre); + GetClientAbsOrigin(present[client], feet_origin_pre); GetClientAbsOrigin(targethuman, human_feet_origin); //target human is below, get down to them //TODO maybe? @@ -265,11 +310,11 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float } } float velocity[3]; - GetEntPropVector(present, Prop_Data, "m_vecVelocity", velocity); + GetEntPropVector(present[client], Prop_Data, "m_vecVelocity", velocity); velocity[2] += 30.0; NegateVector(velocity); for (int y = 0; y < 10; y++) - TeleportEntity(present, NULL_VECTOR, NULL_VECTOR, velocity); + TeleportEntity(present[client], NULL_VECTOR, NULL_VECTOR, velocity); } } } @@ -283,19 +328,20 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float public Action recursive_pressing(Handle timer, any data) { - if (IsValidClient(present)) + for (int client = 1; client <= MaxClients; client++) + if (IsValidClient(client) && present[client] == client) { - if (GetClientTeam(present) == 1 || GetClientTeam(present) == 0) + if (GetClientTeam(present[client]) == 1 || GetClientTeam(present[client]) == 0) { - ChangeClientTeam(present, 2); + ChangeClientTeam(present[client], 2); return Plugin_Continue; } - if (IsPlayerAlive(present)) + if (IsPlayerAlive(present[client])) { - if (GetEntityMoveType(present) == MOVETYPE_LADDER) + if (GetEntityMoveType(present[client]) == MOVETYPE_LADDER) return Plugin_Continue; int targeteam = 0; - if (GetClientTeam(present) != 3) + if (GetClientTeam(present[client]) != 3) { //2 = autismo is zm and should follow closest moving zm targeteam = 2; @@ -309,42 +355,42 @@ public Action recursive_pressing(Handle timer, any data) { float ClientPos[3]; float Result[3]; - GetClientEyePosition(present, ClientPos); + GetClientEyePosition(present[client], ClientPos); MakeVectorFromPoints(ClientPos, targethuman_teleported, Result); GetVectorAngles(Result, Result); - TeleportEntity(present, NULL_VECTOR, Result, NULL_VECTOR); - if (!distance_check()) + TeleportEntity(present[client], NULL_VECTOR, Result, NULL_VECTOR); + if (!distance_check(client)) reset_target_human_tp_coord(); return Plugin_Continue; } - //target_enemy = GetClosestClient_option1(targeteam == 2 ? 3 : 2); - targethuman = GetClosestClient_option1(targeteam == 2 ? 2 : 3); + target_enemy = GetClosestClient_option1(targeteam == 2 ? 3 : 2, client); + targethuman = GetClosestClient_option1(targeteam == 2 ? 2 : 3, client); float enemy_distance = -1.0; float dist_target = -1.0; float pos[3]; if (IsValidClient(targethuman)) { GetEntPropVector(targethuman, Prop_Send, "m_vecOrigin", pos); - dist_target = get_power_distance(present, pos); + dist_target = get_power_distance(present[client], pos); } - /* + + //TODO maybe disable if requested if (IsValidClient(target_enemy)) { GetEntPropVector(target_enemy, Prop_Send, "m_vecOrigin", pos); - enemy_distance = get_power_distance(present, pos); + enemy_distance = get_power_distance(present[client], pos); } - */ if ((0 < enemy_distance && targeteam == 2) || dist_target < 0 < enemy_distance) { float feet_origin[3], enemy_feet_origin[3]; - GetClientAbsOrigin(present, feet_origin); + GetClientAbsOrigin(present[client], feet_origin); GetClientAbsOrigin(target_enemy, enemy_feet_origin); if (feet_origin[2] + 100 > enemy_feet_origin[2]) - face_call(target_enemy); + face_call(target_enemy, client); } else if (0 < dist_target) - face_call(targethuman); - trace_hulling_bot(); + face_call(targethuman, client); + trace_hulling_bot(client); char message[generic_length * 7]; if (IsValidClient(targethuman)) Format(message, sizeof(message), "dist_target: %f targethuman: %N enemy_distance: %f targeteam: %i", dist_target, targethuman, enemy_distance, targeteam); @@ -361,7 +407,7 @@ public Action recursive_pressing(Handle timer, any data) } //https://developer.valvesoftware.com/wiki/Dimensions -public void trace_hulling_bot() +public void trace_hulling_bot(int client) { char message[generic_length * 3]; float step_cap = 18.0; @@ -369,10 +415,10 @@ public void trace_hulling_bot() float stand_min = 63.0; float feet_origin[3], mins[3], maxs[3], eye_position[3]; int BOUNDINGBOX_INFLATION_OFFSET = 3; - GetClientEyePosition(present, eye_position); - GetClientAbsOrigin(present, feet_origin); - GetClientMins(present, mins); - GetClientMaxs(present, maxs); + GetClientEyePosition(present[client], eye_position); + GetClientAbsOrigin(present[client], feet_origin); + GetClientMins(present[client], mins); + GetClientMaxs(present[client], maxs); //increasing boxes sizes for (int ij = 0; ij < sizeof(mins) - 1; ij++) { @@ -444,13 +490,13 @@ public void trace_hulling_bot() } //currently detects when two walls meet and create a corner float move_angles[3]; - if (GetEntityMoveType(present) != MOVETYPE_LADDER) + if (GetEntityMoveType(present[client]) != MOVETYPE_LADDER) { - GetClientEyeAngles(present, move_angles); + GetClientEyeAngles(present[client], move_angles); move_angles[0] = 0.0; move_angles[1] += 35.0; move_angles[2] = 0.0; - TeleportEntity(present, NULL_VECTOR, move_angles, NULL_VECTOR); + TeleportEntity(present[client], NULL_VECTOR, move_angles, NULL_VECTOR); } return; } @@ -459,19 +505,20 @@ public void trace_hulling_bot() //TODO implement surfing again but differently //check_bot_surfing(); +/* public void check_bot_surfing() { float vPos[3]; float vMins[3]; float vMaxs[3]; - GetEntPropVector(present, Prop_Data, "m_vecOrigin", vPos); - GetEntPropVector(present, Prop_Send, "m_vecMins", vMins); - GetEntPropVector(present, Prop_Send, "m_vecMaxs", vMaxs); + GetEntPropVector(present[client], Prop_Data, "m_vecOrigin", vPos); + GetEntPropVector(present[client], Prop_Send, "m_vecMins", vMins); + GetEntPropVector(present[client], Prop_Send, "m_vecMaxs", vMaxs); float vEndPos[3]; vEndPos[0] = vPos[0]; vEndPos[1] = vPos[1]; vEndPos[2] = vPos[2] - FindConVar("sv_maxvelocity").FloatValue; - TR_TraceHullFilter(vPos, vEndPos, vMins, vMaxs, MASK_ALL, TraceRayDontHitSelf, present); + TR_TraceHullFilter(vPos, vEndPos, vMins, vMaxs, MASK_ALL, TraceRayDontHitSelf, present[client]); if (TR_DidHit()) { //< 0.7 = surf ramp @@ -488,7 +535,7 @@ public void check_bot_surfing() if (!surf_cooldown) { surf_cooldown = true; - TeleportEntity(present, NULL_VECTOR, vPlane, NULL_VECTOR); + TeleportEntity(present[client], NULL_VECTOR, vPlane, NULL_VECTOR); Format(keyinput, sizeof(keyinput), "surfing: %f %f %f", vPlane[0], vPlane[1], vPlane[2]); send_socket_msg(keyinput, strlen(keyinput)); CreateTimer(0.5, surf_cooldown_timer); @@ -496,6 +543,7 @@ public void check_bot_surfing() } } } +*/ public Action surf_cooldown_timer(Handle timer, any data) { @@ -508,24 +556,24 @@ public bool TraceRayDontHitSelf(int entity, int mask, any data) return entity != data && !(0 < entity <= MaxClients); } -public void face_call(int client) +public void face_call(int client, int selfclient) { for (int j = 0; j < 5; j++) - faceclient(client); + faceclient(client, selfclient); } -public void faceclient(int target_human) +public void faceclient(int target_human, int client) { - if (IsValidClient(present) && IsValidClient(target_human)) + if (IsValidClient(client) && IsValidClient(target_human)) { float TargetPos[3]; float ClientPos[3]; float Result[3]; GetClientEyePosition(target_human, TargetPos); - GetClientEyePosition(present, ClientPos); + GetClientEyePosition(client, ClientPos); MakeVectorFromPoints(ClientPos, TargetPos, Result); GetVectorAngles(Result, Result); - TeleportEntity(present, NULL_VECTOR, Result, NULL_VECTOR); + TeleportEntity(client, NULL_VECTOR, Result, NULL_VECTOR); } } @@ -545,14 +593,14 @@ stock bool is_client_stuck_or_afk(int client) } int target_human_afk_counter = 0; -public int GetClosestClient_option1(int targeteam) +public int GetClosestClient_option1(int targeteam, int client) { float nearestdistance = -1.0; int nearest = -1; for (int i = 1; i <= MaxClients; i++) - if (IsValidClient(i) && IsPlayerAlive(i) && GetClientTeam(i) == targeteam && i != present) + if (IsValidClient(i) && IsPlayerAlive(i) && GetClientTeam(i) == targeteam && i != present[client]) { - if (!IsAbleToSee(present, i)) + if (!IsAbleToSee(present[client], i)) continue; if (is_client_stuck_or_afk(i)) { @@ -570,8 +618,8 @@ public int GetClosestClient_option1(int targeteam) return targethuman; float pos[3]; GetEntPropVector(i, Prop_Send, "m_vecOrigin", pos); - float dist_target = get_power_distance(present, pos); - if (GetClientTeam(present) == 3 && IsValidClient(target_enemy) && targeteam == 3) + float dist_target = get_power_distance(present[client], pos); + if (GetClientTeam(present[client]) == 3 && IsValidClient(target_enemy) && targeteam == 3) { float enemey_cap = 1500.0; float enemy_dist = get_power_distance(target_enemy, pos); @@ -603,16 +651,17 @@ public void OnClientPostAdminCheck(int client) //[U:1:120378081] //[U:1:69566635] char auth[50]; + present[client] = 0; GetClientAuthId(client, AuthId_Engine, auth, sizeof(auth)); - if (StrEqual("[U:1:120378081]", auth, false)) + if (StrEqual("[U:1:120378081]", auth, false) || StrEqual("STEAM_0:1:60189040", auth, false)) { - present = client; - bot_send_connected_msg(); + present[client] = client; + bot_send_connected_msg(0); } - else if (StrEqual("STEAM_0:1:60189040", auth, false)) + if (StrEqual("[U:1:1036189204]", auth, false) || StrEqual("STEAM_0:0:518094602", auth, false)) { - present = client; - bot_send_connected_msg(); + present[client] = client; + bot_send_connected_msg(1); } if (CheckCommandAccess(client, "sm_kick", ADMFLAG_KICK)) admins[client] = true; @@ -644,10 +693,7 @@ stock void connect_socket() public void OnClientDisconnect(int client) { - if (present == client) - { - present = 0; - } + present[client] = 0; admins[client] = false; vips[client] = false; client_old_coords[client][0] = 0.0; @@ -655,14 +701,17 @@ public void OnClientDisconnect(int client) client_old_coords[client][2] = 0.0; } -public void bot_send_connected_msg() +public void bot_send_connected_msg(int bot_specified) { char msg[generic_length]; Format(msg, sizeof(msg), "autismo connected"); if (!connected_cooldown) { connected_cooldown = true; - send_socket_msg(msg, strlen(msg)); + if (!bot_specified) + send_socket_msg(msg, strlen(msg)); + else + send_socket_msg1(msg, strlen(msg)); CreateTimer(5.0, connect_cooldown); } }