Granada congelante
#26
primero que nada buen plugin bonito efecto
cuando le tiro la granada al que es de mi mismo equipo lo congela como hago para que no pase ?

Código PHP:
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>

/* ===========================================================================​======
*               [ Global ]
* ===========================================================================​====== */

#define PLAYER_ARRAY            33

#define IsPlayer(%0)            ( 1 <= %0 <= 32 )

#define GetPlayerBit(%0,%1)     ( IsPlayer(%1) && ( %0 & ( 1 << ( %1 & 31 ) ) ) )
#define SetPlayerBit(%0,%1)     ( IsPlayer(%1) && ( %0 |= ( 1 << ( %1 & 31 ) ) ) )
#define ClearPlayerBit(%0,%1)   ( IsPlayer(%1) && ( %0 &= ~( 1 << ( %1 & 31 ) ) ) )

#define HasRoundStarted()       ( g_flLastRoundEnd + 5.0 < get_gametime( ) )

#define IsEnemy(%0,%1)          ( get_user_team( %0 ) != get_user_team( %1 ) )
#define IsPlayerCrouching(%0)     ( entity_get_int( %0, EV_INT_flags ) & FL_DUCKING )

const FROSTNADE_ID 8878;

const 
TASK_REMOVE_FREEZE 4096;

new const 
g_szUnfreezeSound[ ]      = "frostnade/impalelaunch1.wav";
new const 
g_szFreezeSound[ ]        = "frostnade/impalehit.wav";
new const 
g_szFrostNovaSound[ ]     = "frostnade/frostnova.wav";

new const 
g_szNovaModel[ ]          = "models/frostnade/nova.mdl";

new const 
g_szInfoTarget[ ]         = "info_target";
new const 
g_szNovaClassname[ ]      = "Nova";

new 
g_iIsConnected;
new 
g_iIsAlive;
new 
g_iIsFrozen;

new 
g_iBlueflare;
new 
g_iBeam;
new 
g_iScreenFade;
new 
g_iMaxPlayers;

new 
Float:g_flPlayerVelocityPLAYER_ARRAY ][ ];

new 
Float:g_flLastRoundEnd;

/* ===========================================================================​======
*               [ Plugin forwards ]
* ===========================================================================​====== */

public plugin_precache( )
{
    
precache_soundg_szUnfreezeSound );
    
precache_soundg_szFreezeSound );
    
precache_soundg_szFrostNovaSound );
    
    
precache_modelg_szNovaModel );
    
    
g_iBeam         precache_model"sprites/frostnade/beam.spr" );
    
g_iBlueflare     precache_model"sprites/frostnade/blueflare.spr" );
}

public 
plugin_init( )
{
    
register_plugin"FrostNade""1.0""Manu" );
    
    
register_forwardFM_SetModel"OnSetModel_Pre"false );
    
    
RegisterHamHam_Think"grenade""OnGrenadeThink_Pre"false );
    
    
RegisterHamHam_Killed"player""OnPlayerKilled_Pre"false );
    
RegisterHamHam_Spawn"player""OnPlayerSpawn_Post"true );
    
    
register_logevent"OnRoundEnd"2"1=Round_End" );
    
    
g_iMaxPlayers get_maxplayers( );
    
g_iScreenFade get_user_msgid"ScreenFade" );
}

/* ===========================================================================​======
*               [ Events ]
* ===========================================================================​====== */

public OnRoundEnd( )
{
    for ( new 
iPlayer iPlayer <= g_iMaxPlayers iPlayer++ )
    {
        if ( !
GetPlayerBitg_iIsFrozeniPlayer ) )
        {
            continue;
        }
        
        
UnfreezePlayeriPlayer );
    }
    
    
g_flLastRoundEnd get_gametime( );
    
    
RemoveEntityByClassnameg_szNovaClassname );
}

/* ===========================================================================​======
*               [ Grenade section ]
* ===========================================================================​====== */

public OnSetModel_PreiEntszModel[ ] )
{
    if ( !
HasRoundStarted( ) || ( strlenszModel ) < ) )
    {
        return 
FMRES_IGNORED;
    }
    
    if ( ( 
szModel] != 'w' ) || ( szModel] != '_' ) || ( szModel] != 's' ) )
    {
        return 
FMRES_IGNORED;
    }
    
    if ( 
entity_get_floatiEntEV_FL_dmgtime ) == 0.0 )
    {
        return 
FMRES_IGNORED;
    }
    
    
entity_set_intiEntEV_INT_flTimeStepSoundFROSTNADE_ID );
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY );
    
write_byteTE_BEAMFOLLOW );
    
write_shortiEnt );
    
write_shortg_iBeam );
    
write_byte25 );
    
write_byte);
    
write_byte);
    
write_byte50 );
    
write_byte250 );
    
write_byte200 );
    
message_end( );
    
    
set_renderingiEntkRenderFxGlowShell050250kRenderNormal16 );
    
    return 
FMRES_IGNORED;
}

public 
OnGrenadeThink_PreiEnt )
{
    if ( !
HasRoundStarted( ) )
    {
        return 
HAM_IGNORED;
    }
    
    if ( 
entity_get_floatiEntEV_FL_dmgtime ) > get_gametime( ) )
    {
        return 
HAM_IGNORED;
    }
    
    if ( 
entity_get_intiEntEV_INT_flTimeStepSound ) != FROSTNADE_ID )
    {
        return 
HAM_IGNORED;
    }
    
    
FrostExplodeiEnt );
    
    return 
HAM_SUPERCEDE;
}

/* ===========================================================================​======
*               [ Player events ]
* ===========================================================================​====== */

public OnPlayerSpawn_PostiId )
{
    if ( !
is_user_aliveiId ) )
    {
        return 
HAM_IGNORED;
    }
    
    
SetPlayerBitg_iIsAliveiId );
    
    return 
HAM_IGNORED;
}

public 
OnPlayerKilled_PreiVictimiAttackeriShouldgib )
{
    
ClearPlayerBitg_iIsAliveiVictim );
    
    if ( !
GetPlayerBitg_iIsFrozeniVictim ) )
    {
        return 
HAM_IGNORED;
    }
    
    
UnfreezePlayeriVictim );
    
    
RemoveEntityByOwneriVictimg_szNovaClassname );
    
    
remove_taskiVictim TASK_REMOVE_FREEZE );
    
    return 
HAM_IGNORED;
}

public 
OnTaskRemoveFreezeiTask )
{
    new 
iId = ( iTask TASK_REMOVE_FREEZE );
    
    if ( 
GetPlayerBitg_iIsFrozeniId ) )
    {
        
UnfreezePlayeriId );
    }
}

/* ===========================================================================​======
*               [ Client connection ]
* ===========================================================================​====== */

public client_putinserveriId )
{
    
SetPlayerBitg_iIsConnectediId );
}

public 
client_disconnectiId )
{
    if ( 
task_existsiId TASK_REMOVE_FREEZE ) )
    {
        
remove_taskiId TASK_REMOVE_FREEZE );
    }
    
    
ClearPlayerBitg_iIsConnectediId );
    
ClearPlayerBitg_iIsAliveiId );
    
ClearPlayerBitg_iIsFrozeniId );
}

/* ===========================================================================​======
*               [ Frostnade modules ]
* ===========================================================================​====== */

FrostExplode( const iEnt )
{
    new 
iOwner entity_get_edictiEntEV_ENT_owner );

    if ( !
GetPlayerBitg_iIsConnectediOwner ) )
    {
        return;
    }
    
    new 
Float:flOrigin];
    
    
entity_get_vectoriEntEV_VEC_originflOrigin );

    
CreateFrostEffectflOrigin );

    
emit_soundiEntCHAN_BODYg_szFrostNovaSoundVOL_NORMATTN_NORM0PITCH_NORM );
    
    new 
iVictim;
    
    while ( ( 
iVictim find_ent_in_sphereiVictimflOrigin250.0 ) ) > )
    {
        if ( 
iVictim == iOwner )
        {
            continue;
        }
        
        if ( !
GetPlayerBitg_iIsAliveiVictim ) || GetPlayerBitg_iIsFrozeniVictim ) )
        {
            continue;
        }
        
        
FreezePlayeriVictim );
        
        
set_task4.0"OnTaskRemoveFreeze"iVictim TASK_REMOVE_FREEZE );
    }

    
remove_entityiEnt );
}

FreezePlayer( const iId )
{
    
SetPlayerBitg_iIsFrozeniId );
    
    
entity_get_vectoriIdEV_VEC_velocityg_flPlayerVelocityiId ] );
    
    
entity_set_vectoriIdEV_VEC_velocityFloat:{ 0.00.00.0 } );
    
entity_set_intiIdEV_INT_flagsentity_get_intiIdEV_INT_flags ) | FL_FROZEN );
    
    
emit_soundiIdCHAN_BODYg_szFreezeSoundVOL_NORMATTN_NORM0PITCH_NORM );
    
    
set_renderingiIdkRenderFxGlowShell060240kRenderNormal80 );
    
    
SendScreenFadeiId, { 160240 }, 410x000040 );
    
    
CreateNovaiId );
}

UnfreezePlayer( const iId )
{
    
ClearPlayerBitg_iIsFrozeniId );
    
    
entity_set_intiIdEV_INT_flagsentity_get_intiIdEV_INT_flags ) & ~FL_FROZEN );
    
entity_set_vectoriIdEV_VEC_velocityg_flPlayerVelocityiId ] );
    
    
emit_soundiIdCHAN_BODYg_szUnfreezeSoundVOL_NORMATTN_NORM0PITCH_NORM );
    
    
set_renderingiId );
}

CreateFrostEffect( const Float:flOrigin] )
{
    new 
iOrigin];
    
    
FVecIVecflOriginiOrigin );
    
    for ( new 
i++ )
    {
        
message_beginMSG_BROADCASTSVC_TEMPENTITY );
        
write_byteTE_BEAMCYLINDER );
        
write_coordiOrigin] );
        
write_coordiOrigin] );
        
write_coordiOrigin] );
        
write_coordiOrigin] );
        
write_coordiOrigin] );
        
write_coordiOrigin] + ( 111 ) );
        
write_shortg_iBeam );
        
write_byte);
        
write_byte);
        
write_byte);
        
write_byte100 );
        
write_byte);
        
write_byte);
        
write_byte50 );
        
write_byte250 );
        
write_byte200 );
        
write_byte);
        
message_end( );
    }
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY );
    
write_byteTE_SPRITETRAIL );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_shortg_iBlueflare );
    
write_byte100 );
    
write_byte);
    
write_byte);
    
write_byte50 );
    
write_byte50 );
    
message_end( );
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY );
    
write_byteTE_DLIGHT );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_coordiOrigin] );
    
write_byte48 );
    
write_byte);
    
write_byte50 );
    
write_byte255 );
    
write_byte10 );
    
write_byte50 );
    
message_end( );
}

CreateNova( const iId )
{
    new 
iEnt create_entityg_szInfoTarget ); 

    if ( !
is_valid_entiEnt ) )
    {
        return 
0;
    }
    
    new 
Float:flOrigin];

    
entity_set_stringiEntEV_SZ_classnameg_szNovaClassname );

    
entity_set_sizeiEntFloat:{ -4.0, -4.0, -4.0 }, Float:{ 4.04.04.0 } );
    
entity_set_modeliEntg_szNovaModel );

    
entity_set_intiEntEV_INT_solidSOLID_NOT );
    
entity_set_intiEntEV_INT_movetypeMOVETYPE_FLY );

    
entity_get_vectoriIdEV_VEC_originflOrigin );
    
    
IsPlayerCrouchingiId ) ?
        ( 
flOrigin] -= 18.0 ) :
        ( 
flOrigin] -= 36.0 ); 
    
    
entity_set_vectoriEntEV_VEC_originflOrigin );

    
entity_set_edictiEntEV_ENT_owneriId );
    
    
entity_set_intiEntEV_INT_flagsentity_get_intiEntEV_INT_flags ) | FL_KILLME );
    
    
entity_set_floatiEntEV_FL_takedamageDAMAGE_NO );
    
entity_set_floatiEntEV_FL_nextthinkget_gametime( ) + 4.0 );

    return 
1;
}

/* ===========================================================================​======
*               [ Common modules ]
* ===========================================================================​====== */

RemoveEntityByClassname( const szClassname[ ] )
{
    new 
iEnt = -1;
    
    while ( ( 
iEnt find_ent_by_classiEntszClassname ) ) > )
    {
        
remove_entityiEnt );
    }
}

RemoveEntityByOwner( const iOwner, const szClassname[ ] )
{
    new 
iEnt = -1;
    
    while ( ( 
iEnt find_ent_by_owneriEntszClassnameiOwner ) ) > )
    {
        
remove_entityiEnt );
    }
}
SendScreenFade( const iPlayer, const iRGB], const iDuration, const iHoldTime, const iFlag, const iAlpha )
{
    
message_beginMSG_ONE_UNRELIABLEg_iScreenFade_iPlayer );
    
write_short( ( 1<<12 ) * iDuration );
    
write_short( ( 1<<12 ) * iHoldTime );
    
write_shortiFlag );
    
write_byteiRGB] );
    
write_byteiRGB] );
    
write_byteiRGB] );
    
write_byteiAlpha );
    
message_end( );

Responder
#27
Código PHP:
FrostExplode( const iEnt )
{
    new 
iOwner entity_get_edictiEntEV_ENT_owner );

    if ( !
GetPlayerBitg_iIsConnectediOwner ) )
    {
        return;
    }
    
    new 
Float:flOrigin];
    
    
entity_get_vectoriEntEV_VEC_originflOrigin );

    
CreateFrostEffectflOrigin );

    
emit_soundiEntCHAN_BODYg_szFrostNovaSoundVOL_NORMATTN_NORM0PITCH_NORM );
    
    new 
iVictim;
    
    while ( ( 
iVictim find_ent_in_sphereiVictimflOrigin250.0 ) ) > )
    {
        if ( 
iVictim == iOwner )
        {
            continue;
        }
        
        if ( !
GetPlayerBitg_iIsAliveiVictim ) || GetPlayerBitg_iIsFrozeniVictim ) )
        {
            continue;
        }
        
        
FreezePlayeriVictim );
        
        
set_task4.0"OnTaskRemoveFreeze"iVictim TASK_REMOVE_FREEZE );
    }

    
remove_entityiEnt );


--- >

Código PHP:
FrostExplode( const iEnt )
{
    new 
iOwner entity_get_edictiEntEV_ENT_owner );

    if ( !
GetPlayerBitg_iIsConnectediOwner ) )
    {
        return;
    }
    
    new 
Float:flOrigin];
    
    
entity_get_vectoriEntEV_VEC_originflOrigin );

    
CreateFrostEffectflOrigin );

    
emit_soundiEntCHAN_BODYg_szFrostNovaSoundVOL_NORMATTN_NORM0PITCH_NORM );
    
    new 
iVictim;
    
    while ( ( 
iVictim find_ent_in_sphereiVictimflOrigin250.0 ) ) > )
    {
        if( !
GetPlayerBitg_iIsAliveiVictim ) || GetPlayerBitg_iIsFrozeniVictim ) )
            continue;

        if( 
get_user_teamiOwner ) == get_user_teamiVictim ) ) {

            if( 
iVictim != iOwner || !GetPlayerBitg_iIsAliveiOwner ) )
                continue;
        }
        
        
FreezePlayeriVictim );
        
        
set_task4.0"OnTaskRemoveFreeze"iVictim TASK_REMOVE_FREEZE );
    }

    
remove_entityiEnt );

Responder
#28
Gracias anduvo, encontre otro problema cuando explota la granada despues de que finalize la ronda no aparece el efecto solo el humo de la smoke
Responder
#29
(23/12/2019, 02:09 AM)Kiltr0 escribió: Gracias anduvo, encontre otro problema cuando explota la granada despues de que finalize la ronda no aparece el efecto solo el humo de la smoke

No es un problema, es un chequeo que hace el plugin...

Lo puedes quitar, pero te recomiendo dejarlo..


Código PHP:
if ( !HasRoundStarted( ) )
    {
        return 
FMRES_IGNORED;
    } 
Responder
#30
(23/12/2019, 03:22 AM)Chema escribió:
(23/12/2019, 02:09 AM)Kiltr0 escribió: Gracias anduvo, encontre otro problema cuando explota la granada despues de que finalize la ronda no aparece el efecto solo el humo de la smoke

No es un problema, es un chequeo que hace el plugin...

Lo puedes quitar, pero te recomiendo dejarlo..


Código PHP:
if ( !HasRoundStarted( ) )
    {
        return 
FMRES_IGNORED;
    } 

A okey y de quitarlo que peligros corro con el servidor ?

a y quitando esa condicion en
Código PHP:
public OnGrenadeThink_PreiEnt 
se soluciona ?
Responder
#31
Pueda que si pueda que no, tu hazlo y nos cuentas.

(26/11/2015, 12:34 AM)Treki escribió: Es posible que el servidor se cayera si pasaban ciertas cosas, así que arreglé todas las causas posibles de crash y retoqué un poco algunas partes de código. Ahora debería de funcionar perfectamente Sonrisa
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#32
Actualizado!

Ballers me había comentado de un problema que solucioné y le pedí que lo publique acá porque yo no podía. Ahora que puedo aprovecho a actualizar el thread con algunas cositas nuevas.

+ Agregué cuatro cvars:
  • fn_show_nova: permite activar o desactivar los hielos en los pies (por defecto: 1).
  • fn_freeze_self: permite activar o desactivar el poder congelarse uno mismo (por defecto: 1).
  • fn_freeze_teammates: permite activar o desactivar el poder congelar compañeros (por defecto: 0).
  • fn_freeze_duration: duración del congelamiento (por defecto: 4.0).
+ Cambié el nombre de los sonidos para que tengan mas sentido.
+ Y otro par de cambios en el código no muy relevantes.

Probé los cambios por arriba y funcionó bien. Si llegan a tener algún problema reportenlo en este thread.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes
.
Responder
#33
(26/05/2020, 11:51 PM)Manu escribió: Actualizado!

Ballers me había comentado de un problema que solucioné y le pedí que lo publique acá porque yo no podía. Ahora que puedo aprovecho a actualizar el thread con algunas cositas nuevas.

+ Agregué cuatro cvars:
  • fn_show_nova: permite activar o desactivar los hielos en los pies (por defecto: 1).
  • fn_freeze_self: permite activar o desactivar el poder congelarse uno mismo (por defecto: 1).
  • fn_freeze_teammates: permite activar o desactivar el poder congelar compañeros (por defecto: 0).
  • fn_freeze_duration: duración del congelamiento (por defecto: 4.0).
+ Cambié el nombre de los sonidos para que tengan mas sentido.
+ Y otro par de cambios en el código no muy relevantes.

Probé los cambios por arriba y funcionó bien. Si llegan a tener algún problema reportenlo en este thread.


Tengo una duda es posible que esta granada no remplaze a las granadas default como he, fb o smoke osea que sea modelo, sonido y efecto unico ?


lo otro es posible que esta granada el efecto congelante les funcione solo si el equipo portador en mi caso ct la tiene y al bando contrario tt le funcione la smoke ?
Responder
#34
(02/10/2020, 01:11 AM)pily escribió: Tengo una duda es posible que esta granada no remplaze a las granadas default como he, fb o smoke osea que sea modelo, sonido y efecto unico ?


lo otro es posible que esta granada el efecto congelante les funcione solo si el equipo portador en mi caso ct la tiene y al bando contrario tt  le funcione la smoke ?

Claro que se puede, solo tienes que hacer la respectiva modificación al código. Si lo que quieres es que lo hagan por ti, te recomiendo que lo pongas en la sección de pedidos para ver si alguien se toma la molestia de hacerlo.
Responder
#35
(02/10/2020, 01:38 AM)GabsHp escribió: Claro que se puede, solo tienes que hacer la respectiva modificación al código. Si lo que quieres es que lo hagan por ti, te recomiendo que lo pongas en la sección de pedidos para ver si alguien se toma la molestia de hacerlo.


emm... no se que pregunta me estas contestando xd, solo consultaba se que esta en es la sección correcta para andar pidiendo cosas xd
Responder
#36
Código:
[ENGINE] Invalid entity 98
L 10/03/2020 - 17:04:46: [AMXX] Displaying debug trace (plugin "frost.amxx", version "1.0")
L 10/03/2020 - 17:04:46: [AMXX] Run time error 10: native error (native "entity_get_int")
L 10/03/2020 - 17:04:46: [AMXX]    [0] frost.sma::OnGrenadeThink_Pre (line 206)
L 10/03/2020 - 17:05:31: [ENGINE] Invalid entity 97
L 10/03/2020 - 17:05:31: [AMXX] Displaying debug trace (plugin "frost.amxx", version "1.0")
L 10/03/2020 - 17:05:31: [AMXX] Run time error 10: native error (native "entity_get_int")
L 10/03/2020 - 17:05:31: [AMXX]    [0] frost.sma::OnGrenadeThink_Pre (line 206)
L 10/03/2020 - 17:07:27: [ENGINE] Invalid entity 111

encontré ese log
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#37
(04/10/2020, 02:43 PM)Hypnotize escribió:
Código:
[ENGINE] Invalid entity 98
L 10/03/2020 - 17:04:46: [AMXX] Displaying debug trace (plugin "frost.amxx", version "1.0")
L 10/03/2020 - 17:04:46: [AMXX] Run time error 10: native error (native "entity_get_int")
L 10/03/2020 - 17:04:46: [AMXX]    [0] frost.sma::OnGrenadeThink_Pre (line 206)
L 10/03/2020 - 17:05:31: [ENGINE] Invalid entity 97
L 10/03/2020 - 17:05:31: [AMXX] Displaying debug trace (plugin "frost.amxx", version "1.0")
L 10/03/2020 - 17:05:31: [AMXX] Run time error 10: native error (native "entity_get_int")
L 10/03/2020 - 17:05:31: [AMXX]    [0] frost.sma::OnGrenadeThink_Pre (line 206)
L 10/03/2020 - 17:07:27: [ENGINE] Invalid entity 111

encontré ese log

Verifica que la entidad sea válida.
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#38
Ya se xd, pero deje el log para que sea reparado y no les pase a otros users xdd
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)