From a00922586af408a2edcb2b8685b8da8dd66d1d6f Mon Sep 17 00:00:00 2001 From: Jackz Date: Mon, 9 Oct 2023 14:02:47 -0500 Subject: [PATCH] Keep idle time on map transitions --- plugins/l4d2_ai_tweaks.smx | Bin 4031 -> 4215 bytes scripting/l4d2_ai_tweaks.sp | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/plugins/l4d2_ai_tweaks.smx b/plugins/l4d2_ai_tweaks.smx index 2a417c753dbf0bd8ebb4a1cd6eb5432874391822..e8c85cd6157184f881f23e8f81a9c157471825e2 100644 GIT binary patch delta 4041 zcmXYt2RxMj1ILf!`VlJPLMTd{k<6@y?3FF4+Mf{gFwIsvLp;O6#{iiR51>((B8IvQtDSrkrP4l)g{+v(t>((*WShJ0Kebh%@bWsV zxb2y`s+bSN=G50)d6ndt71&zT78Y8X_UG(2&o=K&1Sn0LXdew{q^qq2Wo?8_Y+!mv zCWSTq9~t(Y%F+Go4PSVJKLD6eP!xmDMXJy52Ye0VB>FXU96zCeoq7g}9UuuPp$pik zyilFYd4ec(*n?IL^GU`pDxpPSJ#y$KHfkGe*$;~CBdL4SV$TtBVao)(sxz&JkKjb@ zTY;4ilAPJ82&j@9O_Ysl4Be^3t2)p)`2TKvhF5(^Ti^mH0UPY7Argk4a0WWdOR$6a zRQ!JvoSh1GkCLLMH&M~}rY=&MJo*Uc(@LVtqeIxK;ZW>Xl7J%mDj(tD-@1@)QdHyo z#~_%`dwe$^AsJRaMq=j!Tdif$s_axjXu~jxu7r+cqdG!&((xgKqzoDKEWn0Rah}6M zhaG8+?9_OC$+^Er$ik~S{k;%aT#Gm8l_^z*Nqf>7*{I{NawnSLf8W0i#eN}u@}L>> z5o%!4cD_FhcnKWPVQ<=Vwscq8HZKAEb0rjXlMT-jF>>j|G7BA*LX#WQNTH-snXnR6 z7=4M;)f!0a@rf0=UYfQ2abvdEJXOxk_&HKzBP>^OnXk3>wZhg*KU;PWJ=W=5+jNzl zSq(qV)X<-dem=j{3Ov(7YIj}v^6UG3ZY+w*|6wa*3+4+)nuLVo{!Po>y;4_wHH(+M z2}(#kpdrd6OI+Tyk)8HF?N0zh?Ua^`?N+pXwhX{7yxY!OF}PsUyS2HY92iA^XZXi= zEZ{?sN663-e5-Mwe%TeJ^^3Uo@90s+=FxWpuf@@-_@U7zt&$bPp)e+&x19xV`D5*g zzK4N_{?y|6irHEhzqASe1poHBO%-XG9qQL(#ZgtV)&9o0t3oX}0eQ6QuD`_aMrLZz z_X?oG2M({Ps7Vc@yGQl7habv!7Ccf#zx(Lbebq!!U5e-xY`^Pn_9I9kEJ0?oeJQoY zt?zep@G{)o=3vs%=8gZ@+~k-C{kZgVruASg{ZC13W9(8DZhx@C`e-=C-LuPN(bt$OMW@Xc*Cp&tW; zS9aG)&*+bZU)78}Vr^-DufjVwoU+s`=tBy4IkVPB%wOXEB=8=<1T{OkPpNwAUk5gQ ztF@C6o4%D9U7>mdAExyGXiM0~53V^Eb97g$NR}*!*;qw5+i<5?T3&CqXWu?C=s+xn z&9=>4Ru&7NoBipzhDzoLhL4y>joo0HvCyDj zoHoUre5T*;wPql-segTs{(ipIB^Aio2?_CNlx}booeLbVSh~JiBXuI2oCzKOT{$U> zzvdQBu5Sy}IN%6OjX9x0?rD>as27}*4;jWZl65F-^c!4nja{gTGfR^i`;Uo5GtcT0}ft}_f`2kvDeo+N(c z&ik$?K}h%`a;~T-)aMr zd__O=LyJ82ysIYs#}5hIwJ}0w!y@E9iG6{wng)wbSw|(Kekpok{~m^d2^YX**jwAp z4%-axVTLi`{Dy-?^{ZR(Wneviw!C7^JXu%;aF|yqH`AO&7M1@(XaycSP%tes#)Dmm zh+xG$KA`sd`zWnI^Ka)aA(aZ!E!sn=*vEtTR4ZfNTt9NB~()4UOm%OA&N98u8m+y}%8gIn> z>&Pv9`GT!+)oCDQeCL!!hIhMnJ;i&*z%wJq^0|-y{zWR&{=J*JLH!l|{=v zEB9IFeHfanV~Vj6Iu+p0d7K=2qw#gGJ$4PtynqjTfno-Zq3((ug97XR1VMrkdTigYOnMjyuHG< z-SsP;^N9Dvgm=m>;dn6~{UHax#8}NA{mJX)!(9D_%VH^=UI{kTs?Z=&SEK0$Zf_m3 zVQqL+bTPoRjYmqlqIKFi1&?YvJ5bNo9kg^GjZ|-cPxUSwKojNTZl|roDMeojy%F}I_|>{>#hBc{7ZZu2j7abGh)-fxHq;JzaKsQq54+2 z0h6MwPu(<&rbLlEv+b+x*jQnN@sEGPX2O*nEON^M@jG9(QJBxWt11ZK2eR!RN{P*9 zp~S>u2{}BQQO3W1-!H9hls)N%-TATGuJ>_~-sR~-i*=#KFzFReYg*a>j3$TpiwxeS8f*L!5sY5S_1g?kO8G%PcTYqyv%I%anw zFHgVY`?JUQN5`|iHmh`vXz{DJBlkGO^RRb#_Ydk9QRU3m0bTpE_D>H5fPGF@$sTBO z4B(=yvhAvA37t2`Z|Yu%xOM|R$02HA z|Ib?ctsH`g*?#cp<-A+L5tlt8v{;-?kzC(KV=r5XXH5wnbJFpJ+J|LZ5~0N1Qj>$y zihnatEPEc>rA~yj=& zg*MA-XKklJA+~^<=1Gdg-JIeH&zN`u0rauyq^y2yFpYmRLxn|v&WpbZ%r=-1vk$^) zSLd5lS1*lUg8*9IOos}qmf!OziFO_wkkS4MM^C5iVM z2Dn>aC2*aK0KYDgzf9xD>EP$zs>o4lTt`Ec7?Jn@oP=vJwh0SO!waINR~>22q&p;@ zYH`|3ZRd%WEBVi9YP3)qH)*D3;42@~edbcgEL4cG<<#TTz+;6G=~X^jl+A+CsxqyP z6!aEW0eu94Lk{?p%HHq|j66KG3ZpU5Vn`ySG+YJL7naF9!RYmw)WrRkc>=b?Ji(C; zaltj=qHzb5h4Hl-k|NE|L3Nc4eT{tjT&DnO3}=8FC*_eC(Y&j-X#xYrByNlH5d`sR zjpdC3SD=J@PKuVSA$2YA&A>N8r71aavxVltca`Mn*35wHYQYcpKb}gKP>x(lI_H~~ zYgM97;&(ewHVrW35=~EYKQCWo=~byWt`qc1HElpZPU_9GE*H$Ca(`)$iz+_4t0isF z1N*^dJgr|{!cMvlvXZ@~Volz^L)xJ#3})D_II|w$l~aXq z8KGE0Y=?JrD~E$p-O0+xmGR&p%b;~e2~&Ma`*l=0mYap%Q<<>RX?uNnra86mow=Zj zJ7WR;&Z7V`LBpA@0qd8{%t89eofdX_I;fGmj+;EnLrx;};iTh>$`-LDudBSmKPpef z1A(use8X+TrMp}7Ts?vcIg+B|bf3mwnU~pb&3^PIz?-Y~ReVt9Gf!_*1M{EEM#`<; ziH~i}U3?9{bq|~)-*AfAa6{iNO2I5YC??;_POMeF%WPgt^OBKS zFj>JJrmt>fujgLBd$B8+5@4yz8-_B64c<;4NGj9A?C^)2{dPu7(AV^$v+_-TbDkB6 tc`JprAfu7d_K!F7Bwh=Dw~G^;E{{y&?WcsL%5wC{LrQi}<-}#b{vT66!esye delta 3856 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 ZV;R}Vhj-NjQ5&TvV3IozjYTdu{|{$kXoLU& diff --git a/scripting/l4d2_ai_tweaks.sp b/scripting/l4d2_ai_tweaks.sp index 938f3de..f2e8bf6 100644 --- a/scripting/l4d2_ai_tweaks.sp +++ b/scripting/l4d2_ai_tweaks.sp @@ -4,6 +4,7 @@ //#define DEBUG #define ALLOW_HEALING_MIN_IDLE_TIME 180 +#define MIN_IGNORE_IDLE_TIME 5 #define PLUGIN_VERSION "1.0" #include @@ -11,10 +12,10 @@ #include //#include +int lastIdleTimeStart[MAXPLAYERS+1]; int idleTimeStart[MAXPLAYERS+1]; -public Plugin myinfo = -{ +public Plugin myinfo = { name = "L4D2 AI Tweaks", author = "jackzmc", description = "", @@ -27,16 +28,26 @@ public void OnPluginStart() { if(g_Game != Engine_Left4Dead2) { SetFailState("This plugin is for L4D2 only."); } - // HookEvent("player_bot_replace", Event_PlayerOutOfIdle ); + HookEvent("player_bot_replace", Event_PlayerOutOfIdle ); HookEvent("bot_player_replace", Event_PlayerToIdle); } -public Action Event_PlayerToIdle(Event event, const char[] name, bool dontBroadcast) { +void Event_PlayerToIdle(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); if(client > 0) { + lastIdleTimeStart[client] = idleTimeStart[client]; idleTimeStart[client] = GetTime(); } } +void Event_PlayerOutOfIdle(Event event, const char[] name, bool dontBroadcast) { + int client = GetClientOfUserId(event.GetInt("userid")); + if(client > 0) { + // After saferooms, idle players get resumed then immediately idle - so ignore that + if(GetTime() - idleTimeStart[client] < MIN_IGNORE_IDLE_TIME) { + idleTimeStart[client] = lastIdleTimeStart[client]; + } + } +} public void OnActionCreated( BehaviorAction action, int actor, const char[] name ) { /* Hooking friend healing action (when bot wants to heal someone) */