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

Падает сервер.

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

Падает сервер.

Сообщение Geneor » 05 май 2020, 01:55

Всем привет! Тут написал свой плагин, выдается модель, после конца раунда/смерти игрока с данной моделью падает сервер с ошибкой: IndexOfEdict: bad entity , помогите, что я не так правильно сделал. Заранее спасибо

Код: Выделить всё
#include amxmodx
#include fakemeta
#include hamsandwich

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
    #define client_disconnected client_disconnect
#endif

enum _:eDataHelmet{ HelmetId, HelmetEnt }
new g_iHelmet[ 33 ][ eDataHelmet ];

new const g_szHelmetHit[][] = { "by_Geneor/helmet_hit1.wav", "by_Geneor/helmet_hit2.wav" };
new const g_szHelmetModel[] = "models/by_Geneor/helmet.mdl";

public client_disconnected( id ) {
    for( new iPos; iPos <= eDataHelmet - 1; iPos++ ) {
        if( g_iHelmet[ id ][ eDataHelmet:iPos ] ) {
            g_iHelmet[ id ][ eDataHelmet:iPos ] = 0;
        }
    }
}

public plugin_precache() {
    engfunc( EngFunc_PrecacheModel, g_szHelmetModel );
    for( new iPrecache; iPrecache < sizeof( g_szHelmetHit ); iPrecache++ )
        engfunc( EngFunc_PrecacheSound, g_szHelmetHit[ iPrecache ] );
}

public plugin_natives() {
    register_native( "get_client_helmet", "get_client_helmet", 1 );
    register_native( "set_client_helmet", "set_client_helmet", 1 );
}

public get_client_helmet( id, iEntType ) {
    switch( iEntType ) {
        case 1: return g_iHelmet[ id ][ HelmetId ];
        case 2: return g_iHelmet[ id ][ HelmetEnt ];
    }
    return iEntType;
}
public set_client_helmet( id, iType ) UTIL_EntityModel( id );

public plugin_init() {
    register_plugin( "[TEST] Helmet", "1.0", "Geneor" );
    register_logevent( "LogEvent_RoundEnd", 2, "1=Round_End" );
    RegisterHam( Ham_Killed, "player", "Ham_Killed_Post", true );
    RegisterHam( Ham_TakeDamage, "player", "Ham_PlayerDamage_Post", true );

    register_clcmd( "say /helmet", "ClCmd_SetHelmet" );
}

public LogEvent_RoundEnd() {
    for(new id = 1; id <= get_maxplayers(); id++) {
        if( g_iHelmet[ id ][ HelmetId ] ) {
            if( pev_valid( g_iHelmet[ id ][ HelmetEnt ] ) ) {
                engfunc( EngFunc_RemoveEntity, g_iHelmet[ id ][ HelmetEnt ] );
                g_iHelmet[ id ][ HelmetId ] = 0;
                g_iHelmet[ id ][ HelmetEnt ] = 0;
            }
        }
    }
}

public Ham_Killed_Post( id ) {
    if(!is_user_alive(id))
        return;

    if( g_iHelmet[ id ][ HelmetId ] ) {
        if( pev_valid( g_iHelmet[ id ][ HelmetEnt ] ) ) {
            engfunc( EngFunc_RemoveEntity, g_iHelmet[ id ][ HelmetEnt ] );
            g_iHelmet[ id ][ HelmetId ] = 0;
            g_iHelmet[ id ][ HelmetEnt ] = 0;
        }
    }
}

public Ham_PlayerDamage_Post( iVictim, iWeapon, iAttacker, Float:fDamage, iDamageBits ) {
    if( !is_user_connected( iVictim ) || !is_user_connected( iAttacker ) || iDamageBits == (1<<24 )
    || get_pdata_int( iVictim, 75 ) != HIT_HEAD || !g_iHelmet[ iVictim ][ HelmetId ] 
    
|| get_pdata_int( iVictim, 112 ) != 2 || random_num( 0, 5 ) != 2 )
        return HAM_IGNORED;

    switch( random_num(0, 10 ) ) {
        case 5, 2, 8: client_cmd( iVictim, "spk %s", g_szHelmetHit[ 1 ] );
        default: client_cmd( iVictim, "spk %s", g_szHelmetHit[ 0 ] );
    }
    return HAM_SUPERCEDE;
}

public ClCmd_SetHelmet( id ) UTIL_EntityModel( id );

public UTIL_EntityModel( id ) {
    static FuncWall = 0;
    if( FuncWall || ( FuncWall = engfunc( EngFunc_AllocString, "func_wall" ) ) ) 
        g_iHelmet
[ id ][ HelmetEnt ] = engfunc( EngFunc_CreateNamedEntity, FuncWall );

    if( g_iHelmet[ id ][ HelmetEnt ] ) {
        set_pev( g_iHelmet[ id ][ HelmetEnt ], pev_movetype, MOVETYPE_FOLLOW );
        set_pev( g_iHelmet[ id ][ HelmetEnt ], pev_aiment, id );
        engfunc( EngFunc_SetModel, g_iHelmet[ id ][ HelmetEnt ], g_szHelmetModel );
        set_pev( g_iHelmet[ id ][ HelmetEnt ], pev_sequence, 0 );
        set_pev( g_iHelmet[ id ][ HelmetEnt ], pev_animtime, get_gametime() );
        set_pev( g_iHelmet[ id ][ HelmetEnt ], pev_framerate, 1.0 );
    }
    else engfunc( EngFunc_SetModel, g_iHelmet[ id ][ HelmetEnt ], g_szHelmetModel );

    g_iHelmet[ id ][ HelmetId ] = 1;
    g_iHelmet[ id ][ HelmetEnt ] = 1;
Аватара пользователя
Geneor
 
Сообщения: 13
Зарегистрирован: 19 ноя 2018, 15:10
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn

Re: Падает сервер.

Сообщение Vaqtincha » 05 май 2020, 04:13

g_iHelmet [ id ][ HelmetEnt ] = 1
зачем ?

пытаешься удалить энтити игрока с индексом 1
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: Падает сервер.

Сообщение Geneor » 05 май 2020, 12:05

Значит эта ошибка может быть из-за удаление энтити игрока?
Аватара пользователя
Geneor
 
Сообщения: 13
Зарегистрирован: 19 ноя 2018, 15:10
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn

Re: Падает сервер.

Сообщение Vaqtincha » 05 май 2020, 12:40

Игрок тоже энтити и его удалить нельзя.
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: Падает сервер.

Сообщение Geneor » 05 май 2020, 12:57

Понял, принял. Спасибо за ответ.
Аватара пользователя
Geneor
 
Сообщения: 13
Зарегистрирован: 19 ноя 2018, 15:10
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn


Вернуться в Вопросы по AMXX и его плагинам

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

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