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

Замена спрайта дыма на сервере

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

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

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

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

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

Замена спрайта дыма на сервере

Сообщение radical » 26 фев 2018, 01:02

Доброго времени суток. Нужно изменить спрайт дыма, но обычной заменой не работает. Пробовал через extra_precacher - толку ноль. Может, есть еще какие - то варианты?
Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#

Re: Замена спрайта дыма на сервере

Сообщение MayroN » 26 фев 2018, 14:17

Я так понимаю,что через етот плагин Вы только заставите скачать файл дыма ваш изменённый,если у клиента такого файла в папке нет.Так дела непойдут...

Конечно Вы так неподмените его,если Вы измените Ваш стандартный,т.к. у клиента он уже имееться...

Вам нужно сам файл дыма подменить в плагине ,заменяя стандартный.Например,как ето делаеться через плагины подобного рода Players Models

Либо на примере етого :
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>

#define VERSION "1.1"

new const g_szClassname[] = "colored_smokenade";

new g_szSmokeSprites[ 6 ];
new g_Cvar_Enabled;

public plugin_init( ) {
    register_plugin( "Colored Smoke", VERSION, "xPaw" );
    
    register_cvar
( "colored_smoke", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
    set_cvar_string( "colored_smoke", VERSION );
    
    g_Cvar_Enabled 
= register_cvar( "sv_colored_smoke", "1" );
    
    register_forward
( FM_EmitSound, "FwdEmitSound" );
    register_touch( g_szClassname, "worldspawn", "FwdTouch_FakeSmoke" );
    register_think( g_szClassname, "FwdThink_FakeSmoke" );
}

public plugin_precache( ) {
    g_szSmokeSprites[ 0 ] = precache_model( "sprites/gas_puff_01y.spr" );
    g_szSmokeSprites[ 1 ] = precache_model( "sprites/gas_puff_01r.spr" );
    g_szSmokeSprites[ 2 ] = precache_model( "sprites/gas_puff_01b.spr" );
    g_szSmokeSprites[ 3 ] = precache_model( "sprites/gas_puff_01g.spr" );
    g_szSmokeSprites[ 4 ] = precache_model( "sprites/gas_puff_01m.spr" );
    g_szSmokeSprites[ 5 ] = precache_model( "sprites/gas_puff_01o.spr" );
    
    precache_sound
( "weapons/grenade_hit1.wav" );
}

public FwdEmitSound( iOrigEnt, iChannel, const szSample[], Float:fVol, Float:fAttn, iFlags, iPitch ) {
    new iCvar = get_pcvar_num( g_Cvar_Enabled );
    if( iCvar > 0 ) {
        static const szSmokeSound[] = "weapons/sg_explode.wav";
        
        if
( equal( szSample, szSmokeSound ) ) {
            // cache origin, angles and model
            new Float:vOrigin[ 3 ], Float:vAngles[ 3 ], szModel[ 64 ], iOwner;
            iOwner = entity_get_edict( iOrigEnt, EV_ENT_owner );
            entity_get_vector( iOrigEnt, EV_VEC_origin, vOrigin );
            entity_get_vector( iOrigEnt, EV_VEC_angles, vAngles );
            entity_get_string( iOrigEnt, EV_SZ_model, szModel, charsmax( szModel ) );
            
            
// remove entity from world
            entity_set_vector( iOrigEnt, EV_VEC_origin, Float:{ 9999.9, 9999.9, 9999.9 } );
            entity_set_int( iOrigEnt, EV_INT_flags, FL_KILLME );
            
            
// create new entity
            new iEntity = create_entity( "info_target" );
            if( iEntity > 0 ) {
                entity_set_string( iEntity, EV_SZ_classname, g_szClassname );
                
                entity_set_origin
( iEntity, vOrigin );
                entity_set_vector( iEntity, EV_VEC_angles, vAngles );
                
                entity_set_int
( iEntity, EV_INT_movetype, MOVETYPE_TOSS );
                entity_set_int( iEntity, EV_INT_solid, SOLID_BBOX );
                
                entity_set_float
( iEntity, EV_FL_nextthink, get_gametime( ) + 21.5 );
                entity_set_float( iEntity, EV_FL_gravity, 0.5 );
                entity_set_float( iEntity, EV_FL_friction, 0.8 );
                
                entity_set_model
( iEntity, szModel );
                
                new Float
:vVelocity[ 3 ];
                vVelocity[ 0 ] = random_float( -220.0, 220.0 );
                vVelocity[ 1 ] = random_float( -220.0, 220.0 );
                vVelocity[ 2 ] = random_float(  200.0, 300.0 );
                entity_set_vector( iEntity, EV_VEC_velocity, vVelocity );
                
                emit_sound
( iEntity, iChannel, szSample, fVol, fAttn, iFlags, iPitch );
                
                
// Create fake smoke
                new iSmoke;
                
                if
( iCvar == 2 )
                    iSmoke = get_user_team( iOwner ); // i did indexes as team, 1 - red, 2 - blue, 3 - green( spec oO )
                else
                    iSmoke 
= random_num( 0, 5 );
                
                
// Store the smoke number in entity, we will use it later
                entity_set_int( iEntity, EV_INT_iuser4, iSmoke );
                
                message_begin
( MSG_BROADCAST, SVC_TEMPENTITY );
                write_byte( TE_FIREFIELD );
                engfunc( EngFunc_WriteCoord, vOrigin[ 0 ] );
                engfunc( EngFunc_WriteCoord, vOrigin[ 1 ] );
                engfunc( EngFunc_WriteCoord, vOrigin[ 2 ] + 50 );
                write_short( 100 );
                write_short( g_szSmokeSprites[ iSmoke ] );
                write_byte( 100 );
                write_byte( TEFIRE_FLAG_ALPHA );
                write_byte( 1000 );
                message_end();
                
                message_begin
( MSG_BROADCAST, SVC_TEMPENTITY );
                write_byte( TE_FIREFIELD );
                engfunc( EngFunc_WriteCoord, vOrigin[ 0 ] );
                engfunc( EngFunc_WriteCoord, vOrigin[ 1 ] );
                engfunc( EngFunc_WriteCoord, vOrigin[ 2 ] + 50 );
                write_short( 150 );
                write_short( g_szSmokeSprites[ iSmoke ] );
                write_byte( 10 );
                write_byte( TEFIRE_FLAG_ALPHA | TEFIRE_FLAG_SOMEFLOAT );
                write_byte( 1000 );
                message_end( );
            }
        }
    }
}

public FwdTouch_FakeSmoke( iEntity, iWorld ) {
    if( !is_valid_ent( iEntity ) )
        return PLUGIN_CONTINUE;
    
    
// Bounce sound
    emit_sound( iEntity, CHAN_VOICE, "weapons/grenade_hit1.wav", 0.25, ATTN_NORM, 0, PITCH_NORM );
    
    new Float
:vVelocity[ 3 ];
    entity_get_vector( iEntity, EV_VEC_velocity, vVelocity );
    
    if
( vVelocity[ 1 ] <= 0.0 && vVelocity[ 2 ] <= 0.0 ) {
        new Float:vOrigin[ 3 ];
        new iSmoke = entity_get_int( iEntity, EV_INT_iuser4 );
        entity_get_vector( iEntity, EV_VEC_origin, vOrigin );
        
        
// Make small smoke near grenade on ground
        message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
        write_byte( TE_FIREFIELD );
        engfunc( EngFunc_WriteCoord, vOrigin[ 0 ] );
        engfunc( EngFunc_WriteCoord, vOrigin[ 1 ] );
        engfunc( EngFunc_WriteCoord, vOrigin[ 2 ] + 10 );
        write_short( 2 );
        write_short( g_szSmokeSprites[ iSmoke ] );
        write_byte( 2 );
        write_byte( TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA );
        write_byte( 30 );
        message_end();
    }
    
    return PLUGIN_CONTINUE
;
}

public FwdThink_FakeSmoke( iEntity ) {
    if( !is_valid_ent( iEntity ) )
        return PLUGIN_CONTINUE;
    
    remove_entity
( iEntity );
    
    return PLUGIN_CONTINUE
;
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Замена спрайта дыма на сервере

Сообщение Hilarious » 27 фев 2018, 23:57

Если это попытка защититься от nosmoke, то она провалилась - юзер возьмёт у себя и отредактирует спрайты дыма на прозрачные.
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Замена спрайта дыма на сервере

Сообщение Mistrick » 28 фев 2018, 08:16

Hilarious, кто мешает проверить файл по хэшу?
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Замена спрайта дыма на сервере

Сообщение Hilarious » 28 фев 2018, 08:43

Mistrick писал(а):Hilarious, кто мешает проверить файл по хэшу?

Тем более бесполезная фишка. Хеш по обьёму файла проверяется, задача несложная изменить спрайт таким образом, что md5 не изменится, забив данные нулями.

Добавлено спустя 1 минуту 20 секунд:
Я на одном сервере себе таким образом вместо моделей игроков квадраты ставил, чтоб в будку раздавать удобнее было, хоть там и проверка по хешу, но им это не помогло :-D
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Замена спрайта дыма на сервере

Сообщение radical » 01 мар 2018, 19:38

Hilarious писал(а):Если это попытка защититься от nosmoke, то она провалилась - юзер возьмёт у себя и отредактирует спрайты дыма на прозрачные.


Неет) Просто на сервере очень густой дым, у игроков в нем лагает.
Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#

Re: Замена спрайта дыма на сервере

Сообщение 3BEPb » 01 мар 2018, 21:42

radical, дым везде одинаковый а вот железо у всех своё. У меня на старом ПК fps реагировал сразу когда я дым видел, если я в него заходил то, оно падало в обще почти до 0. Как новый комп собрал, 100 fps стабильно, хоть всё карту дымом закидай.
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn


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

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

Сейчас этот форум просматривают: sb123 и гости: 9