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

Создать зону func_friction на месте func_buyzone  [Решено]

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

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

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

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

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

Создать зону func_friction на месте func_buyzone

Сообщение radical » 14 апр 2018, 12:45

Привет. Нужно создать зону func_friction на базе команды TT. Пробовал переделывать код .cpCTRL, но не работает.
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

#pragma semicolon    1

//#define DEBUG
#define MAX_HOSTAGES    4

new g_iFakeMetaFwd_Spawn;

public 
plugin_init()    {
    
register_plugin("Replacement hostage ent""1.1"".cpCTRL");
    
unregister_forward(FM_Spawng_iFakeMetaFwd_Spawntrue);
}

public 
plugin_precache()    {
    
g_iFakeMetaFwd_Spawn register_forward(FM_Spawn"FakeMetaHook_Spawn_Post"true);

    
}

public 
FakeMetaHook_Spawn_Post(const iEntity)    {
    if(!
pev_valid(iEntity))
    {
        return 
FMRES_IGNORED;
    }

    new 
szClassName[32];
    
pev(iEntitypev_classnameszClassNamecharsmax(szClassName));

    if(
strcmp(szClassName"func_buyzone") == || strcmp(szClassName"monster_scientist") == 0)
    {
        static 
iHostagesOriginFloatfHostagesOrigin[MAX_HOSTAGES 1][3];

        
pev(iEntitypev_originfHostagesOrigin[iHostagesOrigin++]);

        
engfunc(EngFunc_RemoveEntityiEntity);

        
#if defined DEBUG
        
log_amx("Hostage has been removed (%d)"iHostagesOrigin);
        
#endif

        
if(iHostagesOrigin 0)
        {
            for(new 
iXsiXs iHostagesOriginiXs++)
            {
                
#if defined DEBUG
                
log_amx("Origin num: %d (%.2f | %.2f | %.2f)"iXsfHostagesOrigin[iXs][0], fHostagesOrigin[iXs][1], fHostagesOrigin[iXs][2]);
                
#endif

                
new pEntity engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"));

                if(!
pev_valid(pEntity))
                {
                    
#if defined DEBUG
                    
log_amx("Create entity is not valid.");
                    
#endif

                    
return PLUGIN_HANDLED;    
                }

                
set_pev(pEntitypev_originfHostagesOrigin[iXs]);
                
set_pev(pEntitypev_classname"func_friction");
                
                
set_pev(pEntitypev_movetypeMOVETYPE_NONE);
                    
                
#if defined DEBUG
                
log_amx("func_friction. Origins: (%.2f | %.2f | %.2f)"fHostagesOrigin[iXs][0], fHostagesOrigin[iXs][1], fHostagesOrigin[iXs][2]);
                
#endif
            
}
        }
    }



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

Re: Создать зону func_friction на месте func_buyzone

Сообщение DeMNiX » 15 апр 2018, 01:07

Код: Выделить всё
new pEntity engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target")); 


наверное надо создать не info_target, а func_friction и использовать ExecuteHam(Ham_Spawn, pEntity) на объекте, чтобы создать его с параметрами хар-ыми для данного класса? ибо без хам_спаун'а ваш объект простая пустышка без каких-либо особенностей
Работа с моделями для кс 1.6
Telegram @DeMNiX
vk com/sbalburov
Аватара пользователя
DeMNiX
 
Сообщения: 177
Зарегистрирован: 24 сен 2011, 17:48
Благодарил (а): 25 раз.
Поблагодарили: 37 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Создать зону func_friction на месте func_buyzone

Сообщение spree » 15 апр 2018, 02:15

Получаем размеры entity func_buyzone и положение
Код: Выделить всё
new Float:eSize[3], Float:eOrigin[3]
pev(ent, pev_size, eSize)
get_brush_entity_origin(ent, eOrigin)
server_print("SIZE ENTITY: %f %f %f", eSize[0], eSize[1], eSize[2])
server_print("ENTITY ORIGIN: %f %f %f", eOrigin[0], eOrigin[1], eOrigin[2]) 

Создаём зону func_friction с полученными координатами и размерами.

Пытался получить значение team из func_buyzone с помощью get_kvd чтобы знать где спавнить func_friction, сервер крашится...
Аватара пользователя
spree
 
Сообщения: 708
Зарегистрирован: 05 дек 2013, 15:01
Благодарил (а): 67 раз.
Поблагодарили: 128 раз.
Языки программирования: PAWN

Re: Создать зону func_friction на месте func_buyzone

Сообщение Vaqtincha » 15 апр 2018, 10:01

spree,
Пытался получить значение team из func_buyzone с помощью get_kvd

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

Re: Создать зону func_friction на месте func_buyzone  [Решено]

Сообщение spree » 15 апр 2018, 13:00

Vaqtincha писал(а):spree,
Пытался получить значение team из func_buyzone с помощью get_kvd

получай через pev_team

Вчера пытался, не правильно делал.
new bz_team
pev(ent, pev_team, bz_team)
client_print team %d в итоге получал кучу цифр различных.

Сегодня переделал.
new bz_team[32]
pev(ent, pev_team, bz_team, 31)
client_print team %s, получил значения зон 1 и 2, всё ок.

radical короче вот уже готовый код, осталось только создать entity.
Код: Выделить всё
new ent = -1
while((ent = find_ent_by_class(ent, "func_buyzone"))){

new bz_team[32]
pev(ent, pev_team, bz_team, 31)
    
if(equal(bz_team, "1")){
new Float:eSize[3], Float:eOrigin[3]
pev(ent, pev_size, eSize)
get_brush_entity_origin(ent, eOrigin)
}
Аватара пользователя
spree
 
Сообщения: 708
Зарегистрирован: 05 дек 2013, 15:01
Благодарил (а): 67 раз.
Поблагодарили: 128 раз.
Языки программирования: PAWN


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

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

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