Raised This Month: $ Target: $400
 0% 

Bad Spawn Preventer that works?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
tarsisd2
Veteran Member
Join Date: Feb 2016
Location: brazil
Old 04-13-2021 , 06:46   Re: Bad Spawn Preventer that works?
Reply With Quote #1

in case you use rehlds + regame i have a plugin that adds spawn near other spawn automatically, just in case

PHP Code:
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < reapi >

#pragma semicolon 1

#define TEAM_SPAWNPOINTS_COUNT            20

new boolg_bFixFirstSpawnMAX_PLAYERS ];

new 
HamHookg_HamHook_PlayerIsPlayer;

public 
plugin_init( )
{
    
register_plugin"Spawns add auto""1.0.""dev" );

    
RegisterHookChainRG_CBasePlayer_Spawn"@CBasePlayer__Spawn_Pre"false );
    
RegisterHookChainRG_CBasePlayer_Spawn"@CBasePlayer__Spawn_Post"true );

    
DisableHamForward( ( g_HamHook_PlayerIsPlayer RegisterHamPlayerHam_IsPlayer"@CBasePlayer__IsPlayer_Pre"false ) ) );

    
AddSpawnPoints"info_player_deathmatch" );
    
AddSpawnPoints"info_player_start" );
}

public 
client_putinserveriPlayer )
{
    
g_bFixFirstSpawniPlayer ] = true;
}

@
CBasePlayer__Spawn_PreiPlayer )
{
    new 
TeamNameiTeam get_memberiPlayerm_iTeam );

    if( 
iTeam == TEAM_TERRORIST || iTeam == TEAM_CT )
    {
        if( 
g_bFixFirstSpawniPlayer ] )
        {
            
g_bFixFirstSpawniPlayer ] = false;
            return;
        }
    }
    else
        return;

    
// Using this only for selection spawn point (prevent the bugs with a player)
    
EnableHamForwardg_HamHook_PlayerIsPlayer );
}

@
CBasePlayer__Spawn_PostiPlayer )
{
    
DisableHamForwardg_HamHook_PlayerIsPlayer );
}

// HACK: prevent the death of a player
@CBasePlayer__IsPlayer_PreiEntity )
{
    
SetHamReturnIntegerfalse );
    return 
HAM_SUPERCEDE;
}

AddSpawnPoints( const sClassname[ ] )
{
    new 
FloatvecOrigin];
    new 
FloatvecAngles];

    new 
FloatvecOriginLast];
    new 
FloatvecMidOrigin];
    new 
FloatvecMidAngles];

    new Array: 
aSpawnPoints ArrayCreate);

    new 
iSpot MaxClients;

    while( ( 
iSpot rg_find_ent_by_classiSpotsClassnametrue ) ) )
    {
        
ArrayPushCellaSpawnPointsiSpot );

        
get_entvariSpotvar_originvecOrigin );
        
get_entvariSpotvar_anglesvecAngles );

        
vecMidOrigin] += vecOrigin] - vecOriginLast];
        
vecMidOrigin] += vecOrigin] - vecOriginLast];

        
vecMidAngles] += vecAngles];
        
vecMidAngles] += vecAngles];

        
vecOriginLast] = vecOrigin];
        
vecOriginLast] = vecOrigin];
    }

    new 
iSpotsCount ArraySizeaSpawnPoints );

    if( 
iSpotsCount >= TEAM_SPAWNPOINTS_COUNT )
        return;

    new 
FloatflSpotsCount floatiSpotsCount );

    
vecMidOrigin] /= flSpotsCount;
    
vecMidOrigin] /= flSpotsCount;

    
vecMidAngles] /= flSpotsCount;
    
vecMidAngles] /= flSpotsCount;

    new 
iAllSpawns iSpotsCount;
    new 
FloatflDistance floatsqrootvecMidOrigin] * vecMidOrigin] + vecMidOrigin] * vecMidOrigin] );

    for( new 
iIndex 0iIndex ArraySizeaSpawnPoints ); iIndex++ )
    {
        
iSpot ArrayGetCellaSpawnPointsiIndex );

        
get_entvariSpotvar_originvecOrigin );

        
iSpot CreateSpawnPointsClassnamevecOriginvecMidAnglesflDistance );

        if( 
iSpot == NULLENT )
            continue;

        
ArrayPushCellaSpawnPointsiSpot );

        if( ++
iAllSpawns >= TEAM_SPAWNPOINTS_COUNT )
            break;
    }

    
ArrayDestroyaSpawnPoints );

    if( 
iAllSpawns >= TEAM_SPAWNPOINTS_COUNT )
        return;

    
server_print"FAILED: not all ^"%s^". Added %d"sClassnameTEAM_SPAWNPOINTS_COUNT iAllSpawns );
}

CreateSpawnPoint( const sClassname[ ], FloatvecOrigin], FloatvecAngles], FloatflDistance )
{
    new 
FloatvecOffset][ ] = { { -1.00.0 }, { 1.00.0 }, { 0.0, -1.0 }, { 0.01.0 }, { -1.0, -1.0 }, { 1.01.0 }, { -1.01.0 }, { 1.0, -1.0 } };

    new 
FloatflRange;
    new 
FloatflFraction;
    new 
FloatvecSelect];

    
vecSelect] = vecOrigin];

    for( new 
iDeepLevel 0jiDeepLevel <= 4iDeepLevel++ )
    {
        switch( 
iDeepLevel )
        {
            case 
0flRange flDistance;
            case 
1flRange flDistance 0.5;
            case 
2flRange flDistance 1.5;
            case 
3flRange flDistance 2.0;
            case 
4flRange flDistance 2.5;
        }

        for( 
0sizeof vecOffsetj++ )
        {
            
vecSelect] = vecOrigin] + flRange vecOffset][ ];
            
vecSelect] = vecOrigin] + flRange vecOffset][ ];

            
engfuncEngFunc_TraceLinevecOriginvecSelectDONT_IGNORE_MONSTERS, -1);

            
get_tr20TR_flFractionflFraction );

            if( 
flFraction != 1.0 )
                continue;

            
engfuncEngFunc_TraceHullvecSelectvecSelect0HULL_HUMAN, -1);

            if( 
get_tr20TR_StartSolid ) || get_tr20TR_AllSolid ) || !get_tr20TR_InOpen ) )
                continue;

            new 
iEntity rg_create_entitysClassnametrue );

            if( 
is_nullentiEntity ) )
                continue;

            
engfuncEngFunc_SetOriginiEntityvecSelect );
            
set_entvariEntityvar_anglesvecAngles );

            return 
iEntity;
        }
    }

    return 
NULLENT;

here i have a lot of maps with over 40 spawns on them, so if you use them you dont need any plugin such as spawn editor:

https://disk.yandex.com/d/cauwFLLp3PR6Bx

the files has a password, wich i sent to you by pm
tarsisd2 is offline
Reply



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 19:58.


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