From 5c136bda7bd92ad3d1106294881da819ff3b6674 Mon Sep 17 00:00:00 2001 From: Forgetest <33988868+jensewe@users.noreply.github.com> Date: Sat, 16 May 2026 11:18:18 +0800 Subject: [PATCH 1/4] Add plugin `l4d_fix_prop_los` --- .../sourcemod/gamedata/l4d_fix_prop_los.txt | 46 +++++++++++++++++++ .../sourcemod/scripting/l4d_fix_prop_los.sp | 29 ++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 addons/sourcemod/gamedata/l4d_fix_prop_los.txt create mode 100644 addons/sourcemod/scripting/l4d_fix_prop_los.sp diff --git a/addons/sourcemod/gamedata/l4d_fix_prop_los.txt b/addons/sourcemod/gamedata/l4d_fix_prop_los.txt new file mode 100644 index 000000000..af3843f45 --- /dev/null +++ b/addons/sourcemod/gamedata/l4d_fix_prop_los.txt @@ -0,0 +1,46 @@ +"Games" +{ + "#default" + { + "Functions" + { + "l4d_fix_prop_los::CBaseProp::CalculateBlockLOS" + { + "signature" "CBaseProp::CalculateBlockLOS" + "callconv" "thiscall" + "return" "void" + "this" "entity" + } + } + } + + "left4dead" + { + "Signatures" + { + "CBaseProp::CalculateBlockLOS" + { + "library" "server" + "linux" "@_ZN9CBaseProp17CalculateBlockLOSEv" + "windows" "\x83\xEC\x0C\x53\x55\x8B\xE9\x8B\x85\x2A\x2A\x2A\x2A\x8B" + // 83 EC 0C 53 55 8B E9 8B 85 ? ? ? ? 8B + } + } + } + + "left4dead2" + { + "Signatures" + { + "CBaseProp::CalculateBlockLOS" + { + "library" "server" + "linux" "@_ZN9CBaseProp17CalculateBlockLOSEv" + "windows" "\x55\x8B\xEC\x83\xEC\x10\x53\x8B\xD9\x8B\x83\x2A\x2A\x2A\x2A\x8B" + // 55 8B EC 83 EC 10 53 8B D9 8B 83 ? ? ? ? 8B + // Search string "ai_addon_thrownprojectile" + // Called inside + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/l4d_fix_prop_los.sp b/addons/sourcemod/scripting/l4d_fix_prop_los.sp new file mode 100644 index 000000000..8d647a8e0 --- /dev/null +++ b/addons/sourcemod/scripting/l4d_fix_prop_los.sp @@ -0,0 +1,29 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include +#include +#include <@Forgetest/gamedatawrapper> + +#define PLUGIN_VERSION "1.0" + +public Plugin myinfo = +{ + name = "[L4D & 2] Fix Prop LOS", + author = "Forgetest", + description = "Fix thin/small 'prop_*' entity not blocking LOS.", + version = PLUGIN_VERSION, + url = "https://github.com/Target5150/MoYu_Server_Stupid_Plugins", +} + +public void OnPluginStart() +{ + GameDataWrapper gd = new GameDataWrapper("l4d_fix_prop_los"); + delete gd.CreateDetourOrFail("l4d_fix_prop_los::CBaseProp::CalculateBlockLOS", DTR_CalculateBlockLOS); + delete gd; +} + +MRESReturn DTR_CalculateBlockLOS(int entity) +{ + return MRES_Supercede; +} \ No newline at end of file From e4c09d102daa9df15a30658605c56491502fd1b6 Mon Sep 17 00:00:00 2001 From: Forgetest <33988868+jensewe@users.noreply.github.com> Date: Sat, 16 May 2026 11:18:28 +0800 Subject: [PATCH 2/4] Add compiled `l4d_fix_prop_los` --- .../sourcemod/plugins/fixes/l4d_fix_prop_los.smx | Bin 0 -> 3636 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 addons/sourcemod/plugins/fixes/l4d_fix_prop_los.smx diff --git a/addons/sourcemod/plugins/fixes/l4d_fix_prop_los.smx b/addons/sourcemod/plugins/fixes/l4d_fix_prop_los.smx new file mode 100644 index 0000000000000000000000000000000000000000..b3324d22ccaf9e1fb553722c2d2c5adb4e14889e GIT binary patch literal 3636 zcmXw+X&_W@8;6fQ*(=KslKNY-uY-hS8B5uBS!S3pW0|o=D1(&9nnJQ=8)eTrH7QH> zEt(l4*(EdzQSYg@KK#ygo#))=zMtoOJC`n9wx*|}Q{e=FdT9VSegFVK4;^^<%XV%6 zUgC zE+7rTSf2)fiy*DQKOnK0GSTP9Q0hq z|G&QgZVcQqPzGiPbXkz~V8o;Vpcf*0x zP#zd$DEyBEfC$E5kpHj!V*zlCFWUR>^1sqQPv9tQz~6ODL?Ao_j`@4%vEWlwy?RK6N4X0)sU7;{23?L`!ZhfF|Ni{X^RO5rRgF@PH{H+PWNcJA3eoT1#_tiBy0BX zvc!DP7G?IZf;l&MOA5QugVGiY98A##H@6Q#-I@EQ_=p&o2-z^fMctm`gKRkBw7LU* z1U9sZ9esg00&)gF40_xbdo6S*&+ei5FqAX{oOTgPEN@s$`gqaCc*_! zx&PXs;^tBnNvt@nfxsomhAQrOZ|Ms;TwBImlM+dQIG{)p!#Q7VDTi!m{O&Wx9+o;M zr$Aa`mvG8noKzx3g7ZjrI3Yxf3GTz&K<3{=#o3z)ftJdoAe`3AKzRj{Bd(1Qm;=EV zXKiT_ca%s9L|y^>o8L!~BntbqSpV+n=GBs_w)lV;2*C+?wMY|Yw#8ioQwkaF^nJ^;K4#!Hx$pZWzE92Zqj;(qa5SkNYGHn?5C=^ zwsLA+UeqN|mQbhTvuiEi@UgVz7 zfqk(StG>eD(cD>BAY?35fv#dWj8qL>Gx!{dZImSchaGshLk!P|sSa3v+dC0QsS^Lj zw;#NHj<(SAYfdK2ET@01&9<)qOEi`HZxshjHe;Ljfa}8O|K0gQekKSFoH{PF(r|J94WHG-pHLS|M)YnvO zk4@>bdB+f$;q=Mpn*-cv=waDhKZ`IqgJn^rKSN^Cte@wlYLr>kr(Uf!UUyyZT&EV& zEw8MqdcBya2`Md>n+Hv+)kTSYT)8$uX|pw!Fx#|Qq!aG|HwX4TD#m5X6t7uewkSER zYScS=QmU;CG{fG}6Sfp(gN0~i8@IfonJb59r@zFc*^{|keflG*t}2!~O-3|`#4~x} z@QN!-dHfS5%Ei!yjwFjb;R%zkppN)P2Wy;$s-EG=-$pgupoHJTyi`zK(Lt+E`Bf>J z{jlI#f}i{m!P_5m{=`rx%97gLAj)2JU9#zBWc=~isY>@`n{)yMEwQSu{4*aQm zzWI8j^21@1p;eUb+cM)DHzu~=$oNe71ryCA^aD`^jxnpc_14T0-nR|$!AgZfCE6du zTxvZ;MqvhU@&(}?=|7@-Z>ikaB;X1ZxKF~?RYnD1_Gi?i}-t2$qCYk*&UtFD?`?=ulBv!f#7L8_*0 zp$QA>+GxOPz;HxU0=D3;N4}4r!_xH0$%v*zEJZ+N?UO_JepQ<`HET_1+uQ2m64}8c zUrFl8*C#5~*8dq|CSM(P5*Vy)_(4CRrj*{wUFKPJ;UOSBMV)9F_0+6Ypbof^%mPtjTx*5#b# zyJ+?y`99Y@8fV#t@xu8uLFu9Ls~+c6>-^}aa`_NuuZv$of&`iYtvm^+L)z#fy~4 zApK^}WxF8y>`YjLiqZ|!J zIE>KeLb(h->X}WqM!p-d-zeGrO7c%qr_v}%z4eI?(>DxfQdBAjxCG#L3eJUgqP
8QVI-HwI!cGM; z^JqlL*4T~JylLMRjnI`xz&x3s-$JM@wh<-VSS0pI<=`U~E)>su}LlvQ& z(Vi#c0&Kgf3T7f>vNfj-OWzFm%q?a>!{6tQmVHlo!P+Xs$fU8tv_a2*rCE-oEmkHcm|5mBSbQS`=mW{EM zJoK>Ljq7~%SktxkatUv!?T#K>w9Na)cvmSz%Cw83bxByg{tIZpI4m;mj;T1&?dj1E z2{AWrONJkxNX*Qs;M7FWpDnMc(-PFL(sJ-TD(}6PE!H$N-`#I_Mug7E#9{k$%`HLS z9#U*E>|!$RtrW3vtkuKj@*WHEkaQ&!w`QGCTAual)1v~x5r2t**&kpx7xbhFZX0k-t$%x zZ6?pKY{kQ{DNfb6YTvsHUW8ro%(Xj9^LuJXl5;sKgbn>dJ8KLA42H7_M&sFZ=4hJa z-p#yK-$m3~r`%`~>yqXhsP*d!Q~wmgvG+r8yJO2YrdsUFv{4R6 zcS(MUb9s~M@^@1g**)jvNtG;h89%HscDE8u9)5euC%x0mj&<*GfKhFiDVHggZM8VLc4Sd*bB*@$=%!FZ z9HX|mPy+#7dGAPP>G`9(P0&xe#hjnJ3_^h}n9w%i%Lp#erO7;TVYZw@gUYo$%(ZJU zLt`#DKH8yc#WJc}cGr%YLW{NRxo35aPzV$PKQq+~VbT?qD629H8_mjm<>{oN|hb2h`=IeX{_j+$8GMfkKrQz#Lu&cGkn ze0iOImb3ktON;^rvdc+zsy>Eh`bLjtNUceGjsnmuB6Jiw?I!&}&+^zXdUyKHx)weuq#Ix4+s3&p89A(jQE_BG~Xi z(Qf61sK8#v=l#yjUa@Kp`(-_7A#%h z%$7KeV&k5Oy(RvZv;lnTsRYltadH;aJe;QSZr!A{Dl*K`vcAYB^aamSo}gXi7nZnS zJG-S$VeXZzb$*JEVnN;KRyG=RE^kSyTc?~9cI5ln(=8-h9qFdC`hC++#TsCuQ5F&F z7Iz{mVZvv1YDp%hd8_368Hy|QAqrZJZm3oXkyMk!`*pff!uKUrCCTDk;w2?eGERh5 grY*zD#62^8EEU_Am@sQu=_?|Y0R6?LxU|^$KNx7F6#xJL literal 0 HcmV?d00001 From d5f96cff2292dc3dd57f0ffb6824f0dc0faf402f Mon Sep 17 00:00:00 2001 From: Forgetest <33988868+jensewe@users.noreply.github.com> Date: Sat, 16 May 2026 11:18:51 +0800 Subject: [PATCH 3/4] Add `l4d_fix_prop_los` to generalfixes --- cfg/generalfixes.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/cfg/generalfixes.cfg b/cfg/generalfixes.cfg index 93ae3f08a..332b3907a 100644 --- a/cfg/generalfixes.cfg +++ b/cfg/generalfixes.cfg @@ -71,6 +71,7 @@ sm plugins load fixes/l4d2_fix_rocket_pull.smx sm plugins load optional/l4d_return_thrown_items.smx sm plugins load fixes/l4d_prop_touching_rules.smx sm plugins load fixes/l4d2_fix_tank_rock_handoff.smx +sm plugins load fixes/l4d_fix_prop_los.smx // Anti-Cheat. sm plugins load optional/l4d2_block_autoaim.smx // Sort of a cheat..? From ad2d687aec6954ba82f013cdd82d6f0284330ba8 Mon Sep 17 00:00:00 2001 From: Forgetest <33988868+jensewe@users.noreply.github.com> Date: Sat, 16 May 2026 11:21:44 +0800 Subject: [PATCH 4/4] Fix missing definition --- .../sourcemod/scripting/l4d_fix_prop_los.sp | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/addons/sourcemod/scripting/l4d_fix_prop_los.sp b/addons/sourcemod/scripting/l4d_fix_prop_los.sp index 8d647a8e0..236f88aba 100644 --- a/addons/sourcemod/scripting/l4d_fix_prop_los.sp +++ b/addons/sourcemod/scripting/l4d_fix_prop_los.sp @@ -3,7 +3,6 @@ #include #include -#include <@Forgetest/gamedatawrapper> #define PLUGIN_VERSION "1.0" @@ -16,6 +15,27 @@ public Plugin myinfo = url = "https://github.com/Target5150/MoYu_Server_Stupid_Plugins", } +methodmap GameDataWrapper < GameData { + public GameDataWrapper(const char[] file) { + GameData gd = new GameData(file); + if (!gd) SetFailState("Missing gamedata \"%s\"", file); + return view_as(gd); + } + public DynamicDetour CreateDetourOrFail( + const char[] name, + DHookCallback preHook = INVALID_FUNCTION, + DHookCallback postHook = INVALID_FUNCTION) { + DynamicDetour hSetup = DynamicDetour.FromConf(this, name); + if (!hSetup) + SetFailState("Missing detour setup \"%s\"", name); + if (preHook != INVALID_FUNCTION && !hSetup.Enable(Hook_Pre, preHook)) + SetFailState("Failed to pre-detour \"%s\"", name); + if (postHook != INVALID_FUNCTION && !hSetup.Enable(Hook_Post, postHook)) + SetFailState("Failed to post-detour \"%s\"", name); + return hSetup; + } +} + public void OnPluginStart() { GameDataWrapper gd = new GameDataWrapper("l4d_fix_prop_los");