The entity pl_server is created by the client using ent_create(). On the client, both it's INVISIBLE and PASSABLE flags are set, causing the ship to be "non-existant" to the client that created it. On the server, it is visible and not passable.
Using send_skill, I wanted to transfer skills 36 to 42 to the entity. I set the parameters in the client script and then called the functions as you see above. I know this code is running on the client, because another part of the same function is also responsible for the movement. The server runs a different function.
The player entity that is visible to the player is not the same that is visible on the server and all other clients. To be more exact, each client creates 2 identical entities - one using ent_createlocal() and one using ent_create(). That way, I can run all the movement code on the client (function of local entity), and only have to update the position and orientation on the server, and any other values I want to transfer. On the client that created the entity "pl_server", it is passable and invisible.
Code that creates both entities, if it helps understand what I mean:
pl = ent_createlocal("ss2.mdl",vector(0,0,0),ship);
pl_server = ent_create("ss2.mdl",vector(0,0,0),sv_processing_function);
pl_server.INVISIBLE = on;
pl_server.PASSABLE = on;