its impossible editing the outgoing packets with addtofullpack cuz that will just change the client-side predictions and stuff when a player tries to go through an other player it will start predicting the movement through that person a bit and it will clutch back in place ... thats what i expect from ur code to happen.
and secondly its impossible in general to have the engine do that work for u...
try making the admin when he touches a player the player becomes SOLID_NOT then when a normal player touches the SOLID_NOT player he will get pushed back somehow with velocity or origin thats ur choice... this is the only possible way to realize that.
EDIT: also the best way to hook it is FM_Touch (pre) with fakemeta or PM_Move with orpheu