Русское сообщество по скриптингу

Tesla: [FAKEMETA] Invalid entity  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Tesla: [FAKEMETA] Invalid entity

Сообщение Ternopil62000 » 27 май 2018, 23:55

Вот лог

Код: Выделить всё
L 05/27/2018 - 22:50:42: [FAKEMETA] Invalid entity
L 05/27/2018 - 22:50:42: [AMXX] Displaying debug trace (plugin "tesla.amxx")
L 05/27/2018 - 22:50:42: [AMXX] Run time error 10: native error (native "pev")
L 05/27/2018 - 22:50:42: [AMXX] [0] tesla.sma::bacon_TakeDamage (line 192)

Сам исходник

Код: Выделить всё
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < fakemeta_util >
#include < colorchat >
#include < cstrike >
#include < engine >
#include < hamsandwich >
#include <dhudmessage>
#include < xs >



#pragma tabsize 0  

#define PLUGIN_VERSION        "1.0.3"
#define BREAK_COMPUTER        6
#define MAX_PLAYERS        32 + 1

#define ACCESS          ADMIN_PASSWORD
#define ADMIN_ACCESS    ADMIN_LEVEL_D

#define is_valid_player(%1) ( 1 <= %1 <= gMaxPlayers )


new const gDamageSounds[ ][ ] = 
{
    "debris/metal1.wav",
    "debris/metal2.wav",
    "debris/metal3.wav"
};

new const gDispenserClassnameTesla[ ] = "Tesla";

new const gDispenserActive[ ] = "nova/dispenser.wav";
new const gDispenserMdlTesla [ ] = "models/nova/nova/tesla_coil2.mdl";
new const gMetalGibsMdl[ ] = "models/computergibs.mdl";
new const gHealingSprite[ ] = "sprites/nova/tok.spr"
new const gExploSprite[ ] = "sprites/dispexplo.spr";

new g_energi[33]
new gHealingBeam;
new gExploSpr;
new gMetalGibs;
new gMaxPlayers;

new gDispenserCost;
new gCvarDispenserHealth;
new g_iPlayerDispenser[33]
new Float:gDispenserOrigin[ MAX_PLAYERS ][ 3 ];
new gBeamcolor[ MAX_PLAYERS ][ 3 ];

new bool:bDispenserdd[ MAX_PLAYERS ];

native get_sentry_team(sentry)

new g_cvar_TEsla_destone

public plugin_init
()
{
    register_plugin( "Tesla", PLUGIN_VERSION, "NOVA" );
    
    register_event
( "TextMsg", "EVENT_TextMsg", "a", "2&#Game_C", "2&#Game_w", "2&#Game_will_restart_in" );
    register_logevent( "LOG_RoundEnd", 2, "1=Round_End" );
    
    RegisterHam
( Ham_TakeDamage, "func_breakable", "bacon_TakeDamage", 1 );
    RegisterHam( Ham_TakeDamage, "func_breakable", "bacon_TakeDamagePre", 0 );
    
    register_think
( gDispenserClassnameTesla, "DispenserThink2" );
    register_clcmd( "build_tesla", "CommandTeslaBuild" );
    register_forward ( FM_TraceLine, "fw_TraceLine_Post", 1 )
    
    gDispenserCost 
= register_cvar( "tesla_cost", "5000" );
    gCvarDispenserHealth = register_cvar( "tesla_health", "5000" );
    g_cvar_TEsla_destone = register_cvar( "tesla_destone", "5000" );
    
    
    gMaxPlayers 
= get_maxplayers( );
}

public plugin_cfg()
{
    
    new configsdir
[128]
    get_localinfo("amxx_configsdir", configsdir, 127)
    server_cmd("exec %s/nova/tesla.cfg", configsdir)
    server_exec()
}

public reclama()
{
    set_dhudmessage ( random_num(0,255), random_num(0,255), random_num(0,255), random_float ( 0.0, 1.0 ), random_float ( 0.0, 1.0 ), 0, 0.0, 4.0, 0.0, 0.0 )
    show_dhudmessage ( 0, "DM Катушка")
}

public client_connect( id )
{
    
    bDispenserdd
[ id ] = false;
}

public client_disconnect( id )
{
    BreakAllPlayerDispensers(id)
}

public detonate_disp(id)
{
    BreakAllPlayerDispensers(id)
    g_iPlayerDispenser[id] = 0
}

public plugin_precache( )
{
    
    gHealingBeam 
= precache_model( gHealingSprite );
    gExploSpr = precache_model( gExploSprite );
    gMetalGibs = precache_model( gMetalGibsMdl );
    
    
    precache_model
( gDispenserMdlTesla )
    precache_sound( gDispenserActive );
    
    new i
;
    for( i = 0; i < sizeof gDamageSounds; i++ )
    {
        precache_sound( gDamageSounds[ i ] );
    }
}


public fw_TraceLine_Post ( Float:v1[3], Float:v2[3], noMonsters, id )
{
    if ( !is_valid_player ( id ) || is_user_bot ( id ) || !is_user_alive ( id ) )
    return FMRES_IGNORED

    new iHitEnt 
= get_tr ( TR_pHit )

    if ( iHitEnt <= gMaxPlayers || !pev_valid ( iHitEnt ) )
    return FMRES_IGNORED

    new sClassname
[32]
    pev ( iHitEnt, pev_classname, sClassname, charsmax ( sClassname ) )

    if ( !equal ( sClassname, gDispenserClassnameTesla ) )
    return FMRES_IGNORED

    new iTeam 
= pev ( iHitEnt, pev_iuser4 )

    if ( _:cs_get_user_team ( id ) != iTeam )
    return FMRES_IGNORED

    new iHealth 
= pev ( iHitEnt, pev_health )

    if ( iHealth <= 0 )
    return FMRES_IGNORED

    new iOwner 
= pev ( iHitEnt, pev_iuser2 )

    if ( !is_user_connected ( iOwner ) )
    return FMRES_IGNORED

    new sName
[33]
    get_user_name ( iOwner, sName, charsmax ( sName ) )
    

    set_dhudmessage 
( 255, 255, 255, -1.0, -1.0, 0, 0.0, 0.6, 0.0, 0.0 )
    show_dhudmessage ( id, "Установил: %s^nЗдоровье: %d/%d^nЭнергия: %d", sName, iHealth, get_pcvar_num( gCvarDispenserHealth ), g_energi[iOwner] )    

    return FMRES_IGNORED
}

public bacon_TakeDamagePre( ent, idinflictor, idattacker, Float:damage, damagebits )
{
    new szClassname[ 32 ];
    pev( ent, pev_classname, szClassname, charsmax( szClassname ) );
    
    if
( equal( szClassname, gDispenserClassnameTesla ) )
    {
        new iOwner = pev( ent, pev_iuser2 );

        if(!is_user_connected(iOwner) || 1 > iOwner > 32 || !is_user_connected(idattacker) || 1 > idattacker > 32)
            return HAM_SUPERCEDE
        
        if
(cs_get_user_team(iOwner)==cs_get_user_team(idattacker) && idattacker != iOwner)
            return HAM_SUPERCEDE
    
}
    return HAM_IGNORED    
}

public bacon_TakeDamage( ent, idinflictor, idattacker, Float:damage, damagebits )
{
    new szClassname[ 32 ];
    pev( ent, pev_classname, szClassname, charsmax( szClassname ) );
    
    if
( equal( szClassname, gDispenserClassnameTesla ) )
    {
        new iOwner = pev( ent, pev_iuser2 );

        if(!is_user_connected(iOwner) || 1 > iOwner > 32 || !is_user_connected(idattacker) || 1 > idattacker > 32)
            return HAM_SUPERCEDE
        
        if
(cs_get_user_team(iOwner)==cs_get_user_team(idattacker) && idattacker != iOwner)
            return HAM_SUPERCEDE
        
        if
( pev( ent, pev_health ) <= 0.0 )
        {
            new szName[ 32 ];
            get_user_name( idattacker, szName, charsmax( szName ) );

            new Float:flOrigin[ 3 ];
            pev( ent, pev_origin, flOrigin );
                
            UTIL_BreakModel
( flOrigin, gMetalGibs, BREAK_COMPUTER ); 
            set_pev
( ent, pev_flags, pev( ent, pev_flags ) | FL_KILLME ); 

            if
( idattacker == iOwner )
            {
                ColorChat( iOwner,BLUE, "^3[^4Тесла^3] Вы уничтожили собственную ^4Катушку!")
            }else{
                ColorChat( iOwner,BLUE, "^3[^4Тесла^3] ^4%s ^3уничтожил вашу ^4Катушку!", szName)
                cs_set_user_money(idattacker, cs_get_user_money(idattacker) + get_pcvar_num(g_cvar_TEsla_destone))
            }

            client_cmd( iOwner, "speak ^"vox/bizwarn computer destroyed^"" );
            bDispenserdd[ iOwner ] = false;
        }
        
        emit_sound
( ent, CHAN_STATIC, gDamageSounds[ random_num( 0, charsmax( gDamageSounds ) ) ], VOL_NORM, ATTN_NORM, 0, PITCH_NORM );    
    
}
    return HAM_IGNORED
}

public CommandTeslaBuild( id )
{
    
    if
( !is_user_alive( id ))
    {
        return PLUGIN_CONTINUE;
    }
    
    if
( !( pev( id, pev_flags ) & FL_ONGROUND ) )
    {
        ColorChat ( id,BLUE, "^3[^4Тесла^3] Вы можете построить Катушку только на земле^4!")
        return PLUGIN_HANDLED;
    }

    if( bDispenserdd[ id ] == true )
    {
        ColorChat ( id,BLUE, "^3[^4Тесла^3] Вы уже построили ^4Катушку!")
        return PLUGIN_HANDLED;
    }

    new iMoney = cs_get_user_money( id );
    new iCost = get_pcvar_num( gDispenserCost );
    
    if
( iMoney < iCost )
    {
        ColorChat ( id,BLUE, "^3[^4Тесла^3] Нехватает средств для постройки Катушки... ^4Нужно (%d$)", iCost )
        return PLUGIN_HANDLED;
    }

    new Float:playerOrigin[3]
    entity_get_vector(id, EV_VEC_origin, playerOrigin)
    
      new Float
:vNewOrigin[3]
    new Float:vTraceDirection[3]
    new Float:vTraceEnd[3]
    new Float:vTraceResult[3]
    velocity_by_aim(id, 64, vTraceDirection) // get a velocity in the directino player is aiming, with a multiplier of 64...
    vTraceEnd[0] = vTraceDirection[0] + playerOrigin[0] // find the new max end position
    vTraceEnd[1] = vTraceDirection[1] + playerOrigin[1]
    vTraceEnd[2] = vTraceDirection[2] + playerOrigin[2]
    trace_line(id, playerOrigin, vTraceEnd, vTraceResult) // trace, something can be in the way, use hitpoint from vTraceResult as new origin, if nothing's in the way it should be same as vTraceEnd
    vNewOrigin[0] = vTraceResult[0]// just copy the new result position to new origin
    vNewOrigin[1] = vTraceResult[1]// just copy the new result position to new origin
    vNewOrigin[2] = playerOrigin[2] // always build in the same height as player.
    
    if 
(CreateDispanser(vNewOrigin, id))
    {
        cs_set_user_money(id, cs_get_user_money(id) - iCost)
        g_energi[id] = 10000000000000000
    
}
    else
    
{
        ColorChat ( id,BLUE, "^3[^4Тесла^3] Здесь не получается установить ^4Катушку!")
    }
    
    return PLUGIN_HANDLED
;
    
}


stock bool:CreateDispanser(Float:origin[3], creator) 
{
    if (point_contents(origin) != CONTENTS_EMPTY || TraceCheckCollides(origin, 35.0)) 
    
{
        return false
    
}
    
    origin
[2] = origin[2] + 60
    
    new Float
:hitPoint[3], Float:originDown[3]
    originDown = origin
    originDown
[2] = -5000.0 // dunno the lowest possible height...
    trace_line(0, origin, originDown, hitPoint)
    new Float:baDistanceFromGround = vector_distance(origin, hitPoint)
    
    new Float
:difference = 80.0 - baDistanceFromGround
    if 
(difference < -* 80.0 || difference > 80.0) return false
    
    new iEntity 
= create_entity( "func_breakable" );
    
    
    
    if
( !pev_valid( iEntity ) )
         return false
    
    set_pev
( iEntity, pev_classname, gDispenserClassnameTesla );
    engfunc( EngFunc_SetModel, iEntity, gDispenserMdlTesla );
    engfunc( EngFunc_SetSize, iEntity, Float:{ -20.0, -10.0, -50.0 }, Float:{ 20.0, 10.0, -5.0 } );
    set_pev( iEntity, pev_origin, origin );
    set_pev( iEntity, pev_solid, SOLID_SLIDEBOX );
    set_pev( iEntity, pev_movetype, MOVETYPE_FLY );
    set_pev( iEntity, pev_health, float(get_pcvar_num( gCvarDispenserHealth )) );
    set_pev( iEntity, pev_takedamage, 2.0 );
    set_pev( iEntity, pev_iuser2, creator );
    set_pev( iEntity, pev_iuser4, get_user_team(creator) );
    set_pev( iEntity, pev_nextthink, get_gametime( ) + 0.1 );
    engfunc( EngFunc_DropToFloor, iEntity );    
    
    gDispenserOrigin
[ creator ][ 0 ] = origin[ 0 ];
    gDispenserOrigin[ creator ][ 1 ] = origin[ 1 ];
    gDispenserOrigin[ creator ][ 2 ] = origin[ 2 ];
    
    bDispenserdd
[ creator ] = true;
    
    switch
( cs_get_user_team( creator ) )
    {
        case CS_TEAM_T:
        {
            gBeamcolor[ creator ][ 0 ] = 255, gBeamcolor[ creator ][ 1 ] = 0, gBeamcolor[ creator ][ 2 ] = 0;             
            
/* set_rendering( iEntity, kRenderFxGlowShell, gBeamcolor[ creator ][ 0 ], gBeamcolor[ creator ][ 1 ], gBeamcolor[ creator ][ 2 ], kRenderNormal, 3 ); */
        }
        
        case CS_TEAM_CT
:
        {
            gBeamcolor[ creator ][ 0 ] = 255, gBeamcolor[ creator ][ 1 ] = 0, gBeamcolor[ creator ][ 2 ] = 0;     
            
/* set_rendering( iEntity, kRenderFxGlowShell, gBeamcolor[ creator ][ 0 ], gBeamcolor[ creator ][ 1 ], gBeamcolor[ creator ][ 2 ], kRenderNormal, 3 ); */
        }
    } 
    
    emit_sound
( iEntity, CHAN_STATIC, gDispenserActive, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
    
    return true
;
}

public DispenserThink2( iEnt )
{
    if( pev_valid( iEnt ) )
    {
        new iOwner = pev( iEnt, pev_iuser2 ), ent
        
        if
(g_energi[iOwner] <= 0)
        {
            return PLUGIN_CONTINUE;
        }
    
    
    
        while
((ent = find_ent_by_class(ent,"sentry")) != 0)
        {
            if(get_sentry_team(ent) == fm_cs_get_user_team( iOwner ))
            {
                new Float:entorigin[3]
                pev( ent, pev_origin, entorigin )
            
                if
(UTIL_IsVisible( ent, iEnt ) && get_distance_f( gDispenserOrigin[ iOwner ], entorigin )  <=  900.0 )
                {
                    if(pev(ent, pev_health) < 8000.0)
                    {
                        set_pev(ent, pev_health, pev(ent, pev_health) + 50.0)
                        g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        new Float
:flAngles[ 3 ];
                        pev( iEnt, pev_angles, flAngles );
                        flAngles[ 1 ] += 1.0;
                        set_pev( iEnt, pev_angles, flAngles );
                    
                        sprite_tokkk
(iEnt, ent)
                    
                    
}
                }
            }
        }
        
        while
((ent = find_ent_by_class(ent,"NiceDispenserHpArm")) != 0)
        {
            new owner_disp = pev( ent, pev_iuser2 )
            
            if
(fm_cs_get_user_team( iOwner ) == fm_cs_get_user_team(owner_disp))
            {
                new Float:entorigin[3]
                pev( ent, pev_origin, entorigin )
                
                if
(UTIL_IsVisible( ent, iEnt ) && get_distance_f( gDispenserOrigin[ iOwner ], entorigin )  <=  900.0 )
                {
                    if(pev(ent, pev_health) < 2000.0)
                    {
                        set_pev(ent, pev_health, pev(ent, pev_health) + 50.0)
                        g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        new Float
:flAngles[ 3 ];
                        pev( iEnt, pev_angles, flAngles );
                        flAngles[ 1 ] += 1.0;
                        set_pev( iEnt, pev_angles, flAngles );
                    
                        sprite_tokkk
(iEnt, ent)
                    }
                }
            }
        }
        
        while
((ent = find_ent_by_class(ent,"Laser_Fence")) != 0)
        {        
            if
(fm_cs_get_user_team(iOwner) == pev(ent, pev_iuser1))
            {
                new Float:entorigin[3]
                pev( ent, pev_origin, entorigin )
                
                if
(UTIL_IsVisible( ent, iEnt ) && get_distance_f( gDispenserOrigin[ iOwner ], entorigin )  <=  900.0 )
                {
                    if(pev(ent, pev_health) < 1000.0)
                    {
                        set_pev(ent, pev_health, pev(ent, pev_health) + 50.0)
                        g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        new Float
:flAngles[ 3 ];
                        pev( iEnt, pev_angles, flAngles );
                        flAngles[ 1 ] += 1.0;
                        set_pev( iEnt, pev_angles, flAngles );
                    
                        sprite_tokkk
(iEnt, ent)
                    }
                }
            }
        }
        
        while
((ent = find_ent_by_class(ent,"NiceDispenserMoney")) != 0)
        {
            new owner_disp = pev( ent, pev_iuser2 )
            
            if
(fm_cs_get_user_team(iOwner) == fm_cs_get_user_team(owner_disp))
            {
                new Float:entorigin[3]
                pev( ent, pev_origin, entorigin )
                
                if
(UTIL_IsVisible( ent, iEnt ) && get_distance_f( gDispenserOrigin[ iOwner ], entorigin )  <=  900.0 )
                {
                    if(pev(ent, pev_health) < 1000.0)
                    {
                        set_pev(ent, pev_health, pev(ent, pev_health) + 50.0)
                        g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        new Float
:flAngles[ 3 ];
                        pev( iEnt, pev_angles, flAngles );
                        flAngles[ 1 ] += 1.0;
                        set_pev( iEnt, pev_angles, flAngles );
                    
                        sprite_tokkk
(iEnt, ent)
                    }
                }
            }
        }
        
        if
(get_user_team(iOwner) != pev( iEnt, pev_iuser4))
        {
            BreakAllPlayerDispensers(iOwner);
            return PLUGIN_CONTINUE;
        }
        
        if
(get_user_team(iOwner) != pev( iEnt, pev_iuser4))
        {
            BreakAllPlayerDispensers(iOwner);
            g_iPlayerDispenser[iOwner] = 0
            return PLUGIN_CONTINUE
;
        }
    
        set_pev
( iEnt, pev_nextthink, get_gametime( ) + 0.1 );
    }
    return PLUGIN_CONTINUE;
}


public EVENT_TextMsg( )
{
    UTIL_DestroyDispensers( );
}

public LOG_RoundEnd( )
{
    UTIL_DestroyDispensers( );
}


/*         
    ~~~~~~~~~~~~~~~~~~~~~~~
        Stocks
    ~~~~~~~~~~~~~~~~~~~~~~~
*/


stock UTIL_DestroyDispensers( )
{
    new iEnt = FM_NULLENT;
    
    while
( ( iEnt = find_ent_by_class( iEnt, gDispenserClassnameTesla ) ) )
    {
        new iOwner = pev( iEnt, pev_iuser2 );
        
        bDispenserdd
[ iOwner ] = false;
        set_pev( iEnt, pev_flags, pev( iEnt, pev_flags ) | FL_KILLME );
    }
}



stock UTIL_BreakModel( Float:flOrigin[ 3 ], model, flags )
{
    engfunc( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 );
    write_byte( TE_BREAKMODEL ); 
    engfunc
( EngFunc_WriteCoord, flOrigin[ 0 ] );
    engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] );
    engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] );
    write_coord( 16 );
    write_coord( 16 );
    write_coord( 16 );
    write_coord( random_num( -20, 20 ) );
    write_coord( random_num( -20, 20 ) );
    write_coord( 10 );
    write_byte( 10 );
    write_short( model );
    write_byte( 10 );
    write_byte( 9 );
    write_byte( flags );
    message_end( );
    
    engfunc
( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 );
    write_byte(TE_SPRITE)
    engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] );
    engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] );
    engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] );
    write_short( gExploSpr )
    write_byte( 15 )
    write_byte( 50 )
    message_end()
}
  

stock UTIL_BeamEnts
( Float:flStart[ 3 ], Float:flEnd[ 3 ], r, g, b, sprite,  width ,  ampl )
{
    engfunc( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flStart );
    write_byte( TE_BEAMPOINTS );
    engfunc( EngFunc_WriteCoord, flStart[ 0 ] );
    engfunc( EngFunc_WriteCoord, flStart[ 1 ] );
    engfunc( EngFunc_WriteCoord, flStart[ 2 ] );
    engfunc( EngFunc_WriteCoord, flEnd[ 0 ] );
    engfunc( EngFunc_WriteCoord, flEnd[ 1 ] );
    engfunc( EngFunc_WriteCoord, flEnd[ 2 ] );
    write_short( sprite );
    write_byte( 5 );
    write_byte( 2 );
    write_byte( 1 );
    write_byte( width );
    write_byte( ampl );
    write_byte( r );
    write_byte( g );
    write_byte( b );
    write_byte( 130 );
    write_byte( 30 ); 
    message_end
( );
}
 
stock bool
:UTIL_IsVisible( index, entity, ignoremonsters = 0 )
{
    new Float:flStart[ 3 ], Float:flDest[ 3 ];
    pev( index, pev_origin, flStart );
    pev( index, pev_view_ofs, flDest );

    xs_vec_add( flStart, flDest, flStart );
    
    pev
( entity, pev_origin, flDest );
    engfunc( EngFunc_TraceLine, flStart, flDest, ignoremonsters, index, 0 );
    
    new Float
:flFraction;
    get_tr2( 0, TR_flFraction, flFraction );
    
    if
( flFraction == 1.0 || get_tr2( 0, TR_pHit) == entity )
    {
        return true;
    }
    
    return false
;
}


public BreakAllPlayerDispensers(id)
{
    static ent = -1
    
    while 
((ent = find_ent_by_class(ent,  gDispenserClassnameTesla)))  
    
{  
        if
(pev( ent, pev_iuser2 ) != id)  
            continue  
        
        if
(pev_valid(ent)) 
        
{
            new Float:flOrigin[ 3 ];
            pev( ent, pev_origin, flOrigin );
            
            UTIL_BreakModel
( flOrigin, gMetalGibs, BREAK_COMPUTER ); 
            set_pev
( ent, pev_flags, pev( ent, pev_flags ) | FL_KILLME ); 
        
}
    }  
    
    bDispenserdd
[ id ] = false;
}
 


bool
:TraceCheckCollides(Float:origin[3], const Float:BOUNDS) {
    new Float:traceEnds[8][3], Float:traceHit[3], hitEnt
    traceEnds
[0][0] = origin[0] - BOUNDS
    traceEnds
[0][1] = origin[1] - BOUNDS
    traceEnds
[0][2] = origin[2] - BOUNDS
    traceEnds
[1][0] = origin[0] - BOUNDS
    traceEnds
[1][1] = origin[1] - BOUNDS
    traceEnds
[1][2] = origin[2] + BOUNDS
    traceEnds
[2][0] = origin[0] + BOUNDS
    traceEnds
[2][1] = origin[1] - BOUNDS
    traceEnds
[2][2] = origin[2] + BOUNDS
    traceEnds
[3][0] = origin[0] + BOUNDS
    traceEnds
[3][1] = origin[1] - BOUNDS
    traceEnds
[3][2] = origin[2] - BOUNDS
    traceEnds
[4][0] = origin[0] - BOUNDS
    traceEnds
[4][1] = origin[1] + BOUNDS
    traceEnds
[4][2] = origin[2] - BOUNDS
    traceEnds
[5][0] = origin[0] - BOUNDS
    traceEnds
[5][1] = origin[1] + BOUNDS
    traceEnds
[5][2] = origin[2] + BOUNDS
    traceEnds
[6][0] = origin[0] + BOUNDS
    traceEnds
[6][1] = origin[1] + BOUNDS
    traceEnds
[6][2] = origin[2] + BOUNDS
    traceEnds
[7][0] = origin[0] + BOUNDS
    traceEnds
[7][1] = origin[1] + BOUNDS
    traceEnds
[7][2] = origin[2] - BOUNDS

    for 
(new i = 0; i < 8; i++) {
        if (point_contents(traceEnds[i]) != CONTENTS_EMPTY)
            return true

        hitEnt 
= trace_line(0, origin, traceEnds[i], traceHit)
        if (hitEnt != 0)
            return true
        for 
(new j = 0; j < 3; j++) {
            if (traceEnds[i][j] != traceHit[j])
                return true
        
}
    }

    return false
}


public sprite_tokkk(iEnt, ent)
{
    new Float:entorigin[3]
    pev( iEnt, pev_origin, entorigin )
    

    message_begin
(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(TE_BEAMENTS)
    write_short(ent)
    write_short(iEnt)
    write_short(gHealingBeam) 
    write_byte
(1) // 
    write_byte(10) // 
    write_byte(1) // 
    write_byte(30) // 
    write_byte(600) // 
    write_byte(random_num(50, 255)) /
    write_byte(random_num(50, 255)) 
    write_byte
(50) // Blue
    write_byte(255) // brightness
    write_byte(30) // scroll speed in 0.1's
    message_end()
/*
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(TE_BEAMENTPOINT);
    write_short(ent);             //Индекс entity
    write_coord(entorigin[0]);          //Конечная точка x
    write_coord(entorigin[1]);         //Конечная точка y
    write_coord(entorigin[2]);          //Конечная точка z
    write_short(gHealingBeam);         //Индекс спрайта 
    write_byte(0)                 //Стартовый кадр
    write_byte(10);                 //Скорость анимации
    write_byte(1);                //Врмея существования
    write_byte(30);    //Толщина луча
    write_byte(600);  //Искажение 
    write_byte(random_num(50, 255));    //Цвет красный
    write_byte(random_num(50, 255));        //Цвеи зеленый
    write_byte(50);        //Цвет синий
    write_byte(255);            //Яркость
    write_byte(30);                //...
    message_end();
    */
}

stock fm_cs_get_user_team(id)
{
    if (pev_valid(id) != 2) return 0
    
    return get_pdata_int
(id, 114, 5)

Помогите пожалуйста!
Последний раз редактировалось Ternopil62000 28 май 2018, 09:34, всего редактировалось 1 раз.
«А сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все. Мало кто может это делать»

Виталий Кличко :-D
Аватара пользователя
Ternopil62000
 
Сообщения: 36
Зарегистрирован: 05 апр 2018, 23:25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца

Re: Плагин Тесла  [Решено]

Сообщение DeMNiX » 28 май 2018, 03:08

Код: Выделить всё
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < fakemeta_util >
#include < colorchat >
#include < cstrike >
#include < engine >
#include < hamsandwich >
#include <dhudmessage>
#include < xs >



#pragma tabsize 0  

#define PLUGIN_VERSION        "1.0.3"
#define BREAK_COMPUTER        6
#define MAX_PLAYERS        32 + 1

#define ACCESS          ADMIN_PASSWORD
#define ADMIN_ACCESS    ADMIN_LEVEL_D

#define is_valid_player(%1) ( 1 <= %1 <= gMaxPlayers )


new const gDamageSounds[ ][ ] = 
{
    
"debris/metal1.wav",
    
"debris/metal2.wav",
    
"debris/metal3.wav"
};

new const 
gDispenserClassnameTesla[ ] = "Tesla";

new const 
gDispenserActive[ ] = "nova/dispenser.wav";
new const 
gDispenserMdlTesla [ ] = "models/nova/nova/tesla_coil2.mdl";
new const 
gMetalGibsMdl[ ] = "models/computergibs.mdl";
new const 
gHealingSprite[ ] = "sprites/nova/tok.spr"
new const gExploSprite[ ] = "sprites/dispexplo.spr";

new 
g_energi[33]
new 
gHealingBeam;
new 
gExploSpr;
new 
gMetalGibs;
new 
gMaxPlayers;

new 
gDispenserCost;
new 
gCvarDispenserHealth;
new 
g_iPlayerDispenser[33]
new 
Float:gDispenserOriginMAX_PLAYERS ][ ];
new 
gBeamcolorMAX_PLAYERS ][ ];

new 
bool:bDispenserddMAX_PLAYERS ];

native get_sentry_team(sentry)

new 
g_cvar_TEsla_destone

public plugin_init()
{
    
register_plugin"Tesla"PLUGIN_VERSION"NOVA" );
    
    
register_event"TextMsg""EVENT_TextMsg""a""2&#Game_C""2&#Game_w""2&#Game_will_restart_in" );
    
register_logevent"LOG_RoundEnd"2"1=Round_End" );
    
    
RegisterHamHam_TakeDamage"func_breakable""bacon_TakeDamage");
    
RegisterHamHam_TakeDamage"func_breakable""bacon_TakeDamagePre");
    
    
register_thinkgDispenserClassnameTesla"DispenserThink2" );
    
register_clcmd"build_tesla""CommandTeslaBuild" );
    
register_forward FM_TraceLine"fw_TraceLine_Post")
    
    
gDispenserCost register_cvar"tesla_cost""5000" );
    
gCvarDispenserHealth register_cvar"tesla_health""5000" );
    
g_cvar_TEsla_destone register_cvar"tesla_destone""5000" );
    
    
    
gMaxPlayers get_maxplayers( );
}

public 
plugin_cfg()
{    
    new 
configsdir[128]
    
get_localinfo("amxx_configsdir"configsdir127)
    
server_cmd("exec %s/nova/tesla.cfg"configsdir)
    
server_exec()
}

public 
reclama()
{
    
set_dhudmessage random_num(0,255), random_num(0,255), random_num(0,255), random_float 0.01.0 ), random_float 0.01.0 ), 00.04.00.00.0 )
    
show_dhudmessage 0"DM Катушка")
}

public 
client_connectid )
{
    
    
bDispenserddid ] = false;
}

public 
client_disconnectid )
{
    
BreakAllPlayerDispensers(id)
}

public 
detonate_disp(id)
{
    
BreakAllPlayerDispensers(id)
    
g_iPlayerDispenser[id] = 0
}

public 
plugin_precache( )
{    
    
gHealingBeam precache_modelgHealingSprite );
    
gExploSpr precache_modelgExploSprite );
    
gMetalGibs precache_modelgMetalGibsMdl );
    
    
    
precache_modelgDispenserMdlTesla )
    
precache_soundgDispenserActive );
    
    new 
i;
    for( 
0sizeof gDamageSoundsi++ )
    {
        
precache_soundgDamageSounds] );
    }
}


public 
fw_TraceLine_Post Float:v1[3], Float:v2[3], noMonstersid )
{
    if ( !
is_valid_player id ) || is_user_bot id ) || !is_user_alive id ) )
    return 
FMRES_IGNORED

    
new iHitEnt get_tr TR_pHit )

    if ( 
iHitEnt <= gMaxPlayers || !pev_valid iHitEnt ) )
    return 
FMRES_IGNORED

    
new sClassname[32]
    
pev iHitEntpev_classnamesClassnamecharsmax sClassname ) )

    if ( !
equal sClassnamegDispenserClassnameTesla ) )
    return 
FMRES_IGNORED

    
new iTeam pev iHitEntpev_iuser4 )

    if ( 
_:cs_get_user_team id ) != iTeam )
    return 
FMRES_IGNORED

    
new iHealth pev iHitEntpev_health )

    if ( 
iHealth <= )
    return 
FMRES_IGNORED

    
new iOwner pev iHitEntpev_iuser2 )

    if ( !
is_user_connected iOwner ) )
    return 
FMRES_IGNORED

    
new sName[33]
    
get_user_name iOwnersNamecharsmax sName ) )
    

    
set_dhudmessage 255255255, -1.0, -1.000.00.60.00.0 )
    
show_dhudmessage id"Установил: %s^nЗдоровье: %d/%d^nЭнергия: %d"sNameiHealthget_pcvar_numgCvarDispenserHealth ), g_energi[iOwner] )    

    return 
FMRES_IGNORED
}

public 
bacon_TakeDamagePreentidinflictoridattackerFloat:damagedamagebits )
{
    new 
szClassname32 ];
    
peventpev_classnameszClassnamecharsmaxszClassname ) );
    
    if( 
equalszClassnamegDispenserClassnameTesla ) )
    {
        new 
iOwner peventpev_iuser2 );

        if(!
is_user_connected(iOwner) || iOwner 32 || !is_user_connected(idattacker) || idattacker 32)
            return 
HAM_SUPERCEDE
        
        
if(cs_get_user_team(iOwner)==cs_get_user_team(idattacker) && idattacker != iOwner)
            return 
HAM_SUPERCEDE
    
}
    return 
HAM_IGNORED    
}

public 
bacon_TakeDamageentidinflictoridattackerFloat:damagedamagebits )
{
    if (!
pev_valid(ent)) {

        return 
HAM_IGNORED;
    }

    new 
szClassname32 ];
    
peventpev_classnameszClassnamecharsmaxszClassname ) );
    
    if( 
equalszClassnamegDispenserClassnameTesla ) )
    {
        new 
iOwner peventpev_iuser2 );

        if(!
is_user_connected(iOwner) || iOwner 32 || !is_user_connected(idattacker) || idattacker 32)
            return 
HAM_SUPERCEDE
        
        
if(cs_get_user_team(iOwner)==cs_get_user_team(idattacker) && idattacker != iOwner)
            return 
HAM_SUPERCEDE
        
        
if( peventpev_health ) <= 0.0 )
        {
            new 
szName32 ];
            
get_user_nameidattackerszNamecharsmaxszName ) );

            new 
Float:flOrigin];
            
peventpev_originflOrigin );
                
            
UTIL_BreakModelflOrigingMetalGibsBREAK_COMPUTER ); 
            
set_peventpev_flagspeventpev_flags ) | FL_KILLME ); 

            if( 
idattacker == iOwner )
            {
                
ColorChatiOwner,BLUE"^3[^4Тесла^3] Вы уничтожили собственную ^4Катушку!")
            }else{
                
ColorChatiOwner,BLUE"^3[^4Тесла^3] ^4%s ^3уничтожил вашу ^4Катушку!"szName)
                
cs_set_user_money(idattackercs_get_user_money(idattacker) + get_pcvar_num(g_cvar_TEsla_destone))
            }

            
client_cmdiOwner"speak ^"vox/bizwarn computer destroyed^"" );
            
bDispenserddiOwner ] = false;
        }
        
        
emit_soundentCHAN_STATICgDamageSoundsrandom_num0charsmaxgDamageSounds ) ) ], VOL_NORMATTN_NORM0PITCH_NORM );    
    }
    return 
HAM_IGNORED
}

public 
CommandTeslaBuildid )
{
    
    if( !
is_user_aliveid ))
    {
        return 
PLUGIN_CONTINUE;
    }
    
    if( !( 
pevidpev_flags ) & FL_ONGROUND ) )
    {
        
ColorChat id,BLUE"^3[^4Тесла^3] Вы можете построить Катушку только на земле^4!")
        return 
PLUGIN_HANDLED;
    }

    if( 
bDispenserddid ] == true )
    {
        
ColorChat id,BLUE"^3[^4Тесла^3] Вы уже построили ^4Катушку!")
        return 
PLUGIN_HANDLED;
    }

    new 
iMoney cs_get_user_moneyid );
    new 
iCost get_pcvar_numgDispenserCost );
    
    if( 
iMoney iCost )
    {
        
ColorChat id,BLUE"^3[^4Тесла^3] Нехватает средств для постройки Катушки... ^4Нужно (%d$)"iCost )
        return 
PLUGIN_HANDLED;
    }

    new 
Float:playerOrigin[3]
    
entity_get_vector(idEV_VEC_originplayerOrigin)
    
      new 
Float:vNewOrigin[3]
    new 
Float:vTraceDirection[3]
    new 
Float:vTraceEnd[3]
    new 
Float:vTraceResult[3]
    
velocity_by_aim(id64vTraceDirection// get a velocity in the directino player is aiming, with a multiplier of 64...
    
vTraceEnd[0] = vTraceDirection[0] + playerOrigin[0// find the new max end position
    
vTraceEnd[1] = vTraceDirection[1] + playerOrigin[1]
    
vTraceEnd[2] = vTraceDirection[2] + playerOrigin[2]
    
trace_line(idplayerOriginvTraceEndvTraceResult// trace, something can be in the way, use hitpoint from vTraceResult as new origin, if nothing's in the way it should be same as vTraceEnd
    
vNewOrigin[0] = vTraceResult[0]// just copy the new result position to new origin
    
vNewOrigin[1] = vTraceResult[1]// just copy the new result position to new origin
    
vNewOrigin[2] = playerOrigin[2// always build in the same height as player.
    
    
if (CreateDispanser(vNewOriginid))
    {
        
cs_set_user_money(idcs_get_user_money(id) - iCost)
        
g_energi[id] = 10000000000000000
    
}
    else
    {
        
ColorChat id,BLUE"^3[^4Тесла^3] Здесь не получается установить ^4Катушку!")
    }
    
    return 
PLUGIN_HANDLED;
    
}


stock bool:CreateDispanser(Float:origin[3], creator
{
    if (
point_contents(origin) != CONTENTS_EMPTY || TraceCheckCollides(origin35.0)) 
    {
        return 
false
    
}
    
    
origin[2] = origin[2] + 60
    
    
new Float:hitPoint[3], Float:originDown[3]
    
originDown origin
    originDown
[2] = -5000.0 // dunno the lowest possible height...
    
trace_line(0originoriginDownhitPoint)
    new 
Float:baDistanceFromGround vector_distance(originhitPoint)
    
    new 
Float:difference 80.0 baDistanceFromGround
    
if (difference < -80.0 || difference 80.0) return false
    
    
new iEntity create_entity"func_breakable" );
    
    
    
    if( !
pev_validiEntity ) )
         return 
false
    
    set_pev
iEntitypev_classnamegDispenserClassnameTesla );
    
engfuncEngFunc_SetModeliEntitygDispenserMdlTesla );
    
engfuncEngFunc_SetSizeiEntityFloat:{ -20.0, -10.0, -50.0 }, Float:{ 20.010.0, -5.0 } );
    
set_peviEntitypev_originorigin );
    
set_peviEntitypev_solidSOLID_SLIDEBOX );
    
set_peviEntitypev_movetypeMOVETYPE_FLY );
    
set_peviEntitypev_healthfloat(get_pcvar_numgCvarDispenserHealth )) );
    
set_peviEntitypev_takedamage2.0 );
    
set_peviEntitypev_iuser2creator );
    
set_peviEntitypev_iuser4get_user_team(creator) );
    
set_peviEntitypev_nextthinkget_gametime( ) + 0.1 );
    
engfuncEngFunc_DropToFlooriEntity );    
    
    
gDispenserOrigincreator ][ ] = origin];
    
gDispenserOrigincreator ][ ] = origin];
    
gDispenserOrigincreator ][ ] = origin];
    
    
bDispenserddcreator ] = true;
    
    switch( 
cs_get_user_teamcreator ) )
    {
        case 
CS_TEAM_T:
        {
            
gBeamcolorcreator ][ ] = 255gBeamcolorcreator ][ ] = 0gBeamcolorcreator ][ ] = 0;             
            
/* set_rendering( iEntity, kRenderFxGlowShell, gBeamcolor[ creator ][ 0 ], gBeamcolor[ creator ][ 1 ], gBeamcolor[ creator ][ 2 ], kRenderNormal, 3 ); */
        
}
        
        case 
CS_TEAM_CT:
        {
            
gBeamcolorcreator ][ ] = 255gBeamcolorcreator ][ ] = 0gBeamcolorcreator ][ ] = 0;     
            
/* set_rendering( iEntity, kRenderFxGlowShell, gBeamcolor[ creator ][ 0 ], gBeamcolor[ creator ][ 1 ], gBeamcolor[ creator ][ 2 ], kRenderNormal, 3 ); */
        
}
    } 
    
    
emit_soundiEntityCHAN_STATICgDispenserActiveVOL_NORMATTN_NORM0PITCH_NORM );
    
    return 
true;
}

public 
DispenserThink2iEnt )
{
    if( 
pev_validiEnt ) )
    {
        new 
iOwner peviEntpev_iuser2 ), ent
        
        
if(g_energi[iOwner] <= 0)
        {
            return 
PLUGIN_CONTINUE;
        }
    
    
    
        while((
ent find_ent_by_class(ent,"sentry")) != 0)
        {
            if(
get_sentry_team(ent) == fm_cs_get_user_teamiOwner ))
            {
                new 
Float:entorigin[3]
                
peventpev_originentorigin )
            
                if(
UTIL_IsVisibleentiEnt ) && get_distance_fgDispenserOriginiOwner ], entorigin )  <=  900.0 )
                {
                    if(
pev(entpev_health) < 8000.0)
                    {
                        
set_pev(entpev_healthpev(entpev_health) + 50.0)
                        
g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        
new Float:flAngles];
                        
peviEntpev_anglesflAngles );
                        
flAngles] += 1.0;
                        
set_peviEntpev_anglesflAngles );
                    
                        
sprite_tokkk(iEntent)
                    
                    }
                }
            }
        }
        
        while((
ent find_ent_by_class(ent,"NiceDispenserHpArm")) != 0)
        {
            new 
owner_disp peventpev_iuser2 )
            
            if(
fm_cs_get_user_teamiOwner ) == fm_cs_get_user_team(owner_disp))
            {
                new 
Float:entorigin[3]
                
peventpev_originentorigin )
                
                if(
UTIL_IsVisibleentiEnt ) && get_distance_fgDispenserOriginiOwner ], entorigin )  <=  900.0 )
                {
                    if(
pev(entpev_health) < 2000.0)
                    {
                        
set_pev(entpev_healthpev(entpev_health) + 50.0)
                        
g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        
new Float:flAngles];
                        
peviEntpev_anglesflAngles );
                        
flAngles] += 1.0;
                        
set_peviEntpev_anglesflAngles );
                    
                        
sprite_tokkk(iEntent)
                    }
                }
            }
        }
        
        while((
ent find_ent_by_class(ent,"Laser_Fence")) != 0)
        {        
            if(
fm_cs_get_user_team(iOwner) == pev(entpev_iuser1))
            {
                new 
Float:entorigin[3]
                
peventpev_originentorigin )
                
                if(
UTIL_IsVisibleentiEnt ) && get_distance_fgDispenserOriginiOwner ], entorigin )  <=  900.0 )
                {
                    if(
pev(entpev_health) < 1000.0)
                    {
                        
set_pev(entpev_healthpev(entpev_health) + 50.0)
                        
g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        
new Float:flAngles];
                        
peviEntpev_anglesflAngles );
                        
flAngles] += 1.0;
                        
set_peviEntpev_anglesflAngles );
                    
                        
sprite_tokkk(iEntent)
                    }
                }
            }
        }
        
        while((
ent find_ent_by_class(ent,"NiceDispenserMoney")) != 0)
        {
            new 
owner_disp peventpev_iuser2 )
            
            if(
fm_cs_get_user_team(iOwner) == fm_cs_get_user_team(owner_disp))
            {
                new 
Float:entorigin[3]
                
peventpev_originentorigin )
                
                if(
UTIL_IsVisibleentiEnt ) && get_distance_fgDispenserOriginiOwner ], entorigin )  <=  900.0 )
                {
                    if(
pev(entpev_health) < 1000.0)
                    {
                        
set_pev(entpev_healthpev(entpev_health) + 50.0)
                        
g_energi[iOwner] = g_energi[iOwner] - 50
                    
                        
new Float:flAngles];
                        
peviEntpev_anglesflAngles );
                        
flAngles] += 1.0;
                        
set_peviEntpev_anglesflAngles );
                    
                        
sprite_tokkk(iEntent)
                    }
                }
            }
        }
        
        if(
get_user_team(iOwner) != peviEntpev_iuser4))
        {
            
BreakAllPlayerDispensers(iOwner);
            return 
PLUGIN_CONTINUE;
        }
        
        if(
get_user_team(iOwner) != peviEntpev_iuser4))
        {
            
BreakAllPlayerDispensers(iOwner);
            
g_iPlayerDispenser[iOwner] = 0
            
return PLUGIN_CONTINUE;
        }
    
        
set_peviEntpev_nextthinkget_gametime( ) + 0.1 );
    }
    return 
PLUGIN_CONTINUE;
}


public 
EVENT_TextMsg( )
{
    
UTIL_DestroyDispensers( );
}

public 
LOG_RoundEnd( )
{
    
UTIL_DestroyDispensers( );
}


/*         
    ~~~~~~~~~~~~~~~~~~~~~~~
        Stocks
    ~~~~~~~~~~~~~~~~~~~~~~~
*/


stock UTIL_DestroyDispensers( )
{
    new 
iEnt FM_NULLENT;
    
    while( ( 
iEnt find_ent_by_classiEntgDispenserClassnameTesla ) ) )
    {
        new 
iOwner peviEntpev_iuser2 );
        
        
bDispenserddiOwner ] = false;
        
set_peviEntpev_flagspeviEntpev_flags ) | FL_KILLME );
    }
}



stock UTIL_BreakModelFloat:flOrigin], modelflags )
{
    
engfuncEngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin);
    
write_byteTE_BREAKMODEL ); 
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
write_coord16 );
    
write_coord16 );
    
write_coord16 );
    
write_coordrandom_num( -2020 ) );
    
write_coordrandom_num( -2020 ) );
    
write_coord10 );
    
write_byte10 );
    
write_shortmodel );
    
write_byte10 );
    
write_byte);
    
write_byteflags );
    
message_end( );
    
    
engfuncEngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin);
    
write_byte(TE_SPRITE)
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
write_shortgExploSpr )
    
write_byte15 )
    
write_byte50 )
    
message_end()
}  

stock UTIL_BeamEntsFloat:flStart], Float:flEnd], rgbsprite,  width ,  ampl )
{
    
engfuncEngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflStart );
    
write_byteTE_BEAMPOINTS );
    
engfuncEngFunc_WriteCoordflStart] );
    
engfuncEngFunc_WriteCoordflStart] );
    
engfuncEngFunc_WriteCoordflStart] );
    
engfuncEngFunc_WriteCoordflEnd] );
    
engfuncEngFunc_WriteCoordflEnd] );
    
engfuncEngFunc_WriteCoordflEnd] );
    
write_shortsprite );
    
write_byte);
    
write_byte);
    
write_byte);
    
write_bytewidth );
    
write_byteampl );
    
write_byte);
    
write_byte);
    
write_byte);
    
write_byte130 );
    
write_byte30 ); 
    
message_end( );
}
 
stock bool:UTIL_IsVisibleindexentityignoremonsters )
{
    new 
Float:flStart], Float:flDest];
    
pevindexpev_originflStart );
    
pevindexpev_view_ofsflDest );

    
xs_vec_addflStartflDestflStart );
    
    
peventitypev_originflDest );
    
engfuncEngFunc_TraceLineflStartflDestignoremonstersindex);
    
    new 
Float:flFraction;
    
get_tr20TR_flFractionflFraction );
    
    if( 
flFraction == 1.0 || get_tr20TR_pHit) == entity )
    {
        return 
true;
    }
    
    return 
false;
}


public 
BreakAllPlayerDispensers(id)
{
    static 
ent = -1
    
    
while ((ent find_ent_by_class(ent,  gDispenserClassnameTesla)))  
    {  
        if(
peventpev_iuser2 ) != id)  
            continue  
        
        if(
pev_valid(ent)) 
        {
            new 
Float:flOrigin];
            
peventpev_originflOrigin );
            
            
UTIL_BreakModelflOrigingMetalGibsBREAK_COMPUTER ); 
            
set_peventpev_flagspeventpev_flags ) | FL_KILLME ); 
        }
    }  
    
    
bDispenserddid ] = false;



bool:TraceCheckCollides(Float:origin[3], const Float:BOUNDS) {
    new 
Float:traceEnds[8][3], Float:traceHit[3], hitEnt
    traceEnds
[0][0] = origin[0] - BOUNDS
    traceEnds
[0][1] = origin[1] - BOUNDS
    traceEnds
[0][2] = origin[2] - BOUNDS
    traceEnds
[1][0] = origin[0] - BOUNDS
    traceEnds
[1][1] = origin[1] - BOUNDS
    traceEnds
[1][2] = origin[2] + BOUNDS
    traceEnds
[2][0] = origin[0] + BOUNDS
    traceEnds
[2][1] = origin[1] - BOUNDS
    traceEnds
[2][2] = origin[2] + BOUNDS
    traceEnds
[3][0] = origin[0] + BOUNDS
    traceEnds
[3][1] = origin[1] - BOUNDS
    traceEnds
[3][2] = origin[2] - BOUNDS
    traceEnds
[4][0] = origin[0] - BOUNDS
    traceEnds
[4][1] = origin[1] + BOUNDS
    traceEnds
[4][2] = origin[2] - BOUNDS
    traceEnds
[5][0] = origin[0] - BOUNDS
    traceEnds
[5][1] = origin[1] + BOUNDS
    traceEnds
[5][2] = origin[2] + BOUNDS
    traceEnds
[6][0] = origin[0] + BOUNDS
    traceEnds
[6][1] = origin[1] + BOUNDS
    traceEnds
[6][2] = origin[2] + BOUNDS
    traceEnds
[7][0] = origin[0] + BOUNDS
    traceEnds
[7][1] = origin[1] + BOUNDS
    traceEnds
[7][2] = origin[2] - BOUNDS

    
for (new 08i++) {
        if (
point_contents(traceEnds[i]) != CONTENTS_EMPTY)
            return 
true

        hitEnt 
trace_line(0origintraceEnds[i], traceHit)
        if (
hitEnt != 0)
            return 
true
        
for (new 03j++) {
            if (
traceEnds[i][j] != traceHit[j])
                return 
true
        
}
    }

    return 
false
}


public 
sprite_tokkk(iEntent)
{
    new 
Float:entorigin[3]
    
peviEntpev_originentorigin )
    

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_BEAMENTS)
    
write_short(ent)
    
write_short(iEnt)
    
write_short(gHealingBeam
    
write_byte(1// 
    
write_byte(10// 
    
write_byte(1// 
    
write_byte(30// 
    
write_byte(600// 
    
write_byte(random_num(50255)) /
    
write_byte(random_num(50255)) 
    
write_byte(50// Blue
    
write_byte(255// brightness
    
write_byte(30// scroll speed in 0.1's
    
message_end()
/*
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(TE_BEAMENTPOINT);
    write_short(ent);             //Индекс entity
    write_coord(entorigin[0]);          //Конечная точка x
    write_coord(entorigin[1]);         //Конечная точка y
    write_coord(entorigin[2]);          //Конечная точка z
    write_short(gHealingBeam);         //Индекс спрайта 
    write_byte(0)                 //Стартовый кадр
    write_byte(10);                 //Скорость анимации
    write_byte(1);                //Врмея существования
    write_byte(30);    //Толщина луча
    write_byte(600);  //Искажение 
    write_byte(random_num(50, 255));    //Цвет красный
    write_byte(random_num(50, 255));        //Цвеи зеленый
    write_byte(50);        //Цвет синий
    write_byte(255);            //Яркость
    write_byte(30);                //...
    message_end();
    */
}

stock fm_cs_get_user_team(id)
{
    if (
pev_valid(id) != 2) return 0
    
    
return get_pdata_int(id1145)
}
  
Работа с моделями для кс 1.6
Telegram @DeMNiX
vk com/sbalburov
Аватара пользователя
DeMNiX
 
Сообщения: 177
Зарегистрирован: 24 сен 2011, 17:48
Благодарил (а): 25 раз.
Поблагодарили: 37 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Плагин Тесла

Сообщение Subb98 » 28 май 2018, 07:27

Ternopil62000, доброе утро. Пожалуйста, измените название темы на информативное, в соответствии с Вы должны зарегистрироваться, чтобы видеть ссылки.. Если вы не сделаете этого в течение суток, я сделаю это сам, однако в этом случае вам будет выдано предупреждение в профиль.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7