Все вопросы по работе и настройке AMXX и его плагинов.
Модератор: liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.
Geneor » 05 май 2020, 01:55
Всем привет! Тут написал свой плагин, выдается модель, после конца раунда/смерти игрока с данной моделью падает сервер с ошибкой: IndexOfEdict: bad entity , помогите, что я не так правильно сделал. Заранее спасибо
- Код: Выделить всё
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
Vaqtincha » 05 май 2020, 04:13
g_iHelmet [ id ][ HelmetEnt ] = 1
зачем ?
пытаешься удалить энтити игрока с индексом 1
админгандонсоси
-
Vaqtincha
-
- Сообщения: 277
- Зарегистрирован: 28 мар 2018, 15:05
- Забанен
- Благодарил (а): 8 раз.
- Поблагодарили: 53 раз.
Geneor » 05 май 2020, 12:05
Значит эта ошибка может быть из-за удаление энтити игрока?
-
Geneor
-
- Сообщения: 13
- Зарегистрирован: 19 ноя 2018, 15:10
- Благодарил (а): 1 раз.
- Поблагодарили: 0 раз.
- Опыт программирования: Около 3 месяцев
- Языки программирования: Pawn
Vaqtincha » 05 май 2020, 12:40
Игрок тоже энтити и его удалить нельзя.
админгандонсоси
-
Vaqtincha
-
- Сообщения: 277
- Зарегистрирован: 28 мар 2018, 15:05
- Забанен
- Благодарил (а): 8 раз.
- Поблагодарили: 53 раз.
Geneor » 05 май 2020, 12:57
Понял, принял. Спасибо за ответ.
-
Geneor
-
- Сообщения: 13
- Зарегистрирован: 19 ноя 2018, 15:10
- Благодарил (а): 1 раз.
- Поблагодарили: 0 раз.
- Опыт программирования: Около 3 месяцев
- Языки программирования: Pawn
Вернуться в Вопросы по AMXX и его плагинам
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9