From 1d4bf1451ca9714ebf610256f290f3b1660687ed Mon Sep 17 00:00:00 2001 From: jenz Date: Sun, 16 Jan 2022 00:21:22 +0100 Subject: [PATCH] removed trigger hooking entirely --- AutismBotIngame/README.md | 95 ++++---- AutismBotIngame/python/ingamefollowct.py | 3 +- AutismBotIngame/scripting/autism_bot_info.sp | 226 ++++--------------- 3 files changed, 102 insertions(+), 222 deletions(-) diff --git a/AutismBotIngame/README.md b/AutismBotIngame/README.md index 121898bb..32172e48 100644 --- a/AutismBotIngame/README.md +++ b/AutismBotIngame/README.md @@ -1,64 +1,79 @@ # requirements -dpkg --add-architecture i386 + dpkg --add-architecture i386 -apt-update + apt-update -apt install steam + apt install steam -apt-get install mesa-utils + apt-get install mesa-utils -apt install mesa-vulkan-drivers libglx-mesa0:i386 mesa-vulkan-drivers:i386 libgl1-mesa-dri:i386 libxtst6:i386 libpipewire-0.3-dev libbz2-dev + apt install mesa-vulkan-drivers libglx-mesa0:i386 mesa-vulkan-drivers:i386 libgl1-mesa-dri:i386 libxtst6:i386 libpipewire-0.3-dev libbz2-dev -#intel specific: + #intel specific: -apt-get remove xserver-xorg-video-intel + apt-get remove xserver-xorg-video-intel -#fonts + #fonts -dpkg-reconfigure locales + dpkg-reconfigure locales -en_US.UTF 8 + en_US.UTF 8 -apt install libgtk2.0-0:i386 + apt install libgtk2.0-0:i386 -#debian + #debian -hostname unloze.com + hostname unloze.com -x2go or nomachine or VNC client/server setup
-steam account with css purchased -# launch commands + x2go or nomachine or VNC client/server setup
+ steam account with css purchased + # launch commands -cd /home/gameservers/.steam/debian-installation/
-./steam.sh -applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi
+ cd /home/gameservers/.steam/debian-installation/
+ ./steam.sh -applaunch 240 -textmode -textmessagedebug -novid -nosound -noipx -nojoy -noshaderapi
-/home/gameservers/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/cfg/autoexec.cfg:
-alias loop "exec looptest.cfg; wait 5; loop;"; wait 5; loop;
-(textmode is no video output)
+ /home/gameservers/.steam/debian-installation/steamapps/common/Counter-Strike Source/cstrike/cfg/autoexec.cfg:
+ alias loop "exec looptest.cfg; wait 5; loop;"; wait 5; loop;
+ (textmode is no video output)
-# do this before signing in to steam using VNC/x2go clients that are connected to VNC/x2go servers running virtual desktops -use "glxinfo" with VNC or x2go client terminal to get information about ID's, for example 0x0e5.
Running glxinfo on normal ssh terminals wont be usefull
-export SDL_VIDEO_X11_VISUALID=0x074
-exporting correct SDL_VIDEO_X11_VISUALID value is important before steam login for starting games correctly
-instead of automating the steam login its done manually due to requiring x2go/VNC/nomachine clients. -
With the virtual desktop related to the VNC/x2go/nomachine client you can log into steam using the normal GUI ->
-once logged in steam can run actively for months without requiring restarts + # do this before signing in to steam using VNC/x2go clients that are connected to VNC/x2go servers running virtual desktops + use "glxinfo" with VNC or x2go client terminal to get information about ID's, for example 0x0e5.
Running glxinfo on normal ssh terminals wont be usefull
+ export SDL_VIDEO_X11_VISUALID=0x074
+ exporting correct SDL_VIDEO_X11_VISUALID value is important before steam login for starting games correctly
+ instead of automating the steam login its done manually due to requiring x2go/VNC/nomachine clients. +
With the virtual desktop related to the VNC/x2go/nomachine client you can log into steam using the normal GUI ->
+ once logged in steam can run actively for months without requiring restarts -## bashrc for x2go users -in the users thats running a x2go session edit the .bashrc file and add the follwing (remember SDL_VIDEO_X11_VISUALID deppends on glxinfo from xterm terminal): + ## bashrc for x2go users + in the users thats running a x2go session edit the .bashrc file and add the follwing (remember SDL_VIDEO_X11_VISUALID deppends on glxinfo from xterm terminal): -if [[ $DISPLAY ]]; then - echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID - export SDL_VIDEO_X11_VISUALID=0x205 - echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID - steam -no-browser -console #should reduce ram usage -fi + if [[ $DISPLAY ]]; then + echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID + export SDL_VIDEO_X11_VISUALID=0x205 + echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID + #native libraries tried instead of runtime libraries for not crashing i suppose, no-browser -console should also save RAM usage + #STEAM_RUNTIME=0 steam no-browser -console + steam no-browser -console + fi -##steam settings -> library -> low bandwith mode and low performance mode + ##steam settings -> library -> low bandwith mode and low performance mode -#X2GO_NXAGENT_DEFAULT_OPTIONS="-options nx/nx,sleep=0" /etc/x2go/x2goagent.options + #X2GO_NXAGENT_DEFAULT_OPTIONS="-options nx/nx,sleep=0" /etc/x2go/x2goagent.options -#keeps session as R instead of S which is needed for interaction with graphical components such as steam and CS:S + #keeps session as R instead of S which is needed for interaction with graphical components such as steam and CS:S -ovh: 0x205, 0x209 + ovh: 0x205, 0x209 + + #if running steam native libraries instead of runtime libraries one might require following apt install for making libpipewire work + #specifically on debian steam + apt install pipewire:i386 + apt-get install libbz2-1.0:i386 + + #further steam native libraries specifically for debian + apt-get install libxtst6:i386 libxrandr2:i386 libglib2.0-0:i386 libgtk2.0-0:i386 libpulse0:i386 libgdk-pixbuf2.0-0:i386 libcurl4-openssl-dev:i386 libopenal1:i386 libusb-1.0-0:i386 libdbus-glib-1-2:i386 + apt-get install libsm6:i386 + + #check if all libs are present with + cd ~/.steam/steam/ubuntu12_32 + LD_LIBRARY_PATH=. ldd vgui2_s.so diff --git a/AutismBotIngame/python/ingamefollowct.py b/AutismBotIngame/python/ingamefollowct.py index 540ec563..b8ee0a39 100644 --- a/AutismBotIngame/python/ingamefollowct.py +++ b/AutismBotIngame/python/ingamefollowct.py @@ -243,6 +243,7 @@ if [[ $DISPLAY ]]; then echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID export SDL_VIDEO_X11_VISUALID=0x205 echo 'SDL_VIDEO_X11_VISUALID: ' $SDL_VIDEO_X11_VISUALID - steam + #native libraries being prefered over runtime here + STEAM_RUNTIME=0 steam no-browser -console fi """ diff --git a/AutismBotIngame/scripting/autism_bot_info.sp b/AutismBotIngame/scripting/autism_bot_info.sp index 96a8c6f9..ae749e0d 100644 --- a/AutismBotIngame/scripting/autism_bot_info.sp +++ b/AutismBotIngame/scripting/autism_bot_info.sp @@ -22,7 +22,7 @@ int ports[7] = {48470, 48471, 48472, 48473, 48474, 48479, 48480}; //last three i int server_ports[2] = {27015, 27035}; //server ports: ze, ze2 int bot_avoid_edge[MAXPLAYERS + 1]; float client_old_coords[MAXPLAYERS + 1][3]; -float targethuman_teleported[MAXPLAYERS + 1][3]; +float targethuman_self_teleported[MAXPLAYERS + 1][3]; bool chat_cooldown = false; //admins & vips @@ -48,58 +48,46 @@ public void OnPluginStart() { target_friend[i] = 0; target_enemy[i] = 0; - reset_target_human_tp_coord(i); OnClientPostAdminCheck(i); } //talking RegConsoleCmd("sm_autism", cmd_talk, "talking to the bot through java application"); RegConsoleCmd("sm_botrtv", cmd_botrtv, "making bots rtv"); - //hooks - HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); - HookEvent("round_end", Event_RoundEnd); //UDP connection connect_socket(); chat_cooldown = false; } -public void reset_target_human_tp_coord(int client) +public void reset_target_tp(int client) { - targethuman_teleported[client][0] = 0.0; - targethuman_teleported[client][1] = 0.0; - targethuman_teleported[client][2] = 0.0; + if (IsValidClient(client) && is_bot_player(client)) + { + targethuman_self_teleported[client][0] = 0.0; + targethuman_self_teleported[client][1] = 0.0; + targethuman_self_teleported[client][2] = 0.0; + } } -public bool origin_command_check(int entity_index) +public Action reset_target_tp_timer(Handle timer, int client) { - int count_trigger = GetOutputCount(entity_index, "m_OnTrigger"); - int count_starttouch = GetOutputCount(entity_index, "m_OnStartTouch"); - for (int i = 0; i < count_trigger; i++) - { - char buffer[generic_length]; - GetOutputParameter(entity_index, "m_OnTrigger", i, buffer, sizeof(buffer)); - if (StrContains(buffer, "origin", true) != -1) - return true; - } - for (int i = 0; i < count_starttouch; i++) - { - char buffer[generic_length]; - GetOutputParameter(entity_index, "m_OnStartTouch", i, buffer, sizeof(buffer)); - if (StrContains(buffer, "origin", true) != -1) - return true; - } - return false; -} - -public Action reset_target_tp(Handle timer, int client) -{ - reset_target_human_tp_coord(client); + reset_target_tp(client); return Plugin_Continue; } -public bool distance_check(int client) +public bool distance_check(int client, int botclient, bool nowpos) { - float dist_target = get_power_distance(client, targethuman_teleported[client]); + float dist_target = 0.0; + if (nowpos) + { + float pos[3]; + GetEntPropVector(botclient, Prop_Send, "m_vecOrigin", pos); + dist_target = get_power_distance(client, pos); + } + else + { + dist_target = get_power_distance(client, targethuman_self_teleported[botclient]); + } float min_required_distance = 50000.0; if (dist_target > min_required_distance) return false; @@ -233,128 +221,17 @@ public Action bot_chat_cooldown(Handle timer, any data) return Plugin_Continue; } -public void unhookAll() +public void did_target_tp(int client, int bot_client) { - int entity_tp = MaxClients + 1; - int entity_mp = MaxClients + 1; - while((entity_mp = FindEntityByClassname(entity_mp, "trigger_multiple")) != -1) - { - char targetName[64]; - GetEntPropString(entity_mp, Prop_Data, "m_iName", targetName, sizeof(targetName)); - if (strlen(targetName) > 0) - { - UnhookSingleEntityOutput(entity_mp, "OnStartTouch", OnEntityOutPut_mp); - UnhookSingleEntityOutput(entity_mp, "OnTrigger", OnEntityOutPut_mp); - } - } - while((entity_tp = FindEntityByClassname(entity_tp, "trigger_teleport")) != -1) - { - char targetName[64]; - GetEntPropString(entity_tp, Prop_Data, "m_iName", targetName, sizeof(targetName)); - if (strlen(targetName) > 0) - { - UnhookSingleEntityOutput(entity_tp, "OnStartTouch", OnEntityOutPut_tp); - UnhookSingleEntityOutput(entity_tp, "OnTrigger", OnEntityOutPut_tp); - } - } -} - -public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) -{ - unhookAll(); -} - -public void round_start_void() -{ - unhookAll(); - for (int i = 1; i <= MaxClients; i++) - if (IsValidClient(i) && !IsFakeClient(i)) + if (client == bot_client && targethuman_self_teleported[client][0] != 0.0 && !distance_check(client, bot_client, false)) { - target_friend[i] = 0; - target_enemy[i] = 0; - reset_target_human_tp_coord(i); + reset_target_tp(client); } - int entity_tp = MaxClients + 1; - int entity_mp = MaxClients + 1; - while((entity_mp = FindEntityByClassname(entity_mp, "trigger_multiple")) != -1) + else if (client != bot_client && targethuman_self_teleported[bot_client][0] == 0.0 && !distance_check(client, bot_client, true)) { - char targetName[64]; - GetEntPropString(entity_mp, Prop_Data, "m_iName", targetName, sizeof(targetName)); - if (strlen(targetName) > 0) - { - HookSingleEntityOutput(entity_mp, "OnStartTouch", OnEntityOutPut_mp, true); - HookSingleEntityOutput(entity_mp, "OnTrigger", OnEntityOutPut_mp, true); - } + GetEntPropVector(client, Prop_Send, "m_vecOrigin", targethuman_self_teleported[bot_client]); + CreateTimer(6.0, reset_target_tp_timer, bot_client); } - while((entity_tp = FindEntityByClassname(entity_tp, "trigger_teleport")) != -1) - { - char targetName[64]; - GetEntPropString(entity_tp, Prop_Data, "m_iName", targetName, sizeof(targetName)); - if (strlen(targetName) > 0) - { - HookSingleEntityOutput(entity_tp, "OnStartTouch", OnEntityOutPut_tp, true); - HookSingleEntityOutput(entity_tp, "OnTrigger", OnEntityOutPut_tp, true); - } - } -} - -public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast) -{ - round_start_void(); -} - -public void OnEntityOutPut_mp(const char[] output, int entity_index, int client, float delay) -{ - if (IsValidEdict(entity_index) && origin_command_check(entity_index)) - { - for (int i = 1; i <= MaxClients; i++) - if (IsValidClient(i)) - { - if (target_friend[i] == client) - { - GetEntPropVector(client, Prop_Send, "m_vecOrigin", targethuman_teleported[i]); - CreateTimer(6.0, reset_target_tp, client); - break; - } - else if (is_bot_player(i) && i == client) - { - CreateTimer(0.1, reset_target_tp, client); - break; - } - } - } - UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp); - UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp); - //experimental if unhooking very shortly solves tp lag - DataPack dPack; - CreateDataTimer(0.5, reset_hook_mp, dPack); - dPack.WriteCell(entity_index); -} - -public void OnEntityOutPut_tp(const char[] output, int entity_index, int client, float delay) -{ - for (int i = 1; i <= MaxClients; i++) - if (IsValidClient(i)) - { - //i is an autismbot following this player - if (target_friend[i] == client) - { - GetEntPropVector(client, Prop_Send, "m_vecOrigin", targethuman_teleported[i]); - CreateTimer(6.0, reset_target_tp, client); - break; - } - else if (is_bot_player(i) && i == client) - { - CreateTimer(0.1, reset_target_tp, client); - break; - } - } - UnhookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp); - UnhookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp); - //experimental if unhooking very shortly solves tp lag - DataPack dPack; - CreateDataTimer(0.5, reset_hook_tp, dPack); - dPack.WriteCell(entity_index); } public void OnMapStart() @@ -588,30 +465,6 @@ public bool is_bot_player(int client) return is_autism_bot1(client) || is_autism_bot2(client) || is_autism_bot3(client) || is_autism_bot4(client); } -public Action reset_hook_mp(Handle timer, DataPack dPack) -{ - dPack.Reset(); - int entity_index = dPack.ReadCell(); - if (IsValidEdict(entity_index)) - { - HookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_mp, true); - HookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_mp, true); - } - return Plugin_Continue; -} - -public Action reset_hook_tp(Handle timer, DataPack dPack) -{ - dPack.Reset(); - int entity_index = dPack.ReadCell(); - if (IsValidEdict(entity_index)) - { - HookSingleEntityOutput(entity_index, "OnStartTouch", OnEntityOutPut_tp, true); - HookSingleEntityOutput(entity_index, "OnTrigger", OnEntityOutPut_tp, true); - } - return Plugin_Continue; -} - public Action recursive_pressing(Handle timer, any data) { bool found_valid_ct = false; @@ -650,24 +503,33 @@ public Action recursive_pressing(Handle timer, any data) //3 = autismo is human and should follow closest moving ct targeteam = 3; } - if (targethuman_teleported[client][0] != 0.0) + if (IsValidClient(target_friend[client])) + { + did_target_tp(target_friend[client], client); + } + else if (IsValidClient(target_enemy[client])) + { + did_target_tp(target_enemy[client], client); + } + if (targethuman_self_teleported[client][0] != 0.0) { float ClientPos[3]; float Result[3]; GetClientEyePosition(client, ClientPos); - MakeVectorFromPoints(ClientPos, targethuman_teleported[client], Result); + MakeVectorFromPoints(ClientPos, targethuman_self_teleported[client], Result); GetVectorAngles(Result, Result); TeleportEntity(client, NULL_VECTOR, Result, NULL_VECTOR); - if (!distance_check(client)) - reset_target_human_tp_coord(client); + if (!distance_check(client, client, false)) + reset_target_tp(client); continue; } - //no target in water somehow + //no target in water somehow target_enemy[client] = GetClosestClient_option1(false, client); target_friend[client] = GetClosestClient_option1(true, client); + float pos[3]; + did_target_tp(client, client); float enemy_distance = -1.0; float dist_target = -1.0; - float pos[3]; if (IsValidClient(target_friend[client])) { GetEntPropVector(target_friend[client], Prop_Send, "m_vecOrigin", pos); @@ -1008,6 +870,7 @@ public void OnClientPostAdminCheck(int client) client_old_coords[client][0] = 0.0; client_old_coords[client][1] = 0.0; client_old_coords[client][2] = 0.0; + reset_target_tp(client); } public void OnSocketError(Handle socket, const int errorType, const int errorNum, any args) @@ -1052,6 +915,7 @@ public void OnClientDisconnect(int client) if (IsValidClient(i) && is_bot_player(i) && i != client) target_friend_afk_counter[i][client] = 0; } + reset_target_tp(client); } //Socket callback