En el Half-Life Engine hay una parte del código donde se hacen los cálculos de física para que ocurra el movimiento del jugador (saltar, agacharse, moverse en el agua, noclip, etc).
Está sin explorar en el scripting por que esas funciones no son accesibles normalmente. Con Orpheu las podemos usar.
El punto de entrada para los cálculos es la función PM_Move, que tiene el siguiente encabezado:
PHP Code:
PM_Move ( struct playermove_s *ppmove, int server )
El primer argumento es una estructura (un grupo de datos que pertenecen a un jugador) que es guardada cuando PM_Move es llamado y luego usado por otras funciones PM.
Cuando se usa Orpheu para capturar las funciones PM la manera de acceder a la estructura ppmove varía desde PM_Move a otras funciones.
En PM_Move lo puedes usar directamente:
PHP Code:
public PM_Move(ppmove,server)
{
new Float:gravity = Float:OrpheuGetParamStructMember(1,"gravity")
}
En otras funciones tienes que obtener ppmove desde la memoria y usarlo luego.
Necesitamos declarar en un archivo para obtenerla de la memoria pero esa parte ya esta hecha por mí por lo que sólo tienes que preocuparte de usarla:
Ten en cuenta que esas funciones fueron pensadas para ser usadas en tus experimentos y por lo tanto no me tomé el tiempo para crear firmas (signatures), sino, en su lugar, proporcionar sus offsets. Esto quiere decir que debes usarlos sólo para probar.
En una última nota, las funciones PM ocurren en paralelo en el servidor y el cliente y por la predicción del cliente hay funciones que son inútiles para bloquear por que ocurrirán en el cliente de todas formas o por lo menos no actuarán exactamente como se espera.