13/12/2020, 04:34 AM
(Última modificación: 13/12/2020, 04:41 AM por Cr3470r. Edited 4 times in total.)
Probablemente este será el último aporte que deje, ya que revisé mis discos y encontré esto ...
Esta es una idea que se hizo por el 2010, el objetivo de esto era básicamente lo siguiente:
1) Remover TODA la información de las entidades de los players a través de AddToFullPack (esto causa que TODO Cheat existente que use GetEntityByIndex o variantes FALLEN, prácticamente todos lo usan).
2) Desafortunadamente, esto causa que los players se hagan "invisibles" así que el objetivo ahora es recrear las entidades de todos los players manualmente.
3) Crear una entidad, poner el model, arma, efectos, animaciones, etc. de cada player a su respectiva entidad.
Ahora bien, esto jamás se logró porque supuestamente no hay forma de reproducir las animaciones en las entidades de los players (sequence & gaitsequence), digo supuestamente porque ya pasaron 10 años y no sé si hoy en día se podrá hacer, de poderse entonces resta hacer algunas otras cosas para seguir testeando y terminar con la solución final.
Se me ocurren ideas de reproducir las sequences & gaitsequences a traves de set_es de AddToFullPack, pero si alguien quiere hacer pruebas, adelante.
Nota: Es del 2010, el code es, como dije antes, CONCEPTUAL:
Esta es una idea que se hizo por el 2010, el objetivo de esto era básicamente lo siguiente:
1) Remover TODA la información de las entidades de los players a través de AddToFullPack (esto causa que TODO Cheat existente que use GetEntityByIndex o variantes FALLEN, prácticamente todos lo usan).
2) Desafortunadamente, esto causa que los players se hagan "invisibles" así que el objetivo ahora es recrear las entidades de todos los players manualmente.
3) Crear una entidad, poner el model, arma, efectos, animaciones, etc. de cada player a su respectiva entidad.
Ahora bien, esto jamás se logró porque supuestamente no hay forma de reproducir las animaciones en las entidades de los players (sequence & gaitsequence), digo supuestamente porque ya pasaron 10 años y no sé si hoy en día se podrá hacer, de poderse entonces resta hacer algunas otras cosas para seguir testeando y terminar con la solución final.
Se me ocurren ideas de reproducir las sequences & gaitsequences a traves de set_es de AddToFullPack, pero si alguien quiere hacer pruebas, adelante.
Nota: Es del 2010, el code es, como dije antes, CONCEPTUAL:
Código PHP:
#include < amxmodx >
#include < engine >
#include < fakemeta >
new gL_PlayerEntity[33], gL_PlayerWeapon[33]
public plugin_init ( )
{
register_plugin ( "Cheats Disabler", "1.0", "Rainnegan" )
register_forward ( FM_AddToFullPack, "FM_AddToFullPack_Pre", 0 )
for ( new id = 0 ; id <= get_maxplayers ( ) ; id++ )
{
gL_PlayerEntity[id] = create_entity ( "info_target" )
entity_set_int ( gL_PlayerEntity[id], EV_INT_movetype, MOVETYPE_STEP )
entity_set_int ( gL_PlayerEntity[id], EV_INT_solid, SOLID_NOT )
entity_set_model ( gL_PlayerEntity[id], "models/player/arctic/arctic.mdl" )
entity_set_float ( gL_PlayerEntity[id], EV_FL_animtime, get_gametime ( ) )
entity_set_float ( gL_PlayerEntity[id], EV_FL_framerate, 1.0 )
gL_PlayerWeapon[id] = create_entity ( "info_target" )
entity_set_int ( gL_PlayerWeapon[id], EV_INT_movetype, MOVETYPE_FOLLOW )
entity_set_int ( gL_PlayerWeapon[id], EV_INT_solid, SOLID_NOT )
entity_set_edict ( gL_PlayerWeapon[id], EV_ENT_aiment, gL_PlayerEntity[id] )
}
}
public plugin_precache ( )
{
precache_model ( "models/player/arctic/arctic.mdl" )
}
public FM_AddToFullPack_Pre ( es_handle, e, ent, host, hostflags, player, pset )
{
if ( !player || ( host == ent ) )
{
return FMRES_IGNORED
}
if ( is_user_connected ( ent ) && is_user_alive ( ent ) )
{
Client_Ent ( ent, true )
return FMRES_SUPERCEDE // Borrar player info
}
else
{
Client_Ent ( ent, false )
}
return FMRES_IGNORED
}
stock Client_Ent ( id, Alive )
{
if ( Alive )
{
// Mostrar
entity_set_int ( gL_PlayerEntity[id], EV_INT_effects, entity_get_int ( id, EV_INT_effects ) &~ EF_NODRAW )
// Posicion & Angulos
static Float:Origin[3], Float:Angles[3]
entity_get_vector ( id, EV_VEC_origin, Origin )
entity_get_vector ( id, EV_VEC_angles, Angles )
entity_set_vector ( gL_PlayerEntity[id], EV_VEC_origin, Origin )
entity_set_vector ( gL_PlayerEntity[id], EV_VEC_angles, Angles )
// Model del Player
static Model[33], SetModel[64]
engfunc ( EngFunc_InfoKeyValue, engfunc ( EngFunc_GetInfoKeyBuffer, id ), "model", Model, charsmax ( Model ) )
formatex ( SetModel, charsmax (SetModel ), "models/player/%s/%s.mdl", Model, Model )
engfunc ( EngFunc_SetModel, gL_PlayerEntity[id], SetModel )
// Model del Arma
static WeaponModel[64]
entity_get_string ( id, EV_SZ_weaponmodel, WeaponModel, charsmax ( WeaponModel ) )
entity_set_model ( gL_PlayerWeapon[id], WeaponModel )
// Animaciones (No soportado por AmxModX)
entity_set_int ( gL_PlayerEntity[id], EV_INT_sequence, entity_get_int ( id, EV_INT_sequence ) )
entity_set_int ( gL_PlayerEntity[id], EV_INT_gaitsequence, entity_get_int ( id, EV_INT_gaitsequence ) )
// Efectos
static Float:RenderColor[3]
entity_set_int ( gL_PlayerEntity[id], EV_INT_rendermode, entity_get_int ( id, EV_INT_rendermode ) )
entity_set_int ( gL_PlayerEntity[id], EV_INT_renderfx, entity_get_int ( id, EV_INT_renderfx ) )
entity_set_float ( gL_PlayerEntity[id], EV_FL_renderamt, entity_get_float ( id, EV_FL_renderamt ) )
entity_get_vector ( id, EV_VEC_rendercolor, RenderColor )
entity_set_vector ( gL_PlayerEntity[id], EV_VEC_rendercolor, RenderColor )
}
else // El player no está vivo, ocultar su entidad falsa
{
entity_set_int ( gL_PlayerEntity[id], EV_INT_effects, entity_get_int ( id, EV_INT_effects ) | EF_NODRAW )
}
}