Raised This Month: $51 Target: $400
 12% 

[ES] Orpheu: Funciones PM.


  
 
 
Thread Tools Display Modes
Author Message
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-02-2010 , 17:13   [ES] Orpheu: Funciones PM.
#1

Rant:
El thread original lo pueden encontrar acá. Esto es sólo la traducción.


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 *ppmoveint 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.

Puedes ver la estructura de los datos aquí:

http://metamod.org/sdk/dox/pm__defs_8h-source.html

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:
PHP Code:
OrpheuStruct:get_ppmove()
{        
    return 
OrpheuGetStructFromAddress(OrpheuStructPlayerMove,OrpheuMemoryGet("ppmove"))
}
   
public 
PM_Duck()
{
    new 
OrpheuStruct:ppmove get_ppmove()
        
    new 
gravity OrpheuGetStructMember(ppmove,"gravity")

Para obtener el id de un jugador debes usar el miembro de ppmove llamado "player_index":
PHP Code:
new id OrpheuGetStructMember(ppmove,"player_index") + 
Un ejemplo completo sobre como bloquear la habilidad de agacharse para jugadores no bot:
PHP Code:
#include <amxmodx>
#include <orpheu>
#include <orpheu_advanced>
#include <orpheu_memory>
    
public plugin_init()
{        
    
OrpheuRegisterHook(OrpheuGetFunction("PM_Duck"),"OnPM_Duck")
}

public 
OrpheuHookReturn:OnPM_Duck()
{
    new 
OrpheuStruct:ppmove get_ppmove()
    
    new 
id OrpheuGetStructMember(ppmove,"player_index") + 1
    
    
if(is_user_bot(id))
    {
        return 
OrpheuSupercede
    
}
    
    return 
OrpheuIgnored
}

OrpheuStruct:get_ppmove()
{        
    return 
OrpheuGetStructFromAddress(OrpheuStructPlayerMove,OrpheuMemoryGet("ppmove"))

Antes de utilizar estas funciones debes hacer algo de investigación acerca de cómo funcionan.

Descarga el HLSDK.

Y chequea multiplayer/pm_shared/pm_shared.cpp

Como archivo adjunto voy a proporcionar un script de ejemplo y archivos para utilizar estas funciones:
Code:
PM_Init
PM_Move
PM_PlayerMove
PM_Jump
PM_PlayStepSound
PM_CatagorizeTextureType
PM_FlyMove
PM_UpdateStepSound
PM_CheckVelocity
PM_WaterMove
PM_CheckWater
PM_SpectatorMove
PM_LadderMove
PM_Physics_Toss
PM_CheckWaterJump
PM_CheckFalling
PM_ReduceTimers
PM_CreateStuckTable
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.
Attached Files
File Type: zip pm_pack.zip (7.5 KB, 162 views)
__________________
"There is no knowledge, that is not power"

Last edited by fezh; 07-02-2010 at 20:39.
fezh is offline
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 07-02-2010 , 17:35   Re: [ES] Orpheu: Funciones PM.
#2

Andamos aburridos.
01101101 is offline
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-02-2010 , 17:35   Re: [ES] Orpheu: Funciones PM.
#3

Quote:
Originally Posted by 01101101 View Post
Andamos aburridos.
No más que vos.
__________________
"There is no knowledge, that is not power"
fezh is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:43.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode