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

Drop Entity из Entity

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

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

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

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

Drop Entity из Entity

Сообщение MayroN » 24 дек 2018, 03:56

Здрасьте.

Можно ли такое.Например,я ставлю плагином обычную модель(например дерево) на карте.
Все ,он проходим,и есть для его точка спавн,и он в игре как декорация.

И могу ли я установить так,чтобы из дерева выпадали другие модели мелкие через енное время.

Интересует еще и то,чтобы ети модели непоявлялись прям под деревом,а выпадали на растоянии,как выкинутое оружие.Тоисть траектория полета вылета модели от дерева.

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

Re: Drop Entity из Entity

Сообщение Vaqtincha » 24 дек 2018, 09:00

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

Re: Drop Entity из Entity

Сообщение MayroN » 24 дек 2018, 11:20

Vaqtincha, я понял тебя.
Тоисть и даже так можно,чтобы drop'ались мелкие модельки,а при их подборе игроком уже рандомно установить,что получать:здоровье,броню,оружие,деньги?

И на твое усмотрение,за сутки,ну там с тестами и прочим,возможно дописать ето?
Начальное дело уже есть
Код: Выделить всё
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < cstrike >
#include < engine >
#include < hamsandwich >

new const MODEL[ ] = "models/xmas/xmas_tree.mdl";

new g_szConfigFile[ 128 ];

public plugin_init( ) {
    register_plugin( "Xmas shit", "1.0", "xPaw & Juice" );
    
    register_clcmd
( "tree_spawn",  "CmdSpawnTree",   ADMIN_MAP );
    register_clcmd( "tree_remove", "CmdSpawnRemove", ADMIN_MAP );
    register_clcmd( "say /tree", "CmdTreeMenu" );
    
    RegisterHam
( Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1 );
    
    register_event
( "CurWeapon", "Weather", "be" );
}

ShowTreeMenu( id )
{
    new menu = menu_create("Tree Menu", "TreeMenu");
    
    menu_additem
( menu, "Create Tree", "1", ADMIN_MAP );
    menu_additem( menu, "Delete Tree", "2", ADMIN_MAP );
    menu_additem( menu, "Save Menu", "3", ADMIN_MAP );
    
    menu_display
( id, menu );
}

ShowSaveMenu( id )
{
    new menu = menu_create( "Save Tree Menu", "SaveMenu" );
    
    menu_additem
( menu, "Load Saved Trees", "1", ADMIN_MAP );
    menu_additem( menu, "Delete All Trees", "2", ADMIN_MAP );
    menu_additem( menu, "Save All Trees^n", "3", ADMIN_MAP );
    menu_additem( menu, "Back", "4", ADMIN_MAP );
    
    menu_display
( id, menu );
}

public TreeMenu( id, menu, item )
{
    if( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return;
    }
    
    new _access
, info[2], callback;
    menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
    menu_destroy(menu);
    
    switch
( str_to_num(info) )
    {
        case 1:
        {
            client_cmd( id, "tree_spawn" );
            ShowTreeMenu(id);
        }
        case 2:
        {
            client_cmd( id, "tree_remove" );
            ShowTreeMenu( id );
        }
        case 3:
        {
            ShowSaveMenu( id );
        }
    }
}

public SaveMenu( id, menu, item )
{
    if( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return;
    }
    
    new _access
, info[2], callback;
    menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
    menu_destroy(menu);
    
    switch
( str_to_num(info) )
    {
        case 1:
        {
            DeleteAllTrees( );
            LoadTrees( );
            ShowSaveMenu( id );
        }
        case 2:
        {
            DeleteAllTrees( );
            ShowSaveMenu( id );
        }
        case 3:
        {    
            SaveTrees
( );
            ShowSaveMenu( id );
        }
        case 4:
        {
            ShowTreeMenu( id );
        }
    }
}

public DeleteAllTrees( ) {
    new iEntity = -1;
    while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "env_tree")) )
    {
        engfunc(EngFunc_RemoveEntity, iEntity);
    }
}

public LoadTrees( ) {
    new iFile = fopen( g_szConfigFile, "rt" );
    
    if
( !iFile )
        return;
    
    new Float
:vOrigin[ 3 ], x[ 16 ], y[ 16 ], z[ 16 ], szData[ sizeof( x ) + sizeof( y ) + sizeof( z ) + 3 ];
    
    while
( !feof( iFile ) ) {
        fgets( iFile, szData, charsmax( szData ) );
        trim( szData );
        
        if
( !szData[ 0 ] )
            continue;
        
        parse
( szData, x, 15, y, 15, z, 15 );
        
        vOrigin
[ 0 ] = str_to_float( x );
        vOrigin[ 1 ] = str_to_float( y );
        vOrigin[ 2 ] = str_to_float( z );
        
        CreateTree
( vOrigin );
    }
    
    fclose
( iFile );
}

public Weather( id ) {
    if( is_user_alive( id ) ) 
        client_cmd
( id, "cl_weather 3" );
}

public plugin_precache( ) {
    precache_model( MODEL );
    precache_model( "models/player/xmas_ct/xmas_ct.mdl" );
    precache_model( "models/player/xmas_t/xmas_t.mdl" );
    create_entity( "env_snow" );
}

public fwHamPlayerSpawnPost( const id ) {
    if ( is_user_alive( id ) ) {
        switch( cs_get_user_team( id ) ) {
            case CS_TEAM_CT: cs_set_user_model( id, "xmas_ct" );
            case CS_TEAM_T: cs_set_user_model( id, "xmas_t" );
        }
    }
}

public plugin_cfg( ) {
    new szMapName[ 32 ];
    get_mapname( szMapName, 31 );
    strtolower( szMapName );
    
    formatex
( g_szConfigFile, 127, "addons/amxmodx/data/trees" );
    
    if
( !dir_exists( g_szConfigFile ) ) {
        mkdir( g_szConfigFile );
        
        format
( g_szConfigFile, 127, "%s/%s.txt", g_szConfigFile, szMapName );
        
        return
;
    }
    
    format
( g_szConfigFile, 127, "%s/%s.txt", g_szConfigFile, szMapName );
    
    if
( !file_exists( g_szConfigFile ) )
        return;
    
    LoadTrees
( );

}

public CmdSpawnTree( const id, const iLevel, const iCid ) {
    if( !cmd_access( id, iLevel, iCid, 1 ) )
        return PLUGIN_HANDLED;
    
    new Float
:vOrigin[ 3 ];
    entity_get_vector( id, EV_VEC_origin, vOrigin );
    
    CreateTree
( vOrigin )
    
    return PLUGIN_HANDLED
;
}

public CmdSpawnRemove( const id, const iLevel, const iCid ) {
    if( !cmd_access( id, iLevel, iCid, 1 ) )
        return PLUGIN_HANDLED;
    
    new Float
:vOrigin[ 3 ], szClassName[ 10 ], iEntity = -1, iDeleted;
    entity_get_vector( id, EV_VEC_origin, vOrigin );
    
    while
( ( iEntity = find_ent_in_sphere( iEntity, vOrigin, 100.0 ) ) > 0 ) {
        entity_get_string( iEntity, EV_SZ_classname, szClassName, 9 );
        
        if
( equal( szClassName, "env_tree" ) ) {
            remove_entity( iEntity );
            
            iDeleted
++;
        }
    }
    
    if
( iDeleted > 0 )
        SaveTrees( );
    
    console_print
( id, "[AMXX] Deleted %i trees.%s", iDeleted, iDeleted == 0 ? " You need to stand in tree to remove it" : "" );
    
    return PLUGIN_HANDLED
;
}

public CmdTreeMenu(id)
{
    if( !access(id, ADMIN_MAP) ) return PLUGIN_HANDLED;
    ShowTreeMenu(id);
    
    return PLUGIN_HANDLED
;
}

CreateTree( const Float:vOrigin[ 3 ] ) {
    new iEntity = create_entity( "info_target" );
    
    if
( !iEntity )
        return 0;
    
    entity_set_string
( iEntity, EV_SZ_classname, "env_tree" );
    entity_set_int( iEntity, EV_INT_solid, SOLID_NOT );
    entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_NONE );
    
    entity_set_size
( iEntity, Float:{ -1.0, -1.0, -1.0 }, Float:{ 1.0, 1.0, 36.0 } );
    entity_set_origin( iEntity, vOrigin );
    entity_set_model( iEntity, MODEL );
    
    drop_to_floor
( iEntity );
    
    return iEntity
;
}

SaveTrees( ) {
    if( file_exists( g_szConfigFile ) )
        delete_file( g_szConfigFile );
    
    new iFile 
= fopen( g_szConfigFile, "wt" );
    
    if
( !iFile )
        return;
    
    new Float
:vOrigin[ 3 ], iEntity;
    
    while
( ( iEntity = find_ent_by_class( iEntity, "env_tree" ) ) > 0 ) {
        entity_get_vector( iEntity, EV_VEC_origin, vOrigin );
        
        fprintf
( iFile, "%f %f %f^n", vOrigin[ 0 ], vOrigin[ 1 ], vOrigin[ 2 ] );
    }
    
    fclose
( iFile );
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Entity из Entity

Сообщение flymic24 » 27 дек 2018, 12:42

MayroN, Да, можно сделать по вашему ТЗ. К примеру сделать Елку не объёмной (что бы не застревали в ней) и в её синке через определенный интервал разбрасывать "подарки" в рандомных направлениях от ёлки как говорил Vaqtincha.
Аватара пользователя
flymic24
 
Сообщения: 209
Зарегистрирован: 05 окт 2012, 17:29
Откуда: Bryansk
Благодарил (а): 4 раз.
Поблагодарили: 76 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6


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

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

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